From ca7a5f3414356492e3fbbb7c1f87a0b82ac39c92 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 6 Jun 2015 18:13:35 +0200 Subject: [PATCH] Add dpf as real dir --- dpf/LICENSE | 13 + dpf/README.md | 32 + dpf/dgl/Application.hpp | 91 + dpf/dgl/Base.hpp | 195 + dpf/dgl/Color.hpp | 110 + dpf/dgl/Geometry.hpp | 750 + dpf/dgl/Image.hpp | 147 + dpf/dgl/ImageAboutWindow.hpp | 23 + dpf/dgl/ImageButton.hpp | 23 + dpf/dgl/ImageKnob.hpp | 23 + dpf/dgl/ImageSlider.hpp | 23 + dpf/dgl/ImageSwitch.hpp | 23 + dpf/dgl/ImageWidgets.hpp | 271 + dpf/dgl/Makefile | 81 + dpf/dgl/Makefile.mk | 132 + dpf/dgl/NanoVG.hpp | 917 + dpf/dgl/NanoWidgets.hpp | 67 + dpf/dgl/StandaloneWindow.hpp | 61 + dpf/dgl/Widget.hpp | 385 + dpf/dgl/Window.hpp | 134 + dpf/dgl/src/Application.cpp | 75 + dpf/dgl/src/ApplicationPrivateData.hpp | 71 + dpf/dgl/src/Color.cpp | 245 + dpf/dgl/src/Common.hpp | 129 + dpf/dgl/src/Geometry.cpp | 1072 + dpf/dgl/src/Image.cpp | 192 + dpf/dgl/src/ImageWidgets.cpp | 1094 + dpf/dgl/src/NanoVG.cpp | 931 + dpf/dgl/src/NanoWidgets.cpp | 146 + dpf/dgl/src/Widget.cpp | 253 + dpf/dgl/src/WidgetPrivateData.hpp | 133 + dpf/dgl/src/Window.cpp | 1240 + dpf/dgl/src/nanovg/LICENSE.txt | 18 + dpf/dgl/src/nanovg/fontstash.h | 1691 + dpf/dgl/src/nanovg/nanovg.c | 2752 + dpf/dgl/src/nanovg/nanovg.h | 620 + dpf/dgl/src/nanovg/nanovg_gl.h | 1525 + dpf/dgl/src/nanovg/nanovg_gl_utils.h | 132 + dpf/dgl/src/nanovg/stb_image.h | 4648 + dpf/dgl/src/nanovg/stb_truetype.h | 2081 + dpf/dgl/src/oui-blendish/LICENSE | 21 + dpf/dgl/src/oui-blendish/blendish.h | 2399 + .../src/oui-blendish/blendish_resources.cpp | 24815 +++++ dpf/dgl/src/oui-blendish/blendish_resources.h | 15 + dpf/dgl/src/oui-blendish/oui.h | 2025 + .../src/oui-blendish/resources/DejaVuSans.ttf | Bin 0 -> 741536 bytes .../resources/LICENSE-DejaVuSans.ttf.txt | 97 + .../resources/LICENSE-blender_icons.svg.txt | 280 + .../oui-blendish/resources/blender_icons.svg | 88974 ++++++++++++++++ .../resources/blender_icons16.png | Bin 0 -> 250706 bytes dpf/dgl/src/pugl/common.h | 121 + dpf/dgl/src/pugl/event.h | 41 + dpf/dgl/src/pugl/gl.h | 32 + dpf/dgl/src/pugl/glu.h | 32 + dpf/dgl/src/pugl/pugl.h | 383 + dpf/dgl/src/pugl/pugl_internal.h | 352 + dpf/dgl/src/pugl/pugl_osx.m | 573 + dpf/dgl/src/pugl/pugl_win.cpp | 481 + dpf/dgl/src/pugl/pugl_x11.c | 609 + dpf/dgl/src/sofd/libsofd.c | 2431 + dpf/dgl/src/sofd/libsofd.h | 175 + dpf/distrho/DistrhoInfo.hpp | 571 + dpf/distrho/DistrhoPlugin.hpp | 720 + dpf/distrho/DistrhoPluginMain.cpp | 30 + dpf/distrho/DistrhoUI.hpp | 209 + dpf/distrho/DistrhoUIMain.cpp | 29 + dpf/distrho/DistrhoUtils.hpp | 233 + dpf/distrho/extra/Base64.hpp | 127 + dpf/distrho/extra/LeakDetector.hpp | 141 + dpf/distrho/extra/Mutex.hpp | 274 + dpf/distrho/extra/ScopedPointer.hpp | 230 + dpf/distrho/extra/Sleep.hpp | 68 + dpf/distrho/extra/String.hpp | 840 + dpf/distrho/extra/Thread.hpp | 290 + dpf/distrho/src/DistrhoDefines.h | 134 + dpf/distrho/src/DistrhoPlugin.cpp | 141 + dpf/distrho/src/DistrhoPluginCarla.cpp | 480 + dpf/distrho/src/DistrhoPluginChecks.h | 109 + dpf/distrho/src/DistrhoPluginInternal.hpp | 553 + dpf/distrho/src/DistrhoPluginJack.cpp | 523 + dpf/distrho/src/DistrhoPluginLADSPA+DSSI.cpp | 711 + dpf/distrho/src/DistrhoPluginLV2.cpp | 1107 + dpf/distrho/src/DistrhoPluginLV2export.cpp | 431 + dpf/distrho/src/DistrhoPluginVST.cpp | 1125 + dpf/distrho/src/DistrhoUI.cpp | 123 + dpf/distrho/src/DistrhoUIDSSI.cpp | 511 + dpf/distrho/src/DistrhoUIInternal.hpp | 393 + dpf/distrho/src/DistrhoUILV2.cpp | 536 + dpf/distrho/src/dssi/dssi.h | 441 + dpf/distrho/src/dssi/seq_event-compat.h | 272 + dpf/distrho/src/ladspa/ladspa.h | 603 + dpf/distrho/src/lv2/atom-forge.h | 747 + dpf/distrho/src/lv2/atom-helpers.h | 249 + dpf/distrho/src/lv2/atom-util.h | 446 + dpf/distrho/src/lv2/atom.h | 246 + dpf/distrho/src/lv2/buf-size.h | 30 + dpf/distrho/src/lv2/data-access.h | 63 + dpf/distrho/src/lv2/dynmanifest.h | 144 + dpf/distrho/src/lv2/event-helpers.h | 266 + dpf/distrho/src/lv2/event.h | 294 + dpf/distrho/src/lv2/instance-access.h | 37 + dpf/distrho/src/lv2/log.h | 99 + dpf/distrho/src/lv2/logger.h | 146 + dpf/distrho/src/lv2/lv2-midifunctions.h | 98 + dpf/distrho/src/lv2/lv2-miditype.h | 175 + dpf/distrho/src/lv2/lv2.h | 458 + dpf/distrho/src/lv2/lv2_external_ui.h | 109 + dpf/distrho/src/lv2/lv2_kxstudio_properties.h | 33 + dpf/distrho/src/lv2/lv2_programs.h | 174 + dpf/distrho/src/lv2/lv2_rtmempool.h | 119 + dpf/distrho/src/lv2/midi.h | 226 + dpf/distrho/src/lv2/morph.h | 34 + dpf/distrho/src/lv2/options.h | 132 + dpf/distrho/src/lv2/parameters.h | 49 + dpf/distrho/src/lv2/patch.h | 56 + dpf/distrho/src/lv2/port-groups.h | 64 + dpf/distrho/src/lv2/port-props.h | 42 + dpf/distrho/src/lv2/presets.h | 34 + dpf/distrho/src/lv2/resize-port.h | 72 + dpf/distrho/src/lv2/state.h | 352 + dpf/distrho/src/lv2/time.h | 49 + dpf/distrho/src/lv2/ui.h | 430 + dpf/distrho/src/lv2/units.h | 62 + dpf/distrho/src/lv2/uri-map.h | 98 + dpf/distrho/src/lv2/urid.h | 129 + dpf/distrho/src/lv2/worker.h | 158 + dpf/distrho/src/vestige/aeffectx.h | 275 + dpf/dpf.doxygen | 302 + dpf/dpf.kdev4 | 9 + dpf/lac/2014-small-talk.odp | Bin 0 -> 381315 bytes dpf/utils/README-DPF-Windows.txt | 13 + dpf/utils/generate-ttl.sh | 33 + dpf/utils/generate-vst-bundles.sh | 33 + dpf/utils/lv2-ttl-generator/GNUmakefile | 19 + .../lv2-ttl-generator/lv2_ttl_generator.c | 89 + dpf/utils/pack-win-dlls.sh | 54 + dpf/utils/plugin.vst/Contents/Info.plist | 24 + dpf/utils/plugin.vst/Contents/MacOS/deleteme | 1 + dpf/utils/plugin.vst/Contents/PkgInfo | 1 + .../plugin.vst/Contents/Resources/empty.lproj | 0 dpf/utils/png2rgba.py | 157 + 141 files changed, 165290 insertions(+) create mode 100644 dpf/LICENSE create mode 100644 dpf/README.md create mode 100644 dpf/dgl/Application.hpp create mode 100644 dpf/dgl/Base.hpp create mode 100644 dpf/dgl/Color.hpp create mode 100644 dpf/dgl/Geometry.hpp create mode 100644 dpf/dgl/Image.hpp create mode 100644 dpf/dgl/ImageAboutWindow.hpp create mode 100644 dpf/dgl/ImageButton.hpp create mode 100644 dpf/dgl/ImageKnob.hpp create mode 100644 dpf/dgl/ImageSlider.hpp create mode 100644 dpf/dgl/ImageSwitch.hpp create mode 100644 dpf/dgl/ImageWidgets.hpp create mode 100644 dpf/dgl/Makefile create mode 100644 dpf/dgl/Makefile.mk create mode 100644 dpf/dgl/NanoVG.hpp create mode 100644 dpf/dgl/NanoWidgets.hpp create mode 100644 dpf/dgl/StandaloneWindow.hpp create mode 100644 dpf/dgl/Widget.hpp create mode 100644 dpf/dgl/Window.hpp create mode 100644 dpf/dgl/src/Application.cpp create mode 100644 dpf/dgl/src/ApplicationPrivateData.hpp create mode 100644 dpf/dgl/src/Color.cpp create mode 100644 dpf/dgl/src/Common.hpp create mode 100644 dpf/dgl/src/Geometry.cpp create mode 100644 dpf/dgl/src/Image.cpp create mode 100644 dpf/dgl/src/ImageWidgets.cpp create mode 100644 dpf/dgl/src/NanoVG.cpp create mode 100644 dpf/dgl/src/NanoWidgets.cpp create mode 100644 dpf/dgl/src/Widget.cpp create mode 100644 dpf/dgl/src/WidgetPrivateData.hpp create mode 100644 dpf/dgl/src/Window.cpp create mode 100644 dpf/dgl/src/nanovg/LICENSE.txt create mode 100644 dpf/dgl/src/nanovg/fontstash.h create mode 100644 dpf/dgl/src/nanovg/nanovg.c create mode 100644 dpf/dgl/src/nanovg/nanovg.h create mode 100644 dpf/dgl/src/nanovg/nanovg_gl.h create mode 100644 dpf/dgl/src/nanovg/nanovg_gl_utils.h create mode 100644 dpf/dgl/src/nanovg/stb_image.h create mode 100644 dpf/dgl/src/nanovg/stb_truetype.h create mode 100644 dpf/dgl/src/oui-blendish/LICENSE create mode 100644 dpf/dgl/src/oui-blendish/blendish.h create mode 100644 dpf/dgl/src/oui-blendish/blendish_resources.cpp create mode 100644 dpf/dgl/src/oui-blendish/blendish_resources.h create mode 100644 dpf/dgl/src/oui-blendish/oui.h create mode 100644 dpf/dgl/src/oui-blendish/resources/DejaVuSans.ttf create mode 100644 dpf/dgl/src/oui-blendish/resources/LICENSE-DejaVuSans.ttf.txt create mode 100644 dpf/dgl/src/oui-blendish/resources/LICENSE-blender_icons.svg.txt create mode 100644 dpf/dgl/src/oui-blendish/resources/blender_icons.svg create mode 100644 dpf/dgl/src/oui-blendish/resources/blender_icons16.png create mode 100644 dpf/dgl/src/pugl/common.h create mode 100644 dpf/dgl/src/pugl/event.h create mode 100644 dpf/dgl/src/pugl/gl.h create mode 100644 dpf/dgl/src/pugl/glu.h create mode 100644 dpf/dgl/src/pugl/pugl.h create mode 100644 dpf/dgl/src/pugl/pugl_internal.h create mode 100644 dpf/dgl/src/pugl/pugl_osx.m create mode 100644 dpf/dgl/src/pugl/pugl_win.cpp create mode 100644 dpf/dgl/src/pugl/pugl_x11.c create mode 100644 dpf/dgl/src/sofd/libsofd.c create mode 100644 dpf/dgl/src/sofd/libsofd.h create mode 100644 dpf/distrho/DistrhoInfo.hpp create mode 100644 dpf/distrho/DistrhoPlugin.hpp create mode 100644 dpf/distrho/DistrhoPluginMain.cpp create mode 100644 dpf/distrho/DistrhoUI.hpp create mode 100644 dpf/distrho/DistrhoUIMain.cpp create mode 100644 dpf/distrho/DistrhoUtils.hpp create mode 100644 dpf/distrho/extra/Base64.hpp create mode 100644 dpf/distrho/extra/LeakDetector.hpp create mode 100644 dpf/distrho/extra/Mutex.hpp create mode 100644 dpf/distrho/extra/ScopedPointer.hpp create mode 100644 dpf/distrho/extra/Sleep.hpp create mode 100644 dpf/distrho/extra/String.hpp create mode 100644 dpf/distrho/extra/Thread.hpp create mode 100644 dpf/distrho/src/DistrhoDefines.h create mode 100644 dpf/distrho/src/DistrhoPlugin.cpp create mode 100644 dpf/distrho/src/DistrhoPluginCarla.cpp create mode 100644 dpf/distrho/src/DistrhoPluginChecks.h create mode 100644 dpf/distrho/src/DistrhoPluginInternal.hpp create mode 100644 dpf/distrho/src/DistrhoPluginJack.cpp create mode 100644 dpf/distrho/src/DistrhoPluginLADSPA+DSSI.cpp create mode 100644 dpf/distrho/src/DistrhoPluginLV2.cpp create mode 100644 dpf/distrho/src/DistrhoPluginLV2export.cpp create mode 100644 dpf/distrho/src/DistrhoPluginVST.cpp create mode 100644 dpf/distrho/src/DistrhoUI.cpp create mode 100644 dpf/distrho/src/DistrhoUIDSSI.cpp create mode 100644 dpf/distrho/src/DistrhoUIInternal.hpp create mode 100644 dpf/distrho/src/DistrhoUILV2.cpp create mode 100644 dpf/distrho/src/dssi/dssi.h create mode 100644 dpf/distrho/src/dssi/seq_event-compat.h create mode 100644 dpf/distrho/src/ladspa/ladspa.h create mode 100644 dpf/distrho/src/lv2/atom-forge.h create mode 100644 dpf/distrho/src/lv2/atom-helpers.h create mode 100644 dpf/distrho/src/lv2/atom-util.h create mode 100644 dpf/distrho/src/lv2/atom.h create mode 100644 dpf/distrho/src/lv2/buf-size.h create mode 100644 dpf/distrho/src/lv2/data-access.h create mode 100644 dpf/distrho/src/lv2/dynmanifest.h create mode 100644 dpf/distrho/src/lv2/event-helpers.h create mode 100644 dpf/distrho/src/lv2/event.h create mode 100644 dpf/distrho/src/lv2/instance-access.h create mode 100644 dpf/distrho/src/lv2/log.h create mode 100644 dpf/distrho/src/lv2/logger.h create mode 100644 dpf/distrho/src/lv2/lv2-midifunctions.h create mode 100644 dpf/distrho/src/lv2/lv2-miditype.h create mode 100644 dpf/distrho/src/lv2/lv2.h create mode 100755 dpf/distrho/src/lv2/lv2_external_ui.h create mode 100644 dpf/distrho/src/lv2/lv2_kxstudio_properties.h create mode 100644 dpf/distrho/src/lv2/lv2_programs.h create mode 100644 dpf/distrho/src/lv2/lv2_rtmempool.h create mode 100644 dpf/distrho/src/lv2/midi.h create mode 100644 dpf/distrho/src/lv2/morph.h create mode 100644 dpf/distrho/src/lv2/options.h create mode 100644 dpf/distrho/src/lv2/parameters.h create mode 100644 dpf/distrho/src/lv2/patch.h create mode 100644 dpf/distrho/src/lv2/port-groups.h create mode 100644 dpf/distrho/src/lv2/port-props.h create mode 100644 dpf/distrho/src/lv2/presets.h create mode 100644 dpf/distrho/src/lv2/resize-port.h create mode 100644 dpf/distrho/src/lv2/state.h create mode 100644 dpf/distrho/src/lv2/time.h create mode 100644 dpf/distrho/src/lv2/ui.h create mode 100644 dpf/distrho/src/lv2/units.h create mode 100644 dpf/distrho/src/lv2/uri-map.h create mode 100644 dpf/distrho/src/lv2/urid.h create mode 100644 dpf/distrho/src/lv2/worker.h create mode 100644 dpf/distrho/src/vestige/aeffectx.h create mode 100644 dpf/dpf.doxygen create mode 100644 dpf/dpf.kdev4 create mode 100644 dpf/lac/2014-small-talk.odp create mode 100644 dpf/utils/README-DPF-Windows.txt create mode 100755 dpf/utils/generate-ttl.sh create mode 100755 dpf/utils/generate-vst-bundles.sh create mode 100644 dpf/utils/lv2-ttl-generator/GNUmakefile create mode 100644 dpf/utils/lv2-ttl-generator/lv2_ttl_generator.c create mode 100755 dpf/utils/pack-win-dlls.sh create mode 100644 dpf/utils/plugin.vst/Contents/Info.plist create mode 100644 dpf/utils/plugin.vst/Contents/MacOS/deleteme create mode 100644 dpf/utils/plugin.vst/Contents/PkgInfo create mode 100644 dpf/utils/plugin.vst/Contents/Resources/empty.lproj create mode 100755 dpf/utils/png2rgba.py diff --git a/dpf/LICENSE b/dpf/LICENSE new file mode 100644 index 0000000..6ecc24c --- /dev/null +++ b/dpf/LICENSE @@ -0,0 +1,13 @@ +DISTRHO Plugin Framework (DPF) +Copyright (C) 2012-2014 Filipe Coelho + +Permission to use, copy, modify, and/or distribute this software for any purpose with +or without fee is hereby granted, provided that the above copyright notice and this +permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN +NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/dpf/README.md b/dpf/README.md new file mode 100644 index 0000000..08ff3a1 --- /dev/null +++ b/dpf/README.md @@ -0,0 +1,32 @@ +# DPF - DISTRHO Plugin Framework + +DPF is designed to make development of new plugins an easy and enjoyable task.
+It allows developers to create plugins with custom UIs using a simple C++ API.
+The framework facilitates exporting various different plugin formats from the same code-base.
+ +DPF can build for LADSPA, DSSI, LV2 and VST formats.
+LADSPA, DSSI and VST implementations are complete, LV2 at ~95% completion.
+A JACK/Standalone mode is also available, allowing you to quickly test plugins.
+ +Plugin DSP and UI communication is done via key-value string pairs.
+You send messages from the UI to the DSP side, which is automatically saved in the host when required.
+ +Getting time information from the host is possible.
+It uses the same format as the JACK Transport API, making porting some code easier.
+ + +List of plugins made with DPF:
+ - [DISTRHO Mini-Series](https://github.com/DISTRHO/Mini-Series) + - [DISTRHO MVerb](https://github.com/DISTRHO/MVerb) + - [DISTRHO Nekobi](https://github.com/DISTRHO/Nekobi) + - [DISTRHO ProM](https://github.com/DISTRHO/ProM) + - [DISTRHO ndc Plugs](https://github.com/DISTRHO/ndc-Plugs) + - [Juice Plugins](https://github.com/DISTRHO/JuicePlugins) (work in progress) + - [ZamAudio Suite](https://github.com/zamaudio/zam-plugins) + + +Plugin examples are available [here](https://github.com/DISTRHO/plugin-examples).
+OpenGL UI examples are available [here](https://github.com/DISTRHO/gl-examples). + + +Online documentation is available at [https://distrho.github.io/DPF/](https://distrho.github.io/DPF/). diff --git a/dpf/dgl/Application.hpp b/dpf/dgl/Application.hpp new file mode 100644 index 0000000..03d003b --- /dev/null +++ b/dpf/dgl/Application.hpp @@ -0,0 +1,91 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_APP_HPP_INCLUDED +#define DGL_APP_HPP_INCLUDED + +#include "Base.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- +// Forward class names + +class Window; + +// ----------------------------------------------------------------------- + +/** + Base DGL Application class. + + One application instance is required for creating a window. + There's no single/global application instance in DGL, and multiple + windows can share the same app instance. + + In standalone mode an application will automatically quit its + event-loop when all its windows are closed. + */ +class Application +{ +public: + /** + Constructor. + */ + Application(); + + /** + Destructor. + */ + ~Application(); + + /** + Idle function. + This runs the application event-loop once. + */ + void idle(); + + /** + Run the application event-loop until all Windows are closed. + idle() is called at regular intervals. + @note This function is meant for standalones only, *never* call this from plugins. + */ + void exec(); + + /** + Quit the application. + This stops the event-loop and closes all Windows. + */ + void quit(); + + /** + Check if the application is about to quit. + Returning true means there's no event-loop running at the moment (or it's just about to stop). + */ + bool isQuiting() const noexcept; + +private: + struct PrivateData; + PrivateData* const pData; + friend class Window; + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Application) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_APP_HPP_INCLUDED diff --git a/dpf/dgl/Base.hpp b/dpf/dgl/Base.hpp new file mode 100644 index 0000000..71a0ec3 --- /dev/null +++ b/dpf/dgl/Base.hpp @@ -0,0 +1,195 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_BASE_HPP_INCLUDED +#define DGL_BASE_HPP_INCLUDED + +#include "../distrho/extra/LeakDetector.hpp" +#include "../distrho/extra/ScopedPointer.hpp" + +// ----------------------------------------------------------------------- +// Define namespace + +#ifndef DGL_NAMESPACE +# define DGL_NAMESPACE DGL +#endif + +#define START_NAMESPACE_DGL namespace DGL_NAMESPACE { +#define END_NAMESPACE_DGL } +#define USE_NAMESPACE_DGL using namespace DGL_NAMESPACE; + +#ifdef DISTRHO_OS_WINDOWS +// ----------------------------------------------------------------------- +// Fix OpenGL includes for Windows, based on glfw code + +#ifndef APIENTRY +# define APIENTRY __stdcall +#endif // APIENTRY + +/* We need WINGDIAPI defined */ +#ifndef WINGDIAPI +# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__POCC__) +# define WINGDIAPI __declspec(dllimport) +# elif defined(__LCC__) +# define WINGDIAPI __stdcall +# else +# define WINGDIAPI extern +# endif +# define DGL_WINGDIAPI_DEFINED +#endif // WINGDIAPI + +/* Some files also need CALLBACK defined */ +#ifndef CALLBACK +# if defined(_MSC_VER) +# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +# else +# define CALLBACK __stdcall +# endif +# define DGL_CALLBACK_DEFINED +#endif // CALLBACK + +/* Most GL/glu.h variants on Windows need wchar_t */ +#include + +#endif // DISTRHO_OS_WINDOWS + +// ----------------------------------------------------------------------- +// OpenGL includes + +#ifdef DISTRHO_OS_MAC +# include "OpenGL/gl.h" +#else +# define GL_GLEXT_PROTOTYPES +# include "GL/gl.h" +# include "GL/glext.h" +#endif + +// ----------------------------------------------------------------------- +// Missing OpenGL defines + +#if defined(GL_BGR_EXT) && ! defined(GL_BGR) +# define GL_BGR GL_BGR_EXT +#endif + +#if defined(GL_BGRA_EXT) && ! defined(GL_BGRA) +# define GL_BGRA GL_BGRA_EXT +#endif + +#ifndef GL_CLAMP_TO_BORDER +# define GL_CLAMP_TO_BORDER 0x812D +#endif + +#ifdef DISTRHO_OS_WINDOWS +// ----------------------------------------------------------------------- +// Fix OpenGL includes for Windows, based on glfw code + +#ifdef DGL_WINGDIAPI_DEFINED +# undef WINGDIAPI +# undef DGL_WINGDIAPI_DEFINED +#endif + +#ifdef DGL_CALLBACK_DEFINED +# undef CALLBACK +# undef DGL_CALLBACK_DEFINED +#endif + +#endif // DISTRHO_OS_WINDOWS + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- +// Base DGL enums + +/** + Convenience symbols for ASCII control characters. + */ +enum Char { + kCharBackspace = 0x08, + kCharEscape = 0x1B, + kCharDelete = 0x7F +}; + +/** + Keyboard modifier flags. + */ +enum Modifier { + kModifierShift = 1 << 0, /**< Shift key */ + kModifierControl = 1 << 1, /**< Control key */ + kModifierAlt = 1 << 2, /**< Alt/Option key */ + kModifierSuper = 1 << 3 /**< Mod4/Command/Windows key */ +}; + +/** + Special (non-Unicode) keyboard keys. + */ +enum Key { + kKeyF1 = 1, + kKeyF2, + kKeyF3, + kKeyF4, + kKeyF5, + kKeyF6, + kKeyF7, + kKeyF8, + kKeyF9, + kKeyF10, + kKeyF11, + kKeyF12, + kKeyLeft, + kKeyUp, + kKeyRight, + kKeyDown, + kKeyPageUp, + kKeyPageDown, + kKeyHome, + kKeyEnd, + kKeyInsert, + kKeyShift, + kKeyControl, + kKeyAlt, + kKeySuper +}; + +// ----------------------------------------------------------------------- +// Base DGL classes + +/** + Idle callback. + */ +class IdleCallback +{ +public: + virtual ~IdleCallback() {} + virtual void idleCallback() = 0; +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#ifndef DONT_SET_USING_DGL_NAMESPACE + // If your code uses a lot of DGL classes, then this will obviously save you + // a lot of typing, but can be disabled by setting DONT_SET_USING_DGL_NAMESPACE. + using namespace DGL_NAMESPACE; +#endif + +// ----------------------------------------------------------------------- + +#endif // DGL_BASE_HPP_INCLUDED diff --git a/dpf/dgl/Color.hpp b/dpf/dgl/Color.hpp new file mode 100644 index 0000000..e7a0a40 --- /dev/null +++ b/dpf/dgl/Color.hpp @@ -0,0 +1,110 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_COLOR_HPP_INCLUDED +#define DGL_COLOR_HPP_INCLUDED + +#include "Base.hpp" + +struct NVGcolor; + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +/** + A color made from red, green, blue and alpha floating-point values in [0..1] range. +*/ +struct Color { + /** + Direct access to the color values. + */ + union { + float rgba[4]; + struct { float red, green, blue, alpha; }; + }; + + /** + Create solid black color. + */ + Color() noexcept; + + /** + Create a color from red, green, blue and alpha numeric values. + Values must be in [0..255] range. + */ + Color(int red, int green, int blue, int alpha = 255) noexcept; + + /** + Create a color from red, green, blue and alpha floating-point values. + Values must in [0..1] range. + */ + Color(float red, float green, float blue, float alpha = 1.0f) noexcept; + + /** + Create a color by copying another color. + */ + Color(const Color& color) noexcept; + Color& operator=(const Color& color) noexcept; + + /** + Create a color by linearly interpolating two other colors. + */ + Color(const Color& color1, const Color& color2, float u) noexcept; + + /** + Create a color specified by hue, saturation and lightness. + Values must in [0..1] range. + */ + static Color fromHSL(float hue, float saturation, float lightness, float alpha = 1.0f); + + /** + Create a color from a HTML string like "#333" or "#112233". + */ + static Color fromHTML(const char* rgb, float alpha = 1.0f); + + /** + Linearly interpolate this color against another. + */ + void interpolate(const Color& other, float u) noexcept; + + /** + Check if this color matches another. + @note Comparison is forced within 8-bit color values. + */ + bool isEqual(const Color& color, bool withAlpha = true) noexcept; + bool isNotEqual(const Color& color, bool withAlpha = true) noexcept; + bool operator==(const Color& color) noexcept; + bool operator!=(const Color& color) noexcept; + + /** + Fix color bounds if needed. + */ + void fixBounds() noexcept; + + /** + @internal + Needed for NanoVG compatibility. + */ + Color(const NVGcolor&) noexcept; + operator NVGcolor() const noexcept; +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_COLOR_HPP_INCLUDED diff --git a/dpf/dgl/Geometry.hpp b/dpf/dgl/Geometry.hpp new file mode 100644 index 0000000..a7ec43b --- /dev/null +++ b/dpf/dgl/Geometry.hpp @@ -0,0 +1,750 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_GEOMETRY_HPP_INCLUDED +#define DGL_GEOMETRY_HPP_INCLUDED + +#include "Base.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- +// Forward class names + +template class Line; +template class Circle; +template class Triangle; +template class Rectangle; + +// ----------------------------------------------------------------------- + +/** + DGL Point class. + + This class describes a single point in space, defined by an X and Y value. + */ +template +class Point +{ +public: + /** + Constructor for (0, 0) point. + */ + Point() noexcept; + + /** + Constructor using custom X and Y values. + */ + Point(const T& x, const T& y) noexcept; + + /** + Constructor using another Point class values. + */ + Point(const Point& pos) noexcept; + + /** + Get X value. + */ + const T& getX() const noexcept; + + /** + Get Y value. + */ + const T& getY() const noexcept; + + /** + Set X value to @a x. + */ + void setX(const T& x) noexcept; + + /** + Set Y value to @a y. + */ + void setY(const T& y) noexcept; + + /** + Set X and Y values to @a x and @a y respectively. + */ + void setPos(const T& x, const T& y) noexcept; + + /** + Set X and Y values according to @a pos. + */ + void setPos(const Point& pos) noexcept; + + /** + Move this point by @a x and @a y values. + */ + void moveBy(const T& x, const T& y) noexcept; + + /** + Move this point by @a pos. + */ + void moveBy(const Point& pos) noexcept; + + /** + Return true if point is (0, 0). + */ + bool isZero() const noexcept; + + /** + Return true if point is not (0, 0). + */ + bool isNotZero() const noexcept; + + Point operator+(const Point& pos) noexcept; + Point operator-(const Point& pos) noexcept; + Point& operator=(const Point& pos) noexcept; + Point& operator+=(const Point& pos) noexcept; + Point& operator-=(const Point& pos) noexcept; + bool operator==(const Point& pos) const noexcept; + bool operator!=(const Point& pos) const noexcept; + +private: + T fX, fY; + template friend class Line; + template friend class Circle; + template friend class Triangle; + template friend class Rectangle; +}; + +// ----------------------------------------------------------------------- + +/** + DGL Size class. + + This class describes a size, defined by a width and height value. + */ +template +class Size +{ +public: + /** + Constructor for null size (0x0). + */ + Size() noexcept; + + /** + Constructor using custom width and height values. + */ + Size(const T& width, const T& height) noexcept; + + /** + Constructor using another Size class values. + */ + Size(const Size& size) noexcept; + + /** + Get width. + */ + const T& getWidth() const noexcept; + + /** + Get height. + */ + const T& getHeight() const noexcept; + + /** + Set width. + */ + void setWidth(const T& width) noexcept; + + /** + Set height. + */ + void setHeight(const T& height) noexcept; + + /** + Set size to @a width and @a height. + */ + void setSize(const T& width, const T& height) noexcept; + + /** + Set size. + */ + void setSize(const Size& size) noexcept; + + /** + Grow size by @a multiplier. + */ + void growBy(double multiplier) noexcept; + + /** + Shrink size by @a divider. + */ + void shrinkBy(double divider) noexcept; + + /** + Return true if size is null (0x0). + An null size is also invalid. + */ + bool isNull() const noexcept; + + /** + Return true if size is not null (0x0). + A non-null size is still invalid if its width or height is negative. + */ + bool isNotNull() const noexcept; + + /** + Return true if size is valid (width and height are higher than zero). + */ + bool isValid() const noexcept; + + /** + Return true if size is invalid (width or height are lower or equal to zero). + An invalid size might not be null under some circumstances. + */ + bool isInvalid() const noexcept; + + Size operator+(const Size& size) noexcept; + Size operator-(const Size& size) noexcept; + Size& operator=(const Size& size) noexcept; + Size& operator+=(const Size& size) noexcept; + Size& operator-=(const Size& size) noexcept; + Size& operator*=(double m) noexcept; + Size& operator/=(double d) noexcept; + bool operator==(const Size& size) const noexcept; + bool operator!=(const Size& size) const noexcept; + +private: + T fWidth, fHeight; + template friend class Rectangle; +}; + +// ----------------------------------------------------------------------- + +/** + DGL Line class. + + This class describes a line, defined by two points. + */ +template +class Line +{ +public: + /** + Constructor for a null line ([0,0] to [0,0]). + */ + Line() noexcept; + + /** + Constructor using custom start X, start Y, end X and end Y values. + */ + Line(const T& startX, const T& startY, const T& endX, const T& endY) noexcept; + + /** + Constructor using custom start X, start Y and end pos values. + */ + Line(const T& startX, const T& startY, const Point& endPos) noexcept; + + /** + Constructor using custom start pos, end X and end Y values. + */ + Line(const Point& startPos, const T& endX, const T& endY) noexcept; + + /** + Constructor using custom start and end pos values. + */ + Line(const Point& startPos, const Point& endPos) noexcept; + + /** + Constructor using another Line class values. + */ + Line(const Line& line) noexcept; + + /** + Get start X value. + */ + const T& getStartX() const noexcept; + + /** + Get start Y value. + */ + const T& getStartY() const noexcept; + + /** + Get end X value. + */ + const T& getEndX() const noexcept; + + /** + Get end Y value. + */ + const T& getEndY() const noexcept; + + /** + Get start position. + */ + const Point& getStartPos() const noexcept; + + /** + Get end position. + */ + const Point& getEndPos() const noexcept; + + /** + Set start X value to @a x. + */ + void setStartX(const T& x) noexcept; + + /** + Set start Y value to @a y. + */ + void setStartY(const T& y) noexcept; + + /** + Set start X and Y values to @a x and @a y respectively. + */ + void setStartPos(const T& x, const T& y) noexcept; + + /** + Set start X and Y values according to @a pos. + */ + void setStartPos(const Point& pos) noexcept; + + /** + Set end X value to @a x. + */ + void setEndX(const T& x) noexcept; + + /** + Set end Y value to @a y. + */ + void setEndY(const T& y) noexcept; + + /** + Set end X and Y values to @a x and @a y respectively. + */ + void setEndPos(const T& x, const T& y) noexcept; + + /** + Set end X and Y values according to @a pos. + */ + void setEndPos(const Point& pos) noexcept; + + /** + Move this line by @a x and @a y values. + */ + void moveBy(const T& x, const T& y) noexcept; + + /** + Move this line by @a pos. + */ + void moveBy(const Point& pos) noexcept; + + /** + Draw this line using the current OpenGL state. + */ + void draw(); + + /** + Return true if line is null (start and end pos are equal). + */ + bool isNull() const noexcept; + + /** + Return true if line is not null (start and end pos are different). + */ + bool isNotNull() const noexcept; + + Line& operator=(const Line& line) noexcept; + bool operator==(const Line& line) const noexcept; + bool operator!=(const Line& line) const noexcept; + +private: + Point fPosStart, fPosEnd; +}; + +// ----------------------------------------------------------------------- + +/** + DGL Circle class. + + This class describes a circle, defined by position, size and a minimum of 3 segments. + + TODO: report if circle starts at top-left, bottom-right or center. + and size grows from which point? + */ +template +class Circle +{ +public: + /** + Constructor for a null circle. + */ + Circle() noexcept; + + /** + Constructor using custom X, Y and size values. + */ + Circle(const T& x, const T& y, const float size, const uint numSegments = 300); + + /** + Constructor using custom position and size values. + */ + Circle(const Point& pos, const float size, const uint numSegments = 300); + + /** + Constructor using another Circle class values. + */ + Circle(const Circle& cir) noexcept; + + /** + Get X value. + */ + const T& getX() const noexcept; + + /** + Get Y value. + */ + const T& getY() const noexcept; + + /** + Get position. + */ + const Point& getPos() const noexcept; + + /** + Set X value to @a x. + */ + void setX(const T& x) noexcept; + + /** + Set Y value to @a y. + */ + void setY(const T& y) noexcept; + + /** + Set X and Y values to @a x and @a y respectively. + */ + void setPos(const T& x, const T& y) noexcept; + + /** + Set X and Y values according to @a pos. + */ + void setPos(const Point& pos) noexcept; + + /** + Get size. + */ + float getSize() const noexcept; + + /** + Set size. + @note Must always be > 0 + */ + void setSize(const float size) noexcept; + + /** + Get the current number of line segments that make this circle. + */ + uint getNumSegments() const noexcept; + + /** + Set the number of line segments that will make this circle. + @note Must always be >= 3 + */ + void setNumSegments(const uint num); + + /** + Draw this circle using the current OpenGL state. + */ + void draw(); + + /** + Draw lines (outline of this circle) using the current OpenGL state. + */ + void drawOutline(); + + Circle& operator=(const Circle& cir) noexcept; + bool operator==(const Circle& cir) const noexcept; + bool operator!=(const Circle& cir) const noexcept; + +private: + Point fPos; + float fSize; + uint fNumSegments; + + // cached values + float fTheta, fCos, fSin; + + void _draw(const bool outline); +}; + +// ----------------------------------------------------------------------- + +/** + DGL Triangle class. + + This class describes a triangle, defined by 3 points. + */ +template +class Triangle +{ +public: + /** + Constructor for a null triangle. + */ + Triangle() noexcept; + + /** + Constructor using custom X and Y values. + */ + Triangle(const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, const T& y3) noexcept; + + /** + Constructor using custom position values. + */ + Triangle(const Point& pos1, const Point& pos2, const Point& pos3) noexcept; + + /** + Constructor using another Triangle class values. + */ + Triangle(const Triangle& tri) noexcept; + + /** + Draw this triangle using the current OpenGL state. + */ + void draw(); + + /** + Draw lines (outline of this triangle) using the current OpenGL state. + */ + void drawOutline(); + + /** + Return true if triangle is null (all its points are equal). + An null triangle is also invalid. + */ + bool isNull() const noexcept; + + /** + Return true if triangle is not null (one its points is different from the others). + A non-null triangle is still invalid if two of its points are equal. + */ + bool isNotNull() const noexcept; + + /** + Return true if triangle is valid (all its points are different). + */ + bool isValid() const noexcept; + + /** + Return true if triangle is invalid (one or two of its points are equal). + An invalid triangle might not be null under some circumstances. + */ + bool isInvalid() const noexcept; + + Triangle& operator=(const Triangle& tri) noexcept; + bool operator==(const Triangle& tri) const noexcept; + bool operator!=(const Triangle& tri) const noexcept; + +private: + Point fPos1, fPos2, fPos3; + + void _draw(const bool outline); +}; + +// ----------------------------------------------------------------------- + +/** + DGL Rectangle class. + + This class describes a rectangle, defined by a starting point and a size. + */ +template +class Rectangle +{ +public: + /** + Constructor for a null rectangle. + */ + Rectangle() noexcept; + + /** + Constructor using custom X, Y, width and height values. + */ + Rectangle(const T& x, const T& y, const T& width, const T& height) noexcept; + + /** + Constructor using custom X, Y and size values. + */ + Rectangle(const T& x, const T& y, const Size& size) noexcept; + + /** + Constructor using custom pos, width and height values. + */ + Rectangle(const Point& pos, const T& width, const T& height) noexcept; + + /** + Constructor using custom position and size. + */ + Rectangle(const Point& pos, const Size& size) noexcept; + + /** + Constructor using another Rectangle class values. + */ + Rectangle(const Rectangle& rect) noexcept; + + /** + Get X value. + */ + const T& getX() const noexcept; + + /** + Get Y value. + */ + const T& getY() const noexcept; + + /** + Get width. + */ + const T& getWidth() const noexcept; + + /** + Get height. + */ + const T& getHeight() const noexcept; + + /** + Get position. + */ + const Point& getPos() const noexcept; + + /** + Get size. + */ + const Size& getSize() const noexcept; + + /** + Set X value as @a x. + */ + void setX(const T& x) noexcept; + + /** + Set Y value as @a y. + */ + void setY(const T& y) noexcept; + + /** + Set X and Y values as @a x and @a y respectively. + */ + void setPos(const T& x, const T& y) noexcept; + + /** + Set X and Y values according to @a pos. + */ + void setPos(const Point& pos) noexcept; + + /** + Move this rectangle by @a x and @a y values. + */ + void moveBy(const T& x, const T& y) noexcept; + + /** + Move this rectangle by @a pos. + */ + void moveBy(const Point& pos) noexcept; + + /** + Set width. + */ + void setWidth(const T& width) noexcept; + + /** + Set height. + */ + void setHeight(const T& height) noexcept; + + /** + Set size using @a width and @a height. + */ + void setSize(const T& width, const T& height) noexcept; + + /** + Set size. + */ + void setSize(const Size& size) noexcept; + + /** + Grow size by @a multiplier. + */ + void growBy(double multiplier) noexcept; + + /** + Shrink size by @a divider. + */ + void shrinkBy(double divider) noexcept; + + /** + Set rectangle using @a pos and @a size. + */ + void setRectangle(const Point& pos, const Size& size) noexcept; + + /** + Set rectangle. + */ + void setRectangle(const Rectangle& rect) noexcept; + + /** + Check if this rectangle contains the point defined by @a X and @a Y. + */ + bool contains(const T& x, const T& y) const noexcept; + + /** + Check if this rectangle contains the point @a pos. + */ + bool contains(const Point& pos) const noexcept; + + /** + Check if this rectangle contains X. + */ + bool containsX(const T& x) const noexcept; + + /** + Check if this rectangle contains Y. + */ + bool containsY(const T& y) const noexcept; + + /** + Draw this rectangle using the current OpenGL state. + */ + void draw(); + + /** + Draw lines (outline of this rectangle) using the current OpenGL state. + */ + void drawOutline(); + + Rectangle& operator=(const Rectangle& rect) noexcept; + Rectangle& operator*=(double m) noexcept; + Rectangle& operator/=(double d) noexcept; + bool operator==(const Rectangle& size) const noexcept; + bool operator!=(const Rectangle& size) const noexcept; + +private: + Point fPos; + Size fSize; + + void _draw(const bool outline); +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_GEOMETRY_HPP_INCLUDED diff --git a/dpf/dgl/Image.hpp b/dpf/dgl/Image.hpp new file mode 100644 index 0000000..4136f3f --- /dev/null +++ b/dpf/dgl/Image.hpp @@ -0,0 +1,147 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_IMAGE_HPP_INCLUDED +#define DGL_IMAGE_HPP_INCLUDED + +#include "Geometry.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +/** + Base DGL Image class. + + This is an Image class that handles raw image data in pixels. + You can init the image data on the contructor or later on by calling loadFromMemory(). + + To generate raw data useful for this class see the utils/png2rgba.py script. + Be careful when using a PNG without alpha channel, for those the format is 'GL_BGR' + instead of the default 'GL_BGRA'. + + Images are drawn on screen via 2D textures. + */ +class Image +{ +public: + /** + Constructor for a null Image. + */ + Image(); + + /** + Constructor using raw image data. + @note @a rawData must remain valid for the lifetime of this Image. + */ + Image(const char* const rawData, const uint width, const uint height, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE); + + /** + Constructor using raw image data. + @note @a rawData must remain valid for the lifetime of this Image. + */ + Image(const char* const rawData, const Size& size, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE); + + /** + Constructor using another image data. + */ + Image(const Image& image); + + /** + Destructor. + */ + ~Image(); + + /** + Load image data from memory. + @note @a rawData must remain valid for the lifetime of this Image. + */ + void loadFromMemory(const char* const rawData, const uint width, const uint height, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE) noexcept; + + /** + Load image data from memory. + @note @a rawData must remain valid for the lifetime of this Image. + */ + void loadFromMemory(const char* const rawData, const Size& size, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE) noexcept; + + /** + Check if this image is valid. + */ + bool isValid() const noexcept; + + /** + Get width. + */ + uint getWidth() const noexcept; + + /** + Get height. + */ + uint getHeight() const noexcept; + + /** + Get size. + */ + const Size& getSize() const noexcept; + + /** + Get the raw image data. + */ + const char* getRawData() const noexcept; + + /** + Get the image format. + */ + GLenum getFormat() const noexcept; + + /** + Get the image type. + */ + GLenum getType() const noexcept; + + /** + Draw this image at (0, 0) point. + */ + void draw(); + + /** + Draw this image at (x, y) point. + */ + void drawAt(const int x, const int y); + + /** + Draw this image at position @a pos. + */ + void drawAt(const Point& pos); + + Image& operator=(const Image& image) noexcept; + bool operator==(const Image& image) const noexcept; + bool operator!=(const Image& image) const noexcept; + +private: + const char* fRawData; + Size fSize; + GLenum fFormat; + GLenum fType; + GLuint fTextureId; + bool fIsReady; +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_IMAGE_HPP_INCLUDED diff --git a/dpf/dgl/ImageAboutWindow.hpp b/dpf/dgl/ImageAboutWindow.hpp new file mode 100644 index 0000000..9291c57 --- /dev/null +++ b/dpf/dgl/ImageAboutWindow.hpp @@ -0,0 +1,23 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_IMAGE_ABOUT_WINDOW_HPP_INCLUDED +#define DGL_IMAGE_ABOUT_WINDOW_HPP_INCLUDED + +#warning This is a deprecated file, please include ImageWidgets.hpp instead. +#include "ImageWidgets.hpp" + +#endif // DGL_IMAGE_ABOUT_WINDOW_HPP_INCLUDED diff --git a/dpf/dgl/ImageButton.hpp b/dpf/dgl/ImageButton.hpp new file mode 100644 index 0000000..5771f66 --- /dev/null +++ b/dpf/dgl/ImageButton.hpp @@ -0,0 +1,23 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_IMAGE_BUTTON_HPP_INCLUDED +#define DGL_IMAGE_BUTTON_HPP_INCLUDED + +#warning This is a deprecated file, please include ImageWidgets.hpp instead. +#include "ImageWidgets.hpp" + +#endif // DGL_IMAGE_BUTTON_HPP_INCLUDED diff --git a/dpf/dgl/ImageKnob.hpp b/dpf/dgl/ImageKnob.hpp new file mode 100644 index 0000000..64ccaa0 --- /dev/null +++ b/dpf/dgl/ImageKnob.hpp @@ -0,0 +1,23 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_IMAGE_KNOB_HPP_INCLUDED +#define DGL_IMAGE_KNOB_HPP_INCLUDED + +#warning This is a deprecated file, please include ImageWidgets.hpp instead. +#include "ImageWidgets.hpp" + +#endif // DGL_IMAGE_KNOB_HPP_INCLUDED diff --git a/dpf/dgl/ImageSlider.hpp b/dpf/dgl/ImageSlider.hpp new file mode 100644 index 0000000..2c16cb6 --- /dev/null +++ b/dpf/dgl/ImageSlider.hpp @@ -0,0 +1,23 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_IMAGE_SLIDER_HPP_INCLUDED +#define DGL_IMAGE_SLIDER_HPP_INCLUDED + +#warning This is a deprecated file, please include ImageWidgets.hpp instead. +#include "ImageWidgets.hpp" + +#endif // DGL_IMAGE_SLIDER_HPP_INCLUDED diff --git a/dpf/dgl/ImageSwitch.hpp b/dpf/dgl/ImageSwitch.hpp new file mode 100644 index 0000000..b8767d5 --- /dev/null +++ b/dpf/dgl/ImageSwitch.hpp @@ -0,0 +1,23 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_IMAGE_SWITCH_HPP_INCLUDED +#define DGL_IMAGE_SWITCH_HPP_INCLUDED + +#warning This is a deprecated file, please include ImageWidgets.hpp instead. +#include "ImageWidgets.hpp" + +#endif // DGL_IMAGE_SWITCH_HPP_INCLUDED diff --git a/dpf/dgl/ImageWidgets.hpp b/dpf/dgl/ImageWidgets.hpp new file mode 100644 index 0000000..c3e0c09 --- /dev/null +++ b/dpf/dgl/ImageWidgets.hpp @@ -0,0 +1,271 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_IMAGE_WIDGETS_HPP_INCLUDED +#define DGL_IMAGE_WIDGETS_HPP_INCLUDED + +#include "Image.hpp" +#include "Widget.hpp" +#include "Window.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +class ImageAboutWindow : public Window, + public Widget +{ +public: + explicit ImageAboutWindow(Window& parent, const Image& image = Image()); + explicit ImageAboutWindow(Widget* widget, const Image& image = Image()); + + void setImage(const Image& image); + +protected: + void onDisplay() override; + bool onKeyboard(const KeyboardEvent&) override; + bool onMouse(const MouseEvent&) override; + void onReshape(uint width, uint height) override; + +private: + Image fImgBackground; + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ImageAboutWindow) +}; + +// ----------------------------------------------------------------------- + +class ImageButton : public Widget +{ +public: + class Callback + { + public: + virtual ~Callback() {} + virtual void imageButtonClicked(ImageButton* imageButton, int button) = 0; + }; + + explicit ImageButton(Window& parent, const Image& image); + explicit ImageButton(Window& parent, const Image& imageNormal, const Image& imageDown); + explicit ImageButton(Window& parent, const Image& imageNormal, const Image& imageHover, const Image& imageDown); + + explicit ImageButton(Widget* widget, const Image& image); + explicit ImageButton(Widget* widget, const Image& imageNormal, const Image& imageDown); + explicit ImageButton(Widget* widget, const Image& imageNormal, const Image& imageHover, const Image& imageDown); + + ~ImageButton() override; + + void setCallback(Callback* callback) noexcept; + +protected: + void onDisplay() override; + bool onMouse(const MouseEvent&) override; + bool onMotion(const MotionEvent&) override; + +private: + struct PrivateData; + PrivateData* const pData; + + DISTRHO_LEAK_DETECTOR(ImageButton) +}; + +// ----------------------------------------------------------------------- + +class ImageKnob : public Widget +{ +public: + enum Orientation { + Horizontal, + Vertical + }; + + class Callback + { + public: + virtual ~Callback() {} + virtual void imageKnobDragStarted(ImageKnob* imageKnob) = 0; + virtual void imageKnobDragFinished(ImageKnob* imageKnob) = 0; + virtual void imageKnobValueChanged(ImageKnob* imageKnob, float value) = 0; + }; + + explicit ImageKnob(Window& parent, const Image& image, Orientation orientation = Vertical) noexcept; + explicit ImageKnob(Widget* widget, const Image& image, Orientation orientation = Vertical) noexcept; + explicit ImageKnob(const ImageKnob& imageKnob); + ImageKnob& operator=(const ImageKnob& imageKnob); + ~ImageKnob() override; + + float getValue() const noexcept; + + void setDefault(float def) noexcept; + void setRange(float min, float max) noexcept; + void setStep(float step) noexcept; + void setValue(float value, bool sendCallback = false) noexcept; + void setUsingLogScale(bool yesNo) noexcept; + + void setCallback(Callback* callback) noexcept; + void setOrientation(Orientation orientation) noexcept; + void setRotationAngle(int angle); + + void setImageLayerCount(uint count) noexcept; + +protected: + void onDisplay() override; + bool onMouse(const MouseEvent&) override; + bool onMotion(const MotionEvent&) override; + bool onScroll(const ScrollEvent&) override; + +private: + Image fImage; + float fMinimum; + float fMaximum; + float fStep; + float fValue; + float fValueDef; + float fValueTmp; + bool fUsingDefault; + bool fUsingLog; + Orientation fOrientation; + + int fRotationAngle; + bool fDragging; + int fLastX; + int fLastY; + + Callback* fCallback; + + bool fIsImgVertical; + uint fImgLayerWidth; + uint fImgLayerHeight; + uint fImgLayerCount; + bool fIsReady; + GLuint fTextureId; + + float _logscale(float value) const; + float _invlogscale(float value) const; + + DISTRHO_LEAK_DETECTOR(ImageKnob) +}; + +// ----------------------------------------------------------------------- + +// note set range and step before setting the value + +class ImageSlider : public Widget +{ +public: + class Callback + { + public: + virtual ~Callback() {} + virtual void imageSliderDragStarted(ImageSlider* imageSlider) = 0; + virtual void imageSliderDragFinished(ImageSlider* imageSlider) = 0; + virtual void imageSliderValueChanged(ImageSlider* imageSlider, float value) = 0; + }; + + explicit ImageSlider(Window& parent, const Image& image) noexcept; + explicit ImageSlider(Widget* widget, const Image& image) noexcept; + + float getValue() const noexcept; + void setValue(float value, bool sendCallback = false) noexcept; + + void setStartPos(const Point& startPos) noexcept; + void setStartPos(int x, int y) noexcept; + void setEndPos(const Point& endPos) noexcept; + void setEndPos(int x, int y) noexcept; + + void setInverted(bool inverted) noexcept; + void setRange(float min, float max) noexcept; + void setStep(float step) noexcept; + + void setCallback(Callback* callback) noexcept; + +protected: + void onDisplay() override; + bool onMouse(const MouseEvent&) override; + bool onMotion(const MotionEvent&) override; + +private: + Image fImage; + float fMinimum; + float fMaximum; + float fStep; + float fValue; + float fValueTmp; + + bool fDragging; + bool fInverted; + bool fValueIsSet; + int fStartedX; + int fStartedY; + + Callback* fCallback; + + Point fStartPos; + Point fEndPos; + Rectangle fSliderArea; + + void _recheckArea() noexcept; + + // these should not be used + void setAbsoluteX(int) const noexcept {} + void setAbsoluteY(int) const noexcept {} + void setAbsolutePos(int, int) const noexcept {} + void setAbsolutePos(const Point&) const noexcept {} + + DISTRHO_LEAK_DETECTOR(ImageSlider) +}; + +// ----------------------------------------------------------------------- + +class ImageSwitch : public Widget +{ +public: + class Callback + { + public: + virtual ~Callback() {} + virtual void imageSwitchClicked(ImageSwitch* imageButton, bool down) = 0; + }; + + explicit ImageSwitch(Window& parent, const Image& imageNormal, const Image& imageDown) noexcept; + explicit ImageSwitch(Widget* widget, const Image& imageNormal, const Image& imageDown) noexcept; + explicit ImageSwitch(const ImageSwitch& imageSwitch) noexcept; + ImageSwitch& operator=(const ImageSwitch& imageSwitch) noexcept; + + bool isDown() const noexcept; + void setDown(bool down) noexcept; + + void setCallback(Callback* callback) noexcept; + +protected: + void onDisplay() override; + bool onMouse(const MouseEvent&) override; + +private: + Image fImageNormal; + Image fImageDown; + bool fIsDown; + + Callback* fCallback; + + DISTRHO_LEAK_DETECTOR(ImageSwitch) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_IMAGE_WIDGETS_HPP_INCLUDED diff --git a/dpf/dgl/Makefile b/dpf/dgl/Makefile new file mode 100644 index 0000000..feedd05 --- /dev/null +++ b/dpf/dgl/Makefile @@ -0,0 +1,81 @@ +#!/usr/bin/make -f +# Makefile for dgl # +# ---------------- # +# Created by falkTX +# + +include Makefile.mk + +# -------------------------------------------------------------- + +BUILD_C_FLAGS += $(DGL_FLAGS) -I. -Isrc +BUILD_CXX_FLAGS += $(DGL_FLAGS) -I. -Isrc +LINK_FLAGS += $(DGL_LIBS) + +# -------------------------------------------------------------- + +OBJS = \ + src/Application.cpp.o \ + src/Color.cpp.o \ + src/Geometry.cpp.o \ + src/Image.cpp.o \ + src/ImageWidgets.cpp.o \ + src/NanoVG.cpp.o \ + src/NanoWidgets.cpp.o \ + src/Widget.cpp.o + +ifeq ($(MACOS),true) +OBJS += src/Window.mm.o +else +OBJS += src/Window.cpp.o +endif + +TARGET = ../libdgl.a + +# -------------------------------------------------------------- + +all: $(TARGET) + +# -------------------------------------------------------------- + +../libdgl.a: $(OBJS) + rm -f $@ + $(AR) crs $@ $^ + +../libdgl.dll: $(OBJS) + # -Wl,--output-def,$@.def,--out-implib,$@.a + $(CXX) $^ -shared $(LINK_FLAGS) -o $@ + +../libdgl.dylib: $(OBJS) + $(CXX) $^ -dynamiclib $(LINK_FLAGS) -o $@ + +../libdgl.so: $(OBJS) + $(CXX) $^ -shared $(LINK_FLAGS) -o $@ + +# -------------------------------------------------------------- + +%.c.o: %.c + $(CC) $< $(BUILD_C_FLAGS) -c -o $@ + +%.cpp.o: %.cpp + $(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ + +src/Window.cpp.o: src/Window.cpp src/pugl/* + $(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ + +src/Window.mm.o: src/Window.cpp src/pugl/* + $(CXX) $< $(BUILD_CXX_FLAGS) -ObjC++ -c -o $@ + +# -------------------------------------------------------------- + +clean: + rm -f src/*.d src/*.o ../libdgl.* + +debug: + $(MAKE) DEBUG=true + +# -------------------------------------------------------------- + +-include $(OBJS:%.o=%.d) + +# -------------------------------------------------------------- diff --git a/dpf/dgl/Makefile.mk b/dpf/dgl/Makefile.mk new file mode 100644 index 0000000..505bb8c --- /dev/null +++ b/dpf/dgl/Makefile.mk @@ -0,0 +1,132 @@ +#!/usr/bin/make -f +# Makefile for dgl # +# ---------------- # +# Created by falkTX +# + +AR ?= ar +CC ?= gcc +CXX ?= g++ + +# -------------------------------------------------------------- +# Fallback to Linux if no other OS defined + +ifneq ($(HAIKU),true) +ifneq ($(MACOS),true) +ifneq ($(WIN32),true) +LINUX=true +endif +endif +endif + +# -------------------------------------------------------------- +# Set build and link flags + +BASE_FLAGS = -Wall -Wextra -pipe -MD -MP +BASE_OPTS = -O2 -ffast-math -mtune=generic -msse -msse2 -fdata-sections -ffunction-sections + +ifneq ($(MACOS),true) +# MacOS doesn't support this +BASE_OPTS += -mfpmath=sse +endif + +ifeq ($(MACOS),true) +# MacOS linker flags +LINK_OPTS = -fdata-sections -ffunction-sections -Wl,-dead_strip -Wl,-dead_strip_dylibs +else +# Common linker flags +LINK_OPTS = -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-O1 -Wl,--as-needed -Wl,--strip-all +endif + +ifeq ($(RASPPI),true) +# Raspberry-Pi optimization flags +BASE_OPTS = -O2 -ffast-math -march=armv6 -mfpu=vfp -mfloat-abi=hard +LINK_OPTS = -Wl,-O1 -Wl,--as-needed -Wl,--strip-all +endif + +ifeq ($(PANDORA),true) +# OpenPandora optimization flags +BASE_OPTS = -O2 -ffast-math -march=armv7-a -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp +LINK_OPTS = -Wl,-O1 -Wl,--as-needed -Wl,--strip-all +endif + +ifneq ($(NOOPT),true) +# No optimization flags +BASE_OPTS = -O2 -ffast-math -fdata-sections -ffunction-sections +endif + +ifneq ($(WIN32),true) +# not needed for Windows +BASE_FLAGS += -fPIC -DPIC +endif + +ifeq ($(DEBUG),true) +BASE_FLAGS += -DDEBUG -O0 -g +LINK_OPTS = +else +BASE_FLAGS += -DNDEBUG $(BASE_OPTS) -fvisibility=hidden +CXXFLAGS += -fvisibility-inlines-hidden +endif + +BUILD_C_FLAGS = $(BASE_FLAGS) -std=c99 -std=gnu99 $(CFLAGS) +BUILD_CXX_FLAGS = $(BASE_FLAGS) -std=c++0x -std=gnu++0x $(CXXFLAGS) $(CPPFLAGS) +LINK_FLAGS = $(LINK_OPTS) -Wl,--no-undefined $(LDFLAGS) + +ifeq ($(MACOS),true) +# No C++11 support +BUILD_CXX_FLAGS = $(BASE_FLAGS) $(CXXFLAGS) $(CPPFLAGS) +LINK_FLAGS = $(LINK_OPTS) $(LDFLAGS) +endif + +# -------------------------------------------------------------- +# Strict test build + +ifeq ($(TESTBUILD),true) +BASE_FLAGS += -Werror -Wcast-qual -Wconversion -Wformat -Wformat-security -Wredundant-decls -Wshadow -Wstrict-overflow -fstrict-overflow -Wundef -Wwrite-strings +BASE_FLAGS += -Wpointer-arith -Wabi -Winit-self -Wuninitialized -Wstrict-overflow=5 +# BASE_FLAGS += -Wfloat-equal +ifeq ($(CC),clang) +BASE_FLAGS += -Wdocumentation -Wdocumentation-unknown-command +BASE_FLAGS += -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded -Wno-exit-time-destructors -Wno-float-equal +else +BASE_FLAGS += -Wcast-align -Wunsafe-loop-optimizations +endif +ifneq ($(MACOS),true) +BASE_FLAGS += -Wmissing-declarations -Wsign-conversion +ifneq ($(CC),clang) +BASE_FLAGS += -Wlogical-op +endif +endif +CFLAGS += -Wold-style-definition -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes +CXXFLAGS += -Weffc++ -Wnon-virtual-dtor -Woverloaded-virtual +endif + +# -------------------------------------------------------------- +# Check for required libs + +ifeq ($(LINUX),true) +ifneq ($(shell pkg-config --exists gl && echo true),true) +$(error OpenGL missing, cannot continue) +endif +ifneq ($(shell pkg-config --exists x11 && echo true),true) +$(error X11 missing, cannot continue) +endif +endif + +# -------------------------------------------------------------- +# Set libs stuff + +ifeq ($(LINUX),true) +DGL_FLAGS = $(shell pkg-config --cflags gl x11) +DGL_LIBS = $(shell pkg-config --libs gl x11) +endif + +ifeq ($(MACOS),true) +DGL_LIBS = -framework OpenGL -framework Cocoa +endif + +ifeq ($(WIN32),true) +DGL_LIBS = -lopengl32 -lgdi32 +endif + +# -------------------------------------------------------------- diff --git a/dpf/dgl/NanoVG.hpp b/dpf/dgl/NanoVG.hpp new file mode 100644 index 0000000..18ec1de --- /dev/null +++ b/dpf/dgl/NanoVG.hpp @@ -0,0 +1,917 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_NANO_WIDGET_HPP_INCLUDED +#define DGL_NANO_WIDGET_HPP_INCLUDED + +#include "Color.hpp" +#include "Widget.hpp" + +struct NVGcontext; +struct NVGpaint; + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- +// Forward class names + +class NanoVG; + +// ----------------------------------------------------------------------- +// NanoImage + +/** + NanoVG Image class. + + This implements NanoVG images as a C++ class where deletion is handled automatically. + Images need to be created within a NanoVG or NanoWidget class. + */ +class NanoImage +{ +private: + struct Handle { + NVGcontext* context; + int imageId; + + Handle() noexcept + : context(nullptr), + imageId(0) {} + + Handle(NVGcontext* c, int id) noexcept + : context(c), + imageId(id) {} + }; + +public: + /** + Constructor for an invalid/null image. + */ + NanoImage(); + + /** + Constructor. + */ + NanoImage(const Handle& handle); + + /** + Destructor. + */ + ~NanoImage(); + + /** + Create a new image without recreating the C++ class. + */ + NanoImage& operator=(const Handle& handle); + + /** + Wherever this image is valid. + */ + bool isValid() const noexcept; + + /** + Get size. + */ + Size getSize() const noexcept; + + /** + Get the OpenGL texture handle. + */ + GLuint getTextureHandle() const; + +private: + Handle fHandle; + Size fSize; + friend class NanoVG; + + /** @internal */ + void _updateSize(); + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NanoImage) +}; + +// ----------------------------------------------------------------------- +// NanoVG + +/** + NanoVG class. + + This class exposes the NanoVG drawing API. + All calls should be wrapped in beginFrame() and endFrame(). + + @section State Handling + NanoVG contains state which represents how paths will be rendered. + The state contains transform, fill and stroke styles, text and font styles, and scissor clipping. + + @section Render styles + Fill and stroke render style can be either a solid color or a paint which is a gradient or a pattern. + Solid color is simply defined as a color value, different kinds of paints can be created + using linearGradient(), boxGradient(), radialGradient() and imagePattern(). + + Current render style can be saved and restored using save() and restore(). + + @section Transforms + The paths, gradients, patterns and scissor region are transformed by an transformation + matrix at the time when they are passed to the API. + The current transformation matrix is a affine matrix: + [sx kx tx] + [ky sy ty] + [ 0 0 1] + Where: sx,sy define scaling, kx,ky skewing, and tx,ty translation. + The last row is assumed to be 0,0,1 and is not stored. + + Apart from resetTransform(), each transformation function first creates + specific transformation matrix and pre-multiplies the current transformation by it. + + Current coordinate system (transformation) can be saved and restored using save() and restore(). + + @section Images + NanoVG allows you to load jpg, png, psd, tga, pic and gif files to be used for rendering. + In addition you can upload your own image. The image loading is provided by stb_image. + + @section Paints + NanoVG supports four types of paints: linear gradient, box gradient, radial gradient and image pattern. + These can be used as paints for strokes and fills. + + @section Scissoring + Scissoring allows you to clip the rendering into a rectangle. This is useful for various + user interface cases like rendering a text edit or a timeline. + + @section Paths + Drawing a new shape starts with beginPath(), it clears all the currently defined paths. + Then you define one or more paths and sub-paths which describe the shape. The are functions + to draw common shapes like rectangles and circles, and lower level step-by-step functions, + which allow to define a path curve by curve. + + NanoVG uses even-odd fill rule to draw the shapes. Solid shapes should have counter clockwise + winding and holes should have counter clockwise order. To specify winding of a path you can + call pathWinding(). This is useful especially for the common shapes, which are drawn CCW. + + Finally you can fill the path using current fill style by calling fill(), and stroke it + with current stroke style by calling stroke(). + + The curve segments and sub-paths are transformed by the current transform. + + @section Text + NanoVG allows you to load .ttf files and use the font to render text. + + The appearance of the text can be defined by setting the current text style + and by specifying the fill color. Common text and font settings such as + font size, letter spacing and text align are supported. Font blur allows you + to create simple text effects such as drop shadows. + + At render time the font face can be set based on the font handles or name. + + Font measure functions return values in local space, the calculations are + carried in the same resolution as the final rendering. This is done because + the text glyph positions are snapped to the nearest pixels sharp rendering. + + The local space means that values are not rotated or scale as per the current + transformation. For example if you set font size to 12, which would mean that + line height is 16, then regardless of the current scaling and rotation, the + returned line height is always 16. Some measures may vary because of the scaling + since aforementioned pixel snapping. + + While this may sound a little odd, the setup allows you to always render the + same way regardless of scaling. i.e. following works regardless of scaling: + + @code + const char* txt = "Text me up."; + textBounds(vg, x,y, txt, NULL, bounds); + beginPath(vg); + roundedRect(vg, bounds[0], bounds[1], bounds[2]-bounds[0], bounds[3]-bounds[1]); + fill(vg); + @endcode + + Note: currently only solid color fill is supported for text. + */ +class NanoVG +{ +public: + enum CreateFlags { + /** + Flag indicating if geometry based anti-aliasing is used (may not be needed when using MSAA). + */ + CREATE_ANTIALIAS = 1 << 0, + + /** + Flag indicating if strokes should be drawn using stencil buffer. The rendering will be a little + slower, but path overlaps (i.e. self-intersecting or sharp turns) will be drawn just once. + */ + CREATE_STENCIL_STROKES = 1 << 1, + + /** + Flag indicating that additional debug checks are done. + */ + CREATE_DEBUG = 1 << 2, + }; + + enum ImageFlags { + IMAGE_GENERATE_MIPMAPS = 1 << 0, // Generate mipmaps during creation of the image. + IMAGE_REPEAT_X = 1 << 1, // Repeat image in X direction. + IMAGE_REPEAT_Y = 1 << 2, // Repeat image in Y direction. + IMAGE_FLIP_Y = 1 << 3, // Flips (inverses) image in Y direction when rendered. + IMAGE_PREMULTIPLIED = 1 << 4 // Image data has premultiplied alpha. + }; + + enum Align { + // Horizontal align + ALIGN_LEFT = 1 << 0, // Align horizontally to left (default). + ALIGN_CENTER = 1 << 1, // Align horizontally to center. + ALIGN_RIGHT = 1 << 2, // Align horizontally to right. + // Vertical align + ALIGN_TOP = 1 << 3, // Align vertically to top. + ALIGN_MIDDLE = 1 << 4, // Align vertically to middle. + ALIGN_BOTTOM = 1 << 5, // Align vertically to bottom. + ALIGN_BASELINE = 1 << 6 // Align vertically to baseline (default). + }; + + enum LineCap { + BUTT, + ROUND, + SQUARE, + BEVEL, + MITER + }; + + enum Solidity { + SOLID = 1, // CCW + HOLE = 2 // CW + }; + + enum Winding { + CCW = 1, // Winding for solid shapes + CW = 2 // Winding for holes + }; + + struct Paint { + float xform[6]; + float extent[2]; + float radius; + float feather; + Color innerColor; + Color outerColor; + int imageId; + + Paint() noexcept; + + /** + @internal + */ + Paint(const NVGpaint&) noexcept; + operator NVGpaint() const noexcept; + }; + + struct GlyphPosition { + const char* str; // Position of the glyph in the input string. + float x; // The x-coordinate of the logical glyph position. + float minx, maxx; // The bounds of the glyph shape. + }; + + struct TextRow { + const char* start; // Pointer to the input text where the row starts. + const char* end; // Pointer to the input text where the row ends (one past the last character). + const char* next; // Pointer to the beginning of the next row. + float width; // Logical width of the row. + float minx, maxx; // Actual bounds of the row. Logical with and bounds can differ because of kerning and some parts over extending. + }; + + typedef int FontId; + + /** + Constructor. + @see CreateFlags + */ + NanoVG(int flags = CREATE_ANTIALIAS); + + /** + Constructor reusing a NanoVG context, used for subwidgets. + */ + NanoVG(NanoWidget* groupWidget); + + /** + Destructor. + */ + virtual ~NanoVG(); + + /** + Get the NanoVG context. + You should not need this under normal circumstances. + */ + NVGcontext* getContext() const noexcept + { + return fContext; + } + + /** + Begin drawing a new frame. + */ + void beginFrame(const uint width, const uint height, const float scaleFactor = 1.0f); + + /** + Begin drawing a new frame inside a widget. + */ + void beginFrame(Widget* const widget); + + /** + Cancels drawing the current frame. + */ + void cancelFrame(); + + /** + Ends drawing flushing remaining render state. + */ + void endFrame(); + + /* -------------------------------------------------------------------- + * State Handling */ + + /** + Pushes and saves the current render state into a state stack. + A matching restore() must be used to restore the state. + */ + void save(); + + /** + Pops and restores current render state. + */ + void restore(); + + /** + Resets current render state to default values. Does not affect the render state stack. + */ + void reset(); + + /* -------------------------------------------------------------------- + * Render styles */ + + /** + Sets current stroke style to a solid color. + */ + void strokeColor(const Color& color); + + /** + Sets current stroke style to a solid color, made from red, green, blue and alpha numeric values. + Values must be in [0..255] range. + */ + void strokeColor(const int red, const int green, const int blue, const int alpha = 255); + + /** + Sets current stroke style to a solid color, made from red, green, blue and alpha numeric values. + Values must in [0..1] range. + */ + void strokeColor(const float red, const float green, const float blue, const float alpha = 1.0f); + + /** + Sets current stroke style to a paint, which can be a one of the gradients or a pattern. + */ + void strokePaint(const Paint& paint); + + /** + Sets current fill style to a solid color. + */ + void fillColor(const Color& color); + + /** + Sets current fill style to a solid color, made from red, green, blue and alpha numeric values. + Values must be in [0..255] range. + */ + void fillColor(const int red, const int green, const int blue, const int alpha = 255); + + /** + Sets current fill style to a solid color, made from red, green, blue and alpha numeric values. + Values must in [0..1] range. + */ + void fillColor(const float red, const float green, const float blue, const float alpha = 1.0f); + + /** + Sets current fill style to a paint, which can be a one of the gradients or a pattern. + */ + void fillPaint(const Paint& paint); + + /** + Sets the miter limit of the stroke style. + Miter limit controls when a sharp corner is beveled. + */ + void miterLimit(float limit); + + /** + Sets the stroke width of the stroke style. + */ + void strokeWidth(float size); + + /** + Sets how the end of the line (cap) is drawn, + Can be one of: BUTT, ROUND, SQUARE. + */ + void lineCap(LineCap cap = BUTT); + + /** + Sets how sharp path corners are drawn. + Can be one of MITER, ROUND, BEVEL. + */ + void lineJoin(LineCap join = MITER); + + /** + Sets the transparency applied to all rendered shapes. + Already transparent paths will get proportionally more transparent as well. + */ + void globalAlpha(float alpha); + + /* -------------------------------------------------------------------- + * Transforms */ + + /** + Resets current transform to a identity matrix. + */ + void resetTransform(); + + /** + Pre-multiplies current coordinate system by specified matrix. + The parameters are interpreted as matrix as follows: + [a c e] + [b d f] + [0 0 1] + */ + void transform(float a, float b, float c, float d, float e, float f); + + /** + Translates current coordinate system. + */ + void translate(float x, float y); + + /** + Rotates current coordinate system. Angle is specified in radians. + */ + void rotate(float angle); + + /** + Skews the current coordinate system along X axis. Angle is specified in radians. + */ + void skewX(float angle); + + /** + Skews the current coordinate system along Y axis. Angle is specified in radians. + */ + void skewY(float angle); + + /** + Scales the current coordinate system. + */ + void scale(float x, float y); + + /** + Stores the top part (a-f) of the current transformation matrix in to the specified buffer. + [a c e] + [b d f] + [0 0 1] + */ + void currentTransform(float xform[6]); + + /** + The following functions can be used to make calculations on 2x3 transformation matrices. + A 2x3 matrix is represented as float[6]. */ + + /** + Sets the transform to identity matrix. + */ + static void transformIdentity(float dst[6]); + + /** + Sets the transform to translation matrix + */ + static void transformTranslate(float dst[6], float tx, float ty); + + /** + Sets the transform to scale matrix. + */ + static void transformScale(float dst[6], float sx, float sy); + + /** + Sets the transform to rotate matrix. Angle is specified in radians. + */ + static void transformRotate(float dst[6], float a); + + /** + Sets the transform to skew-x matrix. Angle is specified in radians. + */ + static void transformSkewX(float dst[6], float a); + + /** + Sets the transform to skew-y matrix. Angle is specified in radians. + */ + static void transformSkewY(float dst[6], float a); + + /** + Sets the transform to the result of multiplication of two transforms, of A = A*B. + */ + static void transformMultiply(float dst[6], const float src[6]); + + /** + Sets the transform to the result of multiplication of two transforms, of A = B*A. + */ + static void transformPremultiply(float dst[6], const float src[6]); + + /** + Sets the destination to inverse of specified transform. + Returns 1 if the inverse could be calculated, else 0. + */ + static int transformInverse(float dst[6], const float src[6]); + + /** + Transform a point by given transform. + */ + static void transformPoint(float& dstx, float& dsty, const float xform[6], float srcx, float srcy); + + /** + Convert degrees to radians. + */ + static float degToRad(float deg); + + /** + Convert radians to degrees. + */ + static float radToDeg(float rad); + + /* -------------------------------------------------------------------- + * Images */ + + /** + Creates image by loading it from the disk from specified file name. + */ + NanoImage::Handle createImageFromFile(const char* filename, ImageFlags imageFlags); + + /** + Creates image by loading it from the disk from specified file name. + Overloaded function for convenience. + @see ImageFlags + */ + NanoImage::Handle createImageFromFile(const char* filename, int imageFlags); + + /** + Creates image by loading it from the specified chunk of memory. + */ + NanoImage::Handle createImageFromMemory(uchar* data, uint dataSize, ImageFlags imageFlags); + + /** + Creates image by loading it from the specified chunk of memory. + Overloaded function for convenience. + @see ImageFlags + */ + NanoImage::Handle createImageFromMemory(uchar* data, uint dataSize, int imageFlags); + + /** + Creates image from specified image data. + */ + NanoImage::Handle createImageFromRGBA(uint w, uint h, const uchar* data, ImageFlags imageFlags); + + /** + Creates image from specified image data. + Overloaded function for convenience. + @see ImageFlags + */ + NanoImage::Handle createImageFromRGBA(uint w, uint h, const uchar* data, int imageFlags); + + /** + Creates image from an OpenGL texture handle. + */ + NanoImage::Handle createImageFromTextureHandle(GLuint textureId, uint w, uint h, ImageFlags imageFlags, bool deleteTexture = false); + + /** + Creates image from an OpenGL texture handle. + Overloaded function for convenience. + @see ImageFlags + */ + NanoImage::Handle createImageFromTextureHandle(GLuint textureId, uint w, uint h, int imageFlags, bool deleteTexture = false); + + /* -------------------------------------------------------------------- + * Paints */ + + /** + Creates and returns a linear gradient. Parameters (sx,sy)-(ex,ey) specify the start and end coordinates + of the linear gradient, icol specifies the start color and ocol the end color. + The gradient is transformed by the current transform when it is passed to fillPaint() or strokePaint(). + */ + Paint linearGradient(float sx, float sy, float ex, float ey, const Color& icol, const Color& ocol); + + /** + Creates and returns a box gradient. Box gradient is a feathered rounded rectangle, it is useful for rendering + drop shadows or highlights for boxes. Parameters (x,y) define the top-left corner of the rectangle, + (w,h) define the size of the rectangle, r defines the corner radius, and f feather. Feather defines how blurry + the border of the rectangle is. Parameter icol specifies the inner color and ocol the outer color of the gradient. + The gradient is transformed by the current transform when it is passed to fillPaint() or strokePaint(). + */ + Paint boxGradient(float x, float y, float w, float h, float r, float f, const Color& icol, const Color& ocol); + + /** + Creates and returns a radial gradient. Parameters (cx,cy) specify the center, inr and outr specify + the inner and outer radius of the gradient, icol specifies the start color and ocol the end color. + The gradient is transformed by the current transform when it is passed to fillPaint() or strokePaint(). + */ + Paint radialGradient(float cx, float cy, float inr, float outr, const Color& icol, const Color& ocol); + + /** + Creates and returns an image pattern. Parameters (ox,oy) specify the left-top location of the image pattern, + (ex,ey) the size of one image, angle rotation around the top-left corner, image is handle to the image to render. + The gradient is transformed by the current transform when it is passed to fillPaint() or strokePaint(). + */ + Paint imagePattern(float ox, float oy, float ex, float ey, float angle, const NanoImage& image, float alpha); + + /* -------------------------------------------------------------------- + * Scissoring */ + + /** + Sets the current scissor rectangle. + The scissor rectangle is transformed by the current transform. + */ + void scissor(float x, float y, float w, float h); + + /** + Intersects current scissor rectangle with the specified rectangle. + The scissor rectangle is transformed by the current transform. + Note: in case the rotation of previous scissor rect differs from + the current one, the intersection will be done between the specified + rectangle and the previous scissor rectangle transformed in the current + transform space. The resulting shape is always rectangle. + */ + void intersectScissor(float x, float y, float w, float h); + + /** + Reset and disables scissoring. + */ + void resetScissor(); + + /* -------------------------------------------------------------------- + * Paths */ + + /** + Clears the current path and sub-paths. + */ + void beginPath(); + + /** + Starts new sub-path with specified point as first point. + */ + void moveTo(float x, float y); + + /** + Adds line segment from the last point in the path to the specified point. + */ + void lineTo(float x, float y); + + /** + Adds cubic bezier segment from last point in the path via two control points to the specified point. + */ + void bezierTo(float c1x, float c1y, float c2x, float c2y, float x, float y); + + /** + Adds quadratic bezier segment from last point in the path via a control point to the specified point. + */ + void quadTo(float cx, float cy, float x, float y); + + /** + Adds an arc segment at the corner defined by the last path point, and two specified points. + */ + void arcTo(float x1, float y1, float x2, float y2, float radius); + + /** + Closes current sub-path with a line segment. + */ + void closePath(); + + /** + Sets the current sub-path winding. + */ + void pathWinding(Winding dir); + + /** + Creates new circle arc shaped sub-path. The arc center is at cx,cy, the arc radius is r, + and the arc is drawn from angle a0 to a1, and swept in direction dir (NVG_CCW or NVG_CW). + Angles are specified in radians. + */ + void arc(float cx, float cy, float r, float a0, float a1, Winding dir); + + /** + Creates new rectangle shaped sub-path. + */ + void rect(float x, float y, float w, float h); + + /** + Creates new rounded rectangle shaped sub-path. + */ + void roundedRect(float x, float y, float w, float h, float r); + + /** + Creates new ellipse shaped sub-path. + */ + void ellipse(float cx, float cy, float rx, float ry); + + /** + Creates new circle shaped sub-path. + */ + void circle(float cx, float cy, float r); + + /** + Fills the current path with current fill style. + */ + void fill(); + + /** + Fills the current path with current stroke style. + */ + void stroke(); + + /* -------------------------------------------------------------------- + * Text */ + + /** + Creates font by loading it from the disk from specified file name. + Returns handle to the font. + */ + FontId createFontFromFile(const char* name, const char* filename); + + /** + Creates font by loading it from the specified memory chunk. + Returns handle to the font. + */ + FontId createFontFromMemory(const char* name, const uchar* data, uint dataSize, bool freeData); + + /** + Finds a loaded font of specified name, and returns handle to it, or -1 if the font is not found. + */ + FontId findFont(const char* name); + + /** + Sets the font size of current text style. + */ + void fontSize(float size); + + /** + Sets the blur of current text style. + */ + void fontBlur(float blur); + + /** + Sets the letter spacing of current text style. + */ + void textLetterSpacing(float spacing); + + /** + Sets the proportional line height of current text style. The line height is specified as multiple of font size. + */ + void textLineHeight(float lineHeight); + + /** + Sets the text align of current text style. + */ + void textAlign(Align align); + + /** + Sets the text align of current text style. + Overloaded function for convenience. + @see Align + */ + void textAlign(int align); + + /** + Sets the font face based on specified id of current text style. + */ + void fontFaceId(FontId font); + + /** + Sets the font face based on specified name of current text style. + */ + void fontFace(const char* font); + + /** + Draws text string at specified location. If end is specified only the sub-string up to the end is drawn. + */ + float text(float x, float y, const char* string, const char* end); + + /** + Draws multi-line text string at specified location wrapped at the specified width. If end is specified only the sub-string up to the end is drawn. + White space is stripped at the beginning of the rows, the text is split at word boundaries or when new-line characters are encountered. + Words longer than the max width are slit at nearest character (i.e. no hyphenation). + */ + void textBox(float x, float y, float breakRowWidth, const char* string, const char* end); + + /** + Measures the specified text string. The bounds value are [xmin,ymin, xmax,ymax]. + Returns the horizontal advance of the measured text (i.e. where the next character should drawn). + Measured values are returned in local coordinate space. + */ + float textBounds(float x, float y, const char* string, const char* end, Rectangle& bounds); + + /** + Measures the specified multi-text string. Parameter bounds should be a pointer to float[4], + if the bounding box of the text should be returned. The bounds value are [xmin,ymin, xmax,ymax] + Measured values are returned in local coordinate space. + */ + void textBoxBounds(float x, float y, float breakRowWidth, const char* string, const char* end, float bounds[4]); + + /** + Calculates the glyph x positions of the specified text. If end is specified only the sub-string will be used. + Measured values are returned in local coordinate space. + */ + int textGlyphPositions(float x, float y, const char* string, const char* end, GlyphPosition& positions, int maxPositions); + + /** + Returns the vertical metrics based on the current text style. + Measured values are returned in local coordinate space. + */ + void textMetrics(float* ascender, float* descender, float* lineh); + + /** + Breaks the specified text into lines. If end is specified only the sub-string will be used. + White space is stripped at the beginning of the rows, the text is split at word boundaries or when new-line characters are encountered. + Words longer than the max width are slit at nearest character (i.e. no hyphenation). + */ + int textBreakLines(const char* string, const char* end, float breakRowWidth, TextRow& rows, int maxRows); + +private: + NVGcontext* const fContext; + bool fInFrame; + bool fIsSubWidget; + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NanoVG) +}; + +// ----------------------------------------------------------------------- +// NanoWidget + +/** + NanoVG Widget class. + + This class implements the NanoVG drawing API inside a DGL Widget. + The drawing function onDisplay() is implemented internally but a + new onNanoDisplay() needs to be overridden instead. + */ +class NanoWidget : public Widget, + public NanoVG +{ +public: + /** + Constructor. + @see CreateFlags + */ + explicit NanoWidget(Window& parent, int flags = CREATE_ANTIALIAS); + + /** + Constructor for a subwidget. + */ + explicit NanoWidget(Widget* groupWidget, int flags = CREATE_ANTIALIAS); + + /** + Constructor for a subwidget, reusing a NanoVG context. + */ + explicit NanoWidget(NanoWidget* groupWidget); + + /** + Destructor. + */ + virtual ~NanoWidget(); + +protected: + /** + New virtual onDisplay function. + @see onDisplay + */ + virtual void onNanoDisplay() = 0; + +private: + struct PrivateData; + PrivateData* const nData; + + /** + Widget display function. + Implemented internally to wrap begin/endFrame() automatically. + */ + void onDisplay() override; + + // these should not be used + void beginFrame(uint,uint) {} + void beginFrame(uint,uint,float) {} + void beginFrame(Widget*) {} + void cancelFrame() {} + void endFrame() {} + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NanoWidget) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_NANO_WIDGET_HPP_INCLUDED diff --git a/dpf/dgl/NanoWidgets.hpp b/dpf/dgl/NanoWidgets.hpp new file mode 100644 index 0000000..1636b3d --- /dev/null +++ b/dpf/dgl/NanoWidgets.hpp @@ -0,0 +1,67 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_NANO_WIDGETS_HPP_INCLUDED +#define DGL_NANO_WIDGETS_HPP_INCLUDED + +#include "NanoVG.hpp" +#include "../distrho/extra/String.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +class BlendishButton : public NanoWidget +{ +public: + class Callback + { + public: + virtual ~Callback() {} + virtual void blendishButtonClicked(BlendishButton* blendishButton, int button) = 0; + }; + + explicit BlendishButton(Window& parent, const char* text = "", int iconId = -1); + explicit BlendishButton(NanoWidget* widget, const char* text = "", int iconId = -1); + ~BlendishButton() override; + + int getIconId() const noexcept; + void setIconId(int iconId) noexcept; + + const char* getText() const noexcept; + void setText(const char* text) noexcept; + + void setCallback(Callback* callback) noexcept; + +protected: + void onNanoDisplay() override; + bool onMouse(const MouseEvent&) override; + bool onMotion(const MotionEvent&) override; + +private: + struct PrivateData; + PrivateData* const pData; + + void _updateBounds(); + + DISTRHO_LEAK_DETECTOR(BlendishButton) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_NANO_WIDGETS_HPP_INCLUDED diff --git a/dpf/dgl/StandaloneWindow.hpp b/dpf/dgl/StandaloneWindow.hpp new file mode 100644 index 0000000..72d6ea2 --- /dev/null +++ b/dpf/dgl/StandaloneWindow.hpp @@ -0,0 +1,61 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_STANDALONE_WINDOW_HPP_INCLUDED +#define DGL_STANDALONE_WINDOW_HPP_INCLUDED + +#include "Application.hpp" +#include "Widget.hpp" +#include "Window.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +class StandaloneWindow : public Application, + public Window +{ +public: + /** + Constructor. + */ + StandaloneWindow(); + + /** + Show window and execute application. + */ + void exec(); + +private: + Widget* fWidget; + + /** @internal */ + void onReshape(uint width, uint height) override; + + /** @internal */ + void _addWidget(Widget* widget) override; + + /** @internal */ + void _removeWidget(Widget* widget) override; + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(StandaloneWindow) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_STANDALONE_WINDOW_HPP_INCLUDED diff --git a/dpf/dgl/Widget.hpp b/dpf/dgl/Widget.hpp new file mode 100644 index 0000000..195f08c --- /dev/null +++ b/dpf/dgl/Widget.hpp @@ -0,0 +1,385 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_WIDGET_HPP_INCLUDED +#define DGL_WIDGET_HPP_INCLUDED + +#include "Geometry.hpp" + +#include + +// ----------------------------------------------------------------------- +// Forward class names + +START_NAMESPACE_DISTRHO +class UI; +END_NAMESPACE_DISTRHO + +START_NAMESPACE_DGL + +class Application; +class ImageSlider; +class NanoWidget; +class Window; +class StandaloneWindow; + +// ----------------------------------------------------------------------- + +/** + Base DGL Widget class. + + This is the base Widget class, from which all widgets are built. + + All widgets have a parent Window where they'll be drawn. + This parent is never changed during the widget lifetime. + + Widgets receive events in relative coordinates. + (0, 0) means its top-left position. + + Windows paint widgets in the order they are constructed. + Early widgets are drawn first, at the bottom, then newer ones on top. + Events are sent in the inverse order so that the top-most widget gets + a chance to catch the event and stop its propagation. + + All widget event callbacks do nothing by default. + */ +class Widget +{ +public: + /** + Base event data. + @a mod The currently active keyboard modifiers, @see Modifier. + @a time The timestamp (if any). + */ + struct BaseEvent { + uint mod; + uint32_t time; + + /** Constuctor */ + BaseEvent() noexcept : mod(0x0), time(0) {} + /** Destuctor */ + virtual ~BaseEvent() noexcept {} + }; + + /** + Keyboard event. + @a press True if the key was pressed, false if released. + @a key Unicode point of the key pressed. + @see onKeyboard + */ + struct KeyboardEvent : BaseEvent { + bool press; + uint key; + + /** Constuctor */ + KeyboardEvent() noexcept + : BaseEvent(), + press(false), + key(0) {} + }; + + /** + Special keyboard event. + @a press True if the key was pressed, false if released. + @a key The key pressed. + @see onSpecial + */ + struct SpecialEvent : BaseEvent { + bool press; + Key key; + + /** Constuctor */ + SpecialEvent() noexcept + : BaseEvent(), + press(false), + key(Key(0)) {} + }; + + /** + Mouse event. + @a button The button number (1 = left, 2 = middle, 3 = right). + @a press True if the key was pressed, false if released. + @a pos The widget-relative coordinates of the pointer. + @see onMouse + */ + struct MouseEvent : BaseEvent { + int button; + bool press; + Point pos; + + /** Constuctor */ + MouseEvent() noexcept + : BaseEvent(), + button(0), + press(false), + pos(0, 0) {} + }; + + /** + Mouse motion event. + @a pos The widget-relative coordinates of the pointer. + @see onMotion + */ + struct MotionEvent : BaseEvent { + Point pos; + + /** Constuctor */ + MotionEvent() noexcept + : BaseEvent(), + pos(0, 0) {} + }; + + /** + Mouse scroll event. + @a pos The widget-relative coordinates of the pointer. + @a delta The scroll distance. + @see onScroll + */ + struct ScrollEvent : BaseEvent { + Point pos; + Point delta; + + /** Constuctor */ + ScrollEvent() noexcept + : BaseEvent(), + pos(0, 0), + delta(0.0f, 0.0f) {} + }; + + /** + Resize event. + @a size The new widget size. + @a oldSize The previous size, may be null. + @see onResize + */ + struct ResizeEvent { + Size size; + Size oldSize; + + /** Constuctor */ + ResizeEvent() noexcept + : size(0, 0), + oldSize(0, 0) {} + }; + + /** + Constructor. + */ + explicit Widget(Window& parent); + + /** + Constructor for a subwidget. + */ + explicit Widget(Widget* groupWidget); + + /** + Destructor. + */ + virtual ~Widget(); + + /** + Check if this widget is visible within its parent window. + Invisible widgets do not receive events except resize. + */ + bool isVisible() const noexcept; + + /** + Set widget visible (or not) according to @a yesNo. + */ + void setVisible(bool yesNo); + + /** + Show widget. + This is the same as calling setVisible(true). + */ + void show(); + + /** + Hide widget. + This is the same as calling setVisible(false). + */ + void hide(); + + /** + Get width. + */ + uint getWidth() const noexcept; + + /** + Get height. + */ + uint getHeight() const noexcept; + + /** + Get size. + */ + const Size& getSize() const noexcept; + + /** + Set width. + */ + void setWidth(uint width) noexcept; + + /** + Set height. + */ + void setHeight(uint height) noexcept; + + /** + Set size using @a width and @a height values. + */ + void setSize(uint width, uint height) noexcept; + + /** + Set size. + */ + void setSize(const Size& size) noexcept; + + /** + Get absolute X. + */ + int getAbsoluteX() const noexcept; + + /** + Get absolute Y. + */ + int getAbsoluteY() const noexcept; + + /** + Get absolute position. + */ + const Point& getAbsolutePos() const noexcept; + + /** + Set absolute X. + */ + void setAbsoluteX(int x) noexcept; + + /** + Set absolute Y. + */ + void setAbsoluteY(int y) noexcept; + + /** + Set absolute position using @a x and @a y values. + */ + void setAbsolutePos(int x, int y) noexcept; + + /** + Set absolute position. + */ + void setAbsolutePos(const Point& pos) noexcept; + + /** + Get this widget's window application. + Same as calling getParentWindow().getApp(). + */ + Application& getParentApp() const noexcept; + + /** + Get parent window, as passed in the constructor. + */ + Window& getParentWindow() const noexcept; + + /** + Check if this widget contains the point defined by @a x and @a y. + */ + bool contains(int x, int y) const noexcept; + + /** + Check if this widget contains the point @a pos. + */ + bool contains(const Point& pos) const noexcept; + + /** + Tell this widget's window to repaint itself. + */ + void repaint() noexcept; + + /** + Get the Id associated with this widget. + @see setId + */ + uint getId() const noexcept; + + /** + Set an Id to be associated with this widget. + @see getId + */ + void setId(uint id) noexcept; + +protected: + /** + A function called to draw the view contents with OpenGL. + */ + virtual void onDisplay() = 0; + + /** + A function called when a key is pressed or released. + @return True to stop event propagation, false otherwise. + */ + virtual bool onKeyboard(const KeyboardEvent&); + + /** + A function called when a special key is pressed or released. + @return True to stop event propagation, false otherwise. + */ + virtual bool onSpecial(const SpecialEvent&); + + /** + A function called when a mouse button is pressed or released. + @return True to stop event propagation, false otherwise. + */ + virtual bool onMouse(const MouseEvent&); + + /** + A function called when the pointer moves. + @return True to stop event propagation, false otherwise. + */ + virtual bool onMotion(const MotionEvent&); + + /** + A function called on scrolling (e.g. mouse wheel or track pad). + @return True to stop event propagation, false otherwise. + */ + virtual bool onScroll(const ScrollEvent&); + + /** + A function called when the widget is resized. + */ + virtual void onResize(const ResizeEvent&); + +private: + struct PrivateData; + PrivateData* const pData; + + /** @internal */ + explicit Widget(Widget* groupWidget, bool addToSubWidgets); + + friend class ImageSlider; + friend class NanoWidget; + friend class Window; + friend class StandaloneWindow; + friend class DISTRHO_NAMESPACE::UI; + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Widget) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_WIDGET_HPP_INCLUDED diff --git a/dpf/dgl/Window.hpp b/dpf/dgl/Window.hpp new file mode 100644 index 0000000..3e1f75c --- /dev/null +++ b/dpf/dgl/Window.hpp @@ -0,0 +1,134 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_WINDOW_HPP_INCLUDED +#define DGL_WINDOW_HPP_INCLUDED + +#include "Geometry.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +class Application; +class Widget; +class StandaloneWindow; + +class Window +{ +public: + /** + File browser options. + */ + struct FileBrowserOptions { + const char* startDir; + const char* title; + uint width; + uint height; + + /** + File browser buttons. + + 0 means hidden. + 1 means visible and unchecked. + 2 means visible and checked. + */ + struct Buttons { + uint listAllFiles; + uint showHidden; + uint showPlaces; + + /** Constuctor for default values */ + Buttons() + : listAllFiles(2), + showHidden(1), + showPlaces(1) {} + } buttons; + + /** Constuctor for default values */ + FileBrowserOptions() + : startDir(nullptr), + title(nullptr), + width(0), + height(0), + buttons() {} + }; + + explicit Window(Application& app); + explicit Window(Application& app, Window& parent); + explicit Window(Application& app, intptr_t parentId); + virtual ~Window(); + + void show(); + void hide(); + void close(); + void exec(bool lockWait = false); + + void focus(); + void repaint() noexcept; + + bool openFileBrowser(const FileBrowserOptions& options); + + bool isVisible() const noexcept; + void setVisible(bool yesNo); + + bool isResizable() const noexcept; + void setResizable(bool yesNo); + + uint getWidth() const noexcept; + uint getHeight() const noexcept; + Size getSize() const noexcept; + void setSize(uint width, uint height); + void setSize(Size size); + + const char* getTitle() const noexcept; + void setTitle(const char* title); + + void setTransientWinId(uintptr_t winId); + + Application& getApp() const noexcept; + intptr_t getWindowId() const noexcept; + + void addIdleCallback(IdleCallback* const callback); + void removeIdleCallback(IdleCallback* const callback); + +protected: + virtual void onDisplayBefore(); + virtual void onDisplayAfter(); + virtual void onReshape(uint width, uint height); + virtual void onClose(); + + virtual void fileBrowserSelected(const char* filename); + +private: + struct PrivateData; + PrivateData* const pData; + friend class Application; + friend class Widget; + friend class StandaloneWindow; + + virtual void _addWidget(Widget* const widget); + virtual void _removeWidget(Widget* const widget); + void _idle(); + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Window) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_WINDOW_HPP_INCLUDED diff --git a/dpf/dgl/src/Application.cpp b/dpf/dgl/src/Application.cpp new file mode 100644 index 0000000..0d9f67a --- /dev/null +++ b/dpf/dgl/src/Application.cpp @@ -0,0 +1,75 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "ApplicationPrivateData.hpp" +#include "../Window.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +Application::Application() + : pData(new PrivateData()), + leakDetector_Application() {} + +Application::~Application() +{ + delete pData; +} + +void Application::idle() +{ + for (std::list::iterator it = pData->windows.begin(), ite = pData->windows.end(); it != ite; ++it) + { + Window* const window(*it); + window->_idle(); + } + + for (std::list::iterator it = pData->idleCallbacks.begin(), ite = pData->idleCallbacks.end(); it != ite; ++it) + { + IdleCallback* const idleCallback(*it); + idleCallback->idleCallback(); + } +} + +void Application::exec() +{ + for (; pData->doLoop;) + { + idle(); + d_msleep(10); + } +} + +void Application::quit() +{ + pData->doLoop = false; + + for (std::list::reverse_iterator rit = pData->windows.rbegin(), rite = pData->windows.rend(); rit != rite; ++rit) + { + Window* const window(*rit); + window->close(); + } +} + +bool Application::isQuiting() const noexcept +{ + return !pData->doLoop; +} + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL diff --git a/dpf/dgl/src/ApplicationPrivateData.hpp b/dpf/dgl/src/ApplicationPrivateData.hpp new file mode 100644 index 0000000..a0b1c1b --- /dev/null +++ b/dpf/dgl/src/ApplicationPrivateData.hpp @@ -0,0 +1,71 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_APP_PRIVATE_DATA_HPP_INCLUDED +#define DGL_APP_PRIVATE_DATA_HPP_INCLUDED + +#include "../Application.hpp" +#include "../../distrho/extra/Sleep.hpp" + +#include + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +struct Application::PrivateData { + bool doLoop; + uint visibleWindows; + std::list windows; + std::list idleCallbacks; + + PrivateData() + : doLoop(true), + visibleWindows(0), + windows(), + idleCallbacks() {} + + ~PrivateData() + { + DISTRHO_SAFE_ASSERT(! doLoop); + DISTRHO_SAFE_ASSERT(visibleWindows == 0); + + windows.clear(); + idleCallbacks.clear(); + } + + void oneShown() noexcept + { + if (++visibleWindows == 1) + doLoop = true; + } + + void oneHidden() noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(visibleWindows > 0,); + + if (--visibleWindows == 0) + doLoop = false; + } + + DISTRHO_DECLARE_NON_COPY_STRUCT(PrivateData) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_APP_PRIVATE_DATA_HPP_INCLUDED diff --git a/dpf/dgl/src/Color.cpp b/dpf/dgl/src/Color.cpp new file mode 100644 index 0000000..eef4b6a --- /dev/null +++ b/dpf/dgl/src/Color.cpp @@ -0,0 +1,245 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "../Color.hpp" + +#include "nanovg/nanovg.h" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +static void fixRange(float& value) +{ + /**/ if (value < 0.0f) + value = 0.0f; + else if (value > 1.0f) + value = 1.0f; +} + +static float getFixedRange(const float& value) +{ + if (value <= 0.0f) + return 0.0f; + if (value >= 1.0f) + return 1.0f; + return value; +} + +static uchar getFixedRange2(const float& value) +{ + const float value2(getFixedRange(value)*255.0f); + if (value2 <= 0.0f) + return 0; + if (value2 >= 255.0f) + return 255; + return static_cast(value2); +} + +// ----------------------------------------------------------------------- + +Color::Color() noexcept + : red(1.0f), + green(1.0f), + blue(1.0f), + alpha(1.0f) {} + +Color::Color(int r, int g, int b, int a) noexcept + : red(static_cast(r)/255.0f), + green(static_cast(g)/255.0f), + blue(static_cast(b)/255.0f), + alpha(static_cast(a)/255.0f) +{ + fixBounds(); +} + +Color::Color(float r, float g, float b, float a) noexcept + : red(r), + green(g), + blue(b), + alpha(a) +{ + fixBounds(); +} + +Color::Color(const Color& color) noexcept + : red(color.red), + green(color.green), + blue(color.blue), + alpha(color.alpha) +{ + fixBounds(); +} + +Color& Color::operator=(const Color& color) noexcept +{ + red = color.red; + green = color.green; + blue = color.blue; + alpha = color.alpha; + fixBounds(); + return *this; +} + +Color::Color(const Color& color1, const Color& color2, float u) noexcept + : red(color1.red), + green(color1.green), + blue(color1.blue), + alpha(color1.alpha) +{ + interpolate(color2, u); +} + +Color Color::fromHSL(float hue, float saturation, float lightness, float alpha) +{ + return nvgHSLA(hue, saturation, lightness, static_cast(getFixedRange(alpha)*255.0f)); +} + +Color Color::fromHTML(const char* rgb, float alpha) +{ + Color fallback; + DISTRHO_SAFE_ASSERT_RETURN(rgb != nullptr && rgb[0] != '\0', fallback); + + if (rgb[0] == '#') ++rgb; + DISTRHO_SAFE_ASSERT_RETURN(rgb[0] != '\0', fallback); + + std::size_t rgblen(std::strlen(rgb)); + DISTRHO_SAFE_ASSERT_RETURN(rgblen == 3 || rgblen == 6, fallback); + + char rgbtmp[3] = { '\0', '\0', '\0' }; + int r, g, b; + + if (rgblen == 3) + { + rgbtmp[0] = rgb[0]; + r = static_cast(std::strtol(rgbtmp, nullptr, 16)); + + rgbtmp[0] = rgb[1]; + g = static_cast(std::strtol(rgbtmp, nullptr, 16)); + + rgbtmp[0] = rgb[2]; + b = static_cast(std::strtol(rgbtmp, nullptr, 16)); + } + else + { + rgbtmp[0] = rgb[0]; + rgbtmp[1] = rgb[1]; + r = static_cast(std::strtol(rgbtmp, nullptr, 16)); + + rgbtmp[0] = rgb[2]; + rgbtmp[1] = rgb[3]; + g = static_cast(std::strtol(rgbtmp, nullptr, 16)); + + rgbtmp[0] = rgb[4]; + rgbtmp[1] = rgb[5]; + b = static_cast(std::strtol(rgbtmp, nullptr, 16)); + } + + return Color(r, g, b, static_cast(getFixedRange(alpha)*255.0f)); +} + +void Color::interpolate(const Color& other, float u) noexcept +{ + fixRange(u); + const float oneMinusU(1.0f - u); + + red = red * oneMinusU + other.red * u; + green = green * oneMinusU + other.green * u; + blue = blue * oneMinusU + other.blue * u; + alpha = alpha * oneMinusU + other.alpha * u; + + fixBounds(); +} + +// ----------------------------------------------------------------------- + +bool Color::isEqual(const Color& color, bool withAlpha) noexcept +{ + const uchar r1 = getFixedRange2(rgba[0]); + const uchar g1 = getFixedRange2(rgba[1]); + const uchar b1 = getFixedRange2(rgba[2]); + const uchar a1 = getFixedRange2(rgba[3]); + + const uchar r2 = getFixedRange2(color.rgba[0]); + const uchar g2 = getFixedRange2(color.rgba[1]); + const uchar b2 = getFixedRange2(color.rgba[2]); + const uchar a2 = getFixedRange2(color.rgba[3]); + + if (withAlpha) + return (r1 == r2 && g1 == g2 && b1 == b2 && a1 == a2); + else + return (r1 == r2 && g1 == g2 && b1 == b2); +} + +bool Color::isNotEqual(const Color& color, bool withAlpha) noexcept +{ + const uchar r1 = getFixedRange2(rgba[0]); + const uchar g1 = getFixedRange2(rgba[1]); + const uchar b1 = getFixedRange2(rgba[2]); + const uchar a1 = getFixedRange2(rgba[3]); + + const uchar r2 = getFixedRange2(color.rgba[0]); + const uchar g2 = getFixedRange2(color.rgba[1]); + const uchar b2 = getFixedRange2(color.rgba[2]); + const uchar a2 = getFixedRange2(color.rgba[3]); + + if (withAlpha) + return (r1 != r2 || g1 != g2 || b1 != b2 || a1 != a2); + else + return (r1 != r2 || g1 != g2 || b1 != b2); +} + +bool Color::operator==(const Color& color) noexcept +{ + return isEqual(color, true); +} + +bool Color::operator!=(const Color& color) noexcept +{ + return isNotEqual(color, true); +} + +// ----------------------------------------------------------------------- + +void Color::fixBounds() noexcept +{ + fixRange(red); + fixRange(green); + fixRange(blue); + fixRange(alpha); +} + +// ----------------------------------------------------------------------- + +Color::Color(const NVGcolor& c) noexcept + : red(c.r), green(c.g), blue(c.b), alpha(c.a) +{ + fixBounds(); +} + +Color::operator NVGcolor() const noexcept +{ + NVGcolor nc; + nc.r = red; + nc.g = green; + nc.b = blue; + nc.a = alpha; + return nc; +} + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL diff --git a/dpf/dgl/src/Common.hpp b/dpf/dgl/src/Common.hpp new file mode 100644 index 0000000..084d27e --- /dev/null +++ b/dpf/dgl/src/Common.hpp @@ -0,0 +1,129 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_COMMON_HPP_INCLUDED +#define DGL_COMMON_HPP_INCLUDED + +#include "../ImageWidgets.hpp" +#include "../NanoWidgets.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +struct ButtonImpl { + enum State { + kStateNormal = 0, + kStateHover, + kStateDown + }; + + int button; + int state; + Widget* self; + + BlendishButton::Callback* callback_b; + ImageButton::Callback* callback_i; + + ButtonImpl(Widget* const s) noexcept + : button(-1), + state(kStateNormal), + self(s), + callback_b(nullptr), + callback_i(nullptr) {} + + bool onMouse(const Widget::MouseEvent& ev) + { + // button was released, handle it now + if (button != -1 && ! ev.press) + { + DISTRHO_SAFE_ASSERT(state == kStateDown); + + // release button + const int button2 = button; + button = -1; + + // cursor was moved outside the button bounds, ignore click + if (! self->contains(ev.pos)) + { + state = kStateNormal; + self->repaint(); + return true; + } + + // still on bounds, register click + state = kStateHover; + self->repaint(); + + if (callback_b != nullptr) + callback_b->blendishButtonClicked((BlendishButton*)self, button2); + if (callback_i != nullptr) + callback_i->imageButtonClicked((ImageButton*)self, button2); + + return true; + } + + // button was pressed, wait for release + if (ev.press && self->contains(ev.pos)) + { + button = ev.button; + state = kStateDown; + self->repaint(); + return true; + } + + return false; + } + + bool onMotion(const Widget::MotionEvent& ev) + { + // keep pressed + if (button != -1) + return true; + + if (self->contains(ev.pos)) + { + // check if entering hover + if (state == kStateNormal) + { + state = kStateHover; + self->repaint(); + return true; + } + } + else + { + // check if exiting hover + if (state == kStateHover) + { + state = kStateNormal; + self->repaint(); + return true; + } + } + + return false; + } + + DISTRHO_PREVENT_HEAP_ALLOCATION + DISTRHO_DECLARE_NON_COPY_STRUCT(ButtonImpl) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_APP_PRIVATE_DATA_HPP_INCLUDED diff --git a/dpf/dgl/src/Geometry.cpp b/dpf/dgl/src/Geometry.cpp new file mode 100644 index 0000000..65dde8c --- /dev/null +++ b/dpf/dgl/src/Geometry.cpp @@ -0,0 +1,1072 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "../Geometry.hpp" + +#include + +START_NAMESPACE_DGL + +static const float M_2PIf = 3.14159265358979323846f*2.0f; + +// ----------------------------------------------------------------------- +// Point + +template +Point::Point() noexcept + : fX(0), + fY(0) {} + +template +Point::Point(const T& x, const T& y) noexcept + : fX(x), + fY(y) {} + +template +Point::Point(const Point& pos) noexcept + : fX(pos.fX), + fY(pos.fY) {} + +template +const T& Point::getX() const noexcept +{ + return fX; +} + +template +const T& Point::getY() const noexcept +{ + return fY; +} + +template +void Point::setX(const T& x) noexcept +{ + fX = x; +} + +template +void Point::setY(const T& y) noexcept +{ + fY = y; +} + +template +void Point::setPos(const T& x, const T& y) noexcept +{ + fX = x; + fY = y; +} + +template +void Point::setPos(const Point& pos) noexcept +{ + fX = pos.fX; + fY = pos.fY; +} + +template +void Point::moveBy(const T& x, const T& y) noexcept +{ + fX = static_cast(fX+x); + fY = static_cast(fY+y); +} + +template +void Point::moveBy(const Point& pos) noexcept +{ + fX = static_cast(fX+pos.fX); + fY = static_cast(fY+pos.fY); +} + +template +bool Point::isZero() const noexcept +{ + return fX == 0 && fY == 0; +} + +template +bool Point::isNotZero() const noexcept +{ + return fX != 0 || fY != 0; +} + +template +Point Point::operator+(const Point& pos) noexcept +{ + return Point(fX+pos.fX, fY+pos.fY); +} + +template +Point Point::operator-(const Point& pos) noexcept +{ + return Point(fX-pos.fX, fY-pos.fY); +} + +template +Point& Point::operator=(const Point& pos) noexcept +{ + fX = pos.fX; + fY = pos.fY; + return *this; +} + +template +Point& Point::operator+=(const Point& pos) noexcept +{ + fX = static_cast(fX+pos.fX); + fY = static_cast(fY+pos.fY); + return *this; +} + +template +Point& Point::operator-=(const Point& pos) noexcept +{ + fX = static_cast(fX-pos.fX); + fY = static_cast(fY-pos.fY); + return *this; +} + +template +bool Point::operator==(const Point& pos) const noexcept +{ + return (fX == pos.fX && fY == pos.fY); +} + +template +bool Point::operator!=(const Point& pos) const noexcept +{ + return (fX != pos.fX || fY != pos.fY); +} + +// ----------------------------------------------------------------------- +// Size + +template +Size::Size() noexcept + : fWidth(0), + fHeight(0) {} + +template +Size::Size(const T& width, const T& height) noexcept + : fWidth(width), + fHeight(height) {} + +template +Size::Size(const Size& size) noexcept + : fWidth(size.fWidth), + fHeight(size.fHeight) {} + +template +const T& Size::getWidth() const noexcept +{ + return fWidth; +} + +template +const T& Size::getHeight() const noexcept +{ + return fHeight; +} + +template +void Size::setWidth(const T& width) noexcept +{ + fWidth = width; +} + +template +void Size::setHeight(const T& height) noexcept +{ + fHeight = height; +} + +template +void Size::setSize(const T& width, const T& height) noexcept +{ + fWidth = width; + fHeight = height; +} + +template +void Size::setSize(const Size& size) noexcept +{ + fWidth = size.fWidth; + fHeight = size.fHeight; +} + +template +void Size::growBy(double multiplier) noexcept +{ + fWidth = static_cast(static_cast(fWidth)*multiplier); + fHeight = static_cast(static_cast(fHeight)*multiplier); +} + +template +void Size::shrinkBy(double divider) noexcept +{ + fWidth = static_cast(static_cast(fWidth)/divider); + fHeight = static_cast(static_cast(fHeight)/divider); +} + +template +bool Size::isNull() const noexcept +{ + return fWidth == 0 && fHeight == 0; +} + +template +bool Size::isNotNull() const noexcept +{ + return fWidth != 0 || fHeight != 0; +} + +template +bool Size::isValid() const noexcept +{ + return fWidth > 1 && fHeight > 1; +} + +template +bool Size::isInvalid() const noexcept +{ + return fWidth <= 0 || fHeight <= 0; +} + +template +Size Size::operator+(const Size& size) noexcept +{ + return Size(fWidth+size.fWidth, fHeight+size.fHeight); +} + +template +Size Size::operator-(const Size& size) noexcept +{ + return Size(fWidth-size.fWidth, fHeight-size.fHeight); +} + +template +Size& Size::operator=(const Size& size) noexcept +{ + fWidth = size.fWidth; + fHeight = size.fHeight; + return *this; +} + +template +Size& Size::operator+=(const Size& size) noexcept +{ + fWidth = static_cast(fWidth+size.fWidth); + fHeight = static_cast(fHeight+size.fHeight); + return *this; +} + +template +Size& Size::operator-=(const Size& size) noexcept +{ + fWidth = static_cast(fWidth-size.fWidth); + fHeight = static_cast(fHeight-size.fHeight); + return *this; +} + +template +Size& Size::operator*=(double m) noexcept +{ + fWidth = static_cast(static_cast(fWidth)*m); + fHeight = static_cast(static_cast(fHeight)*m); + return *this; +} + +template +Size& Size::operator/=(double d) noexcept +{ + fWidth = static_cast(static_cast(fWidth)/d); + fHeight = static_cast(static_cast(fHeight)/d); + return *this; +} + +template +bool Size::operator==(const Size& size) const noexcept +{ + return (fWidth == size.fWidth && fHeight == size.fHeight); +} + +template +bool Size::operator!=(const Size& size) const noexcept +{ + return (fWidth != size.fWidth || fHeight != size.fHeight); +} + +// ----------------------------------------------------------------------- +// Line + +template +Line::Line() noexcept + : fPosStart(0, 0), + fPosEnd(0, 0) {} + +template +Line::Line(const T& startX, const T& startY, const T& endX, const T& endY) noexcept + : fPosStart(startX, startY), + fPosEnd(endX, endY) {} + +template +Line::Line(const T& startX, const T& startY, const Point& endPos) noexcept + : fPosStart(startX, startY), + fPosEnd(endPos) {} + +template +Line::Line(const Point& startPos, const T& endX, const T& endY) noexcept + : fPosStart(startPos), + fPosEnd(endX, endY) {} + +template +Line::Line(const Point& startPos, const Point& endPos) noexcept + : fPosStart(startPos), + fPosEnd(endPos) {} + +template +Line::Line(const Line& line) noexcept + : fPosStart(line.fPosStart), + fPosEnd(line.fPosEnd) {} + +template +const T& Line::getStartX() const noexcept +{ + return fPosStart.fX; +} + +template +const T& Line::getStartY() const noexcept +{ + return fPosStart.fY; +} + +template +const T& Line::getEndX() const noexcept +{ + return fPosEnd.fX; +} + +template +const T& Line::getEndY() const noexcept +{ + return fPosEnd.fY; +} + +template +const Point& Line::getStartPos() const noexcept +{ + return fPosStart; +} + +template +const Point& Line::getEndPos() const noexcept +{ + return fPosEnd; +} + +template +void Line::setStartX(const T& x) noexcept +{ + fPosStart.fX = x; +} + +template +void Line::setStartY(const T& y) noexcept +{ + fPosStart.fY = y; +} + +template +void Line::setStartPos(const T& x, const T& y) noexcept +{ + fPosStart = Point(x, y); +} + +template +void Line::setStartPos(const Point& pos) noexcept +{ + fPosStart = pos; +} + +template +void Line::setEndX(const T& x) noexcept +{ + fPosEnd.fX = x; +} + +template +void Line::setEndY(const T& y) noexcept +{ + fPosEnd.fY = y; +} + +template +void Line::setEndPos(const T& x, const T& y) noexcept +{ + fPosEnd = Point(x, y); +} + +template +void Line::setEndPos(const Point& pos) noexcept +{ + fPosEnd = pos; +} + +template +void Line::moveBy(const T& x, const T& y) noexcept +{ + fPosStart.moveBy(x, y); + fPosEnd.moveBy(x, y); +} + +template +void Line::moveBy(const Point& pos) noexcept +{ + fPosStart.moveBy(pos); + fPosEnd.moveBy(pos); +} + +template +void Line::draw() +{ + DISTRHO_SAFE_ASSERT_RETURN(fPosStart != fPosEnd,); + + glBegin(GL_LINES); + + { + glVertex2d(fPosStart.fX, fPosStart.fY); + glVertex2d(fPosEnd.fX, fPosEnd.fY); + } + + glEnd(); +} + +template +bool Line::isNull() const noexcept +{ + return fPosStart == fPosEnd; +} + +template +bool Line::isNotNull() const noexcept +{ + return fPosStart != fPosEnd; +} + +template +Line& Line::operator=(const Line& line) noexcept +{ + fPosStart = line.fPosStart; + fPosEnd = line.fPosEnd; + return *this; +} + +template +bool Line::operator==(const Line& line) const noexcept +{ + return (fPosStart == line.fPosStart && fPosEnd == line.fPosEnd); +} + +template +bool Line::operator!=(const Line& line) const noexcept +{ + return (fPosStart != line.fPosStart || fPosEnd != line.fPosEnd); +} + +// ----------------------------------------------------------------------- +// Circle + +template +Circle::Circle() noexcept + : fPos(0, 0), + fSize(0.0f), + fNumSegments(0), + fTheta(0.0f), + fCos(0.0f), + fSin(0.0f) {} + +template +Circle::Circle(const T& x, const T& y, const float size, const uint numSegments) + : fPos(x, y), + fSize(size), + fNumSegments(numSegments >= 3 ? numSegments : 3), + fTheta(M_2PIf / static_cast(fNumSegments)), + fCos(std::cos(fTheta)), + fSin(std::sin(fTheta)) +{ + DISTRHO_SAFE_ASSERT(fSize > 0.0f); +} + +template +Circle::Circle(const Point& pos, const float size, const uint numSegments) + : fPos(pos), + fSize(size), + fNumSegments(numSegments >= 3 ? numSegments : 3), + fTheta(M_2PIf / static_cast(fNumSegments)), + fCos(std::cos(fTheta)), + fSin(std::sin(fTheta)) +{ + DISTRHO_SAFE_ASSERT(fSize > 0.0f); +} + +template +Circle::Circle(const Circle& cir) noexcept + : fPos(cir.fPos), + fSize(cir.fSize), + fNumSegments(cir.fNumSegments), + fTheta(cir.fTheta), + fCos(cir.fCos), + fSin(cir.fSin) +{ + DISTRHO_SAFE_ASSERT(fSize > 0.0f); +} + +template +const T& Circle::getX() const noexcept +{ + return fPos.fX; +} + +template +const T& Circle::getY() const noexcept +{ + return fPos.fX; +} + +template +const Point& Circle::getPos() const noexcept +{ + return fPos; +} + +template +void Circle::setX(const T& x) noexcept +{ + fPos.fX = x; +} + +template +void Circle::setY(const T& y) noexcept +{ + fPos.fY = y; +} + +template +void Circle::setPos(const T& x, const T& y) noexcept +{ + fPos.fX = x; + fPos.fY = y; +} + +template +void Circle::setPos(const Point& pos) noexcept +{ + fPos = pos; +} + +template +float Circle::getSize() const noexcept +{ + return fSize; +} + +template +void Circle::setSize(const float size) noexcept +{ + DISTRHO_SAFE_ASSERT_RETURN(size > 0.0f,); + + fSize = size; +} + +template +uint Circle::getNumSegments() const noexcept +{ + return fNumSegments; +} + +template +void Circle::setNumSegments(const uint num) +{ + DISTRHO_SAFE_ASSERT_RETURN(num >= 3,); + + if (fNumSegments == num) + return; + + fNumSegments = num; + + fTheta = M_2PIf / static_cast(fNumSegments); + fCos = std::cos(fTheta); + fSin = std::sin(fTheta); +} + +template +void Circle::draw() +{ + _draw(false); +} + +template +void Circle::drawOutline() +{ + _draw(true); +} + +template +Circle& Circle::operator=(const Circle& cir) noexcept +{ + fPos = cir.fPos; + fSize = cir.fSize; + fTheta = cir.fTheta; + fCos = cir.fCos; + fSin = cir.fSin; + fNumSegments = cir.fNumSegments; + return *this; +} + +template +bool Circle::operator==(const Circle& cir) const noexcept +{ + return (fPos == cir.fPos && d_isEqual(fSize, cir.fSize) && fNumSegments == cir.fNumSegments); +} + +template +bool Circle::operator!=(const Circle& cir) const noexcept +{ + return (fPos != cir.fPos || d_isNotEqual(fSize, cir.fSize) || fNumSegments != cir.fNumSegments); +} + +template +void Circle::_draw(const bool outline) +{ + DISTRHO_SAFE_ASSERT_RETURN(fNumSegments >= 3 && fSize > 0.0f,); + + float t, x = fSize, y = 0.0f; + + glBegin(outline ? GL_LINE_LOOP : GL_POLYGON); + + for (uint i=0; i +Triangle::Triangle() noexcept + : fPos1(0, 0), + fPos2(0, 0), + fPos3(0, 0) {} + +template +Triangle::Triangle(const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, const T& y3) noexcept + : fPos1(x1, y1), + fPos2(x2, y2), + fPos3(x3, y3) {} + +template +Triangle::Triangle(const Point& pos1, const Point& pos2, const Point& pos3) noexcept + : fPos1(pos1), + fPos2(pos2), + fPos3(pos3) {} + +template +Triangle::Triangle(const Triangle& tri) noexcept + : fPos1(tri.fPos1), + fPos2(tri.fPos2), + fPos3(tri.fPos3) {} + +template +void Triangle::draw() +{ + _draw(false); +} + +template +void Triangle::drawOutline() +{ + _draw(true); +} + +template +bool Triangle::isNull() const noexcept +{ + return fPos1 == fPos2 && fPos1 == fPos3; +} + +template +bool Triangle::isNotNull() const noexcept +{ + return fPos1 != fPos2 || fPos1 != fPos3; +} + +template +bool Triangle::isValid() const noexcept +{ + return fPos1 != fPos2 && fPos1 != fPos3; +} + +template +bool Triangle::isInvalid() const noexcept +{ + return fPos1 == fPos2 || fPos1 == fPos3; +} + +template +Triangle& Triangle::operator=(const Triangle& tri) noexcept +{ + fPos1 = tri.fPos1; + fPos2 = tri.fPos2; + fPos3 = tri.fPos3; + return *this; +} + +template +bool Triangle::operator==(const Triangle& tri) const noexcept +{ + return (fPos1 == tri.fPos1 && fPos2 == tri.fPos2 && fPos3 == tri.fPos3); +} + +template +bool Triangle::operator!=(const Triangle& tri) const noexcept +{ + return (fPos1 != tri.fPos1 || fPos2 != tri.fPos2 || fPos3 != tri.fPos3); +} + +template +void Triangle::_draw(const bool outline) +{ + DISTRHO_SAFE_ASSERT_RETURN(fPos1 != fPos2 && fPos1 != fPos3,); + + glBegin(outline ? GL_LINE_LOOP : GL_TRIANGLES); + + { + glVertex2d(fPos1.fX, fPos1.fY); + glVertex2d(fPos2.fX, fPos2.fY); + glVertex2d(fPos3.fX, fPos3.fY); + } + + glEnd(); +} + +// ----------------------------------------------------------------------- +// Rectangle + +template +Rectangle::Rectangle() noexcept + : fPos(0, 0), + fSize(0, 0) {} + +template +Rectangle::Rectangle(const T& x, const T& y, const T& width, const T& height) noexcept + : fPos(x, y), + fSize(width, height) {} + +template +Rectangle::Rectangle(const T& x, const T& y, const Size& size) noexcept + : fPos(x, y), + fSize(size) {} + +template +Rectangle::Rectangle(const Point& pos, const T& width, const T& height) noexcept + : fPos(pos), + fSize(width, height) {} + +template +Rectangle::Rectangle(const Point& pos, const Size& size) noexcept + : fPos(pos), + fSize(size) {} + +template +Rectangle::Rectangle(const Rectangle& rect) noexcept + : fPos(rect.fPos), + fSize(rect.fSize) {} + +template +const T& Rectangle::getX() const noexcept +{ + return fPos.fX; +} + +template +const T& Rectangle::getY() const noexcept +{ + return fPos.fY; +} + +template +const T& Rectangle::getWidth() const noexcept +{ + return fSize.fWidth; +} + +template +const T& Rectangle::getHeight() const noexcept +{ + return fSize.fHeight; +} + +template +const Point& Rectangle::getPos() const noexcept +{ + return fPos; +} + +template +const Size& Rectangle::getSize() const noexcept +{ + return fSize; +} + +template +void Rectangle::setX(const T& x) noexcept +{ + fPos.fX = x; +} + +template +void Rectangle::setY(const T& y) noexcept +{ + fPos.fY = y; +} + +template +void Rectangle::setPos(const T& x, const T& y) noexcept +{ + fPos.fX = x; + fPos.fY = y; +} + +template +void Rectangle::setPos(const Point& pos) noexcept +{ + fPos = pos; +} + +template +void Rectangle::moveBy(const T& x, const T& y) noexcept +{ + fPos.moveBy(x, y); +} + +template +void Rectangle::moveBy(const Point& pos) noexcept +{ + fPos.moveBy(pos); +} + +template +void Rectangle::setWidth(const T& width) noexcept +{ + fSize.fWidth = width; +} + +template +void Rectangle::setHeight(const T& height) noexcept +{ + fSize.fHeight = height; +} + +template +void Rectangle::setSize(const T& width, const T& height) noexcept +{ + fSize.fWidth = width; + fSize.fHeight = height; +} + +template +void Rectangle::setSize(const Size& size) noexcept +{ + fSize = size; +} + +template +void Rectangle::growBy(double multiplier) noexcept +{ + fSize.growBy(multiplier); +} + +template +void Rectangle::shrinkBy(double divider) noexcept +{ + fSize.shrinkBy(divider); +} + +template +void Rectangle::setRectangle(const Point& pos, const Size& size) noexcept +{ + fPos = pos; + fSize = size; +} + +template +void Rectangle::setRectangle(const Rectangle& rect) noexcept +{ + fPos = rect.fPos; + fSize = rect.fSize; +} + +template +bool Rectangle::contains(const T& x, const T& y) const noexcept +{ + return (x >= fPos.fX && y >= fPos.fY && x <= fPos.fX+fSize.fWidth && y <= fPos.fY+fSize.fHeight); +} + +template +bool Rectangle::contains(const Point& pos) const noexcept +{ + return contains(pos.fX, pos.fY); +} + +template +bool Rectangle::containsX(const T& x) const noexcept +{ + return (x >= fPos.fX && x <= fPos.fX + fSize.fWidth); +} + +template +bool Rectangle::containsY(const T& y) const noexcept +{ + return (y >= fPos.fY && y <= fPos.fY + fSize.fHeight); +} + +template +void Rectangle::draw() +{ + _draw(false); +} + +template +void Rectangle::drawOutline() +{ + _draw(true); +} + +template +Rectangle& Rectangle::operator=(const Rectangle& rect) noexcept +{ + fPos = rect.fPos; + fSize = rect.fSize; + return *this; +} + +template +Rectangle& Rectangle::operator*=(double m) noexcept +{ + fSize *= m; + return *this; +} + +template +Rectangle& Rectangle::operator/=(double d) noexcept +{ + fSize /= d; + return *this; +} + +template +bool Rectangle::operator==(const Rectangle& rect) const noexcept +{ + return (fPos == rect.fPos && fSize == rect.fSize); +} + +template +bool Rectangle::operator!=(const Rectangle& rect) const noexcept +{ + return (fPos != rect.fPos || fSize != rect.fSize); +} + +template +void Rectangle::_draw(const bool outline) +{ + DISTRHO_SAFE_ASSERT_RETURN(fSize.isValid(),); + + glBegin(outline ? GL_LINE_LOOP : GL_QUADS); + + { + glTexCoord2f(0.0f, 0.0f); + glVertex2d(fPos.fX, fPos.fY); + + glTexCoord2f(1.0f, 0.0f); + glVertex2d(fPos.fX+fSize.fWidth, fPos.fY); + + glTexCoord2f(1.0f, 1.0f); + glVertex2d(fPos.fX+fSize.fWidth, fPos.fY+fSize.fHeight); + + glTexCoord2f(0.0f, 1.0f); + glVertex2d(fPos.fX, fPos.fY+fSize.fHeight); + } + + glEnd(); +} + +// ----------------------------------------------------------------------- +// Possible template data types + +template class Point; +template class Point; +template class Point; +template class Point; +template class Point; +template class Point; + +template class Size; +template class Size; +template class Size; +template class Size; +template class Size; +template class Size; + +template class Line; +template class Line; +template class Line; +template class Line; +template class Line; +template class Line; + +template class Circle; +template class Circle; +template class Circle; +template class Circle; +template class Circle; +template class Circle; + +template class Triangle; +template class Triangle; +template class Triangle; +template class Triangle; +template class Triangle; +template class Triangle; + +template class Rectangle; +template class Rectangle; +template class Rectangle; +template class Rectangle; +template class Rectangle; +template class Rectangle; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL diff --git a/dpf/dgl/src/Image.cpp b/dpf/dgl/src/Image.cpp new file mode 100644 index 0000000..db9bd47 --- /dev/null +++ b/dpf/dgl/src/Image.cpp @@ -0,0 +1,192 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "../Image.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +Image::Image() + : fRawData(nullptr), + fSize(0, 0), + fFormat(0), + fType(0), + fTextureId(0), + fIsReady(false) +{ + glGenTextures(1, &fTextureId); +} + +Image::Image(const char* const rawData, const uint width, const uint height, const GLenum format, const GLenum type) + : fRawData(rawData), + fSize(width, height), + fFormat(format), + fType(type), + fTextureId(0), + fIsReady(false) +{ + glGenTextures(1, &fTextureId); +} + +Image::Image(const char* const rawData, const Size& size, const GLenum format, const GLenum type) + : fRawData(rawData), + fSize(size), + fFormat(format), + fType(type), + fTextureId(0), + fIsReady(false) +{ + glGenTextures(1, &fTextureId); +} + +Image::Image(const Image& image) + : fRawData(image.fRawData), + fSize(image.fSize), + fFormat(image.fFormat), + fType(image.fType), + fTextureId(0), + fIsReady(false) +{ + glGenTextures(1, &fTextureId); +} + +Image::~Image() +{ + if (fTextureId != 0) + { + glDeleteTextures(1, &fTextureId); + fTextureId = 0; + } +} + +void Image::loadFromMemory(const char* const rawData, const uint width, const uint height, const GLenum format, const GLenum type) noexcept +{ + loadFromMemory(rawData, Size(width, height), format, type); +} + +void Image::loadFromMemory(const char* const rawData, const Size& size, const GLenum format, const GLenum type) noexcept +{ + fRawData = rawData; + fSize = size; + fFormat = format; + fType = type; + fIsReady = false; +} + +bool Image::isValid() const noexcept +{ + return (fRawData != nullptr && fSize.getWidth() > 0 && fSize.getHeight() > 0); +} + +uint Image::getWidth() const noexcept +{ + return fSize.getWidth(); +} + +uint Image::getHeight() const noexcept +{ + return fSize.getHeight(); +} + +const Size& Image::getSize() const noexcept +{ + return fSize; +} + +const char* Image::getRawData() const noexcept +{ + return fRawData; +} + +GLenum Image::getFormat() const noexcept +{ + return fFormat; +} + +GLenum Image::getType() const noexcept +{ + return fType; +} + +void Image::draw() +{ + drawAt(0, 0); +} + +void Image::drawAt(const int x, const int y) +{ + drawAt(Point(x, y)); +} + +void Image::drawAt(const Point& pos) +{ + if (fTextureId == 0 || ! isValid()) + return; + + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, fTextureId); + + if (! fIsReady) + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + + static const float trans[] = { 0.0f, 0.0f, 0.0f, 0.0f }; + glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, trans); + + glPixelStorei(GL_PACK_ALIGNMENT, 1); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, + static_cast(fSize.getWidth()), static_cast(fSize.getHeight()), 0, + fFormat, fType, fRawData); + + fIsReady = true; + } + + Rectangle(pos, static_cast(fSize.getWidth()), static_cast(fSize.getHeight())).draw(); + + glBindTexture(GL_TEXTURE_2D, 0); + glDisable(GL_TEXTURE_2D); +} + +// ----------------------------------------------------------------------- + +Image& Image::operator=(const Image& image) noexcept +{ + fRawData = image.fRawData; + fSize = image.fSize; + fFormat = image.fFormat; + fType = image.fType; + fIsReady = false; + return *this; +} + +bool Image::operator==(const Image& image) const noexcept +{ + return (fRawData == image.fRawData && fSize == image.fSize); +} + +bool Image::operator!=(const Image& image) const noexcept +{ + return !operator==(image); +} + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL diff --git a/dpf/dgl/src/ImageWidgets.cpp b/dpf/dgl/src/ImageWidgets.cpp new file mode 100644 index 0000000..ec02c02 --- /dev/null +++ b/dpf/dgl/src/ImageWidgets.cpp @@ -0,0 +1,1094 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "../ImageWidgets.hpp" +#include "Common.hpp" +#include "WidgetPrivateData.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +ImageAboutWindow::ImageAboutWindow(Window& parent, const Image& image) + : Window(parent.getApp(), parent), + Widget((Window&)*this), + fImgBackground(image), + leakDetector_ImageAboutWindow() +{ + Window::setResizable(false); + Window::setSize(image.getSize()); + Window::setTitle("About"); +} + +ImageAboutWindow::ImageAboutWindow(Widget* widget, const Image& image) + : Window(widget->getParentApp(), widget->getParentWindow()), + Widget((Window&)*this), + fImgBackground(image), + leakDetector_ImageAboutWindow() +{ + Window::setResizable(false); + Window::setSize(image.getSize()); + Window::setTitle("About"); +} + +void ImageAboutWindow::setImage(const Image& image) +{ + if (fImgBackground == image) + return; + + fImgBackground = image; + Window::setSize(image.getSize()); +} + +void ImageAboutWindow::onDisplay() +{ + fImgBackground.draw(); +} + +bool ImageAboutWindow::onKeyboard(const KeyboardEvent& ev) +{ + if (ev.press && ev.key == kCharEscape) + { + Window::close(); + return true; + } + + return false; +} + +bool ImageAboutWindow::onMouse(const MouseEvent& ev) +{ + if (ev.press) + { + Window::close(); + return true; + } + + return false; +} + +void ImageAboutWindow::onReshape(uint width, uint height) +{ + Widget::setSize(width, height); + Window::onReshape(width, height); +} + +// ----------------------------------------------------------------------- + +struct ImageButton::PrivateData { + ButtonImpl impl; + Image imageNormal; + Image imageHover; + Image imageDown; + + PrivateData(Widget* const s, const Image& normal, const Image& hover, const Image& down) + : impl(s), + imageNormal(normal), + imageHover(hover), + imageDown(down) {} + + DISTRHO_DECLARE_NON_COPY_STRUCT(PrivateData) +}; + +// ----------------------------------------------------------------------- + +ImageButton::ImageButton(Window& parent, const Image& image) + : Widget(parent), + pData(new PrivateData(this, image, image, image)), + leakDetector_ImageButton() +{ + setSize(image.getSize()); +} + +ImageButton::ImageButton(Window& parent, const Image& imageNormal, const Image& imageDown) + : Widget(parent), + pData(new PrivateData(this, imageNormal, imageNormal, imageDown)), + leakDetector_ImageButton() +{ + DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageDown.getSize()); + + setSize(imageNormal.getSize()); +} + +ImageButton::ImageButton(Window& parent, const Image& imageNormal, const Image& imageHover, const Image& imageDown) + : Widget(parent), + pData(new PrivateData(this, imageNormal, imageHover, imageDown)), + leakDetector_ImageButton() +{ + DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageHover.getSize() && imageHover.getSize() == imageDown.getSize()); + + setSize(imageNormal.getSize()); +} + +ImageButton::ImageButton(Widget* widget, const Image& image) + : Widget(widget->getParentWindow()), + pData(new PrivateData(this, image, image, image)), + leakDetector_ImageButton() +{ + setSize(image.getSize()); +} + +ImageButton::ImageButton(Widget* widget, const Image& imageNormal, const Image& imageDown) + : Widget(widget->getParentWindow()), + pData(new PrivateData(this, imageNormal, imageNormal, imageDown)), + leakDetector_ImageButton() +{ + DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageDown.getSize()); + + setSize(imageNormal.getSize()); +} + +ImageButton::ImageButton(Widget* widget, const Image& imageNormal, const Image& imageHover, const Image& imageDown) + : Widget(widget->getParentWindow()), + pData(new PrivateData(this, imageNormal, imageHover, imageDown)), + leakDetector_ImageButton() +{ + DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageHover.getSize() && imageHover.getSize() == imageDown.getSize()); + + setSize(imageNormal.getSize()); +} + +ImageButton::~ImageButton() +{ + delete pData; +} + +void ImageButton::setCallback(Callback* callback) noexcept +{ + pData->impl.callback_i = callback; +} + +void ImageButton::onDisplay() +{ + switch (pData->impl.state) + { + case ButtonImpl::kStateDown: + pData->imageDown.draw(); + break; + case ButtonImpl::kStateHover: + pData->imageHover.draw(); + break; + default: + pData->imageNormal.draw(); + break; + } +} + +bool ImageButton::onMouse(const MouseEvent& ev) +{ + return pData->impl.onMouse(ev); +} + +bool ImageButton::onMotion(const MotionEvent& ev) +{ + return pData->impl.onMotion(ev); +} + +// ----------------------------------------------------------------------- + +ImageKnob::ImageKnob(Window& parent, const Image& image, Orientation orientation) noexcept + : Widget(parent), + fImage(image), + fMinimum(0.0f), + fMaximum(1.0f), + fStep(0.0f), + fValue(0.5f), + fValueDef(fValue), + fValueTmp(fValue), + fUsingDefault(false), + fUsingLog(false), + fOrientation(orientation), + fRotationAngle(0), + fDragging(false), + fLastX(0), + fLastY(0), + fCallback(nullptr), + fIsImgVertical(image.getHeight() > image.getWidth()), + fImgLayerWidth(fIsImgVertical ? image.getWidth() : image.getHeight()), + fImgLayerHeight(fImgLayerWidth), + fImgLayerCount(fIsImgVertical ? image.getHeight()/fImgLayerHeight : image.getWidth()/fImgLayerWidth), + fIsReady(false), + fTextureId(0), + leakDetector_ImageKnob() +{ + glGenTextures(1, &fTextureId); + setSize(fImgLayerWidth, fImgLayerHeight); +} + +ImageKnob::ImageKnob(Widget* widget, const Image& image, Orientation orientation) noexcept + : Widget(widget->getParentWindow()), + fImage(image), + fMinimum(0.0f), + fMaximum(1.0f), + fStep(0.0f), + fValue(0.5f), + fValueDef(fValue), + fValueTmp(fValue), + fUsingDefault(false), + fUsingLog(false), + fOrientation(orientation), + fRotationAngle(0), + fDragging(false), + fLastX(0), + fLastY(0), + fCallback(nullptr), + fIsImgVertical(image.getHeight() > image.getWidth()), + fImgLayerWidth(fIsImgVertical ? image.getWidth() : image.getHeight()), + fImgLayerHeight(fImgLayerWidth), + fImgLayerCount(fIsImgVertical ? image.getHeight()/fImgLayerHeight : image.getWidth()/fImgLayerWidth), + fIsReady(false), + fTextureId(0), + leakDetector_ImageKnob() +{ + glGenTextures(1, &fTextureId); + setSize(fImgLayerWidth, fImgLayerHeight); +} + +ImageKnob::ImageKnob(const ImageKnob& imageKnob) + : Widget(imageKnob.getParentWindow()), + fImage(imageKnob.fImage), + fMinimum(imageKnob.fMinimum), + fMaximum(imageKnob.fMaximum), + fStep(imageKnob.fStep), + fValue(imageKnob.fValue), + fValueDef(imageKnob.fValueDef), + fValueTmp(fValue), + fUsingDefault(imageKnob.fUsingDefault), + fUsingLog(imageKnob.fUsingLog), + fOrientation(imageKnob.fOrientation), + fRotationAngle(imageKnob.fRotationAngle), + fDragging(false), + fLastX(0), + fLastY(0), + fCallback(imageKnob.fCallback), + fIsImgVertical(imageKnob.fIsImgVertical), + fImgLayerWidth(imageKnob.fImgLayerWidth), + fImgLayerHeight(imageKnob.fImgLayerHeight), + fImgLayerCount(imageKnob.fImgLayerCount), + fIsReady(false), + fTextureId(0), + leakDetector_ImageKnob() +{ + glGenTextures(1, &fTextureId); + setSize(fImgLayerWidth, fImgLayerHeight); +} + +ImageKnob& ImageKnob::operator=(const ImageKnob& imageKnob) +{ + fImage = imageKnob.fImage; + fMinimum = imageKnob.fMinimum; + fMaximum = imageKnob.fMaximum; + fStep = imageKnob.fStep; + fValue = imageKnob.fValue; + fValueDef = imageKnob.fValueDef; + fValueTmp = fValue; + fUsingDefault = imageKnob.fUsingDefault; + fUsingLog = imageKnob.fUsingLog; + fOrientation = imageKnob.fOrientation; + fRotationAngle = imageKnob.fRotationAngle; + fDragging = false; + fLastX = 0; + fLastY = 0; + fCallback = imageKnob.fCallback; + fIsImgVertical = imageKnob.fIsImgVertical; + fImgLayerWidth = imageKnob.fImgLayerWidth; + fImgLayerHeight = imageKnob.fImgLayerHeight; + fImgLayerCount = imageKnob.fImgLayerCount; + fIsReady = false; + + if (fTextureId != 0) + { + glDeleteTextures(1, &fTextureId); + fTextureId = 0; + } + + glGenTextures(1, &fTextureId); + setSize(fImgLayerWidth, fImgLayerHeight); + + return *this; +} + +ImageKnob::~ImageKnob() +{ + if (fTextureId != 0) + { + glDeleteTextures(1, &fTextureId); + fTextureId = 0; + } +} + +float ImageKnob::getValue() const noexcept +{ + return fValue; +} + +// NOTE: value is assumed to be scaled if using log +void ImageKnob::setDefault(float value) noexcept +{ + fValueDef = value; + fUsingDefault = true; +} + +void ImageKnob::setRange(float min, float max) noexcept +{ + DISTRHO_SAFE_ASSERT_RETURN(max > min,); + + if (fValue < min) + { + fValue = min; + repaint(); + + if (fCallback != nullptr) + { + try { + fCallback->imageKnobValueChanged(this, fValue); + } DISTRHO_SAFE_EXCEPTION("ImageKnob::setRange < min"); + } + } + else if (fValue > max) + { + fValue = max; + repaint(); + + if (fCallback != nullptr) + { + try { + fCallback->imageKnobValueChanged(this, fValue); + } DISTRHO_SAFE_EXCEPTION("ImageKnob::setRange > max"); + } + } + + fMinimum = min; + fMaximum = max; +} + +void ImageKnob::setStep(float step) noexcept +{ + fStep = step; +} + +// NOTE: value is assumed to be scaled if using log +void ImageKnob::setValue(float value, bool sendCallback) noexcept +{ + if (d_isEqual(fValue, value)) + return; + + fValue = value; + + if (d_isZero(fStep)) + fValueTmp = value; + + if (fRotationAngle == 0) + fIsReady = false; + + repaint(); + + if (sendCallback && fCallback != nullptr) + { + try { + fCallback->imageKnobValueChanged(this, fValue); + } DISTRHO_SAFE_EXCEPTION("ImageKnob::setValue"); + } +} + +void ImageKnob::setUsingLogScale(bool yesNo) noexcept +{ + fUsingLog = yesNo; +} + +void ImageKnob::setCallback(Callback* callback) noexcept +{ + fCallback = callback; +} + +void ImageKnob::setOrientation(Orientation orientation) noexcept +{ + if (fOrientation == orientation) + return; + + fOrientation = orientation; +} + +void ImageKnob::setRotationAngle(int angle) +{ + if (fRotationAngle == angle) + return; + + fRotationAngle = angle; + fIsReady = false; +} + +void ImageKnob::setImageLayerCount(uint count) noexcept +{ + DISTRHO_SAFE_ASSERT_RETURN(count > 1,); + + fImgLayerCount = count; + + if (fIsImgVertical) + fImgLayerHeight = fImage.getHeight()/count; + else + fImgLayerWidth = fImage.getWidth()/count; + + setSize(fImgLayerWidth, fImgLayerHeight); +} + +void ImageKnob::onDisplay() +{ + const float normValue = ((fUsingLog ? _invlogscale(fValue) : fValue) - fMinimum) / (fMaximum - fMinimum); + + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, fTextureId); + + if (! fIsReady) + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + + static const float trans[] = { 0.0f, 0.0f, 0.0f, 0.0f }; + glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, trans); + + glPixelStorei(GL_PACK_ALIGNMENT, 1); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + uint imageDataOffset = 0; + + if (fRotationAngle == 0) + { + DISTRHO_SAFE_ASSERT_RETURN(fImgLayerCount > 0,); + DISTRHO_SAFE_ASSERT_RETURN(normValue >= 0.0f,); + + const uint& v1(fIsImgVertical ? fImgLayerWidth : fImgLayerHeight); + const uint& v2(fIsImgVertical ? fImgLayerHeight : fImgLayerWidth); + + const uint layerDataSize = v1 * v2 * ((fImage.getFormat() == GL_BGRA || fImage.getFormat() == GL_RGBA) ? 4 : 3); + /* */ imageDataOffset = layerDataSize * uint(normValue * float(fImgLayerCount-1)); + } + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, + static_cast(getWidth()), static_cast(getHeight()), 0, + fImage.getFormat(), fImage.getType(), fImage.getRawData() + imageDataOffset); + + fIsReady = true; + } + + const int w = static_cast(getWidth()); + const int h = static_cast(getHeight()); + + if (fRotationAngle != 0) + { + glPushMatrix(); + + const int w2 = w/2; + const int h2 = h/2; + + glTranslatef(static_cast(w2), static_cast(h2), 0.0f); + glRotatef(normValue*static_cast(fRotationAngle), 0.0f, 0.0f, 1.0f); + + Rectangle(-w2, -h2, w, h).draw(); + + glPopMatrix(); + } + else + { + Rectangle(0, 0, w, h).draw(); + } + + glBindTexture(GL_TEXTURE_2D, 0); + glDisable(GL_TEXTURE_2D); +} + +bool ImageKnob::onMouse(const MouseEvent& ev) +{ + if (ev.button != 1) + return false; + + if (ev.press) + { + if (! contains(ev.pos)) + return false; + + if ((ev.mod & kModifierShift) != 0 && fUsingDefault) + { + setValue(fValueDef, true); + fValueTmp = fValue; + return true; + } + + fDragging = true; + fLastX = ev.pos.getX(); + fLastY = ev.pos.getY(); + + if (fCallback != nullptr) + fCallback->imageKnobDragStarted(this); + + return true; + } + else if (fDragging) + { + if (fCallback != nullptr) + fCallback->imageKnobDragFinished(this); + + fDragging = false; + return true; + } + + return false; +} + +bool ImageKnob::onMotion(const MotionEvent& ev) +{ + if (! fDragging) + return false; + + bool doVal = false; + float d, value = 0.0f; + + if (fOrientation == ImageKnob::Horizontal) + { + if (const int movX = ev.pos.getX() - fLastX) + { + d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f; + value = (fUsingLog ? _invlogscale(fValueTmp) : fValueTmp) + (float(fMaximum - fMinimum) / d * float(movX)); + doVal = true; + } + } + else if (fOrientation == ImageKnob::Vertical) + { + if (const int movY = fLastY - ev.pos.getY()) + { + d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f; + value = (fUsingLog ? _invlogscale(fValueTmp) : fValueTmp) + (float(fMaximum - fMinimum) / d * float(movY)); + doVal = true; + } + } + + if (! doVal) + return false; + + if (fUsingLog) + value = _logscale(value); + + if (value < fMinimum) + { + fValueTmp = value = fMinimum; + } + else if (value > fMaximum) + { + fValueTmp = value = fMaximum; + } + else if (d_isNotZero(fStep)) + { + fValueTmp = value; + const float rest = std::fmod(value, fStep); + value = value - rest + (rest > fStep/2.0f ? fStep : 0.0f); + } + + setValue(value, true); + + fLastX = ev.pos.getX(); + fLastY = ev.pos.getY(); + + return true; +} + +bool ImageKnob::onScroll(const ScrollEvent& ev) +{ + if (! contains(ev.pos)) + return false; + + const float d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f; + float value = (fUsingLog ? _invlogscale(fValueTmp) : fValueTmp) + (float(fMaximum - fMinimum) / d * 10.f * ev.delta.getY()); + + if (fUsingLog) + value = _logscale(value); + + if (value < fMinimum) + { + fValueTmp = value = fMinimum; + } + else if (value > fMaximum) + { + fValueTmp = value = fMaximum; + } + else if (d_isNotZero(fStep)) + { + fValueTmp = value; + const float rest = std::fmod(value, fStep); + value = value - rest + (rest > fStep/2.0f ? fStep : 0.0f); + } + + setValue(value, true); + return true; +} + +// ----------------------------------------------------------------------- + +float ImageKnob::_logscale(float value) const +{ + const float b = std::log(fMaximum/fMinimum)/(fMaximum-fMinimum); + const float a = fMaximum/std::exp(fMaximum*b); + return a * std::exp(b*value); +} + +float ImageKnob::_invlogscale(float value) const +{ + const float b = std::log(fMaximum/fMinimum)/(fMaximum-fMinimum); + const float a = fMaximum/std::exp(fMaximum*b); + return std::log(value/a)/b; +} + +// ----------------------------------------------------------------------- + +ImageSlider::ImageSlider(Window& parent, const Image& image) noexcept + : Widget(parent), + fImage(image), + fMinimum(0.0f), + fMaximum(1.0f), + fStep(0.0f), + fValue(0.5f), + fValueTmp(fValue), + fDragging(false), + fInverted(false), + fValueIsSet(false), + fStartedX(0), + fStartedY(0), + fCallback(nullptr), + fStartPos(), + fEndPos(), + fSliderArea(), + leakDetector_ImageSlider() +{ + pData->needsFullViewport = true; +} + +ImageSlider::ImageSlider(Widget* widget, const Image& image) noexcept + : Widget(widget->getParentWindow()), + fImage(image), + fMinimum(0.0f), + fMaximum(1.0f), + fStep(0.0f), + fValue(0.5f), + fValueTmp(fValue), + fDragging(false), + fInverted(false), + fValueIsSet(false), + fStartedX(0), + fStartedY(0), + fCallback(nullptr), + fStartPos(), + fEndPos(), + fSliderArea(), + leakDetector_ImageSlider() +{ + pData->needsFullViewport = true; +} + +float ImageSlider::getValue() const noexcept +{ + return fValue; +} + +void ImageSlider::setValue(float value, bool sendCallback) noexcept +{ + if (! fValueIsSet) + fValueIsSet = true; + + if (d_isEqual(fValue, value)) + return; + + fValue = value; + + if (d_isZero(fStep)) + fValueTmp = value; + + repaint(); + + if (sendCallback && fCallback != nullptr) + { + try { + fCallback->imageSliderValueChanged(this, fValue); + } DISTRHO_SAFE_EXCEPTION("ImageSlider::setValue"); + } +} + +void ImageSlider::setStartPos(const Point& startPos) noexcept +{ + fStartPos = startPos; + _recheckArea(); +} + +void ImageSlider::setStartPos(int x, int y) noexcept +{ + setStartPos(Point(x, y)); +} + +void ImageSlider::setEndPos(const Point& endPos) noexcept +{ + fEndPos = endPos; + _recheckArea(); +} + +void ImageSlider::setEndPos(int x, int y) noexcept +{ + setEndPos(Point(x, y)); +} + +void ImageSlider::setInverted(bool inverted) noexcept +{ + if (fInverted == inverted) + return; + + fInverted = inverted; + repaint(); +} + +void ImageSlider::setRange(float min, float max) noexcept +{ + fMinimum = min; + fMaximum = max; + + if (fValue < min) + { + fValue = min; + repaint(); + + if (fCallback != nullptr && fValueIsSet) + { + try { + fCallback->imageSliderValueChanged(this, fValue); + } DISTRHO_SAFE_EXCEPTION("ImageSlider::setRange < min"); + } + } + else if (fValue > max) + { + fValue = max; + repaint(); + + if (fCallback != nullptr && fValueIsSet) + { + try { + fCallback->imageSliderValueChanged(this, fValue); + } DISTRHO_SAFE_EXCEPTION("ImageSlider::setRange > max"); + } + } +} + +void ImageSlider::setStep(float step) noexcept +{ + fStep = step; +} + +void ImageSlider::setCallback(Callback* callback) noexcept +{ + fCallback = callback; +} + +void ImageSlider::onDisplay() +{ +#if 0 // DEBUG, paints slider area + glColor3f(0.4f, 0.5f, 0.1f); + glRecti(fSliderArea.getX(), fSliderArea.getY(), fSliderArea.getX()+fSliderArea.getWidth(), fSliderArea.getY()+fSliderArea.getHeight()); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); +#endif + + const float normValue = (fValue - fMinimum) / (fMaximum - fMinimum); + + int x, y; + + if (fStartPos.getY() == fEndPos.getY()) + { + // horizontal + if (fInverted) + x = fEndPos.getX() - static_cast(normValue*static_cast(fEndPos.getX()-fStartPos.getX())); + else + x = fStartPos.getX() + static_cast(normValue*static_cast(fEndPos.getX()-fStartPos.getX())); + + y = fStartPos.getY(); + } + else + { + // vertical + x = fStartPos.getX(); + + if (fInverted) + y = fEndPos.getY() - static_cast(normValue*static_cast(fEndPos.getY()-fStartPos.getY())); + else + y = fStartPos.getY() + static_cast(normValue*static_cast(fEndPos.getY()-fStartPos.getY())); + } + + fImage.drawAt(x, y); +} + +bool ImageSlider::onMouse(const MouseEvent& ev) +{ + if (ev.button != 1) + return false; + + if (ev.press) + { + if (! fSliderArea.contains(ev.pos)) + return false; + + float vper; + const int x = ev.pos.getX(); + const int y = ev.pos.getY(); + + if (fStartPos.getY() == fEndPos.getY()) + { + // horizontal + vper = float(x - fSliderArea.getX()) / float(fSliderArea.getWidth()); + } + else + { + // vertical + vper = float(y - fSliderArea.getY()) / float(fSliderArea.getHeight()); + } + + float value; + + if (fInverted) + value = fMaximum - vper * (fMaximum - fMinimum); + else + value = fMinimum + vper * (fMaximum - fMinimum); + + if (value < fMinimum) + { + fValueTmp = value = fMinimum; + } + else if (value > fMaximum) + { + fValueTmp = value = fMaximum; + } + else if (d_isNotZero(fStep)) + { + fValueTmp = value; + const float rest = std::fmod(value, fStep); + value = value - rest + (rest > fStep/2.0f ? fStep : 0.0f); + } + + fDragging = true; + fStartedX = x; + fStartedY = y; + + if (fCallback != nullptr) + fCallback->imageSliderDragStarted(this); + + setValue(value, true); + + return true; + } + else if (fDragging) + { + if (fCallback != nullptr) + fCallback->imageSliderDragFinished(this); + + fDragging = false; + return true; + } + + return false; +} + +bool ImageSlider::onMotion(const MotionEvent& ev) +{ + if (! fDragging) + return false; + + const bool horizontal = fStartPos.getY() == fEndPos.getY(); + const int x = ev.pos.getX(); + const int y = ev.pos.getY(); + + if ((horizontal && fSliderArea.containsX(x)) || (fSliderArea.containsY(y) && ! horizontal)) + { + float vper; + + if (horizontal) + { + // horizontal + vper = float(x - fSliderArea.getX()) / float(fSliderArea.getWidth()); + } + else + { + // vertical + vper = float(y - fSliderArea.getY()) / float(fSliderArea.getHeight()); + } + + float value; + + if (fInverted) + value = fMaximum - vper * (fMaximum - fMinimum); + else + value = fMinimum + vper * (fMaximum - fMinimum); + + if (value < fMinimum) + { + fValueTmp = value = fMinimum; + } + else if (value > fMaximum) + { + fValueTmp = value = fMaximum; + } + else if (d_isNotZero(fStep)) + { + fValueTmp = value; + const float rest = std::fmod(value, fStep); + value = value - rest + (rest > fStep/2.0f ? fStep : 0.0f); + } + + setValue(value, true); + } + else if (horizontal) + { + if (x < fSliderArea.getX()) + setValue(fInverted ? fMaximum : fMinimum, true); + else + setValue(fInverted ? fMinimum : fMaximum, true); + } + else + { + if (y < fSliderArea.getY()) + setValue(fInverted ? fMaximum : fMinimum, true); + else + setValue(fInverted ? fMinimum : fMaximum, true); + } + + return true; +} + +void ImageSlider::_recheckArea() noexcept +{ + if (fStartPos.getY() == fEndPos.getY()) + { + // horizontal + fSliderArea = Rectangle(fStartPos.getX(), + fStartPos.getY(), + fEndPos.getX() + static_cast(fImage.getWidth()) - fStartPos.getX(), + static_cast(fImage.getHeight())); + } + else + { + // vertical + fSliderArea = Rectangle(fStartPos.getX(), + fStartPos.getY(), + static_cast(fImage.getWidth()), + fEndPos.getY() + static_cast(fImage.getHeight()) - fStartPos.getY()); + } +} + +// ----------------------------------------------------------------------- + +ImageSwitch::ImageSwitch(Window& parent, const Image& imageNormal, const Image& imageDown) noexcept + : Widget(parent), + fImageNormal(imageNormal), + fImageDown(imageDown), + fIsDown(false), + fCallback(nullptr), + leakDetector_ImageSwitch() +{ + DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize()); + + setSize(fImageNormal.getSize()); +} + +ImageSwitch::ImageSwitch(Widget* widget, const Image& imageNormal, const Image& imageDown) noexcept + : Widget(widget->getParentWindow()), + fImageNormal(imageNormal), + fImageDown(imageDown), + fIsDown(false), + fCallback(nullptr), + leakDetector_ImageSwitch() +{ + DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize()); + + setSize(fImageNormal.getSize()); +} + +ImageSwitch::ImageSwitch(const ImageSwitch& imageSwitch) noexcept + : Widget(imageSwitch.getParentWindow()), + fImageNormal(imageSwitch.fImageNormal), + fImageDown(imageSwitch.fImageDown), + fIsDown(imageSwitch.fIsDown), + fCallback(imageSwitch.fCallback), + leakDetector_ImageSwitch() +{ + DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize()); + + setSize(fImageNormal.getSize()); +} + +ImageSwitch& ImageSwitch::operator=(const ImageSwitch& imageSwitch) noexcept +{ + fImageNormal = imageSwitch.fImageNormal; + fImageDown = imageSwitch.fImageDown; + fIsDown = imageSwitch.fIsDown; + fCallback = imageSwitch.fCallback; + + DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize()); + + setSize(fImageNormal.getSize()); + + return *this; +} + +bool ImageSwitch::isDown() const noexcept +{ + return fIsDown; +} + +void ImageSwitch::setDown(bool down) noexcept +{ + if (fIsDown == down) + return; + + fIsDown = down; + repaint(); +} + +void ImageSwitch::setCallback(Callback* callback) noexcept +{ + fCallback = callback; +} + +void ImageSwitch::onDisplay() +{ + if (fIsDown) + fImageDown.draw(); + else + fImageNormal.draw(); +} + +bool ImageSwitch::onMouse(const MouseEvent& ev) +{ + if (ev.press && contains(ev.pos)) + { + fIsDown = !fIsDown; + + repaint(); + + if (fCallback != nullptr) + fCallback->imageSwitchClicked(this, fIsDown); + + return true; + } + + return false; +} + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL diff --git a/dpf/dgl/src/NanoVG.cpp b/dpf/dgl/src/NanoVG.cpp new file mode 100644 index 0000000..95d4880 --- /dev/null +++ b/dpf/dgl/src/NanoVG.cpp @@ -0,0 +1,931 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "../NanoVG.hpp" +#include "WidgetPrivateData.hpp" + +// ----------------------------------------------------------------------- +// Ignore some warnings if debugging + +#if 0 //def DEBUG +# define NANOVG_GL3 0 +# define NANOVG_GLES2 0 +# define NANOVG_GLES3 0 +# define NANOVG_GL_USE_UNIFORMBUFFER 0 +# if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Weverything" +# elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wall" +# pragma GCC diagnostic ignored "-Wextra" +# pragma GCC diagnostic ignored "-Wconversion" +# pragma GCC diagnostic ignored "-Weffc++" +# pragma GCC diagnostic ignored "-Wsign-conversion" +# pragma GCC diagnostic ignored "-Wundef" +# pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" +# endif +#endif + +// ----------------------------------------------------------------------- +// Include NanoVG OpenGL implementation + +//#define STB_IMAGE_STATIC +#define NANOVG_GL2_IMPLEMENTATION +#include "nanovg/nanovg_gl.h" + +#if defined(NANOVG_GL2) +# define nvgCreateGL nvgCreateGL2 +# define nvgDeleteGL nvgDeleteGL2 +#elif defined(NANOVG_GL3) +# define nvgCreateGL nvgCreateGL3 +# define nvgDeleteGL nvgDeleteGL3 +#elif defined(NANOVG_GLES2) +# define nvgCreateGL nvgCreateGLES2 +# define nvgDeleteGL nvgDeleteGLES2 +#elif defined(NANOVG_GLES3) +# define nvgCreateGL nvgCreateGLES3 +# define nvgDeleteGL nvgDeleteGLES3 +#endif + +// ----------------------------------------------------------------------- +// Restore normal state if debugging + +#if 0//def DEBUG +# if defined(__clang__) +# pragma clang diagnostic pop +# elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic pop +# endif +#endif + +// ----------------------------------------------------------------------- + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- +// NanoImage + +NanoImage::NanoImage() + : fHandle(), + fSize(), + leakDetector_NanoImage() {} + +NanoImage::NanoImage(const Handle& handle) + : fHandle(handle), + fSize(), + leakDetector_NanoImage() +{ + DISTRHO_SAFE_ASSERT_RETURN(fHandle.context != nullptr && fHandle.imageId != 0,); + + _updateSize(); +} + +NanoImage::~NanoImage() +{ + if (fHandle.context != nullptr && fHandle.imageId != 0) + nvgDeleteImage(fHandle.context, fHandle.imageId); +} + +NanoImage& NanoImage::operator=(const Handle& handle) +{ + if (fHandle.context != nullptr && fHandle.imageId != 0) + nvgDeleteImage(fHandle.context, fHandle.imageId); + + fHandle.context = handle.context; + fHandle.imageId = handle.imageId; + + return *this; +} + +bool NanoImage::isValid() const noexcept +{ + return (fHandle.context != nullptr && fHandle.imageId != 0); +} + +Size NanoImage::getSize() const noexcept +{ + return fSize; +} + +GLuint NanoImage::getTextureHandle() const +{ + DISTRHO_SAFE_ASSERT_RETURN(fHandle.context != nullptr && fHandle.imageId != 0, 0); + + return nvglImageHandle(fHandle.context, fHandle.imageId); +} + +void NanoImage::_updateSize() +{ + int w=0, h=0; + + nvgImageSize(fHandle.context, fHandle.imageId, &w, &h); + + if (w < 0) w = 0; + if (h < 0) h = 0; + + fSize.setSize(static_cast(w), static_cast(h)); +} + +// ----------------------------------------------------------------------- +// Paint + +NanoVG::Paint::Paint() noexcept + : radius(0.0f), feather(0.0f), innerColor(), outerColor(), imageId(0) +{ + std::memset(xform, 0, sizeof(float)*6); + std::memset(extent, 0, sizeof(float)*2); +} + +NanoVG::Paint::Paint(const NVGpaint& p) noexcept + : radius(p.radius), feather(p.feather), innerColor(p.innerColor), outerColor(p.outerColor), imageId(p.image) +{ + std::memcpy(xform, p.xform, sizeof(float)*6); + std::memcpy(extent, p.extent, sizeof(float)*2); +} + +NanoVG::Paint::operator NVGpaint() const noexcept +{ + NVGpaint p; + p.radius = radius; + p.feather = feather; + p.innerColor = innerColor; + p.outerColor = outerColor; + p.image = imageId; + std::memcpy(p.xform, xform, sizeof(float)*6); + std::memcpy(p.extent, extent, sizeof(float)*2); + return p; +} + +// ----------------------------------------------------------------------- +// NanoVG + +NanoVG::NanoVG(int flags) + : fContext(nvgCreateGL(flags)), + fInFrame(false), + fIsSubWidget(false), + leakDetector_NanoVG() +{ + DISTRHO_SAFE_ASSERT_RETURN(fContext != nullptr,); +} + +NanoVG::NanoVG(NanoWidget* groupWidget) + : fContext(groupWidget->fContext), + fInFrame(false), + fIsSubWidget(true), + leakDetector_NanoVG() +{ +} + +NanoVG::~NanoVG() +{ + DISTRHO_SAFE_ASSERT(! fInFrame); + + if (fContext != nullptr && ! fIsSubWidget) + nvgDeleteGL(fContext); +} + +// ----------------------------------------------------------------------- + +void NanoVG::beginFrame(const uint width, const uint height, const float scaleFactor) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(scaleFactor > 0.0f,); + DISTRHO_SAFE_ASSERT_RETURN(! fInFrame,); + + fInFrame = true; + nvgBeginFrame(fContext, static_cast(width), static_cast(height), scaleFactor); +} + +void NanoVG::beginFrame(Widget* const widget) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(widget != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(! fInFrame,); + + Window& window(widget->getParentWindow()); + + fInFrame = true; + nvgBeginFrame(fContext, static_cast(window.getWidth()), static_cast(window.getHeight()), 1.0f); +} + +void NanoVG::cancelFrame() +{ + DISTRHO_SAFE_ASSERT_RETURN(fInFrame,); + + if (fContext != nullptr) + nvgCancelFrame(fContext); + + fInFrame = false; +} + +void NanoVG::endFrame() +{ + DISTRHO_SAFE_ASSERT_RETURN(fInFrame,); + + // Save current blend state + GLboolean blendEnabled; + GLint blendSrc, blendDst; + glGetBooleanv(GL_BLEND, &blendEnabled); + glGetIntegerv(GL_BLEND_SRC_ALPHA, &blendSrc); + glGetIntegerv(GL_BLEND_DST_ALPHA, &blendDst); + + if (fContext != nullptr) + nvgEndFrame(fContext); + + // Restore blend state + if (blendEnabled) + glEnable(GL_BLEND); + else + glDisable(GL_BLEND); + + glBlendFunc(blendSrc, blendDst); + + fInFrame = false; +} + +// ----------------------------------------------------------------------- +// State Handling + +void NanoVG::save() +{ + if (fContext != nullptr) + nvgSave(fContext); +} + +void NanoVG::restore() +{ + if (fContext != nullptr) + nvgRestore(fContext); +} + +void NanoVG::reset() +{ + if (fContext != nullptr) + nvgReset(fContext); +} + +// ----------------------------------------------------------------------- +// Render styles + +void NanoVG::strokeColor(const Color& color) +{ + if (fContext != nullptr) + nvgStrokeColor(fContext, color); +} + +void NanoVG::strokeColor(const int red, const int green, const int blue, const int alpha) +{ + if (fContext != nullptr) + { + DISTRHO_SAFE_ASSERT_RETURN(red >= 0 && red <= 255,); + DISTRHO_SAFE_ASSERT_RETURN(green >= 0 && green <= 255,); + DISTRHO_SAFE_ASSERT_RETURN(blue >= 0 && blue <= 255,); + DISTRHO_SAFE_ASSERT_RETURN(alpha >= 0 && alpha <= 255,); + + nvgStrokeColor(fContext, nvgRGBA(static_cast(red), + static_cast(green), + static_cast(blue), + static_cast(alpha))); + } +} + +void NanoVG::strokeColor(const float red, const float green, const float blue, const float alpha) +{ + if (fContext != nullptr) + nvgStrokeColor(fContext, nvgRGBAf(red, green, blue, alpha)); +} + +void NanoVG::strokePaint(const Paint& paint) +{ + if (fContext != nullptr) + nvgStrokePaint(fContext, paint); +} + +void NanoVG::fillColor(const Color& color) +{ + if (fContext != nullptr) + nvgFillColor(fContext, color); +} + +void NanoVG::fillColor(const int red, const int green, const int blue, const int alpha) +{ + if (fContext != nullptr) + { + DISTRHO_SAFE_ASSERT_RETURN(red >= 0 && red <= 255,); + DISTRHO_SAFE_ASSERT_RETURN(green >= 0 && green <= 255,); + DISTRHO_SAFE_ASSERT_RETURN(blue >= 0 && blue <= 255,); + DISTRHO_SAFE_ASSERT_RETURN(alpha >= 0 && alpha <= 255,); + + nvgFillColor(fContext, nvgRGBA(static_cast(red), + static_cast(green), + static_cast(blue), + static_cast(alpha))); + } +} + +void NanoVG::fillColor(const float red, const float green, const float blue, const float alpha) +{ + if (fContext != nullptr) + nvgFillColor(fContext, nvgRGBAf(red, green, blue, alpha)); +} + +void NanoVG::fillPaint(const Paint& paint) +{ + if (fContext != nullptr) + nvgFillPaint(fContext, paint); +} + +void NanoVG::miterLimit(float limit) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(limit > 0.0f,); + + nvgMiterLimit(fContext, limit); +} + +void NanoVG::strokeWidth(float size) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(size > 0.0f,); + + nvgStrokeWidth(fContext, size); +} + +void NanoVG::lineCap(NanoVG::LineCap cap) +{ + if (fContext != nullptr) + nvgLineCap(fContext, cap); +} + +void NanoVG::lineJoin(NanoVG::LineCap join) +{ + if (fContext != nullptr) + nvgLineJoin(fContext, join); +} + +void NanoVG::globalAlpha(float alpha) +{ + if (fContext != nullptr) + nvgGlobalAlpha(fContext, alpha); +} + +// ----------------------------------------------------------------------- +// Transforms + +void NanoVG::resetTransform() +{ + if (fContext != nullptr) + nvgResetTransform(fContext); +} + +void NanoVG::transform(float a, float b, float c, float d, float e, float f) +{ + if (fContext != nullptr) + nvgTransform(fContext, a, b, c, d, e, f); +} + +void NanoVG::translate(float x, float y) +{ + if (fContext != nullptr) + nvgTranslate(fContext, x, y); +} + +void NanoVG::rotate(float angle) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(angle > 0.0f,); + + nvgRotate(fContext, angle); +} + +void NanoVG::skewX(float angle) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(angle > 0.0f,); + + nvgSkewX(fContext, angle); +} + +void NanoVG::skewY(float angle) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(angle > 0.0f,); + + nvgSkewY(fContext, angle); +} + +void NanoVG::scale(float x, float y) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(x > 0.0f,); + DISTRHO_SAFE_ASSERT_RETURN(y > 0.0f,); + + nvgScale(fContext, x, y); +} + +void NanoVG::currentTransform(float xform[6]) +{ + if (fContext != nullptr) + nvgCurrentTransform(fContext, xform); +} + +void NanoVG::transformIdentity(float dst[6]) +{ + nvgTransformIdentity(dst); +} + +void NanoVG::transformTranslate(float dst[6], float tx, float ty) +{ + nvgTransformTranslate(dst, tx, ty); +} + +void NanoVG::transformScale(float dst[6], float sx, float sy) +{ + nvgTransformScale(dst, sx, sy); +} + +void NanoVG::transformRotate(float dst[6], float a) +{ + nvgTransformRotate(dst, a); +} + +void NanoVG::transformSkewX(float dst[6], float a) +{ + nvgTransformSkewX(dst, a); +} + +void NanoVG::transformSkewY(float dst[6], float a) +{ + nvgTransformSkewY(dst, a); +} + +void NanoVG::transformMultiply(float dst[6], const float src[6]) +{ + nvgTransformMultiply(dst, src); +} + +void NanoVG::transformPremultiply(float dst[6], const float src[6]) +{ + nvgTransformPremultiply(dst, src); +} + +int NanoVG::transformInverse(float dst[6], const float src[6]) +{ + return nvgTransformInverse(dst, src); +} + +void NanoVG::transformPoint(float& dstx, float& dsty, const float xform[6], float srcx, float srcy) +{ + nvgTransformPoint(&dstx, &dsty, xform, srcx, srcy); +} + +float NanoVG::degToRad(float deg) +{ + return nvgDegToRad(deg); +} + +float NanoVG::radToDeg(float rad) +{ + return nvgRadToDeg(rad); +} + +// ----------------------------------------------------------------------- +// Images + +NanoImage::Handle NanoVG::createImageFromFile(const char* filename, ImageFlags imageFlags) +{ + return createImageFromFile(filename, static_cast(imageFlags)); +} + +NanoImage::Handle NanoVG::createImageFromFile(const char* filename, int imageFlags) +{ + if (fContext == nullptr) return NanoImage::Handle(); + DISTRHO_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', NanoImage::Handle()); + + return NanoImage::Handle(fContext, nvgCreateImage(fContext, filename, imageFlags)); +} + +NanoImage::Handle NanoVG::createImageFromMemory(uchar* data, uint dataSize, ImageFlags imageFlags) +{ + return createImageFromMemory(data, dataSize, static_cast(imageFlags)); +} + +NanoImage::Handle NanoVG::createImageFromMemory(uchar* data, uint dataSize, int imageFlags) +{ + if (fContext == nullptr) return NanoImage::Handle(); + DISTRHO_SAFE_ASSERT_RETURN(data != nullptr, NanoImage::Handle()); + DISTRHO_SAFE_ASSERT_RETURN(dataSize > 0, NanoImage::Handle()); + + return NanoImage::Handle(fContext, nvgCreateImageMem(fContext, imageFlags, data,static_cast(dataSize))); +} + +NanoImage::Handle NanoVG::createImageFromRGBA(uint w, uint h, const uchar* data, ImageFlags imageFlags) +{ + return createImageFromRGBA(w, h, data, static_cast(imageFlags)); +} + +NanoImage::Handle NanoVG::createImageFromRGBA(uint w, uint h, const uchar* data, int imageFlags) +{ + if (fContext == nullptr) return NanoImage::Handle(); + DISTRHO_SAFE_ASSERT_RETURN(data != nullptr, NanoImage::Handle()); + + return NanoImage::Handle(fContext, nvgCreateImageRGBA(fContext, + static_cast(w), + static_cast(h), imageFlags, data)); +} + +NanoImage::Handle NanoVG::createImageFromTextureHandle(GLuint textureId, uint w, uint h, ImageFlags imageFlags, bool deleteTexture) +{ + return createImageFromTextureHandle(textureId, w, h, static_cast(imageFlags), deleteTexture); +} + +NanoImage::Handle NanoVG::createImageFromTextureHandle(GLuint textureId, uint w, uint h, int imageFlags, bool deleteTexture) +{ + if (fContext == nullptr) return NanoImage::Handle(); + DISTRHO_SAFE_ASSERT_RETURN(textureId != 0, NanoImage::Handle()); + + if (! deleteTexture) + imageFlags |= NVG_IMAGE_NODELETE; + + return NanoImage::Handle(fContext, nvglCreateImageFromHandle(fContext, + textureId, + static_cast(w), + static_cast(h), imageFlags)); +} + +// ----------------------------------------------------------------------- +// Paints + +NanoVG::Paint NanoVG::linearGradient(float sx, float sy, float ex, float ey, const Color& icol, const Color& ocol) +{ + if (fContext == nullptr) return Paint(); + return nvgLinearGradient(fContext, sx, sy, ex, ey, icol, ocol); +} + +NanoVG::Paint NanoVG::boxGradient(float x, float y, float w, float h, float r, float f, const Color& icol, const Color& ocol) +{ + if (fContext == nullptr) return Paint(); + return nvgBoxGradient(fContext, x, y, w, h, r, f, icol, ocol); +} + +NanoVG::Paint NanoVG::radialGradient(float cx, float cy, float inr, float outr, const Color& icol, const Color& ocol) +{ + if (fContext == nullptr) return Paint(); + return nvgRadialGradient(fContext, cx, cy, inr, outr, icol, ocol); +} + +NanoVG::Paint NanoVG::imagePattern(float ox, float oy, float ex, float ey, float angle, const NanoImage& image, float alpha) +{ + if (fContext == nullptr) return Paint(); + + const int imageId(image.fHandle.imageId); + DISTRHO_SAFE_ASSERT_RETURN(imageId != 0, Paint()); + + return nvgImagePattern(fContext, ox, oy, ex, ey, angle, imageId, alpha); +} + +// ----------------------------------------------------------------------- +// Scissoring + +void NanoVG::scissor(float x, float y, float w, float h) +{ + if (fContext != nullptr) + nvgScissor(fContext, x, y, w, h); +} + +void NanoVG::intersectScissor(float x, float y, float w, float h) +{ + if (fContext != nullptr) + nvgIntersectScissor(fContext, x, y, w, h); +} + +void NanoVG::resetScissor() +{ + if (fContext != nullptr) + nvgResetScissor(fContext); +} + +// ----------------------------------------------------------------------- +// Paths + +void NanoVG::beginPath() +{ + if (fContext != nullptr) + nvgBeginPath(fContext); +} + +void NanoVG::moveTo(float x, float y) +{ + if (fContext != nullptr) + nvgMoveTo(fContext, x, y); +} + +void NanoVG::lineTo(float x, float y) +{ + if (fContext != nullptr) + nvgLineTo(fContext, x, y); +} + +void NanoVG::bezierTo(float c1x, float c1y, float c2x, float c2y, float x, float y) +{ + if (fContext != nullptr) + nvgBezierTo(fContext, c1x, c1y, c2x, c2y, x, y); +} + +void NanoVG::quadTo(float cx, float cy, float x, float y) +{ + if (fContext != nullptr) + nvgQuadTo(fContext, cx, cy, x, y); +} + +void NanoVG::arcTo(float x1, float y1, float x2, float y2, float radius) +{ + if (fContext != nullptr) + nvgArcTo(fContext, x1, y1, x2, y2, radius); +} + +void NanoVG::closePath() +{ + if (fContext != nullptr) + nvgClosePath(fContext); +} + +void NanoVG::pathWinding(NanoVG::Winding dir) +{ + if (fContext != nullptr) + nvgPathWinding(fContext, dir); +} + +void NanoVG::arc(float cx, float cy, float r, float a0, float a1, NanoVG::Winding dir) +{ + if (fContext != nullptr) + nvgArc(fContext, cx, cy, r, a0, a1, dir); +} + +void NanoVG::rect(float x, float y, float w, float h) +{ + if (fContext != nullptr) + nvgRect(fContext, x, y, w, h); +} + +void NanoVG::roundedRect(float x, float y, float w, float h, float r) +{ + if (fContext != nullptr) + nvgRoundedRect(fContext, x, y, w, h, r); +} + +void NanoVG::ellipse(float cx, float cy, float rx, float ry) +{ + if (fContext != nullptr) + nvgEllipse(fContext, cx, cy, rx, ry); +} + +void NanoVG::circle(float cx, float cy, float r) +{ + if (fContext != nullptr) + nvgCircle(fContext, cx, cy, r); +} + +void NanoVG::fill() +{ + if (fContext != nullptr) + nvgFill(fContext); +} + +void NanoVG::stroke() +{ + if (fContext != nullptr) + nvgStroke(fContext); +} + +// ----------------------------------------------------------------------- +// Text + +NanoVG::FontId NanoVG::createFontFromFile(const char* name, const char* filename) +{ + if (fContext == nullptr) return -1; + DISTRHO_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0', -1); + DISTRHO_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', -1); + + return nvgCreateFont(fContext, name, filename); +} + +NanoVG::FontId NanoVG::createFontFromMemory(const char* name, const uchar* data, uint dataSize, bool freeData) +{ + if (fContext == nullptr) return -1; + DISTRHO_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0', -1); + DISTRHO_SAFE_ASSERT_RETURN(data != nullptr, -1); + + return nvgCreateFontMem(fContext, name, const_cast(data), static_cast(dataSize), freeData); +} + +NanoVG::FontId NanoVG::findFont(const char* name) +{ + if (fContext == nullptr) return -1; + DISTRHO_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0', -1); + + return nvgFindFont(fContext, name); +} + +void NanoVG::fontSize(float size) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(size > 0.0f,); + + nvgFontSize(fContext, size); +} + +void NanoVG::fontBlur(float blur) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(blur >= 0.0f,); + + nvgFontBlur(fContext, blur); +} + +void NanoVG::textLetterSpacing(float spacing) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(spacing >= 0.0f,); + + nvgTextLetterSpacing(fContext, spacing); +} + +void NanoVG::textLineHeight(float lineHeight) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(lineHeight > 0.0f,); + + nvgTextLineHeight(fContext, lineHeight); +} + +void NanoVG::textAlign(NanoVG::Align align) +{ + if (fContext != nullptr) + nvgTextAlign(fContext, align); +} + +void NanoVG::textAlign(int align) +{ + if (fContext != nullptr) + nvgTextAlign(fContext, align); +} + +void NanoVG::fontFaceId(FontId font) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(font >= 0,); + + nvgFontFaceId(fContext, font); +} + +void NanoVG::fontFace(const char* font) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(font != nullptr && font[0] != '\0',); + + nvgFontFace(fContext, font); +} + +float NanoVG::text(float x, float y, const char* string, const char* end) +{ + if (fContext == nullptr) return 0.0f; + DISTRHO_SAFE_ASSERT_RETURN(string != nullptr && string[0] != '\0', 0.0f); + + return nvgText(fContext, x, y, string, end); +} + +void NanoVG::textBox(float x, float y, float breakRowWidth, const char* string, const char* end) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(string != nullptr && string[0] != '\0',); + + nvgTextBox(fContext, x, y, breakRowWidth, string, end); +} + +float NanoVG::textBounds(float x, float y, const char* string, const char* end, Rectangle& bounds) +{ + if (fContext == nullptr) return 0.0f; + DISTRHO_SAFE_ASSERT_RETURN(string != nullptr && string[0] != '\0', 0.0f); + + float b[4]; + const float ret = nvgTextBounds(fContext, x, y, string, end, b); + bounds = Rectangle(b[0], b[1], b[2], b[3]); + return ret; +} + +void NanoVG::textBoxBounds(float x, float y, float breakRowWidth, const char* string, const char* end, float bounds[4]) +{ + if (fContext == nullptr) return; + DISTRHO_SAFE_ASSERT_RETURN(string != nullptr && string[0] != '\0',); + + nvgTextBoxBounds(fContext, x, y, breakRowWidth, string, end, bounds); +} + +int NanoVG::textGlyphPositions(float x, float y, const char* string, const char* end, NanoVG::GlyphPosition& positions, int maxPositions) +{ + if (fContext == nullptr) return 0; + DISTRHO_SAFE_ASSERT_RETURN(string != nullptr && string[0] != '\0', 0); + + return nvgTextGlyphPositions(fContext, x, y, string, end, (NVGglyphPosition*)&positions, maxPositions); +} + +void NanoVG::textMetrics(float* ascender, float* descender, float* lineh) +{ + if (fContext != nullptr) + nvgTextMetrics(fContext, ascender, descender, lineh); +} + +int NanoVG::textBreakLines(const char* string, const char* end, float breakRowWidth, NanoVG::TextRow& rows, int maxRows) +{ + if (fContext != nullptr) + return nvgTextBreakLines(fContext, string, end, breakRowWidth, (NVGtextRow*)&rows, maxRows); + return 0; +} + +// ----------------------------------------------------------------------- + +struct NanoWidget::PrivateData { + NanoWidget* const self; + std::vector subWidgets; + + PrivateData(NanoWidget* const s) + : self(s), + subWidgets() {} + + ~PrivateData() + { + subWidgets.clear(); + } +}; + +NanoWidget::NanoWidget(Window& parent, int flags) + : Widget(parent), + NanoVG(flags), + nData(new PrivateData(this)), + leakDetector_NanoWidget() +{ + pData->needsScaling = true; +} + +NanoWidget::NanoWidget(Widget* groupWidget, int flags) + : Widget(groupWidget, true), + NanoVG(flags), + nData(new PrivateData(this)), + leakDetector_NanoWidget() +{ + pData->needsScaling = true; +} + +NanoWidget::NanoWidget(NanoWidget* groupWidget) + : Widget(groupWidget, false), + NanoVG(groupWidget), + nData(new PrivateData(this)), + leakDetector_NanoWidget() +{ + pData->needsScaling = true; + groupWidget->nData->subWidgets.push_back(this); +} + +NanoWidget::~NanoWidget() +{ + delete nData; +} + +void NanoWidget::onDisplay() +{ + NanoVG::beginFrame(getWidth(), getHeight()); + onNanoDisplay(); + + for (std::vector::iterator it = nData->subWidgets.begin(); it != nData->subWidgets.end(); ++it) + { + NanoWidget* const widget(*it); + widget->onNanoDisplay(); + } + + NanoVG::endFrame(); +} + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +extern "C" { +#include "nanovg/nanovg.c" +} + +// ----------------------------------------------------------------------- diff --git a/dpf/dgl/src/NanoWidgets.cpp b/dpf/dgl/src/NanoWidgets.cpp new file mode 100644 index 0000000..6a0e8ba --- /dev/null +++ b/dpf/dgl/src/NanoWidgets.cpp @@ -0,0 +1,146 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "../NanoWidgets.hpp" +#include "Common.hpp" + +#define BLENDISH_IMPLEMENTATION +#include "nanovg/nanovg.h" +#include "oui-blendish/blendish.h" +#include "oui-blendish/blendish_resources.h" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +static void registerBlendishResourcesIfNeeded(NVGcontext* const context) +{ + if (nvgFindFont(context, "__dpf_blendish__") >= 0) + return; + + using namespace blendish_resources; + + bndSetFont(nvgCreateFontMem(context, "__dpf_blendish__", (const uchar*)dejavusans_ttf, dejavusans_ttf_size, 0)); + bndSetIconImage(nvgCreateImageMem(context, 0, (const uchar*)blender_icons16_png, blender_icons16_png_size)); +} + +// ----------------------------------------------------------------------- + +struct BlendishButton::PrivateData { + ButtonImpl impl; + int iconId; + DISTRHO_NAMESPACE::String text; + + PrivateData(Widget* const s, const char* const t, const int i) noexcept + : impl(s), + iconId(i), + text(t) {} + + DISTRHO_DECLARE_NON_COPY_STRUCT(PrivateData) +}; + +// ----------------------------------------------------------------------- + +BlendishButton::BlendishButton(Window& parent, const char* text, int iconId) + : NanoWidget(parent), + pData(new PrivateData(this, text, iconId)), + leakDetector_BlendishButton() +{ + registerBlendishResourcesIfNeeded(getContext()); + _updateBounds(); +} + +BlendishButton::BlendishButton(NanoWidget* widget, const char* text, int iconId) + : NanoWidget(widget), + pData(new PrivateData(this, text, iconId)), + leakDetector_BlendishButton() +{ + registerBlendishResourcesIfNeeded(getContext()); + _updateBounds(); +} + +BlendishButton::~BlendishButton() +{ + delete pData; +} + +int BlendishButton::getIconId() const noexcept +{ + return pData->iconId; +} + +void BlendishButton::setIconId(int iconId) noexcept +{ + if (pData->iconId == iconId) + return; + + pData->iconId = iconId; + _updateBounds(); + repaint(); +} + +const char* BlendishButton::getText() const noexcept +{ + return pData->text; +} + +void BlendishButton::setText(const char* text) noexcept +{ + if (pData->text == text) + return; + + pData->text = text; + _updateBounds(); + repaint(); +} + +void BlendishButton::setCallback(Callback* callback) noexcept +{ + pData->impl.callback_b = callback; +} + +void BlendishButton::onNanoDisplay() +{ + bndToolButton(getContext(), + getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight(), + 0, static_cast(pData->impl.state), pData->iconId, pData->text); +} + +bool BlendishButton::onMouse(const MouseEvent& ev) +{ + return pData->impl.onMouse(ev); +} + +bool BlendishButton::onMotion(const MotionEvent& ev) +{ + return pData->impl.onMotion(ev); +} + +void BlendishButton::_updateBounds() +{ + const float width = bndLabelWidth (getContext(), pData->iconId, pData->text); + const float height = bndLabelHeight(getContext(), pData->iconId, pData->text, width); + + setSize(width, height); +} + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#include "oui-blendish/blendish_resources.cpp" + +// ----------------------------------------------------------------------- diff --git a/dpf/dgl/src/Widget.cpp b/dpf/dgl/src/Widget.cpp new file mode 100644 index 0000000..ec03d72 --- /dev/null +++ b/dpf/dgl/src/Widget.cpp @@ -0,0 +1,253 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "WidgetPrivateData.hpp" + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- +// Widget + +Widget::Widget(Window& parent) + : pData(new PrivateData(this, parent, nullptr, false)), + leakDetector_Widget() +{ + parent._addWidget(this); +} + +Widget::Widget(Widget* groupWidget) + : pData(new PrivateData(this, groupWidget->getParentWindow(), groupWidget, true)), + leakDetector_Widget() +{ + pData->parent._addWidget(this); +} + +Widget::Widget(Widget* groupWidget, bool addToSubWidgets) + : pData(new PrivateData(this, groupWidget->getParentWindow(), groupWidget, addToSubWidgets)), + leakDetector_Widget() +{ + pData->parent._addWidget(this); +} + +Widget::~Widget() +{ + pData->parent._removeWidget(this); + delete pData; +} + +bool Widget::isVisible() const noexcept +{ + return pData->visible; +} + +void Widget::setVisible(bool yesNo) +{ + if (pData->visible == yesNo) + return; + + pData->visible = yesNo; + pData->parent.repaint(); +} + +void Widget::show() +{ + setVisible(true); +} + +void Widget::hide() +{ + setVisible(false); +} + +uint Widget::getWidth() const noexcept +{ + return pData->size.getWidth(); +} + +uint Widget::getHeight() const noexcept +{ + return pData->size.getHeight(); +} + +const Size& Widget::getSize() const noexcept +{ + return pData->size; +} + +void Widget::setWidth(uint width) noexcept +{ + if (pData->size.getWidth() == width) + return; + + ResizeEvent ev; + ev.oldSize = pData->size; + ev.size = Size(width, pData->size.getHeight()); + + pData->size.setWidth(width); + onResize(ev); + + pData->parent.repaint(); +} + +void Widget::setHeight(uint height) noexcept +{ + if (pData->size.getHeight() == height) + return; + + ResizeEvent ev; + ev.oldSize = pData->size; + ev.size = Size(pData->size.getWidth(), height); + + pData->size.setHeight(height); + onResize(ev); + + pData->parent.repaint(); +} + +void Widget::setSize(uint width, uint height) noexcept +{ + setSize(Size(width, height)); +} + +void Widget::setSize(const Size& size) noexcept +{ + if (pData->size == size) + return; + + ResizeEvent ev; + ev.oldSize = pData->size; + ev.size = size; + + pData->size = size; + onResize(ev); + + pData->parent.repaint(); +} + +int Widget::getAbsoluteX() const noexcept +{ + return pData->absolutePos.getX(); +} + +int Widget::getAbsoluteY() const noexcept +{ + return pData->absolutePos.getY(); +} + +const Point& Widget::getAbsolutePos() const noexcept +{ + return pData->absolutePos; +} + +void Widget::setAbsoluteX(int x) noexcept +{ + if (pData->absolutePos.getX() == x) + return; + + pData->absolutePos.setX(x); + pData->parent.repaint(); +} + +void Widget::setAbsoluteY(int y) noexcept +{ + if (pData->absolutePos.getY() == y) + return; + + pData->absolutePos.setY(y); + pData->parent.repaint(); +} + +void Widget::setAbsolutePos(int x, int y) noexcept +{ + setAbsolutePos(Point(x, y)); +} + +void Widget::setAbsolutePos(const Point& pos) noexcept +{ + if (pData->absolutePos == pos) + return; + + pData->absolutePos = pos; + pData->parent.repaint(); +} + +Application& Widget::getParentApp() const noexcept +{ + return pData->parent.getApp(); +} + +Window& Widget::getParentWindow() const noexcept +{ + return pData->parent; +} + +bool Widget::contains(int x, int y) const noexcept +{ + return (x >= 0 && y >= 0 && static_cast(x) < pData->size.getWidth() && static_cast(y) < pData->size.getHeight()); +} + +bool Widget::contains(const Point& pos) const noexcept +{ + return contains(pos.getX(), pos.getY()); +} + +void Widget::repaint() noexcept +{ + pData->parent.repaint(); +} + +uint Widget::getId() const noexcept +{ + return pData->id; +} + +void Widget::setId(uint id) noexcept +{ + pData->id = id; +} + +bool Widget::onKeyboard(const KeyboardEvent&) +{ + return false; +} + +bool Widget::onSpecial(const SpecialEvent&) +{ + return false; +} + +bool Widget::onMouse(const MouseEvent&) +{ + return false; +} + +bool Widget::onMotion(const MotionEvent&) +{ + return false; +} + +bool Widget::onScroll(const ScrollEvent&) +{ + return false; +} + +void Widget::onResize(const ResizeEvent&) +{ +} + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL diff --git a/dpf/dgl/src/WidgetPrivateData.hpp b/dpf/dgl/src/WidgetPrivateData.hpp new file mode 100644 index 0000000..5a65622 --- /dev/null +++ b/dpf/dgl/src/WidgetPrivateData.hpp @@ -0,0 +1,133 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DGL_WIDGET_PRIVATE_DATA_HPP_INCLUDED +#define DGL_WIDGET_PRIVATE_DATA_HPP_INCLUDED + +#include "../Widget.hpp" +#include "../Window.hpp" + +#include + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- + +struct Widget::PrivateData { + Widget* const self; + Window& parent; + Point absolutePos; + Size size; + std::vector subWidgets; + + uint id; + bool needsFullViewport; + bool needsScaling; + bool skipDisplay; + bool visible; + + PrivateData(Widget* const s, Window& p, Widget* groupWidget, bool addToSubWidgets) + : self(s), + parent(p), + absolutePos(0, 0), + size(0, 0), + id(0), + needsFullViewport(false), + needsScaling(false), + skipDisplay(false), + visible(true) + { + if (addToSubWidgets && groupWidget != nullptr) + groupWidget->pData->subWidgets.push_back(self); + } + + ~PrivateData() + { + subWidgets.clear(); + } + + void display(const uint width, const uint height) + { + if (skipDisplay || ! visible) + return; + + bool needsDisableScissor = false; + + // reset color + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + + if (needsFullViewport || (absolutePos.isZero() && size == Size(width, height))) + { + // full viewport size + glViewport(0, 0, static_cast(width), static_cast(height)); + } + else if (needsScaling) + { + // limit viewport to widget bounds + glViewport(absolutePos.getX(), + height - static_cast(self->getHeight()) - absolutePos.getY(), + static_cast(self->getWidth()), + static_cast(self->getHeight())); + } + else + { + // only set viewport pos + glViewport(absolutePos.getX(), + /*height - static_cast(self->getHeight())*/ - absolutePos.getY(), + static_cast(width), + static_cast(height)); + + // then cut the outer bounds + glScissor(absolutePos.getX(), + height - static_cast(self->getHeight()) - absolutePos.getY(), + static_cast(self->getWidth()), + static_cast(self->getHeight())); + + glEnable(GL_SCISSOR_TEST); + needsDisableScissor = true; + } + + // display widget + self->onDisplay(); + + if (needsDisableScissor) + { + glDisable(GL_SCISSOR_TEST); + needsDisableScissor = false; + } + + displaySubWidgets(width, height); + } + + void displaySubWidgets(const uint width, const uint height) + { + for (std::vector::iterator it = subWidgets.begin(); it != subWidgets.end(); ++it) + { + Widget* const widget(*it); + DISTRHO_SAFE_ASSERT_CONTINUE(widget->pData != this); + + widget->pData->display(width, height); + } + } + + DISTRHO_DECLARE_NON_COPY_STRUCT(PrivateData) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#endif // DGL_WIDGET_PRIVATE_DATA_HPP_INCLUDED diff --git a/dpf/dgl/src/Window.cpp b/dpf/dgl/src/Window.cpp new file mode 100644 index 0000000..ee33f3c --- /dev/null +++ b/dpf/dgl/src/Window.cpp @@ -0,0 +1,1240 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +// we need this for now +//#define PUGL_GRAB_FOCUS 1 + +#include "../../distrho/src/DistrhoDefines.h" + +#undef PUGL_HAVE_CAIRO +#undef PUGL_HAVE_GL +#define PUGL_HAVE_GL 1 + +#include "pugl/pugl.h" + +#if defined(DISTRHO_OS_WINDOWS) +# include "pugl/pugl_win.cpp" +#elif defined(DISTRHO_OS_MAC) +# include "pugl/pugl_osx.m" +#elif defined(DISTRHO_OS_LINUX) +# include +# include +extern "C" { +# include "pugl/pugl_x11.c" +} +#else +# error Unsupported platform +#endif + +#include "ApplicationPrivateData.hpp" +#include "WidgetPrivateData.hpp" +#include "../StandaloneWindow.hpp" +#include "../../distrho/extra/String.hpp" + +#define FOR_EACH_WIDGET(it) \ + for (std::list::iterator it = fWidgets.begin(); it != fWidgets.end(); ++it) + +#define FOR_EACH_WIDGET_INV(rit) \ + for (std::list::reverse_iterator rit = fWidgets.rbegin(); rit != fWidgets.rend(); ++rit) + +#ifdef DEBUG +# define DBG(msg) std::fprintf(stderr, "%s", msg); +# define DBGp(...) std::fprintf(stderr, __VA_ARGS__); +# define DBGF std::fflush(stderr); +#else +# define DBG(msg) +# define DBGp(...) +# define DBGF +#endif + +START_NAMESPACE_DGL + +// ----------------------------------------------------------------------- +// Window Private + +struct Window::PrivateData { + PrivateData(Application& app, Window* const self) + : fApp(app), + fSelf(self), + fView(puglInit()), + fFirstInit(true), + fVisible(false), + fResizable(true), + fUsingEmbed(false), + fWidth(1), + fHeight(1), + fTitle(nullptr), + fWidgets(), + fModal(), +#if defined(DISTRHO_OS_WINDOWS) + hwnd(0), +#elif defined(DISTRHO_OS_LINUX) + xDisplay(nullptr), + xWindow(0), +#elif defined(DISTRHO_OS_MAC) + fNeedsIdle(true), + mView(nullptr), + mWindow(nullptr), +#endif + leakDetector_PrivateData() + { + DBG("Creating window without parent..."); DBGF; + init(); + } + + PrivateData(Application& app, Window* const self, Window& parent) + : fApp(app), + fSelf(self), + fView(puglInit()), + fFirstInit(true), + fVisible(false), + fResizable(true), + fUsingEmbed(false), + fWidth(1), + fHeight(1), + fTitle(nullptr), + fWidgets(), + fModal(parent.pData), +#if defined(DISTRHO_OS_WINDOWS) + hwnd(0), +#elif defined(DISTRHO_OS_LINUX) + xDisplay(nullptr), + xWindow(0), +#elif defined(DISTRHO_OS_MAC) + fNeedsIdle(false), + mView(nullptr), + mWindow(nullptr), +#endif + leakDetector_PrivateData() + { + DBG("Creating window with parent..."); DBGF; + init(); + + const PuglInternals* const parentImpl(parent.pData->fView->impl); +#if defined(DISTRHO_OS_LINUX) + XSetTransientForHint(xDisplay, xWindow, parentImpl->win); +//#elif defined(DISTRHO_OS_MAC) +// [parentImpl->window orderWindow:NSWindowBelow relativeTo:[[mView window] windowNumber]]; +#else + // unused + return; (void)parentImpl; +#endif + } + + PrivateData(Application& app, Window* const self, const intptr_t parentId) + : fApp(app), + fSelf(self), + fView(puglInit()), + fFirstInit(true), + fVisible(parentId != 0), + fResizable(parentId == 0), + fUsingEmbed(parentId != 0), + fWidth(1), + fHeight(1), + fTitle(nullptr), + fWidgets(), + fModal(), +#if defined(DISTRHO_OS_WINDOWS) + hwnd(0), +#elif defined(DISTRHO_OS_LINUX) + xDisplay(nullptr), + xWindow(0), +#elif defined(DISTRHO_OS_MAC) + fNeedsIdle(parentId == 0), + mView(nullptr), + mWindow(nullptr), +#endif + leakDetector_PrivateData() + { + if (fUsingEmbed) + { + DBG("Creating embedded window..."); DBGF; + puglInitWindowParent(fView, parentId); + } + else + { + DBG("Creating window without parent..."); DBGF; + } + + init(); + + if (fUsingEmbed) + { + DBG("NOTE: Embed window is always visible and non-resizable\n"); + puglShowWindow(fView); + fApp.pData->oneShown(); + fFirstInit = false; + } + } + + void init() + { + if (fSelf == nullptr || fView == nullptr) + { + DBG("Failed!\n"); + return; + } + + puglInitContextType(fView, PUGL_GL); + puglInitUserResizable(fView, fResizable); + puglInitWindowSize(fView, static_cast(fWidth), static_cast(fHeight)); + + puglSetHandle(fView, this); + puglSetDisplayFunc(fView, onDisplayCallback); + puglSetKeyboardFunc(fView, onKeyboardCallback); + puglSetMotionFunc(fView, onMotionCallback); + puglSetMouseFunc(fView, onMouseCallback); + puglSetScrollFunc(fView, onScrollCallback); + puglSetSpecialFunc(fView, onSpecialCallback); + puglSetReshapeFunc(fView, onReshapeCallback); + puglSetCloseFunc(fView, onCloseCallback); + puglSetFileSelectedFunc(fView, fileBrowserSelectedCallback); + + puglCreateWindow(fView, nullptr); + + PuglInternals* impl = fView->impl; +#if defined(DISTRHO_OS_WINDOWS) + hwnd = impl->hwnd; + DISTRHO_SAFE_ASSERT(hwnd != 0); +#elif defined(DISTRHO_OS_MAC) + mView = impl->glview; + mWindow = impl->window; + DISTRHO_SAFE_ASSERT(mView != nullptr); + if (fUsingEmbed) { + DISTRHO_SAFE_ASSERT(mWindow == nullptr); + } else { + DISTRHO_SAFE_ASSERT(mWindow != nullptr); + } +#elif defined(DISTRHO_OS_LINUX) + xDisplay = impl->display; + xWindow = impl->win; + DISTRHO_SAFE_ASSERT(xWindow != 0); + + if (! fUsingEmbed) + { + pid_t pid = getpid(); + Atom _nwp = XInternAtom(xDisplay, "_NET_WM_PID", True); + XChangeProperty(xDisplay, xWindow, _nwp, XA_CARDINAL, 32, PropModeReplace, (const uchar*)&pid, 1); + } +#endif + puglEnterContext(fView); + + fApp.pData->windows.push_back(fSelf); + + DBG("Success!\n"); + } + + ~PrivateData() + { + DBG("Destroying window..."); DBGF; + + if (fModal.enabled) + { + exec_fini(); + close(); + } + + fWidgets.clear(); + + if (fUsingEmbed) + { + puglHideWindow(fView); + fApp.pData->oneHidden(); + } + + if (fSelf != nullptr) + { + fApp.pData->windows.remove(fSelf); + fSelf = nullptr; + } + + if (fView != nullptr) + { + puglDestroy(fView); + fView = nullptr; + } + +#if defined(DISTRHO_OS_WINDOWS) + hwnd = 0; +#elif defined(DISTRHO_OS_MAC) + mView = nullptr; + mWindow = nullptr; +#elif defined(DISTRHO_OS_LINUX) + xDisplay = nullptr; + xWindow = 0; +#endif + + DBG("Success!\n"); + } + + // ------------------------------------------------------------------- + + void close() + { + DBG("Window close\n"); + + if (fUsingEmbed) + return; + + setVisible(false); + + if (! fFirstInit) + { + fApp.pData->oneHidden(); + fFirstInit = true; + } + } + + void exec(const bool lockWait) + { + DBG("Window exec\n"); + exec_init(); + + if (lockWait) + { + for (; fVisible && fModal.enabled;) + { + idle(); + d_msleep(10); + } + + exec_fini(); + } + else + { + idle(); + } + } + + // ------------------------------------------------------------------- + + void exec_init() + { + DBG("Window modal loop starting..."); DBGF; + DISTRHO_SAFE_ASSERT_RETURN(fModal.parent != nullptr, setVisible(true)); + + fModal.enabled = true; + fModal.parent->fModal.childFocus = this; + +#ifdef DISTRHO_OS_WINDOWS + // Center this window + PuglInternals* const parentImpl = fModal.parent->fView->impl; + + RECT curRect; + RECT parentRect; + GetWindowRect(hwnd, &curRect); + GetWindowRect(parentImpl->hwnd, &parentRect); + + int x = parentRect.left+(parentRect.right-curRect.right)/2; + int y = parentRect.top +(parentRect.bottom-curRect.bottom)/2; + + SetWindowPos(hwnd, 0, x, y, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER); + UpdateWindow(hwnd); +#endif + + fModal.parent->setVisible(true); + setVisible(true); + + DBG("Ok\n"); + } + + void exec_fini() + { + DBG("Window modal loop stopping..."); DBGF; + fModal.enabled = false; + + if (fModal.parent != nullptr) + { + fModal.parent->fModal.childFocus = nullptr; + + // the mouse position probably changed since the modal appeared, + // so send a mouse motion event to the modal's parent window +#if defined(DISTRHO_OS_WINDOWS) + // TODO +#elif defined(DISTRHO_OS_MAC) + // TODO +#elif defined(DISTRHO_OS_LINUX) + int i, wx, wy; + uint u; + ::Window w; + if (XQueryPointer(fModal.parent->xDisplay, fModal.parent->xWindow, &w, &w, &i, &i, &wx, &wy, &u) == True) + fModal.parent->onPuglMotion(wx, wy); +#endif + } + + DBG("Ok\n"); + } + + // ------------------------------------------------------------------- + + void focus() + { + DBG("Window focus\n"); +#if defined(DISTRHO_OS_WINDOWS) + SetForegroundWindow(hwnd); + SetActiveWindow(hwnd); + SetFocus(hwnd); +#elif defined(DISTRHO_OS_MAC) + if (mWindow != nullptr) + { + // TODO + //[NSApp activateIgnoringOtherApps:YES]; + //[mWindow makeKeyAndOrderFront:mWindow]; + } +#elif defined(DISTRHO_OS_LINUX) + XRaiseWindow(xDisplay, xWindow); + XSetInputFocus(xDisplay, xWindow, RevertToPointerRoot, CurrentTime); + XFlush(xDisplay); +#endif + } + + // ------------------------------------------------------------------- + + void setVisible(const bool yesNo) + { + if (fVisible == yesNo) + { + DBG("Window setVisible matches current state, ignoring request\n"); + return; + } + if (fUsingEmbed) + { + DBG("Window setVisible cannot be called when embedded\n"); + return; + } + + DBG("Window setVisible called\n"); + + fVisible = yesNo; + + if (yesNo && fFirstInit) + setSize(fWidth, fHeight, true); + +#if defined(DISTRHO_OS_WINDOWS) + if (yesNo) + ShowWindow(hwnd, fFirstInit ? SW_SHOWNORMAL : SW_RESTORE); + else + ShowWindow(hwnd, SW_HIDE); + + UpdateWindow(hwnd); +#elif defined(DISTRHO_OS_MAC) + if (yesNo) + { + if (mWindow != nullptr) + [mWindow setIsVisible:YES]; + else + [mView setHidden:NO]; + } + else + { + if (mWindow != nullptr) + [mWindow setIsVisible:NO]; + else + [mView setHidden:YES]; + } +#elif defined(DISTRHO_OS_LINUX) + if (yesNo) + XMapRaised(xDisplay, xWindow); + else + XUnmapWindow(xDisplay, xWindow); + + XFlush(xDisplay); +#endif + + if (yesNo) + { + if (fFirstInit) + { + fApp.pData->oneShown(); + fFirstInit = false; + } + } + else if (fModal.enabled) + exec_fini(); + } + + // ------------------------------------------------------------------- + + void setResizable(const bool yesNo) + { + if (fResizable == yesNo) + { + DBG("Window setResizable matches current state, ignoring request\n"); + return; + } + if (fUsingEmbed) + { + DBG("Window setResizable cannot be called when embedded\n"); + return; + } + + DBG("Window setResizable called\n"); + + fResizable = yesNo; + +#if defined(DISTRHO_OS_WINDOWS) + const int winFlags = fResizable ? GetWindowLong(hwnd, GWL_STYLE) | WS_SIZEBOX + : GetWindowLong(hwnd, GWL_STYLE) & ~WS_SIZEBOX; + SetWindowLong(hwnd, GWL_STYLE, winFlags); +#elif defined(DISTRHO_OS_MAC) + const uint flags(yesNo ? (NSViewWidthSizable|NSViewHeightSizable) : 0x0); + [mView setAutoresizingMask:flags]; +#endif + + setSize(fWidth, fHeight, true); + } + + // ------------------------------------------------------------------- + + void setSize(uint width, uint height, const bool forced = false) + { + if (width <= 1 || height <= 1) + { + DBGp("Window setSize called with invalid value(s) %i %i, ignoring request\n", width, height); + return; + } + + if (fWidth == width && fHeight == height && ! forced) + { + DBGp("Window setSize matches current size, ignoring request (%i %i)\n", width, height); + return; + } + + fWidth = width; + fHeight = height; + + DBGp("Window setSize called %s, size %i %i, resizable %s\n", forced ? "(forced)" : "(not forced)", width, height, fResizable?"true":"false"); + +#if defined(DISTRHO_OS_WINDOWS) + const int winFlags = WS_POPUPWINDOW | WS_CAPTION | (fResizable ? WS_SIZEBOX : 0x0); + RECT wr = { 0, 0, static_cast(width), static_cast(height) }; + AdjustWindowRectEx(&wr, fUsingEmbed ? WS_CHILD : winFlags, FALSE, WS_EX_TOPMOST); + + SetWindowPos(hwnd, 0, 0, 0, wr.right-wr.left, wr.bottom-wr.top, + SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOOWNERZORDER|SWP_NOZORDER); + + if (! forced) + UpdateWindow(hwnd); +#elif defined(DISTRHO_OS_MAC) + [mView setFrame:NSMakeRect(0, 0, width, height)]; + + if (mWindow != nullptr) + { + const NSSize size = NSMakeSize(width, height); + [mWindow setContentSize:size]; + + if (fResizable) + { + [mWindow setContentMinSize:NSMakeSize(1, 1)]; + [mWindow setContentMaxSize:NSMakeSize(99999, 99999)]; + [[mWindow standardWindowButton:NSWindowZoomButton] setHidden:NO]; + } + else + { + [mWindow setContentMinSize:size]; + [mWindow setContentMaxSize:size]; + [[mWindow standardWindowButton:NSWindowZoomButton] setHidden:YES]; + } + } +#elif defined(DISTRHO_OS_LINUX) + XResizeWindow(xDisplay, xWindow, width, height); + + if (! fResizable) + { + XSizeHints sizeHints; + memset(&sizeHints, 0, sizeof(sizeHints)); + + sizeHints.flags = PSize|PMinSize|PMaxSize; + sizeHints.width = static_cast(width); + sizeHints.height = static_cast(height); + sizeHints.min_width = static_cast(width); + sizeHints.min_height = static_cast(height); + sizeHints.max_width = static_cast(width); + sizeHints.max_height = static_cast(height); + + XSetNormalHints(xDisplay, xWindow, &sizeHints); + } + + if (! forced) + XFlush(xDisplay); +#endif + + puglPostRedisplay(fView); + } + + // ------------------------------------------------------------------- + + const char* getTitle() const noexcept + { + static const char* const kFallback = ""; + + return fTitle != nullptr ? fTitle : kFallback; + } + + void setTitle(const char* const title) + { + DBGp("Window setTitle \"%s\"\n", title); + + if (fTitle != nullptr) + std::free(fTitle); + + fTitle = strdup(title); + +#if defined(DISTRHO_OS_WINDOWS) + SetWindowTextA(hwnd, title); +#elif defined(DISTRHO_OS_MAC) + if (mWindow != nullptr) + { + NSString* titleString = [[NSString alloc] + initWithBytes:title + length:strlen(title) + encoding:NSUTF8StringEncoding]; + + [mWindow setTitle:titleString]; + } +#elif defined(DISTRHO_OS_LINUX) + XStoreName(xDisplay, xWindow, title); +#endif + } + + void setTransientWinId(const uintptr_t winId) + { +#if defined(DISTRHO_OS_LINUX) + XSetTransientForHint(xDisplay, xWindow, static_cast< ::Window>(winId)); +#else + return; + // unused + (void)winId; +#endif + } + + // ------------------------------------------------------------------- + + void addWidget(Widget* const widget) + { + fWidgets.push_back(widget); + } + + void removeWidget(Widget* const widget) + { + fWidgets.remove(widget); + } + + void idle() + { + puglProcessEvents(fView); + +#ifdef DISTRHO_OS_MAC + if (fNeedsIdle) + { + NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + NSEvent* event; + + for (;;) + { + event = [NSApp + nextEventMatchingMask:NSAnyEventMask + untilDate:[NSDate distantPast] + inMode:NSDefaultRunLoopMode + dequeue:YES]; + + if (event == nil) + break; + + [NSApp sendEvent: event]; + } + + [pool release]; + } +#endif + + if (fModal.enabled && fModal.parent != nullptr) + fModal.parent->idle(); + } + + // ------------------------------------------------------------------- + + void onPuglDisplay() + { + fSelf->onDisplayBefore(); + + FOR_EACH_WIDGET(it) + { + Widget* const widget(*it); + widget->pData->display(fWidth, fHeight); + } + + fSelf->onDisplayAfter(); + } + + void onPuglKeyboard(const bool press, const uint key) + { + DBGp("PUGL: onKeyboard : %i %i\n", press, key); + + if (fModal.childFocus != nullptr) + return fModal.childFocus->focus(); + + Widget::KeyboardEvent ev; + ev.press = press; + ev.key = key; + ev.mod = static_cast(puglGetModifiers(fView)); + ev.time = puglGetEventTimestamp(fView); + + FOR_EACH_WIDGET_INV(rit) + { + Widget* const widget(*rit); + + if (widget->isVisible() && widget->onKeyboard(ev)) + break; + } + } + + void onPuglSpecial(const bool press, const Key key) + { + DBGp("PUGL: onSpecial : %i %i\n", press, key); + + if (fModal.childFocus != nullptr) + return fModal.childFocus->focus(); + + Widget::SpecialEvent ev; + ev.press = press; + ev.key = key; + ev.mod = static_cast(puglGetModifiers(fView)); + ev.time = puglGetEventTimestamp(fView); + + FOR_EACH_WIDGET_INV(rit) + { + Widget* const widget(*rit); + + if (widget->isVisible() && widget->onSpecial(ev)) + break; + } + } + + void onPuglMouse(const int button, const bool press, const int x, const int y) + { + DBGp("PUGL: onMouse : %i %i %i %i\n", button, press, x, y); + + // FIXME - pugl sends 2 of these for each window on init, don't ask me why. we'll ignore it + if (press && button == 0 && x == 0 && y == 0) return; + + if (fModal.childFocus != nullptr) + return fModal.childFocus->focus(); + + Widget::MouseEvent ev; + ev.button = button; + ev.press = press; + ev.mod = static_cast(puglGetModifiers(fView)); + ev.time = puglGetEventTimestamp(fView); + + FOR_EACH_WIDGET_INV(rit) + { + Widget* const widget(*rit); + + ev.pos = Point(x-widget->getAbsoluteX(), y-widget->getAbsoluteY()); + + if (widget->isVisible() && widget->onMouse(ev)) + break; + } + } + + void onPuglMotion(const int x, const int y) + { + DBGp("PUGL: onMotion : %i %i\n", x, y); + + if (fModal.childFocus != nullptr) + return; + + Widget::MotionEvent ev; + ev.mod = static_cast(puglGetModifiers(fView)); + ev.time = puglGetEventTimestamp(fView); + + FOR_EACH_WIDGET_INV(rit) + { + Widget* const widget(*rit); + + ev.pos = Point(x-widget->getAbsoluteX(), y-widget->getAbsoluteY()); + + if (widget->isVisible() && widget->onMotion(ev)) + break; + } + } + + void onPuglScroll(const int x, const int y, const float dx, const float dy) + { + DBGp("PUGL: onScroll : %i %i %f %f\n", x, y, dx, dy); + + if (fModal.childFocus != nullptr) + return; + + Widget::ScrollEvent ev; + ev.delta = Point(dx, dy); + ev.mod = static_cast(puglGetModifiers(fView)); + ev.time = puglGetEventTimestamp(fView); + + FOR_EACH_WIDGET_INV(rit) + { + Widget* const widget(*rit); + + ev.pos = Point(x-widget->getAbsoluteX(), y-widget->getAbsoluteY()); + + if (widget->isVisible() && widget->onScroll(ev)) + break; + } + } + + void onPuglReshape(const int width, const int height) + { + DBGp("PUGL: onReshape : %i %i\n", width, height); + + if (width <= 1 && height <= 1) + return; + + fWidth = static_cast(width); + fHeight = static_cast(height); + + fSelf->onReshape(fWidth, fHeight); + + FOR_EACH_WIDGET(it) + { + Widget* const widget(*it); + + if (widget->pData->needsFullViewport) + widget->setSize(fWidth, fHeight); + } + } + + void onPuglClose() + { + DBG("PUGL: onClose\n"); + + if (fModal.enabled) + exec_fini(); + + fSelf->onClose(); + + if (fModal.childFocus != nullptr) + fModal.childFocus->fSelf->onClose(); + + close(); + } + + // ------------------------------------------------------------------- + + Application& fApp; + Window* fSelf; + PuglView* fView; + + bool fFirstInit; + bool fVisible; + bool fResizable; + bool fUsingEmbed; + uint fWidth; + uint fHeight; + char* fTitle; + std::list fWidgets; + + struct Modal { + bool enabled; + PrivateData* parent; + PrivateData* childFocus; + + Modal() + : enabled(false), + parent(nullptr), + childFocus(nullptr) {} + + Modal(PrivateData* const p) + : enabled(false), + parent(p), + childFocus(nullptr) {} + + ~Modal() + { + DISTRHO_SAFE_ASSERT(! enabled); + DISTRHO_SAFE_ASSERT(childFocus == nullptr); + } + + DISTRHO_DECLARE_NON_COPY_STRUCT(Modal) + } fModal; + +#if defined(DISTRHO_OS_WINDOWS) + HWND hwnd; +#elif defined(DISTRHO_OS_LINUX) + Display* xDisplay; + ::Window xWindow; +#elif defined(DISTRHO_OS_MAC) + bool fNeedsIdle; + PuglOpenGLView* mView; + id mWindow; +#endif + + // ------------------------------------------------------------------- + // Callbacks + + #define handlePtr ((PrivateData*)puglGetHandle(view)) + + static void onDisplayCallback(PuglView* view) + { + handlePtr->onPuglDisplay(); + } + + static void onKeyboardCallback(PuglView* view, bool press, uint32_t key) + { + handlePtr->onPuglKeyboard(press, key); + } + + static void onSpecialCallback(PuglView* view, bool press, PuglKey key) + { + handlePtr->onPuglSpecial(press, static_cast(key)); + } + + static void onMouseCallback(PuglView* view, int button, bool press, int x, int y) + { + handlePtr->onPuglMouse(button, press, x, y); + } + + static void onMotionCallback(PuglView* view, int x, int y) + { + handlePtr->onPuglMotion(x, y); + } + + static void onScrollCallback(PuglView* view, int x, int y, float dx, float dy) + { + handlePtr->onPuglScroll(x, y, dx, dy); + } + + static void onReshapeCallback(PuglView* view, int width, int height) + { + handlePtr->onPuglReshape(width, height); + } + + static void onCloseCallback(PuglView* view) + { + handlePtr->onPuglClose(); + } + + static void fileBrowserSelectedCallback(PuglView* view, const char* filename) + { + handlePtr->fSelf->fileBrowserSelected(filename); + } + + #undef handlePtr + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PrivateData) +}; + +// ----------------------------------------------------------------------- +// Window + +Window::Window(Application& app) + : pData(new PrivateData(app, this)), + leakDetector_Window() {} + +Window::Window(Application& app, Window& parent) + : pData(new PrivateData(app, this, parent)), + leakDetector_Window() {} + +Window::Window(Application& app, intptr_t parentId) + : pData(new PrivateData(app, this, parentId)), + leakDetector_Window() {} + +Window::~Window() +{ + delete pData; +} + +void Window::show() +{ + pData->setVisible(true); +} + +void Window::hide() +{ + pData->setVisible(false); +} + +void Window::close() +{ + pData->close(); +} + +void Window::exec(bool lockWait) +{ + pData->exec(lockWait); +} + +void Window::focus() +{ + pData->focus(); +} + +void Window::repaint() noexcept +{ + puglPostRedisplay(pData->fView); +} + +// static int fib_filter_filename_filter(const char* const name) +// { +// return 1; +// (void)name; +// } + +bool Window::openFileBrowser(const FileBrowserOptions& options) +{ +#ifdef SOFD_HAVE_X11 + using DISTRHO_NAMESPACE::String; + + // -------------------------------------------------------------------------- + // configure start dir + + // TODO: get abspath if needed + // TODO: cross-platform + + String startDir(options.startDir); + + if (startDir.isEmpty()) + { + if (char* const dir_name = get_current_dir_name()) + { + startDir = dir_name; + std::free(dir_name); + } + } + + DISTRHO_SAFE_ASSERT_RETURN(startDir.isNotEmpty(), false); + + if (! startDir.endsWith('/')) + startDir += "/"; + + DISTRHO_SAFE_ASSERT_RETURN(x_fib_configure(0, startDir) == 0, false); + + // -------------------------------------------------------------------------- + // configure title + + String title(options.title); + + if (title.isEmpty()) + { + title = pData->getTitle(); + + if (title.isEmpty()) + title = "FileBrowser"; + } + + DISTRHO_SAFE_ASSERT_RETURN(x_fib_configure(1, title) == 0, false); + + // -------------------------------------------------------------------------- + // configure filters + + x_fib_cfg_filter_callback(nullptr); //fib_filter_filename_filter); + + // -------------------------------------------------------------------------- + // configure buttons + + x_fib_cfg_buttons(3, options.buttons.listAllFiles-1); + x_fib_cfg_buttons(1, options.buttons.showHidden-1); + x_fib_cfg_buttons(2, options.buttons.showPlaces-1); + + // -------------------------------------------------------------------------- + // show + + return (x_fib_show(pData->xDisplay, pData->xWindow, /*options.width*/0, /*options.height*/0) == 0); +#else + // not implemented + return false; +#endif +} + +bool Window::isVisible() const noexcept +{ + return pData->fVisible; +} + +void Window::setVisible(bool yesNo) +{ + pData->setVisible(yesNo); +} + +bool Window::isResizable() const noexcept +{ + return pData->fResizable; +} + +void Window::setResizable(bool yesNo) +{ + pData->setResizable(yesNo); +} + +uint Window::getWidth() const noexcept +{ + return pData->fWidth; +} + +uint Window::getHeight() const noexcept +{ + return pData->fHeight; +} + +Size Window::getSize() const noexcept +{ + return Size(pData->fWidth, pData->fHeight); +} + +void Window::setSize(uint width, uint height) +{ + pData->setSize(width, height); +} + +void Window::setSize(Size size) +{ + pData->setSize(size.getWidth(), size.getHeight()); +} + +const char* Window::getTitle() const noexcept +{ + return pData->getTitle(); +} + +void Window::setTitle(const char* title) +{ + pData->setTitle(title); +} + +void Window::setTransientWinId(uintptr_t winId) +{ + pData->setTransientWinId(winId); +} + +Application& Window::getApp() const noexcept +{ + return pData->fApp; +} + +intptr_t Window::getWindowId() const noexcept +{ + return puglGetNativeWindow(pData->fView); +} + +void Window::_addWidget(Widget* const widget) +{ + pData->addWidget(widget); +} + +void Window::_removeWidget(Widget* const widget) +{ + pData->removeWidget(widget); +} + +void Window::_idle() +{ + pData->idle(); +} + +// ----------------------------------------------------------------------- + +void Window::addIdleCallback(IdleCallback* const callback) +{ + DISTRHO_SAFE_ASSERT_RETURN(callback != nullptr,) + + pData->fApp.pData->idleCallbacks.push_back(callback); +} + +void Window::removeIdleCallback(IdleCallback* const callback) +{ + DISTRHO_SAFE_ASSERT_RETURN(callback != nullptr,) + + pData->fApp.pData->idleCallbacks.remove(callback); +} + +// ----------------------------------------------------------------------- + +void Window::onDisplayBefore() +{ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glLoadIdentity(); +} + +void Window::onDisplayAfter() +{ +} + +void Window::onReshape(uint width, uint height) +{ + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0.0, static_cast(width), static_cast(height), 0.0, 0.0, 1.0); + glViewport(0, 0, static_cast(width), static_cast(height)); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + +void Window::onClose() +{ +} + +void Window::fileBrowserSelected(const char*) +{ +} + +// ----------------------------------------------------------------------- + +StandaloneWindow::StandaloneWindow() + : Application(), + Window((Application&)*this), + fWidget(nullptr) {} + +void StandaloneWindow::exec() +{ + Window::show(); + Application::exec(); +} + +void StandaloneWindow::onReshape(uint width, uint height) +{ + if (fWidget != nullptr) + fWidget->setSize(width, height); + Window::onReshape(width, height); +} + +void StandaloneWindow::_addWidget(Widget* widget) +{ + if (fWidget == nullptr) + { + fWidget = widget; + fWidget->pData->needsFullViewport = true; + } + Window::_addWidget(widget); +} + +void StandaloneWindow::_removeWidget(Widget* widget) +{ + if (fWidget == widget) + { + fWidget->pData->needsFullViewport = false; + fWidget = nullptr; + } + Window::_removeWidget(widget); +} + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DGL + +#undef DBG +#undef DBGF diff --git a/dpf/dgl/src/nanovg/LICENSE.txt b/dpf/dgl/src/nanovg/LICENSE.txt new file mode 100644 index 0000000..2a03a1a --- /dev/null +++ b/dpf/dgl/src/nanovg/LICENSE.txt @@ -0,0 +1,18 @@ +Copyright (c) 2013 Mikko Mononen memon@inside.org + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + diff --git a/dpf/dgl/src/nanovg/fontstash.h b/dpf/dgl/src/nanovg/fontstash.h new file mode 100644 index 0000000..79e2f82 --- /dev/null +++ b/dpf/dgl/src/nanovg/fontstash.h @@ -0,0 +1,1691 @@ +// +// Copyright (c) 2009-2013 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef FONS_H +#define FONS_H + +#define FONS_INVALID -1 + +enum FONSflags { + FONS_ZERO_TOPLEFT = 1, + FONS_ZERO_BOTTOMLEFT = 2, +}; + +enum FONSalign { + // Horizontal align + FONS_ALIGN_LEFT = 1<<0, // Default + FONS_ALIGN_CENTER = 1<<1, + FONS_ALIGN_RIGHT = 1<<2, + // Vertical align + FONS_ALIGN_TOP = 1<<3, + FONS_ALIGN_MIDDLE = 1<<4, + FONS_ALIGN_BOTTOM = 1<<5, + FONS_ALIGN_BASELINE = 1<<6, // Default +}; + +enum FONSerrorCode { + // Font atlas is full. + FONS_ATLAS_FULL = 1, + // Scratch memory used to render glyphs is full, requested size reported in 'val', you may need to bump up FONS_SCRATCH_BUF_SIZE. + FONS_SCRATCH_FULL = 2, + // Calls to fonsPushState has created too large stack, if you need deep state stack bump up FONS_MAX_STATES. + FONS_STATES_OVERFLOW = 3, + // Trying to pop too many states fonsPopState(). + FONS_STATES_UNDERFLOW = 4, +}; + +struct FONSparams { + int width, height; + unsigned char flags; + void* userPtr; + int (*renderCreate)(void* uptr, int width, int height); + int (*renderResize)(void* uptr, int width, int height); + void (*renderUpdate)(void* uptr, int* rect, const unsigned char* data); + void (*renderDraw)(void* uptr, const float* verts, const float* tcoords, const unsigned int* colors, int nverts); + void (*renderDelete)(void* uptr); +}; +typedef struct FONSparams FONSparams; + +struct FONSquad +{ + float x0,y0,s0,t0; + float x1,y1,s1,t1; +}; +typedef struct FONSquad FONSquad; + +struct FONStextIter { + float x, y, nextx, nexty, scale, spacing; + unsigned int codepoint; + short isize, iblur; + struct FONSfont* font; + int prevGlyphIndex; + const char* str; + const char* next; + const char* end; + unsigned int utf8state; +}; +typedef struct FONStextIter FONStextIter; + +typedef struct FONScontext FONScontext; + +// Constructor and destructor. +FONScontext* fonsCreateInternal(FONSparams* params); +void fonsDeleteInternal(FONScontext* s); + +void fonsSetErrorCallback(FONScontext* s, void (*callback)(void* uptr, int error, int val), void* uptr); +// Returns current atlas size. +void fonsGetAtlasSize(FONScontext* s, int* width, int* height); +// Expands the atlas size. +int fonsExpandAtlas(FONScontext* s, int width, int height); +// Resets the whole stash. +int fonsResetAtlas(FONScontext* stash, int width, int height); + +// Add fonts +int fonsAddFont(FONScontext* s, const char* name, const char* path); +int fonsAddFontMem(FONScontext* s, const char* name, const unsigned char* data, int ndata, int freeData); +int fonsGetFontByName(FONScontext* s, const char* name); + +// State handling +void fonsPushState(FONScontext* s); +void fonsPopState(FONScontext* s); +void fonsClearState(FONScontext* s); + +// State setting +void fonsSetSize(FONScontext* s, float size); +void fonsSetColor(FONScontext* s, unsigned int color); +void fonsSetSpacing(FONScontext* s, float spacing); +void fonsSetBlur(FONScontext* s, float blur); +void fonsSetAlign(FONScontext* s, int align); +void fonsSetFont(FONScontext* s, int font); + +// Draw text +float fonsDrawText(FONScontext* s, float x, float y, const char* string, const char* end); + +// Measure text +float fonsTextBounds(FONScontext* s, float x, float y, const char* string, const char* end, float* bounds); +void fonsLineBounds(FONScontext* s, float y, float* miny, float* maxy); +void fonsVertMetrics(FONScontext* s, float* ascender, float* descender, float* lineh); + +// Text iterator +int fonsTextIterInit(FONScontext* stash, FONStextIter* iter, float x, float y, const char* str, const char* end); +int fonsTextIterNext(FONScontext* stash, FONStextIter* iter, struct FONSquad* quad); + +// Pull texture changes +const unsigned char* fonsGetTextureData(FONScontext* stash, int* width, int* height); +int fonsValidateTexture(FONScontext* s, int* dirty); + +// Draws the stash texture for debugging +void fonsDrawDebug(FONScontext* s, float x, float y); + +#endif // FONTSTASH_H + + +#ifdef FONTSTASH_IMPLEMENTATION + +#define FONS_NOTUSED(v) (void)sizeof(v) + +#ifdef FONS_USE_FREETYPE + +#include +#include FT_FREETYPE_H +#include FT_ADVANCES_H +#include + +struct FONSttFontImpl { + FT_Face font; +}; +typedef struct FONSttFontImpl FONSttFontImpl; + +static FT_Library ftLibrary; + +int fons__tt_init(FONScontext *context) +{ + FT_Error ftError; + FONS_NOTUSED(context); + ftError = FT_Init_FreeType(&ftLibrary); + return ftError == 0; +} + +int fons__tt_loadFont(FONScontext *context, FONSttFontImpl *font, const unsigned char *data, int dataSize) +{ + FT_Error ftError; + FONS_NOTUSED(context); + + //font->font.userdata = stash; + ftError = FT_New_Memory_Face(ftLibrary, (const FT_Byte*)data, dataSize, 0, &font->font); + return ftError == 0; +} + +void fons__tt_getFontVMetrics(FONSttFontImpl *font, int *ascent, int *descent, int *lineGap) +{ + *ascent = font->font->ascender; + *descent = font->font->descender; + *lineGap = font->font->height - (*ascent - *descent); +} + +float fons__tt_getPixelHeightScale(FONSttFontImpl *font, float size) +{ + return size / (font->font->ascender - font->font->descender); +} + +int fons__tt_getGlyphIndex(FONSttFontImpl *font, int codepoint) +{ + return FT_Get_Char_Index(font->font, codepoint); +} + +int fons__tt_buildGlyphBitmap(FONSttFontImpl *font, int glyph, float size, float scale, + int *advance, int *lsb, int *x0, int *y0, int *x1, int *y1) +{ + FT_Error ftError; + FT_GlyphSlot ftGlyph; + FONS_NOTUSED(scale); + + ftError = FT_Set_Pixel_Sizes(font->font, 0, (FT_UInt)(size * (float)font->font->units_per_EM / (float)(font->font->ascender - font->font->descender))); + if (ftError) return 0; + ftError = FT_Load_Glyph(font->font, glyph, FT_LOAD_RENDER); + if (ftError) return 0; + ftError = FT_Get_Advance(font->font, glyph, FT_LOAD_NO_SCALE, (FT_Fixed*)advance); + if (ftError) return 0; + ftGlyph = font->font->glyph; + *lsb = ftGlyph->metrics.horiBearingX; + *x0 = ftGlyph->bitmap_left; + *x1 = *x0 + ftGlyph->bitmap.width; + *y0 = -ftGlyph->bitmap_top; + *y1 = *y0 + ftGlyph->bitmap.rows; + return 1; +} + +void fons__tt_renderGlyphBitmap(FONSttFontImpl *font, unsigned char *output, int outWidth, int outHeight, int outStride, + float scaleX, float scaleY, int glyph) +{ + FT_GlyphSlot ftGlyph = font->font->glyph; + int ftGlyphOffset = 0; + int x, y; + FONS_NOTUSED(outWidth); + FONS_NOTUSED(outHeight); + FONS_NOTUSED(scaleX); + FONS_NOTUSED(scaleY); + FONS_NOTUSED(glyph); // glyph has already been loaded by fons__tt_buildGlyphBitmap + + for ( y = 0; y < ftGlyph->bitmap.rows; y++ ) { + for ( x = 0; x < ftGlyph->bitmap.width; x++ ) { + output[(y * outStride) + x] = ftGlyph->bitmap.buffer[ftGlyphOffset++]; + } + } +} + +int fons__tt_getGlyphKernAdvance(FONSttFontImpl *font, int glyph1, int glyph2) +{ + FT_Vector ftKerning; + FT_Get_Kerning(font->font, glyph1, glyph2, FT_KERNING_DEFAULT, &ftKerning); + return ftKerning.x; +} + +#else + +#define STB_TRUETYPE_IMPLEMENTATION +static void* fons__tmpalloc(size_t size, void* up); +static void fons__tmpfree(void* ptr, void* up); +#define STBTT_malloc(x,u) fons__tmpalloc(x,u) +#define STBTT_free(x,u) fons__tmpfree(x,u) +#include "stb_truetype.h" + +struct FONSttFontImpl { + stbtt_fontinfo font; +}; +typedef struct FONSttFontImpl FONSttFontImpl; + +int fons__tt_init(FONScontext *context) +{ + FONS_NOTUSED(context); + return 1; +} + +int fons__tt_loadFont(FONScontext *context, FONSttFontImpl *font, const unsigned char *data, int dataSize) +{ + int stbError; + FONS_NOTUSED(dataSize); + + font->font.userdata = context; + stbError = stbtt_InitFont(&font->font, data, 0); + return stbError; +} + +void fons__tt_getFontVMetrics(FONSttFontImpl *font, int *ascent, int *descent, int *lineGap) +{ + stbtt_GetFontVMetrics(&font->font, ascent, descent, lineGap); +} + +float fons__tt_getPixelHeightScale(FONSttFontImpl *font, float size) +{ + return stbtt_ScaleForPixelHeight(&font->font, size); +} + +int fons__tt_getGlyphIndex(FONSttFontImpl *font, int codepoint) +{ + return stbtt_FindGlyphIndex(&font->font, codepoint); +} + +int fons__tt_buildGlyphBitmap(FONSttFontImpl *font, int glyph, float size, float scale, + int *advance, int *lsb, int *x0, int *y0, int *x1, int *y1) +{ + FONS_NOTUSED(size); + stbtt_GetGlyphHMetrics(&font->font, glyph, advance, lsb); + stbtt_GetGlyphBitmapBox(&font->font, glyph, scale, scale, x0, y0, x1, y1); + return 1; +} + +void fons__tt_renderGlyphBitmap(FONSttFontImpl *font, unsigned char *output, int outWidth, int outHeight, int outStride, + float scaleX, float scaleY, int glyph) +{ + stbtt_MakeGlyphBitmap(&font->font, output, outWidth, outHeight, outStride, scaleX, scaleY, glyph); +} + +int fons__tt_getGlyphKernAdvance(FONSttFontImpl *font, int glyph1, int glyph2) +{ + return stbtt_GetGlyphKernAdvance(&font->font, glyph1, glyph2); +} + +#endif + +#ifndef FONS_SCRATCH_BUF_SIZE +# define FONS_SCRATCH_BUF_SIZE 16000 +#endif +#ifndef FONS_HASH_LUT_SIZE +# define FONS_HASH_LUT_SIZE 256 +#endif +#ifndef FONS_INIT_FONTS +# define FONS_INIT_FONTS 4 +#endif +#ifndef FONS_INIT_GLYPHS +# define FONS_INIT_GLYPHS 256 +#endif +#ifndef FONS_INIT_ATLAS_NODES +# define FONS_INIT_ATLAS_NODES 256 +#endif +#ifndef FONS_VERTEX_COUNT +# define FONS_VERTEX_COUNT 1024 +#endif +#ifndef FONS_MAX_STATES +# define FONS_MAX_STATES 20 +#endif + +static unsigned int fons__hashint(unsigned int a) +{ + a += ~(a<<15); + a ^= (a>>10); + a += (a<<3); + a ^= (a>>6); + a += ~(a<<11); + a ^= (a>>16); + return a; +} + +static int fons__mini(int a, int b) +{ + return a < b ? a : b; +} + +static int fons__maxi(int a, int b) +{ + return a > b ? a : b; +} + +struct FONSglyph +{ + unsigned int codepoint; + int index; + int next; + short size, blur; + short x0,y0,x1,y1; + short xadv,xoff,yoff; +}; +typedef struct FONSglyph FONSglyph; + +struct FONSfont +{ + FONSttFontImpl font; + char name[64]; + const unsigned char* data; + int dataSize; + unsigned char freeData; + float ascender; + float descender; + float lineh; + FONSglyph* glyphs; + int cglyphs; + int nglyphs; + int lut[FONS_HASH_LUT_SIZE]; +}; +typedef struct FONSfont FONSfont; + +struct FONSstate +{ + int font; + int align; + float size; + unsigned int color; + float blur; + float spacing; +}; +typedef struct FONSstate FONSstate; + +struct FONSatlasNode { + short x, y, width; +}; +typedef struct FONSatlasNode FONSatlasNode; + +struct FONSatlas +{ + int width, height; + FONSatlasNode* nodes; + int nnodes; + int cnodes; +}; +typedef struct FONSatlas FONSatlas; + +struct FONScontext +{ + FONSparams params; + float itw,ith; + unsigned char* texData; + int dirtyRect[4]; + FONSfont** fonts; + FONSatlas* atlas; + int cfonts; + int nfonts; + float verts[FONS_VERTEX_COUNT*2]; + float tcoords[FONS_VERTEX_COUNT*2]; + unsigned int colors[FONS_VERTEX_COUNT]; + int nverts; + unsigned char* scratch; + int nscratch; + FONSstate states[FONS_MAX_STATES]; + int nstates; + void (*handleError)(void* uptr, int error, int val); + void* errorUptr; +}; + +static void* fons__tmpalloc(size_t size, void* up) +{ + unsigned char* ptr; + FONScontext* stash = (FONScontext*)up; + + // 16-byte align the returned pointer + size = (size + 0xf) & ~0xf; + + if (stash->nscratch+(int)size > FONS_SCRATCH_BUF_SIZE) { + if (stash->handleError) + stash->handleError(stash->errorUptr, FONS_SCRATCH_FULL, stash->nscratch+(int)size); + return NULL; + } + ptr = stash->scratch + stash->nscratch; + stash->nscratch += (int)size; + return ptr; +} + +static void fons__tmpfree(void* ptr, void* up) +{ + (void)ptr; + (void)up; + // empty +} + +// Copyright (c) 2008-2010 Bjoern Hoehrmann +// See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. + +#define FONS_UTF8_ACCEPT 0 +#define FONS_UTF8_REJECT 12 + +static unsigned int fons__decutf8(unsigned int* state, unsigned int* codep, unsigned int byte) +{ + static const unsigned char utf8d[] = { + // The first part of the table maps bytes to character classes that + // to reduce the size of the transition table and create bitmasks. + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8, + + // The second part is a transition table that maps a combination + // of a state of the automaton and a character class to a state. + 0,12,24,36,60,96,84,12,12,12,48,72, 12,12,12,12,12,12,12,12,12,12,12,12, + 12, 0,12,12,12,12,12, 0,12, 0,12,12, 12,24,12,12,12,12,12,24,12,24,12,12, + 12,12,12,12,12,12,12,24,12,12,12,12, 12,24,12,12,12,12,12,12,12,24,12,12, + 12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12, + 12,36,12,12,12,12,12,12,12,12,12,12, + }; + + unsigned int type = utf8d[byte]; + + *codep = (*state != FONS_UTF8_ACCEPT) ? + (byte & 0x3fu) | (*codep << 6) : + (0xff >> type) & (byte); + + *state = utf8d[256 + *state + type]; + return *state; +} + +// Atlas based on Skyline Bin Packer by Jukka Jylänki + +static void fons__deleteAtlas(FONSatlas* atlas) +{ + if (atlas == NULL) return; + if (atlas->nodes != NULL) free(atlas->nodes); + free(atlas); +} + +static FONSatlas* fons__allocAtlas(int w, int h, int nnodes) +{ + FONSatlas* atlas = NULL; + + // Allocate memory for the font stash. + atlas = (FONSatlas*)malloc(sizeof(FONSatlas)); + if (atlas == NULL) goto error; + memset(atlas, 0, sizeof(FONSatlas)); + + atlas->width = w; + atlas->height = h; + + // Allocate space for skyline nodes + atlas->nodes = (FONSatlasNode*)malloc(sizeof(FONSatlasNode) * nnodes); + if (atlas->nodes == NULL) goto error; + memset(atlas->nodes, 0, sizeof(FONSatlasNode) * nnodes); + atlas->nnodes = 0; + atlas->cnodes = nnodes; + + // Init root node. + atlas->nodes[0].x = 0; + atlas->nodes[0].y = 0; + atlas->nodes[0].width = (short)w; + atlas->nnodes++; + + return atlas; + +error: + if (atlas) fons__deleteAtlas(atlas); + return NULL; +} + +static int fons__atlasInsertNode(FONSatlas* atlas, int idx, int x, int y, int w) +{ + int i; + // Insert node + if (atlas->nnodes+1 > atlas->cnodes) { + atlas->cnodes = atlas->cnodes == 0 ? 8 : atlas->cnodes * 2; + atlas->nodes = (FONSatlasNode*)realloc(atlas->nodes, sizeof(FONSatlasNode) * atlas->cnodes); + if (atlas->nodes == NULL) + return 0; + } + for (i = atlas->nnodes; i > idx; i--) + atlas->nodes[i] = atlas->nodes[i-1]; + atlas->nodes[idx].x = (short)x; + atlas->nodes[idx].y = (short)y; + atlas->nodes[idx].width = (short)w; + atlas->nnodes++; + + return 1; +} + +static void fons__atlasRemoveNode(FONSatlas* atlas, int idx) +{ + int i; + if (atlas->nnodes == 0) return; + for (i = idx; i < atlas->nnodes-1; i++) + atlas->nodes[i] = atlas->nodes[i+1]; + atlas->nnodes--; +} + +static void fons__atlasExpand(FONSatlas* atlas, int w, int h) +{ + // Insert node for empty space + if (w > atlas->width) + fons__atlasInsertNode(atlas, atlas->nnodes, atlas->width, 0, w - atlas->width); + atlas->width = w; + atlas->height = h; +} + +static void fons__atlasReset(FONSatlas* atlas, int w, int h) +{ + atlas->width = w; + atlas->height = h; + atlas->nnodes = 0; + + // Init root node. + atlas->nodes[0].x = 0; + atlas->nodes[0].y = 0; + atlas->nodes[0].width = (short)w; + atlas->nnodes++; +} + +static int fons__atlasAddSkylineLevel(FONSatlas* atlas, int idx, int x, int y, int w, int h) +{ + int i; + + // Insert new node + if (fons__atlasInsertNode(atlas, idx, x, y+h, w) == 0) + return 0; + + // Delete skyline segments that fall under the shadow of the new segment. + for (i = idx+1; i < atlas->nnodes; i++) { + if (atlas->nodes[i].x < atlas->nodes[i-1].x + atlas->nodes[i-1].width) { + int shrink = atlas->nodes[i-1].x + atlas->nodes[i-1].width - atlas->nodes[i].x; + atlas->nodes[i].x += (short)shrink; + atlas->nodes[i].width -= (short)shrink; + if (atlas->nodes[i].width <= 0) { + fons__atlasRemoveNode(atlas, i); + i--; + } else { + break; + } + } else { + break; + } + } + + // Merge same height skyline segments that are next to each other. + for (i = 0; i < atlas->nnodes-1; i++) { + if (atlas->nodes[i].y == atlas->nodes[i+1].y) { + atlas->nodes[i].width += atlas->nodes[i+1].width; + fons__atlasRemoveNode(atlas, i+1); + i--; + } + } + + return 1; +} + +static int fons__atlasRectFits(FONSatlas* atlas, int i, int w, int h) +{ + // Checks if there is enough space at the location of skyline span 'i', + // and return the max height of all skyline spans under that at that location, + // (think tetris block being dropped at that position). Or -1 if no space found. + int x = atlas->nodes[i].x; + int y = atlas->nodes[i].y; + int spaceLeft; + if (x + w > atlas->width) + return -1; + spaceLeft = w; + while (spaceLeft > 0) { + if (i == atlas->nnodes) return -1; + y = fons__maxi(y, atlas->nodes[i].y); + if (y + h > atlas->height) return -1; + spaceLeft -= atlas->nodes[i].width; + ++i; + } + return y; +} + +static int fons__atlasAddRect(FONSatlas* atlas, int rw, int rh, int* rx, int* ry) +{ + int besth = atlas->height, bestw = atlas->width, besti = -1; + int bestx = -1, besty = -1, i; + + // Bottom left fit heuristic. + for (i = 0; i < atlas->nnodes; i++) { + int y = fons__atlasRectFits(atlas, i, rw, rh); + if (y != -1) { + if (y + rh < besth || (y + rh == besth && atlas->nodes[i].width < bestw)) { + besti = i; + bestw = atlas->nodes[i].width; + besth = y + rh; + bestx = atlas->nodes[i].x; + besty = y; + } + } + } + + if (besti == -1) + return 0; + + // Perform the actual packing. + if (fons__atlasAddSkylineLevel(atlas, besti, bestx, besty, rw, rh) == 0) + return 0; + + *rx = bestx; + *ry = besty; + + return 1; +} + +static void fons__addWhiteRect(FONScontext* stash, int w, int h) +{ + int x, y, gx, gy; + unsigned char* dst; + if (fons__atlasAddRect(stash->atlas, w, h, &gx, &gy) == 0) + return; + + // Rasterize + dst = &stash->texData[gx + gy * stash->params.width]; + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) + dst[x] = 0xff; + dst += stash->params.width; + } + + stash->dirtyRect[0] = fons__mini(stash->dirtyRect[0], gx); + stash->dirtyRect[1] = fons__mini(stash->dirtyRect[1], gy); + stash->dirtyRect[2] = fons__maxi(stash->dirtyRect[2], gx+w); + stash->dirtyRect[3] = fons__maxi(stash->dirtyRect[3], gy+h); +} + +FONScontext* fonsCreateInternal(FONSparams* params) +{ + FONScontext* stash = NULL; + + // Allocate memory for the font stash. + stash = (FONScontext*)malloc(sizeof(FONScontext)); + if (stash == NULL) goto error; + memset(stash, 0, sizeof(FONScontext)); + + stash->params = *params; + + // Allocate scratch buffer. + stash->scratch = (unsigned char*)malloc(FONS_SCRATCH_BUF_SIZE); + if (stash->scratch == NULL) goto error; + + // Initialize implementation library + if (!fons__tt_init(stash)) goto error; + + if (stash->params.renderCreate != NULL) { + if (stash->params.renderCreate(stash->params.userPtr, stash->params.width, stash->params.height) == 0) + goto error; + } + + stash->atlas = fons__allocAtlas(stash->params.width, stash->params.height, FONS_INIT_ATLAS_NODES); + if (stash->atlas == NULL) goto error; + + // Allocate space for fonts. + stash->fonts = (FONSfont**)malloc(sizeof(FONSfont*) * FONS_INIT_FONTS); + if (stash->fonts == NULL) goto error; + memset(stash->fonts, 0, sizeof(FONSfont*) * FONS_INIT_FONTS); + stash->cfonts = FONS_INIT_FONTS; + stash->nfonts = 0; + + // Create texture for the cache. + stash->itw = 1.0f/stash->params.width; + stash->ith = 1.0f/stash->params.height; + stash->texData = (unsigned char*)malloc(stash->params.width * stash->params.height); + if (stash->texData == NULL) goto error; + memset(stash->texData, 0, stash->params.width * stash->params.height); + + stash->dirtyRect[0] = stash->params.width; + stash->dirtyRect[1] = stash->params.height; + stash->dirtyRect[2] = 0; + stash->dirtyRect[3] = 0; + + // Add white rect at 0,0 for debug drawing. + fons__addWhiteRect(stash, 2,2); + + fonsPushState(stash); + fonsClearState(stash); + + return stash; + +error: + fonsDeleteInternal(stash); + return NULL; +} + +static FONSstate* fons__getState(FONScontext* stash) +{ + return &stash->states[stash->nstates-1]; +} + +void fonsSetSize(FONScontext* stash, float size) +{ + fons__getState(stash)->size = size; +} + +void fonsSetColor(FONScontext* stash, unsigned int color) +{ + fons__getState(stash)->color = color; +} + +void fonsSetSpacing(FONScontext* stash, float spacing) +{ + fons__getState(stash)->spacing = spacing; +} + +void fonsSetBlur(FONScontext* stash, float blur) +{ + fons__getState(stash)->blur = blur; +} + +void fonsSetAlign(FONScontext* stash, int align) +{ + fons__getState(stash)->align = align; +} + +void fonsSetFont(FONScontext* stash, int font) +{ + fons__getState(stash)->font = font; +} + +void fonsPushState(FONScontext* stash) +{ + if (stash->nstates >= FONS_MAX_STATES) { + if (stash->handleError) + stash->handleError(stash->errorUptr, FONS_STATES_OVERFLOW, 0); + return; + } + if (stash->nstates > 0) + memcpy(&stash->states[stash->nstates], &stash->states[stash->nstates-1], sizeof(FONSstate)); + stash->nstates++; +} + +void fonsPopState(FONScontext* stash) +{ + if (stash->nstates <= 1) { + if (stash->handleError) + stash->handleError(stash->errorUptr, FONS_STATES_UNDERFLOW, 0); + return; + } + stash->nstates--; +} + +void fonsClearState(FONScontext* stash) +{ + FONSstate* state = fons__getState(stash); + state->size = 12.0f; + state->color = 0xffffffff; + state->font = 0; + state->blur = 0; + state->spacing = 0; + state->align = FONS_ALIGN_LEFT | FONS_ALIGN_BASELINE; +} + +static void fons__freeFont(FONSfont* font) +{ + if (font == NULL) return; + if (font->glyphs) free(font->glyphs); + if (font->freeData && font->data) free((void*)font->data); + free(font); +} + +static int fons__allocFont(FONScontext* stash) +{ + FONSfont* font = NULL; + if (stash->nfonts+1 > stash->cfonts) { + stash->cfonts = stash->cfonts == 0 ? 8 : stash->cfonts * 2; + stash->fonts = (FONSfont**)realloc(stash->fonts, sizeof(FONSfont*) * stash->cfonts); + if (stash->fonts == NULL) + return -1; + } + font = (FONSfont*)malloc(sizeof(FONSfont)); + if (font == NULL) goto error; + memset(font, 0, sizeof(FONSfont)); + + font->glyphs = (FONSglyph*)malloc(sizeof(FONSglyph) * FONS_INIT_GLYPHS); + if (font->glyphs == NULL) goto error; + font->cglyphs = FONS_INIT_GLYPHS; + font->nglyphs = 0; + + stash->fonts[stash->nfonts++] = font; + return stash->nfonts-1; + +error: + fons__freeFont(font); + + return FONS_INVALID; +} + +int fonsAddFont(FONScontext* stash, const char* name, const char* path) +{ + FILE* fp = 0; + int dataSize = 0; + unsigned char* data = NULL; + size_t ignore; + + // Read in the font data. + fp = fopen(path, "rb"); + if (fp == NULL) goto error; + fseek(fp,0,SEEK_END); + dataSize = (int)ftell(fp); + fseek(fp,0,SEEK_SET); + data = (unsigned char*)malloc(dataSize); + if (data == NULL) goto error; + ignore = fread(data, 1, dataSize, fp); + fclose(fp); + fp = 0; + + return fonsAddFontMem(stash, name, data, dataSize, 1); + +error: + if (data) free(data); + if (fp) fclose(fp); + return FONS_INVALID; + + FONS_NOTUSED(ignore); +} + +int fonsAddFontMem(FONScontext* stash, const char* name, const unsigned char* data, int dataSize, int freeData) +{ + int i, ascent, descent, fh, lineGap; + FONSfont* font; + + int idx = fons__allocFont(stash); + if (idx == FONS_INVALID) + return FONS_INVALID; + + font = stash->fonts[idx]; + + strncpy(font->name, name, sizeof(font->name)); + font->name[sizeof(font->name)-1] = '\0'; + + // Init hash lookup. + for (i = 0; i < FONS_HASH_LUT_SIZE; ++i) + font->lut[i] = -1; + + // Read in the font data. + font->dataSize = dataSize; + font->data = data; + font->freeData = (unsigned char)freeData; + + // Init font + stash->nscratch = 0; + if (!fons__tt_loadFont(stash, &font->font, data, dataSize)) goto error; + + // Store normalized line height. The real line height is got + // by multiplying the lineh by font size. + fons__tt_getFontVMetrics( &font->font, &ascent, &descent, &lineGap); + fh = ascent - descent; + font->ascender = (float)ascent / (float)fh; + font->descender = (float)descent / (float)fh; + font->lineh = (float)(fh + lineGap) / (float)fh; + + return idx; + +error: + fons__freeFont(font); + stash->nfonts--; + return FONS_INVALID; +} + +int fonsGetFontByName(FONScontext* s, const char* name) +{ + int i; + for (i = 0; i < s->nfonts; i++) { + if (strcmp(s->fonts[i]->name, name) == 0) + return i; + } + return FONS_INVALID; +} + + +static FONSglyph* fons__allocGlyph(FONSfont* font) +{ + if (font->nglyphs+1 > font->cglyphs) { + font->cglyphs = font->cglyphs == 0 ? 8 : font->cglyphs * 2; + font->glyphs = (FONSglyph*)realloc(font->glyphs, sizeof(FONSglyph) * font->cglyphs); + if (font->glyphs == NULL) return NULL; + } + font->nglyphs++; + return &font->glyphs[font->nglyphs-1]; +} + + +// Based on Exponential blur, Jani Huhtanen, 2006 + +#define APREC 16 +#define ZPREC 7 + +static void fons__blurCols(unsigned char* dst, int w, int h, int dstStride, int alpha) +{ + int x, y; + for (y = 0; y < h; y++) { + int z = 0; // force zero border + for (x = 1; x < w; x++) { + z += (alpha * (((int)(dst[x]) << ZPREC) - z)) >> APREC; + dst[x] = (unsigned char)(z >> ZPREC); + } + dst[w-1] = 0; // force zero border + z = 0; + for (x = w-2; x >= 0; x--) { + z += (alpha * (((int)(dst[x]) << ZPREC) - z)) >> APREC; + dst[x] = (unsigned char)(z >> ZPREC); + } + dst[0] = 0; // force zero border + dst += dstStride; + } +} + +static void fons__blurRows(unsigned char* dst, int w, int h, int dstStride, int alpha) +{ + int x, y; + for (x = 0; x < w; x++) { + int z = 0; // force zero border + for (y = dstStride; y < h*dstStride; y += dstStride) { + z += (alpha * (((int)(dst[y]) << ZPREC) - z)) >> APREC; + dst[y] = (unsigned char)(z >> ZPREC); + } + dst[(h-1)*dstStride] = 0; // force zero border + z = 0; + for (y = (h-2)*dstStride; y >= 0; y -= dstStride) { + z += (alpha * (((int)(dst[y]) << ZPREC) - z)) >> APREC; + dst[y] = (unsigned char)(z >> ZPREC); + } + dst[0] = 0; // force zero border + dst++; + } +} + + +static void fons__blur(FONScontext* stash, unsigned char* dst, int w, int h, int dstStride, int blur) +{ + int alpha; + float sigma; + (void)stash; + + if (blur < 1) + return; + // Calculate the alpha such that 90% of the kernel is within the radius. (Kernel extends to infinity) + sigma = (float)blur * 0.57735f; // 1 / sqrt(3) + alpha = (int)((1< 20) iblur = 20; + pad = iblur+2; + + // Reset allocator. + stash->nscratch = 0; + + // Find code point and size. + h = fons__hashint(codepoint) & (FONS_HASH_LUT_SIZE-1); + i = font->lut[h]; + while (i != -1) { + if (font->glyphs[i].codepoint == codepoint && font->glyphs[i].size == isize && font->glyphs[i].blur == iblur) + return &font->glyphs[i]; + i = font->glyphs[i].next; + } + + // Could not find glyph, create it. + scale = fons__tt_getPixelHeightScale(&font->font, size); + g = fons__tt_getGlyphIndex(&font->font, codepoint); + fons__tt_buildGlyphBitmap(&font->font, g, size, scale, &advance, &lsb, &x0, &y0, &x1, &y1); + gw = x1-x0 + pad*2; + gh = y1-y0 + pad*2; + + // Find free spot for the rect in the atlas + added = fons__atlasAddRect(stash->atlas, gw, gh, &gx, &gy); + if (added == 0 && stash->handleError != NULL) { + // Atlas is full, let the user to resize the atlas (or not), and try again. + stash->handleError(stash->errorUptr, FONS_ATLAS_FULL, 0); + added = fons__atlasAddRect(stash->atlas, gw, gh, &gx, &gy); + } + if (added == 0) return NULL; + + // Init glyph. + glyph = fons__allocGlyph(font); + glyph->codepoint = codepoint; + glyph->size = isize; + glyph->blur = iblur; + glyph->index = g; + glyph->x0 = (short)gx; + glyph->y0 = (short)gy; + glyph->x1 = (short)(glyph->x0+gw); + glyph->y1 = (short)(glyph->y0+gh); + glyph->xadv = (short)(scale * advance * 10.0f); + glyph->xoff = (short)(x0 - pad); + glyph->yoff = (short)(y0 - pad); + glyph->next = 0; + + // Insert char to hash lookup. + glyph->next = font->lut[h]; + font->lut[h] = font->nglyphs-1; + + // Rasterize + dst = &stash->texData[(glyph->x0+pad) + (glyph->y0+pad) * stash->params.width]; + fons__tt_renderGlyphBitmap(&font->font, dst, gw-pad*2,gh-pad*2, stash->params.width, scale,scale, g); + + // Make sure there is one pixel empty border. + dst = &stash->texData[glyph->x0 + glyph->y0 * stash->params.width]; + for (y = 0; y < gh; y++) { + dst[y*stash->params.width] = 0; + dst[gw-1 + y*stash->params.width] = 0; + } + for (x = 0; x < gw; x++) { + dst[x] = 0; + dst[x + (gh-1)*stash->params.width] = 0; + } + + // Debug code to color the glyph background +/* unsigned char* fdst = &stash->texData[glyph->x0 + glyph->y0 * stash->params.width]; + for (y = 0; y < gh; y++) { + for (x = 0; x < gw; x++) { + int a = (int)fdst[x+y*stash->params.width] + 20; + if (a > 255) a = 255; + fdst[x+y*stash->params.width] = a; + } + }*/ + + // Blur + if (iblur > 0) { + stash->nscratch = 0; + bdst = &stash->texData[glyph->x0 + glyph->y0 * stash->params.width]; + fons__blur(stash, bdst, gw,gh, stash->params.width, iblur); + } + + stash->dirtyRect[0] = fons__mini(stash->dirtyRect[0], glyph->x0); + stash->dirtyRect[1] = fons__mini(stash->dirtyRect[1], glyph->y0); + stash->dirtyRect[2] = fons__maxi(stash->dirtyRect[2], glyph->x1); + stash->dirtyRect[3] = fons__maxi(stash->dirtyRect[3], glyph->y1); + + return glyph; +} + +static void fons__getQuad(FONScontext* stash, FONSfont* font, + int prevGlyphIndex, FONSglyph* glyph, + float scale, float spacing, float* x, float* y, FONSquad* q) +{ + float rx,ry,xoff,yoff,x0,y0,x1,y1; + + if (prevGlyphIndex != -1) { + float adv = fons__tt_getGlyphKernAdvance(&font->font, prevGlyphIndex, glyph->index) * scale; + *x += (int)(adv + spacing + 0.5f); + } + + // Each glyph has 2px border to allow good interpolation, + // one pixel to prevent leaking, and one to allow good interpolation for rendering. + // Inset the texture region by one pixel for correct interpolation. + xoff = (short)(glyph->xoff+1); + yoff = (short)(glyph->yoff+1); + x0 = (float)(glyph->x0+1); + y0 = (float)(glyph->y0+1); + x1 = (float)(glyph->x1-1); + y1 = (float)(glyph->y1-1); + + if (stash->params.flags & FONS_ZERO_TOPLEFT) { + rx = (float)(int)(*x + xoff); + ry = (float)(int)(*y + yoff); + + q->x0 = rx; + q->y0 = ry; + q->x1 = rx + x1 - x0; + q->y1 = ry + y1 - y0; + + q->s0 = x0 * stash->itw; + q->t0 = y0 * stash->ith; + q->s1 = x1 * stash->itw; + q->t1 = y1 * stash->ith; + } else { + rx = (float)(int)(*x + xoff); + ry = (float)(int)(*y - yoff); + + q->x0 = rx; + q->y0 = ry; + q->x1 = rx + x1 - x0; + q->y1 = ry - y1 + y0; + + q->s0 = x0 * stash->itw; + q->t0 = y0 * stash->ith; + q->s1 = x1 * stash->itw; + q->t1 = y1 * stash->ith; + } + + *x += (int)(glyph->xadv / 10.0f + 0.5f); +} + +static void fons__flush(FONScontext* stash) +{ + // Flush texture + if (stash->dirtyRect[0] < stash->dirtyRect[2] && stash->dirtyRect[1] < stash->dirtyRect[3]) { + if (stash->params.renderUpdate != NULL) + stash->params.renderUpdate(stash->params.userPtr, stash->dirtyRect, stash->texData); + // Reset dirty rect + stash->dirtyRect[0] = stash->params.width; + stash->dirtyRect[1] = stash->params.height; + stash->dirtyRect[2] = 0; + stash->dirtyRect[3] = 0; + } + + // Flush triangles + if (stash->nverts > 0) { + if (stash->params.renderDraw != NULL) + stash->params.renderDraw(stash->params.userPtr, stash->verts, stash->tcoords, stash->colors, stash->nverts); + stash->nverts = 0; + } +} + +static __inline void fons__vertex(FONScontext* stash, float x, float y, float s, float t, unsigned int c) +{ + stash->verts[stash->nverts*2+0] = x; + stash->verts[stash->nverts*2+1] = y; + stash->tcoords[stash->nverts*2+0] = s; + stash->tcoords[stash->nverts*2+1] = t; + stash->colors[stash->nverts] = c; + stash->nverts++; +} + +static float fons__getVertAlign(FONScontext* stash, FONSfont* font, int align, short isize) +{ + if (stash->params.flags & FONS_ZERO_TOPLEFT) { + if (align & FONS_ALIGN_TOP) { + return font->ascender * (float)isize/10.0f; + } else if (align & FONS_ALIGN_MIDDLE) { + return (font->ascender + font->descender) / 2.0f * (float)isize/10.0f; + } else if (align & FONS_ALIGN_BASELINE) { + return 0.0f; + } else if (align & FONS_ALIGN_BOTTOM) { + return font->descender * (float)isize/10.0f; + } + } else { + if (align & FONS_ALIGN_TOP) { + return -font->ascender * (float)isize/10.0f; + } else if (align & FONS_ALIGN_MIDDLE) { + return -(font->ascender + font->descender) / 2.0f * (float)isize/10.0f; + } else if (align & FONS_ALIGN_BASELINE) { + return 0.0f; + } else if (align & FONS_ALIGN_BOTTOM) { + return -font->descender * (float)isize/10.0f; + } + } + return 0.0; +} + +float fonsDrawText(FONScontext* stash, + float x, float y, + const char* str, const char* end) +{ + FONSstate* state = fons__getState(stash); + unsigned int codepoint; + unsigned int utf8state = 0; + FONSglyph* glyph = NULL; + FONSquad q; + int prevGlyphIndex = -1; + short isize = (short)(state->size*10.0f); + short iblur = (short)state->blur; + float scale; + FONSfont* font; + float width; + + if (stash == NULL) return x; + if (state->font < 0 || state->font >= stash->nfonts) return x; + font = stash->fonts[state->font]; + if (font->data == NULL) return x; + + scale = fons__tt_getPixelHeightScale(&font->font, (float)isize/10.0f); + + if (end == NULL) + end = str + strlen(str); + + // Align horizontally + if (state->align & FONS_ALIGN_LEFT) { + // empty + } else if (state->align & FONS_ALIGN_RIGHT) { + width = fonsTextBounds(stash, x,y, str, end, NULL); + x -= width; + } else if (state->align & FONS_ALIGN_CENTER) { + width = fonsTextBounds(stash, x,y, str, end, NULL); + x -= width * 0.5f; + } + // Align vertically. + y += fons__getVertAlign(stash, font, state->align, isize); + + for (; str != end; ++str) { + if (fons__decutf8(&utf8state, &codepoint, *(const unsigned char*)str)) + continue; + glyph = fons__getGlyph(stash, font, codepoint, isize, iblur); + if (glyph != NULL) { + fons__getQuad(stash, font, prevGlyphIndex, glyph, scale, state->spacing, &x, &y, &q); + + if (stash->nverts+6 > FONS_VERTEX_COUNT) + fons__flush(stash); + + fons__vertex(stash, q.x0, q.y0, q.s0, q.t0, state->color); + fons__vertex(stash, q.x1, q.y1, q.s1, q.t1, state->color); + fons__vertex(stash, q.x1, q.y0, q.s1, q.t0, state->color); + + fons__vertex(stash, q.x0, q.y0, q.s0, q.t0, state->color); + fons__vertex(stash, q.x0, q.y1, q.s0, q.t1, state->color); + fons__vertex(stash, q.x1, q.y1, q.s1, q.t1, state->color); + } + prevGlyphIndex = glyph != NULL ? glyph->index : -1; + } + fons__flush(stash); + + return x; +} + +int fonsTextIterInit(FONScontext* stash, FONStextIter* iter, + float x, float y, const char* str, const char* end) +{ + FONSstate* state = fons__getState(stash); + float width; + + memset(iter, 0, sizeof(*iter)); + + if (stash == NULL) return 0; + if (state->font < 0 || state->font >= stash->nfonts) return 0; + iter->font = stash->fonts[state->font]; + if (iter->font->data == NULL) return 0; + + iter->isize = (short)(state->size*10.0f); + iter->iblur = (short)state->blur; + iter->scale = fons__tt_getPixelHeightScale(&iter->font->font, (float)iter->isize/10.0f); + + // Align horizontally + if (state->align & FONS_ALIGN_LEFT) { + // empty + } else if (state->align & FONS_ALIGN_RIGHT) { + width = fonsTextBounds(stash, x,y, str, end, NULL); + x -= width; + } else if (state->align & FONS_ALIGN_CENTER) { + width = fonsTextBounds(stash, x,y, str, end, NULL); + x -= width * 0.5f; + } + // Align vertically. + y += fons__getVertAlign(stash, iter->font, state->align, iter->isize); + + if (end == NULL) + end = str + strlen(str); + + iter->x = iter->nextx = x; + iter->y = iter->nexty = y; + iter->spacing = state->spacing; + iter->str = str; + iter->next = str; + iter->end = end; + iter->codepoint = 0; + iter->prevGlyphIndex = -1; + + return 1; +} + +int fonsTextIterNext(FONScontext* stash, FONStextIter* iter, FONSquad* quad) +{ + FONSglyph* glyph = NULL; + const char* str = iter->next; + iter->str = iter->next; + + if (str == iter->end) + return 0; + + for (; str != iter->end; str++) { + if (fons__decutf8(&iter->utf8state, &iter->codepoint, *(const unsigned char*)str)) + continue; + str++; + // Get glyph and quad + iter->x = iter->nextx; + iter->y = iter->nexty; + glyph = fons__getGlyph(stash, iter->font, iter->codepoint, iter->isize, iter->iblur); + if (glyph != NULL) + fons__getQuad(stash, iter->font, iter->prevGlyphIndex, glyph, iter->scale, iter->spacing, &iter->nextx, &iter->nexty, quad); + iter->prevGlyphIndex = glyph != NULL ? glyph->index : -1; + break; + } + iter->next = str; + + return 1; +} + +void fonsDrawDebug(FONScontext* stash, float x, float y) +{ + int i; + int w = stash->params.width; + int h = stash->params.height; + float u = w == 0 ? 0 : (1.0f / w); + float v = h == 0 ? 0 : (1.0f / h); + + if (stash->nverts+6+6 > FONS_VERTEX_COUNT) + fons__flush(stash); + + // Draw background + fons__vertex(stash, x+0, y+0, u, v, 0x0fffffff); + fons__vertex(stash, x+w, y+h, u, v, 0x0fffffff); + fons__vertex(stash, x+w, y+0, u, v, 0x0fffffff); + + fons__vertex(stash, x+0, y+0, u, v, 0x0fffffff); + fons__vertex(stash, x+0, y+h, u, v, 0x0fffffff); + fons__vertex(stash, x+w, y+h, u, v, 0x0fffffff); + + // Draw texture + fons__vertex(stash, x+0, y+0, 0, 0, 0xffffffff); + fons__vertex(stash, x+w, y+h, 1, 1, 0xffffffff); + fons__vertex(stash, x+w, y+0, 1, 0, 0xffffffff); + + fons__vertex(stash, x+0, y+0, 0, 0, 0xffffffff); + fons__vertex(stash, x+0, y+h, 0, 1, 0xffffffff); + fons__vertex(stash, x+w, y+h, 1, 1, 0xffffffff); + + // Drawbug draw atlas + for (i = 0; i < stash->atlas->nnodes; i++) { + FONSatlasNode* n = &stash->atlas->nodes[i]; + + if (stash->nverts+6 > FONS_VERTEX_COUNT) + fons__flush(stash); + + fons__vertex(stash, x+n->x+0, y+n->y+0, u, v, 0xc00000ff); + fons__vertex(stash, x+n->x+n->width, y+n->y+1, u, v, 0xc00000ff); + fons__vertex(stash, x+n->x+n->width, y+n->y+0, u, v, 0xc00000ff); + + fons__vertex(stash, x+n->x+0, y+n->y+0, u, v, 0xc00000ff); + fons__vertex(stash, x+n->x+0, y+n->y+1, u, v, 0xc00000ff); + fons__vertex(stash, x+n->x+n->width, y+n->y+1, u, v, 0xc00000ff); + } + + fons__flush(stash); +} + +float fonsTextBounds(FONScontext* stash, + float x, float y, + const char* str, const char* end, + float* bounds) +{ + FONSstate* state = fons__getState(stash); + unsigned int codepoint; + unsigned int utf8state = 0; + FONSquad q; + FONSglyph* glyph = NULL; + int prevGlyphIndex = -1; + short isize = (short)(state->size*10.0f); + short iblur = (short)state->blur; + float scale; + FONSfont* font; + float startx, advance; + float minx, miny, maxx, maxy; + + if (stash == NULL) return 0; + if (state->font < 0 || state->font >= stash->nfonts) return 0; + font = stash->fonts[state->font]; + if (font->data == NULL) return 0; + + scale = fons__tt_getPixelHeightScale(&font->font, (float)isize/10.0f); + + // Align vertically. + y += fons__getVertAlign(stash, font, state->align, isize); + + minx = maxx = x; + miny = maxy = y; + startx = x; + + if (end == NULL) + end = str + strlen(str); + + for (; str != end; ++str) { + if (fons__decutf8(&utf8state, &codepoint, *(const unsigned char*)str)) + continue; + glyph = fons__getGlyph(stash, font, codepoint, isize, iblur); + if (glyph != NULL) { + fons__getQuad(stash, font, prevGlyphIndex, glyph, scale, state->spacing, &x, &y, &q); + if (q.x0 < minx) minx = q.x0; + if (q.x1 > maxx) maxx = q.x1; + if (stash->params.flags & FONS_ZERO_TOPLEFT) { + if (q.y0 < miny) miny = q.y0; + if (q.y1 > maxy) maxy = q.y1; + } else { + if (q.y1 < miny) miny = q.y1; + if (q.y0 > maxy) maxy = q.y0; + } + } + prevGlyphIndex = glyph != NULL ? glyph->index : -1; + } + + advance = x - startx; + + // Align horizontally + if (state->align & FONS_ALIGN_LEFT) { + // empty + } else if (state->align & FONS_ALIGN_RIGHT) { + minx -= advance; + maxx -= advance; + } else if (state->align & FONS_ALIGN_CENTER) { + minx -= advance * 0.5f; + maxx -= advance * 0.5f; + } + + if (bounds) { + bounds[0] = minx; + bounds[1] = miny; + bounds[2] = maxx; + bounds[3] = maxy; + } + + return advance; +} + +void fonsVertMetrics(FONScontext* stash, + float* ascender, float* descender, float* lineh) +{ + FONSfont* font; + FONSstate* state = fons__getState(stash); + short isize; + + if (stash == NULL) return; + if (state->font < 0 || state->font >= stash->nfonts) return; + font = stash->fonts[state->font]; + isize = (short)(state->size*10.0f); + if (font->data == NULL) return; + + if (ascender) + *ascender = font->ascender*isize/10.0f; + if (descender) + *descender = font->descender*isize/10.0f; + if (lineh) + *lineh = font->lineh*isize/10.0f; +} + +void fonsLineBounds(FONScontext* stash, float y, float* miny, float* maxy) +{ + FONSfont* font; + FONSstate* state = fons__getState(stash); + short isize; + + if (stash == NULL) return; + if (state->font < 0 || state->font >= stash->nfonts) return; + font = stash->fonts[state->font]; + isize = (short)(state->size*10.0f); + if (font->data == NULL) return; + + y += fons__getVertAlign(stash, font, state->align, isize); + + if (stash->params.flags & FONS_ZERO_TOPLEFT) { + *miny = y - font->ascender * (float)isize/10.0f; + *maxy = *miny + font->lineh*isize/10.0f; + } else { + *maxy = y + font->descender * (float)isize/10.0f; + *miny = *maxy - font->lineh*isize/10.0f; + } +} + +const unsigned char* fonsGetTextureData(FONScontext* stash, int* width, int* height) +{ + if (width != NULL) + *width = stash->params.width; + if (height != NULL) + *height = stash->params.height; + return stash->texData; +} + +int fonsValidateTexture(FONScontext* stash, int* dirty) +{ + if (stash->dirtyRect[0] < stash->dirtyRect[2] && stash->dirtyRect[1] < stash->dirtyRect[3]) { + dirty[0] = stash->dirtyRect[0]; + dirty[1] = stash->dirtyRect[1]; + dirty[2] = stash->dirtyRect[2]; + dirty[3] = stash->dirtyRect[3]; + // Reset dirty rect + stash->dirtyRect[0] = stash->params.width; + stash->dirtyRect[1] = stash->params.height; + stash->dirtyRect[2] = 0; + stash->dirtyRect[3] = 0; + return 1; + } + return 0; +} + +void fonsDeleteInternal(FONScontext* stash) +{ + int i; + if (stash == NULL) return; + + if (stash->params.renderDelete) + stash->params.renderDelete(stash->params.userPtr); + + for (i = 0; i < stash->nfonts; ++i) + fons__freeFont(stash->fonts[i]); + + if (stash->atlas) fons__deleteAtlas(stash->atlas); + if (stash->fonts) free(stash->fonts); + if (stash->texData) free(stash->texData); + if (stash->scratch) free(stash->scratch); + free(stash); +} + +void fonsSetErrorCallback(FONScontext* stash, void (*callback)(void* uptr, int error, int val), void* uptr) +{ + if (stash == NULL) return; + stash->handleError = callback; + stash->errorUptr = uptr; +} + +void fonsGetAtlasSize(FONScontext* stash, int* width, int* height) +{ + if (stash == NULL) return; + *width = stash->params.width; + *height = stash->params.height; +} + +int fonsExpandAtlas(FONScontext* stash, int width, int height) +{ + int i, maxy = 0; + unsigned char* data = NULL; + if (stash == NULL) return 0; + + width = fons__maxi(width, stash->params.width); + height = fons__maxi(height, stash->params.height); + + if (width == stash->params.width && height == stash->params.height) + return 1; + + // Flush pending glyphs. + fons__flush(stash); + + // Create new texture + if (stash->params.renderResize != NULL) { + if (stash->params.renderResize(stash->params.userPtr, width, height) == 0) + return 0; + } + // Copy old texture data over. + data = (unsigned char*)malloc(width * height); + if (data == NULL) + return 0; + for (i = 0; i < stash->params.height; i++) { + unsigned char* dst = &data[i*width]; + unsigned char* src = &stash->texData[i*stash->params.width]; + memcpy(dst, src, stash->params.width); + if (width > stash->params.width) + memset(dst+stash->params.width, 0, width - stash->params.width); + } + if (height > stash->params.height) + memset(&data[stash->params.height * width], 0, (height - stash->params.height) * width); + + free(stash->texData); + stash->texData = data; + + // Increase atlas size + fons__atlasExpand(stash->atlas, width, height); + + // Add existing data as dirty. + for (i = 0; i < stash->atlas->nnodes; i++) + maxy = fons__maxi(maxy, stash->atlas->nodes[i].y); + stash->dirtyRect[0] = 0; + stash->dirtyRect[1] = 0; + stash->dirtyRect[2] = stash->params.width; + stash->dirtyRect[3] = maxy; + + stash->params.width = width; + stash->params.height = height; + stash->itw = 1.0f/stash->params.width; + stash->ith = 1.0f/stash->params.height; + + return 1; +} + +int fonsResetAtlas(FONScontext* stash, int width, int height) +{ + int i, j; + if (stash == NULL) return 0; + + // Flush pending glyphs. + fons__flush(stash); + + // Create new texture + if (stash->params.renderResize != NULL) { + if (stash->params.renderResize(stash->params.userPtr, width, height) == 0) + return 0; + } + + // Reset atlas + fons__atlasReset(stash->atlas, width, height); + + // Clear texture data. + stash->texData = (unsigned char*)realloc(stash->texData, width * height); + if (stash->texData == NULL) return 0; + memset(stash->texData, 0, width * height); + + // Reset dirty rect + stash->dirtyRect[0] = width; + stash->dirtyRect[1] = height; + stash->dirtyRect[2] = 0; + stash->dirtyRect[3] = 0; + + // Reset cached glyphs + for (i = 0; i < stash->nfonts; i++) { + FONSfont* font = stash->fonts[i]; + font->nglyphs = 0; + for (j = 0; j < FONS_HASH_LUT_SIZE; j++) + font->lut[j] = -1; + } + + stash->params.width = width; + stash->params.height = height; + stash->itw = 1.0f/stash->params.width; + stash->ith = 1.0f/stash->params.height; + + // Add white rect at 0,0 for debug drawing. + fons__addWhiteRect(stash, 2,2); + + return 1; +} + + +#endif diff --git a/dpf/dgl/src/nanovg/nanovg.c b/dpf/dgl/src/nanovg/nanovg.c new file mode 100644 index 0000000..315be35 --- /dev/null +++ b/dpf/dgl/src/nanovg/nanovg.c @@ -0,0 +1,2752 @@ +// +// Copyright (c) 2013 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include +#include +#include "nanovg.h" +#define FONTSTASH_IMPLEMENTATION +#include "fontstash.h" +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" + +#ifdef _MSC_VER +#pragma warning(disable: 4100) // unreferenced formal parameter +#pragma warning(disable: 4127) // conditional expression is constant +#pragma warning(disable: 4204) // nonstandard extension used : non-constant aggregate initializer +#pragma warning(disable: 4706) // assignment within conditional expression +#endif + +#define NVG_INIT_FONTIMAGE_SIZE 512 +#define NVG_MAX_FONTIMAGE_SIZE 2048 +#define NVG_MAX_FONTIMAGES 4 + +#define NVG_INIT_COMMANDS_SIZE 256 +#define NVG_INIT_POINTS_SIZE 128 +#define NVG_INIT_PATHS_SIZE 16 +#define NVG_INIT_VERTS_SIZE 256 +#define NVG_MAX_STATES 32 + +#define NVG_KAPPA90 0.5522847493f // Length proportional to radius of a cubic bezier handle for 90deg arcs. + +#define NVG_COUNTOF(arr) (sizeof(arr) / sizeof(0[arr])) + + +enum NVGcommands { + NVG_MOVETO = 0, + NVG_LINETO = 1, + NVG_BEZIERTO = 2, + NVG_CLOSE = 3, + NVG_WINDING = 4, +}; + +enum NVGpointFlags +{ + NVG_PT_CORNER = 0x01, + NVG_PT_LEFT = 0x02, + NVG_PT_BEVEL = 0x04, + NVG_PR_INNERBEVEL = 0x08, +}; + +struct NVGstate { + NVGpaint fill; + NVGpaint stroke; + float strokeWidth; + float miterLimit; + int lineJoin; + int lineCap; + float alpha; + float xform[6]; + NVGscissor scissor; + float fontSize; + float letterSpacing; + float lineHeight; + float fontBlur; + int textAlign; + int fontId; +}; +typedef struct NVGstate NVGstate; + +struct NVGpoint { + float x,y; + float dx, dy; + float len; + float dmx, dmy; + unsigned char flags; +}; +typedef struct NVGpoint NVGpoint; + +struct NVGpathCache { + NVGpoint* points; + int npoints; + int cpoints; + NVGpath* paths; + int npaths; + int cpaths; + NVGvertex* verts; + int nverts; + int cverts; + float bounds[4]; +}; +typedef struct NVGpathCache NVGpathCache; + +struct NVGcontext { + NVGparams params; + float* commands; + int ccommands; + int ncommands; + float commandx, commandy; + NVGstate states[NVG_MAX_STATES]; + int nstates; + NVGpathCache* cache; + float tessTol; + float distTol; + float fringeWidth; + float devicePxRatio; + struct FONScontext* fs; + int fontImages[NVG_MAX_FONTIMAGES]; + int fontImageIdx; + int drawCallCount; + int fillTriCount; + int strokeTriCount; + int textTriCount; +}; + +static float nvg__sqrtf(float a) { return sqrtf(a); } +static float nvg__modf(float a, float b) { return fmodf(a, b); } +static float nvg__sinf(float a) { return sinf(a); } +static float nvg__cosf(float a) { return cosf(a); } +static float nvg__tanf(float a) { return tanf(a); } +static float nvg__atan2f(float a,float b) { return atan2f(a, b); } +static float nvg__acosf(float a) { return acosf(a); } + +static int nvg__mini(int a, int b) { return a < b ? a : b; } +static int nvg__maxi(int a, int b) { return a > b ? a : b; } +static int nvg__clampi(int a, int mn, int mx) { return a < mn ? mn : (a > mx ? mx : a); } +static float nvg__minf(float a, float b) { return a < b ? a : b; } +static float nvg__maxf(float a, float b) { return a > b ? a : b; } +static float nvg__absf(float a) { return a >= 0.0f ? a : -a; } +static float nvg__signf(float a) { return a >= 0.0f ? 1.0f : -1.0f; } +static float nvg__clampf(float a, float mn, float mx) { return a < mn ? mn : (a > mx ? mx : a); } +static float nvg__cross(float dx0, float dy0, float dx1, float dy1) { return dx1*dy0 - dx0*dy1; } + +static float nvg__normalize(float *x, float* y) +{ + float d = nvg__sqrtf((*x)*(*x) + (*y)*(*y)); + if (d > 1e-6f) { + float id = 1.0f / d; + *x *= id; + *y *= id; + } + return d; +} + + +static void nvg__deletePathCache(NVGpathCache* c) +{ + if (c == NULL) return; + if (c->points != NULL) free(c->points); + if (c->paths != NULL) free(c->paths); + if (c->verts != NULL) free(c->verts); + free(c); +} + +static NVGpathCache* nvg__allocPathCache(void) +{ + NVGpathCache* c = (NVGpathCache*)malloc(sizeof(NVGpathCache)); + if (c == NULL) goto error; + memset(c, 0, sizeof(NVGpathCache)); + + c->points = (NVGpoint*)malloc(sizeof(NVGpoint)*NVG_INIT_POINTS_SIZE); + if (!c->points) goto error; + c->npoints = 0; + c->cpoints = NVG_INIT_POINTS_SIZE; + + c->paths = (NVGpath*)malloc(sizeof(NVGpath)*NVG_INIT_PATHS_SIZE); + if (!c->paths) goto error; + c->npaths = 0; + c->cpaths = NVG_INIT_PATHS_SIZE; + + c->verts = (NVGvertex*)malloc(sizeof(NVGvertex)*NVG_INIT_VERTS_SIZE); + if (!c->verts) goto error; + c->nverts = 0; + c->cverts = NVG_INIT_VERTS_SIZE; + + return c; +error: + nvg__deletePathCache(c); + return NULL; +} + +static void nvg__setDevicePixelRatio(NVGcontext* ctx, float ratio) +{ + ctx->tessTol = 0.25f / ratio; + ctx->distTol = 0.01f / ratio; + ctx->fringeWidth = 1.0f / ratio; + ctx->devicePxRatio = ratio; +} + +NVGcontext* nvgCreateInternal(NVGparams* params) +{ + FONSparams fontParams; + NVGcontext* ctx = (NVGcontext*)malloc(sizeof(NVGcontext)); + int i; + if (ctx == NULL) goto error; + memset(ctx, 0, sizeof(NVGcontext)); + + ctx->params = *params; + for (i = 0; i < NVG_MAX_FONTIMAGES; i++) + ctx->fontImages[i] = 0; + + ctx->commands = (float*)malloc(sizeof(float)*NVG_INIT_COMMANDS_SIZE); + if (!ctx->commands) goto error; + ctx->ncommands = 0; + ctx->ccommands = NVG_INIT_COMMANDS_SIZE; + + ctx->cache = nvg__allocPathCache(); + if (ctx->cache == NULL) goto error; + + nvgSave(ctx); + nvgReset(ctx); + + nvg__setDevicePixelRatio(ctx, 1.0f); + + if (ctx->params.renderCreate(ctx->params.userPtr) == 0) goto error; + + // Init font rendering + memset(&fontParams, 0, sizeof(fontParams)); + fontParams.width = NVG_INIT_FONTIMAGE_SIZE; + fontParams.height = NVG_INIT_FONTIMAGE_SIZE; + fontParams.flags = FONS_ZERO_TOPLEFT; + fontParams.renderCreate = NULL; + fontParams.renderUpdate = NULL; + fontParams.renderDraw = NULL; + fontParams.renderDelete = NULL; + fontParams.userPtr = NULL; + ctx->fs = fonsCreateInternal(&fontParams); + if (ctx->fs == NULL) goto error; + + // Create font texture + ctx->fontImages[0] = ctx->params.renderCreateTexture(ctx->params.userPtr, NVG_TEXTURE_ALPHA, fontParams.width, fontParams.height, 0, NULL); + if (ctx->fontImages[0] == 0) goto error; + ctx->fontImageIdx = 0; + + return ctx; + +error: + nvgDeleteInternal(ctx); + return 0; +} + +NVGparams* nvgInternalParams(NVGcontext* ctx) +{ + return &ctx->params; +} + +void nvgDeleteInternal(NVGcontext* ctx) +{ + int i; + if (ctx == NULL) return; + if (ctx->commands != NULL) free(ctx->commands); + if (ctx->cache != NULL) nvg__deletePathCache(ctx->cache); + + if (ctx->fs) + fonsDeleteInternal(ctx->fs); + + for (i = 0; i < NVG_MAX_FONTIMAGES; i++) { + if (ctx->fontImages[i] != 0) { + nvgDeleteImage(ctx, ctx->fontImages[i]); + ctx->fontImages[i] = 0; + } + } + + if (ctx->params.renderDelete != NULL) + ctx->params.renderDelete(ctx->params.userPtr); + + free(ctx); +} + +void nvgBeginFrame(NVGcontext* ctx, int windowWidth, int windowHeight, float devicePixelRatio) +{ +/* printf("Tris: draws:%d fill:%d stroke:%d text:%d TOT:%d\n", + ctx->drawCallCount, ctx->fillTriCount, ctx->strokeTriCount, ctx->textTriCount, + ctx->fillTriCount+ctx->strokeTriCount+ctx->textTriCount);*/ + + ctx->nstates = 0; + nvgSave(ctx); + nvgReset(ctx); + + nvg__setDevicePixelRatio(ctx, devicePixelRatio); + + ctx->params.renderViewport(ctx->params.userPtr, windowWidth, windowHeight); + + ctx->drawCallCount = 0; + ctx->fillTriCount = 0; + ctx->strokeTriCount = 0; + ctx->textTriCount = 0; +} + +void nvgCancelFrame(NVGcontext* ctx) +{ + ctx->params.renderCancel(ctx->params.userPtr); +} + +void nvgEndFrame(NVGcontext* ctx) +{ + ctx->params.renderFlush(ctx->params.userPtr); + if (ctx->fontImageIdx != 0) { + int fontImage = ctx->fontImages[ctx->fontImageIdx]; + int i, j, iw, ih; + // delete images that smaller than current one + if (fontImage == 0) + return; + nvgImageSize(ctx, fontImage, &iw, &ih); + for (i = j = 0; i < ctx->fontImageIdx; i++) { + if (ctx->fontImages[i] != 0) { + int nw, nh; + nvgImageSize(ctx, ctx->fontImages[i], &nw, &nh); + if (nw < iw || nh < ih) + nvgDeleteImage(ctx, ctx->fontImages[i]); + else + ctx->fontImages[j++] = ctx->fontImages[i]; + } + } + // make current font image to first + ctx->fontImages[j++] = ctx->fontImages[0]; + ctx->fontImages[0] = fontImage; + ctx->fontImageIdx = 0; + // clear all images after j + for (i = j; i < NVG_MAX_FONTIMAGES; i++) + ctx->fontImages[i] = 0; + } +} + +NVGcolor nvgRGB(unsigned char r, unsigned char g, unsigned char b) +{ + return nvgRGBA(r,g,b,255); +} + +NVGcolor nvgRGBf(float r, float g, float b) +{ + return nvgRGBAf(r,g,b,1.0f); +} + +NVGcolor nvgRGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + NVGcolor color; + // Use longer initialization to suppress warning. + color.r = r / 255.0f; + color.g = g / 255.0f; + color.b = b / 255.0f; + color.a = a / 255.0f; + return color; +} + +NVGcolor nvgRGBAf(float r, float g, float b, float a) +{ + NVGcolor color; + // Use longer initialization to suppress warning. + color.r = r; + color.g = g; + color.b = b; + color.a = a; + return color; +} + +NVGcolor nvgTransRGBA(NVGcolor c, unsigned char a) +{ + c.a = a / 255.0f; + return c; +} + +NVGcolor nvgTransRGBAf(NVGcolor c, float a) +{ + c.a = a; + return c; +} + +NVGcolor nvgLerpRGBA(NVGcolor c0, NVGcolor c1, float u) +{ + int i; + float oneminu; + NVGcolor cint; + + u = nvg__clampf(u, 0.0f, 1.0f); + oneminu = 1.0f - u; + for( i = 0; i <4; i++ ) + { + cint.rgba[i] = c0.rgba[i] * oneminu + c1.rgba[i] * u; + } + + return cint; +} + +NVGcolor nvgHSL(float h, float s, float l) +{ + return nvgHSLA(h,s,l,255); +} + +static float nvg__hue(float h, float m1, float m2) +{ + if (h < 0) h += 1; + if (h > 1) h -= 1; + if (h < 1.0f/6.0f) + return m1 + (m2 - m1) * h * 6.0f; + else if (h < 3.0f/6.0f) + return m2; + else if (h < 4.0f/6.0f) + return m1 + (m2 - m1) * (2.0f/3.0f - h) * 6.0f; + return m1; +} + +NVGcolor nvgHSLA(float h, float s, float l, unsigned char a) +{ + float m1, m2; + NVGcolor col; + h = nvg__modf(h, 1.0f); + if (h < 0.0f) h += 1.0f; + s = nvg__clampf(s, 0.0f, 1.0f); + l = nvg__clampf(l, 0.0f, 1.0f); + m2 = l <= 0.5f ? (l * (1 + s)) : (l + s - l * s); + m1 = 2 * l - m2; + col.r = nvg__clampf(nvg__hue(h + 1.0f/3.0f, m1, m2), 0.0f, 1.0f); + col.g = nvg__clampf(nvg__hue(h, m1, m2), 0.0f, 1.0f); + col.b = nvg__clampf(nvg__hue(h - 1.0f/3.0f, m1, m2), 0.0f, 1.0f); + col.a = a/255.0f; + return col; +} + + +static NVGstate* nvg__getState(NVGcontext* ctx) +{ + return &ctx->states[ctx->nstates-1]; +} + +void nvgTransformIdentity(float* t) +{ + t[0] = 1.0f; t[1] = 0.0f; + t[2] = 0.0f; t[3] = 1.0f; + t[4] = 0.0f; t[5] = 0.0f; +} + +void nvgTransformTranslate(float* t, float tx, float ty) +{ + t[0] = 1.0f; t[1] = 0.0f; + t[2] = 0.0f; t[3] = 1.0f; + t[4] = tx; t[5] = ty; +} + +void nvgTransformScale(float* t, float sx, float sy) +{ + t[0] = sx; t[1] = 0.0f; + t[2] = 0.0f; t[3] = sy; + t[4] = 0.0f; t[5] = 0.0f; +} + +void nvgTransformRotate(float* t, float a) +{ + float cs = nvg__cosf(a), sn = nvg__sinf(a); + t[0] = cs; t[1] = sn; + t[2] = -sn; t[3] = cs; + t[4] = 0.0f; t[5] = 0.0f; +} + +void nvgTransformSkewX(float* t, float a) +{ + t[0] = 1.0f; t[1] = 0.0f; + t[2] = nvg__tanf(a); t[3] = 1.0f; + t[4] = 0.0f; t[5] = 0.0f; +} + +void nvgTransformSkewY(float* t, float a) +{ + t[0] = 1.0f; t[1] = nvg__tanf(a); + t[2] = 0.0f; t[3] = 1.0f; + t[4] = 0.0f; t[5] = 0.0f; +} + +void nvgTransformMultiply(float* t, const float* s) +{ + float t0 = t[0] * s[0] + t[1] * s[2]; + float t2 = t[2] * s[0] + t[3] * s[2]; + float t4 = t[4] * s[0] + t[5] * s[2] + s[4]; + t[1] = t[0] * s[1] + t[1] * s[3]; + t[3] = t[2] * s[1] + t[3] * s[3]; + t[5] = t[4] * s[1] + t[5] * s[3] + s[5]; + t[0] = t0; + t[2] = t2; + t[4] = t4; +} + +void nvgTransformPremultiply(float* t, const float* s) +{ + float s2[6]; + memcpy(s2, s, sizeof(float)*6); + nvgTransformMultiply(s2, t); + memcpy(t, s2, sizeof(float)*6); +} + +int nvgTransformInverse(float* inv, const float* t) +{ + double invdet, det = (double)t[0] * t[3] - (double)t[2] * t[1]; + if (det > -1e-6 && det < 1e-6) { + nvgTransformIdentity(inv); + return 0; + } + invdet = 1.0 / det; + inv[0] = (float)(t[3] * invdet); + inv[2] = (float)(-t[2] * invdet); + inv[4] = (float)(((double)t[2] * t[5] - (double)t[3] * t[4]) * invdet); + inv[1] = (float)(-t[1] * invdet); + inv[3] = (float)(t[0] * invdet); + inv[5] = (float)(((double)t[1] * t[4] - (double)t[0] * t[5]) * invdet); + return 1; +} + +void nvgTransformPoint(float* dx, float* dy, const float* t, float sx, float sy) +{ + *dx = sx*t[0] + sy*t[2] + t[4]; + *dy = sx*t[1] + sy*t[3] + t[5]; +} + +float nvgDegToRad(float deg) +{ + return deg / 180.0f * NVG_PI; +} + +float nvgRadToDeg(float rad) +{ + return rad / NVG_PI * 180.0f; +} + +static void nvg__setPaintColor(NVGpaint* p, NVGcolor color) +{ + memset(p, 0, sizeof(*p)); + nvgTransformIdentity(p->xform); + p->radius = 0.0f; + p->feather = 1.0f; + p->innerColor = color; + p->outerColor = color; +} + + +// State handling +void nvgSave(NVGcontext* ctx) +{ + if (ctx->nstates >= NVG_MAX_STATES) + return; + if (ctx->nstates > 0) + memcpy(&ctx->states[ctx->nstates], &ctx->states[ctx->nstates-1], sizeof(NVGstate)); + ctx->nstates++; +} + +void nvgRestore(NVGcontext* ctx) +{ + if (ctx->nstates <= 1) + return; + ctx->nstates--; +} + +void nvgReset(NVGcontext* ctx) +{ + NVGstate* state = nvg__getState(ctx); + memset(state, 0, sizeof(*state)); + + nvg__setPaintColor(&state->fill, nvgRGBA(255,255,255,255)); + nvg__setPaintColor(&state->stroke, nvgRGBA(0,0,0,255)); + state->strokeWidth = 1.0f; + state->miterLimit = 10.0f; + state->lineCap = NVG_BUTT; + state->lineJoin = NVG_MITER; + state->alpha = 1.0f; + nvgTransformIdentity(state->xform); + + state->scissor.extent[0] = -1.0f; + state->scissor.extent[1] = -1.0f; + + state->fontSize = 16.0f; + state->letterSpacing = 0.0f; + state->lineHeight = 1.0f; + state->fontBlur = 0.0f; + state->textAlign = NVG_ALIGN_LEFT | NVG_ALIGN_BASELINE; + state->fontId = 0; +} + +// State setting +void nvgStrokeWidth(NVGcontext* ctx, float width) +{ + NVGstate* state = nvg__getState(ctx); + state->strokeWidth = width; +} + +void nvgMiterLimit(NVGcontext* ctx, float limit) +{ + NVGstate* state = nvg__getState(ctx); + state->miterLimit = limit; +} + +void nvgLineCap(NVGcontext* ctx, int cap) +{ + NVGstate* state = nvg__getState(ctx); + state->lineCap = cap; +} + +void nvgLineJoin(NVGcontext* ctx, int join) +{ + NVGstate* state = nvg__getState(ctx); + state->lineJoin = join; +} + +void nvgGlobalAlpha(NVGcontext* ctx, float alpha) +{ + NVGstate* state = nvg__getState(ctx); + state->alpha = alpha; +} + +void nvgTransform(NVGcontext* ctx, float a, float b, float c, float d, float e, float f) +{ + NVGstate* state = nvg__getState(ctx); + float t[6] = { a, b, c, d, e, f }; + nvgTransformPremultiply(state->xform, t); +} + +void nvgResetTransform(NVGcontext* ctx) +{ + NVGstate* state = nvg__getState(ctx); + nvgTransformIdentity(state->xform); +} + +void nvgTranslate(NVGcontext* ctx, float x, float y) +{ + NVGstate* state = nvg__getState(ctx); + float t[6]; + nvgTransformTranslate(t, x,y); + nvgTransformPremultiply(state->xform, t); +} + +void nvgRotate(NVGcontext* ctx, float angle) +{ + NVGstate* state = nvg__getState(ctx); + float t[6]; + nvgTransformRotate(t, angle); + nvgTransformPremultiply(state->xform, t); +} + +void nvgSkewX(NVGcontext* ctx, float angle) +{ + NVGstate* state = nvg__getState(ctx); + float t[6]; + nvgTransformSkewX(t, angle); + nvgTransformPremultiply(state->xform, t); +} + +void nvgSkewY(NVGcontext* ctx, float angle) +{ + NVGstate* state = nvg__getState(ctx); + float t[6]; + nvgTransformSkewY(t, angle); + nvgTransformPremultiply(state->xform, t); +} + +void nvgScale(NVGcontext* ctx, float x, float y) +{ + NVGstate* state = nvg__getState(ctx); + float t[6]; + nvgTransformScale(t, x,y); + nvgTransformPremultiply(state->xform, t); +} + +void nvgCurrentTransform(NVGcontext* ctx, float* xform) +{ + NVGstate* state = nvg__getState(ctx); + if (xform == NULL) return; + memcpy(xform, state->xform, sizeof(float)*6); +} + +void nvgStrokeColor(NVGcontext* ctx, NVGcolor color) +{ + NVGstate* state = nvg__getState(ctx); + nvg__setPaintColor(&state->stroke, color); +} + +void nvgStrokePaint(NVGcontext* ctx, NVGpaint paint) +{ + NVGstate* state = nvg__getState(ctx); + state->stroke = paint; + nvgTransformMultiply(state->stroke.xform, state->xform); +} + +void nvgFillColor(NVGcontext* ctx, NVGcolor color) +{ + NVGstate* state = nvg__getState(ctx); + nvg__setPaintColor(&state->fill, color); +} + +void nvgFillPaint(NVGcontext* ctx, NVGpaint paint) +{ + NVGstate* state = nvg__getState(ctx); + state->fill = paint; + nvgTransformMultiply(state->fill.xform, state->xform); +} + +int nvgCreateImage(NVGcontext* ctx, const char* filename, int imageFlags) +{ + int w, h, n, image; + unsigned char* img; + stbi_set_unpremultiply_on_load(1); + stbi_convert_iphone_png_to_rgb(1); + img = stbi_load(filename, &w, &h, &n, 4); + if (img == NULL) { +// printf("Failed to load %s - %s\n", filename, stbi_failure_reason()); + return 0; + } + image = nvgCreateImageRGBA(ctx, w, h, imageFlags, img); + stbi_image_free(img); + return image; +} + +int nvgCreateImageMem(NVGcontext* ctx, int imageFlags, const unsigned char* data, int ndata) +{ + int w, h, n, image; + unsigned char* img = stbi_load_from_memory(data, ndata, &w, &h, &n, 4); + if (img == NULL) { +// printf("Failed to load %s - %s\n", filename, stbi_failure_reason()); + return 0; + } + image = nvgCreateImageRGBA(ctx, w, h, imageFlags, img); + stbi_image_free(img); + return image; +} + +int nvgCreateImageRGBA(NVGcontext* ctx, int w, int h, int imageFlags, const unsigned char* data) +{ + return ctx->params.renderCreateTexture(ctx->params.userPtr, NVG_TEXTURE_RGBA, w, h, imageFlags, data); +} + +void nvgUpdateImage(NVGcontext* ctx, int image, const unsigned char* data) +{ + int w, h; + ctx->params.renderGetTextureSize(ctx->params.userPtr, image, &w, &h); + ctx->params.renderUpdateTexture(ctx->params.userPtr, image, 0,0, w,h, data); +} + +void nvgImageSize(NVGcontext* ctx, int image, int* w, int* h) +{ + ctx->params.renderGetTextureSize(ctx->params.userPtr, image, w, h); +} + +void nvgDeleteImage(NVGcontext* ctx, int image) +{ + ctx->params.renderDeleteTexture(ctx->params.userPtr, image); +} + +NVGpaint nvgLinearGradient(NVGcontext* ctx, + float sx, float sy, float ex, float ey, + NVGcolor icol, NVGcolor ocol) +{ + NVGpaint p; + float dx, dy, d; + const float large = 1e5; + NVG_NOTUSED(ctx); + memset(&p, 0, sizeof(p)); + + // Calculate transform aligned to the line + dx = ex - sx; + dy = ey - sy; + d = sqrtf(dx*dx + dy*dy); + if (d > 0.0001f) { + dx /= d; + dy /= d; + } else { + dx = 0; + dy = 1; + } + + p.xform[0] = dy; p.xform[1] = -dx; + p.xform[2] = dx; p.xform[3] = dy; + p.xform[4] = sx - dx*large; p.xform[5] = sy - dy*large; + + p.extent[0] = large; + p.extent[1] = large + d*0.5f; + + p.radius = 0.0f; + + p.feather = nvg__maxf(1.0f, d); + + p.innerColor = icol; + p.outerColor = ocol; + + return p; +} + +NVGpaint nvgRadialGradient(NVGcontext* ctx, + float cx, float cy, float inr, float outr, + NVGcolor icol, NVGcolor ocol) +{ + NVGpaint p; + float r = (inr+outr)*0.5f; + float f = (outr-inr); + NVG_NOTUSED(ctx); + memset(&p, 0, sizeof(p)); + + nvgTransformIdentity(p.xform); + p.xform[4] = cx; + p.xform[5] = cy; + + p.extent[0] = r; + p.extent[1] = r; + + p.radius = r; + + p.feather = nvg__maxf(1.0f, f); + + p.innerColor = icol; + p.outerColor = ocol; + + return p; +} + +NVGpaint nvgBoxGradient(NVGcontext* ctx, + float x, float y, float w, float h, float r, float f, + NVGcolor icol, NVGcolor ocol) +{ + NVGpaint p; + NVG_NOTUSED(ctx); + memset(&p, 0, sizeof(p)); + + nvgTransformIdentity(p.xform); + p.xform[4] = x+w*0.5f; + p.xform[5] = y+h*0.5f; + + p.extent[0] = w*0.5f; + p.extent[1] = h*0.5f; + + p.radius = r; + + p.feather = nvg__maxf(1.0f, f); + + p.innerColor = icol; + p.outerColor = ocol; + + return p; +} + + +NVGpaint nvgImagePattern(NVGcontext* ctx, + float cx, float cy, float w, float h, float angle, + int image, float alpha) +{ + NVGpaint p; + NVG_NOTUSED(ctx); + memset(&p, 0, sizeof(p)); + + nvgTransformRotate(p.xform, angle); + p.xform[4] = cx; + p.xform[5] = cy; + + p.extent[0] = w; + p.extent[1] = h; + + p.image = image; + + p.innerColor = p.outerColor = nvgRGBAf(1,1,1,alpha); + + return p; +} + +// Scissoring +void nvgScissor(NVGcontext* ctx, float x, float y, float w, float h) +{ + NVGstate* state = nvg__getState(ctx); + + w = nvg__maxf(0.0f, w); + h = nvg__maxf(0.0f, h); + + nvgTransformIdentity(state->scissor.xform); + state->scissor.xform[4] = x+w*0.5f; + state->scissor.xform[5] = y+h*0.5f; + nvgTransformMultiply(state->scissor.xform, state->xform); + + state->scissor.extent[0] = w*0.5f; + state->scissor.extent[1] = h*0.5f; +} + +static void nvg__isectRects(float* dst, + float ax, float ay, float aw, float ah, + float bx, float by, float bw, float bh) +{ + float minx = nvg__maxf(ax, bx); + float miny = nvg__maxf(ay, by); + float maxx = nvg__minf(ax+aw, bx+bw); + float maxy = nvg__minf(ay+ah, by+bh); + dst[0] = minx; + dst[1] = miny; + dst[2] = nvg__maxf(0.0f, maxx - minx); + dst[3] = nvg__maxf(0.0f, maxy - miny); +} + +void nvgIntersectScissor(NVGcontext* ctx, float x, float y, float w, float h) +{ + NVGstate* state = nvg__getState(ctx); + float pxform[6], invxorm[6]; + float rect[4]; + float ex, ey, tex, tey; + + // If no previous scissor has been set, set the scissor as current scissor. + if (state->scissor.extent[0] < 0) { + nvgScissor(ctx, x, y, w, h); + return; + } + + // Transform the current scissor rect into current transform space. + // If there is difference in rotation, this will be approximation. + memcpy(pxform, state->scissor.xform, sizeof(float)*6); + ex = state->scissor.extent[0]; + ey = state->scissor.extent[1]; + nvgTransformInverse(invxorm, state->xform); + nvgTransformMultiply(pxform, invxorm); + tex = ex*nvg__absf(pxform[0]) + ey*nvg__absf(pxform[2]); + tey = ex*nvg__absf(pxform[1]) + ey*nvg__absf(pxform[3]); + + // Intersect rects. + nvg__isectRects(rect, pxform[4]-tex,pxform[5]-tey,tex*2,tey*2, x,y,w,h); + + nvgScissor(ctx, rect[0], rect[1], rect[2], rect[3]); +} + +void nvgResetScissor(NVGcontext* ctx) +{ + NVGstate* state = nvg__getState(ctx); + memset(state->scissor.xform, 0, sizeof(state->scissor.xform)); + state->scissor.extent[0] = -1.0f; + state->scissor.extent[1] = -1.0f; +} + +static int nvg__ptEquals(float x1, float y1, float x2, float y2, float tol) +{ + float dx = x2 - x1; + float dy = y2 - y1; + return dx*dx + dy*dy < tol*tol; +} + +static float nvg__distPtSeg(float x, float y, float px, float py, float qx, float qy) +{ + float pqx, pqy, dx, dy, d, t; + pqx = qx-px; + pqy = qy-py; + dx = x-px; + dy = y-py; + d = pqx*pqx + pqy*pqy; + t = pqx*dx + pqy*dy; + if (d > 0) t /= d; + if (t < 0) t = 0; + else if (t > 1) t = 1; + dx = px + t*pqx - x; + dy = py + t*pqy - y; + return dx*dx + dy*dy; +} + +static void nvg__appendCommands(NVGcontext* ctx, float* vals, int nvals) +{ + NVGstate* state = nvg__getState(ctx); + int i; + + if (ctx->ncommands+nvals > ctx->ccommands) { + float* commands; + int ccommands = ctx->ncommands+nvals + ctx->ccommands/2; + commands = (float*)realloc(ctx->commands, sizeof(float)*ccommands); + if (commands == NULL) return; + ctx->commands = commands; + ctx->ccommands = ccommands; + } + + if ((int)vals[0] != NVG_CLOSE && (int)vals[0] != NVG_WINDING) { + ctx->commandx = vals[nvals-2]; + ctx->commandy = vals[nvals-1]; + } + + // transform commands + i = 0; + while (i < nvals) { + int cmd = (int)vals[i]; + switch (cmd) { + case NVG_MOVETO: + nvgTransformPoint(&vals[i+1],&vals[i+2], state->xform, vals[i+1],vals[i+2]); + i += 3; + break; + case NVG_LINETO: + nvgTransformPoint(&vals[i+1],&vals[i+2], state->xform, vals[i+1],vals[i+2]); + i += 3; + break; + case NVG_BEZIERTO: + nvgTransformPoint(&vals[i+1],&vals[i+2], state->xform, vals[i+1],vals[i+2]); + nvgTransformPoint(&vals[i+3],&vals[i+4], state->xform, vals[i+3],vals[i+4]); + nvgTransformPoint(&vals[i+5],&vals[i+6], state->xform, vals[i+5],vals[i+6]); + i += 7; + break; + case NVG_CLOSE: + i++; + break; + case NVG_WINDING: + i += 2; + break; + default: + i++; + } + } + + memcpy(&ctx->commands[ctx->ncommands], vals, nvals*sizeof(float)); + + ctx->ncommands += nvals; +} + + +static void nvg__clearPathCache(NVGcontext* ctx) +{ + ctx->cache->npoints = 0; + ctx->cache->npaths = 0; +} + +static NVGpath* nvg__lastPath(NVGcontext* ctx) +{ + if (ctx->cache->npaths > 0) + return &ctx->cache->paths[ctx->cache->npaths-1]; + return NULL; +} + +static void nvg__addPath(NVGcontext* ctx) +{ + NVGpath* path; + if (ctx->cache->npaths+1 > ctx->cache->cpaths) { + NVGpath* paths; + int cpaths = ctx->cache->npaths+1 + ctx->cache->cpaths/2; + paths = (NVGpath*)realloc(ctx->cache->paths, sizeof(NVGpath)*cpaths); + if (paths == NULL) return; + ctx->cache->paths = paths; + ctx->cache->cpaths = cpaths; + } + path = &ctx->cache->paths[ctx->cache->npaths]; + memset(path, 0, sizeof(*path)); + path->first = ctx->cache->npoints; + path->winding = NVG_CCW; + + ctx->cache->npaths++; +} + +static NVGpoint* nvg__lastPoint(NVGcontext* ctx) +{ + if (ctx->cache->npoints > 0) + return &ctx->cache->points[ctx->cache->npoints-1]; + return NULL; +} + +static void nvg__addPoint(NVGcontext* ctx, float x, float y, int flags) +{ + NVGpath* path = nvg__lastPath(ctx); + NVGpoint* pt; + if (path == NULL) return; + + if (path->count > 0 && ctx->cache->npoints > 0) { + pt = nvg__lastPoint(ctx); + if (nvg__ptEquals(pt->x,pt->y, x,y, ctx->distTol)) { + pt->flags |= flags; + return; + } + } + + if (ctx->cache->npoints+1 > ctx->cache->cpoints) { + NVGpoint* points; + int cpoints = ctx->cache->npoints+1 + ctx->cache->cpoints/2; + points = (NVGpoint*)realloc(ctx->cache->points, sizeof(NVGpoint)*cpoints); + if (points == NULL) return; + ctx->cache->points = points; + ctx->cache->cpoints = cpoints; + } + + pt = &ctx->cache->points[ctx->cache->npoints]; + memset(pt, 0, sizeof(*pt)); + pt->x = x; + pt->y = y; + pt->flags = (unsigned char)flags; + + ctx->cache->npoints++; + path->count++; +} + +static void nvg__closePath(NVGcontext* ctx) +{ + NVGpath* path = nvg__lastPath(ctx); + if (path == NULL) return; + path->closed = 1; +} + +static void nvg__pathWinding(NVGcontext* ctx, int winding) +{ + NVGpath* path = nvg__lastPath(ctx); + if (path == NULL) return; + path->winding = winding; +} + +static float nvg__getAverageScale(float *t) +{ + float sx = sqrtf(t[0]*t[0] + t[2]*t[2]); + float sy = sqrtf(t[1]*t[1] + t[3]*t[3]); + return (sx + sy) * 0.5f; +} + +static NVGvertex* nvg__allocTempVerts(NVGcontext* ctx, int nverts) +{ + if (nverts > ctx->cache->cverts) { + NVGvertex* verts; + int cverts = (nverts + 0xff) & ~0xff; // Round up to prevent allocations when things change just slightly. + verts = (NVGvertex*)realloc(ctx->cache->verts, sizeof(NVGvertex)*cverts); + if (verts == NULL) return NULL; + ctx->cache->verts = verts; + ctx->cache->cverts = cverts; + } + + return ctx->cache->verts; +} + +static float nvg__triarea2(float ax, float ay, float bx, float by, float cx, float cy) +{ + float abx = bx - ax; + float aby = by - ay; + float acx = cx - ax; + float acy = cy - ay; + return acx*aby - abx*acy; +} + +static float nvg__polyArea(NVGpoint* pts, int npts) +{ + int i; + float area = 0; + for (i = 2; i < npts; i++) { + NVGpoint* a = &pts[0]; + NVGpoint* b = &pts[i-1]; + NVGpoint* c = &pts[i]; + area += nvg__triarea2(a->x,a->y, b->x,b->y, c->x,c->y); + } + return area * 0.5f; +} + +static void nvg__polyReverse(NVGpoint* pts, int npts) +{ + NVGpoint tmp; + int i = 0, j = npts-1; + while (i < j) { + tmp = pts[i]; + pts[i] = pts[j]; + pts[j] = tmp; + i++; + j--; + } +} + + +static void nvg__vset(NVGvertex* vtx, float x, float y, float u, float v) +{ + vtx->x = x; + vtx->y = y; + vtx->u = u; + vtx->v = v; +} + +static void nvg__tesselateBezier(NVGcontext* ctx, + float x1, float y1, float x2, float y2, + float x3, float y3, float x4, float y4, + int level, int type) +{ + float x12,y12,x23,y23,x34,y34,x123,y123,x234,y234,x1234,y1234; + float dx,dy,d2,d3; + + if (level > 10) return; + + x12 = (x1+x2)*0.5f; + y12 = (y1+y2)*0.5f; + x23 = (x2+x3)*0.5f; + y23 = (y2+y3)*0.5f; + x34 = (x3+x4)*0.5f; + y34 = (y3+y4)*0.5f; + x123 = (x12+x23)*0.5f; + y123 = (y12+y23)*0.5f; + + dx = x4 - x1; + dy = y4 - y1; + d2 = nvg__absf(((x2 - x4) * dy - (y2 - y4) * dx)); + d3 = nvg__absf(((x3 - x4) * dy - (y3 - y4) * dx)); + + if ((d2 + d3)*(d2 + d3) < ctx->tessTol * (dx*dx + dy*dy)) { + nvg__addPoint(ctx, x4, y4, type); + return; + } + +/* if (nvg__absf(x1+x3-x2-x2) + nvg__absf(y1+y3-y2-y2) + nvg__absf(x2+x4-x3-x3) + nvg__absf(y2+y4-y3-y3) < ctx->tessTol) { + nvg__addPoint(ctx, x4, y4, type); + return; + }*/ + + x234 = (x23+x34)*0.5f; + y234 = (y23+y34)*0.5f; + x1234 = (x123+x234)*0.5f; + y1234 = (y123+y234)*0.5f; + + nvg__tesselateBezier(ctx, x1,y1, x12,y12, x123,y123, x1234,y1234, level+1, 0); + nvg__tesselateBezier(ctx, x1234,y1234, x234,y234, x34,y34, x4,y4, level+1, type); +} + +static void nvg__flattenPaths(NVGcontext* ctx) +{ + NVGpathCache* cache = ctx->cache; +// NVGstate* state = nvg__getState(ctx); + NVGpoint* last; + NVGpoint* p0; + NVGpoint* p1; + NVGpoint* pts; + NVGpath* path; + int i, j; + float* cp1; + float* cp2; + float* p; + float area; + + if (cache->npaths > 0) + return; + + // Flatten + i = 0; + while (i < ctx->ncommands) { + int cmd = (int)ctx->commands[i]; + switch (cmd) { + case NVG_MOVETO: + nvg__addPath(ctx); + p = &ctx->commands[i+1]; + nvg__addPoint(ctx, p[0], p[1], NVG_PT_CORNER); + i += 3; + break; + case NVG_LINETO: + p = &ctx->commands[i+1]; + nvg__addPoint(ctx, p[0], p[1], NVG_PT_CORNER); + i += 3; + break; + case NVG_BEZIERTO: + last = nvg__lastPoint(ctx); + if (last != NULL) { + cp1 = &ctx->commands[i+1]; + cp2 = &ctx->commands[i+3]; + p = &ctx->commands[i+5]; + nvg__tesselateBezier(ctx, last->x,last->y, cp1[0],cp1[1], cp2[0],cp2[1], p[0],p[1], 0, NVG_PT_CORNER); + } + i += 7; + break; + case NVG_CLOSE: + nvg__closePath(ctx); + i++; + break; + case NVG_WINDING: + nvg__pathWinding(ctx, (int)ctx->commands[i+1]); + i += 2; + break; + default: + i++; + } + } + + cache->bounds[0] = cache->bounds[1] = 1e6f; + cache->bounds[2] = cache->bounds[3] = -1e6f; + + // Calculate the direction and length of line segments. + for (j = 0; j < cache->npaths; j++) { + path = &cache->paths[j]; + pts = &cache->points[path->first]; + + // If the first and last points are the same, remove the last, mark as closed path. + p0 = &pts[path->count-1]; + p1 = &pts[0]; + if (nvg__ptEquals(p0->x,p0->y, p1->x,p1->y, ctx->distTol)) { + path->count--; + p0 = &pts[path->count-1]; + path->closed = 1; + } + + // Enforce winding. + if (path->count > 2) { + area = nvg__polyArea(pts, path->count); + if (path->winding == NVG_CCW && area < 0.0f) + nvg__polyReverse(pts, path->count); + if (path->winding == NVG_CW && area > 0.0f) + nvg__polyReverse(pts, path->count); + } + + for(i = 0; i < path->count; i++) { + // Calculate segment direction and length + p0->dx = p1->x - p0->x; + p0->dy = p1->y - p0->y; + p0->len = nvg__normalize(&p0->dx, &p0->dy); + // Update bounds + cache->bounds[0] = nvg__minf(cache->bounds[0], p0->x); + cache->bounds[1] = nvg__minf(cache->bounds[1], p0->y); + cache->bounds[2] = nvg__maxf(cache->bounds[2], p0->x); + cache->bounds[3] = nvg__maxf(cache->bounds[3], p0->y); + // Advance + p0 = p1++; + } + } +} + +static int nvg__curveDivs(float r, float arc, float tol) +{ + float da = acosf(r / (r + tol)) * 2.0f; + return nvg__maxi(2, (int)ceilf(arc / da)); +} + +static void nvg__chooseBevel(int bevel, NVGpoint* p0, NVGpoint* p1, float w, + float* x0, float* y0, float* x1, float* y1) +{ + if (bevel) { + *x0 = p1->x + p0->dy * w; + *y0 = p1->y - p0->dx * w; + *x1 = p1->x + p1->dy * w; + *y1 = p1->y - p1->dx * w; + } else { + *x0 = p1->x + p1->dmx * w; + *y0 = p1->y + p1->dmy * w; + *x1 = p1->x + p1->dmx * w; + *y1 = p1->y + p1->dmy * w; + } +} + +static NVGvertex* nvg__roundJoin(NVGvertex* dst, NVGpoint* p0, NVGpoint* p1, + float lw, float rw, float lu, float ru, int ncap, float fringe) +{ + int i, n; + float dlx0 = p0->dy; + float dly0 = -p0->dx; + float dlx1 = p1->dy; + float dly1 = -p1->dx; + NVG_NOTUSED(fringe); + + if (p1->flags & NVG_PT_LEFT) { + float lx0,ly0,lx1,ly1,a0,a1; + nvg__chooseBevel(p1->flags & NVG_PR_INNERBEVEL, p0, p1, lw, &lx0,&ly0, &lx1,&ly1); + a0 = atan2f(-dly0, -dlx0); + a1 = atan2f(-dly1, -dlx1); + if (a1 > a0) a1 -= NVG_PI*2; + + nvg__vset(dst, lx0, ly0, lu,1); dst++; + nvg__vset(dst, p1->x - dlx0*rw, p1->y - dly0*rw, ru,1); dst++; + + n = nvg__clampi((int)ceilf(((a0 - a1) / NVG_PI) * ncap), 2, ncap); + for (i = 0; i < n; i++) { + float u = i/(float)(n-1); + float a = a0 + u*(a1-a0); + float rx = p1->x + cosf(a) * rw; + float ry = p1->y + sinf(a) * rw; + nvg__vset(dst, p1->x, p1->y, 0.5f,1); dst++; + nvg__vset(dst, rx, ry, ru,1); dst++; + } + + nvg__vset(dst, lx1, ly1, lu,1); dst++; + nvg__vset(dst, p1->x - dlx1*rw, p1->y - dly1*rw, ru,1); dst++; + + } else { + float rx0,ry0,rx1,ry1,a0,a1; + nvg__chooseBevel(p1->flags & NVG_PR_INNERBEVEL, p0, p1, -rw, &rx0,&ry0, &rx1,&ry1); + a0 = atan2f(dly0, dlx0); + a1 = atan2f(dly1, dlx1); + if (a1 < a0) a1 += NVG_PI*2; + + nvg__vset(dst, p1->x + dlx0*rw, p1->y + dly0*rw, lu,1); dst++; + nvg__vset(dst, rx0, ry0, ru,1); dst++; + + n = nvg__clampi((int)ceilf(((a1 - a0) / NVG_PI) * ncap), 2, ncap); + for (i = 0; i < n; i++) { + float u = i/(float)(n-1); + float a = a0 + u*(a1-a0); + float lx = p1->x + cosf(a) * lw; + float ly = p1->y + sinf(a) * lw; + nvg__vset(dst, lx, ly, lu,1); dst++; + nvg__vset(dst, p1->x, p1->y, 0.5f,1); dst++; + } + + nvg__vset(dst, p1->x + dlx1*rw, p1->y + dly1*rw, lu,1); dst++; + nvg__vset(dst, rx1, ry1, ru,1); dst++; + + } + return dst; +} + +static NVGvertex* nvg__bevelJoin(NVGvertex* dst, NVGpoint* p0, NVGpoint* p1, + float lw, float rw, float lu, float ru, float fringe) +{ + float rx0,ry0,rx1,ry1; + float lx0,ly0,lx1,ly1; + float dlx0 = p0->dy; + float dly0 = -p0->dx; + float dlx1 = p1->dy; + float dly1 = -p1->dx; + NVG_NOTUSED(fringe); + + if (p1->flags & NVG_PT_LEFT) { + nvg__chooseBevel(p1->flags & NVG_PR_INNERBEVEL, p0, p1, lw, &lx0,&ly0, &lx1,&ly1); + + nvg__vset(dst, lx0, ly0, lu,1); dst++; + nvg__vset(dst, p1->x - dlx0*rw, p1->y - dly0*rw, ru,1); dst++; + + if (p1->flags & NVG_PT_BEVEL) { + nvg__vset(dst, lx0, ly0, lu,1); dst++; + nvg__vset(dst, p1->x - dlx0*rw, p1->y - dly0*rw, ru,1); dst++; + + nvg__vset(dst, lx1, ly1, lu,1); dst++; + nvg__vset(dst, p1->x - dlx1*rw, p1->y - dly1*rw, ru,1); dst++; + } else { + rx0 = p1->x - p1->dmx * rw; + ry0 = p1->y - p1->dmy * rw; + + nvg__vset(dst, p1->x, p1->y, 0.5f,1); dst++; + nvg__vset(dst, p1->x - dlx0*rw, p1->y - dly0*rw, ru,1); dst++; + + nvg__vset(dst, rx0, ry0, ru,1); dst++; + nvg__vset(dst, rx0, ry0, ru,1); dst++; + + nvg__vset(dst, p1->x, p1->y, 0.5f,1); dst++; + nvg__vset(dst, p1->x - dlx1*rw, p1->y - dly1*rw, ru,1); dst++; + } + + nvg__vset(dst, lx1, ly1, lu,1); dst++; + nvg__vset(dst, p1->x - dlx1*rw, p1->y - dly1*rw, ru,1); dst++; + + } else { + nvg__chooseBevel(p1->flags & NVG_PR_INNERBEVEL, p0, p1, -rw, &rx0,&ry0, &rx1,&ry1); + + nvg__vset(dst, p1->x + dlx0*lw, p1->y + dly0*lw, lu,1); dst++; + nvg__vset(dst, rx0, ry0, ru,1); dst++; + + if (p1->flags & NVG_PT_BEVEL) { + nvg__vset(dst, p1->x + dlx0*lw, p1->y + dly0*lw, lu,1); dst++; + nvg__vset(dst, rx0, ry0, ru,1); dst++; + + nvg__vset(dst, p1->x + dlx1*lw, p1->y + dly1*lw, lu,1); dst++; + nvg__vset(dst, rx1, ry1, ru,1); dst++; + } else { + lx0 = p1->x + p1->dmx * lw; + ly0 = p1->y + p1->dmy * lw; + + nvg__vset(dst, p1->x + dlx0*lw, p1->y + dly0*lw, lu,1); dst++; + nvg__vset(dst, p1->x, p1->y, 0.5f,1); dst++; + + nvg__vset(dst, lx0, ly0, lu,1); dst++; + nvg__vset(dst, lx0, ly0, lu,1); dst++; + + nvg__vset(dst, p1->x + dlx1*lw, p1->y + dly1*lw, lu,1); dst++; + nvg__vset(dst, p1->x, p1->y, 0.5f,1); dst++; + } + + nvg__vset(dst, p1->x + dlx1*lw, p1->y + dly1*lw, lu,1); dst++; + nvg__vset(dst, rx1, ry1, ru,1); dst++; + } + + return dst; +} + +static NVGvertex* nvg__buttCapStart(NVGvertex* dst, NVGpoint* p, + float dx, float dy, float w, float d, float aa) +{ + float px = p->x - dx*d; + float py = p->y - dy*d; + float dlx = dy; + float dly = -dx; + nvg__vset(dst, px + dlx*w - dx*aa, py + dly*w - dy*aa, 0,0); dst++; + nvg__vset(dst, px - dlx*w - dx*aa, py - dly*w - dy*aa, 1,0); dst++; + nvg__vset(dst, px + dlx*w, py + dly*w, 0,1); dst++; + nvg__vset(dst, px - dlx*w, py - dly*w, 1,1); dst++; + return dst; +} + +static NVGvertex* nvg__buttCapEnd(NVGvertex* dst, NVGpoint* p, + float dx, float dy, float w, float d, float aa) +{ + float px = p->x + dx*d; + float py = p->y + dy*d; + float dlx = dy; + float dly = -dx; + nvg__vset(dst, px + dlx*w, py + dly*w, 0,1); dst++; + nvg__vset(dst, px - dlx*w, py - dly*w, 1,1); dst++; + nvg__vset(dst, px + dlx*w + dx*aa, py + dly*w + dy*aa, 0,0); dst++; + nvg__vset(dst, px - dlx*w + dx*aa, py - dly*w + dy*aa, 1,0); dst++; + return dst; +} + + +static NVGvertex* nvg__roundCapStart(NVGvertex* dst, NVGpoint* p, + float dx, float dy, float w, int ncap, float aa) +{ + int i; + float px = p->x; + float py = p->y; + float dlx = dy; + float dly = -dx; + NVG_NOTUSED(aa); + for (i = 0; i < ncap; i++) { + float a = i/(float)(ncap-1)*NVG_PI; + float ax = cosf(a) * w, ay = sinf(a) * w; + nvg__vset(dst, px - dlx*ax - dx*ay, py - dly*ax - dy*ay, 0,1); dst++; + nvg__vset(dst, px, py, 0.5f,1); dst++; + } + nvg__vset(dst, px + dlx*w, py + dly*w, 0,1); dst++; + nvg__vset(dst, px - dlx*w, py - dly*w, 1,1); dst++; + return dst; +} + +static NVGvertex* nvg__roundCapEnd(NVGvertex* dst, NVGpoint* p, + float dx, float dy, float w, int ncap, float aa) +{ + int i; + float px = p->x; + float py = p->y; + float dlx = dy; + float dly = -dx; + NVG_NOTUSED(aa); + nvg__vset(dst, px + dlx*w, py + dly*w, 0,1); dst++; + nvg__vset(dst, px - dlx*w, py - dly*w, 1,1); dst++; + for (i = 0; i < ncap; i++) { + float a = i/(float)(ncap-1)*NVG_PI; + float ax = cosf(a) * w, ay = sinf(a) * w; + nvg__vset(dst, px, py, 0.5f,1); dst++; + nvg__vset(dst, px - dlx*ax + dx*ay, py - dly*ax + dy*ay, 0,1); dst++; + } + return dst; +} + + +static void nvg__calculateJoins(NVGcontext* ctx, float w, int lineJoin, float miterLimit) +{ + NVGpathCache* cache = ctx->cache; + int i, j; + float iw = 0.0f; + + if (w > 0.0f) iw = 1.0f / w; + + // Calculate which joins needs extra vertices to append, and gather vertex count. + for (i = 0; i < cache->npaths; i++) { + NVGpath* path = &cache->paths[i]; + NVGpoint* pts = &cache->points[path->first]; + NVGpoint* p0 = &pts[path->count-1]; + NVGpoint* p1 = &pts[0]; + int nleft = 0; + + path->nbevel = 0; + + for (j = 0; j < path->count; j++) { + float dlx0, dly0, dlx1, dly1, dmr2, cross, limit; + dlx0 = p0->dy; + dly0 = -p0->dx; + dlx1 = p1->dy; + dly1 = -p1->dx; + // Calculate extrusions + p1->dmx = (dlx0 + dlx1) * 0.5f; + p1->dmy = (dly0 + dly1) * 0.5f; + dmr2 = p1->dmx*p1->dmx + p1->dmy*p1->dmy; + if (dmr2 > 0.000001f) { + float scale = 1.0f / dmr2; + if (scale > 600.0f) { + scale = 600.0f; + } + p1->dmx *= scale; + p1->dmy *= scale; + } + + // Clear flags, but keep the corner. + p1->flags = (p1->flags & NVG_PT_CORNER) ? NVG_PT_CORNER : 0; + + // Keep track of left turns. + cross = p1->dx * p0->dy - p0->dx * p1->dy; + if (cross > 0.0f) { + nleft++; + p1->flags |= NVG_PT_LEFT; + } + + // Calculate if we should use bevel or miter for inner join. + limit = nvg__maxf(1.01f, nvg__minf(p0->len, p1->len) * iw); + if ((dmr2 * limit*limit) < 1.0f) + p1->flags |= NVG_PR_INNERBEVEL; + + // Check to see if the corner needs to be beveled. + if (p1->flags & NVG_PT_CORNER) { + if ((dmr2 * miterLimit*miterLimit) < 1.0f || lineJoin == NVG_BEVEL || lineJoin == NVG_ROUND) { + p1->flags |= NVG_PT_BEVEL; + } + } + + if ((p1->flags & (NVG_PT_BEVEL | NVG_PR_INNERBEVEL)) != 0) + path->nbevel++; + + p0 = p1++; + } + + path->convex = (nleft == path->count) ? 1 : 0; + } +} + + +static int nvg__expandStroke(NVGcontext* ctx, float w, int lineCap, int lineJoin, float miterLimit) +{ + NVGpathCache* cache = ctx->cache; + NVGvertex* verts; + NVGvertex* dst; + int cverts, i, j; + float aa = ctx->fringeWidth; + int ncap = nvg__curveDivs(w, NVG_PI, ctx->tessTol); // Calculate divisions per half circle. + + nvg__calculateJoins(ctx, w, lineJoin, miterLimit); + + // Calculate max vertex usage. + cverts = 0; + for (i = 0; i < cache->npaths; i++) { + NVGpath* path = &cache->paths[i]; + int loop = (path->closed == 0) ? 0 : 1; + if (lineJoin == NVG_ROUND) + cverts += (path->count + path->nbevel*(ncap+2) + 1) * 2; // plus one for loop + else + cverts += (path->count + path->nbevel*5 + 1) * 2; // plus one for loop + if (loop == 0) { + // space for caps + if (lineCap == NVG_ROUND) { + cverts += (ncap*2 + 2)*2; + } else { + cverts += (3+3)*2; + } + } + } + + verts = nvg__allocTempVerts(ctx, cverts); + if (verts == NULL) return 0; + + for (i = 0; i < cache->npaths; i++) { + NVGpath* path = &cache->paths[i]; + NVGpoint* pts = &cache->points[path->first]; + NVGpoint* p0; + NVGpoint* p1; + int s, e, loop; + float dx, dy; + + path->fill = 0; + path->nfill = 0; + + // Calculate fringe or stroke + loop = (path->closed == 0) ? 0 : 1; + dst = verts; + path->stroke = dst; + + if (loop) { + // Looping + p0 = &pts[path->count-1]; + p1 = &pts[0]; + s = 0; + e = path->count; + } else { + // Add cap + p0 = &pts[0]; + p1 = &pts[1]; + s = 1; + e = path->count-1; + } + + if (loop == 0) { + // Add cap + dx = p1->x - p0->x; + dy = p1->y - p0->y; + nvg__normalize(&dx, &dy); + if (lineCap == NVG_BUTT) + dst = nvg__buttCapStart(dst, p0, dx, dy, w, -aa*0.5f, aa); + else if (lineCap == NVG_BUTT || lineCap == NVG_SQUARE) + dst = nvg__buttCapStart(dst, p0, dx, dy, w, w-aa, aa); + else if (lineCap == NVG_ROUND) + dst = nvg__roundCapStart(dst, p0, dx, dy, w, ncap, aa); + } + + for (j = s; j < e; ++j) { + if ((p1->flags & (NVG_PT_BEVEL | NVG_PR_INNERBEVEL)) != 0) { + if (lineJoin == NVG_ROUND) { + dst = nvg__roundJoin(dst, p0, p1, w, w, 0, 1, ncap, aa); + } else { + dst = nvg__bevelJoin(dst, p0, p1, w, w, 0, 1, aa); + } + } else { + nvg__vset(dst, p1->x + (p1->dmx * w), p1->y + (p1->dmy * w), 0,1); dst++; + nvg__vset(dst, p1->x - (p1->dmx * w), p1->y - (p1->dmy * w), 1,1); dst++; + } + p0 = p1++; + } + + if (loop) { + // Loop it + nvg__vset(dst, verts[0].x, verts[0].y, 0,1); dst++; + nvg__vset(dst, verts[1].x, verts[1].y, 1,1); dst++; + } else { + // Add cap + dx = p1->x - p0->x; + dy = p1->y - p0->y; + nvg__normalize(&dx, &dy); + if (lineCap == NVG_BUTT) + dst = nvg__buttCapEnd(dst, p1, dx, dy, w, -aa*0.5f, aa); + else if (lineCap == NVG_BUTT || lineCap == NVG_SQUARE) + dst = nvg__buttCapEnd(dst, p1, dx, dy, w, w-aa, aa); + else if (lineCap == NVG_ROUND) + dst = nvg__roundCapEnd(dst, p1, dx, dy, w, ncap, aa); + } + + path->nstroke = (int)(dst - verts); + + verts = dst; + } + + return 1; +} + +static int nvg__expandFill(NVGcontext* ctx, float w, int lineJoin, float miterLimit) +{ + NVGpathCache* cache = ctx->cache; + NVGvertex* verts; + NVGvertex* dst; + int cverts, convex, i, j; + float aa = ctx->fringeWidth; + int fringe = w > 0.0f; + + nvg__calculateJoins(ctx, w, lineJoin, miterLimit); + + // Calculate max vertex usage. + cverts = 0; + for (i = 0; i < cache->npaths; i++) { + NVGpath* path = &cache->paths[i]; + cverts += path->count + path->nbevel + 1; + if (fringe) + cverts += (path->count + path->nbevel*5 + 1) * 2; // plus one for loop + } + + verts = nvg__allocTempVerts(ctx, cverts); + if (verts == NULL) return 0; + + convex = cache->npaths == 1 && cache->paths[0].convex; + + for (i = 0; i < cache->npaths; i++) { + NVGpath* path = &cache->paths[i]; + NVGpoint* pts = &cache->points[path->first]; + NVGpoint* p0; + NVGpoint* p1; + float rw, lw, woff; + float ru, lu; + + // Calculate shape vertices. + woff = 0.5f*aa; + dst = verts; + path->fill = dst; + + if (fringe) { + // Looping + p0 = &pts[path->count-1]; + p1 = &pts[0]; + for (j = 0; j < path->count; ++j) { + if (p1->flags & NVG_PT_BEVEL) { + float dlx0 = p0->dy; + float dly0 = -p0->dx; + float dlx1 = p1->dy; + float dly1 = -p1->dx; + if (p1->flags & NVG_PT_LEFT) { + float lx = p1->x + p1->dmx * woff; + float ly = p1->y + p1->dmy * woff; + nvg__vset(dst, lx, ly, 0.5f,1); dst++; + } else { + float lx0 = p1->x + dlx0 * woff; + float ly0 = p1->y + dly0 * woff; + float lx1 = p1->x + dlx1 * woff; + float ly1 = p1->y + dly1 * woff; + nvg__vset(dst, lx0, ly0, 0.5f,1); dst++; + nvg__vset(dst, lx1, ly1, 0.5f,1); dst++; + } + } else { + nvg__vset(dst, p1->x + (p1->dmx * woff), p1->y + (p1->dmy * woff), 0.5f,1); dst++; + } + p0 = p1++; + } + } else { + for (j = 0; j < path->count; ++j) { + nvg__vset(dst, pts[j].x, pts[j].y, 0.5f,1); + dst++; + } + } + + path->nfill = (int)(dst - verts); + verts = dst; + + // Calculate fringe + if (fringe) { + lw = w + woff; + rw = w - woff; + lu = 0; + ru = 1; + dst = verts; + path->stroke = dst; + + // Create only half a fringe for convex shapes so that + // the shape can be rendered without stenciling. + if (convex) { + lw = woff; // This should generate the same vertex as fill inset above. + lu = 0.5f; // Set outline fade at middle. + } + + // Looping + p0 = &pts[path->count-1]; + p1 = &pts[0]; + + for (j = 0; j < path->count; ++j) { + if ((p1->flags & (NVG_PT_BEVEL | NVG_PR_INNERBEVEL)) != 0) { + dst = nvg__bevelJoin(dst, p0, p1, lw, rw, lu, ru, ctx->fringeWidth); + } else { + nvg__vset(dst, p1->x + (p1->dmx * lw), p1->y + (p1->dmy * lw), lu,1); dst++; + nvg__vset(dst, p1->x - (p1->dmx * rw), p1->y - (p1->dmy * rw), ru,1); dst++; + } + p0 = p1++; + } + + // Loop it + nvg__vset(dst, verts[0].x, verts[0].y, lu,1); dst++; + nvg__vset(dst, verts[1].x, verts[1].y, ru,1); dst++; + + path->nstroke = (int)(dst - verts); + verts = dst; + } else { + path->stroke = NULL; + path->nstroke = 0; + } + } + + return 1; +} + + +// Draw +void nvgBeginPath(NVGcontext* ctx) +{ + ctx->ncommands = 0; + nvg__clearPathCache(ctx); +} + +void nvgMoveTo(NVGcontext* ctx, float x, float y) +{ + float vals[] = { NVG_MOVETO, x, y }; + nvg__appendCommands(ctx, vals, NVG_COUNTOF(vals)); +} + +void nvgLineTo(NVGcontext* ctx, float x, float y) +{ + float vals[] = { NVG_LINETO, x, y }; + nvg__appendCommands(ctx, vals, NVG_COUNTOF(vals)); +} + +void nvgBezierTo(NVGcontext* ctx, float c1x, float c1y, float c2x, float c2y, float x, float y) +{ + float vals[] = { NVG_BEZIERTO, c1x, c1y, c2x, c2y, x, y }; + nvg__appendCommands(ctx, vals, NVG_COUNTOF(vals)); +} + +void nvgQuadTo(NVGcontext* ctx, float cx, float cy, float x, float y) +{ + float x0 = ctx->commandx; + float y0 = ctx->commandy; + float vals[] = { NVG_BEZIERTO, + x0 + 2.0f/3.0f*(cx - x0), y0 + 2.0f/3.0f*(cy - y0), + x + 2.0f/3.0f*(cx - x), y + 2.0f/3.0f*(cy - y), + x, y }; + nvg__appendCommands(ctx, vals, NVG_COUNTOF(vals)); +} + +void nvgArcTo(NVGcontext* ctx, float x1, float y1, float x2, float y2, float radius) +{ + float x0 = ctx->commandx; + float y0 = ctx->commandy; + float dx0,dy0, dx1,dy1, a, d, cx,cy, a0,a1; + int dir; + + if (ctx->ncommands == 0) { + return; + } + + // Handle degenerate cases. + if (nvg__ptEquals(x0,y0, x1,y1, ctx->distTol) || + nvg__ptEquals(x1,y1, x2,y2, ctx->distTol) || + nvg__distPtSeg(x1,y1, x0,y0, x2,y2) < ctx->distTol*ctx->distTol || + radius < ctx->distTol) { + nvgLineTo(ctx, x1,y1); + return; + } + + // Calculate tangential circle to lines (x0,y0)-(x1,y1) and (x1,y1)-(x2,y2). + dx0 = x0-x1; + dy0 = y0-y1; + dx1 = x2-x1; + dy1 = y2-y1; + nvg__normalize(&dx0,&dy0); + nvg__normalize(&dx1,&dy1); + a = nvg__acosf(dx0*dx1 + dy0*dy1); + d = radius / nvg__tanf(a/2.0f); + +// printf("a=%f° d=%f\n", a/NVG_PI*180.0f, d); + + if (d > 10000.0f) { + nvgLineTo(ctx, x1,y1); + return; + } + + if (nvg__cross(dx0,dy0, dx1,dy1) > 0.0f) { + cx = x1 + dx0*d + dy0*radius; + cy = y1 + dy0*d + -dx0*radius; + a0 = nvg__atan2f(dx0, -dy0); + a1 = nvg__atan2f(-dx1, dy1); + dir = NVG_CW; +// printf("CW c=(%f, %f) a0=%f° a1=%f°\n", cx, cy, a0/NVG_PI*180.0f, a1/NVG_PI*180.0f); + } else { + cx = x1 + dx0*d + -dy0*radius; + cy = y1 + dy0*d + dx0*radius; + a0 = nvg__atan2f(-dx0, dy0); + a1 = nvg__atan2f(dx1, -dy1); + dir = NVG_CCW; +// printf("CCW c=(%f, %f) a0=%f° a1=%f°\n", cx, cy, a0/NVG_PI*180.0f, a1/NVG_PI*180.0f); + } + + nvgArc(ctx, cx, cy, radius, a0, a1, dir); +} + +void nvgClosePath(NVGcontext* ctx) +{ + float vals[] = { NVG_CLOSE }; + nvg__appendCommands(ctx, vals, NVG_COUNTOF(vals)); +} + +void nvgPathWinding(NVGcontext* ctx, int dir) +{ + float vals[] = { NVG_WINDING, (float)dir }; + nvg__appendCommands(ctx, vals, NVG_COUNTOF(vals)); +} + +void nvgArc(NVGcontext* ctx, float cx, float cy, float r, float a0, float a1, int dir) +{ + float a = 0, da = 0, hda = 0, kappa = 0; + float dx = 0, dy = 0, x = 0, y = 0, tanx = 0, tany = 0; + float px = 0, py = 0, ptanx = 0, ptany = 0; + float vals[3 + 5*7 + 100]; + int i, ndivs, nvals; + int move = ctx->ncommands > 0 ? NVG_LINETO : NVG_MOVETO; + + // Clamp angles + da = a1 - a0; + if (dir == NVG_CW) { + if (nvg__absf(da) >= NVG_PI*2) { + da = NVG_PI*2; + } else { + while (da < 0.0f) da += NVG_PI*2; + } + } else { + if (nvg__absf(da) >= NVG_PI*2) { + da = -NVG_PI*2; + } else { + while (da > 0.0f) da -= NVG_PI*2; + } + } + + // Split arc into max 90 degree segments. + ndivs = nvg__maxi(1, nvg__mini((int)(nvg__absf(da) / (NVG_PI*0.5f) + 0.5f), 5)); + hda = (da / (float)ndivs) / 2.0f; + kappa = nvg__absf(4.0f / 3.0f * (1.0f - nvg__cosf(hda)) / nvg__sinf(hda)); + + if (dir == NVG_CCW) + kappa = -kappa; + + nvals = 0; + for (i = 0; i <= ndivs; i++) { + a = a0 + da * (i/(float)ndivs); + dx = nvg__cosf(a); + dy = nvg__sinf(a); + x = cx + dx*r; + y = cy + dy*r; + tanx = -dy*r*kappa; + tany = dx*r*kappa; + + if (i == 0) { + vals[nvals++] = (float)move; + vals[nvals++] = x; + vals[nvals++] = y; + } else { + vals[nvals++] = NVG_BEZIERTO; + vals[nvals++] = px+ptanx; + vals[nvals++] = py+ptany; + vals[nvals++] = x-tanx; + vals[nvals++] = y-tany; + vals[nvals++] = x; + vals[nvals++] = y; + } + px = x; + py = y; + ptanx = tanx; + ptany = tany; + } + + nvg__appendCommands(ctx, vals, nvals); +} + +void nvgRect(NVGcontext* ctx, float x, float y, float w, float h) +{ + float vals[] = { + NVG_MOVETO, x,y, + NVG_LINETO, x,y+h, + NVG_LINETO, x+w,y+h, + NVG_LINETO, x+w,y, + NVG_CLOSE + }; + nvg__appendCommands(ctx, vals, NVG_COUNTOF(vals)); +} + +void nvgRoundedRect(NVGcontext* ctx, float x, float y, float w, float h, float r) +{ + if (r < 0.1f) { + nvgRect(ctx, x,y,w,h); + return; + } + else { + float rx = nvg__minf(r, nvg__absf(w)*0.5f) * nvg__signf(w), ry = nvg__minf(r, nvg__absf(h)*0.5f) * nvg__signf(h); + float vals[] = { + NVG_MOVETO, x, y+ry, + NVG_LINETO, x, y+h-ry, + NVG_BEZIERTO, x, y+h-ry*(1-NVG_KAPPA90), x+rx*(1-NVG_KAPPA90), y+h, x+rx, y+h, + NVG_LINETO, x+w-rx, y+h, + NVG_BEZIERTO, x+w-rx*(1-NVG_KAPPA90), y+h, x+w, y+h-ry*(1-NVG_KAPPA90), x+w, y+h-ry, + NVG_LINETO, x+w, y+ry, + NVG_BEZIERTO, x+w, y+ry*(1-NVG_KAPPA90), x+w-rx*(1-NVG_KAPPA90), y, x+w-rx, y, + NVG_LINETO, x+rx, y, + NVG_BEZIERTO, x+rx*(1-NVG_KAPPA90), y, x, y+ry*(1-NVG_KAPPA90), x, y+ry, + NVG_CLOSE + }; + nvg__appendCommands(ctx, vals, NVG_COUNTOF(vals)); + } +} + +void nvgEllipse(NVGcontext* ctx, float cx, float cy, float rx, float ry) +{ + float vals[] = { + NVG_MOVETO, cx-rx, cy, + NVG_BEZIERTO, cx-rx, cy+ry*NVG_KAPPA90, cx-rx*NVG_KAPPA90, cy+ry, cx, cy+ry, + NVG_BEZIERTO, cx+rx*NVG_KAPPA90, cy+ry, cx+rx, cy+ry*NVG_KAPPA90, cx+rx, cy, + NVG_BEZIERTO, cx+rx, cy-ry*NVG_KAPPA90, cx+rx*NVG_KAPPA90, cy-ry, cx, cy-ry, + NVG_BEZIERTO, cx-rx*NVG_KAPPA90, cy-ry, cx-rx, cy-ry*NVG_KAPPA90, cx-rx, cy, + NVG_CLOSE + }; + nvg__appendCommands(ctx, vals, NVG_COUNTOF(vals)); +} + +void nvgCircle(NVGcontext* ctx, float cx, float cy, float r) +{ + nvgEllipse(ctx, cx,cy, r,r); +} + +void nvgDebugDumpPathCache(NVGcontext* ctx) +{ + const NVGpath* path; + int i, j; + + printf("Dumping %d cached paths\n", ctx->cache->npaths); + for (i = 0; i < ctx->cache->npaths; i++) { + path = &ctx->cache->paths[i]; + printf(" - Path %d\n", i); + if (path->nfill) { + printf(" - fill: %d\n", path->nfill); + for (j = 0; j < path->nfill; j++) + printf("%f\t%f\n", path->fill[j].x, path->fill[j].y); + } + if (path->nstroke) { + printf(" - stroke: %d\n", path->nstroke); + for (j = 0; j < path->nstroke; j++) + printf("%f\t%f\n", path->stroke[j].x, path->stroke[j].y); + } + } +} + +void nvgFill(NVGcontext* ctx) +{ + NVGstate* state = nvg__getState(ctx); + const NVGpath* path; + NVGpaint fillPaint = state->fill; + int i; + + nvg__flattenPaths(ctx); + if (ctx->params.edgeAntiAlias) + nvg__expandFill(ctx, ctx->fringeWidth, NVG_MITER, 2.4f); + else + nvg__expandFill(ctx, 0.0f, NVG_MITER, 2.4f); + + // Apply global alpha + fillPaint.innerColor.a *= state->alpha; + fillPaint.outerColor.a *= state->alpha; + + ctx->params.renderFill(ctx->params.userPtr, &fillPaint, &state->scissor, ctx->fringeWidth, + ctx->cache->bounds, ctx->cache->paths, ctx->cache->npaths); + + // Count triangles + for (i = 0; i < ctx->cache->npaths; i++) { + path = &ctx->cache->paths[i]; + ctx->fillTriCount += path->nfill-2; + ctx->fillTriCount += path->nstroke-2; + ctx->drawCallCount += 2; + } +} + +void nvgStroke(NVGcontext* ctx) +{ + NVGstate* state = nvg__getState(ctx); + float scale = nvg__getAverageScale(state->xform); + float strokeWidth = nvg__clampf(state->strokeWidth * scale, 0.0f, 200.0f); + NVGpaint strokePaint = state->stroke; + const NVGpath* path; + int i; + + if (strokeWidth < ctx->fringeWidth) { + // If the stroke width is less than pixel size, use alpha to emulate coverage. + // Since coverage is area, scale by alpha*alpha. + float alpha = nvg__clampf(strokeWidth / ctx->fringeWidth, 0.0f, 1.0f); + strokePaint.innerColor.a *= alpha*alpha; + strokePaint.outerColor.a *= alpha*alpha; + strokeWidth = ctx->fringeWidth; + } + + // Apply global alpha + strokePaint.innerColor.a *= state->alpha; + strokePaint.outerColor.a *= state->alpha; + + nvg__flattenPaths(ctx); + + if (ctx->params.edgeAntiAlias) + nvg__expandStroke(ctx, strokeWidth*0.5f + ctx->fringeWidth*0.5f, state->lineCap, state->lineJoin, state->miterLimit); + else + nvg__expandStroke(ctx, strokeWidth*0.5f, state->lineCap, state->lineJoin, state->miterLimit); + + ctx->params.renderStroke(ctx->params.userPtr, &strokePaint, &state->scissor, ctx->fringeWidth, + strokeWidth, ctx->cache->paths, ctx->cache->npaths); + + // Count triangles + for (i = 0; i < ctx->cache->npaths; i++) { + path = &ctx->cache->paths[i]; + ctx->strokeTriCount += path->nstroke-2; + ctx->drawCallCount++; + } +} + +// Add fonts +int nvgCreateFont(NVGcontext* ctx, const char* name, const char* path) +{ + return fonsAddFont(ctx->fs, name, path); +} + +int nvgCreateFontMem(NVGcontext* ctx, const char* name, const unsigned char* data, int ndata, int freeData) +{ + return fonsAddFontMem(ctx->fs, name, data, ndata, freeData); +} + +int nvgFindFont(NVGcontext* ctx, const char* name) +{ + if (name == NULL) return -1; + return fonsGetFontByName(ctx->fs, name); +} + +// State setting +void nvgFontSize(NVGcontext* ctx, float size) +{ + NVGstate* state = nvg__getState(ctx); + state->fontSize = size; +} + +void nvgFontBlur(NVGcontext* ctx, float blur) +{ + NVGstate* state = nvg__getState(ctx); + state->fontBlur = blur; +} + +void nvgTextLetterSpacing(NVGcontext* ctx, float spacing) +{ + NVGstate* state = nvg__getState(ctx); + state->letterSpacing = spacing; +} + +void nvgTextLineHeight(NVGcontext* ctx, float lineHeight) +{ + NVGstate* state = nvg__getState(ctx); + state->lineHeight = lineHeight; +} + +void nvgTextAlign(NVGcontext* ctx, int align) +{ + NVGstate* state = nvg__getState(ctx); + state->textAlign = align; +} + +void nvgFontFaceId(NVGcontext* ctx, int font) +{ + NVGstate* state = nvg__getState(ctx); + state->fontId = font; +} + +void nvgFontFace(NVGcontext* ctx, const char* font) +{ + NVGstate* state = nvg__getState(ctx); + state->fontId = fonsGetFontByName(ctx->fs, font); +} + +static float nvg__quantize(float a, float d) +{ + return ((int)(a / d + 0.5f)) * d; +} + +static float nvg__getFontScale(NVGstate* state) +{ + return nvg__minf(nvg__quantize(nvg__getAverageScale(state->xform), 0.01f), 4.0f); +} + +static void nvg__flushTextTexture(NVGcontext* ctx) +{ + int dirty[4]; + + if (fonsValidateTexture(ctx->fs, dirty)) { + int fontImage = ctx->fontImages[ctx->fontImageIdx]; + // Update texture + if (fontImage != 0) { + int iw, ih; + const unsigned char* data = fonsGetTextureData(ctx->fs, &iw, &ih); + int x = dirty[0]; + int y = dirty[1]; + int w = dirty[2] - dirty[0]; + int h = dirty[3] - dirty[1]; + ctx->params.renderUpdateTexture(ctx->params.userPtr, fontImage, x,y, w,h, data); + } + } +} + +static int nvg__allocTextAtlas(NVGcontext* ctx) +{ + int iw, ih; + nvg__flushTextTexture(ctx); + if (ctx->fontImageIdx >= NVG_MAX_FONTIMAGES-1) + return 0; + // if next fontImage already have a texture + if (ctx->fontImages[ctx->fontImageIdx+1] != 0) + nvgImageSize(ctx, ctx->fontImages[ctx->fontImageIdx+1], &iw, &ih); + else { // calculate the new font image size and create it. + nvgImageSize(ctx, ctx->fontImages[ctx->fontImageIdx], &iw, &ih); + if (iw > ih) + ih *= 2; + else + iw *= 2; + if (iw > NVG_MAX_FONTIMAGE_SIZE || ih > NVG_MAX_FONTIMAGE_SIZE) + iw = ih = NVG_MAX_FONTIMAGE_SIZE; + ctx->fontImages[ctx->fontImageIdx+1] = ctx->params.renderCreateTexture(ctx->params.userPtr, NVG_TEXTURE_ALPHA, iw, ih, 0, NULL); + } + ++ctx->fontImageIdx; + fonsResetAtlas(ctx->fs, iw, ih); + return 1; +} + +static void nvg__renderText(NVGcontext* ctx, NVGvertex* verts, int nverts) +{ + NVGstate* state = nvg__getState(ctx); + NVGpaint paint = state->fill; + + // Render triangles. + paint.image = ctx->fontImages[ctx->fontImageIdx]; + + // Apply global alpha + paint.innerColor.a *= state->alpha; + paint.outerColor.a *= state->alpha; + + ctx->params.renderTriangles(ctx->params.userPtr, &paint, &state->scissor, verts, nverts); + + ctx->drawCallCount++; + ctx->textTriCount += nverts/3; +} + +float nvgText(NVGcontext* ctx, float x, float y, const char* string, const char* end) +{ + NVGstate* state = nvg__getState(ctx); + FONStextIter iter, prevIter; + FONSquad q; + NVGvertex* verts; + float scale = nvg__getFontScale(state) * ctx->devicePxRatio; + float invscale = 1.0f / scale; + int cverts = 0; + int nverts = 0; + + if (end == NULL) + end = string + strlen(string); + + if (state->fontId == FONS_INVALID) return x; + + fonsSetSize(ctx->fs, state->fontSize*scale); + fonsSetSpacing(ctx->fs, state->letterSpacing*scale); + fonsSetBlur(ctx->fs, state->fontBlur*scale); + fonsSetAlign(ctx->fs, state->textAlign); + fonsSetFont(ctx->fs, state->fontId); + + cverts = nvg__maxi(2, (int)(end - string)) * 6; // conservative estimate. + verts = nvg__allocTempVerts(ctx, cverts); + if (verts == NULL) return x; + + fonsTextIterInit(ctx->fs, &iter, x*scale, y*scale, string, end); + prevIter = iter; + while (fonsTextIterNext(ctx->fs, &iter, &q)) { + float c[4*2]; + if (iter.prevGlyphIndex == -1) { // can not retrieve glyph? + if (!nvg__allocTextAtlas(ctx)) + break; // no memory :( + if (nverts != 0) { + nvg__renderText(ctx, verts, nverts); + nverts = 0; + } + iter = prevIter; + fonsTextIterNext(ctx->fs, &iter, &q); // try again + if (iter.prevGlyphIndex == -1) // still can not find glyph? + break; + } + prevIter = iter; + // Transform corners. + nvgTransformPoint(&c[0],&c[1], state->xform, q.x0*invscale, q.y0*invscale); + nvgTransformPoint(&c[2],&c[3], state->xform, q.x1*invscale, q.y0*invscale); + nvgTransformPoint(&c[4],&c[5], state->xform, q.x1*invscale, q.y1*invscale); + nvgTransformPoint(&c[6],&c[7], state->xform, q.x0*invscale, q.y1*invscale); + // Create triangles + if (nverts+6 <= cverts) { + nvg__vset(&verts[nverts], c[0], c[1], q.s0, q.t0); nverts++; + nvg__vset(&verts[nverts], c[4], c[5], q.s1, q.t1); nverts++; + nvg__vset(&verts[nverts], c[2], c[3], q.s1, q.t0); nverts++; + nvg__vset(&verts[nverts], c[0], c[1], q.s0, q.t0); nverts++; + nvg__vset(&verts[nverts], c[6], c[7], q.s0, q.t1); nverts++; + nvg__vset(&verts[nverts], c[4], c[5], q.s1, q.t1); nverts++; + } + } + + // TODO: add back-end bit to do this just once per frame. + nvg__flushTextTexture(ctx); + + nvg__renderText(ctx, verts, nverts); + + return iter.x; +} + +void nvgTextBox(NVGcontext* ctx, float x, float y, float breakRowWidth, const char* string, const char* end) +{ + NVGstate* state = nvg__getState(ctx); + NVGtextRow rows[2]; + int nrows = 0, i; + int oldAlign = state->textAlign; + int haling = state->textAlign & (NVG_ALIGN_LEFT | NVG_ALIGN_CENTER | NVG_ALIGN_RIGHT); + int valign = state->textAlign & (NVG_ALIGN_TOP | NVG_ALIGN_MIDDLE | NVG_ALIGN_BOTTOM | NVG_ALIGN_BASELINE); + float lineh = 0; + + if (state->fontId == FONS_INVALID) return; + + nvgTextMetrics(ctx, NULL, NULL, &lineh); + + state->textAlign = NVG_ALIGN_LEFT | valign; + + while ((nrows = nvgTextBreakLines(ctx, string, end, breakRowWidth, rows, 2))) { + for (i = 0; i < nrows; i++) { + NVGtextRow* row = &rows[i]; + if (haling & NVG_ALIGN_LEFT) + nvgText(ctx, x, y, row->start, row->end); + else if (haling & NVG_ALIGN_CENTER) + nvgText(ctx, x + breakRowWidth*0.5f - row->width*0.5f, y, row->start, row->end); + else if (haling & NVG_ALIGN_RIGHT) + nvgText(ctx, x + breakRowWidth - row->width, y, row->start, row->end); + y += lineh * state->lineHeight; + } + string = rows[nrows-1].next; + } + + state->textAlign = oldAlign; +} + +int nvgTextGlyphPositions(NVGcontext* ctx, float x, float y, const char* string, const char* end, NVGglyphPosition* positions, int maxPositions) +{ + NVGstate* state = nvg__getState(ctx); + float scale = nvg__getFontScale(state) * ctx->devicePxRatio; + float invscale = 1.0f / scale; + FONStextIter iter, prevIter; + FONSquad q; + int npos = 0; + + if (state->fontId == FONS_INVALID) return 0; + + if (end == NULL) + end = string + strlen(string); + + if (string == end) + return 0; + + fonsSetSize(ctx->fs, state->fontSize*scale); + fonsSetSpacing(ctx->fs, state->letterSpacing*scale); + fonsSetBlur(ctx->fs, state->fontBlur*scale); + fonsSetAlign(ctx->fs, state->textAlign); + fonsSetFont(ctx->fs, state->fontId); + + fonsTextIterInit(ctx->fs, &iter, x*scale, y*scale, string, end); + prevIter = iter; + while (fonsTextIterNext(ctx->fs, &iter, &q)) { + if (iter.prevGlyphIndex < 0 && nvg__allocTextAtlas(ctx)) { // can not retrieve glyph? + iter = prevIter; + fonsTextIterNext(ctx->fs, &iter, &q); // try again + } + prevIter = iter; + positions[npos].str = iter.str; + positions[npos].x = iter.x * invscale; + positions[npos].minx = nvg__minf(iter.x, q.x0) * invscale; + positions[npos].maxx = nvg__maxf(iter.nextx, q.x1) * invscale; + npos++; + if (npos >= maxPositions) + break; + } + + return npos; +} + +enum NVGcodepointType { + NVG_SPACE, + NVG_NEWLINE, + NVG_CHAR, +}; + +int nvgTextBreakLines(NVGcontext* ctx, const char* string, const char* end, float breakRowWidth, NVGtextRow* rows, int maxRows) +{ + NVGstate* state = nvg__getState(ctx); + float scale = nvg__getFontScale(state) * ctx->devicePxRatio; + float invscale = 1.0f / scale; + FONStextIter iter, prevIter; + FONSquad q; + int nrows = 0; + float rowStartX = 0; + float rowWidth = 0; + float rowMinX = 0; + float rowMaxX = 0; + const char* rowStart = NULL; + const char* rowEnd = NULL; + const char* wordStart = NULL; + float wordStartX = 0; + float wordMinX = 0; + const char* breakEnd = NULL; + float breakWidth = 0; + float breakMaxX = 0; + int type = NVG_SPACE, ptype = NVG_SPACE; + unsigned int pcodepoint = 0; + + if (maxRows == 0) return 0; + if (state->fontId == FONS_INVALID) return 0; + + if (end == NULL) + end = string + strlen(string); + + if (string == end) return 0; + + fonsSetSize(ctx->fs, state->fontSize*scale); + fonsSetSpacing(ctx->fs, state->letterSpacing*scale); + fonsSetBlur(ctx->fs, state->fontBlur*scale); + fonsSetAlign(ctx->fs, state->textAlign); + fonsSetFont(ctx->fs, state->fontId); + + breakRowWidth *= scale; + + fonsTextIterInit(ctx->fs, &iter, 0, 0, string, end); + prevIter = iter; + while (fonsTextIterNext(ctx->fs, &iter, &q)) { + if (iter.prevGlyphIndex < 0 && nvg__allocTextAtlas(ctx)) { // can not retrieve glyph? + iter = prevIter; + fonsTextIterNext(ctx->fs, &iter, &q); // try again + } + prevIter = iter; + switch (iter.codepoint) { + case 9: // \t + case 11: // \v + case 12: // \f + case 32: // space + case 0x00a0: // NBSP + type = NVG_SPACE; + break; + case 10: // \n + type = pcodepoint == 13 ? NVG_SPACE : NVG_NEWLINE; + break; + case 13: // \r + type = pcodepoint == 10 ? NVG_SPACE : NVG_NEWLINE; + break; + case 0x0085: // NEL + type = NVG_NEWLINE; + break; + default: + type = NVG_CHAR; + break; + } + + if (type == NVG_NEWLINE) { + // Always handle new lines. + rows[nrows].start = rowStart != NULL ? rowStart : iter.str; + rows[nrows].end = rowEnd != NULL ? rowEnd : iter.str; + rows[nrows].width = rowWidth * invscale; + rows[nrows].minx = rowMinX * invscale; + rows[nrows].maxx = rowMaxX * invscale; + rows[nrows].next = iter.next; + nrows++; + if (nrows >= maxRows) + return nrows; + // Set null break point + breakEnd = rowStart; + breakWidth = 0.0; + breakMaxX = 0.0; + // Indicate to skip the white space at the beginning of the row. + rowStart = NULL; + rowEnd = NULL; + rowWidth = 0; + rowMinX = rowMaxX = 0; + } else { + if (rowStart == NULL) { + // Skip white space until the beginning of the line + if (type == NVG_CHAR) { + // The current char is the row so far + rowStartX = iter.x; + rowStart = iter.str; + rowEnd = iter.next; + rowWidth = iter.nextx - rowStartX; // q.x1 - rowStartX; + rowMinX = q.x0 - rowStartX; + rowMaxX = q.x1 - rowStartX; + wordStart = iter.str; + wordStartX = iter.x; + wordMinX = q.x0 - rowStartX; + // Set null break point + breakEnd = rowStart; + breakWidth = 0.0; + breakMaxX = 0.0; + } + } else { + float nextWidth = iter.nextx - rowStartX; + + // track last non-white space character + if (type == NVG_CHAR) { + rowEnd = iter.next; + rowWidth = iter.nextx - rowStartX; + rowMaxX = q.x1 - rowStartX; + } + // track last end of a word + if (ptype == NVG_CHAR && type == NVG_SPACE) { + breakEnd = iter.str; + breakWidth = rowWidth; + breakMaxX = rowMaxX; + } + // track last beginning of a word + if (ptype == NVG_SPACE && type == NVG_CHAR) { + wordStart = iter.str; + wordStartX = iter.x; + wordMinX = q.x0 - rowStartX; + } + + // Break to new line when a character is beyond break width. + if (type == NVG_CHAR && nextWidth > breakRowWidth) { + // The run length is too long, need to break to new line. + if (breakEnd == rowStart) { + // The current word is longer than the row length, just break it from here. + rows[nrows].start = rowStart; + rows[nrows].end = iter.str; + rows[nrows].width = rowWidth * invscale; + rows[nrows].minx = rowMinX * invscale; + rows[nrows].maxx = rowMaxX * invscale; + rows[nrows].next = iter.str; + nrows++; + if (nrows >= maxRows) + return nrows; + rowStartX = iter.x; + rowStart = iter.str; + rowEnd = iter.next; + rowWidth = iter.nextx - rowStartX; + rowMinX = q.x0 - rowStartX; + rowMaxX = q.x1 - rowStartX; + wordStart = iter.str; + wordStartX = iter.x; + wordMinX = q.x0 - rowStartX; + } else { + // Break the line from the end of the last word, and start new line from the beginning of the new. + rows[nrows].start = rowStart; + rows[nrows].end = breakEnd; + rows[nrows].width = breakWidth * invscale; + rows[nrows].minx = rowMinX * invscale; + rows[nrows].maxx = breakMaxX * invscale; + rows[nrows].next = wordStart; + nrows++; + if (nrows >= maxRows) + return nrows; + rowStartX = wordStartX; + rowStart = wordStart; + rowEnd = iter.next; + rowWidth = iter.nextx - rowStartX; + rowMinX = wordMinX; + rowMaxX = q.x1 - rowStartX; + // No change to the word start + } + // Set null break point + breakEnd = rowStart; + breakWidth = 0.0; + breakMaxX = 0.0; + } + } + } + + pcodepoint = iter.codepoint; + ptype = type; + } + + // Break the line from the end of the last word, and start new line from the beginning of the new. + if (rowStart != NULL) { + rows[nrows].start = rowStart; + rows[nrows].end = rowEnd; + rows[nrows].width = rowWidth * invscale; + rows[nrows].minx = rowMinX * invscale; + rows[nrows].maxx = rowMaxX * invscale; + rows[nrows].next = end; + nrows++; + } + + return nrows; +} + +float nvgTextBounds(NVGcontext* ctx, float x, float y, const char* string, const char* end, float* bounds) +{ + NVGstate* state = nvg__getState(ctx); + float scale = nvg__getFontScale(state) * ctx->devicePxRatio; + float invscale = 1.0f / scale; + float width; + + if (state->fontId == FONS_INVALID) return 0; + + fonsSetSize(ctx->fs, state->fontSize*scale); + fonsSetSpacing(ctx->fs, state->letterSpacing*scale); + fonsSetBlur(ctx->fs, state->fontBlur*scale); + fonsSetAlign(ctx->fs, state->textAlign); + fonsSetFont(ctx->fs, state->fontId); + + width = fonsTextBounds(ctx->fs, x*scale, y*scale, string, end, bounds); + if (bounds != NULL) { + // Use line bounds for height. + fonsLineBounds(ctx->fs, y*scale, &bounds[1], &bounds[3]); + bounds[0] *= invscale; + bounds[1] *= invscale; + bounds[2] *= invscale; + bounds[3] *= invscale; + } + return width * invscale; +} + +void nvgTextBoxBounds(NVGcontext* ctx, float x, float y, float breakRowWidth, const char* string, const char* end, float* bounds) +{ + NVGstate* state = nvg__getState(ctx); + NVGtextRow rows[2]; + float scale = nvg__getFontScale(state) * ctx->devicePxRatio; + float invscale = 1.0f / scale; + int nrows = 0, i; + int oldAlign = state->textAlign; + int haling = state->textAlign & (NVG_ALIGN_LEFT | NVG_ALIGN_CENTER | NVG_ALIGN_RIGHT); + int valign = state->textAlign & (NVG_ALIGN_TOP | NVG_ALIGN_MIDDLE | NVG_ALIGN_BOTTOM | NVG_ALIGN_BASELINE); + float lineh = 0, rminy = 0, rmaxy = 0; + float minx, miny, maxx, maxy; + + if (state->fontId == FONS_INVALID) { + if (bounds != NULL) + bounds[0] = bounds[1] = bounds[2] = bounds[3] = 0.0f; + return; + } + + nvgTextMetrics(ctx, NULL, NULL, &lineh); + + state->textAlign = NVG_ALIGN_LEFT | valign; + + minx = maxx = x; + miny = maxy = y; + + fonsSetSize(ctx->fs, state->fontSize*scale); + fonsSetSpacing(ctx->fs, state->letterSpacing*scale); + fonsSetBlur(ctx->fs, state->fontBlur*scale); + fonsSetAlign(ctx->fs, state->textAlign); + fonsSetFont(ctx->fs, state->fontId); + fonsLineBounds(ctx->fs, 0, &rminy, &rmaxy); + rminy *= invscale; + rmaxy *= invscale; + + while ((nrows = nvgTextBreakLines(ctx, string, end, breakRowWidth, rows, 2))) { + for (i = 0; i < nrows; i++) { + NVGtextRow* row = &rows[i]; + float rminx, rmaxx, dx = 0; + // Horizontal bounds + if (haling & NVG_ALIGN_LEFT) + dx = 0; + else if (haling & NVG_ALIGN_CENTER) + dx = breakRowWidth*0.5f - row->width*0.5f; + else if (haling & NVG_ALIGN_RIGHT) + dx = breakRowWidth - row->width; + rminx = x + row->minx + dx; + rmaxx = x + row->maxx + dx; + minx = nvg__minf(minx, rminx); + maxx = nvg__maxf(maxx, rmaxx); + // Vertical bounds. + miny = nvg__minf(miny, y + rminy); + maxy = nvg__maxf(maxy, y + rmaxy); + + y += lineh * state->lineHeight; + } + string = rows[nrows-1].next; + } + + state->textAlign = oldAlign; + + if (bounds != NULL) { + bounds[0] = minx; + bounds[1] = miny; + bounds[2] = maxx; + bounds[3] = maxy; + } +} + +void nvgTextMetrics(NVGcontext* ctx, float* ascender, float* descender, float* lineh) +{ + NVGstate* state = nvg__getState(ctx); + float scale = nvg__getFontScale(state) * ctx->devicePxRatio; + float invscale = 1.0f / scale; + + if (state->fontId == FONS_INVALID) return; + + fonsSetSize(ctx->fs, state->fontSize*scale); + fonsSetSpacing(ctx->fs, state->letterSpacing*scale); + fonsSetBlur(ctx->fs, state->fontBlur*scale); + fonsSetAlign(ctx->fs, state->textAlign); + fonsSetFont(ctx->fs, state->fontId); + + fonsVertMetrics(ctx->fs, ascender, descender, lineh); + if (ascender != NULL) + *ascender *= invscale; + if (descender != NULL) + *descender *= invscale; + if (lineh != NULL) + *lineh *= invscale; +} +// vim: ft=c nu noet ts=4 diff --git a/dpf/dgl/src/nanovg/nanovg.h b/dpf/dgl/src/nanovg/nanovg.h new file mode 100644 index 0000000..5b27c9b --- /dev/null +++ b/dpf/dgl/src/nanovg/nanovg.h @@ -0,0 +1,620 @@ +// +// Copyright (c) 2013 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef NANOVG_H +#define NANOVG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define NVG_PI 3.14159265358979323846264338327f + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union +#endif + +typedef struct NVGcontext NVGcontext; + +struct NVGcolor { + union { + float rgba[4]; + struct { + float r,g,b,a; + }; + }; +}; +typedef struct NVGcolor NVGcolor; + +struct NVGpaint { + float xform[6]; + float extent[2]; + float radius; + float feather; + NVGcolor innerColor; + NVGcolor outerColor; + int image; +}; +typedef struct NVGpaint NVGpaint; + +enum NVGwinding { + NVG_CCW = 1, // Winding for solid shapes + NVG_CW = 2, // Winding for holes +}; + +enum NVGsolidity { + NVG_SOLID = 1, // CCW + NVG_HOLE = 2, // CW +}; + +enum NVGlineCap { + NVG_BUTT, + NVG_ROUND, + NVG_SQUARE, + NVG_BEVEL, + NVG_MITER, +}; + +enum NVGalign { + // Horizontal align + NVG_ALIGN_LEFT = 1<<0, // Default, align text horizontally to left. + NVG_ALIGN_CENTER = 1<<1, // Align text horizontally to center. + NVG_ALIGN_RIGHT = 1<<2, // Align text horizontally to right. + // Vertical align + NVG_ALIGN_TOP = 1<<3, // Align text vertically to top. + NVG_ALIGN_MIDDLE = 1<<4, // Align text vertically to middle. + NVG_ALIGN_BOTTOM = 1<<5, // Align text vertically to bottom. + NVG_ALIGN_BASELINE = 1<<6, // Default, align text vertically to baseline. +}; + +struct NVGglyphPosition { + const char* str; // Position of the glyph in the input string. + float x; // The x-coordinate of the logical glyph position. + float minx, maxx; // The bounds of the glyph shape. +}; +typedef struct NVGglyphPosition NVGglyphPosition; + +struct NVGtextRow { + const char* start; // Pointer to the input text where the row starts. + const char* end; // Pointer to the input text where the row ends (one past the last character). + const char* next; // Pointer to the beginning of the next row. + float width; // Logical width of the row. + float minx, maxx; // Actual bounds of the row. Logical with and bounds can differ because of kerning and some parts over extending. +}; +typedef struct NVGtextRow NVGtextRow; + +enum NVGimageFlags { + NVG_IMAGE_GENERATE_MIPMAPS = 1<<0, // Generate mipmaps during creation of the image. + NVG_IMAGE_REPEATX = 1<<1, // Repeat image in X direction. + NVG_IMAGE_REPEATY = 1<<2, // Repeat image in Y direction. + NVG_IMAGE_FLIPY = 1<<3, // Flips (inverses) image in Y direction when rendered. + NVG_IMAGE_PREMULTIPLIED = 1<<4, // Image data has premultiplied alpha. +}; + +// Begin drawing a new frame +// Calls to nanovg drawing API should be wrapped in nvgBeginFrame() & nvgEndFrame() +// nvgBeginFrame() defines the size of the window to render to in relation currently +// set viewport (i.e. glViewport on GL backends). Device pixel ration allows to +// control the rendering on Hi-DPI devices. +// For example, GLFW returns two dimension for an opened window: window size and +// frame buffer size. In that case you would set windowWidth/Height to the window size +// devicePixelRatio to: frameBufferWidth / windowWidth. +void nvgBeginFrame(NVGcontext* ctx, int windowWidth, int windowHeight, float devicePixelRatio); + +// Cancels drawing the current frame. +void nvgCancelFrame(NVGcontext* ctx); + +// Ends drawing flushing remaining render state. +void nvgEndFrame(NVGcontext* ctx); + +// +// Color utils +// +// Colors in NanoVG are stored as unsigned ints in ABGR format. + +// Returns a color value from red, green, blue values. Alpha will be set to 255 (1.0f). +NVGcolor nvgRGB(unsigned char r, unsigned char g, unsigned char b); + +// Returns a color value from red, green, blue values. Alpha will be set to 1.0f. +NVGcolor nvgRGBf(float r, float g, float b); + + +// Returns a color value from red, green, blue and alpha values. +NVGcolor nvgRGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a); + +// Returns a color value from red, green, blue and alpha values. +NVGcolor nvgRGBAf(float r, float g, float b, float a); + + +// Linearly interpolates from color c0 to c1, and returns resulting color value. +NVGcolor nvgLerpRGBA(NVGcolor c0, NVGcolor c1, float u); + +// Sets transparency of a color value. +NVGcolor nvgTransRGBA(NVGcolor c0, unsigned char a); + +// Sets transparency of a color value. +NVGcolor nvgTransRGBAf(NVGcolor c0, float a); + +// Returns color value specified by hue, saturation and lightness. +// HSL values are all in range [0..1], alpha will be set to 255. +NVGcolor nvgHSL(float h, float s, float l); + +// Returns color value specified by hue, saturation and lightness and alpha. +// HSL values are all in range [0..1], alpha in range [0..255] +NVGcolor nvgHSLA(float h, float s, float l, unsigned char a); + +// +// State Handling +// +// NanoVG contains state which represents how paths will be rendered. +// The state contains transform, fill and stroke styles, text and font styles, +// and scissor clipping. + +// Pushes and saves the current render state into a state stack. +// A matching nvgRestore() must be used to restore the state. +void nvgSave(NVGcontext* ctx); + +// Pops and restores current render state. +void nvgRestore(NVGcontext* ctx); + +// Resets current render state to default values. Does not affect the render state stack. +void nvgReset(NVGcontext* ctx); + +// +// Render styles +// +// Fill and stroke render style can be either a solid color or a paint which is a gradient or a pattern. +// Solid color is simply defined as a color value, different kinds of paints can be created +// using nvgLinearGradient(), nvgBoxGradient(), nvgRadialGradient() and nvgImagePattern(). +// +// Current render style can be saved and restored using nvgSave() and nvgRestore(). + +// Sets current stroke style to a solid color. +void nvgStrokeColor(NVGcontext* ctx, NVGcolor color); + +// Sets current stroke style to a paint, which can be a one of the gradients or a pattern. +void nvgStrokePaint(NVGcontext* ctx, NVGpaint paint); + +// Sets current fill style to a solid color. +void nvgFillColor(NVGcontext* ctx, NVGcolor color); + +// Sets current fill style to a paint, which can be a one of the gradients or a pattern. +void nvgFillPaint(NVGcontext* ctx, NVGpaint paint); + +// Sets the miter limit of the stroke style. +// Miter limit controls when a sharp corner is beveled. +void nvgMiterLimit(NVGcontext* ctx, float limit); + +// Sets the stroke width of the stroke style. +void nvgStrokeWidth(NVGcontext* ctx, float size); + +// Sets how the end of the line (cap) is drawn, +// Can be one of: NVG_BUTT (default), NVG_ROUND, NVG_SQUARE. +void nvgLineCap(NVGcontext* ctx, int cap); + +// Sets how sharp path corners are drawn. +// Can be one of NVG_MITER (default), NVG_ROUND, NVG_BEVEL. +void nvgLineJoin(NVGcontext* ctx, int join); + +// Sets the transparency applied to all rendered shapes. +// Already transparent paths will get proportionally more transparent as well. +void nvgGlobalAlpha(NVGcontext* ctx, float alpha); + +// +// Transforms +// +// The paths, gradients, patterns and scissor region are transformed by an transformation +// matrix at the time when they are passed to the API. +// The current transformation matrix is a affine matrix: +// [sx kx tx] +// [ky sy ty] +// [ 0 0 1] +// Where: sx,sy define scaling, kx,ky skewing, and tx,ty translation. +// The last row is assumed to be 0,0,1 and is not stored. +// +// Apart from nvgResetTransform(), each transformation function first creates +// specific transformation matrix and pre-multiplies the current transformation by it. +// +// Current coordinate system (transformation) can be saved and restored using nvgSave() and nvgRestore(). + +// Resets current transform to a identity matrix. +void nvgResetTransform(NVGcontext* ctx); + +// Premultiplies current coordinate system by specified matrix. +// The parameters are interpreted as matrix as follows: +// [a c e] +// [b d f] +// [0 0 1] +void nvgTransform(NVGcontext* ctx, float a, float b, float c, float d, float e, float f); + +// Translates current coordinate system. +void nvgTranslate(NVGcontext* ctx, float x, float y); + +// Rotates current coordinate system. Angle is specified in radians. +void nvgRotate(NVGcontext* ctx, float angle); + +// Skews the current coordinate system along X axis. Angle is specified in radians. +void nvgSkewX(NVGcontext* ctx, float angle); + +// Skews the current coordinate system along Y axis. Angle is specified in radians. +void nvgSkewY(NVGcontext* ctx, float angle); + +// Scales the current coordinate system. +void nvgScale(NVGcontext* ctx, float x, float y); + +// Stores the top part (a-f) of the current transformation matrix in to the specified buffer. +// [a c e] +// [b d f] +// [0 0 1] +// There should be space for 6 floats in the return buffer for the values a-f. +void nvgCurrentTransform(NVGcontext* ctx, float* xform); + + +// The following functions can be used to make calculations on 2x3 transformation matrices. +// A 2x3 matrix is represented as float[6]. + +// Sets the transform to identity matrix. +void nvgTransformIdentity(float* dst); + +// Sets the transform to translation matrix matrix. +void nvgTransformTranslate(float* dst, float tx, float ty); + +// Sets the transform to scale matrix. +void nvgTransformScale(float* dst, float sx, float sy); + +// Sets the transform to rotate matrix. Angle is specified in radians. +void nvgTransformRotate(float* dst, float a); + +// Sets the transform to skew-x matrix. Angle is specified in radians. +void nvgTransformSkewX(float* dst, float a); + +// Sets the transform to skew-y matrix. Angle is specified in radians. +void nvgTransformSkewY(float* dst, float a); + +// Sets the transform to the result of multiplication of two transforms, of A = A*B. +void nvgTransformMultiply(float* dst, const float* src); + +// Sets the transform to the result of multiplication of two transforms, of A = B*A. +void nvgTransformPremultiply(float* dst, const float* src); + +// Sets the destination to inverse of specified transform. +// Returns 1 if the inverse could be calculated, else 0. +int nvgTransformInverse(float* dst, const float* src); + +// Transform a point by given transform. +void nvgTransformPoint(float* dstx, float* dsty, const float* xform, float srcx, float srcy); + +// Converts degrees to radians and vice versa. +float nvgDegToRad(float deg); +float nvgRadToDeg(float rad); + +// +// Images +// +// NanoVG allows you to load jpg, png, psd, tga, pic and gif files to be used for rendering. +// In addition you can upload your own image. The image loading is provided by stb_image. +// The parameter imageFlags is combination of flags defined in NVGimageFlags. + +// Creates image by loading it from the disk from specified file name. +// Returns handle to the image. +int nvgCreateImage(NVGcontext* ctx, const char* filename, int imageFlags); + +// Creates image by loading it from the specified chunk of memory. +// Returns handle to the image. +int nvgCreateImageMem(NVGcontext* ctx, int imageFlags, const unsigned char* data, int ndata); + +// Creates image from specified image data. +// Returns handle to the image. +int nvgCreateImageRGBA(NVGcontext* ctx, int w, int h, int imageFlags, const unsigned char* data); + +// Updates image data specified by image handle. +void nvgUpdateImage(NVGcontext* ctx, int image, const unsigned char* data); + +// Returns the dimensions of a created image. +void nvgImageSize(NVGcontext* ctx, int image, int* w, int* h); + +// Deletes created image. +void nvgDeleteImage(NVGcontext* ctx, int image); + +// +// Paints +// +// NanoVG supports four types of paints: linear gradient, box gradient, radial gradient and image pattern. +// These can be used as paints for strokes and fills. + +// Creates and returns a linear gradient. Parameters (sx,sy)-(ex,ey) specify the start and end coordinates +// of the linear gradient, icol specifies the start color and ocol the end color. +// The gradient is transformed by the current transform when it is passed to nvgFillPaint() or nvgStrokePaint(). +NVGpaint nvgLinearGradient(NVGcontext* ctx, float sx, float sy, float ex, float ey, + NVGcolor icol, NVGcolor ocol); + +// Creates and returns a box gradient. Box gradient is a feathered rounded rectangle, it is useful for rendering +// drop shadows or highlights for boxes. Parameters (x,y) define the top-left corner of the rectangle, +// (w,h) define the size of the rectangle, r defines the corner radius, and f feather. Feather defines how blurry +// the border of the rectangle is. Parameter icol specifies the inner color and ocol the outer color of the gradient. +// The gradient is transformed by the current transform when it is passed to nvgFillPaint() or nvgStrokePaint(). +NVGpaint nvgBoxGradient(NVGcontext* ctx, float x, float y, float w, float h, + float r, float f, NVGcolor icol, NVGcolor ocol); + +// Creates and returns a radial gradient. Parameters (cx,cy) specify the center, inr and outr specify +// the inner and outer radius of the gradient, icol specifies the start color and ocol the end color. +// The gradient is transformed by the current transform when it is passed to nvgFillPaint() or nvgStrokePaint(). +NVGpaint nvgRadialGradient(NVGcontext* ctx, float cx, float cy, float inr, float outr, + NVGcolor icol, NVGcolor ocol); + +// Creates and returns an image patter. Parameters (ox,oy) specify the left-top location of the image pattern, +// (ex,ey) the size of one image, angle rotation around the top-left corner, image is handle to the image to render. +// The gradient is transformed by the current transform when it is passed to nvgFillPaint() or nvgStrokePaint(). +NVGpaint nvgImagePattern(NVGcontext* ctx, float ox, float oy, float ex, float ey, + float angle, int image, float alpha); + +// +// Scissoring +// +// Scissoring allows you to clip the rendering into a rectangle. This is useful for various +// user interface cases like rendering a text edit or a timeline. + +// Sets the current scissor rectangle. +// The scissor rectangle is transformed by the current transform. +void nvgScissor(NVGcontext* ctx, float x, float y, float w, float h); + +// Intersects current scissor rectangle with the specified rectangle. +// The scissor rectangle is transformed by the current transform. +// Note: in case the rotation of previous scissor rect differs from +// the current one, the intersection will be done between the specified +// rectangle and the previous scissor rectangle transformed in the current +// transform space. The resulting shape is always rectangle. +void nvgIntersectScissor(NVGcontext* ctx, float x, float y, float w, float h); + +// Reset and disables scissoring. +void nvgResetScissor(NVGcontext* ctx); + +// +// Paths +// +// Drawing a new shape starts with nvgBeginPath(), it clears all the currently defined paths. +// Then you define one or more paths and sub-paths which describe the shape. The are functions +// to draw common shapes like rectangles and circles, and lower level step-by-step functions, +// which allow to define a path curve by curve. +// +// NanoVG uses even-odd fill rule to draw the shapes. Solid shapes should have counter clockwise +// winding and holes should have counter clockwise order. To specify winding of a path you can +// call nvgPathWinding(). This is useful especially for the common shapes, which are drawn CCW. +// +// Finally you can fill the path using current fill style by calling nvgFill(), and stroke it +// with current stroke style by calling nvgStroke(). +// +// The curve segments and sub-paths are transformed by the current transform. + +// Clears the current path and sub-paths. +void nvgBeginPath(NVGcontext* ctx); + +// Starts new sub-path with specified point as first point. +void nvgMoveTo(NVGcontext* ctx, float x, float y); + +// Adds line segment from the last point in the path to the specified point. +void nvgLineTo(NVGcontext* ctx, float x, float y); + +// Adds cubic bezier segment from last point in the path via two control points to the specified point. +void nvgBezierTo(NVGcontext* ctx, float c1x, float c1y, float c2x, float c2y, float x, float y); + +// Adds quadratic bezier segment from last point in the path via a control point to the specified point. +void nvgQuadTo(NVGcontext* ctx, float cx, float cy, float x, float y); + +// Adds an arc segment at the corner defined by the last path point, and two specified points. +void nvgArcTo(NVGcontext* ctx, float x1, float y1, float x2, float y2, float radius); + +// Closes current sub-path with a line segment. +void nvgClosePath(NVGcontext* ctx); + +// Sets the current sub-path winding, see NVGwinding and NVGsolidity. +void nvgPathWinding(NVGcontext* ctx, int dir); + +// Creates new circle arc shaped sub-path. The arc center is at cx,cy, the arc radius is r, +// and the arc is drawn from angle a0 to a1, and swept in direction dir (NVG_CCW, or NVG_CW). +// Angles are specified in radians. +void nvgArc(NVGcontext* ctx, float cx, float cy, float r, float a0, float a1, int dir); + +// Creates new rectangle shaped sub-path. +void nvgRect(NVGcontext* ctx, float x, float y, float w, float h); + +// Creates new rounded rectangle shaped sub-path. +void nvgRoundedRect(NVGcontext* ctx, float x, float y, float w, float h, float r); + +// Creates new ellipse shaped sub-path. +void nvgEllipse(NVGcontext* ctx, float cx, float cy, float rx, float ry); + +// Creates new circle shaped sub-path. +void nvgCircle(NVGcontext* ctx, float cx, float cy, float r); + +// Fills the current path with current fill style. +void nvgFill(NVGcontext* ctx); + +// Fills the current path with current stroke style. +void nvgStroke(NVGcontext* ctx); + + +// +// Text +// +// NanoVG allows you to load .ttf files and use the font to render text. +// +// The appearance of the text can be defined by setting the current text style +// and by specifying the fill color. Common text and font settings such as +// font size, letter spacing and text align are supported. Font blur allows you +// to create simple text effects such as drop shadows. +// +// At render time the font face can be set based on the font handles or name. +// +// Font measure functions return values in local space, the calculations are +// carried in the same resolution as the final rendering. This is done because +// the text glyph positions are snapped to the nearest pixels sharp rendering. +// +// The local space means that values are not rotated or scale as per the current +// transformation. For example if you set font size to 12, which would mean that +// line height is 16, then regardless of the current scaling and rotation, the +// returned line height is always 16. Some measures may vary because of the scaling +// since aforementioned pixel snapping. +// +// While this may sound a little odd, the setup allows you to always render the +// same way regardless of scaling. I.e. following works regardless of scaling: +// +// const char* txt = "Text me up."; +// nvgTextBounds(vg, x,y, txt, NULL, bounds); +// nvgBeginPath(vg); +// nvgRoundedRect(vg, bounds[0],bounds[1], bounds[2]-bounds[0], bounds[3]-bounds[1]); +// nvgFill(vg); +// +// Note: currently only solid color fill is supported for text. + +// Creates font by loading it from the disk from specified file name. +// Returns handle to the font. +int nvgCreateFont(NVGcontext* ctx, const char* name, const char* filename); + +// Creates image by loading it from the specified memory chunk. +// Returns handle to the font. +int nvgCreateFontMem(NVGcontext* ctx, const char* name, const unsigned char* data, int ndata, int freeData); + +// Finds a loaded font of specified name, and returns handle to it, or -1 if the font is not found. +int nvgFindFont(NVGcontext* ctx, const char* name); + +// Sets the font size of current text style. +void nvgFontSize(NVGcontext* ctx, float size); + +// Sets the blur of current text style. +void nvgFontBlur(NVGcontext* ctx, float blur); + +// Sets the letter spacing of current text style. +void nvgTextLetterSpacing(NVGcontext* ctx, float spacing); + +// Sets the proportional line height of current text style. The line height is specified as multiple of font size. +void nvgTextLineHeight(NVGcontext* ctx, float lineHeight); + +// Sets the text align of current text style, see NVGalign for options. +void nvgTextAlign(NVGcontext* ctx, int align); + +// Sets the font face based on specified id of current text style. +void nvgFontFaceId(NVGcontext* ctx, int font); + +// Sets the font face based on specified name of current text style. +void nvgFontFace(NVGcontext* ctx, const char* font); + +// Draws text string at specified location. If end is specified only the sub-string up to the end is drawn. +float nvgText(NVGcontext* ctx, float x, float y, const char* string, const char* end); + +// Draws multi-line text string at specified location wrapped at the specified width. If end is specified only the sub-string up to the end is drawn. +// White space is stripped at the beginning of the rows, the text is split at word boundaries or when new-line characters are encountered. +// Words longer than the max width are slit at nearest character (i.e. no hyphenation). +void nvgTextBox(NVGcontext* ctx, float x, float y, float breakRowWidth, const char* string, const char* end); + +// Measures the specified text string. Parameter bounds should be a pointer to float[4], +// if the bounding box of the text should be returned. The bounds value are [xmin,ymin, xmax,ymax] +// Returns the horizontal advance of the measured text (i.e. where the next character should drawn). +// Measured values are returned in local coordinate space. +float nvgTextBounds(NVGcontext* ctx, float x, float y, const char* string, const char* end, float* bounds); + +// Measures the specified multi-text string. Parameter bounds should be a pointer to float[4], +// if the bounding box of the text should be returned. The bounds value are [xmin,ymin, xmax,ymax] +// Measured values are returned in local coordinate space. +void nvgTextBoxBounds(NVGcontext* ctx, float x, float y, float breakRowWidth, const char* string, const char* end, float* bounds); + +// Calculates the glyph x positions of the specified text. If end is specified only the sub-string will be used. +// Measured values are returned in local coordinate space. +int nvgTextGlyphPositions(NVGcontext* ctx, float x, float y, const char* string, const char* end, NVGglyphPosition* positions, int maxPositions); + +// Returns the vertical metrics based on the current text style. +// Measured values are returned in local coordinate space. +void nvgTextMetrics(NVGcontext* ctx, float* ascender, float* descender, float* lineh); + +// Breaks the specified text into lines. If end is specified only the sub-string will be used. +// White space is stripped at the beginning of the rows, the text is split at word boundaries or when new-line characters are encountered. +// Words longer than the max width are slit at nearest character (i.e. no hyphenation). +int nvgTextBreakLines(NVGcontext* ctx, const char* string, const char* end, float breakRowWidth, NVGtextRow* rows, int maxRows); + +// +// Internal Render API +// +enum NVGtexture { + NVG_TEXTURE_ALPHA = 0x01, + NVG_TEXTURE_RGBA = 0x02, +}; + +struct NVGscissor { + float xform[6]; + float extent[2]; +}; +typedef struct NVGscissor NVGscissor; + +struct NVGvertex { + float x,y,u,v; +}; +typedef struct NVGvertex NVGvertex; + +struct NVGpath { + int first; + int count; + unsigned char closed; + int nbevel; + NVGvertex* fill; + int nfill; + NVGvertex* stroke; + int nstroke; + int winding; + int convex; +}; +typedef struct NVGpath NVGpath; + +struct NVGparams { + void* userPtr; + int edgeAntiAlias; + int (*renderCreate)(void* uptr); + int (*renderCreateTexture)(void* uptr, int type, int w, int h, int imageFlags, const unsigned char* data); + int (*renderDeleteTexture)(void* uptr, int image); + int (*renderUpdateTexture)(void* uptr, int image, int x, int y, int w, int h, const unsigned char* data); + int (*renderGetTextureSize)(void* uptr, int image, int* w, int* h); + void (*renderViewport)(void* uptr, int width, int height); + void (*renderCancel)(void* uptr); + void (*renderFlush)(void* uptr); + void (*renderFill)(void* uptr, NVGpaint* paint, NVGscissor* scissor, float fringe, const float* bounds, const NVGpath* paths, int npaths); + void (*renderStroke)(void* uptr, NVGpaint* paint, NVGscissor* scissor, float fringe, float strokeWidth, const NVGpath* paths, int npaths); + void (*renderTriangles)(void* uptr, NVGpaint* paint, NVGscissor* scissor, const NVGvertex* verts, int nverts); + void (*renderDelete)(void* uptr); +}; +typedef struct NVGparams NVGparams; + +// Constructor and destructor, called by the render back-end. +NVGcontext* nvgCreateInternal(NVGparams* params); +void nvgDeleteInternal(NVGcontext* ctx); + +NVGparams* nvgInternalParams(NVGcontext* ctx); + +// Debug function to dump cached path data. +void nvgDebugDumpPathCache(NVGcontext* ctx); + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#define NVG_NOTUSED(v) for (;;) { (void)(1 ? (void)0 : ( (void)(v) ) ); break; } + +#ifdef __cplusplus +} +#endif + +#endif // NANOVG_H diff --git a/dpf/dgl/src/nanovg/nanovg_gl.h b/dpf/dgl/src/nanovg/nanovg_gl.h new file mode 100644 index 0000000..0b3c4c9 --- /dev/null +++ b/dpf/dgl/src/nanovg/nanovg_gl.h @@ -0,0 +1,1525 @@ +// +// Copyright (c) 2009-2013 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// +#ifndef NANOVG_GL_H +#define NANOVG_GL_H + +#ifdef __cplusplus +extern "C" { +#endif + +// Create flags + +enum NVGcreateFlags { + // Flag indicating if geometry based anti-aliasing is used (may not be needed when using MSAA). + NVG_ANTIALIAS = 1<<0, + // Flag indicating if strokes should be drawn using stencil buffer. The rendering will be a little + // slower, but path overlaps (i.e. self-intersecting or sharp turns) will be drawn just once. + NVG_STENCIL_STROKES = 1<<1, + // Flag indicating that additional debug checks are done. + NVG_DEBUG = 1<<2, +}; + +#if defined NANOVG_GL2_IMPLEMENTATION +# define NANOVG_GL2 1 +# define NANOVG_GL_IMPLEMENTATION 1 +#elif defined NANOVG_GL3_IMPLEMENTATION +# define NANOVG_GL3 1 +# define NANOVG_GL_IMPLEMENTATION 1 +# define NANOVG_GL_USE_UNIFORMBUFFER 1 +#elif defined NANOVG_GLES2_IMPLEMENTATION +# define NANOVG_GLES2 1 +# define NANOVG_GL_IMPLEMENTATION 1 +#elif defined NANOVG_GLES3_IMPLEMENTATION +# define NANOVG_GLES3 1 +# define NANOVG_GL_IMPLEMENTATION 1 +#endif + +#define NANOVG_GL_USE_STATE_FILTER (1) + +// Creates NanoVG contexts for different OpenGL (ES) versions. +// Flags should be combination of the create flags above. + +#if defined NANOVG_GL2 + +NVGcontext* nvgCreateGL2(int flags); +void nvgDeleteGL2(NVGcontext* ctx); + +#endif + +#if defined NANOVG_GL3 + +NVGcontext* nvgCreateGL3(int flags); +void nvgDeleteGL3(NVGcontext* ctx); + +#endif + +#if defined NANOVG_GLES2 + +NVGcontext* nvgCreateGLES2(int flags); +void nvgDeleteGLES2(NVGcontext* ctx); + +#endif + +#if defined NANOVG_GLES3 + +NVGcontext* nvgCreateGLES3(int flags); +void nvgDeleteGLES3(NVGcontext* ctx); + +#endif + +// These are additional flags on top of NVGimageFlags. +enum NVGimageFlagsGL { + NVG_IMAGE_NODELETE = 1<<16, // Do not delete GL texture handle. +}; + +int nvglCreateImageFromHandle(NVGcontext* ctx, GLuint textureId, int w, int h, int flags); +GLuint nvglImageHandle(NVGcontext* ctx, int image); + + +#ifdef __cplusplus +} +#endif + +#endif /* NANOVG_GL_H */ + +#ifdef NANOVG_GL_IMPLEMENTATION + +#include +#include +#include +#include +#include "nanovg.h" + +enum GLNVGuniformLoc { + GLNVG_LOC_VIEWSIZE, + GLNVG_LOC_TEX, + GLNVG_LOC_FRAG, + GLNVG_MAX_LOCS +}; + +enum GLNVGshaderType { + NSVG_SHADER_FILLGRAD, + NSVG_SHADER_FILLIMG, + NSVG_SHADER_SIMPLE, + NSVG_SHADER_IMG +}; + +#if NANOVG_GL_USE_UNIFORMBUFFER +enum GLNVGuniformBindings { + GLNVG_FRAG_BINDING = 0, +}; +#endif + +struct GLNVGshader { + GLuint prog; + GLuint frag; + GLuint vert; + GLint loc[GLNVG_MAX_LOCS]; +}; +typedef struct GLNVGshader GLNVGshader; + +struct GLNVGtexture { + int id; + GLuint tex; + int width, height; + int type; + int flags; +}; +typedef struct GLNVGtexture GLNVGtexture; + +enum GLNVGcallType { + GLNVG_NONE = 0, + GLNVG_FILL, + GLNVG_CONVEXFILL, + GLNVG_STROKE, + GLNVG_TRIANGLES, +}; + +struct GLNVGcall { + int type; + int image; + int pathOffset; + int pathCount; + int triangleOffset; + int triangleCount; + int uniformOffset; +}; +typedef struct GLNVGcall GLNVGcall; + +struct GLNVGpath { + int fillOffset; + int fillCount; + int strokeOffset; + int strokeCount; +}; +typedef struct GLNVGpath GLNVGpath; + +struct GLNVGfragUniforms { + #if NANOVG_GL_USE_UNIFORMBUFFER + float scissorMat[12]; // matrices are actually 3 vec4s + float paintMat[12]; + struct NVGcolor innerCol; + struct NVGcolor outerCol; + float scissorExt[2]; + float scissorScale[2]; + float extent[2]; + float radius; + float feather; + float strokeMult; + float strokeThr; + int texType; + int type; + #else + // note: after modifying layout or size of uniform array, + // don't forget to also update the fragment shader source! + #define NANOVG_GL_UNIFORMARRAY_SIZE 11 + union { + struct { + float scissorMat[12]; // matrices are actually 3 vec4s + float paintMat[12]; + struct NVGcolor innerCol; + struct NVGcolor outerCol; + float scissorExt[2]; + float scissorScale[2]; + float extent[2]; + float radius; + float feather; + float strokeMult; + float strokeThr; + float texType; + float type; + }; + float uniformArray[NANOVG_GL_UNIFORMARRAY_SIZE][4]; + }; + #endif +}; +typedef struct GLNVGfragUniforms GLNVGfragUniforms; + +struct GLNVGcontext { + GLNVGshader shader; + GLNVGtexture* textures; + float view[2]; + int ntextures; + int ctextures; + int textureId; + GLuint vertBuf; +#if defined NANOVG_GL3 + GLuint vertArr; +#endif +#if NANOVG_GL_USE_UNIFORMBUFFER + GLuint fragBuf; +#endif + int fragSize; + int flags; + + // Per frame buffers + GLNVGcall* calls; + int ccalls; + int ncalls; + GLNVGpath* paths; + int cpaths; + int npaths; + struct NVGvertex* verts; + int cverts; + int nverts; + unsigned char* uniforms; + int cuniforms; + int nuniforms; + + // cached state + #if NANOVG_GL_USE_STATE_FILTER + GLuint boundTexture; + GLuint stencilMask; + GLenum stencilFunc; + GLint stencilFuncRef; + GLuint stencilFuncMask; + #endif +}; +typedef struct GLNVGcontext GLNVGcontext; + +static int glnvg__maxi(int a, int b) { return a > b ? a : b; } + +#ifdef NANOVG_GLES2 +static unsigned int glnvg__nearestPow2(unsigned int num) +{ + unsigned n = num > 0 ? num - 1 : 0; + n |= n >> 1; + n |= n >> 2; + n |= n >> 4; + n |= n >> 8; + n |= n >> 16; + n++; + return n; +} +#endif + +static void glnvg__bindTexture(GLNVGcontext* gl, GLuint tex) +{ +#if NANOVG_GL_USE_STATE_FILTER + if (gl->boundTexture != tex) { + gl->boundTexture = tex; + glBindTexture(GL_TEXTURE_2D, tex); + } +#else + glBindTexture(GL_TEXTURE_2D, tex); +#endif +} + +static void glnvg__stencilMask(GLNVGcontext* gl, GLuint mask) +{ +#if NANOVG_GL_USE_STATE_FILTER + if (gl->stencilMask != mask) { + gl->stencilMask = mask; + glStencilMask(mask); + } +#else + glStencilMask(mask); +#endif +} + +static void glnvg__stencilFunc(GLNVGcontext* gl, GLenum func, GLint ref, GLuint mask) +{ +#if NANOVG_GL_USE_STATE_FILTER + if ((gl->stencilFunc != func) || + (gl->stencilFuncRef != ref) || + (gl->stencilFuncMask != mask)) { + + gl->stencilFunc = func; + gl->stencilFuncRef = ref; + gl->stencilFuncMask = mask; + glStencilFunc(func, ref, mask); + } +#else + glStencilFunc(func, ref, mask); +#endif +} + +static GLNVGtexture* glnvg__allocTexture(GLNVGcontext* gl) +{ + GLNVGtexture* tex = NULL; + int i; + + for (i = 0; i < gl->ntextures; i++) { + if (gl->textures[i].id == 0) { + tex = &gl->textures[i]; + break; + } + } + if (tex == NULL) { + if (gl->ntextures+1 > gl->ctextures) { + GLNVGtexture* textures; + int ctextures = glnvg__maxi(gl->ntextures+1, 4) + gl->ctextures/2; // 1.5x Overallocate + textures = (GLNVGtexture*)realloc(gl->textures, sizeof(GLNVGtexture)*ctextures); + if (textures == NULL) return NULL; + gl->textures = textures; + gl->ctextures = ctextures; + } + tex = &gl->textures[gl->ntextures++]; + } + + memset(tex, 0, sizeof(*tex)); + tex->id = ++gl->textureId; + + return tex; +} + +static GLNVGtexture* glnvg__findTexture(GLNVGcontext* gl, int id) +{ + int i; + for (i = 0; i < gl->ntextures; i++) + if (gl->textures[i].id == id) + return &gl->textures[i]; + return NULL; +} + +static int glnvg__deleteTexture(GLNVGcontext* gl, int id) +{ + int i; + for (i = 0; i < gl->ntextures; i++) { + if (gl->textures[i].id == id) { + if (gl->textures[i].tex != 0 && (gl->textures[i].flags & NVG_IMAGE_NODELETE) == 0) + glDeleteTextures(1, &gl->textures[i].tex); + memset(&gl->textures[i], 0, sizeof(gl->textures[i])); + return 1; + } + } + return 0; +} + +static void glnvg__dumpShaderError(GLuint shader, const char* name, const char* type) +{ + char str[512+1]; + int len = 0; + glGetShaderInfoLog(shader, 512, &len, str); + if (len > 512) len = 512; + str[len] = '\0'; + printf("Shader %s/%s error:\n%s\n", name, type, str); +} + +static void glnvg__dumpProgramError(GLuint prog, const char* name) +{ + char str[512+1]; + int len = 0; + glGetProgramInfoLog(prog, 512, &len, str); + if (len > 512) len = 512; + str[len] = '\0'; + printf("Program %s error:\n%s\n", name, str); +} + +static void glnvg__checkError(GLNVGcontext* gl, const char* str) +{ + GLenum err; + if ((gl->flags & NVG_DEBUG) == 0) return; + err = glGetError(); + if (err != GL_NO_ERROR) { + printf("Error %08x after %s\n", err, str); + return; + } +} + +static int glnvg__createShader(GLNVGshader* shader, const char* name, const char* header, const char* opts, const char* vshader, const char* fshader) +{ + GLint status; + GLuint prog, vert, frag; + const char* str[3]; + str[0] = header; + str[1] = opts != NULL ? opts : ""; + + memset(shader, 0, sizeof(*shader)); + + prog = glCreateProgram(); + vert = glCreateShader(GL_VERTEX_SHADER); + frag = glCreateShader(GL_FRAGMENT_SHADER); + str[2] = vshader; + glShaderSource(vert, 3, str, 0); + str[2] = fshader; + glShaderSource(frag, 3, str, 0); + + glCompileShader(vert); + glGetShaderiv(vert, GL_COMPILE_STATUS, &status); + if (status != GL_TRUE) { + glnvg__dumpShaderError(vert, name, "vert"); + return 0; + } + + glCompileShader(frag); + glGetShaderiv(frag, GL_COMPILE_STATUS, &status); + if (status != GL_TRUE) { + glnvg__dumpShaderError(frag, name, "frag"); + return 0; + } + + glAttachShader(prog, vert); + glAttachShader(prog, frag); + + glBindAttribLocation(prog, 0, "vertex"); + glBindAttribLocation(prog, 1, "tcoord"); + + glLinkProgram(prog); + glGetProgramiv(prog, GL_LINK_STATUS, &status); + if (status != GL_TRUE) { + glnvg__dumpProgramError(prog, name); + return 0; + } + + shader->prog = prog; + shader->vert = vert; + shader->frag = frag; + + return 1; +} + +static void glnvg__deleteShader(GLNVGshader* shader) +{ + if (shader->prog != 0) + glDeleteProgram(shader->prog); + if (shader->vert != 0) + glDeleteShader(shader->vert); + if (shader->frag != 0) + glDeleteShader(shader->frag); +} + +static void glnvg__getUniforms(GLNVGshader* shader) +{ + shader->loc[GLNVG_LOC_VIEWSIZE] = glGetUniformLocation(shader->prog, "viewSize"); + shader->loc[GLNVG_LOC_TEX] = glGetUniformLocation(shader->prog, "tex"); + +#if NANOVG_GL_USE_UNIFORMBUFFER + shader->loc[GLNVG_LOC_FRAG] = glGetUniformBlockIndex(shader->prog, "frag"); +#else + shader->loc[GLNVG_LOC_FRAG] = glGetUniformLocation(shader->prog, "frag"); +#endif +} + +static int glnvg__renderCreate(void* uptr) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + int align = 4; + + // TODO: mediump float may not be enough for GLES2 in iOS. + // see the following discussion: https://github.com/memononen/nanovg/issues/46 + static const char* shaderHeader = +#if defined NANOVG_GL2 + "#define NANOVG_GL2 1\n" +#elif defined NANOVG_GL3 + "#version 150 core\n" + "#define NANOVG_GL3 1\n" +#elif defined NANOVG_GLES2 + "#version 100\n" + "#define NANOVG_GL2 1\n" +#elif defined NANOVG_GLES3 + "#version 300 es\n" + "#define NANOVG_GL3 1\n" +#endif + +#if NANOVG_GL_USE_UNIFORMBUFFER + "#define USE_UNIFORMBUFFER 1\n" +#else + "#define UNIFORMARRAY_SIZE 11\n" +#endif + "\n"; + + static const char* fillVertShader = + "#ifdef NANOVG_GL3\n" + " uniform vec2 viewSize;\n" + " in vec2 vertex;\n" + " in vec2 tcoord;\n" + " out vec2 ftcoord;\n" + " out vec2 fpos;\n" + "#else\n" + " uniform vec2 viewSize;\n" + " attribute vec2 vertex;\n" + " attribute vec2 tcoord;\n" + " varying vec2 ftcoord;\n" + " varying vec2 fpos;\n" + "#endif\n" + "void main(void) {\n" + " ftcoord = tcoord;\n" + " fpos = vertex;\n" + " gl_Position = vec4(2.0*vertex.x/viewSize.x - 1.0, 1.0 - 2.0*vertex.y/viewSize.y, 0, 1);\n" + "}\n"; + + static const char* fillFragShader = + "#ifdef GL_ES\n" + "#if defined(GL_FRAGMENT_PRECISION_HIGH) || defined(NANOVG_GL3)\n" + " precision highp float;\n" + "#else\n" + " precision mediump float;\n" + "#endif\n" + "#endif\n" + "#ifdef NANOVG_GL3\n" + "#ifdef USE_UNIFORMBUFFER\n" + " layout(std140) uniform frag {\n" + " mat3 scissorMat;\n" + " mat3 paintMat;\n" + " vec4 innerCol;\n" + " vec4 outerCol;\n" + " vec2 scissorExt;\n" + " vec2 scissorScale;\n" + " vec2 extent;\n" + " float radius;\n" + " float feather;\n" + " float strokeMult;\n" + " float strokeThr;\n" + " int texType;\n" + " int type;\n" + " };\n" + "#else\n" // NANOVG_GL3 && !USE_UNIFORMBUFFER + " uniform vec4 frag[UNIFORMARRAY_SIZE];\n" + "#endif\n" + " uniform sampler2D tex;\n" + " in vec2 ftcoord;\n" + " in vec2 fpos;\n" + " out vec4 outColor;\n" + "#else\n" // !NANOVG_GL3 + " uniform vec4 frag[UNIFORMARRAY_SIZE];\n" + " uniform sampler2D tex;\n" + " varying vec2 ftcoord;\n" + " varying vec2 fpos;\n" + "#endif\n" + "#ifndef USE_UNIFORMBUFFER\n" + " #define scissorMat mat3(frag[0].xyz, frag[1].xyz, frag[2].xyz)\n" + " #define paintMat mat3(frag[3].xyz, frag[4].xyz, frag[5].xyz)\n" + " #define innerCol frag[6]\n" + " #define outerCol frag[7]\n" + " #define scissorExt frag[8].xy\n" + " #define scissorScale frag[8].zw\n" + " #define extent frag[9].xy\n" + " #define radius frag[9].z\n" + " #define feather frag[9].w\n" + " #define strokeMult frag[10].x\n" + " #define strokeThr frag[10].y\n" + " #define texType int(frag[10].z)\n" + " #define type int(frag[10].w)\n" + "#endif\n" + "\n" + "float sdroundrect(vec2 pt, vec2 ext, float rad) {\n" + " vec2 ext2 = ext - vec2(rad,rad);\n" + " vec2 d = abs(pt) - ext2;\n" + " return min(max(d.x,d.y),0.0) + length(max(d,0.0)) - rad;\n" + "}\n" + "\n" + "// Scissoring\n" + "float scissorMask(vec2 p) {\n" + " vec2 sc = (abs((scissorMat * vec3(p,1.0)).xy) - scissorExt);\n" + " sc = vec2(0.5,0.5) - sc * scissorScale;\n" + " return clamp(sc.x,0.0,1.0) * clamp(sc.y,0.0,1.0);\n" + "}\n" + "#ifdef EDGE_AA\n" + "// Stroke - from [0..1] to clipped pyramid, where the slope is 1px.\n" + "float strokeMask() {\n" + " return min(1.0, (1.0-abs(ftcoord.x*2.0-1.0))*strokeMult) * min(1.0, ftcoord.y);\n" + "}\n" + "#endif\n" + "\n" + "void main(void) {\n" + " vec4 result;\n" + " float scissor = scissorMask(fpos);\n" + "#ifdef EDGE_AA\n" + " float strokeAlpha = strokeMask();\n" + "#else\n" + " float strokeAlpha = 1.0;\n" + "#endif\n" + " if (type == 0) { // Gradient\n" + " // Calculate gradient color using box gradient\n" + " vec2 pt = (paintMat * vec3(fpos,1.0)).xy;\n" + " float d = clamp((sdroundrect(pt, extent, radius) + feather*0.5) / feather, 0.0, 1.0);\n" + " vec4 color = mix(innerCol,outerCol,d);\n" + " // Combine alpha\n" + " color *= strokeAlpha * scissor;\n" + " result = color;\n" + " } else if (type == 1) { // Image\n" + " // Calculate color fron texture\n" + " vec2 pt = (paintMat * vec3(fpos,1.0)).xy / extent;\n" + "#ifdef NANOVG_GL3\n" + " vec4 color = texture(tex, pt);\n" + "#else\n" + " vec4 color = texture2D(tex, pt);\n" + "#endif\n" + " if (texType == 1) color = vec4(color.xyz*color.w,color.w);" + " if (texType == 2) color = vec4(color.x);" + " // Apply color tint and alpha.\n" + " color *= innerCol;\n" + " // Combine alpha\n" + " color *= strokeAlpha * scissor;\n" + " result = color;\n" + " } else if (type == 2) { // Stencil fill\n" + " result = vec4(1,1,1,1);\n" + " } else if (type == 3) { // Textured tris\n" + "#ifdef NANOVG_GL3\n" + " vec4 color = texture(tex, ftcoord);\n" + "#else\n" + " vec4 color = texture2D(tex, ftcoord);\n" + "#endif\n" + " if (texType == 1) color = vec4(color.xyz*color.w,color.w);" + " if (texType == 2) color = vec4(color.x);" + " color *= scissor;\n" + " result = color * innerCol;\n" + " }\n" + "#ifdef EDGE_AA\n" + " if (strokeAlpha < strokeThr) discard;\n" + "#endif\n" + "#ifdef NANOVG_GL3\n" + " outColor = result;\n" + "#else\n" + " gl_FragColor = result;\n" + "#endif\n" + "}\n"; + + glnvg__checkError(gl, "init"); + + if (gl->flags & NVG_ANTIALIAS) { + if (glnvg__createShader(&gl->shader, "shader", shaderHeader, "#define EDGE_AA 1\n", fillVertShader, fillFragShader) == 0) + return 0; + } else { + if (glnvg__createShader(&gl->shader, "shader", shaderHeader, NULL, fillVertShader, fillFragShader) == 0) + return 0; + } + + glnvg__checkError(gl, "uniform locations"); + glnvg__getUniforms(&gl->shader); + + // Create dynamic vertex array +#if defined NANOVG_GL3 + glGenVertexArrays(1, &gl->vertArr); +#endif + glGenBuffers(1, &gl->vertBuf); + +#if NANOVG_GL_USE_UNIFORMBUFFER + // Create UBOs + glUniformBlockBinding(gl->shader.prog, gl->shader.loc[GLNVG_LOC_FRAG], GLNVG_FRAG_BINDING); + glGenBuffers(1, &gl->fragBuf); + glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &align); +#endif + gl->fragSize = sizeof(GLNVGfragUniforms) + align - sizeof(GLNVGfragUniforms) % align; + + glnvg__checkError(gl, "create done"); + + glFinish(); + + return 1; +} + +static int glnvg__renderCreateTexture(void* uptr, int type, int w, int h, int imageFlags, const unsigned char* data) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + GLNVGtexture* tex = glnvg__allocTexture(gl); + + if (tex == NULL) return 0; + +#ifdef NANOVG_GLES2 + // Check for non-power of 2. + if (glnvg__nearestPow2(w) != (unsigned int)w || glnvg__nearestPow2(h) != (unsigned int)h) { + // No repeat + if ((imageFlags & NVG_IMAGE_REPEATX) != 0 || (imageFlags & NVG_IMAGE_REPEATY) != 0) { + printf("Repeat X/Y is not supported for non power-of-two textures (%d x %d)\n", w, h); + imageFlags &= ~(NVG_IMAGE_REPEATX | NVG_IMAGE_REPEATY); + } + // No mips. + if (imageFlags & NVG_IMAGE_GENERATE_MIPMAPS) { + printf("Mip-maps is not support for non power-of-two textures (%d x %d)\n", w, h); + imageFlags &= ~NVG_IMAGE_GENERATE_MIPMAPS; + } + } +#endif + + glGenTextures(1, &tex->tex); + tex->width = w; + tex->height = h; + tex->type = type; + tex->flags = imageFlags; + glnvg__bindTexture(gl, tex->tex); + + glPixelStorei(GL_UNPACK_ALIGNMENT,1); +#ifndef NANOVG_GLES2 + glPixelStorei(GL_UNPACK_ROW_LENGTH, tex->width); + glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); + glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); +#endif + +#if defined (NANOVG_GL2) + // GL 1.4 and later has support for generating mipmaps using a tex parameter. + if (imageFlags & NVG_IMAGE_GENERATE_MIPMAPS) { + glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); + } +#endif + + if (type == NVG_TEXTURE_RGBA) + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); + else +#if defined(NANOVG_GLES2) + glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, w, h, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data); +#elif defined(NANOVG_GLES3) + glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, w, h, 0, GL_RED, GL_UNSIGNED_BYTE, data); +#else + glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, w, h, 0, GL_RED, GL_UNSIGNED_BYTE, data); +#endif + + if (imageFlags & NVG_IMAGE_GENERATE_MIPMAPS) { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + } else { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + } + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + if (imageFlags & NVG_IMAGE_REPEATX) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + else + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + + if (imageFlags & NVG_IMAGE_REPEATY) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + else + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 4); +#ifndef NANOVG_GLES2 + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); + glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); +#endif + + // The new way to build mipmaps on GLES and GL3 +#if !defined(NANOVG_GL2) + if (imageFlags & NVG_IMAGE_GENERATE_MIPMAPS) { + glGenerateMipmap(GL_TEXTURE_2D); + } +#endif + + glnvg__checkError(gl, "create tex"); + glnvg__bindTexture(gl, 0); + + return tex->id; +} + + +static int glnvg__renderDeleteTexture(void* uptr, int image) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + return glnvg__deleteTexture(gl, image); +} + +static int glnvg__renderUpdateTexture(void* uptr, int image, int x, int y, int w, int h, const unsigned char* data) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + GLNVGtexture* tex = glnvg__findTexture(gl, image); + + if (tex == NULL) return 0; + glnvg__bindTexture(gl, tex->tex); + + glPixelStorei(GL_UNPACK_ALIGNMENT,1); + +#ifndef NANOVG_GLES2 + glPixelStorei(GL_UNPACK_ROW_LENGTH, tex->width); + glPixelStorei(GL_UNPACK_SKIP_PIXELS, x); + glPixelStorei(GL_UNPACK_SKIP_ROWS, y); +#else + // No support for all of skip, need to update a whole row at a time. + if (tex->type == NVG_TEXTURE_RGBA) + data += y*tex->width*4; + else + data += y*tex->width; + x = 0; + w = tex->width; +#endif + + if (tex->type == NVG_TEXTURE_RGBA) + glTexSubImage2D(GL_TEXTURE_2D, 0, x,y, w,h, GL_RGBA, GL_UNSIGNED_BYTE, data); + else +#ifdef NANOVG_GLES2 + glTexSubImage2D(GL_TEXTURE_2D, 0, x,y, w,h, GL_LUMINANCE, GL_UNSIGNED_BYTE, data); +#else + glTexSubImage2D(GL_TEXTURE_2D, 0, x,y, w,h, GL_RED, GL_UNSIGNED_BYTE, data); +#endif + + glPixelStorei(GL_UNPACK_ALIGNMENT, 4); +#ifndef NANOVG_GLES2 + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); + glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); +#endif + + glnvg__bindTexture(gl, 0); + + return 1; +} + +static int glnvg__renderGetTextureSize(void* uptr, int image, int* w, int* h) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + GLNVGtexture* tex = glnvg__findTexture(gl, image); + if (tex == NULL) return 0; + *w = tex->width; + *h = tex->height; + return 1; +} + +static void glnvg__xformToMat3x4(float* m3, float* t) +{ + m3[0] = t[0]; + m3[1] = t[1]; + m3[2] = 0.0f; + m3[3] = 0.0f; + m3[4] = t[2]; + m3[5] = t[3]; + m3[6] = 0.0f; + m3[7] = 0.0f; + m3[8] = t[4]; + m3[9] = t[5]; + m3[10] = 1.0f; + m3[11] = 0.0f; +} + +static NVGcolor glnvg__premulColor(NVGcolor c) +{ + c.r *= c.a; + c.g *= c.a; + c.b *= c.a; + return c; +} + +static int glnvg__convertPaint(GLNVGcontext* gl, GLNVGfragUniforms* frag, NVGpaint* paint, + NVGscissor* scissor, float width, float fringe, float strokeThr) +{ + GLNVGtexture* tex = NULL; + float invxform[6]; + + memset(frag, 0, sizeof(*frag)); + + frag->innerCol = glnvg__premulColor(paint->innerColor); + frag->outerCol = glnvg__premulColor(paint->outerColor); + + if (scissor->extent[0] < -0.5f || scissor->extent[1] < -0.5f) { + memset(frag->scissorMat, 0, sizeof(frag->scissorMat)); + frag->scissorExt[0] = 1.0f; + frag->scissorExt[1] = 1.0f; + frag->scissorScale[0] = 1.0f; + frag->scissorScale[1] = 1.0f; + } else { + nvgTransformInverse(invxform, scissor->xform); + glnvg__xformToMat3x4(frag->scissorMat, invxform); + frag->scissorExt[0] = scissor->extent[0]; + frag->scissorExt[1] = scissor->extent[1]; + frag->scissorScale[0] = sqrtf(scissor->xform[0]*scissor->xform[0] + scissor->xform[2]*scissor->xform[2]) / fringe; + frag->scissorScale[1] = sqrtf(scissor->xform[1]*scissor->xform[1] + scissor->xform[3]*scissor->xform[3]) / fringe; + } + + memcpy(frag->extent, paint->extent, sizeof(frag->extent)); + frag->strokeMult = (width*0.5f + fringe*0.5f) / fringe; + frag->strokeThr = strokeThr; + + if (paint->image != 0) { + tex = glnvg__findTexture(gl, paint->image); + if (tex == NULL) return 0; + if ((tex->flags & NVG_IMAGE_FLIPY) != 0) { + float flipped[6]; + nvgTransformScale(flipped, 1.0f, -1.0f); + nvgTransformMultiply(flipped, paint->xform); + nvgTransformInverse(invxform, flipped); + } else { + nvgTransformInverse(invxform, paint->xform); + } + frag->type = NSVG_SHADER_FILLIMG; + + if (tex->type == NVG_TEXTURE_RGBA) + frag->texType = (tex->flags & NVG_IMAGE_PREMULTIPLIED) ? 0 : 1; + else + frag->texType = 2; +// printf("frag->texType = %d\n", frag->texType); + } else { + frag->type = NSVG_SHADER_FILLGRAD; + frag->radius = paint->radius; + frag->feather = paint->feather; + nvgTransformInverse(invxform, paint->xform); + } + + glnvg__xformToMat3x4(frag->paintMat, invxform); + + return 1; +} + +static GLNVGfragUniforms* nvg__fragUniformPtr(GLNVGcontext* gl, int i); + +static void glnvg__setUniforms(GLNVGcontext* gl, int uniformOffset, int image) +{ +#if NANOVG_GL_USE_UNIFORMBUFFER + glBindBufferRange(GL_UNIFORM_BUFFER, GLNVG_FRAG_BINDING, gl->fragBuf, uniformOffset, sizeof(GLNVGfragUniforms)); +#else + GLNVGfragUniforms* frag = nvg__fragUniformPtr(gl, uniformOffset); + glUniform4fv(gl->shader.loc[GLNVG_LOC_FRAG], NANOVG_GL_UNIFORMARRAY_SIZE, &(frag->uniformArray[0][0])); +#endif + + if (image != 0) { + GLNVGtexture* tex = glnvg__findTexture(gl, image); + glnvg__bindTexture(gl, tex != NULL ? tex->tex : 0); + glnvg__checkError(gl, "tex paint tex"); + } else { + glnvg__bindTexture(gl, 0); + } +} + +static void glnvg__renderViewport(void* uptr, int width, int height) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + gl->view[0] = (float)width; + gl->view[1] = (float)height; +} + +static void glnvg__fill(GLNVGcontext* gl, GLNVGcall* call) +{ + GLNVGpath* paths = &gl->paths[call->pathOffset]; + int i, npaths = call->pathCount; + + // Draw shapes + glEnable(GL_STENCIL_TEST); + glnvg__stencilMask(gl, 0xff); + glnvg__stencilFunc(gl, GL_ALWAYS, 0, 0xff); + glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + + // set bindpoint for solid loc + glnvg__setUniforms(gl, call->uniformOffset, 0); + glnvg__checkError(gl, "fill simple"); + + glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_KEEP, GL_INCR_WRAP); + glStencilOpSeparate(GL_BACK, GL_KEEP, GL_KEEP, GL_DECR_WRAP); + glDisable(GL_CULL_FACE); + for (i = 0; i < npaths; i++) + glDrawArrays(GL_TRIANGLE_FAN, paths[i].fillOffset, paths[i].fillCount); + glEnable(GL_CULL_FACE); + + // Draw anti-aliased pixels + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + + glnvg__setUniforms(gl, call->uniformOffset + gl->fragSize, call->image); + glnvg__checkError(gl, "fill fill"); + + if (gl->flags & NVG_ANTIALIAS) { + glnvg__stencilFunc(gl, GL_EQUAL, 0x00, 0xff); + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + // Draw fringes + for (i = 0; i < npaths; i++) + glDrawArrays(GL_TRIANGLE_STRIP, paths[i].strokeOffset, paths[i].strokeCount); + } + + // Draw fill + glnvg__stencilFunc(gl, GL_NOTEQUAL, 0x0, 0xff); + glStencilOp(GL_ZERO, GL_ZERO, GL_ZERO); + glDrawArrays(GL_TRIANGLES, call->triangleOffset, call->triangleCount); + + glDisable(GL_STENCIL_TEST); +} + +static void glnvg__convexFill(GLNVGcontext* gl, GLNVGcall* call) +{ + GLNVGpath* paths = &gl->paths[call->pathOffset]; + int i, npaths = call->pathCount; + + glnvg__setUniforms(gl, call->uniformOffset, call->image); + glnvg__checkError(gl, "convex fill"); + + for (i = 0; i < npaths; i++) + glDrawArrays(GL_TRIANGLE_FAN, paths[i].fillOffset, paths[i].fillCount); + if (gl->flags & NVG_ANTIALIAS) { + // Draw fringes + for (i = 0; i < npaths; i++) + glDrawArrays(GL_TRIANGLE_STRIP, paths[i].strokeOffset, paths[i].strokeCount); + } +} + +static void glnvg__stroke(GLNVGcontext* gl, GLNVGcall* call) +{ + GLNVGpath* paths = &gl->paths[call->pathOffset]; + int npaths = call->pathCount, i; + + if (gl->flags & NVG_STENCIL_STROKES) { + + glEnable(GL_STENCIL_TEST); + glnvg__stencilMask(gl, 0xff); + + // Fill the stroke base without overlap + glnvg__stencilFunc(gl, GL_EQUAL, 0x0, 0xff); + glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); + glnvg__setUniforms(gl, call->uniformOffset + gl->fragSize, call->image); + glnvg__checkError(gl, "stroke fill 0"); + for (i = 0; i < npaths; i++) + glDrawArrays(GL_TRIANGLE_STRIP, paths[i].strokeOffset, paths[i].strokeCount); + + // Draw anti-aliased pixels. + glnvg__setUniforms(gl, call->uniformOffset, call->image); + glnvg__stencilFunc(gl, GL_EQUAL, 0x00, 0xff); + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + for (i = 0; i < npaths; i++) + glDrawArrays(GL_TRIANGLE_STRIP, paths[i].strokeOffset, paths[i].strokeCount); + + // Clear stencil buffer. + glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + glnvg__stencilFunc(gl, GL_ALWAYS, 0x0, 0xff); + glStencilOp(GL_ZERO, GL_ZERO, GL_ZERO); + glnvg__checkError(gl, "stroke fill 1"); + for (i = 0; i < npaths; i++) + glDrawArrays(GL_TRIANGLE_STRIP, paths[i].strokeOffset, paths[i].strokeCount); + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + + glDisable(GL_STENCIL_TEST); + +// glnvg__convertPaint(gl, nvg__fragUniformPtr(gl, call->uniformOffset + gl->fragSize), paint, scissor, strokeWidth, fringe, 1.0f - 0.5f/255.0f); + + } else { + glnvg__setUniforms(gl, call->uniformOffset, call->image); + glnvg__checkError(gl, "stroke fill"); + // Draw Strokes + for (i = 0; i < npaths; i++) + glDrawArrays(GL_TRIANGLE_STRIP, paths[i].strokeOffset, paths[i].strokeCount); + } +} + +static void glnvg__triangles(GLNVGcontext* gl, GLNVGcall* call) +{ + glnvg__setUniforms(gl, call->uniformOffset, call->image); + glnvg__checkError(gl, "triangles fill"); + + glDrawArrays(GL_TRIANGLES, call->triangleOffset, call->triangleCount); +} + +static void glnvg__renderCancel(void* uptr) { + GLNVGcontext* gl = (GLNVGcontext*)uptr; + gl->nverts = 0; + gl->npaths = 0; + gl->ncalls = 0; + gl->nuniforms = 0; +} + +static void glnvg__renderFlush(void* uptr) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + int i; + + if (gl->ncalls > 0) { + + // Setup require GL state. + glUseProgram(gl->shader.prog); + + glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_CULL_FACE); + glCullFace(GL_BACK); + glFrontFace(GL_CCW); + glEnable(GL_BLEND); + glDisable(GL_DEPTH_TEST); + glDisable(GL_SCISSOR_TEST); + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + glStencilMask(0xffffffff); + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + glStencilFunc(GL_ALWAYS, 0, 0xffffffff); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, 0); + #if NANOVG_GL_USE_STATE_FILTER + gl->boundTexture = 0; + gl->stencilMask = 0xffffffff; + gl->stencilFunc = GL_ALWAYS; + gl->stencilFuncRef = 0; + gl->stencilFuncMask = 0xffffffff; + #endif + +#if NANOVG_GL_USE_UNIFORMBUFFER + // Upload ubo for frag shaders + glBindBuffer(GL_UNIFORM_BUFFER, gl->fragBuf); + glBufferData(GL_UNIFORM_BUFFER, gl->nuniforms * gl->fragSize, gl->uniforms, GL_STREAM_DRAW); +#endif + + // Upload vertex data +#if defined NANOVG_GL3 + glBindVertexArray(gl->vertArr); +#endif + glBindBuffer(GL_ARRAY_BUFFER, gl->vertBuf); + glBufferData(GL_ARRAY_BUFFER, gl->nverts * sizeof(NVGvertex), gl->verts, GL_STREAM_DRAW); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(NVGvertex), (const GLvoid*)(size_t)0); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(NVGvertex), (const GLvoid*)(0 + 2*sizeof(float))); + + // Set view and texture just once per frame. + glUniform1i(gl->shader.loc[GLNVG_LOC_TEX], 0); + glUniform2fv(gl->shader.loc[GLNVG_LOC_VIEWSIZE], 1, gl->view); + +#if NANOVG_GL_USE_UNIFORMBUFFER + glBindBuffer(GL_UNIFORM_BUFFER, gl->fragBuf); +#endif + + for (i = 0; i < gl->ncalls; i++) { + GLNVGcall* call = &gl->calls[i]; + if (call->type == GLNVG_FILL) + glnvg__fill(gl, call); + else if (call->type == GLNVG_CONVEXFILL) + glnvg__convexFill(gl, call); + else if (call->type == GLNVG_STROKE) + glnvg__stroke(gl, call); + else if (call->type == GLNVG_TRIANGLES) + glnvg__triangles(gl, call); + } + + glDisableVertexAttribArray(0); + glDisableVertexAttribArray(1); +#if defined NANOVG_GL3 + glBindVertexArray(0); +#endif + glDisable(GL_CULL_FACE); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glUseProgram(0); + glnvg__bindTexture(gl, 0); + } + + // Reset calls + gl->nverts = 0; + gl->npaths = 0; + gl->ncalls = 0; + gl->nuniforms = 0; +} + +static int glnvg__maxVertCount(const NVGpath* paths, int npaths) +{ + int i, count = 0; + for (i = 0; i < npaths; i++) { + count += paths[i].nfill; + count += paths[i].nstroke; + } + return count; +} + +static GLNVGcall* glnvg__allocCall(GLNVGcontext* gl) +{ + GLNVGcall* ret = NULL; + if (gl->ncalls+1 > gl->ccalls) { + GLNVGcall* calls; + int ccalls = glnvg__maxi(gl->ncalls+1, 128) + gl->ccalls/2; // 1.5x Overallocate + calls = (GLNVGcall*)realloc(gl->calls, sizeof(GLNVGcall) * ccalls); + if (calls == NULL) return NULL; + gl->calls = calls; + gl->ccalls = ccalls; + } + ret = &gl->calls[gl->ncalls++]; + memset(ret, 0, sizeof(GLNVGcall)); + return ret; +} + +static int glnvg__allocPaths(GLNVGcontext* gl, int n) +{ + int ret = 0; + if (gl->npaths+n > gl->cpaths) { + GLNVGpath* paths; + int cpaths = glnvg__maxi(gl->npaths + n, 128) + gl->cpaths/2; // 1.5x Overallocate + paths = (GLNVGpath*)realloc(gl->paths, sizeof(GLNVGpath) * cpaths); + if (paths == NULL) return -1; + gl->paths = paths; + gl->cpaths = cpaths; + } + ret = gl->npaths; + gl->npaths += n; + return ret; +} + +static int glnvg__allocVerts(GLNVGcontext* gl, int n) +{ + int ret = 0; + if (gl->nverts+n > gl->cverts) { + NVGvertex* verts; + int cverts = glnvg__maxi(gl->nverts + n, 4096) + gl->cverts/2; // 1.5x Overallocate + verts = (NVGvertex*)realloc(gl->verts, sizeof(NVGvertex) * cverts); + if (verts == NULL) return -1; + gl->verts = verts; + gl->cverts = cverts; + } + ret = gl->nverts; + gl->nverts += n; + return ret; +} + +static int glnvg__allocFragUniforms(GLNVGcontext* gl, int n) +{ + int ret = 0, structSize = gl->fragSize; + if (gl->nuniforms+n > gl->cuniforms) { + unsigned char* uniforms; + int cuniforms = glnvg__maxi(gl->nuniforms+n, 128) + gl->cuniforms/2; // 1.5x Overallocate + uniforms = (unsigned char*)realloc(gl->uniforms, structSize * cuniforms); + if (uniforms == NULL) return -1; + gl->uniforms = uniforms; + gl->cuniforms = cuniforms; + } + ret = gl->nuniforms * structSize; + gl->nuniforms += n; + return ret; +} + +static GLNVGfragUniforms* nvg__fragUniformPtr(GLNVGcontext* gl, int i) +{ + return (GLNVGfragUniforms*)&gl->uniforms[i]; +} + +static void glnvg__vset(NVGvertex* vtx, float x, float y, float u, float v) +{ + vtx->x = x; + vtx->y = y; + vtx->u = u; + vtx->v = v; +} + +static void glnvg__renderFill(void* uptr, NVGpaint* paint, NVGscissor* scissor, float fringe, + const float* bounds, const NVGpath* paths, int npaths) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + GLNVGcall* call = glnvg__allocCall(gl); + NVGvertex* quad; + GLNVGfragUniforms* frag; + int i, maxverts, offset; + + if (call == NULL) return; + + call->type = GLNVG_FILL; + call->pathOffset = glnvg__allocPaths(gl, npaths); + if (call->pathOffset == -1) goto error; + call->pathCount = npaths; + call->image = paint->image; + + if (npaths == 1 && paths[0].convex) + call->type = GLNVG_CONVEXFILL; + + // Allocate vertices for all the paths. + maxverts = glnvg__maxVertCount(paths, npaths) + 6; + offset = glnvg__allocVerts(gl, maxverts); + if (offset == -1) goto error; + + for (i = 0; i < npaths; i++) { + GLNVGpath* copy = &gl->paths[call->pathOffset + i]; + const NVGpath* path = &paths[i]; + memset(copy, 0, sizeof(GLNVGpath)); + if (path->nfill > 0) { + copy->fillOffset = offset; + copy->fillCount = path->nfill; + memcpy(&gl->verts[offset], path->fill, sizeof(NVGvertex) * path->nfill); + offset += path->nfill; + } + if (path->nstroke > 0) { + copy->strokeOffset = offset; + copy->strokeCount = path->nstroke; + memcpy(&gl->verts[offset], path->stroke, sizeof(NVGvertex) * path->nstroke); + offset += path->nstroke; + } + } + + // Quad + call->triangleOffset = offset; + call->triangleCount = 6; + quad = &gl->verts[call->triangleOffset]; + glnvg__vset(&quad[0], bounds[0], bounds[3], 0.5f, 1.0f); + glnvg__vset(&quad[1], bounds[2], bounds[3], 0.5f, 1.0f); + glnvg__vset(&quad[2], bounds[2], bounds[1], 0.5f, 1.0f); + + glnvg__vset(&quad[3], bounds[0], bounds[3], 0.5f, 1.0f); + glnvg__vset(&quad[4], bounds[2], bounds[1], 0.5f, 1.0f); + glnvg__vset(&quad[5], bounds[0], bounds[1], 0.5f, 1.0f); + + // Setup uniforms for draw calls + if (call->type == GLNVG_FILL) { + call->uniformOffset = glnvg__allocFragUniforms(gl, 2); + if (call->uniformOffset == -1) goto error; + // Simple shader for stencil + frag = nvg__fragUniformPtr(gl, call->uniformOffset); + memset(frag, 0, sizeof(*frag)); + frag->strokeThr = -1.0f; + frag->type = NSVG_SHADER_SIMPLE; + // Fill shader + glnvg__convertPaint(gl, nvg__fragUniformPtr(gl, call->uniformOffset + gl->fragSize), paint, scissor, fringe, fringe, -1.0f); + } else { + call->uniformOffset = glnvg__allocFragUniforms(gl, 1); + if (call->uniformOffset == -1) goto error; + // Fill shader + glnvg__convertPaint(gl, nvg__fragUniformPtr(gl, call->uniformOffset), paint, scissor, fringe, fringe, -1.0f); + } + + return; + +error: + // We get here if call alloc was ok, but something else is not. + // Roll back the last call to prevent drawing it. + if (gl->ncalls > 0) gl->ncalls--; +} + +static void glnvg__renderStroke(void* uptr, NVGpaint* paint, NVGscissor* scissor, float fringe, + float strokeWidth, const NVGpath* paths, int npaths) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + GLNVGcall* call = glnvg__allocCall(gl); + int i, maxverts, offset; + + if (call == NULL) return; + + call->type = GLNVG_STROKE; + call->pathOffset = glnvg__allocPaths(gl, npaths); + if (call->pathOffset == -1) goto error; + call->pathCount = npaths; + call->image = paint->image; + + // Allocate vertices for all the paths. + maxverts = glnvg__maxVertCount(paths, npaths); + offset = glnvg__allocVerts(gl, maxverts); + if (offset == -1) goto error; + + for (i = 0; i < npaths; i++) { + GLNVGpath* copy = &gl->paths[call->pathOffset + i]; + const NVGpath* path = &paths[i]; + memset(copy, 0, sizeof(GLNVGpath)); + if (path->nstroke) { + copy->strokeOffset = offset; + copy->strokeCount = path->nstroke; + memcpy(&gl->verts[offset], path->stroke, sizeof(NVGvertex) * path->nstroke); + offset += path->nstroke; + } + } + + if (gl->flags & NVG_STENCIL_STROKES) { + // Fill shader + call->uniformOffset = glnvg__allocFragUniforms(gl, 2); + if (call->uniformOffset == -1) goto error; + + glnvg__convertPaint(gl, nvg__fragUniformPtr(gl, call->uniformOffset), paint, scissor, strokeWidth, fringe, -1.0f); + glnvg__convertPaint(gl, nvg__fragUniformPtr(gl, call->uniformOffset + gl->fragSize), paint, scissor, strokeWidth, fringe, 1.0f - 0.5f/255.0f); + + } else { + // Fill shader + call->uniformOffset = glnvg__allocFragUniforms(gl, 1); + if (call->uniformOffset == -1) goto error; + glnvg__convertPaint(gl, nvg__fragUniformPtr(gl, call->uniformOffset), paint, scissor, strokeWidth, fringe, -1.0f); + } + + return; + +error: + // We get here if call alloc was ok, but something else is not. + // Roll back the last call to prevent drawing it. + if (gl->ncalls > 0) gl->ncalls--; +} + +static void glnvg__renderTriangles(void* uptr, NVGpaint* paint, NVGscissor* scissor, + const NVGvertex* verts, int nverts) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + GLNVGcall* call = glnvg__allocCall(gl); + GLNVGfragUniforms* frag; + + if (call == NULL) return; + + call->type = GLNVG_TRIANGLES; + call->image = paint->image; + + // Allocate vertices for all the paths. + call->triangleOffset = glnvg__allocVerts(gl, nverts); + if (call->triangleOffset == -1) goto error; + call->triangleCount = nverts; + + memcpy(&gl->verts[call->triangleOffset], verts, sizeof(NVGvertex) * nverts); + + // Fill shader + call->uniformOffset = glnvg__allocFragUniforms(gl, 1); + if (call->uniformOffset == -1) goto error; + frag = nvg__fragUniformPtr(gl, call->uniformOffset); + glnvg__convertPaint(gl, frag, paint, scissor, 1.0f, 1.0f, -1.0f); + frag->type = NSVG_SHADER_IMG; + + return; + +error: + // We get here if call alloc was ok, but something else is not. + // Roll back the last call to prevent drawing it. + if (gl->ncalls > 0) gl->ncalls--; +} + +static void glnvg__renderDelete(void* uptr) +{ + GLNVGcontext* gl = (GLNVGcontext*)uptr; + int i; + if (gl == NULL) return; + + glnvg__deleteShader(&gl->shader); + +#if NANOVG_GL3 +#if NANOVG_GL_USE_UNIFORMBUFFER + if (gl->fragBuf != 0) + glDeleteBuffers(1, &gl->fragBuf); +#endif + if (gl->vertArr != 0) + glDeleteVertexArrays(1, &gl->vertArr); +#endif + if (gl->vertBuf != 0) + glDeleteBuffers(1, &gl->vertBuf); + + for (i = 0; i < gl->ntextures; i++) { + if (gl->textures[i].tex != 0 && (gl->textures[i].flags & NVG_IMAGE_NODELETE) == 0) + glDeleteTextures(1, &gl->textures[i].tex); + } + free(gl->textures); + + free(gl->paths); + free(gl->verts); + free(gl->uniforms); + free(gl->calls); + + free(gl); +} + + +#if defined NANOVG_GL2 +NVGcontext* nvgCreateGL2(int flags) +#elif defined NANOVG_GL3 +NVGcontext* nvgCreateGL3(int flags) +#elif defined NANOVG_GLES2 +NVGcontext* nvgCreateGLES2(int flags) +#elif defined NANOVG_GLES3 +NVGcontext* nvgCreateGLES3(int flags) +#endif +{ + NVGparams params; + NVGcontext* ctx = NULL; + GLNVGcontext* gl = (GLNVGcontext*)malloc(sizeof(GLNVGcontext)); + if (gl == NULL) goto error; + memset(gl, 0, sizeof(GLNVGcontext)); + + memset(¶ms, 0, sizeof(params)); + params.renderCreate = glnvg__renderCreate; + params.renderCreateTexture = glnvg__renderCreateTexture; + params.renderDeleteTexture = glnvg__renderDeleteTexture; + params.renderUpdateTexture = glnvg__renderUpdateTexture; + params.renderGetTextureSize = glnvg__renderGetTextureSize; + params.renderViewport = glnvg__renderViewport; + params.renderCancel = glnvg__renderCancel; + params.renderFlush = glnvg__renderFlush; + params.renderFill = glnvg__renderFill; + params.renderStroke = glnvg__renderStroke; + params.renderTriangles = glnvg__renderTriangles; + params.renderDelete = glnvg__renderDelete; + params.userPtr = gl; + params.edgeAntiAlias = flags & NVG_ANTIALIAS ? 1 : 0; + + gl->flags = flags; + + ctx = nvgCreateInternal(¶ms); + if (ctx == NULL) goto error; + + return ctx; + +error: + // 'gl' is freed by nvgDeleteInternal. + if (ctx != NULL) nvgDeleteInternal(ctx); + return NULL; +} + +#if defined NANOVG_GL2 +void nvgDeleteGL2(NVGcontext* ctx) +#elif defined NANOVG_GL3 +void nvgDeleteGL3(NVGcontext* ctx) +#elif defined NANOVG_GLES2 +void nvgDeleteGLES2(NVGcontext* ctx) +#elif defined NANOVG_GLES3 +void nvgDeleteGLES3(NVGcontext* ctx) +#endif +{ + nvgDeleteInternal(ctx); +} + +int nvglCreateImageFromHandle(NVGcontext* ctx, GLuint textureId, int w, int h, int imageFlags) +{ + GLNVGcontext* gl = (GLNVGcontext*)nvgInternalParams(ctx)->userPtr; + GLNVGtexture* tex = glnvg__allocTexture(gl); + + if (tex == NULL) return 0; + + tex->type = NVG_TEXTURE_RGBA; + tex->tex = textureId; + tex->flags = imageFlags; + tex->width = w; + tex->height = h; + + return tex->id; +} + +GLuint nvglImageHandle(NVGcontext* ctx, int image) +{ + GLNVGcontext* gl = (GLNVGcontext*)nvgInternalParams(ctx)->userPtr; + GLNVGtexture* tex = glnvg__findTexture(gl, image); + return tex->tex; +} + +#endif /* NANOVG_GL_IMPLEMENTATION */ diff --git a/dpf/dgl/src/nanovg/nanovg_gl_utils.h b/dpf/dgl/src/nanovg/nanovg_gl_utils.h new file mode 100644 index 0000000..89ae481 --- /dev/null +++ b/dpf/dgl/src/nanovg/nanovg_gl_utils.h @@ -0,0 +1,132 @@ +// +// Copyright (c) 2009-2013 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// +#ifndef NANOVG_GL_UTILS_H +#define NANOVG_GL_UTILS_H + +struct NVGLUframebuffer { + NVGcontext* ctx; + GLuint fbo; + GLuint rbo; + GLuint texture; + int image; +}; +typedef struct NVGLUframebuffer NVGLUframebuffer; + +// Helper function to create GL frame buffer to render to. +void nvgluBindFramebuffer(NVGLUframebuffer* fb); +NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* ctx, int w, int h, int imageFlags); +void nvgluDeleteFramebuffer(NVGcontext* ctx, NVGLUframebuffer* fb); + +#endif // NANOVG_GL_UTILS_H + +#ifdef NANOVG_GL_IMPLEMENTATION + +#if defined(NANOVG_GL3) || defined(NANOVG_GLES2) || defined(NANOVG_GLES3) +// FBO is core in OpenGL 3>. +# define NANOVG_FBO_VALID 1 +#elif defined(NANOVG_GL2) +// On OS X including glext defines FBO on GL2 too. +# ifdef __APPLE__ +# include +# define NANOVG_FBO_VALID 1 +# endif +#endif + +static GLint defaultFBO = -1; + +NVGLUframebuffer* nvgluCreateFramebuffer(NVGcontext* ctx, int w, int h, int imageFlags) +{ +#ifdef NANOVG_FBO_VALID + GLint defaultFBO; + GLint defaultRBO; + NVGLUframebuffer* fb = NULL; + + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO); + glGetIntegerv(GL_RENDERBUFFER_BINDING, &defaultRBO); + + fb = (NVGLUframebuffer*)malloc(sizeof(NVGLUframebuffer)); + if (fb == NULL) goto error; + memset(fb, 0, sizeof(NVGLUframebuffer)); + + fb->image = nvgCreateImageRGBA(ctx, w, h, imageFlags | NVG_IMAGE_FLIPY | NVG_IMAGE_PREMULTIPLIED, NULL); + fb->texture = nvglImageHandle(ctx, fb->image); + + // frame buffer object + glGenFramebuffers(1, &fb->fbo); + glBindFramebuffer(GL_FRAMEBUFFER, fb->fbo); + + // render buffer object + glGenRenderbuffers(1, &fb->rbo); + glBindRenderbuffer(GL_RENDERBUFFER, fb->rbo); + glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, w, h); + + // combine all + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fb->texture, 0); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, fb->rbo); + + if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) goto error; + + glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); + glBindRenderbuffer(GL_RENDERBUFFER, defaultRBO); + return fb; +error: + glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); + glBindRenderbuffer(GL_RENDERBUFFER, defaultRBO); + nvgluDeleteFramebuffer(ctx, fb); + return NULL; +#else + NVG_NOTUSED(ctx); + NVG_NOTUSED(w); + NVG_NOTUSED(h); + NVG_NOTUSED(imageFlags); + return NULL; +#endif +} + +void nvgluBindFramebuffer(NVGLUframebuffer* fb) +{ +#ifdef NANOVG_FBO_VALID + if (defaultFBO == -1) glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO); + glBindFramebuffer(GL_FRAMEBUFFER, fb != NULL ? fb->fbo : defaultFBO); +#else + NVG_NOTUSED(fb); +#endif +} + +void nvgluDeleteFramebuffer(NVGcontext* ctx, NVGLUframebuffer* fb) +{ +#ifdef NANOVG_FBO_VALID + if (fb == NULL) return; + if (fb->fbo != 0) + glDeleteFramebuffers(1, &fb->fbo); + if (fb->rbo != 0) + glDeleteRenderbuffers(1, &fb->rbo); + if (fb->image >= 0) + nvgDeleteImage(ctx, fb->image); + fb->fbo = 0; + fb->rbo = 0; + fb->texture = 0; + fb->image = -1; + free(fb); +#else + NVG_NOTUSED(ctx); + NVG_NOTUSED(fb); +#endif +} + +#endif // NANOVG_GL_IMPLEMENTATION diff --git a/dpf/dgl/src/nanovg/stb_image.h b/dpf/dgl/src/nanovg/stb_image.h new file mode 100644 index 0000000..a5868ea --- /dev/null +++ b/dpf/dgl/src/nanovg/stb_image.h @@ -0,0 +1,4648 @@ +/* stb_image - v1.39 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c + when you control the images you're loading + no warranty implied; use at your own risk + + Do this: + #define STB_IMAGE_IMPLEMENTATION + before you include this file in *one* C or C++ file to create the implementation. + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline (no JPEG progressive) + PNG 8-bit-per-channel only + + TGA (not sure what subset, if a subset) + BMP non-1bpp, non-RLE + PSD (composited view only, no extra channels) + + GIF (*comp always reports as 4-channel) + HDR (radiance rgbE format) + PIC (Softimage PIC) + + - stbi__jpeg_huff_decode from memory or through FILE (define STBI_NO_STDIO to remove code) + - stbi__jpeg_huff_decode from arbitrary I/O callbacks + - overridable dequantizing-IDCT, YCbCr-to-RGB conversion (define STBI_SIMD) + + Latest revisions: + 1.39 (2014-06-15) TGA optimization fix, multiple BMP fixes + 1.38 (2014-06-06) suppress MSVC run-time warnings, fix accidental rename of 'skip' + 1.37 (2014-06-04) remove duplicate typedef + 1.36 (2014-06-03) converted to header file, allow reading incorrect iphoned-images without iphone flag + 1.35 (2014-05-27) warnings, bugfixes, TGA optimization, etc + 1.34 (unknown ) warning fix + 1.33 (2011-07-14) minor fixes suggested by Dave Moore + + See end of file for full revision history. + + TODO: + stbi_info support for BMP,PSD,HDR,PIC + + + ============================ Contributors ========================= + + Image formats Bug fixes & warning fixes + Sean Barrett (jpeg, png, bmp) Marc LeBlanc + Nicolas Schulz (hdr, psd) Christpher Lloyd + Jonathan Dummer (tga) Dave Moore + Jean-Marc Lienher (gif) Won Chun + Tom Seddon (pic) the Horde3D community + Thatcher Ulrich (psd) Janez Zemva + Jonathan Blow + Laurent Gomila + Extensions, features Aruelien Pocheville + Jetro Lauha (stbi_info) Ryamond Barbiero + James "moose2000" Brown (iPhone PNG) David Woo + Ben "Disch" Wenger (io callbacks) Roy Eltham + Martin "SpartanJ" Golini Luke Graham + Thomas Ruf + John Bartholomew + Optimizations & bugfixes Ken Hamada + Fabian "ryg" Giesen Cort Stratton + Arseny Kapoulkine Blazej Dariusz Roszkowski + Thibault Reuille + If your name should be here but Paul Du Bois + isn't, let Sean know. Guillaume George + Jerry Jansson + Hayaki Saito +*/ + +#ifndef STBI_INCLUDE_STB_IMAGE_H +#define STBI_INCLUDE_STB_IMAGE_H + +// Limitations: +// - no jpeg progressive support +// - non-HDR formats support 8-bit samples only (jpeg, png) +// - no delayed line count (jpeg) -- IJG doesn't support either +// - no 1-bit BMP +// - GIF always returns *comp=4 +// +// Basic usage (see HDR discussion below): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// // ... but 'n' will always be the number that it would have been if you said 0 +// stbi_image_free(data) +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *comp -- outputs # of image components in image file +// int req_comp -- if non-zero, # of image components requested in result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'req_comp' if req_comp is non-zero, or *comp otherwise. +// If req_comp is non-zero, *comp has the number of components that _would_ +// have been output otherwise. E.g. if you set req_comp to 4, you will always +// get RGBA output, but you can check *comp to easily see if it's opaque. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *comp will be unchanged. The function stbi_failure_reason() +// can be queried for an extremely brief, end-user unfriendly explanation +// of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid +// compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly +// more user-friendly ones. +// +// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. +// +// =========================================================================== +// +// iPhone PNG support: +// +// By default we convert iphone-formatted PNGs back to RGB; nominally they +// would silently load as BGR, except the existing code should have just +// failed on such iPhone PNGs. But you can disable this conversion by +// by calling stbi_convert_iphone_png_to_rgb(0), in which case +// you will always just get the native iphone "format" through. +// +// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per +// pixel to remove any premultiplied alpha *only* if the image file explicitly +// says there's premultiplied data (currently only happens in iPhone images, +// and only if iPhone convert-to-rgb processing is on). +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image now supports loading HDR images in general, and currently +// the Radiance .HDR file format, although the support is provided +// generically. You can still load any file through the existing interface; +// if you attempt to load an HDR file, it will be automatically remapped to +// LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; +// both of these constants can be reconfigured through this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); +// +// =========================================================================== +// +// I/O callbacks +// +// I/O callbacks allow you to read from arbitrary sources, like packaged +// files or some other source. Data read from callbacks are processed +// through a small internal buffer (currently 128 bytes) to try to reduce +// overhead. +// +// The three functions you must define are "read" (reads some bytes of data), +// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). + + +#ifndef STBI_NO_STDIO + +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#define _CRT_SECURE_NO_WARNINGS // suppress warnings about fopen() +#pragma warning(push) +#pragma warning(disable:4996) // suppress even more warnings about fopen() +#endif +#include +#endif // STBI_NO_STDIO + +#define STBI_VERSION 1 + +enum +{ + STBI_default = 0, // only used for req_comp + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4 +}; + +typedef unsigned char stbi_uc; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef STB_IMAGE_STATIC +#define STBIDEF static +#else +#define STBIDEF extern +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// PRIMARY API - works on images of any type +// + +// +// load image by filename, open file, or memory buffer +// + +STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *comp, int req_comp); +STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +// for stbi_load_from_file, file pointer is left pointing immediately after image +#endif + +typedef struct +{ + int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read + void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative + int (*eof) (void *user); // returns nonzero if we are at end of file/data +} stbi_io_callbacks; + +STBIDEF stbi_uc *stbi_load_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp); + +#ifndef STBI_NO_HDR + STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); + + #ifndef STBI_NO_STDIO + STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *comp, int req_comp); + STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); + #endif + + STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp); + + STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); + STBIDEF void stbi_hdr_to_ldr_scale(float scale); + + STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); + STBIDEF void stbi_ldr_to_hdr_scale(float scale); +#endif // STBI_NO_HDR + +// stbi_is_hdr is always defined +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename); +STBIDEF int stbi_is_hdr_from_file(FILE *f); +#endif // STBI_NO_STDIO + + +// get a VERY brief reason for failure +// NOT THREADSAFE +STBIDEF const char *stbi_failure_reason (void); + +// free the loaded image -- this is just free() +STBIDEF void stbi_image_free (void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); + +#endif + + + +// for image formats that explicitly notate that they have premultiplied alpha, +// we just return the colors as stored in the file. set this flag to force +// unpremultiplication. results are undefined if the unpremultiply overflow. +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); + +// indicate whether we should process iphone images back to canonical format, +// or just pass them through "as-is" +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); + + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); +STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + + +// define faster low-level operations (typically SIMD support) +#ifdef STBI_SIMD +typedef void (*stbi_idct_8x8)(stbi_uc *out, int out_stride, short data[64], unsigned short *dequantize); +// compute an integer IDCT on "input" +// input[x] = data[x] * dequantize[x] +// write results to 'out': 64 samples, each run of 8 spaced by 'out_stride' +// CLAMP results to 0..255 +typedef void (*stbi_YCbCr_to_RGB_run)(stbi_uc *output, stbi_uc const *y, stbi_uc const *cb, stbi_uc const *cr, int count, int step); +// compute a conversion from YCbCr to RGB +// 'count' pixels +// write pixels to 'output'; each pixel is 'step' bytes (either 3 or 4; if 4, write '255' as 4th), order R,G,B +// y: Y input channel +// cb: Cb input channel; scale/biased to be 0..255 +// cr: Cr input channel; scale/biased to be 0..255 + +STBIDEF void stbi_install_idct(stbi_idct_8x8 func); +STBIDEF void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func); +#endif // STBI_SIMD + + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +#ifndef STBI_NO_HDR +#include // ldexp +#include // strcmp, strtok +#endif + +#ifndef STBI_NO_STDIO +#include +#endif +#include +#include +#include +#include +#include // ptrdiff_t on osx + +#ifndef _MSC_VER + #ifdef __cplusplus + #define stbi_inline inline + #else + #define stbi_inline + #endif +#else + #define stbi_inline __forceinline +#endif + + +#ifdef _MSC_VER +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +#else +#include +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +#endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif + +#ifdef _MSC_VER +#define STBI_HAS_LROTL +#endif + +#ifdef STBI_HAS_LROTL + #define stbi_lrot(x,y) _lrotl(x,y) +#else + #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (32 - (y)))) +#endif + +/////////////////////////////////////////////// +// +// stbi__context struct and start_xxx functions + +// stbi__context structure is our basic context used by all images, so it +// contains all the IO context, plus some basic image information +typedef struct +{ + stbi__uint32 img_x, img_y; + int img_n, img_out_n; + + stbi_io_callbacks io; + void *io_user_data; + + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original; +} stbi__context; + + +static void stbi__refill_buffer(stbi__context *s); + +// initialize a memory-stbi__jpeg_huff_decode context +static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) +{ + s->io.read = NULL; + s->read_from_callbacks = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; + s->img_buffer_end = (stbi_uc *) buffer+len; +} + +// initialize a callback-based context +static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) +{ + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); +} + +#ifndef STBI_NO_STDIO + +static int stbi__stdio_read(void *user, char *data, int size) +{ + return (int) fread(data,1,size,(FILE*) user); +} + +static void stbi__stdio_skip(void *user, int n) +{ + fseek((FILE*) user, n, SEEK_CUR); +} + +static int stbi__stdio_eof(void *user) +{ + return feof((FILE*) user); +} + +static stbi_io_callbacks stbi__stdio_callbacks = +{ + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, +}; + +static void stbi__start_file(stbi__context *s, FILE *f) +{ + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); +} + +//static void stop_file(stbi__context *s) { } + +#endif // !STBI_NO_STDIO + +static void stbi__rewind(stbi__context *s) +{ + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 bytes + s->img_buffer = s->img_buffer_original; +} + +static int stbi__jpeg_test(stbi__context *s); +static stbi_uc *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__png_test(stbi__context *s); +static stbi_uc *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__bmp_test(stbi__context *s); +static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__tga_test(stbi__context *s); +static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__psd_test(stbi__context *s); +static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_HDR +static int stbi__hdr_test(stbi__context *s); +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +#endif +static int stbi__pic_test(stbi__context *s); +static stbi_uc *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__gif_test(stbi__context *s); +static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); + + +// this is not threadsafe +static const char *stbi__g_failure_reason; + +STBIDEF const char *stbi_failure_reason(void) +{ + return stbi__g_failure_reason; +} + +static int stbi__err(const char *str) +{ + stbi__g_failure_reason = str; + return 0; +} + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +#ifdef STBI_NO_FAILURE_STRINGS + #define stbi__err(x,y) 0 +#elif defined(STBI_FAILURE_USERMSG) + #define stbi__err(x,y) stbi__err(y) +#else + #define stbi__err(x,y) stbi__err(x) +#endif + +#define stbi__errpf(x,y) ((float *) (stbi__err(x,y)?NULL:NULL)) +#define stbi__errpuc(x,y) ((unsigned char *) (stbi__err(x,y)?NULL:NULL)) + +STBIDEF void stbi_image_free(void *retval_from_stbi_load) +{ + free(retval_from_stbi_load); +} + +#ifndef STBI_NO_HDR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +static unsigned char *stbi_load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp); + if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp); + if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp); + if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp); + if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp); + if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp); + + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float *hdr = stbi__hdr_load(s, x,y,comp,req_comp); + return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) + return stbi__tga_load(s,x,y,comp,req_comp); + return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); +} + +#ifndef STBI_NO_STDIO +STBIDEF unsigned char *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = fopen(filename, "rb"); + unsigned char *result; + if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF unsigned char *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi_load_main(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} +#endif //!STBI_NO_STDIO + +STBIDEF unsigned char *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi_load_main(&s,x,y,comp,req_comp); +} + +unsigned char *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi_load_main(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_HDR + +float *stbi_loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) + return stbi__hdr_load(s,x,y,comp,req_comp); + #endif + data = stbi_load_main(s, x, y, comp, req_comp); + if (data) + return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); +} + +float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi_loadf_main(&s,x,y,comp,req_comp); +} + +float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi_loadf_main(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = fopen(filename, "rb"); + float *result; + if (!f) return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_file(&s,f); + return stbi_loadf_main(&s,x,y,comp,req_comp); +} +#endif // !STBI_NO_STDIO + +#endif // !STBI_NO_HDR + +// these is-hdr-or-not is defined independent of whether STBI_NO_HDR is +// defined, for API simplicity; if STBI_NO_HDR is defined, it always +// reports false! + +int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; + #endif +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename) +{ + FILE *f = fopen(filename, "rb"); + int result=0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +STBIDEF int stbi_is_hdr_from_file(FILE *f) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_file(&s,f); + return stbi__hdr_test(&s); + #else + return 0; + #endif +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__hdr_test(&s); + #else + return 0; + #endif +} + +#ifndef STBI_NO_HDR +static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; +static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; + +void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } +void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } + +void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } +void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +#endif + + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum +{ + SCAN_load=0, + SCAN_type, + SCAN_header +}; + +static void stbi__refill_buffer(stbi__context *s) +{ + int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, stbi__err.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start+1; + *s->img_buffer = 0; + } else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; + } +} + +stbi_inline static stbi_uc stbi__get8(stbi__context *s) +{ + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; + } + return 0; +} + +stbi_inline static int stbi__at_eof(stbi__context *s) +{ + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} + +static void stbi__skip(stbi__context *s, int n) +{ + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} + +static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) +{ + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); + res = (count == (n-blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer+n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } else + return 0; +} + +static int stbi__get16be(stbi__context *s) +{ + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); +} + +static stbi__uint32 stbi__get32be(stbi__context *s) +{ + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); +} + +static int stbi__get16le(stbi__context *s) +{ + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); +} + +static stbi__uint32 stbi__get32le(stbi__context *s) +{ + stbi__uint32 z = stbi__get16le(s); + return z + (stbi__get16le(s) << 16); +} + +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (stbi__err.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) +{ + return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); +} + +static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + unsigned char *good; + + if (req_comp == img_n) return data; + assert(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *) malloc(req_comp * x * y); + if (good == NULL) { + free(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + unsigned char *src = data + j * x * img_n ; + unsigned char *dest = good + j * x * req_comp; + + #define COMBO(a,b) ((a)*8+(b)) + #define CASE(a,b) case COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (COMBO(img_n, req_comp)) { + CASE(1,2) dest[0]=src[0], dest[1]=255; break; + CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break; + CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break; + CASE(2,1) dest[0]=src[0]; break; + CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break; + CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break; + CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break; + CASE(3,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break; + CASE(3,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = 255; break; + CASE(4,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break; + CASE(4,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break; + CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break; + default: assert(0); + } + #undef CASE + } + + free(data); + return good; +} + +#ifndef STBI_NO_HDR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) +{ + int i,k,n; + float *output = (float *) malloc(x * y * comp * sizeof(float)); + if (output == NULL) { free(data); return stbi__errpf("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); + } + if (k < comp) output[i*comp + k] = data[i*comp+k]/255.0f; + } + free(data); + return output; +} + +#define stbi__float2int(x) ((int) (x)) +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) +{ + int i,k,n; + stbi_uc *output = (stbi_uc *) malloc(x * y * comp); + if (output == NULL) { free(data); return stbi__errpuc("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + if (k < comp) { + float z = data[i*comp+k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + } + free(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder (not actually fully baseline implementation) +// +// simple implementation +// - channel subsampling of at most 2 in each dimension +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - uses a lot of intermediate memory, could cache poorly +// - load http://nothings.org/remote/anemones.jpg 3 times on 2.8Ghz P4 +// stb_jpeg: 1.34 seconds (MSVC6, default release build) +// stb_jpeg: 1.06 seconds (MSVC6, processor = Pentium Pro) +// IJL11.dll: 1.08 seconds (compiled by intel) +// IJG 1998: 0.98 seconds (MSVC6, makefile provided by IJG) +// IJG 1998: 0.95 seconds (MSVC6, makefile + proc=PPro) + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct +{ + #ifdef STBI_SIMD + unsigned short dequant2[4][64]; + #endif + stbi__context *s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi_uc dequant[4][64]; + +// sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + +// definition of jpeg image component + struct + { + int id; + int h,v; + int tq; + int hd,ha; + int dc_pred; + + int x,y,w2,h2; + stbi_uc *data; + void *raw_data; + stbi_uc *linebuf; + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int scan_n, order[4]; + int restart_interval, todo; +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman *h, int *count) +{ + int i,j,k=0,code; + // build size list for each symbol (from JPEG spec) + for (i=0; i < 16; ++i) + for (j=0; j < count[i]; ++j) + h->size[k++] = (stbi_uc) (i+1); + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for(j=1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16) (code++); + if (code-1 >= (1 << j)) return stbi__err("bad code lengths","Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16-j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i=0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS-s); + int m = 1 << (FAST_BITS-s); + for (j=0; j < m; ++j) { + h->fast[c+j] = (stbi_uc) i; + } + } + } + return 1; +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg *j) +{ + do { + int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + if (c != 0) { + j->marker = (unsigned char) c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; + +// stbi__jpeg_huff_decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) +{ + unsigned int temp; + int c,k; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k=FAST_BITS+1 ; ; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + assert((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// combined JPEG 'receive' and JPEG 'extend', since baseline +// always extends everything it receives. +stbi_inline static int stbi__extend_receive(stbi__jpeg *j, int n) +{ + unsigned int m = 1 << (n-1); + unsigned int k; + if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + + #if 1 + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + #else + k = (j->code_buffer >> (32 - n)) & stbi__bmask[n]; + j->code_bits -= n; + j->code_buffer <<= n; + #endif + // the following test is probably a random branch that won't + // predict well. I tried to table accelerate it but failed. + // maybe it's compiling as a conditional move? + if (k < m) + return (-1 << n) + k + 1; + else + return k; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static stbi_uc stbi__jpeg_dezigzag[64+15] = +{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// stbi__jpeg_huff_decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, int b) +{ + int diff,dc,k; + int t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data,0,64*sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) dc; + + // stbi__jpeg_huff_decode AC components, see JPEG spec + k = 1; + do { + int r,s; + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // stbi__jpeg_huff_decode into unzigzag'd location + data[stbi__jpeg_dezigzag[k++]] = (short) stbi__extend_receive(j,s); + } + } while (k < 64); + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) +{ + // trick to use a single test to catch both cases + if ((unsigned int) x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (stbi_uc) x; +} + +#define stbi__f2f(x) (int) (((x) * 4096 + 0.5)) +#define stbi__fsh(x) ((x) << 12) + +// derived from jidctint -- DCT_ISLOW +#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ + int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2+p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3*stbi__f2f(-1.847759065f); \ + t3 = p1 + p2*stbi__f2f( 0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2+p3); \ + t1 = stbi__fsh(p2-p3); \ + x0 = t0+t3; \ + x3 = t0-t3; \ + x1 = t1+t2; \ + x2 = t1-t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0+t2; \ + p4 = t1+t3; \ + p1 = t0+t3; \ + p2 = t1+t2; \ + p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ + t0 = t0*stbi__f2f( 0.298631336f); \ + t1 = t1*stbi__f2f( 2.053119869f); \ + t2 = t2*stbi__f2f( 3.072711026f); \ + t3 = t3*stbi__f2f( 1.501321110f); \ + p1 = p5 + p1*stbi__f2f(-0.899976223f); \ + p2 = p5 + p2*stbi__f2f(-2.562915447f); \ + p3 = p3*stbi__f2f(-1.961570560f); \ + p4 = p4*stbi__f2f(-0.390180644f); \ + t3 += p1+p4; \ + t2 += p2+p3; \ + t1 += p2+p4; \ + t0 += p1+p3; + +#ifdef STBI_SIMD +typedef unsigned short stbi_dequantize_t; +#else +typedef stbi_uc stbi_dequantize_t; +#endif + +// .344 seconds on 3*anemones.jpg +static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64], stbi_dequantize_t *dequantize) +{ + int i,val[64],*v=val; + stbi_dequantize_t *dq = dequantize; + stbi_uc *o; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d,++dq, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0] * dq[0] << 2; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + STBI__IDCT_1D(d[ 0]*dq[ 0],d[ 8]*dq[ 8],d[16]*dq[16],d[24]*dq[24], + d[32]*dq[32],d[40]*dq[40],d[48]*dq[48],d[56]*dq[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128<<17); + x1 += 65536 + (128<<17); + x2 += 65536 + (128<<17); + x3 += 65536 + (128<<17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0+t3) >> 17); + o[7] = stbi__clamp((x0-t3) >> 17); + o[1] = stbi__clamp((x1+t2) >> 17); + o[6] = stbi__clamp((x1-t2) >> 17); + o[2] = stbi__clamp((x2+t1) >> 17); + o[5] = stbi__clamp((x2-t1) >> 17); + o[3] = stbi__clamp((x3+t0) >> 17); + o[4] = stbi__clamp((x3-t0) >> 17); + } +} + +#ifdef STBI_SIMD +static stbi_idct_8x8 stbi__idct_installed = stbi__idct_block; + +STBIDEF void stbi_install_idct(stbi_idct_8x8 func) +{ + stbi__idct_installed = func; +} +#endif + +#define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg *j) +{ + stbi_uc x; + if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } + x = stbi__get8(j->s); + if (x != 0xff) return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg *j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg *z) +{ + stbi__jpeg_reset(z); + if (z->scan_n == 1) { + int i,j; + #ifdef STBI_SIMD + __declspec(align(16)) + #endif + short data[64]; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+z->img_comp[n].ha, n)) return 0; + #ifdef STBI_SIMD + stbi__idct_installed(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data, z->dequant2[z->img_comp[n].tq]); + #else + stbi__idct_block(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data, z->dequant[z->img_comp[n].tq]); + #endif + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + } else { // interleaved! + int i,j,k,x,y; + short data[64]; + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x)*8; + int y2 = (j*z->img_comp[n].v + y)*8; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+z->img_comp[n].ha, n)) return 0; + #ifdef STBI_SIMD + stbi__idct_installed(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data, z->dequant2[z->img_comp[n].tq]); + #else + stbi__idct_block(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data, z->dequant[z->img_comp[n].tq]); + #endif + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + } + return 1; +} + +static int stbi__process_marker(stbi__jpeg *z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker","Corrupt JPEG"); + + case 0xC2: // stbi__SOF - progressive + return stbi__err("progressive jpeg","JPEG format not supported (progressive)"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s)-2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4; + int t = q & 15,i; + if (p != 0) return stbi__err("bad DQT type","Corrupt JPEG"); + if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); + for (i=0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = stbi__get8(z->s); + #ifdef STBI_SIMD + for (i=0; i < 64; ++i) + z->dequant2[t][i] = z->dequant[t][i]; + #endif + L -= 65; + } + return L==0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s)-2; + while (L > 0) { + stbi_uc *v; + int sizes[16],i,n=0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); + for (i=0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i=0; i < n; ++i) + v[i] = stbi__get8(z->s); + L -= n; + } + return L==0; + } + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + stbi__skip(z->s, stbi__get16be(z->s)-2); + return 1; + } + return 0; +} + +// after we see stbi__SOS +static int stbi__process_scan_header(stbi__jpeg *z) +{ + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad stbi__SOS component count","Corrupt JPEG"); + if (Ls != 6+2*z->scan_n) return stbi__err("bad stbi__SOS len","Corrupt JPEG"); + for (i=0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) return 0; + z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); + z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); + z->order[i] = which; + } + if (stbi__get8(z->s) != 0) return stbi__err("bad stbi__SOS","Corrupt JPEG"); + stbi__get8(z->s); // should be 63, but might be 0 + if (stbi__get8(z->s) != 0) return stbi__err("bad stbi__SOS","Corrupt JPEG"); + + return 1; +} + +static int stbi__process_frame_header(stbi__jpeg *z, int scan) +{ + stbi__context *s = z->s; + int Lf,p,i,q, h_max=1,v_max=1,c; + Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad stbi__SOF len","Corrupt JPEG"); // JPEG + p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires + c = stbi__get8(s); + if (c != 3 && c != 1) return stbi__err("bad component count","Corrupt JPEG"); // JFIF requires + s->img_n = c; + for (i=0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8+3*s->img_n) return stbi__err("bad stbi__SOF len","Corrupt JPEG"); + + for (i=0; i < s->img_n; ++i) { + z->img_comp[i].id = stbi__get8(s); + if (z->img_comp[i].id != i+1) // JFIF requires + if (z->img_comp[i].id != i) // some version of jpegtran outputs non-JFIF-compliant files! + return stbi__err("bad component ID","Corrupt JPEG"); + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); + z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); + } + + if (scan != SCAN_load) return 1; + + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to stbi__jpeg_huff_decode"); + + for (i=0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; + + for (i=0; i < s->img_n; ++i) { + // number of effective pixels (stbi__err.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; + // to simplify generation, we'll allocate enough memory to stbi__jpeg_huff_decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (stbi__err.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].raw_data = malloc(z->img_comp[i].w2 * z->img_comp[i].h2+15); + if (z->img_comp[i].raw_data == NULL) { + for(--i; i >= 0; --i) { + free(z->img_comp[i].raw_data); + z->img_comp[i].data = NULL; + } + return stbi__err("outofmem", "Out of memory"); + } + // align blocks for installable-idct using mmx/sse + z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); + z->img_comp[i].linebuf = NULL; + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (stbi__err.g. stbi__SOF) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1) +#define stbi__SOS(x) ((x) == 0xda) + +static int decode_jpeg_header(stbi__jpeg *z, int scan) +{ + int m; + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) return stbi__err("no stbi__SOI","Corrupt JPEG"); + if (scan == SCAN_type) return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z,m)) return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) return stbi__err("no stbi__SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + if (!stbi__process_frame_header(z, scan)) return 0; + return 1; +} + +static int decode_jpeg_image(stbi__jpeg *j) +{ + int m; + j->restart_interval = 0; + if (!decode_jpeg_header(j, SCAN_load)) return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) return 0; + if (!stbi__parse_entropy_coded_data(j)) return 0; + if (j->marker == STBI__MARKER_none ) { + // handle 0s at the end of image data from IP Kamera 9060 + while (!stbi__at_eof(j->s)) { + int x = stbi__get8(j->s); + if (x == 255) { + j->marker = stbi__get8(j->s); + break; + } else if (x != 0) { + return 0; + } + } + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + } else { + if (!stbi__process_marker(j, m)) return 0; + } + m = stbi__get_marker(j); + } + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, + int w, int hs); + +#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) + +static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i=0; i < w; ++i) + out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + stbi_uc *input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0]*3 + input[1] + 2); + for (i=1; i < w-1; ++i) { + int n = 3*input[i]+2; + out[i*2+0] = stbi__div4(n+input[i-1]); + out[i*2+1] = stbi__div4(n+input[i+1]); + } + out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); + out[i*2+1] = input[w-1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) + +static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i,t0,t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + out[0] = stbi__div4(t1+2); + for (i=1; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} + +static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i,j; + STBI_NOTUSED(in_far); + for (i=0; i < w; ++i) + for (j=0; j < hs; ++j) + out[i*hs+j] = in_near[i]; + return out; +} + +#define float2fixed(x) ((int) ((x) * 65536 + 0.5)) + +// 0.38 seconds on 3*anemones.jpg (0.25 with processor = Pro) +// VC6 without processor=Pro is generating multiple LEAs per multiply! +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 16) + 32768; // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr*float2fixed(1.40200f); + g = y_fixed - cr*float2fixed(0.71414f) - cb*float2fixed(0.34414f); + b = y_fixed + cb*float2fixed(1.77200f); + r >>= 16; + g >>= 16; + b >>= 16; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} + +#ifdef STBI_SIMD +static stbi_YCbCr_to_RGB_run stbi__YCbCr_installed = stbi__YCbCr_to_RGB_row; + +STBIDEF void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func) +{ + stbi__YCbCr_installed = func; +} +#endif + + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg *j) +{ + int i; + for (i=0; i < j->s->img_n; ++i) { + if (j->img_comp[i].data) { + free(j->img_comp[i].raw_data); + j->img_comp[i].data = NULL; + } + if (j->img_comp[i].linebuf) { + free(j->img_comp[i].linebuf); + j->img_comp[i].linebuf = NULL; + } + } +} + +typedef struct +{ + resample_row_func resample; + stbi_uc *line0,*line1; + int hs,vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) +{ + int n, decode_n; + // validate req_comp + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + z->s->img_n = 0; + + // load a jpeg image from whichever source + if (!decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n; + + if (z->s->img_n == 3 && n < 3) + decode_n = 1; + else + decode_n = z->s->img_n; + + // resample and color-convert + { + int k; + unsigned int i,j; + stbi_uc *output; + stbi_uc *coutput[4]; + + stbi__resample res_comp[4]; + + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (stbi_uc *) malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs-1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) r->resample = stbi__resample_row_hv_2; + else r->resample = stbi__resample_row_generic; + } + + // can't error after this so, this is safe + output = (stbi_uc *) malloc(n * z->s->img_x * z->s->img_y + 1); + if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + // now go ahead and resample + for (j=0; j < z->s->img_y; ++j) { + stbi_uc *out = output + n * z->s->img_x * j; + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + stbi_uc *y = coutput[0]; + if (z->s->img_n == 3) { + #ifdef STBI_SIMD + stbi__YCbCr_installed(out, y, coutput[1], coutput[2], z->s->img_x, n); + #else + stbi__YCbCr_to_RGB_row(out, y, coutput[1], coutput[2], z->s->img_x, n); + #endif + } else + for (i=0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + stbi_uc *y = coutput[0]; + if (n == 1) + for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; + else + for (i=0; i < z->s->img_x; ++i) *out++ = y[i], *out++ = 255; + } + } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) *comp = z->s->img_n; // report original components, not output + return output; + } +} + +static unsigned char *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__jpeg j; + j.s = s; + return load_jpeg_image(&j, x,y,comp,req_comp); +} + +static int stbi__jpeg_test(stbi__context *s) +{ + int r; + stbi__jpeg j; + j.s = s; + r = decode_jpeg_header(&j, SCAN_type); + stbi__rewind(s); + return r; +} + +static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) +{ + if (!decode_jpeg_header(j, SCAN_header)) { + stbi__rewind( j->s ); + return 0; + } + if (x) *x = j->s->img_x; + if (y) *y = j->s->img_y; + if (comp) *comp = j->s->img_n; + return 1; +} + +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__jpeg j; + j.s = s; + return stbi__jpeg_info_raw(&j, x, y, comp); +} + +// public domain zlib stbi__jpeg_huff_decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct +{ + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[288]; + stbi__uint16 value[288]; +} stbi__zhuffman; + +stbi_inline static int stbi__bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +stbi_inline static int stbi__bit_reverse(int v, int bits) +{ + assert(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // stbi__err.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16-bits); +} + +static int stbi__zbuild_huffman(stbi__zhuffman *z, stbi_uc *sizelist, int num) +{ + int i,k=0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 255, sizeof(z->fast)); + for (i=0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i=1; i < 16; ++i) + assert(sizes[i] <= (1 << i)); + code = 0; + for (i=1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16) code; + z->firstsymbol[i] = (stbi__uint16) k; + code = (code + sizes[i]); + if (sizes[i]) + if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt JPEG"); + z->maxcode[i] = code << (16-i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i=0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + z->size [c] = (stbi_uc ) s; + z->value[c] = (stbi__uint16) i; + if (s <= STBI__ZFAST_BITS) { + int k = stbi__bit_reverse(next_code[s],s); + while (k < (1 << STBI__ZFAST_BITS)) { + z->fast[k] = (stbi__uint16) c; + k += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct +{ + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + stbi__uint32 code_buffer; + + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; + + stbi__zhuffman z_length, z_distance; +} stbi__zbuf; + +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) +{ + if (z->zbuffer >= z->zbuffer_end) return 0; + return *z->zbuffer++; +} + +static void stbi__fill_bits(stbi__zbuf *z) +{ + do { + assert(z->code_buffer < (1U << z->num_bits)); + z->code_buffer |= stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) +{ + unsigned int k; + if (z->num_bits < n) stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s,k; + if (a->num_bits < 16) stbi__fill_bits(a); + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b < 0xffff) { + s = z->size[b]; + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; + } + + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s=STBI__ZFAST_BITS+1; ; ++s) + if (k < z->maxcode[s]) + break; + if (s == 16) return -1; // invalid code! + // code size is s, so: + b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; + assert(z->size[b] == s); + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +static int stbi__zexpand(stbi__zbuf *z, int n) // need to make room for n bytes +{ + char *q; + int cur, limit; + if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); + cur = (int) (z->zout - z->zout_start); + limit = (int) (z->zout_end - z->zout_start); + while (cur + n > limit) + limit *= 2; + q = (char *) realloc(z->zout_start, limit); + if (q == NULL) return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static int stbi__zlength_base[31] = { + 3,4,5,6,7,8,9,10,11,13, + 15,17,19,23,27,31,35,43,51,59, + 67,83,99,115,131,163,195,227,258,0,0 }; + +static int stbi__zlength_extra[31]= +{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + +static int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, +257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + +static int stbi__zdist_extra[32] = +{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static int stbi__parse_huffman_block(stbi__zbuf *a) +{ + for(;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes + if (a->zout >= a->zout_end) if (!stbi__zexpand(a, 1)) return 0; + *a->zout++ = (char) z; + } else { + stbi_uc *p; + int len,dist; + if (z == 256) return 1; + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (a->zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); + if (a->zout + len > a->zout_end) if (!stbi__zexpand(a, len)) return 0; + p = (stbi_uc *) (a->zout - dist); + while (len--) + *a->zout++ = *p++; + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf *a) +{ + static stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286+32+137];//padding for maximum single op + stbi_uc codelength_sizes[19]; + int i,n; + + int hlit = stbi__zreceive(a,5) + 257; + int hdist = stbi__zreceive(a,5) + 1; + int hclen = stbi__zreceive(a,4) + 4; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i=0; i < hclen; ++i) { + int s = stbi__zreceive(a,3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < hlit + hdist) { + int c = stbi__zhuffman_decode(a, &z_codelength); + assert(c >= 0 && c < 19); + if (c < 16) + lencodes[n++] = (stbi_uc) c; + else if (c == 16) { + c = stbi__zreceive(a,2)+3; + memset(lencodes+n, lencodes[n-1], c); + n += c; + } else if (c == 17) { + c = stbi__zreceive(a,3)+3; + memset(lencodes+n, 0, c); + n += c; + } else { + assert(c == 18); + c = stbi__zreceive(a,7)+11; + memset(lencodes+n, 0, c); + n += c; + } + } + if (n != hlit+hdist) return stbi__err("bad codelengths","Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; + return 1; +} + +static int stbi__parse_uncomperssed_block(stbi__zbuf *a) +{ + stbi_uc header[4]; + int len,nlen,k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + assert(a->num_bits == 0); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf *a) +{ + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +// @TODO: should statically initialize these for optimal thread safety +static stbi_uc stbi__zdefault_length[288], stbi__zdefault_distance[32]; +static void stbi__init_zdefaults(void) +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; + for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; + for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; + for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; + + for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; +} + +static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) +{ + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) return 0; + a->num_bits = 0; + a->code_buffer = 0; + do { + final = stbi__zreceive(a,1); + type = stbi__zreceive(a,2); + if (type == 0) { + if (!stbi__parse_uncomperssed_block(a)) return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zdefault_distance[31]) stbi__init_zdefaults(); + if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , 288)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; + } else { + if (!stbi__compute_huffman_codes(a)) return 0; + } + if (!stbi__parse_huffman_block(a)) return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + free(a.zout_start); + return NULL; + } +} + +STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) +{ + stbi__zbuf a; + char *p = (char *) malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + free(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) malloc(16384); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer+len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + free(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + + +typedef struct +{ + stbi__uint32 length; + stbi__uint32 type; +} stbi__pngchunk; + +#define PNG_TYPE(a,b,c,d) (((a) << 24) + ((b) << 16) + ((c) << 8) + (d)) + +static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) +{ + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; +} + +static int stbi__check_png_header(stbi__context *s) +{ + static stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; + int i; + for (i=0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); + return 1; +} + +typedef struct +{ + stbi__context *s; + stbi_uc *idata, *expanded, *out; +} stbi__png; + + +enum { + STBI__F_none=0, STBI__F_sub=1, STBI__F_up=2, STBI__F_avg=3, STBI__F_paeth=4, + STBI__F_avg_first, STBI__F_paeth_first +}; + +static stbi_uc first_row_filter[5] = +{ + STBI__F_none, STBI__F_sub, STBI__F_none, STBI__F_avg_first, STBI__F_paeth_first +}; + +static int stbi__paeth(int a, int b, int c) +{ + int p = a + b - c; + int pa = abs(p-a); + int pb = abs(p-b); + int pc = abs(p-c); + if (pa <= pb && pa <= pc) return a; + if (pb <= pc) return b; + return c; +} + +#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings + +// create the png data from post-deflated data +static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y) +{ + stbi__context *s = a->s; + stbi__uint32 i,j,stride = x*out_n; + int k; + int img_n = s->img_n; // copy it into a local for later + assert(out_n == s->img_n || out_n == s->img_n+1); + a->out = (stbi_uc *) malloc(x * y * out_n); + if (!a->out) return stbi__err("outofmem", "Out of memory"); + if (s->img_x == x && s->img_y == y) { + if (raw_len != (img_n * x + 1) * y) return stbi__err("not enough pixels","Corrupt PNG"); + } else { // interlaced: + if (raw_len < (img_n * x + 1) * y) return stbi__err("not enough pixels","Corrupt PNG"); + } + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *prior = cur - stride; + int filter = *raw++; + if (filter > 4) return stbi__err("invalid filter","Corrupt PNG"); + // if first row, use special filter that doesn't sample previous row + if (j == 0) filter = first_row_filter[filter]; + // handle first pixel explicitly + for (k=0; k < img_n; ++k) { + switch (filter) { + case STBI__F_none : cur[k] = raw[k]; break; + case STBI__F_sub : cur[k] = raw[k]; break; + case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; + case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; + case STBI__F_avg_first : cur[k] = raw[k]; break; + case STBI__F_paeth_first: cur[k] = raw[k]; break; + } + } + if (img_n != out_n) cur[img_n] = 255; + raw += img_n; + cur += out_n; + prior += out_n; + // this is a little gross, so that we don't switch per-pixel or per-component + if (img_n == out_n) { + #define CASE(f) \ + case f: \ + for (i=x-1; i >= 1; --i, raw+=img_n,cur+=img_n,prior+=img_n) \ + for (k=0; k < img_n; ++k) + switch (filter) { + CASE(STBI__F_none) cur[k] = raw[k]; break; + CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-img_n]); break; + CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-img_n])>>1)); break; + CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-img_n],prior[k],prior[k-img_n])); break; + CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-img_n] >> 1)); break; + CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-img_n],0,0)); break; + } + #undef CASE + } else { + assert(img_n+1 == out_n); + #define CASE(f) \ + case f: \ + for (i=x-1; i >= 1; --i, cur[img_n]=255,raw+=img_n,cur+=out_n,prior+=out_n) \ + for (k=0; k < img_n; ++k) + switch (filter) { + CASE(STBI__F_none) cur[k] = raw[k]; break; + CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-out_n]); break; + CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-out_n])>>1)); break; + CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-out_n],prior[k],prior[k-out_n])); break; + CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-out_n] >> 1)); break; + CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-out_n],0,0)); break; + } + #undef CASE + } + } + return 1; +} + +static int stbi__create_png_image(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, int interlaced) +{ + stbi_uc *final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, raw, raw_len, out_n, a->s->img_x, a->s->img_y); + + // de-interlacing + final = (stbi_uc *) malloc(a->s->img_x * a->s->img_y * out_n); + for (p=0; p < 7; ++p) { + int xorig[] = { 0,4,0,2,0,1,0 }; + int yorig[] = { 0,0,4,0,2,0,1 }; + int xspc[] = { 8,8,4,4,2,2,1 }; + int yspc[] = { 8,8,8,4,4,2,2 }; + int i,j,x,y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; + if (x && y) { + if (!stbi__create_png_image_raw(a, raw, raw_len, out_n, x, y)) { + free(final); + return 0; + } + for (j=0; j < y; ++j) + for (i=0; i < x; ++i) + memcpy(final + (j*yspc[p]+yorig[p])*a->s->img_x*out_n + (i*xspc[p]+xorig[p])*out_n, + a->out + (j*x+i)*out_n, out_n); + free(a->out); + raw += (x*out_n+1)*y; + raw_len -= (x*out_n+1)*y; + } + } + a->out = final; + + return 1; +} + +static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + assert(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i=0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i=0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) +{ + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; + + p = (stbi_uc *) malloc(pixel_count * pal_img_n); + if (p == NULL) return stbi__err("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p += 3; + } + } else { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p[3] = palette[n+3]; + p += 4; + } + } + free(a->out); + a->out = temp_out; + + STBI_NOTUSED(len); + + return 1; +} + +static int stbi__unpremultiply_on_load = 0; +static int stbi__de_iphone_flag = 0; + +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag = flag_true_if_should_convert; +} + +static void stbi__de_iphone(stbi__png *z) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } else { + assert(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i=0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + p[0] = p[2] * 255 / a; + p[1] = p[1] * 255 / a; + p[2] = t * 255 / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) +{ + stbi_uc palette[1024], pal_img_n=0; + stbi_uc has_trans=0, tc[3]; + stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; + int first=1,k,interlace=0, is_iphone=0; + stbi__context *s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) return 0; + + if (scan == SCAN_type) return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case PNG_TYPE('C','g','B','I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case PNG_TYPE('I','H','D','R'): { + int depth,color,comp,filter; + if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); + first = 0; + if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); + s->img_x = stbi__get32be(s); if (s->img_x > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)"); + s->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)"); + depth = stbi__get8(s); if (depth != 8) return stbi__err("8bit only","PNG not supported: 8-bit only"); + color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); + comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); + filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); + interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); + if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to stbi__jpeg_huff_decode"); + if (scan == SCAN_header) return 1; + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); + // if SCAN_header, have to scan to see if we have a tRNS + } + break; + } + + case PNG_TYPE('P','L','T','E'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); + for (i=0; i < pal_len; ++i) { + palette[i*4+0] = stbi__get8(s); + palette[i*4+1] = stbi__get8(s); + palette[i*4+2] = stbi__get8(s); + palette[i*4+3] = 255; + } + break; + } + + case PNG_TYPE('t','R','N','S'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); + if (pal_img_n) { + if (scan == SCAN_header) { s->img_n = 4; return 1; } + if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); + if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); + pal_img_n = 4; + for (i=0; i < c.length; ++i) + palette[i*4+3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); + if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); + has_trans = 1; + for (k=0; k < s->img_n; ++k) + tc[k] = (stbi_uc) (stbi__get16be(s) & 255); // non 8-bit images will be larger + } + break; + } + + case PNG_TYPE('I','D','A','T'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); + if (scan == SCAN_header) { s->img_n = pal_img_n; return 1; } + if (ioff + c.length > idata_limit) { + stbi_uc *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + p = (stbi_uc *) realloc(z->idata, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); + ioff += c.length; + break; + } + + case PNG_TYPE('I','E','N','D'): { + stbi__uint32 raw_len; + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != SCAN_load) return 1; + if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); + z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, 16384, (int *) &raw_len, !is_iphone); + if (z->expanded == NULL) return 0; // zlib should set error + free(z->idata); z->idata = NULL; + if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n+1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, interlace)) return 0; + if (has_trans) + if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } + free(z->expanded); z->expanded = NULL; + return 1; + } + + default: + // if critical, fail + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { + #ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); + #endif + return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static unsigned char *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp) +{ + unsigned char *result=NULL; + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, SCAN_load, req_comp)) { + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + result = stbi__convert_format(result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) *n = p->s->img_n; + } + free(p->out); p->out = NULL; + free(p->expanded); p->expanded = NULL; + free(p->idata); p->idata = NULL; + + return result; +} + +static unsigned char *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x,y,comp,req_comp); +} + +static int stbi__png_test(stbi__context *s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) +{ + if (!stbi__parse_png_file(p, SCAN_header, 0)) { + stbi__rewind( p->s ); + return 0; + } + if (x) *x = p->s->img_x; + if (y) *y = p->s->img_y; + if (comp) *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} + +// Microsoft/Windows BMP image +static int stbi__bmp_test_raw(stbi__context *s) +{ + int r; + int sz; + if (stbi__get8(s) != 'B') return 0; + if (stbi__get8(s) != 'M') return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context *s) +{ + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) +{ + int n=0; + if (z == 0) return -1; + if (z >= 0x10000) n += 16, z >>= 16; + if (z >= 0x00100) n += 8, z >>= 8; + if (z >= 0x00010) n += 4, z >>= 4; + if (z >= 0x00004) n += 2, z >>= 2; + if (z >= 0x00002) n += 1, z >>= 1; + return n; +} + +static int stbi__bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +static int stbi__shiftsigned(int v, int shift, int bits) +{ + int result; + int z=0; + + if (shift < 0) v <<= -shift; + else v >>= shift; + result = v; + + z = bits; + while (z < 8) { + result += v >> z; + z += bits; + } + return result; +} + +static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *out; + unsigned int mr=0,mg=0,mb=0,ma=0, fake_a=0; + stbi_uc pal[256][4]; + int psize=0,i,j,compress=0,width; + int bpp, flip_vertically, pad, target, offset, hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + offset = stbi__get32le(s); + hsz = stbi__get32le(s); + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); + bpp = stbi__get16le(s); + if (bpp == 1) return stbi__errpuc("monochrome", "BMP type not supported: 1-bit"); + flip_vertically = ((int) s->img_y) > 0; + s->img_y = abs((int) s->img_y); + if (hsz == 12) { + if (bpp < 24) + psize = (offset - 14 - 24) / 3; + } else { + compress = stbi__get32le(s); + if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (bpp == 16 || bpp == 32) { + mr = mg = mb = 0; + if (compress == 0) { + if (bpp == 32) { + mr = 0xffu << 16; + mg = 0xffu << 8; + mb = 0xffu << 0; + ma = 0xffu << 24; + fake_a = 1; // @TODO: check for cases like alpha value is all 0 and switch it to 255 + STBI_NOTUSED(fake_a); + } else { + mr = 31u << 10; + mg = 31u << 5; + mb = 31u << 0; + } + } else if (compress == 3) { + mr = stbi__get32le(s); + mg = stbi__get32le(s); + mb = stbi__get32le(s); + // not documented, but generated by photoshop and handled by mspaint + if (mr == mg && mg == mb) { + // ?!?!? + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else { + assert(hsz == 108 || hsz == 124); + mr = stbi__get32le(s); + mg = stbi__get32le(s); + mb = stbi__get32le(s); + ma = stbi__get32le(s); + stbi__get32le(s); // discard color space + for (i=0; i < 12; ++i) + stbi__get32le(s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le(s); // discard offset of profile data + stbi__get32le(s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + if (bpp < 16) + psize = (offset - 14 - hsz) >> 2; + } + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly stbi__jpeg_huff_decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + out = (stbi_uc *) malloc(target * s->img_x * s->img_y); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (bpp < 16) { + int z=0; + if (psize == 0 || psize > 256) { free(out); return stbi__errpuc("invalid", "Corrupt BMP"); } + for (i=0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (hsz != 12) stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, offset - 14 - hsz - psize * (hsz == 12 ? 3 : 4)); + if (bpp == 4) width = (s->img_x + 1) >> 1; + else if (bpp == 8) width = s->img_x; + else { free(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } + pad = (-width)&3; + for (j=0; j < (int) s->img_y; ++j) { + for (i=0; i < (int) s->img_x; i += 2) { + int v=stbi__get8(s),v2=0; + if (bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + v = (bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + stbi__skip(s, pad); + } + } else { + int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; + int z = 0; + int easy=0; + stbi__skip(s, offset - 14 - hsz); + if (bpp == 24) width = 3 * s->img_x; + else if (bpp == 16) width = 2*s->img_x; + else /* bpp = 32 and pad = 0 */ width=0; + pad = (-width) & 3; + if (bpp == 24) { + easy = 1; + } else if (bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { free(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); + } + for (j=0; j < (int) s->img_y; ++j) { + if (easy) { + for (i=0; i < (int) s->img_x; ++i) { + unsigned char a; + out[z+2] = stbi__get8(s); + out[z+1] = stbi__get8(s); + out[z+0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + if (target == 4) out[z++] = a; + } + } else { + for (i=0; i < (int) s->img_x; ++i) { + stbi__uint32 v = (stbi__uint32) (bpp == 16 ? stbi__get16le(s) : stbi__get32le(s)); + int a; + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + if (target == 4) out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + if (flip_vertically) { + stbi_uc t; + for (j=0; j < (int) s->img_y>>1; ++j) { + stbi_uc *p1 = out + j *s->img_x*target; + stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; + for (i=0; i < (int) s->img_x*target; ++i) { + t = p1[i], p1[i] = p2[i], p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + return out; +} + +// Targa Truevision - TGA +// by Jonathan Dummer + +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) +{ + int tga_w, tga_h, tga_comp; + int sz; + stbi__get8(s); // discard Offset + sz = stbi__get8(s); // color type + if( sz > 1 ) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + sz = stbi__get8(s); // image type + // only RGB or grey allowed, +/- RLE + if ((sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11)) return 0; + stbi__skip(s,9); + tga_w = stbi__get16le(s); + if( tga_w < 1 ) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if( tga_h < 1 ) { + stbi__rewind(s); + return 0; // test height + } + sz = stbi__get8(s); // bits per pixel + // only RGB or RGBA or grey allowed + if ((sz != 8) && (sz != 16) && (sz != 24) && (sz != 32)) { + stbi__rewind(s); + return 0; + } + tga_comp = sz; + if (x) *x = tga_w; + if (y) *y = tga_h; + if (comp) *comp = tga_comp / 8; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context *s) +{ + int res; + int sz; + stbi__get8(s); // discard Offset + sz = stbi__get8(s); // color type + if ( sz > 1 ) return 0; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if ( (sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11) ) return 0; // only RGB or grey allowed, +/- RLE + stbi__get16be(s); // discard palette start + stbi__get16be(s); // discard palette length + stbi__get8(s); // discard bits per palette color entry + stbi__get16be(s); // discard x origin + stbi__get16be(s); // discard y origin + if ( stbi__get16be(s) < 1 ) return 0; // test width + if ( stbi__get16be(s) < 1 ) return 0; // test height + sz = stbi__get8(s); // bits per pixel + if ( (sz != 8) && (sz != 16) && (sz != 24) && (sz != 32) ) + res = 0; + else + res = 1; + stbi__rewind(s); + return res; +} + +static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp = tga_bits_per_pixel / 8; + int tga_inverted = stbi__get8(s); + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4]; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + + // do a tiny bit of precessing + if ( tga_image_type >= 8 ) + { + tga_image_type -= 8; + tga_is_RLE = 1; + } + /* int tga_alpha_bits = tga_inverted & 15; */ + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // error check + if ( //(tga_indexed) || + (tga_width < 1) || (tga_height < 1) || + (tga_image_type < 1) || (tga_image_type > 3) || + ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16) && + (tga_bits_per_pixel != 24) && (tga_bits_per_pixel != 32)) + ) + { + return NULL; // we don't report this as a bad TGA because we don't even know if it's TGA + } + + // If I'm paletted, then I'll use the number of bits from the palette + if ( tga_indexed ) + { + tga_comp = tga_palette_bits / 8; + } + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) *comp = tga_comp; + + tga_data = (unsigned char*)malloc( tga_width * tga_height * tga_comp ); + if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset ); + + if ( !tga_indexed && !tga_is_RLE) { + for (i=0; i < tga_height; ++i) { + int y = tga_inverted ? tga_height -i - 1 : i; + stbi_uc *tga_row = tga_data + y*tga_width*tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } else { + // do I need to load a palette? + if ( tga_indexed) + { + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start ); + // load the palette + tga_palette = (unsigned char*)malloc( tga_palette_len * tga_palette_bits / 8 ); + if (!tga_palette) { + free(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (!stbi__getn(s, tga_palette, tga_palette_len * tga_palette_bits / 8 )) { + free(tga_data); + free(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i=0; i < tga_width * tga_height; ++i) + { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if ( tga_is_RLE ) + { + if ( RLE_count == 0 ) + { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if ( !RLE_repeating ) + { + read_next_pixel = 1; + } + } else + { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if ( read_next_pixel ) + { + // load however much data we did have + if ( tga_indexed ) + { + // read in 1 byte, then perform the lookup + int pal_idx = stbi__get8(s); + if ( pal_idx >= tga_palette_len ) + { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_bits_per_pixel / 8; + for (j = 0; j*8 < tga_bits_per_pixel; ++j) + { + raw_data[j] = tga_palette[pal_idx+j]; + } + } else + { + // read in the data raw + for (j = 0; j*8 < tga_bits_per_pixel; ++j) + { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i*tga_comp+j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if ( tga_inverted ) + { + for (j = 0; j*2 < tga_height; ++j) + { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) + { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if ( tga_palette != NULL ) + { + free( tga_palette ); + } + } + + // swap RGB + if (tga_comp >= 3) + { + unsigned char* tga_pixel = tga_data; + for (i=0; i < tga_width * tga_height; ++i) + { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = + tga_x_origin = tga_y_origin = 0; + // OK, done + return tga_data; +} + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB + +static int stbi__psd_test(stbi__context *s) +{ + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + int pixelCount; + int channelCount, compression; + int channel, i, count, len; + int w,h; + stbi_uc *out; + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6 ); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + // Make sure the depth is 8 bits. + if (stbi__get16be(s) != 8) + return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + stbi__skip(s,stbi__get32be(s) ); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s) ); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s) ); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", "PSD has an unknown compression format"); + + // Create the destination image. + out = (stbi_uc *) malloc(4 * w*h); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w*h; + + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceeded by a 2-byte data count for each row in the data, + // which we're going to just skip. + stbi__skip(s, h * channelCount * 2 ); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out+channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++) *p = (channel == 3 ? 255 : 0), p += 4; + } else { + // Read the RLE data. + count = 0; + while (count < pixelCount) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len ^= 0x0FF; + len += 2; + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out + channel; + if (channel > channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++) *p = channel == 3 ? 255 : 0, p += 4; + } else { + // Read the data. + for (i = 0; i < pixelCount; i++) + *p = stbi__get8(s), p += 4; + } + } + } + + if (req_comp && req_comp != 4) { + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + if (comp) *comp = channelCount; + *y = h; + *x = w; + + return out; +} + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +static int stbi__pic_is4(stbi__context *s,const char *str) +{ + int i; + for (i=0; i<4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context *s) +{ + int i; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) + return 0; + + for(i=0;i<84;++i) + stbi__get8(s); + + if (!stbi__pic_is4(s,"PICT")) + return 0; + + return 1; +} + +typedef struct +{ + stbi_uc size,type,channel; +} stbi__pic_packet; + +static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) +{ + int mask=0x80, i; + + for (i=0; i<4; ++i, mask>>=1) { + if (channel & mask) { + if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); + dest[i]=stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) +{ + int mask=0x80,i; + + for (i=0;i<4; ++i, mask>>=1) + if (channel&mask) + dest[i]=src[i]; +} + +static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) +{ + int act_comp=0,num_packets=0,y,chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return stbi__errpuc("bad format","too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); + if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for(y=0; ytype) { + default: + return stbi__errpuc("bad format","packet has bad compression type"); + + case 0: {//uncompressed + int x; + + for(x=0;xchannel,dest)) + return 0; + break; + } + + case 1://Pure RLE + { + int left=width, i; + + while (left>0) { + stbi_uc count,value[4]; + + count=stbi__get8(s); + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); + + if (count > left) + count = (stbi_uc) left; + + if (!stbi__readval(s,packet->channel,value)) return 0; + + for(i=0; ichannel,dest,value); + left -= count; + } + } + break; + + case 2: {//Mixed RLE + int left=width; + while (left>0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + int i; + + if (count==128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file","scanline overrun"); + + if (!stbi__readval(s,packet->channel,value)) + return 0; + + for(i=0;ichannel,dest,value); + } else { // Raw + ++count; + if (count>left) return stbi__errpuc("bad file","scanline overrun"); + + for(i=0;ichannel,dest)) + return 0; + } + left-=count; + } + break; + } + } + } + } + + return result; +} + +static stbi_uc *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp) +{ + stbi_uc *result; + int i, x,y; + + for (i=0; i<92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); + if ((1 << 28) / x < y) return stbi__errpuc("too large", "Image too large to stbi__jpeg_huff_decode"); + + stbi__get32be(s); //skip `ratio' + stbi__get16be(s); //skip `fields' + stbi__get16be(s); //skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc *) malloc(x*y*4); + memset(result, 0xff, x*y*4); + + if (!stbi__pic_load_core(s,x,y,comp, result)) { + free(result); + result=0; + } + *px = x; + *py = y; + if (req_comp == 0) req_comp = *comp; + result=stbi__convert_format(result,4,req_comp,x,y); + + return result; +} + +static int stbi__pic_test(stbi__context *s) +{ + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; +} + +// ************************************************************************************************* +// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb +typedef struct +{ + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; +} stbi__gif_lzw; + +typedef struct +{ + int w,h; + stbi_uc *out; // output buffer (always 4 components) + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[4096]; + stbi_uc *color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; +} stbi__gif; + +static int stbi__gif_test_raw(stbi__context *s) +{ + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') return 0; + if (stbi__get8(s) != 'a') return 0; + return 1; +} + +static int stbi__gif_test(stbi__context *s) +{ + int r = stbi__gif_test_raw(s); + stbi__rewind(s); + return r; +} + +static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) +{ + int i; + for (i=0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp ? 0 : 255; + } +} + +static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) +{ + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); + + version = stbi__get8(s); + if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); + + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; + + if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments + + if (is_info) return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__gif g; + if (!stbi__gif_header(s, &g, comp, 1)) { + stbi__rewind( s ); + return 0; + } + if (x) *x = g.w; + if (y) *y = g.h; + return 1; +} + +static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) +{ + stbi_uc *p, *c; + + // recurse to stbi__jpeg_huff_decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) + stbi__out_gif_code(g, g->codes[code].prefix); + + if (g->cur_y >= g->max_y) return; + + p = &g->out[g->cur_x + g->cur_y]; + c = &g->color_table[g->codes[code].suffix * 4]; + + if (c[3] >= 128) { + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) +{ + stbi_uc lzw_cs; + stbi__int32 len, code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw *p; + + lzw_cs = stbi__get8(s); + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (code = 0; code < clear; code++) { + g->codes[code].prefix = -1; + g->codes[code].first = (stbi_uc) code; + g->codes[code].suffix = (stbi_uc) code; + } + + // support no starting clear code + avail = clear+2; + oldcode = -1; + + len = 0; + for(;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) + return g->out; + } + --len; + bits |= (stbi__int32) stbi__get8(s) << valid_bits; + valid_bits += 8; + } else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) + stbi__skip(s,len); + return g->out; + } else if (code <= avail) { + if (first) return stbi__errpuc("no clear code", "Corrupt GIF"); + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 4096) return stbi__errpuc("too many codes", "Corrupt GIF"); + p->prefix = (stbi__int16) oldcode; + p->first = g->codes[oldcode].first; + p->suffix = (code == avail) ? p->first : g->codes[code].first; + } else if (code == avail) + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16) code); + + if ((avail & codemask) == 0 && avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } else { + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + } + } + } +} + +static void stbi__fill_gif_background(stbi__gif *g) +{ + int i; + stbi_uc *c = g->pal[g->bgindex]; + // @OPTIMIZE: write a dword at a time + for (i = 0; i < g->w * g->h * 4; i += 4) { + stbi_uc *p = &g->out[i]; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } +} + +// this function is designed to support animated gifs, although stb_image doesn't support it +static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp) +{ + int i; + stbi_uc *old_out = 0; + + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header + g->out = (stbi_uc *) malloc(4 * g->w * g->h); + if (g->out == 0) return stbi__errpuc("outofmem", "Out of memory"); + stbi__fill_gif_background(g); + } else { + // animated-gif-only path + if (((g->eflags & 0x1C) >> 2) == 3) { + old_out = g->out; + g->out = (stbi_uc *) malloc(4 * g->w * g->h); + if (g->out == 0) return stbi__errpuc("outofmem", "Out of memory"); + memcpy(g->out, old_out, g->w*g->h*4); + } + } + + for (;;) { + switch (stbi__get8(s)) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc *o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = 8 * g->line_size; // first interlaced spacing + g->parse = 3; + } else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); + g->color_table = (stbi_uc *) g->lpal; + } else if (g->flags & 0x80) { + for (i=0; i < 256; ++i) // @OPTIMIZE: stbi__jpeg_reset only the previous transparent + g->pal[i][3] = 255; + if (g->transparent >= 0 && (g->eflags & 0x01)) + g->pal[g->transparent][3] = 0; + g->color_table = (stbi_uc *) g->pal; + } else + return stbi__errpuc("missing color table", "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (o == NULL) return NULL; + + if (req_comp && req_comp != 4) + o = stbi__convert_format(o, 4, req_comp, g->w, g->h); + return o; + } + + case 0x21: // Comment Extension. + { + int len; + if (stbi__get8(s) == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + stbi__get16le(s); // delay + g->transparent = stbi__get8(s); + } else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) + stbi__skip(s, len); + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc *) 1; + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } + } +} + +static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *u = 0; + stbi__gif g; + memset(&g, 0, sizeof(stbi__gif)); + + u = stbi__gif_load_next(s, &g, comp, req_comp); + if (u == (void *) 1) u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + } + + return u; +} + +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) +{ + return stbi__gif_info_raw(s,x,y,comp); +} + + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context *s) +{ + const char *signature = "#?RADIANCE\n"; + int i; + for (i=0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; + return 1; +} + +static int stbi__hdr_test(stbi__context* s) +{ + int r = stbi__hdr_test_core(s); + stbi__rewind(s); + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) +{ + int len=0; + char c = '\0'; + + c = (char) stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN-1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; + } + c = (char) stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) +{ + if ( input[3] != 0 ) { + float f1; + // Exponent + f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: output[3] = 1; /* fallthrough */ + case 3: output[0] = output[1] = output[2] = 0; + break; + case 2: output[1] = 1; /* fallthrough */ + case 1: output[0] = 0; + break; + } + } +} + +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + + + // Check identifier + if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int) strtol(token, NULL, 10); + + *x = width; + *y = height; + + if (comp) *comp = 3; + if (req_comp == 0) req_comp = 3; + + // Read data + hdr_data = (float *) malloc(height * width * req_comp * sizeof(float)); + + // Load image data + // image data is stored as some number of sca + if ( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc) c1; + rgbe[1] = (stbi_uc) c2; + rgbe[2] = (stbi_uc) len; + rgbe[3] = (stbi_uc) stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + free(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { free(hdr_data); free(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } + if (scanline == NULL) scanline = (stbi_uc *) malloc(width * 4); + + for (k = 0; k < 4; ++k) { + i = 0; + while (i < width) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i=0; i < width; ++i) + stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); + } + free(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + + if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0) { + stbi__rewind( s ); + return 0; + } + + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) { + stbi__rewind( s ); + return 0; + } + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *y = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *x = (int) strtol(token, NULL, 10); + *comp = 3; + return 1; +} +#endif // STBI_NO_HDR + +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) +{ + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') { + stbi__rewind( s ); + return 0; + } + stbi__skip(s,12); + hsz = stbi__get32le(s); + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) { + stbi__rewind( s ); + return 0; + } + if (hsz == 12) { + *x = stbi__get16le(s); + *y = stbi__get16le(s); + } else { + *x = stbi__get32le(s); + *y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) { + stbi__rewind( s ); + return 0; + } + *comp = stbi__get16le(s) / 8; + return 1; +} + +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) +{ + int channelCount; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + if (stbi__get16be(s) != 8) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind( s ); + return 0; + } + *comp = 4; + return 1; +} + +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) +{ + int act_comp=0,num_packets=0,chained; + stbi__pic_packet packets[10]; + + stbi__skip(s, 92); + + *x = stbi__get16be(s); + *y = stbi__get16be(s); + if (stbi__at_eof(s)) return 0; + if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind( s ); + return 0; + } + + stbi__skip(s, 8); + + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind( s ); + return 0; + } + if (packet->size != 8) { + stbi__rewind( s ); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; +} + +static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) +{ + if (stbi__jpeg_info(s, x, y, comp)) + return 1; + if (stbi__png_info(s, x, y, comp)) + return 1; + if (stbi__gif_info(s, x, y, comp)) + return 1; + if (stbi__bmp_info(s, x, y, comp)) + return 1; + if (stbi__psd_info(s, x, y, comp)) + return 1; + if (stbi__pic_info(s, x, y, comp)) + return 1; + #ifndef STBI_NO_HDR + if (stbi__hdr_info(s, x, y, comp)) + return 1; + #endif + // test tga last because it's a crappy test! + if (stbi__tga_info(s, x, y, comp)) + return 1; + return stbi__err("unknown image type", "Image not of any known type, or corrupt"); +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) +{ + FILE *f = fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; +} + +STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s,x,y,comp); + fseek(f,pos,SEEK_SET); + return r; +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__info_main(&s,x,y,comp); +} + +#endif // STB_IMAGE_IMPLEMENTATION + +#if !defined(STBI_NO_STDIO) && defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(pop) +#endif + + +/* + revision history: + 1.39 (2014-06-15) + fix to TGA optimization when req_comp != number of components in TGA; + fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) + add support for BMP version 5 (more ignored fields) + 1.38 (2014-06-06) + suppress MSVC warnings on integer casts truncating values + fix accidental rename of 'skip' field of I/O + 1.37 (2014-06-04) + remove duplicate typedef + 1.36 (2014-06-03) + convert to header file single-file library + if de-iphone isn't set, load iphone images color-swapped instead of returning NULL + 1.35 (2014-05-27) + various warnings + fix broken STBI_SIMD path + fix bug where stbi_load_from_file no longer left file pointer in correct place + fix broken non-easy path for 32-bit BMP (possibly never used) + TGA optimization by Arseny Kapoulkine + 1.34 (unknown) + use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case + 1.33 (2011-07-14) + make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements + 1.32 (2011-07-13) + support for "info" function for all supported filetypes (SpartanJ) + 1.31 (2011-06-20) + a few more leak fixes, bug in PNG handling (SpartanJ) + 1.30 (2011-06-11) + added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) + removed deprecated format-specific test/load functions + removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway + error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) + fix inefficiency in decoding 32-bit BMP (David Woo) + 1.29 (2010-08-16) + various warning fixes from Aurelien Pocheville + 1.28 (2010-08-01) + fix bug in GIF palette transparency (SpartanJ) + 1.27 (2010-08-01) + cast-to-stbi_uc to fix warnings + 1.26 (2010-07-24) + fix bug in file buffering for PNG reported by SpartanJ + 1.25 (2010-07-17) + refix trans_data warning (Won Chun) + 1.24 (2010-07-12) + perf improvements reading from files on platforms with lock-heavy fgetc() + minor perf improvements for jpeg + deprecated type-specific functions so we'll get feedback if they're needed + attempt to fix trans_data warning (Won Chun) + 1.23 fixed bug in iPhone support + 1.22 (2010-07-10) + removed image *writing* support + stbi_info support from Jetro Lauha + GIF support from Jean-Marc Lienher + iPhone PNG-extensions from James Brown + warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) + 1.21 fix use of 'stbi_uc' in header (reported by jon blow) + 1.20 added support for Softimage PIC, by Tom Seddon + 1.19 bug in interlaced PNG corruption check (found by ryg) + 1.18 2008-08-02 + fix a threading bug (local mutable static) + 1.17 support interlaced PNG + 1.16 major bugfix - stbi__convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug + header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant + 0.50 first released version +*/ diff --git a/dpf/dgl/src/nanovg/stb_truetype.h b/dpf/dgl/src/nanovg/stb_truetype.h new file mode 100644 index 0000000..570f236 --- /dev/null +++ b/dpf/dgl/src/nanovg/stb_truetype.h @@ -0,0 +1,2081 @@ +// stb_truetype.h - v0.8 - public domain +// authored from 2009-2013 by Sean Barrett / RAD Game Tools +// +// This library processes TrueType files: +// parse files +// extract glyph metrics +// extract glyph shapes +// render glyphs to one-channel bitmaps with antialiasing (box filter) +// +// Todo: +// non-MS cmaps +// crashproof on bad data +// hinting? (no longer patented) +// cleartype-style AA? +// optimize: use simple memory allocator for intermediates +// optimize: build edge-list directly from curves +// optimize: rasterize directly from curves? +// +// ADDITIONAL CONTRIBUTORS +// +// Mikko Mononen: compound shape support, more cmap formats +// Tor Andersson: kerning, subpixel rendering +// +// Bug/warning reports: +// "Zer" on mollyrocket (with fix) +// Cass Everitt +// stoiko (Haemimont Games) +// Brian Hook +// Walter van Niftrik +// David Gow +// David Given +// Ivan-Assen Ivanov +// Anthony Pesch +// +// VERSION HISTORY +// +// 0.8 (2014-05-25) fix a few more warnings +// 0.7 (2013-09-25) bugfix: subpixel glyph bug fixed in 0.5 had come back +// 0.6c (2012-07-24) improve documentation +// 0.6b (2012-07-20) fix a few more warnings +// 0.6 (2012-07-17) fix warnings; added stbtt_ScaleForMappingEmToPixels, +// stbtt_GetFontBoundingBox, stbtt_IsGlyphEmpty +// 0.5 (2011-12-09) bugfixes: +// subpixel glyph renderer computed wrong bounding box +// first vertex of shape can be off-curve (FreeSans) +// 0.4b (2011-12-03) fixed an error in the font baking example +// 0.4 (2011-12-01) kerning, subpixel rendering (tor) +// bugfixes for: +// codepoint-to-glyph conversion using table fmt=12 +// codepoint-to-glyph conversion using table fmt=4 +// stbtt_GetBakedQuad with non-square texture (Zer) +// updated Hello World! sample to use kerning and subpixel +// fixed some warnings +// 0.3 (2009-06-24) cmap fmt=12, compound shapes (MM) +// userdata, malloc-from-userdata, non-zero fill (STB) +// 0.2 (2009-03-11) Fix unsigned/signed char warnings +// 0.1 (2009-03-09) First public release +// +// LICENSE +// +// This software is in the public domain. Where that dedication is not +// recognized, you are granted a perpetual, irrevokable license to copy +// and modify this file as you see fit. +// +// USAGE +// +// Include this file in whatever places neeed to refer to it. In ONE C/C++ +// file, write: +// #define STB_TRUETYPE_IMPLEMENTATION +// before the #include of this file. This expands out the actual +// implementation into that C/C++ file. +// +// Simple 3D API (don't ship this, but it's fine for tools and quick start, +// and you can cut and paste from it to move to more advanced) +// stbtt_BakeFontBitmap() -- bake a font to a bitmap for use as texture +// stbtt_GetBakedQuad() -- compute quad to draw for a given char +// +// "Load" a font file from a memory buffer (you have to keep the buffer loaded) +// stbtt_InitFont() +// stbtt_GetFontOffsetForIndex() -- use for TTC font collections +// +// Render a unicode codepoint to a bitmap +// stbtt_GetCodepointBitmap() -- allocates and returns a bitmap +// stbtt_MakeCodepointBitmap() -- renders into bitmap you provide +// stbtt_GetCodepointBitmapBox() -- how big the bitmap must be +// +// Character advance/positioning +// stbtt_GetCodepointHMetrics() +// stbtt_GetFontVMetrics() +// stbtt_GetCodepointKernAdvance() +// +// ADDITIONAL DOCUMENTATION +// +// Immediately after this block comment are a series of sample programs. +// +// After the sample programs is the "header file" section. This section +// includes documentation for each API function. +// +// Some important concepts to understand to use this library: +// +// Codepoint +// Characters are defined by unicode codepoints, e.g. 65 is +// uppercase A, 231 is lowercase c with a cedilla, 0x7e30 is +// the hiragana for "ma". +// +// Glyph +// A visual character shape (every codepoint is rendered as +// some glyph) +// +// Glyph index +// A font-specific integer ID representing a glyph +// +// Baseline +// Glyph shapes are defined relative to a baseline, which is the +// bottom of uppercase characters. Characters extend both above +// and below the baseline. +// +// Current Point +// As you draw text to the screen, you keep track of a "current point" +// which is the origin of each character. The current point's vertical +// position is the baseline. Even "baked fonts" use this model. +// +// Vertical Font Metrics +// The vertical qualities of the font, used to vertically position +// and space the characters. See docs for stbtt_GetFontVMetrics. +// +// Font Size in Pixels or Points +// The preferred interface for specifying font sizes in stb_truetype +// is to specify how tall the font's vertical extent should be in pixels. +// If that sounds good enough, skip the next paragraph. +// +// Most font APIs instead use "points", which are a common typographic +// measurement for describing font size, defined as 72 points per inch. +// stb_truetype provides a point API for compatibility. However, true +// "per inch" conventions don't make much sense on computer displays +// since they different monitors have different number of pixels per +// inch. For example, Windows traditionally uses a convention that +// there are 96 pixels per inch, thus making 'inch' measurements have +// nothing to do with inches, and thus effectively defining a point to +// be 1.333 pixels. Additionally, the TrueType font data provides +// an explicit scale factor to scale a given font's glyphs to points, +// but the author has observed that this scale factor is often wrong +// for non-commercial fonts, thus making fonts scaled in points +// according to the TrueType spec incoherently sized in practice. +// +// ADVANCED USAGE +// +// Quality: +// +// - Use the functions with Subpixel at the end to allow your characters +// to have subpixel positioning. Since the font is anti-aliased, not +// hinted, this is very import for quality. (This is not possible with +// baked fonts.) +// +// - Kerning is now supported, and if you're supporting subpixel rendering +// then kerning is worth using to give your text a polished look. +// +// Performance: +// +// - Convert Unicode codepoints to glyph indexes and operate on the glyphs; +// if you don't do this, stb_truetype is forced to do the conversion on +// every call. +// +// - There are a lot of memory allocations. We should modify it to take +// a temp buffer and allocate from the temp buffer (without freeing), +// should help performance a lot. +// +// NOTES +// +// The system uses the raw data found in the .ttf file without changing it +// and without building auxiliary data structures. This is a bit inefficient +// on little-endian systems (the data is big-endian), but assuming you're +// caching the bitmaps or glyph shapes this shouldn't be a big deal. +// +// It appears to be very hard to programmatically determine what font a +// given file is in a general way. I provide an API for this, but I don't +// recommend it. +// +// +// SOURCE STATISTICS (based on v0.6c, 2050 LOC) +// +// Documentation & header file 520 LOC \___ 660 LOC documentation +// Sample code 140 LOC / +// Truetype parsing 620 LOC ---- 620 LOC TrueType +// Software rasterization 240 LOC \ . +// Curve tesselation 120 LOC \__ 550 LOC Bitmap creation +// Bitmap management 100 LOC / +// Baked bitmap interface 70 LOC / +// Font name matching & access 150 LOC ---- 150 +// C runtime library abstraction 60 LOC ---- 60 + + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +//// +//// SAMPLE PROGRAMS +//// +// +// Incomplete text-in-3d-api example, which draws quads properly aligned to be lossless +// +#if 0 +#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation +#include "stb_truetype.h" + +char ttf_buffer[1<<20]; +unsigned char temp_bitmap[512*512]; + +stbtt_bakedchar cdata[96]; // ASCII 32..126 is 95 glyphs +GLstbtt_uint ftex; + +void my_stbtt_initfont(void) +{ + fread(ttf_buffer, 1, 1<<20, fopen("c:/windows/fonts/times.ttf", "rb")); + stbtt_BakeFontBitmap(data,0, 32.0, temp_bitmap,512,512, 32,96, cdata); // no guarantee this fits! + // can free ttf_buffer at this point + glGenTextures(1, &ftex); + glBindTexture(GL_TEXTURE_2D, ftex); + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 512,512, 0, GL_ALPHA, GL_UNSIGNED_BYTE, temp_bitmap); + // can free temp_bitmap at this point + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); +} + +void my_stbtt_print(float x, float y, char *text) +{ + // assume orthographic projection with units = screen pixels, origin at top left + glBindTexture(GL_TEXTURE_2D, ftex); + glBegin(GL_QUADS); + while (*text) { + if (*text >= 32 && *text < 128) { + stbtt_aligned_quad q; + stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9 + glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y0); + glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y0); + glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y1); + glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y1); + } + ++text; + } + glEnd(); +} +#endif +// +// +////////////////////////////////////////////////////////////////////////////// +// +// Complete program (this compiles): get a single bitmap, print as ASCII art +// +#if 0 +#include +#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation +#include "stb_truetype.h" + +char ttf_buffer[1<<25]; + +int main(int argc, char **argv) +{ + stbtt_fontinfo font; + unsigned char *bitmap; + int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 'a'), s = (argc > 2 ? atoi(argv[2]) : 20); + + fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "c:/windows/fonts/arialbd.ttf", "rb")); + + stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0)); + bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0); + + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) + putchar(" .:ioVM@"[bitmap[j*w+i]>>5]); + putchar('\n'); + } + return 0; +} +#endif +// +// Output: +// +// .ii. +// @@@@@@. +// V@Mio@@o +// :i. V@V +// :oM@@M +// :@@@MM@M +// @@o o@M +// :@@. M@M +// @@@o@@@@ +// :M@@V:@@. +// +////////////////////////////////////////////////////////////////////////////// +// +// Complete program: print "Hello World!" banner, with bugs +// +#if 0 +char buffer[24<<20]; +unsigned char screen[20][79]; + +int main(int arg, char **argv) +{ + stbtt_fontinfo font; + int i,j,ascent,baseline,ch=0; + float scale, xpos=2; // leave a little padding in case the character extends left + char *text = "Heljo World!"; + + fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb")); + stbtt_InitFont(&font, buffer, 0); + + scale = stbtt_ScaleForPixelHeight(&font, 15); + stbtt_GetFontVMetrics(&font, &ascent,0,0); + baseline = (int) (ascent*scale); + + while (text[ch]) { + int advance,lsb,x0,y0,x1,y1; + float x_shift = xpos - (float) floor(xpos); + stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb); + stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1); + stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]); + // note that this stomps the old data, so where character boxes overlap (e.g. 'lj') it's wrong + // because this API is really for baking character bitmaps into textures. if you want to render + // a sequence of characters, you really need to render each bitmap to a temp buffer, then + // "alpha blend" that into the working buffer + xpos += (advance * scale); + if (text[ch+1]) + xpos += scale*stbtt_GetCodepointKernAdvance(&font, text[ch],text[ch+1]); + ++ch; + } + + for (j=0; j < 20; ++j) { + for (i=0; i < 78; ++i) + putchar(" .:ioVM@"[screen[j][i]>>5]); + putchar('\n'); + } + + return 0; +} +#endif + + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +//// +//// INTEGRATION WITH YOUR CODEBASE +//// +//// The following sections allow you to supply alternate definitions +//// of C library functions used by stb_truetype. + +#ifdef STB_TRUETYPE_IMPLEMENTATION + // #define your own (u)stbtt_int8/16/32 before including to override this + #ifndef stbtt_uint8 + typedef unsigned char stbtt_uint8; + typedef signed char stbtt_int8; + typedef unsigned short stbtt_uint16; + typedef signed short stbtt_int16; + typedef unsigned int stbtt_uint32; + typedef signed int stbtt_int32; + #endif + + typedef char stbtt__check_size32[sizeof(stbtt_int32)==4 ? 1 : -1]; + typedef char stbtt__check_size16[sizeof(stbtt_int16)==2 ? 1 : -1]; + + // #define your own STBTT_sort() to override this to avoid qsort + #ifndef STBTT_sort + #include + #define STBTT_sort(data,num_items,item_size,compare_func) qsort(data,num_items,item_size,compare_func) + #endif + + // #define your own STBTT_ifloor/STBTT_iceil() to avoid math.h + #ifndef STBTT_ifloor + #include + #define STBTT_ifloor(x) ((int) floor(x)) + #define STBTT_iceil(x) ((int) ceil(x)) + #endif + + #ifndef STBTT_sqrt + #include + #define STBTT_sqrt(x) sqrt(x) + #endif + + // #define your own functions "STBTT_malloc" / "STBTT_free" to avoid malloc.h + #ifndef STBTT_malloc + #include + #define STBTT_malloc(x,u) ((void)(u),malloc(x)) + #define STBTT_free(x,u) free(x) + #endif + + #ifndef STBTT_assert + #include + #define STBTT_assert(x) assert(x) + #endif + + #ifndef STBTT_strlen + #include + #define STBTT_strlen(x) strlen(x) + #endif + + #ifndef STBTT_memcpy + #include + #define STBTT_memcpy memcpy + #define STBTT_memset memset + #endif +#endif + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +//// +//// INTERFACE +//// +//// + +#ifndef __STB_INCLUDE_STB_TRUETYPE_H__ +#define __STB_INCLUDE_STB_TRUETYPE_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// TEXTURE BAKING API +// +// If you use this API, you only have to call two functions ever. +// + +typedef struct +{ + unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap + float xoff,yoff,xadvance; +} stbtt_bakedchar; + +extern int stbtt_BakeFontBitmap(const unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) + float pixel_height, // height of font in pixels + unsigned char *pixels, int pw, int ph, // bitmap to be filled in + int first_char, int num_chars, // characters to bake + stbtt_bakedchar *chardata); // you allocate this, it's num_chars long +// if return is positive, the first unused row of the bitmap +// if return is negative, returns the negative of the number of characters that fit +// if return is 0, no characters fit and no rows were used +// This uses a very crappy packing. + +typedef struct +{ + float x0,y0,s0,t0; // top-left + float x1,y1,s1,t1; // bottom-right +} stbtt_aligned_quad; + +extern void stbtt_GetBakedQuad(stbtt_bakedchar *chardata, int pw, int ph, // same data as above + int char_index, // character to display + float *xpos, float *ypos, // pointers to current position in screen pixel space + stbtt_aligned_quad *q, // output: quad to draw + int opengl_fillrule); // true if opengl fill rule; false if DX9 or earlier +// Call GetBakedQuad with char_index = 'character - first_char', and it +// creates the quad you need to draw and advances the current position. +// +// The coordinate system used assumes y increases downwards. +// +// Characters will extend both above and below the current position; +// see discussion of "BASELINE" above. +// +// It's inefficient; you might want to c&p it and optimize it. + + +////////////////////////////////////////////////////////////////////////////// +// +// FONT LOADING +// +// + +extern int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index); +// Each .ttf/.ttc file may have more than one font. Each font has a sequential +// index number starting from 0. Call this function to get the font offset for +// a given index; it returns -1 if the index is out of range. A regular .ttf +// file will only define one font and it always be at offset 0, so it will +// return '0' for index 0, and -1 for all other indices. You can just skip +// this step if you know it's that kind of font. + + +// The following structure is defined publically so you can declare one on +// the stack or as a global or etc, but you should treat it as opaque. +typedef struct stbtt_fontinfo +{ + void * userdata; + unsigned char * data; // pointer to .ttf file + int fontstart; // offset of start of font + + int numGlyphs; // number of glyphs, needed for range checking + + int loca,head,glyf,hhea,hmtx,kern; // table locations as offset from start of .ttf + int index_map; // a cmap mapping for our chosen character encoding + int indexToLocFormat; // format needed to map from glyph index to glyph +} stbtt_fontinfo; + +extern int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset); +// Given an offset into the file that defines a font, this function builds +// the necessary cached info for the rest of the system. You must allocate +// the stbtt_fontinfo yourself, and stbtt_InitFont will fill it out. You don't +// need to do anything special to free it, because the contents are pure +// value data with no additional data structures. Returns 0 on failure. + + +////////////////////////////////////////////////////////////////////////////// +// +// CHARACTER TO GLYPH-INDEX CONVERSIOn + +int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint); +// If you're going to perform multiple operations on the same character +// and you want a speed-up, call this function with the character you're +// going to process, then use glyph-based functions instead of the +// codepoint-based functions. + + +////////////////////////////////////////////////////////////////////////////// +// +// CHARACTER PROPERTIES +// + +extern float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels); +// computes a scale factor to produce a font whose "height" is 'pixels' tall. +// Height is measured as the distance from the highest ascender to the lowest +// descender; in other words, it's equivalent to calling stbtt_GetFontVMetrics +// and computing: +// scale = pixels / (ascent - descent) +// so if you prefer to measure height by the ascent only, use a similar calculation. + +extern float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels); +// computes a scale factor to produce a font whose EM size is mapped to +// 'pixels' tall. This is probably what traditional APIs compute, but +// I'm not positive. + +extern void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap); +// ascent is the coordinate above the baseline the font extends; descent +// is the coordinate below the baseline the font extends (i.e. it is typically negative) +// lineGap is the spacing between one row's descent and the next row's ascent... +// so you should advance the vertical position by "*ascent - *descent + *lineGap" +// these are expressed in unscaled coordinates, so you must multiply by +// the scale factor for a given size + +extern void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1); +// the bounding box around all possible characters + +extern void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing); +// leftSideBearing is the offset from the current horizontal position to the left edge of the character +// advanceWidth is the offset from the current horizontal position to the next horizontal position +// these are expressed in unscaled coordinates + +extern int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2); +// an additional amount to add to the 'advance' value between ch1 and ch2 + +extern int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1); +// Gets the bounding box of the visible part of the glyph, in unscaled coordinates + +extern void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing); +extern int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2); +extern int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); +// as above, but takes one or more glyph indices for greater efficiency + + +////////////////////////////////////////////////////////////////////////////// +// +// GLYPH SHAPES (you probably don't need these, but they have to go before +// the bitmaps for C declaration-order reasons) +// + +#ifndef STBTT_vmove // you can predefine these to use different values (but why?) + enum { + STBTT_vmove=1, + STBTT_vline, + STBTT_vcurve + }; +#endif + +#ifndef stbtt_vertex // you can predefine this to use different values + // (we share this with other code at RAD) + #define stbtt_vertex_type short // can't use stbtt_int16 because that's not visible in the header file + typedef struct + { + stbtt_vertex_type x,y,cx,cy; + unsigned char type,padding; + } stbtt_vertex; +#endif + +extern int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index); +// returns non-zero if nothing is drawn for this glyph + +extern int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices); +extern int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **vertices); +// returns # of vertices and fills *vertices with the pointer to them +// these are expressed in "unscaled" coordinates +// +// The shape is a series of countours. Each one starts with +// a STBTT_moveto, then consists of a series of mixed +// STBTT_lineto and STBTT_curveto segments. A lineto +// draws a line from previous endpoint to its x,y; a curveto +// draws a quadratic bezier from previous endpoint to +// its x,y, using cx,cy as the bezier control point. + +extern void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices); +// frees the data allocated above + +////////////////////////////////////////////////////////////////////////////// +// +// BITMAP RENDERING +// + +extern void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata); +// frees the bitmap allocated below + +extern unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff); +// allocates a large-enough single-channel 8bpp bitmap and renders the +// specified character/glyph at the specified scale into it, with +// antialiasing. 0 is no coverage (transparent), 255 is fully covered (opaque). +// *width & *height are filled out with the width & height of the bitmap, +// which is stored left-to-right, top-to-bottom. +// +// xoff/yoff are the offset it pixel space from the glyph origin to the top-left of the bitmap + +extern unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff); +// the same as stbtt_GetCodepoitnBitmap, but you can specify a subpixel +// shift for the character + +extern void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint); +// the same as stbtt_GetCodepointBitmap, but you pass in storage for the bitmap +// in the form of 'output', with row spacing of 'out_stride' bytes. the bitmap +// is clipped to out_w/out_h bytes. Call stbtt_GetCodepointBitmapBox to get the +// width and height and positioning info for it first. + +extern void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint); +// same as stbtt_MakeCodepointBitmap, but you can specify a subpixel +// shift for the character + +extern void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); +// get the bbox of the bitmap centered around the glyph origin; so the +// bitmap width is ix1-ix0, height is iy1-iy0, and location to place +// the bitmap top left is (leftSideBearing*scale,iy0). +// (Note that the bitmap uses y-increases-down, but the shape uses +// y-increases-up, so CodepointBitmapBox and CodepointBox are inverted.) + +extern void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); +// same as stbtt_GetCodepointBitmapBox, but you can specify a subpixel +// shift for the character + +// the following functions are equivalent to the above functions, but operate +// on glyph indices instead of Unicode codepoints (for efficiency) +extern unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff); +extern unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff); +extern void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph); +extern void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph); +extern void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); +extern void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); + + +// @TODO: don't expose this structure +typedef struct +{ + int w,h,stride; + unsigned char *pixels; +} stbtt__bitmap; + +extern void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata); + +////////////////////////////////////////////////////////////////////////////// +// +// Finding the right font... +// +// You should really just solve this offline, keep your own tables +// of what font is what, and don't try to get it out of the .ttf file. +// That's because getting it out of the .ttf file is really hard, because +// the names in the file can appear in many possible encodings, in many +// possible languages, and e.g. if you need a case-insensitive comparison, +// the details of that depend on the encoding & language in a complex way +// (actually underspecified in truetype, but also gigantic). +// +// But you can use the provided functions in two possible ways: +// stbtt_FindMatchingFont() will use *case-sensitive* comparisons on +// unicode-encoded names to try to find the font you want; +// you can run this before calling stbtt_InitFont() +// +// stbtt_GetFontNameString() lets you get any of the various strings +// from the file yourself and do your own comparisons on them. +// You have to have called stbtt_InitFont() first. + + +extern int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags); +// returns the offset (not index) of the font that matches, or -1 if none +// if you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold". +// if you use any other flag, use a font name like "Arial"; this checks +// the 'macStyle' header field; i don't know if fonts set this consistently +#define STBTT_MACSTYLE_DONTCARE 0 +#define STBTT_MACSTYLE_BOLD 1 +#define STBTT_MACSTYLE_ITALIC 2 +#define STBTT_MACSTYLE_UNDERSCORE 4 +#define STBTT_MACSTYLE_NONE 8 // <= not same as 0, this makes us check the bitfield is 0 + +extern int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2); +// returns 1/0 whether the first string interpreted as utf8 is identical to +// the second string interpreted as big-endian utf16... useful for strings from next func + +extern const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID); +// returns the string (which may be big-endian double byte, e.g. for unicode) +// and puts the length in bytes in *length. +// +// some of the values for the IDs are below; for more see the truetype spec: +// http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6name.html +// http://www.microsoft.com/typography/otspec/name.htm + +enum { // platformID + STBTT_PLATFORM_ID_UNICODE =0, + STBTT_PLATFORM_ID_MAC =1, + STBTT_PLATFORM_ID_ISO =2, + STBTT_PLATFORM_ID_MICROSOFT =3 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_UNICODE + STBTT_UNICODE_EID_UNICODE_1_0 =0, + STBTT_UNICODE_EID_UNICODE_1_1 =1, + STBTT_UNICODE_EID_ISO_10646 =2, + STBTT_UNICODE_EID_UNICODE_2_0_BMP=3, + STBTT_UNICODE_EID_UNICODE_2_0_FULL=4 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_MICROSOFT + STBTT_MS_EID_SYMBOL =0, + STBTT_MS_EID_UNICODE_BMP =1, + STBTT_MS_EID_SHIFTJIS =2, + STBTT_MS_EID_UNICODE_FULL =10 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_MAC; same as Script Manager codes + STBTT_MAC_EID_ROMAN =0, STBTT_MAC_EID_ARABIC =4, + STBTT_MAC_EID_JAPANESE =1, STBTT_MAC_EID_HEBREW =5, + STBTT_MAC_EID_CHINESE_TRAD =2, STBTT_MAC_EID_GREEK =6, + STBTT_MAC_EID_KOREAN =3, STBTT_MAC_EID_RUSSIAN =7 +}; + +enum { // languageID for STBTT_PLATFORM_ID_MICROSOFT; same as LCID... + // problematic because there are e.g. 16 english LCIDs and 16 arabic LCIDs + STBTT_MS_LANG_ENGLISH =0x0409, STBTT_MS_LANG_ITALIAN =0x0410, + STBTT_MS_LANG_CHINESE =0x0804, STBTT_MS_LANG_JAPANESE =0x0411, + STBTT_MS_LANG_DUTCH =0x0413, STBTT_MS_LANG_KOREAN =0x0412, + STBTT_MS_LANG_FRENCH =0x040c, STBTT_MS_LANG_RUSSIAN =0x0419, + STBTT_MS_LANG_GERMAN =0x0407, STBTT_MS_LANG_SPANISH =0x0409, + STBTT_MS_LANG_HEBREW =0x040d, STBTT_MS_LANG_SWEDISH =0x041D +}; + +enum { // languageID for STBTT_PLATFORM_ID_MAC + STBTT_MAC_LANG_ENGLISH =0 , STBTT_MAC_LANG_JAPANESE =11, + STBTT_MAC_LANG_ARABIC =12, STBTT_MAC_LANG_KOREAN =23, + STBTT_MAC_LANG_DUTCH =4 , STBTT_MAC_LANG_RUSSIAN =32, + STBTT_MAC_LANG_FRENCH =1 , STBTT_MAC_LANG_SPANISH =6 , + STBTT_MAC_LANG_GERMAN =2 , STBTT_MAC_LANG_SWEDISH =5 , + STBTT_MAC_LANG_HEBREW =10, STBTT_MAC_LANG_CHINESE_SIMPLIFIED =33, + STBTT_MAC_LANG_ITALIAN =3 , STBTT_MAC_LANG_CHINESE_TRAD =19 +}; + +#ifdef __cplusplus +} +#endif + +#endif // __STB_INCLUDE_STB_TRUETYPE_H__ + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +//// +//// IMPLEMENTATION +//// +//// + +#ifdef STB_TRUETYPE_IMPLEMENTATION + +////////////////////////////////////////////////////////////////////////// +// +// accessors to parse data from file +// + +// on platforms that don't allow misaligned reads, if we want to allow +// truetype fonts that aren't padded to alignment, define ALLOW_UNALIGNED_TRUETYPE + +#define ttBYTE(p) (* (stbtt_uint8 *) (p)) +#define ttCHAR(p) (* (stbtt_int8 *) (p)) +#define ttFixed(p) ttLONG(p) + +#if defined(STB_TRUETYPE_BIGENDIAN) && !defined(ALLOW_UNALIGNED_TRUETYPE) + + #define ttUSHORT(p) (* (stbtt_uint16 *) (p)) + #define ttSHORT(p) (* (stbtt_int16 *) (p)) + #define ttULONG(p) (* (stbtt_uint32 *) (p)) + #define ttLONG(p) (* (stbtt_int32 *) (p)) + +#else + + stbtt_uint16 ttUSHORT(const stbtt_uint8 *p) { return p[0]*256 + p[1]; } + stbtt_int16 ttSHORT(const stbtt_uint8 *p) { return p[0]*256 + p[1]; } + stbtt_uint32 ttULONG(const stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } + stbtt_int32 ttLONG(const stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } + +#endif + +#define stbtt_tag4(p,c0,c1,c2,c3) ((p)[0] == (c0) && (p)[1] == (c1) && (p)[2] == (c2) && (p)[3] == (c3)) +#define stbtt_tag(p,str) stbtt_tag4(p,str[0],str[1],str[2],str[3]) + +static int stbtt__isfont(const stbtt_uint8 *font) +{ + // check the version number + if (stbtt_tag4(font, '1',0,0,0)) return 1; // TrueType 1 + if (stbtt_tag(font, "typ1")) return 1; // TrueType with type 1 font -- we don't support this! + if (stbtt_tag(font, "OTTO")) return 1; // OpenType with CFF + if (stbtt_tag4(font, 0,1,0,0)) return 1; // OpenType 1.0 + return 0; +} + +// @OPTIMIZE: binary search +static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fontstart, const char *tag) +{ + stbtt_int32 num_tables = ttUSHORT(data+fontstart+4); + stbtt_uint32 tabledir = fontstart + 12; + stbtt_int32 i; + for (i=0; i < num_tables; ++i) { + stbtt_uint32 loc = tabledir + 16*i; + if (stbtt_tag(data+loc+0, tag)) + return ttULONG(data+loc+8); + } + return 0; +} + +int stbtt_GetFontOffsetForIndex(const unsigned char *font_collection, int index) +{ + // if it's just a font, there's only one valid index + if (stbtt__isfont(font_collection)) + return index == 0 ? 0 : -1; + + // check if it's a TTC + if (stbtt_tag(font_collection, "ttcf")) { + // version 1? + if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) { + stbtt_int32 n = ttLONG(font_collection+8); + if (index >= n) + return -1; + return ttULONG(font_collection+12+index*14); + } + } + return -1; +} + +int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data2, int fontstart) +{ + stbtt_uint8 *data = (stbtt_uint8 *) data2; + stbtt_uint32 cmap, t; + stbtt_int32 i,numTables; + + info->data = data; + info->fontstart = fontstart; + + cmap = stbtt__find_table(data, fontstart, "cmap"); // required + info->loca = stbtt__find_table(data, fontstart, "loca"); // required + info->head = stbtt__find_table(data, fontstart, "head"); // required + info->glyf = stbtt__find_table(data, fontstart, "glyf"); // required + info->hhea = stbtt__find_table(data, fontstart, "hhea"); // required + info->hmtx = stbtt__find_table(data, fontstart, "hmtx"); // required + info->kern = stbtt__find_table(data, fontstart, "kern"); // not required + if (!cmap || !info->loca || !info->head || !info->glyf || !info->hhea || !info->hmtx) + return 0; + + t = stbtt__find_table(data, fontstart, "maxp"); + if (t) + info->numGlyphs = ttUSHORT(data+t+4); + else + info->numGlyphs = 0xffff; + + // find a cmap encoding table we understand *now* to avoid searching + // later. (todo: could make this installable) + // the same regardless of glyph. + numTables = ttUSHORT(data + cmap + 2); + info->index_map = 0; + for (i=0; i < numTables; ++i) { + stbtt_uint32 encoding_record = cmap + 4 + 8 * i; + // find an encoding we understand: + switch(ttUSHORT(data+encoding_record)) { + case STBTT_PLATFORM_ID_MICROSOFT: + switch (ttUSHORT(data+encoding_record+2)) { + case STBTT_MS_EID_UNICODE_BMP: + case STBTT_MS_EID_UNICODE_FULL: + // MS/Unicode + info->index_map = cmap + ttULONG(data+encoding_record+4); + break; + } + break; + } + } + if (info->index_map == 0) + return 0; + + info->indexToLocFormat = ttUSHORT(data+info->head + 50); + return 1; +} + +int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint) +{ + stbtt_uint8 *data = info->data; + stbtt_uint32 index_map = info->index_map; + + stbtt_uint16 format = ttUSHORT(data + index_map + 0); + if (format == 0) { // apple byte encoding + stbtt_int32 bytes = ttUSHORT(data + index_map + 2); + if (unicode_codepoint < bytes-6) + return ttBYTE(data + index_map + 6 + unicode_codepoint); + return 0; + } else if (format == 6) { + stbtt_uint32 first = ttUSHORT(data + index_map + 6); + stbtt_uint32 count = ttUSHORT(data + index_map + 8); + if ((stbtt_uint32) unicode_codepoint >= first && (stbtt_uint32) unicode_codepoint < first+count) + return ttUSHORT(data + index_map + 10 + (unicode_codepoint - first)*2); + return 0; + } else if (format == 2) { + STBTT_assert(0); // @TODO: high-byte mapping for japanese/chinese/korean + return 0; + } else if (format == 4) { // standard mapping for windows fonts: binary search collection of ranges + stbtt_uint16 segcount = ttUSHORT(data+index_map+6) >> 1; + stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1; + stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10); + stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1; + stbtt_uint16 item, offset, start, end; + + // do a binary search of the segments + stbtt_uint32 endCount = index_map + 14; + stbtt_uint32 search = endCount; + + if (unicode_codepoint > 0xffff) + return 0; + + // they lie from endCount .. endCount + segCount + // but searchRange is the nearest power of two, so... + if (unicode_codepoint >= ttUSHORT(data + search + rangeShift*2)) + search += rangeShift*2; + + // now decrement to bias correctly to find smallest + search -= 2; + while (entrySelector) { + searchRange >>= 1; + start = ttUSHORT(data + search + searchRange*2 + segcount*2 + 2); + end = ttUSHORT(data + search + searchRange*2); + if (unicode_codepoint > end) + search += searchRange*2; + --entrySelector; + } + search += 2; + + item = (stbtt_uint16) ((search - endCount) >> 1); + + STBTT_assert(unicode_codepoint <= ttUSHORT(data + endCount + 2*item)); + start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item); + end = ttUSHORT(data + index_map + 14 + 2 + 2*item); + if (unicode_codepoint < start) + return 0; + + offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item); + if (offset == 0) + return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item)); + + return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item); + } else if (format == 12 || format == 13) { + stbtt_uint32 ngroups = ttULONG(data+index_map+12); + stbtt_int32 low,high; + low = 0; high = (stbtt_int32)ngroups; + // Binary search the right group. + while (low < high) { + stbtt_int32 mid = low + ((high-low) >> 1); // rounds down, so low <= mid < high + stbtt_uint32 start_char = ttULONG(data+index_map+16+mid*12); + stbtt_uint32 end_char = ttULONG(data+index_map+16+mid*12+4); + if ((stbtt_uint32) unicode_codepoint < start_char) + high = mid; + else if ((stbtt_uint32) unicode_codepoint > end_char) + low = mid+1; + else { + stbtt_uint32 start_glyph = ttULONG(data+index_map+16+mid*12+8); + if (format == 12) + return start_glyph + unicode_codepoint-start_char; + else // format == 13 + return start_glyph; + } + } + return 0; // not found + } + // @TODO + STBTT_assert(0); + return 0; +} + +int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices) +{ + return stbtt_GetGlyphShape(info, stbtt_FindGlyphIndex(info, unicode_codepoint), vertices); +} + +static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy) +{ + v->type = type; + v->x = (stbtt_int16) x; + v->y = (stbtt_int16) y; + v->cx = (stbtt_int16) cx; + v->cy = (stbtt_int16) cy; +} + +static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index) +{ + int g1,g2; + + if (glyph_index >= info->numGlyphs) return -1; // glyph index out of range + if (info->indexToLocFormat >= 2) return -1; // unknown index->glyph map format + + if (info->indexToLocFormat == 0) { + g1 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2) * 2; + g2 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2 + 2) * 2; + } else { + g1 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4); + g2 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4 + 4); + } + + return g1==g2 ? -1 : g1; // if length is 0, return -1 +} + +int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1) +{ + int g = stbtt__GetGlyfOffset(info, glyph_index); + if (g < 0) return 0; + + if (x0) *x0 = ttSHORT(info->data + g + 2); + if (y0) *y0 = ttSHORT(info->data + g + 4); + if (x1) *x1 = ttSHORT(info->data + g + 6); + if (y1) *y1 = ttSHORT(info->data + g + 8); + return 1; +} + +int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1) +{ + return stbtt_GetGlyphBox(info, stbtt_FindGlyphIndex(info,codepoint), x0,y0,x1,y1); +} + +int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index) +{ + stbtt_int16 numberOfContours; + int g = stbtt__GetGlyfOffset(info, glyph_index); + if (g < 0) return 1; + numberOfContours = ttSHORT(info->data + g); + return numberOfContours == 0; +} + +static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, int was_off, int start_off, + stbtt_int32 sx, stbtt_int32 sy, stbtt_int32 scx, stbtt_int32 scy, stbtt_int32 cx, stbtt_int32 cy) +{ + if (start_off) { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+scx)>>1, (cy+scy)>>1, cx,cy); + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, sx,sy,scx,scy); + } else { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve,sx,sy,cx,cy); + else + stbtt_setvertex(&vertices[num_vertices++], STBTT_vline,sx,sy,0,0); + } + return num_vertices; +} + +int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) +{ + stbtt_int16 numberOfContours; + stbtt_uint8 *endPtsOfContours; + stbtt_uint8 *data = info->data; + stbtt_vertex *vertices=0; + int num_vertices=0; + int g = stbtt__GetGlyfOffset(info, glyph_index); + + *pvertices = NULL; + + if (g < 0) return 0; + + numberOfContours = ttSHORT(data + g); + + if (numberOfContours > 0) { + stbtt_uint8 flags=0,flagcount; + stbtt_int32 ins, i,j=0,m,n, next_move, was_off=0, off, start_off=0; + stbtt_int32 x,y,cx,cy,sx,sy, scx,scy; + stbtt_uint8 *points; + endPtsOfContours = (data + g + 10); + ins = ttUSHORT(data + g + 10 + numberOfContours * 2); + points = data + g + 10 + numberOfContours * 2 + 2 + ins; + + n = 1+ttUSHORT(endPtsOfContours + numberOfContours*2-2); + + m = n + 2*numberOfContours; // a loose bound on how many vertices we might need + vertices = (stbtt_vertex *) STBTT_malloc(m * sizeof(vertices[0]), info->userdata); + if (vertices == 0) + return 0; + + next_move = 0; + flagcount=0; + + // in first pass, we load uninterpreted data into the allocated array + // above, shifted to the end of the array so we won't overwrite it when + // we create our final data starting from the front + + off = m - n; // starting offset for uninterpreted data, regardless of how m ends up being calculated + + // first load flags + + for (i=0; i < n; ++i) { + if (flagcount == 0) { + flags = *points++; + if (flags & 8) + flagcount = *points++; + } else + --flagcount; + vertices[off+i].type = flags; + } + + // now load x coordinates + x=0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + if (flags & 2) { + stbtt_int16 dx = *points++; + x += (flags & 16) ? dx : -dx; // ??? + } else { + if (!(flags & 16)) { + x = x + (stbtt_int16) (points[0]*256 + points[1]); + points += 2; + } + } + vertices[off+i].x = (stbtt_int16) x; + } + + // now load y coordinates + y=0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + if (flags & 4) { + stbtt_int16 dy = *points++; + y += (flags & 32) ? dy : -dy; // ??? + } else { + if (!(flags & 32)) { + y = y + (stbtt_int16) (points[0]*256 + points[1]); + points += 2; + } + } + vertices[off+i].y = (stbtt_int16) y; + } + + // now convert them to our format + num_vertices=0; + sx = sy = cx = cy = scx = scy = 0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + x = (stbtt_int16) vertices[off+i].x; + y = (stbtt_int16) vertices[off+i].y; + + if (next_move == i) { + if (i != 0) + num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); + + // now start the new one + start_off = !(flags & 1); + if (start_off) { + // if we start off with an off-curve point, then when we need to find a point on the curve + // where we can start, and we need to save some state for when we wraparound. + scx = x; + scy = y; + if (!(vertices[off+i+1].type & 1)) { + // next point is also a curve point, so interpolate an on-point curve + sx = (x + (stbtt_int32) vertices[off+i+1].x) >> 1; + sy = (y + (stbtt_int32) vertices[off+i+1].y) >> 1; + } else { + // otherwise just use the next point as our start point + sx = (stbtt_int32) vertices[off+i+1].x; + sy = (stbtt_int32) vertices[off+i+1].y; + ++i; // we're using point i+1 as the starting point, so skip it + } + } else { + sx = x; + sy = y; + } + stbtt_setvertex(&vertices[num_vertices++], STBTT_vmove,sx,sy,0,0); + was_off = 0; + next_move = 1 + ttUSHORT(endPtsOfContours+j*2); + ++j; + } else { + if (!(flags & 1)) { // if it's a curve + if (was_off) // two off-curve control points in a row means interpolate an on-curve midpoint + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+x)>>1, (cy+y)>>1, cx, cy); + cx = x; + cy = y; + was_off = 1; + } else { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, x,y, cx, cy); + else + stbtt_setvertex(&vertices[num_vertices++], STBTT_vline, x,y,0,0); + was_off = 0; + } + } + } + num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); + } else if (numberOfContours == -1) { + // Compound shapes. + int more = 1; + stbtt_uint8 *comp = data + g + 10; + num_vertices = 0; + vertices = 0; + while (more) { + stbtt_uint16 flags, gidx; + int comp_num_verts = 0, i; + stbtt_vertex *comp_verts = 0, *tmp = 0; + float mtx[6] = {1,0,0,1,0,0}, m, n; + + flags = ttSHORT(comp); comp+=2; + gidx = ttSHORT(comp); comp+=2; + + if (flags & 2) { // XY values + if (flags & 1) { // shorts + mtx[4] = ttSHORT(comp); comp+=2; + mtx[5] = ttSHORT(comp); comp+=2; + } else { + mtx[4] = ttCHAR(comp); comp+=1; + mtx[5] = ttCHAR(comp); comp+=1; + } + } + else { + // @TODO handle matching point + STBTT_assert(0); + } + if (flags & (1<<3)) { // WE_HAVE_A_SCALE + mtx[0] = mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = mtx[2] = 0; + } else if (flags & (1<<6)) { // WE_HAVE_AN_X_AND_YSCALE + mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = mtx[2] = 0; + mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + } else if (flags & (1<<7)) { // WE_HAVE_A_TWO_BY_TWO + mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[2] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + } + + // Find transformation scales. + m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]); + n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]); + + // Get indexed glyph. + comp_num_verts = stbtt_GetGlyphShape(info, gidx, &comp_verts); + if (comp_num_verts > 0) { + // Transform vertices. + for (i = 0; i < comp_num_verts; ++i) { + stbtt_vertex* v = &comp_verts[i]; + stbtt_vertex_type x,y; + x=v->x; y=v->y; + v->x = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); + v->y = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); + x=v->cx; y=v->cy; + v->cx = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); + v->cy = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); + } + // Append vertices. + tmp = (stbtt_vertex*)STBTT_malloc((num_vertices+comp_num_verts)*sizeof(stbtt_vertex), info->userdata); + if (!tmp) { + if (vertices) STBTT_free(vertices, info->userdata); + if (comp_verts) STBTT_free(comp_verts, info->userdata); + return 0; + } + if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); + STBTT_memcpy(tmp+num_vertices, comp_verts, comp_num_verts*sizeof(stbtt_vertex)); + if (vertices) STBTT_free(vertices, info->userdata); + vertices = tmp; + STBTT_free(comp_verts, info->userdata); + num_vertices += comp_num_verts; + } + // More components ? + more = flags & (1<<5); + } + } else if (numberOfContours < 0) { + // @TODO other compound variations? + STBTT_assert(0); + } else { + // numberOfCounters == 0, do nothing + } + + *pvertices = vertices; + return num_vertices; +} + +void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing) +{ + stbtt_uint16 numOfLongHorMetrics = ttUSHORT(info->data+info->hhea + 34); + if (glyph_index < numOfLongHorMetrics) { + if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*glyph_index); + if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*glyph_index + 2); + } else { + if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*(numOfLongHorMetrics-1)); + if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*numOfLongHorMetrics + 2*(glyph_index - numOfLongHorMetrics)); + } +} + +int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) +{ + stbtt_uint8 *data = info->data + info->kern; + stbtt_uint32 needle, straw; + int l, r, m; + + // we only look at the first table. it must be 'horizontal' and format 0. + if (!info->kern) + return 0; + if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 + return 0; + if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format + return 0; + + l = 0; + r = ttUSHORT(data+10) - 1; + needle = glyph1 << 16 | glyph2; + while (l <= r) { + m = (l + r) >> 1; + straw = ttULONG(data+18+(m*6)); // note: unaligned read + if (needle < straw) + r = m - 1; + else if (needle > straw) + l = m + 1; + else + return ttSHORT(data+22+(m*6)); + } + return 0; +} + +int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2) +{ + if (!info->kern) // if no kerning table, don't waste time looking up both codepoint->glyphs + return 0; + return stbtt_GetGlyphKernAdvance(info, stbtt_FindGlyphIndex(info,ch1), stbtt_FindGlyphIndex(info,ch2)); +} + +void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing) +{ + stbtt_GetGlyphHMetrics(info, stbtt_FindGlyphIndex(info,codepoint), advanceWidth, leftSideBearing); +} + +void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap) +{ + if (ascent ) *ascent = ttSHORT(info->data+info->hhea + 4); + if (descent) *descent = ttSHORT(info->data+info->hhea + 6); + if (lineGap) *lineGap = ttSHORT(info->data+info->hhea + 8); +} + +void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1) +{ + *x0 = ttSHORT(info->data + info->head + 36); + *y0 = ttSHORT(info->data + info->head + 38); + *x1 = ttSHORT(info->data + info->head + 40); + *y1 = ttSHORT(info->data + info->head + 42); +} + +float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float height) +{ + int fheight = ttSHORT(info->data + info->hhea + 4) - ttSHORT(info->data + info->hhea + 6); + return (float) height / fheight; +} + +float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels) +{ + int unitsPerEm = ttUSHORT(info->data + info->head + 18); + return pixels / unitsPerEm; +} + +void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v) +{ + STBTT_free(v, info->userdata); +} + +////////////////////////////////////////////////////////////////////////////// +// +// antialiasing software rasterizer +// + +void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + int x0,y0,x1,y1; + if (!stbtt_GetGlyphBox(font, glyph, &x0,&y0,&x1,&y1)) + x0=y0=x1=y1=0; // e.g. space character + // now move to integral bboxes (treating pixels as little squares, what pixels get touched)? + if (ix0) *ix0 = STBTT_ifloor(x0 * scale_x + shift_x); + if (iy0) *iy0 = -STBTT_iceil (y1 * scale_y + shift_y); + if (ix1) *ix1 = STBTT_iceil (x1 * scale_x + shift_x); + if (iy1) *iy1 = -STBTT_ifloor(y0 * scale_y + shift_y); +} +void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0.0f,0.0f, ix0, iy0, ix1, iy1); +} + +void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetGlyphBitmapBoxSubpixel(font, stbtt_FindGlyphIndex(font,codepoint), scale_x, scale_y,shift_x,shift_y, ix0,iy0,ix1,iy1); +} + +void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1); +} + +typedef struct stbtt__edge { + float x0,y0, x1,y1; + int invert; +} stbtt__edge; + +typedef struct stbtt__active_edge +{ + int x,dx; + float ey; + struct stbtt__active_edge *next; + int valid; +} stbtt__active_edge; + +#define FIXSHIFT 10 +#define FIX (1 << FIXSHIFT) +#define FIXMASK (FIX-1) + +static stbtt__active_edge *new_active(stbtt__edge *e, int off_x, float start_point, void *userdata) +{ + stbtt__active_edge *z = (stbtt__active_edge *) STBTT_malloc(sizeof(*z), userdata); // @TODO: make a pool of these!!! + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); + STBTT_assert(e->y0 <= start_point); + if (!z) return z; + // round dx down to avoid going too far + if (dxdy < 0) + z->dx = -STBTT_ifloor(FIX * -dxdy); + else + z->dx = STBTT_ifloor(FIX * dxdy); + z->x = STBTT_ifloor(FIX * (e->x0 + dxdy * (start_point - e->y0))); + z->x -= off_x * FIX; + z->ey = e->y1; + z->next = 0; + z->valid = e->invert ? 1 : -1; + return z; +} + +// note: this routine clips fills that extend off the edges... ideally this +// wouldn't happen, but it could happen if the truetype glyph bounding boxes +// are wrong, or if the user supplies a too-small bitmap +static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__active_edge *e, int max_weight) +{ + // non-zero winding fill + int x0=0, w=0; + + while (e) { + if (w == 0) { + // if we're currently at zero, we need to record the edge start point + x0 = e->x; w += e->valid; + } else { + int x1 = e->x; w += e->valid; + // if we went to zero, we need to draw + if (w == 0) { + int i = x0 >> FIXSHIFT; + int j = x1 >> FIXSHIFT; + + if (i < len && j >= 0) { + if (i == j) { + // x0,x1 are the same pixel, so compute combined coverage + scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> FIXSHIFT); + } else { + if (i >= 0) // add antialiasing for x0 + scanline[i] = scanline[i] + (stbtt_uint8) (((FIX - (x0 & FIXMASK)) * max_weight) >> FIXSHIFT); + else + i = -1; // clip + + if (j < len) // add antialiasing for x1 + scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & FIXMASK) * max_weight) >> FIXSHIFT); + else + j = len; // clip + + for (++i; i < j; ++i) // fill pixels between x0 and x1 + scanline[i] = scanline[i] + (stbtt_uint8) max_weight; + } + } + } + } + + e = e->next; + } +} + +static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) +{ + stbtt__active_edge *active = NULL; + int y,j=0; + int max_weight = (255 / vsubsample); // weight per vertical scanline + int s; // vertical subsample index + unsigned char scanline_data[512], *scanline; + + if (result->w > 512) + scanline = (unsigned char *) STBTT_malloc(result->w, userdata); + else + scanline = scanline_data; + + y = off_y * vsubsample; + e[n].y0 = (off_y + result->h) * (float) vsubsample + 1; + + while (j < result->h) { + STBTT_memset(scanline, 0, result->w); + for (s=0; s < vsubsample; ++s) { + // find center of pixel for this scanline + float scan_y = y + 0.5f; + stbtt__active_edge **step = &active; + + // update all active edges; + // remove all active edges that terminate before the center of this scanline + while (*step) { + stbtt__active_edge * z = *step; + if (z->ey <= scan_y) { + *step = z->next; // delete from list + STBTT_assert(z->valid); + z->valid = 0; + STBTT_free(z, userdata); + } else { + z->x += z->dx; // advance to position for current scanline + step = &((*step)->next); // advance through list + } + } + + // resort the list if needed + for(;;) { + int changed=0; + step = &active; + while (*step && (*step)->next) { + if ((*step)->x > (*step)->next->x) { + stbtt__active_edge *t = *step; + stbtt__active_edge *q = t->next; + + t->next = q->next; + q->next = t; + *step = q; + changed = 1; + } + step = &(*step)->next; + } + if (!changed) break; + } + + // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline + while (e->y0 <= scan_y) { + if (e->y1 > scan_y) { + stbtt__active_edge *z = new_active(e, off_x, scan_y, userdata); + // find insertion point + if (active == NULL) + active = z; + else if (z->x < active->x) { + // insert at front + z->next = active; + active = z; + } else { + // find thing to insert AFTER + stbtt__active_edge *p = active; + while (p->next && p->next->x < z->x) + p = p->next; + // at this point, p->next->x is NOT < z->x + z->next = p->next; + p->next = z; + } + } + ++e; + } + + // now process all active edges in XOR fashion + if (active) + stbtt__fill_active_edges(scanline, result->w, active, max_weight); + + ++y; + } + STBTT_memcpy(result->pixels + j * result->stride, scanline, result->w); + ++j; + } + + while (active) { + stbtt__active_edge *z = active; + active = active->next; + STBTT_free(z, userdata); + } + + if (scanline != scanline_data) + STBTT_free(scanline, userdata); +} + +static int stbtt__edge_compare(const void *p, const void *q) +{ + stbtt__edge *a = (stbtt__edge *) p; + stbtt__edge *b = (stbtt__edge *) q; + + if (a->y0 < b->y0) return -1; + if (a->y0 > b->y0) return 1; + return 0; +} + +typedef struct +{ + float x,y; +} stbtt__point; + +static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, float scale_x, float scale_y, float shift_x, float shift_y, int off_x, int off_y, int invert, void *userdata) +{ + float y_scale_inv = invert ? -scale_y : scale_y; + stbtt__edge *e; + int n,i,j,k,m; + int vsubsample = result->h < 8 ? 15 : 5; + // vsubsample should divide 255 evenly; otherwise we won't reach full opacity + + // now we have to blow out the windings into explicit edge lists + n = 0; + for (i=0; i < windings; ++i) + n += wcount[i]; + + e = (stbtt__edge *) STBTT_malloc(sizeof(*e) * (n+1), userdata); // add an extra one as a sentinel + if (e == 0) return; + n = 0; + + m=0; + for (i=0; i < windings; ++i) { + stbtt__point *p = pts + m; + m += wcount[i]; + j = wcount[i]-1; + for (k=0; k < wcount[i]; j=k++) { + int a=k,b=j; + // skip the edge if horizontal + if (p[j].y == p[k].y) + continue; + // add edge from j to k to the list + e[n].invert = 0; + if (invert ? p[j].y > p[k].y : p[j].y < p[k].y) { + e[n].invert = 1; + a=j,b=k; + } + e[n].x0 = p[a].x * scale_x + shift_x; + e[n].y0 = p[a].y * y_scale_inv * vsubsample + shift_y; + e[n].x1 = p[b].x * scale_x + shift_x; + e[n].y1 = p[b].y * y_scale_inv * vsubsample + shift_y; + ++n; + } + } + + // now sort the edges by their highest point (should snap to integer, and then by x) + STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare); + + // now, traverse the scanlines and find the intersections on each scanline, use xor winding rule + stbtt__rasterize_sorted_edges(result, e, n, vsubsample, off_x, off_y, userdata); + + STBTT_free(e, userdata); +} + +static void stbtt__add_point(stbtt__point *points, int n, float x, float y) +{ + if (!points) return; // during first pass, it's unallocated + points[n].x = x; + points[n].y = y; +} + +// tesselate until threshhold p is happy... @TODO warped to compensate for non-linear stretching +static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float objspace_flatness_squared, int n) +{ + // midpoint + float mx = (x0 + 2*x1 + x2)/4; + float my = (y0 + 2*y1 + y2)/4; + // versus directly drawn line + float dx = (x0+x2)/2 - mx; + float dy = (y0+y2)/2 - my; + if (n > 16) // 65536 segments on one curve better be enough! + return 1; + if (dx*dx+dy*dy > objspace_flatness_squared) { // half-pixel error allowed... need to be smaller if AA + stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2.0f,(y0+y1)/2.0f, mx,my, objspace_flatness_squared,n+1); + stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2.0f,(y1+y2)/2.0f, x2,y2, objspace_flatness_squared,n+1); + } else { + stbtt__add_point(points, *num_points,x2,y2); + *num_points = *num_points+1; + } + return 1; +} + +// returns number of contours +stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata) +{ + stbtt__point *points=0; + int num_points=0; + + float objspace_flatness_squared = objspace_flatness * objspace_flatness; + int i,n=0,start=0, pass; + + // count how many "moves" there are to get the contour count + for (i=0; i < num_verts; ++i) + if (vertices[i].type == STBTT_vmove) + ++n; + + *num_contours = n; + if (n == 0) return 0; + + *contour_lengths = (int *) STBTT_malloc(sizeof(**contour_lengths) * n, userdata); + + if (*contour_lengths == 0) { + *num_contours = 0; + return 0; + } + + // make two passes through the points so we don't need to realloc + for (pass=0; pass < 2; ++pass) { + float x=0,y=0; + if (pass == 1) { + points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata); + if (points == NULL) goto error; + } + num_points = 0; + n= -1; + for (i=0; i < num_verts; ++i) { + switch (vertices[i].type) { + case STBTT_vmove: + // start the next contour + if (n >= 0) + (*contour_lengths)[n] = num_points - start; + ++n; + start = num_points; + + x = vertices[i].x, y = vertices[i].y; + stbtt__add_point(points, num_points++, x,y); + break; + case STBTT_vline: + x = vertices[i].x, y = vertices[i].y; + stbtt__add_point(points, num_points++, x, y); + break; + case STBTT_vcurve: + stbtt__tesselate_curve(points, &num_points, x,y, + vertices[i].cx, vertices[i].cy, + vertices[i].x, vertices[i].y, + objspace_flatness_squared, 0); + x = vertices[i].x, y = vertices[i].y; + break; + } + } + (*contour_lengths)[n] = num_points - start; + } + + return points; +error: + STBTT_free(points, userdata); + STBTT_free(*contour_lengths, userdata); + *contour_lengths = 0; + *num_contours = 0; + return NULL; +} + +void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata) +{ + float scale = scale_x > scale_y ? scale_y : scale_x; + int winding_count, *winding_lengths; + stbtt__point *windings = stbtt_FlattenCurves(vertices, num_verts, flatness_in_pixels / scale, &winding_lengths, &winding_count, userdata); + if (windings) { + stbtt__rasterize(result, windings, winding_lengths, winding_count, scale_x, scale_y, shift_x, shift_y, x_off, y_off, invert, userdata); + STBTT_free(winding_lengths, userdata); + STBTT_free(windings, userdata); + } +} + +void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata) +{ + STBTT_free(bitmap, userdata); +} + +unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff) +{ + int ix0,iy0,ix1,iy1; + stbtt__bitmap gbm; + stbtt_vertex *vertices; + int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); + + if (scale_x == 0) scale_x = scale_y; + if (scale_y == 0) { + if (scale_x == 0) return NULL; + scale_y = scale_x; + } + + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,&ix1,&iy1); + + // now we get the size + gbm.w = (ix1 - ix0); + gbm.h = (iy1 - iy0); + gbm.pixels = NULL; // in case we error + + if (width ) *width = gbm.w; + if (height) *height = gbm.h; + if (xoff ) *xoff = ix0; + if (yoff ) *yoff = iy0; + + if (gbm.w && gbm.h) { + gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata); + if (gbm.pixels) { + gbm.stride = gbm.w; + + stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata); + } + } + STBTT_free(vertices, info->userdata); + return gbm.pixels; +} + +unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0.0f, 0.0f, glyph, width, height, xoff, yoff); +} + +void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph) +{ + int ix0,iy0; + stbtt_vertex *vertices; + int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); + stbtt__bitmap gbm; + + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0); + gbm.pixels = output; + gbm.w = out_w; + gbm.h = out_h; + gbm.stride = out_stride; + + if (gbm.w && gbm.h) + stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata); + + STBTT_free(vertices, info->userdata); +} + +void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph) +{ + stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, glyph); +} + +unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff); +} + +void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint) +{ + stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, stbtt_FindGlyphIndex(info,codepoint)); +} + +unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff); +} + +void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint) +{ + stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, codepoint); +} + +////////////////////////////////////////////////////////////////////////////// +// +// bitmap baking +// +// This is SUPER-CRAPPY packing to keep source code small + +extern int stbtt_BakeFontBitmap(const unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) + float pixel_height, // height of font in pixels + unsigned char *pixels, int pw, int ph, // bitmap to be filled in + int first_char, int num_chars, // characters to bake + stbtt_bakedchar *chardata) +{ + float scale; + int x,y,bottom_y, i; + stbtt_fontinfo f; + stbtt_InitFont(&f, data, offset); + STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels + x=y=1; + bottom_y = 1; + + scale = stbtt_ScaleForPixelHeight(&f, pixel_height); + + for (i=0; i < num_chars; ++i) { + int advance, lsb, x0,y0,x1,y1,gw,gh; + int g = stbtt_FindGlyphIndex(&f, first_char + i); + stbtt_GetGlyphHMetrics(&f, g, &advance, &lsb); + stbtt_GetGlyphBitmapBox(&f, g, scale,scale, &x0,&y0,&x1,&y1); + gw = x1-x0; + gh = y1-y0; + if (x + gw + 1 >= pw) + y = bottom_y, x = 1; // advance to next row + if (y + gh + 1 >= ph) // check if it fits vertically AFTER potentially moving to next row + return -i; + STBTT_assert(x+gw < pw); + STBTT_assert(y+gh < ph); + stbtt_MakeGlyphBitmap(&f, pixels+x+y*pw, gw,gh,pw, scale,scale, g); + chardata[i].x0 = (stbtt_int16) x; + chardata[i].y0 = (stbtt_int16) y; + chardata[i].x1 = (stbtt_int16) (x + gw); + chardata[i].y1 = (stbtt_int16) (y + gh); + chardata[i].xadvance = scale * advance; + chardata[i].xoff = (float) x0; + chardata[i].yoff = (float) y0; + x = x + gw + 2; + if (y+gh+2 > bottom_y) + bottom_y = y+gh+2; + } + return bottom_y; +} + +void stbtt_GetBakedQuad(stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule) +{ + float d3d_bias = opengl_fillrule ? 0 : -0.5f; + float ipw = 1.0f / pw, iph = 1.0f / ph; + stbtt_bakedchar *b = chardata + char_index; + int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5); + int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5); + + q->x0 = round_x + d3d_bias; + q->y0 = round_y + d3d_bias; + q->x1 = round_x + b->x1 - b->x0 + d3d_bias; + q->y1 = round_y + b->y1 - b->y0 + d3d_bias; + + q->s0 = b->x0 * ipw; + q->t0 = b->y0 * iph; + q->s1 = b->x1 * ipw; + q->t1 = b->y1 * iph; + + *xpos += b->xadvance; +} + +////////////////////////////////////////////////////////////////////////////// +// +// font name matching -- recommended not to use this +// + +// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string +static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(const stbtt_uint8 *s1, stbtt_int32 len1, const stbtt_uint8 *s2, stbtt_int32 len2) +{ + stbtt_int32 i=0; + + // convert utf16 to utf8 and compare the results while converting + while (len2) { + stbtt_uint16 ch = s2[0]*256 + s2[1]; + if (ch < 0x80) { + if (i >= len1) return -1; + if (s1[i++] != ch) return -1; + } else if (ch < 0x800) { + if (i+1 >= len1) return -1; + if (s1[i++] != 0xc0 + (ch >> 6)) return -1; + if (s1[i++] != 0x80 + (ch & 0x3f)) return -1; + } else if (ch >= 0xd800 && ch < 0xdc00) { + stbtt_uint32 c; + stbtt_uint16 ch2 = s2[2]*256 + s2[3]; + if (i+3 >= len1) return -1; + c = ((ch - 0xd800) << 10) + (ch2 - 0xdc00) + 0x10000; + if (s1[i++] != 0xf0 + (c >> 18)) return -1; + if (s1[i++] != 0x80 + ((c >> 12) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((c >> 6) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((c ) & 0x3f)) return -1; + s2 += 2; // plus another 2 below + len2 -= 2; + } else if (ch >= 0xdc00 && ch < 0xe000) { + return -1; + } else { + if (i+2 >= len1) return -1; + if (s1[i++] != 0xe0 + (ch >> 12)) return -1; + if (s1[i++] != 0x80 + ((ch >> 6) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((ch ) & 0x3f)) return -1; + } + s2 += 2; + len2 -= 2; + } + return i; +} + +int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2) +{ + return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((const stbtt_uint8*) s1, len1, (const stbtt_uint8*) s2, len2); +} + +// returns results in whatever encoding you request... but note that 2-byte encodings +// will be BIG-ENDIAN... use stbtt_CompareUTF8toUTF16_bigendian() to compare +const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID) +{ + stbtt_int32 i,count,stringOffset; + stbtt_uint8 *fc = font->data; + stbtt_uint32 offset = font->fontstart; + stbtt_uint32 nm = stbtt__find_table(fc, offset, "name"); + if (!nm) return NULL; + + count = ttUSHORT(fc+nm+2); + stringOffset = nm + ttUSHORT(fc+nm+4); + for (i=0; i < count; ++i) { + stbtt_uint32 loc = nm + 6 + 12 * i; + if (platformID == ttUSHORT(fc+loc+0) && encodingID == ttUSHORT(fc+loc+2) + && languageID == ttUSHORT(fc+loc+4) && nameID == ttUSHORT(fc+loc+6)) { + *length = ttUSHORT(fc+loc+8); + return (const char *) (fc+stringOffset+ttUSHORT(fc+loc+10)); + } + } + return NULL; +} + +static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint8 *name, stbtt_int32 nlen, stbtt_int32 target_id, stbtt_int32 next_id) +{ + stbtt_int32 i; + stbtt_int32 count = ttUSHORT(fc+nm+2); + stbtt_int32 stringOffset = nm + ttUSHORT(fc+nm+4); + + for (i=0; i < count; ++i) { + stbtt_uint32 loc = nm + 6 + 12 * i; + stbtt_int32 id = ttUSHORT(fc+loc+6); + if (id == target_id) { + // find the encoding + stbtt_int32 platform = ttUSHORT(fc+loc+0), encoding = ttUSHORT(fc+loc+2), language = ttUSHORT(fc+loc+4); + + // is this a Unicode encoding? + if (platform == 0 || (platform == 3 && encoding == 1) || (platform == 3 && encoding == 10)) { + stbtt_int32 slen = ttUSHORT(fc+loc+8); + stbtt_int32 off = ttUSHORT(fc+loc+10); + + // check if there's a prefix match + stbtt_int32 matchlen = stbtt__CompareUTF8toUTF16_bigendian_prefix(name, nlen, fc+stringOffset+off,slen); + if (matchlen >= 0) { + // check for target_id+1 immediately following, with same encoding & language + if (i+1 < count && ttUSHORT(fc+loc+12+6) == next_id && ttUSHORT(fc+loc+12) == platform && ttUSHORT(fc+loc+12+2) == encoding && ttUSHORT(fc+loc+12+4) == language) { + slen = ttUSHORT(fc+loc+12+8); + off = ttUSHORT(fc+loc+12+10); + if (slen == 0) { + if (matchlen == nlen) + return 1; + } else if (matchlen < nlen && name[matchlen] == ' ') { + ++matchlen; + if (stbtt_CompareUTF8toUTF16_bigendian((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen)) + return 1; + } + } else { + // if nothing immediately following + if (matchlen == nlen) + return 1; + } + } + } + + // @TODO handle other encodings + } + } + return 0; +} + +static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_uint8 *name, stbtt_int32 flags) +{ + stbtt_int32 nlen = (stbtt_int32) STBTT_strlen((char *) name); + stbtt_uint32 nm,hd; + if (!stbtt__isfont(fc+offset)) return 0; + + // check italics/bold/underline flags in macStyle... + if (flags) { + hd = stbtt__find_table(fc, offset, "head"); + if ((ttUSHORT(fc+hd+44) & 7) != (flags & 7)) return 0; + } + + nm = stbtt__find_table(fc, offset, "name"); + if (!nm) return 0; + + if (flags) { + // if we checked the macStyle flags, then just check the family and ignore the subfamily + if (stbtt__matchpair(fc, nm, name, nlen, 16, -1)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 1, -1)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; + } else { + if (stbtt__matchpair(fc, nm, name, nlen, 16, 17)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 1, 2)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; + } + + return 0; +} + +int stbtt_FindMatchingFont(const unsigned char *font_collection, const char *name_utf8, stbtt_int32 flags) +{ + stbtt_int32 i; + for (i=0;;++i) { + stbtt_int32 off = stbtt_GetFontOffsetForIndex(font_collection, i); + if (off < 0) return off; + if (stbtt__matches((stbtt_uint8 *) font_collection, off, (stbtt_uint8*) name_utf8, flags)) + return off; + } +} + +#endif // STB_TRUETYPE_IMPLEMENTATION diff --git a/dpf/dgl/src/oui-blendish/LICENSE b/dpf/dgl/src/oui-blendish/LICENSE new file mode 100644 index 0000000..c160346 --- /dev/null +++ b/dpf/dgl/src/oui-blendish/LICENSE @@ -0,0 +1,21 @@ +Blendish - Blender 2.5 UI based theming functions for NanoVG + +Copyright (c) 2014 Leonard Ritter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/dpf/dgl/src/oui-blendish/blendish.h b/dpf/dgl/src/oui-blendish/blendish.h new file mode 100644 index 0000000..9f8c9d2 --- /dev/null +++ b/dpf/dgl/src/oui-blendish/blendish.h @@ -0,0 +1,2399 @@ +/* +Blendish - Blender 2.5 UI based theming functions for NanoVG + +Copyright (c) 2014 Leonard Ritter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef BLENDISH_H +#define BLENDISH_H + +#ifndef NANOVG_H +#error "nanovg.h must be included first." +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + +Revision 6 (2014-09-21) + +Summary +------- + +Blendish is a small collection of drawing functions for NanoVG, designed to +replicate the look of the Blender 2.5+ User Interface. You can use these +functions to theme your UI library. Several metric constants for faithful +reproduction are also included. + +Blendish supports the original Blender icon sheet; As the licensing of Blenders +icons is unclear, they are not included in Blendishes repository, but a SVG +template, "icons_template.svg" is provided, which you can use to build your own +icon sheet. + +To use icons, you must first load the icon sheet using one of the +nvgCreateImage*() functions and then pass the image handle to bndSetIconImage(); +otherwise, no icons will be drawn. See bndSetIconImage() for more information. + +Blendish will not render text until a suitable UI font has been passed to +bndSetFont() has been called. See bndSetFont() for more information. + + +Drawbacks +--------- + +There is no support for varying dpi resolutions yet. The library is hardcoded +to the equivalent of 72 dpi in the Blender system settings. + +Support for label truncation is missing. Text rendering breaks when widgets are +too short to contain their labels. + +Usage +----- + +To use this header file in implementation mode, define BLENDISH_IMPLEMENTATION +before including blendish.h, otherwise the file will be in header-only mode. + +*/ + +// you can override this from the outside to pick +// the export level you need +#ifndef BND_EXPORT +#define BND_EXPORT +#endif + +// if that typedef is provided elsewhere, you may define +// BLENDISH_NO_NVG_TYPEDEFS before including the header. +#ifndef BLENDISH_NO_NVG_TYPEDEFS +typedef struct NVGcontext NVGcontext; +typedef struct NVGcolor NVGcolor; +typedef struct NVGglyphPosition NVGglyphPosition; +#endif + +// describes the theme used to draw a single widget or widget box; +// these values correspond to the same values that can be retrieved from +// the Theme panel in the Blender preferences +typedef struct BNDwidgetTheme { + // color of widget box outline + NVGcolor outlineColor; + // color of widget item (meaning changes depending on class) + NVGcolor itemColor; + // fill color of widget box + NVGcolor innerColor; + // fill color of widget box when active + NVGcolor innerSelectedColor; + // color of text label + NVGcolor textColor; + // color of text label when active + NVGcolor textSelectedColor; + // delta modifier for upper part of gradient (-100 to 100) + int shadeTop; + // delta modifier for lower part of gradient (-100 to 100) + int shadeDown; +} BNDwidgetTheme; + +// describes the theme used to draw nodes +typedef struct BNDnodeTheme { + // inner color of selected node (and downarrow) + NVGcolor nodeSelectedColor; + // outline of wires + NVGcolor wiresColor; + // color of text label when active + NVGcolor textSelectedColor; + + // inner color of active node (and dragged wire) + NVGcolor activeNodeColor; + // color of selected wire + NVGcolor wireSelectColor; + // color of background of node + NVGcolor nodeBackdropColor; + + // how much a noodle curves (0 to 10) + int noodleCurving; +} BNDnodeTheme; + +// describes the theme used to draw widgets +typedef struct BNDtheme { + // the background color of panels and windows + NVGcolor backgroundColor; + // theme for labels + BNDwidgetTheme regularTheme; + // theme for tool buttons + BNDwidgetTheme toolTheme; + // theme for radio buttons + BNDwidgetTheme radioTheme; + // theme for text fields + BNDwidgetTheme textFieldTheme; + // theme for option buttons (checkboxes) + BNDwidgetTheme optionTheme; + // theme for choice buttons (comboboxes) + // Blender calls them "menu buttons" + BNDwidgetTheme choiceTheme; + // theme for number fields + BNDwidgetTheme numberFieldTheme; + // theme for slider controls + BNDwidgetTheme sliderTheme; + // theme for scrollbars + BNDwidgetTheme scrollBarTheme; + // theme for tooltips + BNDwidgetTheme tooltipTheme; + // theme for menu backgrounds + BNDwidgetTheme menuTheme; + // theme for menu items + BNDwidgetTheme menuItemTheme; + // theme for nodes + BNDnodeTheme nodeTheme; +} BNDtheme; + +// how text on a control is aligned +typedef enum BNDtextAlignment { + BND_LEFT = 0, + BND_CENTER, +} BNDtextAlignment; + +// states altering the styling of a widget +typedef enum BNDwidgetState { + // not interacting + BND_DEFAULT = 0, + // the mouse is hovering over the control + BND_HOVER, + // the widget is activated (pressed) or in an active state (toggled) + BND_ACTIVE +} BNDwidgetState; + +// flags indicating which corners are sharp (for grouping widgets) +typedef enum BNDcornerFlags { + // all corners are round + BND_CORNER_NONE = 0, + // sharp top left corner + BND_CORNER_TOP_LEFT = 1, + // sharp top right corner + BND_CORNER_TOP_RIGHT = 2, + // sharp bottom right corner + BND_CORNER_DOWN_RIGHT = 4, + // sharp bottom left corner + BND_CORNER_DOWN_LEFT = 8, + // all corners are sharp; + // you can invert a set of flags using ^= BND_CORNER_ALL + BND_CORNER_ALL = 0xF, + // top border is sharp + BND_CORNER_TOP = 3, + // bottom border is sharp + BND_CORNER_DOWN = 0xC, + // left border is sharp + BND_CORNER_LEFT = 9, + // right border is sharp + BND_CORNER_RIGHT = 6 +} BNDcornerFlags; + +// build an icon ID from two coordinates into the icon sheet, where +// (0,0) designates the upper-leftmost icon, (1,0) the one right next to it, +// and so on. +#define BND_ICONID(x,y) ((x)|((y)<<8)) +// alpha of disabled widget groups +// can be used in conjunction with nvgGlobalAlpha() +#define BND_DISABLED_ALPHA 0.5 + +enum { + // default widget height + BND_WIDGET_HEIGHT = 21, + // default toolbutton width (if icon only) + BND_TOOL_WIDTH = 20, + + // default radius of node ports + BND_NODE_PORT_RADIUS = 5, + // top margin of node content + BND_NODE_MARGIN_TOP = 25, + // bottom margin of node content + BND_NODE_MARGIN_DOWN = 5, + // left and right margin of node content + BND_NODE_MARGIN_SIDE = 10, + // height of node title bar + BND_NODE_TITLE_HEIGHT = 20, + // width of node title arrow click area + BND_NODE_ARROW_AREA_WIDTH = 20, + + // size of splitter corner click area + BND_SPLITTER_AREA_SIZE = 12, + + // width of vertical scrollbar + BND_SCROLLBAR_WIDTH = 13, + // height of horizontal scrollbar + BND_SCROLLBAR_HEIGHT = 14, + + // default vertical spacing + BND_VSPACING = 1, + // default vertical spacing between groups + BND_VSPACING_GROUP = 8, + // default horizontal spacing + BND_HSPACING = 8, +}; + +typedef enum BNDicon { + BND_ICON_NONE = BND_ICONID(0,29), + BND_ICON_QUESTION = BND_ICONID(1,29), + BND_ICON_ERROR = BND_ICONID(2,29), + BND_ICON_CANCEL = BND_ICONID(3,29), + BND_ICON_TRIA_RIGHT = BND_ICONID(4,29), + BND_ICON_TRIA_DOWN = BND_ICONID(5,29), + BND_ICON_TRIA_LEFT = BND_ICONID(6,29), + BND_ICON_TRIA_UP = BND_ICONID(7,29), + BND_ICON_ARROW_LEFTRIGHT = BND_ICONID(8,29), + BND_ICON_PLUS = BND_ICONID(9,29), + BND_ICON_DISCLOSURE_TRI_DOWN = BND_ICONID(10,29), + BND_ICON_DISCLOSURE_TRI_RIGHT = BND_ICONID(11,29), + BND_ICON_RADIOBUT_OFF = BND_ICONID(12,29), + BND_ICON_RADIOBUT_ON = BND_ICONID(13,29), + BND_ICON_MENU_PANEL = BND_ICONID(14,29), + BND_ICON_BLENDER = BND_ICONID(15,29), + BND_ICON_GRIP = BND_ICONID(16,29), + BND_ICON_DOT = BND_ICONID(17,29), + BND_ICON_COLLAPSEMENU = BND_ICONID(18,29), + BND_ICON_X = BND_ICONID(19,29), + BND_ICON_GO_LEFT = BND_ICONID(21,29), + BND_ICON_PLUG = BND_ICONID(22,29), + BND_ICON_UI = BND_ICONID(23,29), + BND_ICON_NODE = BND_ICONID(24,29), + BND_ICON_NODE_SEL = BND_ICONID(25,29), + + BND_ICON_FULLSCREEN = BND_ICONID(0,28), + BND_ICON_SPLITSCREEN = BND_ICONID(1,28), + BND_ICON_RIGHTARROW_THIN = BND_ICONID(2,28), + BND_ICON_BORDERMOVE = BND_ICONID(3,28), + BND_ICON_VIEWZOOM = BND_ICONID(4,28), + BND_ICON_ZOOMIN = BND_ICONID(5,28), + BND_ICON_ZOOMOUT = BND_ICONID(6,28), + BND_ICON_PANEL_CLOSE = BND_ICONID(7,28), + BND_ICON_COPY_ID = BND_ICONID(8,28), + BND_ICON_EYEDROPPER = BND_ICONID(9,28), + BND_ICON_LINK_AREA = BND_ICONID(10,28), + BND_ICON_AUTO = BND_ICONID(11,28), + BND_ICON_CHECKBOX_DEHLT = BND_ICONID(12,28), + BND_ICON_CHECKBOX_HLT = BND_ICONID(13,28), + BND_ICON_UNLOCKED = BND_ICONID(14,28), + BND_ICON_LOCKED = BND_ICONID(15,28), + BND_ICON_UNPINNED = BND_ICONID(16,28), + BND_ICON_PINNED = BND_ICONID(17,28), + BND_ICON_SCREEN_BACK = BND_ICONID(18,28), + BND_ICON_RIGHTARROW = BND_ICONID(19,28), + BND_ICON_DOWNARROW_HLT = BND_ICONID(20,28), + BND_ICON_DOTSUP = BND_ICONID(21,28), + BND_ICON_DOTSDOWN = BND_ICONID(22,28), + BND_ICON_LINK = BND_ICONID(23,28), + BND_ICON_INLINK = BND_ICONID(24,28), + BND_ICON_PLUGIN = BND_ICONID(25,28), + + BND_ICON_HELP = BND_ICONID(0,27), + BND_ICON_GHOST_ENABLED = BND_ICONID(1,27), + BND_ICON_COLOR = BND_ICONID(2,27), + BND_ICON_LINKED = BND_ICONID(3,27), + BND_ICON_UNLINKED = BND_ICONID(4,27), + BND_ICON_HAND = BND_ICONID(5,27), + BND_ICON_ZOOM_ALL = BND_ICONID(6,27), + BND_ICON_ZOOM_SELECTED = BND_ICONID(7,27), + BND_ICON_ZOOM_PREVIOUS = BND_ICONID(8,27), + BND_ICON_ZOOM_IN = BND_ICONID(9,27), + BND_ICON_ZOOM_OUT = BND_ICONID(10,27), + BND_ICON_RENDER_REGION = BND_ICONID(11,27), + BND_ICON_BORDER_RECT = BND_ICONID(12,27), + BND_ICON_BORDER_LASSO = BND_ICONID(13,27), + BND_ICON_FREEZE = BND_ICONID(14,27), + BND_ICON_STYLUS_PRESSURE = BND_ICONID(15,27), + BND_ICON_GHOST_DISABLED = BND_ICONID(16,27), + BND_ICON_NEW = BND_ICONID(17,27), + BND_ICON_FILE_TICK = BND_ICONID(18,27), + BND_ICON_QUIT = BND_ICONID(19,27), + BND_ICON_URL = BND_ICONID(20,27), + BND_ICON_RECOVER_LAST = BND_ICONID(21,27), + BND_ICON_FULLSCREEN_ENTER = BND_ICONID(23,27), + BND_ICON_FULLSCREEN_EXIT = BND_ICONID(24,27), + BND_ICON_BLANK1 = BND_ICONID(25,27), + + BND_ICON_LAMP = BND_ICONID(0,26), + BND_ICON_MATERIAL = BND_ICONID(1,26), + BND_ICON_TEXTURE = BND_ICONID(2,26), + BND_ICON_ANIM = BND_ICONID(3,26), + BND_ICON_WORLD = BND_ICONID(4,26), + BND_ICON_SCENE = BND_ICONID(5,26), + BND_ICON_EDIT = BND_ICONID(6,26), + BND_ICON_GAME = BND_ICONID(7,26), + BND_ICON_RADIO = BND_ICONID(8,26), + BND_ICON_SCRIPT = BND_ICONID(9,26), + BND_ICON_PARTICLES = BND_ICONID(10,26), + BND_ICON_PHYSICS = BND_ICONID(11,26), + BND_ICON_SPEAKER = BND_ICONID(12,26), + BND_ICON_TEXTURE_SHADED = BND_ICONID(13,26), + + BND_ICON_VIEW3D = BND_ICONID(0,25), + BND_ICON_IPO = BND_ICONID(1,25), + BND_ICON_OOPS = BND_ICONID(2,25), + BND_ICON_BUTS = BND_ICONID(3,25), + BND_ICON_FILESEL = BND_ICONID(4,25), + BND_ICON_IMAGE_COL = BND_ICONID(5,25), + BND_ICON_INFO = BND_ICONID(6,25), + BND_ICON_SEQUENCE = BND_ICONID(7,25), + BND_ICON_TEXT = BND_ICONID(8,25), + BND_ICON_IMASEL = BND_ICONID(9,25), + BND_ICON_SOUND = BND_ICONID(10,25), + BND_ICON_ACTION = BND_ICONID(11,25), + BND_ICON_NLA = BND_ICONID(12,25), + BND_ICON_SCRIPTWIN = BND_ICONID(13,25), + BND_ICON_TIME = BND_ICONID(14,25), + BND_ICON_NODETREE = BND_ICONID(15,25), + BND_ICON_LOGIC = BND_ICONID(16,25), + BND_ICON_CONSOLE = BND_ICONID(17,25), + BND_ICON_PREFERENCES = BND_ICONID(18,25), + BND_ICON_CLIP = BND_ICONID(19,25), + BND_ICON_ASSET_MANAGER = BND_ICONID(20,25), + + BND_ICON_OBJECT_DATAMODE = BND_ICONID(0,24), + BND_ICON_EDITMODE_HLT = BND_ICONID(1,24), + BND_ICON_FACESEL_HLT = BND_ICONID(2,24), + BND_ICON_VPAINT_HLT = BND_ICONID(3,24), + BND_ICON_TPAINT_HLT = BND_ICONID(4,24), + BND_ICON_WPAINT_HLT = BND_ICONID(5,24), + BND_ICON_SCULPTMODE_HLT = BND_ICONID(6,24), + BND_ICON_POSE_HLT = BND_ICONID(7,24), + BND_ICON_PARTICLEMODE = BND_ICONID(8,24), + BND_ICON_LIGHTPAINT = BND_ICONID(9,24), + + BND_ICON_SCENE_DATA = BND_ICONID(0,23), + BND_ICON_RENDERLAYERS = BND_ICONID(1,23), + BND_ICON_WORLD_DATA = BND_ICONID(2,23), + BND_ICON_OBJECT_DATA = BND_ICONID(3,23), + BND_ICON_MESH_DATA = BND_ICONID(4,23), + BND_ICON_CURVE_DATA = BND_ICONID(5,23), + BND_ICON_META_DATA = BND_ICONID(6,23), + BND_ICON_LATTICE_DATA = BND_ICONID(7,23), + BND_ICON_LAMP_DATA = BND_ICONID(8,23), + BND_ICON_MATERIAL_DATA = BND_ICONID(9,23), + BND_ICON_TEXTURE_DATA = BND_ICONID(10,23), + BND_ICON_ANIM_DATA = BND_ICONID(11,23), + BND_ICON_CAMERA_DATA = BND_ICONID(12,23), + BND_ICON_PARTICLE_DATA = BND_ICONID(13,23), + BND_ICON_LIBRARY_DATA_DIRECT = BND_ICONID(14,23), + BND_ICON_GROUP = BND_ICONID(15,23), + BND_ICON_ARMATURE_DATA = BND_ICONID(16,23), + BND_ICON_POSE_DATA = BND_ICONID(17,23), + BND_ICON_BONE_DATA = BND_ICONID(18,23), + BND_ICON_CONSTRAINT = BND_ICONID(19,23), + BND_ICON_SHAPEKEY_DATA = BND_ICONID(20,23), + BND_ICON_CONSTRAINT_BONE = BND_ICONID(21,23), + BND_ICON_CAMERA_STEREO = BND_ICONID(22,23), + BND_ICON_PACKAGE = BND_ICONID(23,23), + BND_ICON_UGLYPACKAGE = BND_ICONID(24,23), + + BND_ICON_BRUSH_DATA = BND_ICONID(0,22), + BND_ICON_IMAGE_DATA = BND_ICONID(1,22), + BND_ICON_FILE = BND_ICONID(2,22), + BND_ICON_FCURVE = BND_ICONID(3,22), + BND_ICON_FONT_DATA = BND_ICONID(4,22), + BND_ICON_RENDER_RESULT = BND_ICONID(5,22), + BND_ICON_SURFACE_DATA = BND_ICONID(6,22), + BND_ICON_EMPTY_DATA = BND_ICONID(7,22), + BND_ICON_SETTINGS = BND_ICONID(8,22), + BND_ICON_RENDER_ANIMATION = BND_ICONID(9,22), + BND_ICON_RENDER_STILL = BND_ICONID(10,22), + BND_ICON_BOIDS = BND_ICONID(12,22), + BND_ICON_STRANDS = BND_ICONID(13,22), + BND_ICON_LIBRARY_DATA_INDIRECT = BND_ICONID(14,22), + BND_ICON_GREASEPENCIL = BND_ICONID(15,22), + BND_ICON_LINE_DATA = BND_ICONID(16,22), + BND_ICON_GROUP_BONE = BND_ICONID(18,22), + BND_ICON_GROUP_VERTEX = BND_ICONID(19,22), + BND_ICON_GROUP_VCOL = BND_ICONID(20,22), + BND_ICON_GROUP_UVS = BND_ICONID(21,22), + BND_ICON_RNA = BND_ICONID(24,22), + BND_ICON_RNA_ADD = BND_ICONID(25,22), + + BND_ICON_OUTLINER_OB_EMPTY = BND_ICONID(0,20), + BND_ICON_OUTLINER_OB_MESH = BND_ICONID(1,20), + BND_ICON_OUTLINER_OB_CURVE = BND_ICONID(2,20), + BND_ICON_OUTLINER_OB_LATTICE = BND_ICONID(3,20), + BND_ICON_OUTLINER_OB_META = BND_ICONID(4,20), + BND_ICON_OUTLINER_OB_LAMP = BND_ICONID(5,20), + BND_ICON_OUTLINER_OB_CAMERA = BND_ICONID(6,20), + BND_ICON_OUTLINER_OB_ARMATURE = BND_ICONID(7,20), + BND_ICON_OUTLINER_OB_FONT = BND_ICONID(8,20), + BND_ICON_OUTLINER_OB_SURFACE = BND_ICONID(9,20), + BND_ICON_OUTLINER_OB_SPEAKER = BND_ICONID(10,20), + BND_ICON_RESTRICT_VIEW_OFF = BND_ICONID(19,20), + BND_ICON_RESTRICT_VIEW_ON = BND_ICONID(20,20), + BND_ICON_RESTRICT_SELECT_OFF = BND_ICONID(21,20), + BND_ICON_RESTRICT_SELECT_ON = BND_ICONID(22,20), + BND_ICON_RESTRICT_RENDER_OFF = BND_ICONID(23,20), + BND_ICON_RESTRICT_RENDER_ON = BND_ICONID(24,20), + + BND_ICON_OUTLINER_DATA_EMPTY = BND_ICONID(0,19), + BND_ICON_OUTLINER_DATA_MESH = BND_ICONID(1,19), + BND_ICON_OUTLINER_DATA_CURVE = BND_ICONID(2,19), + BND_ICON_OUTLINER_DATA_LATTICE = BND_ICONID(3,19), + BND_ICON_OUTLINER_DATA_META = BND_ICONID(4,19), + BND_ICON_OUTLINER_DATA_LAMP = BND_ICONID(5,19), + BND_ICON_OUTLINER_DATA_CAMERA = BND_ICONID(6,19), + BND_ICON_OUTLINER_DATA_ARMATURE = BND_ICONID(7,19), + BND_ICON_OUTLINER_DATA_FONT = BND_ICONID(8,19), + BND_ICON_OUTLINER_DATA_SURFACE = BND_ICONID(9,19), + BND_ICON_OUTLINER_DATA_SPEAKER = BND_ICONID(10,19), + BND_ICON_OUTLINER_DATA_POSE = BND_ICONID(11,19), + + BND_ICON_MESH_PLANE = BND_ICONID(0,18), + BND_ICON_MESH_CUBE = BND_ICONID(1,18), + BND_ICON_MESH_CIRCLE = BND_ICONID(2,18), + BND_ICON_MESH_UVSPHERE = BND_ICONID(3,18), + BND_ICON_MESH_ICOSPHERE = BND_ICONID(4,18), + BND_ICON_MESH_GRID = BND_ICONID(5,18), + BND_ICON_MESH_MONKEY = BND_ICONID(6,18), + BND_ICON_MESH_CYLINDER = BND_ICONID(7,18), + BND_ICON_MESH_TORUS = BND_ICONID(8,18), + BND_ICON_MESH_CONE = BND_ICONID(9,18), + BND_ICON_LAMP_POINT = BND_ICONID(12,18), + BND_ICON_LAMP_SUN = BND_ICONID(13,18), + BND_ICON_LAMP_SPOT = BND_ICONID(14,18), + BND_ICON_LAMP_HEMI = BND_ICONID(15,18), + BND_ICON_LAMP_AREA = BND_ICONID(16,18), + BND_ICON_META_EMPTY = BND_ICONID(19,18), + BND_ICON_META_PLANE = BND_ICONID(20,18), + BND_ICON_META_CUBE = BND_ICONID(21,18), + BND_ICON_META_BALL = BND_ICONID(22,18), + BND_ICON_META_ELLIPSOID = BND_ICONID(23,18), + BND_ICON_META_CAPSULE = BND_ICONID(24,18), + + BND_ICON_SURFACE_NCURVE = BND_ICONID(0,17), + BND_ICON_SURFACE_NCIRCLE = BND_ICONID(1,17), + BND_ICON_SURFACE_NSURFACE = BND_ICONID(2,17), + BND_ICON_SURFACE_NCYLINDER = BND_ICONID(3,17), + BND_ICON_SURFACE_NSPHERE = BND_ICONID(4,17), + BND_ICON_SURFACE_NTORUS = BND_ICONID(5,17), + BND_ICON_CURVE_BEZCURVE = BND_ICONID(9,17), + BND_ICON_CURVE_BEZCIRCLE = BND_ICONID(10,17), + BND_ICON_CURVE_NCURVE = BND_ICONID(11,17), + BND_ICON_CURVE_NCIRCLE = BND_ICONID(12,17), + BND_ICON_CURVE_PATH = BND_ICONID(13,17), + BND_ICON_COLOR_RED = BND_ICONID(19,17), + BND_ICON_COLOR_GREEN = BND_ICONID(20,17), + BND_ICON_COLOR_BLUE = BND_ICONID(21,17), + + BND_ICON_FORCE_FORCE = BND_ICONID(0,16), + BND_ICON_FORCE_WIND = BND_ICONID(1,16), + BND_ICON_FORCE_VORTEX = BND_ICONID(2,16), + BND_ICON_FORCE_MAGNETIC = BND_ICONID(3,16), + BND_ICON_FORCE_HARMONIC = BND_ICONID(4,16), + BND_ICON_FORCE_CHARGE = BND_ICONID(5,16), + BND_ICON_FORCE_LENNARDJONES = BND_ICONID(6,16), + BND_ICON_FORCE_TEXTURE = BND_ICONID(7,16), + BND_ICON_FORCE_CURVE = BND_ICONID(8,16), + BND_ICON_FORCE_BOID = BND_ICONID(9,16), + BND_ICON_FORCE_TURBULENCE = BND_ICONID(10,16), + BND_ICON_FORCE_DRAG = BND_ICONID(11,16), + BND_ICON_FORCE_SMOKEFLOW = BND_ICONID(12,16), + + BND_ICON_MODIFIER = BND_ICONID(0,12), + BND_ICON_MOD_WAVE = BND_ICONID(1,12), + BND_ICON_MOD_BUILD = BND_ICONID(2,12), + BND_ICON_MOD_DECIM = BND_ICONID(3,12), + BND_ICON_MOD_MIRROR = BND_ICONID(4,12), + BND_ICON_MOD_SOFT = BND_ICONID(5,12), + BND_ICON_MOD_SUBSURF = BND_ICONID(6,12), + BND_ICON_HOOK = BND_ICONID(7,12), + BND_ICON_MOD_PHYSICS = BND_ICONID(8,12), + BND_ICON_MOD_PARTICLES = BND_ICONID(9,12), + BND_ICON_MOD_BOOLEAN = BND_ICONID(10,12), + BND_ICON_MOD_EDGESPLIT = BND_ICONID(11,12), + BND_ICON_MOD_ARRAY = BND_ICONID(12,12), + BND_ICON_MOD_UVPROJECT = BND_ICONID(13,12), + BND_ICON_MOD_DISPLACE = BND_ICONID(14,12), + BND_ICON_MOD_CURVE = BND_ICONID(15,12), + BND_ICON_MOD_LATTICE = BND_ICONID(16,12), + BND_ICON_CONSTRAINT_DATA = BND_ICONID(17,12), + BND_ICON_MOD_ARMATURE = BND_ICONID(18,12), + BND_ICON_MOD_SHRINKWRAP = BND_ICONID(19,12), + BND_ICON_MOD_CAST = BND_ICONID(20,12), + BND_ICON_MOD_MESHDEFORM = BND_ICONID(21,12), + BND_ICON_MOD_BEVEL = BND_ICONID(22,12), + BND_ICON_MOD_SMOOTH = BND_ICONID(23,12), + BND_ICON_MOD_SIMPLEDEFORM = BND_ICONID(24,12), + BND_ICON_MOD_MASK = BND_ICONID(25,12), + + BND_ICON_MOD_CLOTH = BND_ICONID(0,11), + BND_ICON_MOD_EXPLODE = BND_ICONID(1,11), + BND_ICON_MOD_FLUIDSIM = BND_ICONID(2,11), + BND_ICON_MOD_MULTIRES = BND_ICONID(3,11), + BND_ICON_MOD_SMOKE = BND_ICONID(4,11), + BND_ICON_MOD_SOLIDIFY = BND_ICONID(5,11), + BND_ICON_MOD_SCREW = BND_ICONID(6,11), + BND_ICON_MOD_VERTEX_WEIGHT = BND_ICONID(7,11), + BND_ICON_MOD_DYNAMICPAINT = BND_ICONID(8,11), + BND_ICON_MOD_REMESH = BND_ICONID(9,11), + BND_ICON_MOD_OCEAN = BND_ICONID(10,11), + BND_ICON_MOD_WARP = BND_ICONID(11,11), + BND_ICON_MOD_SKIN = BND_ICONID(12,11), + BND_ICON_MOD_TRIANGULATE = BND_ICONID(13,11), + BND_ICON_MOD_WIREFRAME = BND_ICONID(14,11), + + BND_ICON_REC = BND_ICONID(0,10), + BND_ICON_PLAY = BND_ICONID(1,10), + BND_ICON_FF = BND_ICONID(2,10), + BND_ICON_REW = BND_ICONID(3,10), + BND_ICON_PAUSE = BND_ICONID(4,10), + BND_ICON_PREV_KEYFRAME = BND_ICONID(5,10), + BND_ICON_NEXT_KEYFRAME = BND_ICONID(6,10), + BND_ICON_PLAY_AUDIO = BND_ICONID(7,10), + BND_ICON_PLAY_REVERSE = BND_ICONID(8,10), + BND_ICON_PREVIEW_RANGE = BND_ICONID(9,10), + BND_ICON_ACTION_TWEAK = BND_ICONID(10,10), + BND_ICON_PMARKER_ACT = BND_ICONID(11,10), + BND_ICON_PMARKER_SEL = BND_ICONID(12,10), + BND_ICON_PMARKER = BND_ICONID(13,10), + BND_ICON_MARKER_HLT = BND_ICONID(14,10), + BND_ICON_MARKER = BND_ICONID(15,10), + BND_ICON_SPACE2 = BND_ICONID(16,10), + BND_ICON_SPACE3 = BND_ICONID(17,10), + BND_ICON_KEYINGSET = BND_ICONID(18,10), + BND_ICON_KEY_DEHLT = BND_ICONID(19,10), + BND_ICON_KEY_HLT = BND_ICONID(20,10), + BND_ICON_MUTE_IPO_OFF = BND_ICONID(21,10), + BND_ICON_MUTE_IPO_ON = BND_ICONID(22,10), + BND_ICON_VISIBLE_IPO_OFF = BND_ICONID(23,10), + BND_ICON_VISIBLE_IPO_ON = BND_ICONID(24,10), + BND_ICON_DRIVER = BND_ICONID(25,10), + + BND_ICON_SOLO_OFF = BND_ICONID(0,9), + BND_ICON_SOLO_ON = BND_ICONID(1,9), + BND_ICON_FRAME_PREV = BND_ICONID(2,9), + BND_ICON_FRAME_NEXT = BND_ICONID(3,9), + BND_ICON_NLA_PUSHDOWN = BND_ICONID(4,9), + BND_ICON_IPO_CONSTANT = BND_ICONID(5,9), + BND_ICON_IPO_LINEAR = BND_ICONID(6,9), + BND_ICON_IPO_BEZIER = BND_ICONID(7,9), + BND_ICON_IPO_SINE = BND_ICONID(8,9), + BND_ICON_IPO_QUAD = BND_ICONID(9,9), + BND_ICON_IPO_CUBIC = BND_ICONID(10,9), + BND_ICON_IPO_QUART = BND_ICONID(11,9), + BND_ICON_IPO_QUINT = BND_ICONID(12,9), + BND_ICON_IPO_EXPO = BND_ICONID(13,9), + BND_ICON_IPO_CIRC = BND_ICONID(14,9), + BND_ICON_IPO_BOUNCE = BND_ICONID(15,9), + BND_ICON_IPO_ELASTIC = BND_ICONID(16,9), + BND_ICON_IPO_BACK = BND_ICONID(17,9), + BND_ICON_IPO_EASE_IN = BND_ICONID(18,9), + BND_ICON_IPO_EASE_OUT = BND_ICONID(19,9), + BND_ICON_IPO_EASE_IN_OUT = BND_ICONID(20,9), + + BND_ICON_VERTEXSEL = BND_ICONID(0,8), + BND_ICON_EDGESEL = BND_ICONID(1,8), + BND_ICON_FACESEL = BND_ICONID(2,8), + BND_ICON_LOOPSEL = BND_ICONID(3,8), + BND_ICON_ROTATE = BND_ICONID(5,8), + BND_ICON_CURSOR = BND_ICONID(6,8), + BND_ICON_ROTATECOLLECTION = BND_ICONID(7,8), + BND_ICON_ROTATECENTER = BND_ICONID(8,8), + BND_ICON_ROTACTIVE = BND_ICONID(9,8), + BND_ICON_ALIGN = BND_ICONID(10,8), + BND_ICON_SMOOTHCURVE = BND_ICONID(12,8), + BND_ICON_SPHERECURVE = BND_ICONID(13,8), + BND_ICON_ROOTCURVE = BND_ICONID(14,8), + BND_ICON_SHARPCURVE = BND_ICONID(15,8), + BND_ICON_LINCURVE = BND_ICONID(16,8), + BND_ICON_NOCURVE = BND_ICONID(17,8), + BND_ICON_RNDCURVE = BND_ICONID(18,8), + BND_ICON_PROP_OFF = BND_ICONID(19,8), + BND_ICON_PROP_ON = BND_ICONID(20,8), + BND_ICON_PROP_CON = BND_ICONID(21,8), + BND_ICON_SCULPT_DYNTOPO = BND_ICONID(22,8), + BND_ICON_PARTICLE_POINT = BND_ICONID(23,8), + BND_ICON_PARTICLE_TIP = BND_ICONID(24,8), + BND_ICON_PARTICLE_PATH = BND_ICONID(25,8), + + BND_ICON_MAN_TRANS = BND_ICONID(0,7), + BND_ICON_MAN_ROT = BND_ICONID(1,7), + BND_ICON_MAN_SCALE = BND_ICONID(2,7), + BND_ICON_MANIPUL = BND_ICONID(3,7), + BND_ICON_SNAP_OFF = BND_ICONID(4,7), + BND_ICON_SNAP_ON = BND_ICONID(5,7), + BND_ICON_SNAP_NORMAL = BND_ICONID(6,7), + BND_ICON_SNAP_INCREMENT = BND_ICONID(7,7), + BND_ICON_SNAP_VERTEX = BND_ICONID(8,7), + BND_ICON_SNAP_EDGE = BND_ICONID(9,7), + BND_ICON_SNAP_FACE = BND_ICONID(10,7), + BND_ICON_SNAP_VOLUME = BND_ICONID(11,7), + BND_ICON_STICKY_UVS_LOC = BND_ICONID(13,7), + BND_ICON_STICKY_UVS_DISABLE = BND_ICONID(14,7), + BND_ICON_STICKY_UVS_VERT = BND_ICONID(15,7), + BND_ICON_CLIPUV_DEHLT = BND_ICONID(16,7), + BND_ICON_CLIPUV_HLT = BND_ICONID(17,7), + BND_ICON_SNAP_PEEL_OBJECT = BND_ICONID(18,7), + BND_ICON_GRID = BND_ICONID(19,7), + + BND_ICON_PASTEDOWN = BND_ICONID(0,6), + BND_ICON_COPYDOWN = BND_ICONID(1,6), + BND_ICON_PASTEFLIPUP = BND_ICONID(2,6), + BND_ICON_PASTEFLIPDOWN = BND_ICONID(3,6), + BND_ICON_SNAP_SURFACE = BND_ICONID(8,6), + BND_ICON_AUTOMERGE_ON = BND_ICONID(9,6), + BND_ICON_AUTOMERGE_OFF = BND_ICONID(10,6), + BND_ICON_RETOPO = BND_ICONID(11,6), + BND_ICON_UV_VERTEXSEL = BND_ICONID(12,6), + BND_ICON_UV_EDGESEL = BND_ICONID(13,6), + BND_ICON_UV_FACESEL = BND_ICONID(14,6), + BND_ICON_UV_ISLANDSEL = BND_ICONID(15,6), + BND_ICON_UV_SYNC_SELECT = BND_ICONID(16,6), + + BND_ICON_BBOX = BND_ICONID(0,5), + BND_ICON_WIRE = BND_ICONID(1,5), + BND_ICON_SOLID = BND_ICONID(2,5), + BND_ICON_SMOOTH = BND_ICONID(3,5), + BND_ICON_POTATO = BND_ICONID(4,5), + BND_ICON_ORTHO = BND_ICONID(6,5), + BND_ICON_LOCKVIEW_OFF = BND_ICONID(9,5), + BND_ICON_LOCKVIEW_ON = BND_ICONID(10,5), + BND_ICON_AXIS_SIDE = BND_ICONID(12,5), + BND_ICON_AXIS_FRONT = BND_ICONID(13,5), + BND_ICON_AXIS_TOP = BND_ICONID(14,5), + BND_ICON_NDOF_DOM = BND_ICONID(15,5), + BND_ICON_NDOF_TURN = BND_ICONID(16,5), + BND_ICON_NDOF_FLY = BND_ICONID(17,5), + BND_ICON_NDOF_TRANS = BND_ICONID(18,5), + BND_ICON_LAYER_USED = BND_ICONID(19,5), + BND_ICON_LAYER_ACTIVE = BND_ICONID(20,5), + + BND_ICON_SORTALPHA = BND_ICONID(0,3), + BND_ICON_SORTBYEXT = BND_ICONID(1,3), + BND_ICON_SORTTIME = BND_ICONID(2,3), + BND_ICON_SORTSIZE = BND_ICONID(3,3), + BND_ICON_LONGDISPLAY = BND_ICONID(4,3), + BND_ICON_SHORTDISPLAY = BND_ICONID(5,3), + BND_ICON_GHOST = BND_ICONID(6,3), + BND_ICON_IMGDISPLAY = BND_ICONID(7,3), + BND_ICON_SAVE_AS = BND_ICONID(8,3), + BND_ICON_SAVE_COPY = BND_ICONID(9,3), + BND_ICON_BOOKMARKS = BND_ICONID(10,3), + BND_ICON_FONTPREVIEW = BND_ICONID(11,3), + BND_ICON_FILTER = BND_ICONID(12,3), + BND_ICON_NEWFOLDER = BND_ICONID(13,3), + BND_ICON_OPEN_RECENT = BND_ICONID(14,3), + BND_ICON_FILE_PARENT = BND_ICONID(15,3), + BND_ICON_FILE_REFRESH = BND_ICONID(16,3), + BND_ICON_FILE_FOLDER = BND_ICONID(17,3), + BND_ICON_FILE_BLANK = BND_ICONID(18,3), + BND_ICON_FILE_BLEND = BND_ICONID(19,3), + BND_ICON_FILE_IMAGE = BND_ICONID(20,3), + BND_ICON_FILE_MOVIE = BND_ICONID(21,3), + BND_ICON_FILE_SCRIPT = BND_ICONID(22,3), + BND_ICON_FILE_SOUND = BND_ICONID(23,3), + BND_ICON_FILE_FONT = BND_ICONID(24,3), + BND_ICON_FILE_TEXT = BND_ICONID(25,3), + + BND_ICON_RECOVER_AUTO = BND_ICONID(0,2), + BND_ICON_SAVE_PREFS = BND_ICONID(1,2), + BND_ICON_LINK_BLEND = BND_ICONID(2,2), + BND_ICON_APPEND_BLEND = BND_ICONID(3,2), + BND_ICON_IMPORT = BND_ICONID(4,2), + BND_ICON_EXPORT = BND_ICONID(5,2), + BND_ICON_EXTERNAL_DATA = BND_ICONID(6,2), + BND_ICON_LOAD_FACTORY = BND_ICONID(7,2), + BND_ICON_LOOP_BACK = BND_ICONID(13,2), + BND_ICON_LOOP_FORWARDS = BND_ICONID(14,2), + BND_ICON_BACK = BND_ICONID(15,2), + BND_ICON_FORWARD = BND_ICONID(16,2), + BND_ICON_FILE_BACKUP = BND_ICONID(24,2), + BND_ICON_DISK_DRIVE = BND_ICONID(25,2), + + BND_ICON_MATPLANE = BND_ICONID(0,1), + BND_ICON_MATSPHERE = BND_ICONID(1,1), + BND_ICON_MATCUBE = BND_ICONID(2,1), + BND_ICON_MONKEY = BND_ICONID(3,1), + BND_ICON_HAIR = BND_ICONID(4,1), + BND_ICON_ALIASED = BND_ICONID(5,1), + BND_ICON_ANTIALIASED = BND_ICONID(6,1), + BND_ICON_MAT_SPHERE_SKY = BND_ICONID(7,1), + BND_ICON_WORDWRAP_OFF = BND_ICONID(12,1), + BND_ICON_WORDWRAP_ON = BND_ICONID(13,1), + BND_ICON_SYNTAX_OFF = BND_ICONID(14,1), + BND_ICON_SYNTAX_ON = BND_ICONID(15,1), + BND_ICON_LINENUMBERS_OFF = BND_ICONID(16,1), + BND_ICON_LINENUMBERS_ON = BND_ICONID(17,1), + BND_ICON_SCRIPTPLUGINS = BND_ICONID(18,1), + + BND_ICON_SEQ_SEQUENCER = BND_ICONID(0,0), + BND_ICON_SEQ_PREVIEW = BND_ICONID(1,0), + BND_ICON_SEQ_LUMA_WAVEFORM = BND_ICONID(2,0), + BND_ICON_SEQ_CHROMA_SCOPE = BND_ICONID(3,0), + BND_ICON_SEQ_HISTOGRAM = BND_ICONID(4,0), + BND_ICON_SEQ_SPLITVIEW = BND_ICONID(5,0), + BND_ICON_IMAGE_RGB = BND_ICONID(9,0), + BND_ICON_IMAGE_RGB_ALPHA = BND_ICONID(10,0), + BND_ICON_IMAGE_ALPHA = BND_ICONID(11,0), + BND_ICON_IMAGE_ZDEPTH = BND_ICONID(12,0), + BND_ICON_IMAGEFILE = BND_ICONID(13,0), +} BNDicon; + +//////////////////////////////////////////////////////////////////////////////// + +// set the current theme all widgets will be drawn with. +// the default Blender 2.6 theme is set by default. +BND_EXPORT void bndSetTheme(BNDtheme theme); + +// Returns the currently set theme +BND_EXPORT const BNDtheme *bndGetTheme(); + +// designates an image handle as returned by nvgCreateImage*() as the themes' +// icon sheet. The icon sheet format must be compatible to Blender 2.6's icon +// sheet; the order of icons does not matter. +// A valid icon sheet is e.g. shown at +// http://wiki.blender.org/index.php/Dev:2.5/Doc/How_to/Add_an_icon +BND_EXPORT void bndSetIconImage(int image); + +// designates an image handle as returned by nvgCreateFont*() as the themes' +// UI font. Blender's original UI font Droid Sans is perfectly suited and +// available here: +// https://svn.blender.org/svnroot/bf-blender/trunk/blender/release/datafiles/fonts/ +BND_EXPORT void bndSetFont(int font); + +//////////////////////////////////////////////////////////////////////////////// + +// High Level Functions +// -------------------- +// Use these functions to draw themed widgets with your NVGcontext. + +// Draw a label with its lower left origin at (x,y) and size of (w,h). +// if iconid >= 0, an icon will be added to the widget +// if label is not NULL, a label will be added to the widget +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndLabel(NVGcontext *ctx, + float x, float y, float w, float h, int iconid, const char *label); + +// Draw a tool button with its lower left origin at (x,y) and size of (w,h), +// where flags is one or multiple flags from BNDcornerFlags and state denotes +// the widgets current UI state. +// if iconid >= 0, an icon will be added to the widget +// if label is not NULL, a label will be added to the widget +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndToolButton(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + int iconid, const char *label); + +// Draw a radio button with its lower left origin at (x,y) and size of (w,h), +// where flags is one or multiple flags from BNDcornerFlags and state denotes +// the widgets current UI state. +// if iconid >= 0, an icon will be added to the widget +// if label is not NULL, a label will be added to the widget +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndRadioButton(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + int iconid, const char *label); + + +// Calculate the corresponding text position for given coordinates px/py +// in a text field. +// See bndTextField for more info. +BND_EXPORT int bndTextFieldTextPosition(NVGcontext *ctx, float x, float y, float w, float h, + int iconid, const char *text, int px, int py); + +// Draw a text field with its lower left origin at (x,y) and size of (w,h), +// where flags is one or multiple flags from BNDcornerFlags and state denotes +// the widgets current UI state. +// if iconid >= 0, an icon will be added to the widget +// if text is not NULL, text will be printed to the widget +// cbegin must be >= 0 and <= strlen(text) and denotes the beginning of the caret +// cend must be >= cbegin and <= strlen(text) and denotes the end of the caret +// if cend < cbegin, then no caret will be drawn +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndTextField(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + int iconid, const char *text, int cbegin, int cend); + +// Draw an option button with its lower left origin at (x,y) and size of (w,h), +// where flags is one or multiple flags from BNDcornerFlags and state denotes +// the widgets current UI state. +// if label is not NULL, a label will be added to the widget +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndOptionButton(NVGcontext *ctx, + float x, float y, float w, float h, BNDwidgetState state, + const char *label); + +// Draw a choice button with its lower left origin at (x,y) and size of (w,h), +// where flags is one or multiple flags from BNDcornerFlags and state denotes +// the widgets current UI state. +// if iconid >= 0, an icon will be added to the widget +// if label is not NULL, a label will be added to the widget +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndChoiceButton(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + int iconid, const char *label); + +// Draw a color button with its lower left origin at (x,y) and size of (w,h), +// where flags is one or multiple flags from BNDcornerFlags and state denotes +// the widgets current UI state. +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndColorButton(NVGcontext *ctx, + float x, float y, float w, float h, int flags, NVGcolor color); + +// Draw a number field with its lower left origin at (x,y) and size of (w,h), +// where flags is one or multiple flags from BNDcornerFlags and state denotes +// the widgets current UI state. +// if label is not NULL, a label will be added to the widget +// if value is not NULL, a value will be added to the widget, along with +// a ":" separator +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndNumberField(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + const char *label, const char *value); + +// Draw slider control with its lower left origin at (x,y) and size of (w,h), +// where flags is one or multiple flags from BNDcornerFlags and state denotes +// the widgets current UI state. +// progress must be in the range 0..1 and controls the size of the slider bar +// if label is not NULL, a label will be added to the widget +// if value is not NULL, a value will be added to the widget, along with +// a ":" separator +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndSlider(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + float progress, const char *label, const char *value); + +// Draw scrollbar with its lower left origin at (x,y) and size of (w,h), +// where state denotes the widgets current UI state. +// offset is in the range 0..1 and controls the position of the scroll handle +// size is in the range 0..1 and controls the size of the scroll handle +// horizontal widget looks best when height is BND_SCROLLBAR_HEIGHT, +// vertical looks best when width is BND_SCROLLBAR_WIDTH +BND_EXPORT void bndScrollBar(NVGcontext *ctx, + float x, float y, float w, float h, BNDwidgetState state, + float offset, float size); + +// Draw a menu background with its lower left origin at (x,y) and size of (w,h), +// where flags is one or multiple flags from BNDcornerFlags. +BND_EXPORT void bndMenuBackground(NVGcontext *ctx, + float x, float y, float w, float h, int flags); + +// Draw a menu label with its lower left origin at (x,y) and size of (w,h). +// if iconid >= 0, an icon will be added to the widget +// if label is not NULL, a label will be added to the widget +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndMenuLabel(NVGcontext *ctx, + float x, float y, float w, float h, int iconid, const char *label); + +// Draw a menu item with its lower left origin at (x,y) and size of (w,h), +// where state denotes the widgets current UI state. +// if iconid >= 0, an icon will be added to the widget +// if label is not NULL, a label will be added to the widget +// widget looks best when height is BND_WIDGET_HEIGHT +BND_EXPORT void bndMenuItem(NVGcontext *ctx, + float x, float y, float w, float h, BNDwidgetState state, + int iconid, const char *label); + +// Draw a tooltip background with its lower left origin at (x,y) and size of (w,h) +BND_EXPORT void bndTooltipBackground(NVGcontext *ctx, float x, float y, float w, float h); + +// Draw a node port at the given position filled with the given color +BND_EXPORT void bndNodePort(NVGcontext *ctx, float x, float y, BNDwidgetState state, + NVGcolor color); + +// Draw a node wire originating at (x0,y0) and floating to (x1,y1), with +// a colored gradient based on the states state0 and state1: +// BND_DEFAULT: default wire color +// BND_HOVER: selected wire color +// BND_ACTIVE: dragged wire color +BND_EXPORT void bndNodeWire(NVGcontext *ctx, float x0, float y0, float x1, float y1, + BNDwidgetState state0, BNDwidgetState state1); + +// Draw a node wire originating at (x0,y0) and floating to (x1,y1), with +// a colored gradient based on the two colors color0 and color1 +BND_EXPORT void bndColoredNodeWire(NVGcontext *ctx, float x0, float y0, float x1, float y1, + NVGcolor color0, NVGcolor color1); + +// Draw a node background with its upper left origin at (x,y) and size of (w,h) +// where titleColor provides the base color for the title bar +BND_EXPORT void bndNodeBackground(NVGcontext *ctx, float x, float y, float w, float h, + BNDwidgetState state, int iconid, const char *label, NVGcolor titleColor); + +// Draw a window with the upper right and lower left splitter widgets into +// the rectangle at origin (x,y) and size (w, h) +BND_EXPORT void bndSplitterWidgets(NVGcontext *ctx, float x, float y, float w, float h); + +// Draw the join area overlay stencil into the rectangle +// at origin (x,y) and size (w,h) +// vertical is 0 or 1 and designates the arrow orientation, +// mirror is 0 or 1 and flips the arrow side +BND_EXPORT void bndJoinAreaOverlay(NVGcontext *ctx, float x, float y, float w, float h, + int vertical, int mirror); + +//////////////////////////////////////////////////////////////////////////////// + +// Estimator Functions +// ------------------- +// Use these functions to estimate sizes for widgets with your NVGcontext. + +// returns the ideal width for a label with given icon and text +BND_EXPORT float bndLabelWidth(NVGcontext *ctx, int iconid, const char *label); + +// returns the height for a label with given icon, text and width; this +// function is primarily useful in conjunction with multiline labels and textboxes +BND_EXPORT float bndLabelHeight(NVGcontext *ctx, int iconid, const char *label, + float width); + +//////////////////////////////////////////////////////////////////////////////// + +// Low Level Functions +// ------------------- +// these are part of the implementation detail and can be used to theme +// new kinds of controls in a similar fashion. + +// make color transparent using the default alpha value +BND_EXPORT NVGcolor bndTransparent(NVGcolor color); + +// offset a color by a given integer delta in the range -100 to 100 +BND_EXPORT NVGcolor bndOffsetColor(NVGcolor color, int delta); + +// assigns radius r to the four entries of array radiuses depending on whether +// the corner is marked as sharp or not; see BNDcornerFlags for possible +// flag values. +BND_EXPORT void bndSelectCorners(float *radiuses, float r, int flags); + +// computes the upper and lower gradient colors for the inner box from a widget +// theme and the widgets state. If flipActive is set and the state is +// BND_ACTIVE, the upper and lower colors will be swapped. +BND_EXPORT void bndInnerColors(NVGcolor *shade_top, NVGcolor *shade_down, + const BNDwidgetTheme *theme, BNDwidgetState state, int flipActive); + +// computes the text color for a widget label from a widget theme and the +// widgets state. +BND_EXPORT NVGcolor bndTextColor(const BNDwidgetTheme *theme, BNDwidgetState state); + +// computes the bounds of the scrollbar handle from the scrollbar size +// and the handles offset and size. +// offset is in the range 0..1 and defines the position of the scroll handle +// size is in the range 0..1 and defines the size of the scroll handle +BND_EXPORT void bndScrollHandleRect(float *x, float *y, float *w, float *h, + float offset, float size); + +// Add a rounded box path at position (x,y) with size (w,h) and a separate +// radius for each corner listed in clockwise order, so that cr0 = top left, +// cr1 = top right, cr2 = bottom right, cr3 = bottom left; +// this is a low level drawing function: the path must be stroked or filled +// to become visible. +BND_EXPORT void bndRoundedBox(NVGcontext *ctx, float x, float y, float w, float h, + float cr0, float cr1, float cr2, float cr3); + +// Draw a flat panel without any decorations at position (x,y) with size (w,h) +// and fills it with backgroundColor +BND_EXPORT void bndBackground(NVGcontext *ctx, float x, float y, float w, float h); + +// Draw a beveled border at position (x,y) with size (w,h) shaded with +// lighter and darker versions of backgroundColor +BND_EXPORT void bndBevel(NVGcontext *ctx, float x, float y, float w, float h); + +// Draw a lower inset for a rounded box at position (x,y) with size (w,h) +// that gives the impression the surface has been pushed in. +// cr2 and cr3 contain the radiuses of the bottom right and bottom left +// corners of the rounded box. +BND_EXPORT void bndBevelInset(NVGcontext *ctx, float x, float y, float w, float h, + float cr2, float cr3); + +// Draw an icon with (x,y) as its upper left coordinate; the iconid selects +// the icon from the sheet; use the BND_ICONID macro to build icon IDs. +BND_EXPORT void bndIcon(NVGcontext *ctx, float x, float y, int iconid); + +// Draw a drop shadow around the rounded box at (x,y) with size (w,h) and +// radius r, with feather as its maximum range in pixels. +// No shadow will be painted inside the rounded box. +BND_EXPORT void bndDropShadow(NVGcontext *ctx, float x, float y, float w, float h, + float r, float feather, float alpha); + +// Draw the inner part of a widget box, with a gradient from shade_top to +// shade_down. If h>w, the gradient will be horizontal instead of +// vertical. +BND_EXPORT void bndInnerBox(NVGcontext *ctx, float x, float y, float w, float h, + float cr0, float cr1, float cr2, float cr3, + NVGcolor shade_top, NVGcolor shade_down); + +// Draw the outline part of a widget box with the given color +BND_EXPORT void bndOutlineBox(NVGcontext *ctx, float x, float y, float w, float h, + float cr0, float cr1, float cr2, float cr3, NVGcolor color); + +// Draw an optional icon specified by and an optional label with +// given alignment (BNDtextAlignment), fontsize and color within a widget box. +// if iconid is >= 0, an icon will be drawn and the labels remaining space +// will be adjusted. +// if label is not NULL, it will be drawn with the specified alignment, fontsize +// and color. +// if value is not NULL, label and value will be drawn with a ":" separator +// inbetween. +BND_EXPORT void bndIconLabelValue(NVGcontext *ctx, float x, float y, float w, float h, + int iconid, NVGcolor color, int align, float fontsize, const char *label, + const char *value); + +// Draw an optional icon specified by and an optional label with +// given alignment (BNDtextAlignment), fontsize and color within a node title bar +// if iconid is >= 0, an icon will be drawn +// if label is not NULL, it will be drawn with the specified alignment, fontsize +// and color. +BND_EXPORT void bndNodeIconLabel(NVGcontext *ctx, float x, float y, float w, float h, + int iconid, NVGcolor color, NVGcolor shadowColor, int align, + float fontsize, const char *label); + +// Calculate the corresponding text position for given coordinates px/py +// in an iconLabel. +// See bndIconLabelCaret for more info. +BND_EXPORT int bndIconLabelTextPosition(NVGcontext *ctx, float x, float y, float w, float h, + int iconid, float fontsize, const char *label, int px, int py); + +// Draw an optional icon specified by , an optional label and +// a caret with given fontsize and color within a widget box. +// if iconid is >= 0, an icon will be drawn and the labels remaining space +// will be adjusted. +// if label is not NULL, it will be drawn with the specified alignment, fontsize +// and color. +// cbegin must be >= 0 and <= strlen(text) and denotes the beginning of the caret +// cend must be >= cbegin and <= strlen(text) and denotes the end of the caret +// if cend < cbegin, then no caret will be drawn +BND_EXPORT void bndIconLabelCaret(NVGcontext *ctx, float x, float y, float w, float h, + int iconid, NVGcolor color, float fontsize, const char *label, + NVGcolor caretcolor, int cbegin, int cend); + +// Draw a checkmark for an option box with the given upper left coordinates +// (ox,oy) with the specified color. +BND_EXPORT void bndCheck(NVGcontext *ctx, float ox, float oy, NVGcolor color); + +// Draw a horizontal arrow for a number field with its center at (x,y) and +// size s; if s is negative, the arrow points to the left. +BND_EXPORT void bndArrow(NVGcontext *ctx, float x, float y, float s, NVGcolor color); + +// Draw an up/down arrow for a choice box with its center at (x,y) and size s +BND_EXPORT void bndUpDownArrow(NVGcontext *ctx, float x, float y, float s, NVGcolor color); + +// Draw a node down-arrow with its tip at (x,y) and size s +BND_EXPORT void bndNodeArrowDown(NVGcontext *ctx, float x, float y, float s, NVGcolor color); + +// return the color of a node wire based on state +// BND_HOVER indicates selected state, +// BND_ACTIVE indicates dragged state +BND_EXPORT NVGcolor bndNodeWireColor(const BNDnodeTheme *theme, BNDwidgetState state); + +#ifdef __cplusplus +}; +#endif + +#endif // BLENDISH_H + +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +#ifdef BLENDISH_IMPLEMENTATION + +#include +#include + +#ifdef _MSC_VER + #pragma warning (disable: 4996) // Switch off security warnings + #pragma warning (disable: 4100) // Switch off unreferenced formal parameter warnings + #pragma warning (disable: 4244) + #pragma warning (disable: 4305) + #ifdef __cplusplus + #define BND_INLINE inline + #else + #define BND_INLINE + #endif + +#include + +static float bnd_fminf ( float a, float b ) +{ + return _isnan(a) ? b : ( _isnan(b) ? a : ((a < b) ? a : b)); +} + +static float bnd_fmaxf ( float a, float b ) +{ + return _isnan(a) ? b : ( _isnan(b) ? a : ((a > b) ? a : b)); +} + +static double bnd_fmin ( double a, double b ) +{ + return _isnan(a) ? b : ( _isnan(b) ? a : ((a < b) ? a : b)); +} + +static double bnd_fmax ( double a, double b ) +{ + return _isnan(a) ? b : ( _isnan(b) ? a : ((a > b) ? a : b)); +} + +#else + #define BND_INLINE inline + #define bnd_fminf(a, b) fminf(a, b) + #define bnd_fmaxf(a, b) fmaxf(a, b) + #define bnd_fmin(a, b) fmin(a, b) + #define bnd_fmax(a, b) fmax(a, b) +#endif + +//////////////////////////////////////////////////////////////////////////////// + +// default text size +#define BND_LABEL_FONT_SIZE 13 + +// default text padding in inner box +#define BND_PAD_LEFT 8 +#define BND_PAD_RIGHT 8 + +// label: value separator string +#define BND_LABEL_SEPARATOR ": " + +// alpha intensity of transparent items (0xa4) +#define BND_TRANSPARENT_ALPHA 0.643 + +// shade intensity of beveled panels +#define BND_BEVEL_SHADE 30 +// shade intensity of beveled insets +#define BND_INSET_BEVEL_SHADE 30 +// shade intensity of hovered inner boxes +#define BND_HOVER_SHADE 15 +// shade intensity of splitter bevels +#define BND_SPLITTER_SHADE 100 + +// width of icon sheet +#define BND_ICON_SHEET_WIDTH 602 +// height of icon sheet +#define BND_ICON_SHEET_HEIGHT 640 +// gridsize of icon sheet in both dimensions +#define BND_ICON_SHEET_GRID 21 +// offset of first icon tile relative to left border +#define BND_ICON_SHEET_OFFSET_X 5 +// offset of first icon tile relative to top border +#define BND_ICON_SHEET_OFFSET_Y 10 +// resolution of single icon +#define BND_ICON_SHEET_RES 16 + +// size of number field arrow +#define BND_NUMBER_ARROW_SIZE 4 + +// default text color +#define BND_COLOR_TEXT {{{ 0,0,0,1 }}} +// default highlighted text color +#define BND_COLOR_TEXT_SELECTED {{{ 1,1,1,1 }}} + +// radius of tool button +#define BND_TOOL_RADIUS 4 + +// radius of option button +#define BND_OPTION_RADIUS 4 +// width of option button checkbox +#define BND_OPTION_WIDTH 14 +// height of option button checkbox +#define BND_OPTION_HEIGHT 15 + +// radius of text field +#define BND_TEXT_RADIUS 4 + +// radius of number button +#define BND_NUMBER_RADIUS 10 + +// radius of menu popup +#define BND_MENU_RADIUS 3 +// feather of menu popup shadow +#define BND_SHADOW_FEATHER 12 +// alpha of menu popup shadow +#define BND_SHADOW_ALPHA 0.5 + +// radius of scrollbar +#define BND_SCROLLBAR_RADIUS 7 +// shade intensity of active scrollbar +#define BND_SCROLLBAR_ACTIVE_SHADE 15 + +// max glyphs for position testing +#define BND_MAX_GLYPHS 1024 + +// max rows for position testing +#define BND_MAX_ROWS 32 + +// text distance from bottom +#define BND_TEXT_PAD_DOWN 7 + +// stroke width of wire outline +#define BND_NODE_WIRE_OUTLINE_WIDTH 4 +// stroke width of wire +#define BND_NODE_WIRE_WIDTH 2 +// radius of node box +#define BND_NODE_RADIUS 8 +// feather of node title text +#define BND_NODE_TITLE_FEATHER 1 +// size of node title arrow +#define BND_NODE_ARROW_SIZE 9 + +//////////////////////////////////////////////////////////////////////////////// + +BND_INLINE float bnd_clamp(float v, float mn, float mx) { + return (v > mx)?mx:(v < mn)?mn:v; +} + +//////////////////////////////////////////////////////////////////////////////// + +// the initial theme +static BNDtheme bnd_theme = { + // backgroundColor + {{{ 0.447, 0.447, 0.447, 1.0 }}}, + // regularTheme + { + {{{ 0.098,0.098,0.098,1 }}}, // color_outline + {{{ 0.098,0.098,0.098,1 }}}, // color_item + {{{ 0.6,0.6,0.6,1 }}}, // color_inner + {{{ 0.392,0.392,0.392,1 }}}, // color_inner_selected + BND_COLOR_TEXT, // color_text + BND_COLOR_TEXT_SELECTED, // color_text_selected + 0, // shade_top + 0, // shade_down + }, + // toolTheme + { + {{{ 0.098,0.098,0.098,1 }}}, // color_outline + {{{ 0.098,0.098,0.098,1 }}}, // color_item + {{{ 0.6,0.6,0.6,1 }}}, // color_inner + {{{ 0.392,0.392,0.392,1 }}}, // color_inner_selected + BND_COLOR_TEXT, // color_text + BND_COLOR_TEXT_SELECTED, // color_text_selected + 15, // shade_top + -15, // shade_down + }, + // radioTheme + { + {{{ 0,0,0,1 }}}, // color_outline + {{{ 1,1,1,1 }}}, // color_item + {{{ 0.275,0.275,0.275,1 }}}, // color_inner + {{{ 0.337,0.502,0.761,1 }}}, // color_inner_selected + BND_COLOR_TEXT_SELECTED, // color_text + BND_COLOR_TEXT, // color_text_selected + 15, // shade_top + -15, // shade_down + }, + // textFieldTheme + { + {{{ 0.098,0.098,0.098,1 }}}, // color_outline + {{{ 0.353, 0.353, 0.353,1 }}}, // color_item + {{{ 0.6, 0.6, 0.6,1 }}}, // color_inner + {{{ 0.6, 0.6, 0.6,1 }}}, // color_inner_selected + BND_COLOR_TEXT, // color_text + BND_COLOR_TEXT_SELECTED, // color_text_selected + 0, // shade_top + 25, // shade_down + }, + // optionTheme + { + {{{ 0,0,0,1 }}}, // color_outline + {{{ 1,1,1,1 }}}, // color_item + {{{ 0.275,0.275,0.275,1 }}}, // color_inner + {{{ 0.275,0.275,0.275,1 }}}, // color_inner_selected + BND_COLOR_TEXT, // color_text + BND_COLOR_TEXT_SELECTED, // color_text_selected + 15, // shade_top + -15, // shade_down + }, + // choiceTheme + { + {{{ 0,0,0,1 }}}, // color_outline + {{{ 1,1,1,1 }}}, // color_item + {{{ 0.275,0.275,0.275,1 }}}, // color_inner + {{{ 0.275,0.275,0.275,1 }}}, // color_inner_selected + BND_COLOR_TEXT_SELECTED, // color_text + {{{ 0.8,0.8,0.8,1 }}}, // color_text_selected + 15, // shade_top + -15, // shade_down + }, + // numberFieldTheme + { + {{{ 0.098,0.098,0.098,1 }}}, // color_outline + {{{ 0.353, 0.353, 0.353,1 }}}, // color_item + {{{ 0.706, 0.706, 0.706,1 }}}, // color_inner + {{{ 0.6, 0.6, 0.6,1 }}}, // color_inner_selected + BND_COLOR_TEXT, // color_text + BND_COLOR_TEXT_SELECTED, // color_text_selected + -20, // shade_top + 0, // shade_down + }, + // sliderTheme + { + {{{ 0.098,0.098,0.098,1 }}}, // color_outline + {{{ 0.502,0.502,0.502,1 }}}, // color_item + {{{ 0.706, 0.706, 0.706,1 }}}, // color_inner + {{{ 0.6, 0.6, 0.6,1 }}}, // color_inner_selected + BND_COLOR_TEXT, // color_text + BND_COLOR_TEXT_SELECTED, // color_text_selected + -20, // shade_top + 0, // shade_down + }, + // scrollBarTheme + { + {{{ 0.196,0.196,0.196,1 }}}, // color_outline + {{{ 0.502,0.502,0.502,1 }}}, // color_item + {{{ 0.314, 0.314, 0.314,0.706 }}}, // color_inner + {{{ 0.392, 0.392, 0.392,0.706 }}}, // color_inner_selected + BND_COLOR_TEXT, // color_text + BND_COLOR_TEXT_SELECTED, // color_text_selected + 5, // shade_top + -5, // shade_down + }, + // tooltipTheme + { + {{{ 0,0,0,1 }}}, // color_outline + {{{ 0.392,0.392,0.392,1 }}}, // color_item + {{{ 0.098, 0.098, 0.098, 0.902 }}}, // color_inner + {{{ 0.176, 0.176, 0.176, 0.902 }}}, // color_inner_selected + {{{ 0.627, 0.627, 0.627, 1 }}}, // color_text + BND_COLOR_TEXT_SELECTED, // color_text_selected + 0, // shade_top + 0, // shade_down + }, + // menuTheme + { + {{{ 0,0,0,1 }}}, // color_outline + {{{ 0.392,0.392,0.392,1 }}}, // color_item + {{{ 0.098, 0.098, 0.098, 0.902 }}}, // color_inner + {{{ 0.176, 0.176, 0.176, 0.902 }}}, // color_inner_selected + {{{ 0.627, 0.627, 0.627, 1 }}}, // color_text + BND_COLOR_TEXT_SELECTED, // color_text_selected + 0, // shade_top + 0, // shade_down + }, + // menuItemTheme + { + {{{ 0,0,0,1 }}}, // color_outline + {{{ 0.675,0.675,0.675,0.502 }}}, // color_item + {{{ 0,0,0,0 }}}, // color_inner + {{{ 0.337,0.502,0.761,1 }}}, // color_inner_selected + BND_COLOR_TEXT_SELECTED, // color_text + BND_COLOR_TEXT, // color_text_selected + 38, // shade_top + 0, // shade_down + }, + // nodeTheme + { + {{{ 0.945,0.345,0,1 }}}, // nodeSelectedColor + {{{ 0,0,0,1 }}}, // wiresColor + {{{ 0.498,0.439,0.439,1 }}}, // textSelectedColor + {{{ 1,0.667,0.251,1 }}}, // activeNodeColor + {{{ 1,1,1,1 }}}, // wireSelectColor + {{{ 0.608,0.608,0.608,0.627 }}}, // nodeBackdropColor + 5, // noodleCurving + }, +}; + +//////////////////////////////////////////////////////////////////////////////// + +void bndSetTheme(BNDtheme theme) { + bnd_theme = theme; +} + +const BNDtheme *bndGetTheme() { + return &bnd_theme; +} + +// the handle to the image containing the icon sheet +static int bnd_icon_image = -1; + +void bndSetIconImage(int image) { + bnd_icon_image = image; +} + +// the handle to the UI font +static int bnd_font = -1; + +void bndSetFont(int font) { + bnd_font = font; +} + +//////////////////////////////////////////////////////////////////////////////// + +void bndLabel(NVGcontext *ctx, + float x, float y, float w, float h, int iconid, const char *label) { + bndIconLabelValue(ctx,x,y,w,h,iconid, + bnd_theme.regularTheme.textColor, BND_LEFT, + BND_LABEL_FONT_SIZE, label, NULL); +} + +void bndToolButton(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + int iconid, const char *label) { + float cr[4]; + NVGcolor shade_top, shade_down; + + bndSelectCorners(cr, BND_TOOL_RADIUS, flags); + bndBevelInset(ctx,x,y,w,h,cr[2],cr[3]); + bndInnerColors(&shade_top, &shade_down, &bnd_theme.toolTheme, state, 1); + bndInnerBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], shade_top, shade_down); + bndOutlineBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], + bndTransparent(bnd_theme.toolTheme.outlineColor)); + bndIconLabelValue(ctx,x,y,w,h,iconid, + bndTextColor(&bnd_theme.toolTheme, state), BND_CENTER, + BND_LABEL_FONT_SIZE, label, NULL); +} + +void bndRadioButton(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + int iconid, const char *label) { + float cr[4]; + NVGcolor shade_top, shade_down; + + bndSelectCorners(cr, BND_OPTION_RADIUS, flags); + bndBevelInset(ctx,x,y,w,h,cr[2],cr[3]); + bndInnerColors(&shade_top, &shade_down, &bnd_theme.radioTheme, state, 1); + bndInnerBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], shade_top, shade_down); + bndOutlineBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], + bndTransparent(bnd_theme.radioTheme.outlineColor)); + bndIconLabelValue(ctx,x,y,w,h,iconid, + bndTextColor(&bnd_theme.radioTheme, state), BND_CENTER, + BND_LABEL_FONT_SIZE, label, NULL); +} + +int bndTextFieldTextPosition(NVGcontext *ctx, float x, float y, float w, float h, + int iconid, const char *text, int px, int py) { + return bndIconLabelTextPosition(ctx, x, y, w, h, + iconid, BND_LABEL_FONT_SIZE, text, px, py); +} + +void bndTextField(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + int iconid, const char *text, int cbegin, int cend) { + float cr[4]; + NVGcolor shade_top, shade_down; + + bndSelectCorners(cr, BND_TEXT_RADIUS, flags); + bndBevelInset(ctx,x,y,w,h,cr[2],cr[3]); + bndInnerColors(&shade_top, &shade_down, &bnd_theme.textFieldTheme, state, 0); + bndInnerBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], shade_top, shade_down); + bndOutlineBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], + bndTransparent(bnd_theme.textFieldTheme.outlineColor)); + if (state != BND_ACTIVE) { + cend = -1; + } + bndIconLabelCaret(ctx,x,y,w,h,iconid, + bndTextColor(&bnd_theme.textFieldTheme, state), BND_LABEL_FONT_SIZE, + text, bnd_theme.textFieldTheme.itemColor, cbegin, cend); +} + +void bndOptionButton(NVGcontext *ctx, + float x, float y, float w, float h, BNDwidgetState state, + const char *label) { + float ox, oy; + NVGcolor shade_top, shade_down; + + ox = x; + oy = y+h-BND_OPTION_HEIGHT-3; + + bndBevelInset(ctx,ox,oy, + BND_OPTION_WIDTH,BND_OPTION_HEIGHT, + BND_OPTION_RADIUS,BND_OPTION_RADIUS); + bndInnerColors(&shade_top, &shade_down, &bnd_theme.optionTheme, state, 1); + bndInnerBox(ctx,ox,oy, + BND_OPTION_WIDTH,BND_OPTION_HEIGHT, + BND_OPTION_RADIUS,BND_OPTION_RADIUS,BND_OPTION_RADIUS,BND_OPTION_RADIUS, + shade_top, shade_down); + bndOutlineBox(ctx,ox,oy, + BND_OPTION_WIDTH,BND_OPTION_HEIGHT, + BND_OPTION_RADIUS,BND_OPTION_RADIUS,BND_OPTION_RADIUS,BND_OPTION_RADIUS, + bndTransparent(bnd_theme.optionTheme.outlineColor)); + if (state == BND_ACTIVE) { + bndCheck(ctx,ox,oy, bndTransparent(bnd_theme.optionTheme.itemColor)); + } + bndIconLabelValue(ctx,x+12,y,w-12,h,-1, + bndTextColor(&bnd_theme.optionTheme, state), BND_LEFT, + BND_LABEL_FONT_SIZE, label, NULL); +} + +void bndChoiceButton(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + int iconid, const char *label) { + float cr[4]; + NVGcolor shade_top, shade_down; + + bndSelectCorners(cr, BND_OPTION_RADIUS, flags); + bndBevelInset(ctx,x,y,w,h,cr[2],cr[3]); + bndInnerColors(&shade_top, &shade_down, &bnd_theme.choiceTheme, state, 1); + bndInnerBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], shade_top, shade_down); + bndOutlineBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], + bndTransparent(bnd_theme.choiceTheme.outlineColor)); + bndIconLabelValue(ctx,x,y,w,h,iconid, + bndTextColor(&bnd_theme.choiceTheme, state), BND_LEFT, + BND_LABEL_FONT_SIZE, label, NULL); + bndUpDownArrow(ctx,x+w-10,y+10,5, + bndTransparent(bnd_theme.choiceTheme.itemColor)); +} + +void bndColorButton(NVGcontext *ctx, + float x, float y, float w, float h, int flags, NVGcolor color) { + float cr[4]; + bndSelectCorners(cr, BND_TOOL_RADIUS, flags); + bndBevelInset(ctx,x,y,w,h,cr[2],cr[3]); + bndInnerBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], color, color); + bndOutlineBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], + bndTransparent(bnd_theme.toolTheme.outlineColor)); +} + +void bndNumberField(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + const char *label, const char *value) { + float cr[4]; + NVGcolor shade_top, shade_down; + + bndSelectCorners(cr, BND_NUMBER_RADIUS, flags); + bndBevelInset(ctx,x,y,w,h,cr[2],cr[3]); + bndInnerColors(&shade_top, &shade_down, &bnd_theme.numberFieldTheme, state, 0); + bndInnerBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], shade_top, shade_down); + bndOutlineBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], + bndTransparent(bnd_theme.numberFieldTheme.outlineColor)); + bndIconLabelValue(ctx,x,y,w,h,-1, + bndTextColor(&bnd_theme.numberFieldTheme, state), BND_CENTER, + BND_LABEL_FONT_SIZE, label, value); + bndArrow(ctx,x+8,y+10,-BND_NUMBER_ARROW_SIZE, + bndTransparent(bnd_theme.numberFieldTheme.itemColor)); + bndArrow(ctx,x+w-8,y+10,BND_NUMBER_ARROW_SIZE, + bndTransparent(bnd_theme.numberFieldTheme.itemColor)); +} + +void bndSlider(NVGcontext *ctx, + float x, float y, float w, float h, int flags, BNDwidgetState state, + float progress, const char *label, const char *value) { + float cr[4]; + NVGcolor shade_top, shade_down; + + bndSelectCorners(cr, BND_NUMBER_RADIUS, flags); + bndBevelInset(ctx,x,y,w,h,cr[2],cr[3]); + bndInnerColors(&shade_top, &shade_down, &bnd_theme.sliderTheme, state, 0); + bndInnerBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], shade_top, shade_down); + + if (state == BND_ACTIVE) { + shade_top = bndOffsetColor( + bnd_theme.sliderTheme.itemColor, bnd_theme.sliderTheme.shadeTop); + shade_down = bndOffsetColor( + bnd_theme.sliderTheme.itemColor, bnd_theme.sliderTheme.shadeDown); + } else { + shade_top = bndOffsetColor( + bnd_theme.sliderTheme.itemColor, bnd_theme.sliderTheme.shadeDown); + shade_down = bndOffsetColor( + bnd_theme.sliderTheme.itemColor, bnd_theme.sliderTheme.shadeTop); + } + nvgScissor(ctx,x,y,8+(w-8)*bnd_clamp(progress,0,1),h); + bndInnerBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], shade_top, shade_down); + nvgResetScissor(ctx); + + bndOutlineBox(ctx,x,y,w,h,cr[0],cr[1],cr[2],cr[3], + bndTransparent(bnd_theme.sliderTheme.outlineColor)); + bndIconLabelValue(ctx,x,y,w,h,-1, + bndTextColor(&bnd_theme.sliderTheme, state), BND_CENTER, + BND_LABEL_FONT_SIZE, label, value); +} + +void bndScrollBar(NVGcontext *ctx, + float x, float y, float w, float h, BNDwidgetState state, + float offset, float size) { + + bndBevelInset(ctx,x,y,w,h, + BND_SCROLLBAR_RADIUS, BND_SCROLLBAR_RADIUS); + bndInnerBox(ctx,x,y,w,h, + BND_SCROLLBAR_RADIUS,BND_SCROLLBAR_RADIUS, + BND_SCROLLBAR_RADIUS,BND_SCROLLBAR_RADIUS, + bndOffsetColor( + bnd_theme.scrollBarTheme.innerColor, 3*bnd_theme.scrollBarTheme.shadeDown), + bndOffsetColor( + bnd_theme.scrollBarTheme.innerColor, 3*bnd_theme.scrollBarTheme.shadeTop)); + bndOutlineBox(ctx,x,y,w,h, + BND_SCROLLBAR_RADIUS,BND_SCROLLBAR_RADIUS, + BND_SCROLLBAR_RADIUS,BND_SCROLLBAR_RADIUS, + bndTransparent(bnd_theme.scrollBarTheme.outlineColor)); + + NVGcolor itemColor = bndOffsetColor( + bnd_theme.scrollBarTheme.itemColor, + (state == BND_ACTIVE)?BND_SCROLLBAR_ACTIVE_SHADE:0); + + bndScrollHandleRect(&x,&y,&w,&h,offset,size); + + bndInnerBox(ctx,x,y,w,h, + BND_SCROLLBAR_RADIUS,BND_SCROLLBAR_RADIUS, + BND_SCROLLBAR_RADIUS,BND_SCROLLBAR_RADIUS, + bndOffsetColor( + itemColor, 3*bnd_theme.scrollBarTheme.shadeTop), + bndOffsetColor( + itemColor, 3*bnd_theme.scrollBarTheme.shadeDown)); + bndOutlineBox(ctx,x,y,w,h, + BND_SCROLLBAR_RADIUS,BND_SCROLLBAR_RADIUS, + BND_SCROLLBAR_RADIUS,BND_SCROLLBAR_RADIUS, + bndTransparent(bnd_theme.scrollBarTheme.outlineColor)); +} + +void bndMenuBackground(NVGcontext *ctx, + float x, float y, float w, float h, int flags) { + float cr[4]; + NVGcolor shade_top, shade_down; + + bndSelectCorners(cr, BND_MENU_RADIUS, flags); + bndInnerColors(&shade_top, &shade_down, &bnd_theme.menuTheme, + BND_DEFAULT, 0); + bndInnerBox(ctx,x,y,w,h+1,cr[0],cr[1],cr[2],cr[3], shade_top, shade_down); + bndOutlineBox(ctx,x,y,w,h+1,cr[0],cr[1],cr[2],cr[3], + bndTransparent(bnd_theme.menuTheme.outlineColor)); + bndDropShadow(ctx,x,y,w,h,BND_MENU_RADIUS, + BND_SHADOW_FEATHER,BND_SHADOW_ALPHA); +} + +void bndTooltipBackground(NVGcontext *ctx, float x, float y, float w, float h) { + NVGcolor shade_top, shade_down; + + bndInnerColors(&shade_top, &shade_down, &bnd_theme.tooltipTheme, + BND_DEFAULT, 0); + bndInnerBox(ctx,x,y,w,h+1, + BND_MENU_RADIUS,BND_MENU_RADIUS,BND_MENU_RADIUS,BND_MENU_RADIUS, + shade_top, shade_down); + bndOutlineBox(ctx,x,y,w,h+1, + BND_MENU_RADIUS,BND_MENU_RADIUS,BND_MENU_RADIUS,BND_MENU_RADIUS, + bndTransparent(bnd_theme.tooltipTheme.outlineColor)); + bndDropShadow(ctx,x,y,w,h,BND_MENU_RADIUS, + BND_SHADOW_FEATHER,BND_SHADOW_ALPHA); +} + +void bndMenuLabel(NVGcontext *ctx, + float x, float y, float w, float h, int iconid, const char *label) { + bndIconLabelValue(ctx,x,y,w,h,iconid, + bnd_theme.menuTheme.textColor, BND_LEFT, + BND_LABEL_FONT_SIZE, label, NULL); +} + +void bndMenuItem(NVGcontext *ctx, + float x, float y, float w, float h, BNDwidgetState state, + int iconid, const char *label) { + if (state != BND_DEFAULT) { + bndInnerBox(ctx,x,y,w,h,0,0,0,0, + bndOffsetColor(bnd_theme.menuItemTheme.innerSelectedColor, + bnd_theme.menuItemTheme.shadeTop), + bndOffsetColor(bnd_theme.menuItemTheme.innerSelectedColor, + bnd_theme.menuItemTheme.shadeDown)); + state = BND_ACTIVE; + } + bndIconLabelValue(ctx,x,y,w,h,iconid, + bndTextColor(&bnd_theme.menuItemTheme, state), BND_LEFT, + BND_LABEL_FONT_SIZE, label, NULL); +} + +void bndNodePort(NVGcontext *ctx, float x, float y, BNDwidgetState state, + NVGcolor color) { + nvgBeginPath(ctx); + nvgCircle(ctx, x, y, BND_NODE_PORT_RADIUS); + nvgStrokeColor(ctx,bnd_theme.nodeTheme.wiresColor); + nvgStrokeWidth(ctx,1.0f); + nvgStroke(ctx); + nvgFillColor(ctx,(state != BND_DEFAULT)? + bndOffsetColor(color, BND_HOVER_SHADE):color); + nvgFill(ctx); +} + +void bndColoredNodeWire(NVGcontext *ctx, float x0, float y0, float x1, float y1, + NVGcolor color0, NVGcolor color1) { + float length = bnd_fmaxf(fabsf(x1 - x0),fabsf(y1 - y0)); + float delta = length*(float)bnd_theme.nodeTheme.noodleCurving/10.0f; + + nvgBeginPath(ctx); + nvgMoveTo(ctx, x0, y0); + nvgBezierTo(ctx, + x0 + delta, y0, + x1 - delta, y1, + x1, y1); + NVGcolor colorw = bnd_theme.nodeTheme.wiresColor; + colorw.a = (color0.a= 0) { + w += BND_ICON_SHEET_RES; + } + if (label && (bnd_font >= 0)) { + nvgFontFaceId(ctx, bnd_font); + nvgFontSize(ctx, BND_LABEL_FONT_SIZE); + w += nvgTextBounds(ctx, 1, 1, label, NULL, NULL); + } + return w; +} + +float bndLabelHeight(NVGcontext *ctx, int iconid, const char *label, float width) { + int h = BND_WIDGET_HEIGHT; + width -= BND_TEXT_RADIUS*2; + if (iconid >= 0) { + width -= BND_ICON_SHEET_RES; + } + if (label && (bnd_font >= 0)) { + nvgFontFaceId(ctx, bnd_font); + nvgFontSize(ctx, BND_LABEL_FONT_SIZE); + float bounds[4]; + nvgTextBoxBounds(ctx, 1, 1, width, label, NULL, bounds); + int bh = (int)(bounds[3] - bounds[1]) + BND_TEXT_PAD_DOWN; + if (bh > h) + h = bh; + } + return h; +} + +//////////////////////////////////////////////////////////////////////////////// + +void bndRoundedBox(NVGcontext *ctx, float x, float y, float w, float h, + float cr0, float cr1, float cr2, float cr3) { + float d; + + w = bnd_fmaxf(0, w); + h = bnd_fmaxf(0, h); + d = bnd_fminf(w, h); + + nvgMoveTo(ctx, x,y+h*0.5f); + nvgArcTo(ctx, x,y, x+w,y, bnd_fminf(cr0, d/2)); + nvgArcTo(ctx, x+w,y, x+w,y+h, bnd_fminf(cr1, d/2)); + nvgArcTo(ctx, x+w,y+h, x,y+h, bnd_fminf(cr2, d/2)); + nvgArcTo(ctx, x,y+h, x,y, bnd_fminf(cr3, d/2)); + nvgClosePath(ctx); +} + +NVGcolor bndTransparent(NVGcolor color) { + color.a *= BND_TRANSPARENT_ALPHA; + return color; +} + +NVGcolor bndOffsetColor(NVGcolor color, int delta) { + float offset = (float)delta / 255.0f; + return delta?( + nvgRGBAf( + bnd_clamp(color.r+offset,0,1), + bnd_clamp(color.g+offset,0,1), + bnd_clamp(color.b+offset,0,1), + color.a) + ):color; +} + +void bndBevel(NVGcontext *ctx, float x, float y, float w, float h) { + nvgStrokeWidth(ctx, 1); + + x += 0.5f; + y += 0.5f; + w -= 1; + h -= 1; + + nvgBeginPath(ctx); + nvgMoveTo(ctx, x, y+h); + nvgLineTo(ctx, x+w, y+h); + nvgLineTo(ctx, x+w, y); + nvgStrokeColor(ctx, bndTransparent( + bndOffsetColor(bnd_theme.backgroundColor, -BND_BEVEL_SHADE))); + nvgStroke(ctx); + + nvgBeginPath(ctx); + nvgMoveTo(ctx, x, y+h); + nvgLineTo(ctx, x, y); + nvgLineTo(ctx, x+w, y); + nvgStrokeColor(ctx, bndTransparent( + bndOffsetColor(bnd_theme.backgroundColor, BND_BEVEL_SHADE))); + nvgStroke(ctx); +} + +void bndBevelInset(NVGcontext *ctx, float x, float y, float w, float h, + float cr2, float cr3) { + float d; + + y -= 0.5f; + d = bnd_fminf(w, h); + cr2 = bnd_fminf(cr2, d/2); + cr3 = bnd_fminf(cr3, d/2); + + nvgBeginPath(ctx); + nvgMoveTo(ctx, x+w,y+h-cr2); + nvgArcTo(ctx, x+w,y+h, x,y+h, cr2); + nvgArcTo(ctx, x,y+h, x,y, cr3); + + NVGcolor bevelColor = bndOffsetColor(bnd_theme.backgroundColor, + BND_INSET_BEVEL_SHADE); + + nvgStrokeWidth(ctx, 1); + nvgStrokePaint(ctx, + nvgLinearGradient(ctx, + x,y+h-bnd_fmaxf(cr2,cr3)-1, + x,y+h-1, + nvgRGBAf(bevelColor.r, bevelColor.g, bevelColor.b, 0), + bevelColor)); + nvgStroke(ctx); +} + +void bndBackground(NVGcontext *ctx, float x, float y, float w, float h) { + nvgBeginPath(ctx); + nvgRect(ctx, x, y, w, h); + nvgFillColor(ctx, bnd_theme.backgroundColor); + nvgFill(ctx); +} + +void bndIcon(NVGcontext *ctx, float x, float y, int iconid) { + int ix, iy, u, v; + if (bnd_icon_image < 0) return; // no icons loaded + + ix = iconid & 0xff; + iy = (iconid>>8) & 0xff; + u = BND_ICON_SHEET_OFFSET_X + ix*BND_ICON_SHEET_GRID; + v = BND_ICON_SHEET_OFFSET_Y + iy*BND_ICON_SHEET_GRID; + + nvgBeginPath(ctx); + nvgRect(ctx,x,y,BND_ICON_SHEET_RES,BND_ICON_SHEET_RES); + nvgFillPaint(ctx, + nvgImagePattern(ctx,x-u,y-v, + BND_ICON_SHEET_WIDTH, + BND_ICON_SHEET_HEIGHT, + 0,bnd_icon_image,1)); + nvgFill(ctx); +} + +void bndDropShadow(NVGcontext *ctx, float x, float y, float w, float h, + float r, float feather, float alpha) { + + nvgBeginPath(ctx); + y += feather; + h -= feather; + + nvgMoveTo(ctx, x-feather, y-feather); + nvgLineTo(ctx, x, y-feather); + nvgLineTo(ctx, x, y+h-feather); + nvgArcTo(ctx, x,y+h,x+r,y+h,r); + nvgArcTo(ctx, x+w,y+h,x+w,y+h-r,r); + nvgLineTo(ctx, x+w, y-feather); + nvgLineTo(ctx, x+w+feather, y-feather); + nvgLineTo(ctx, x+w+feather, y+h+feather); + nvgLineTo(ctx, x-feather, y+h+feather); + nvgClosePath(ctx); + + nvgFillPaint(ctx, nvgBoxGradient(ctx, + x - feather*0.5f,y - feather*0.5f, + w + feather,h+feather, + r+feather*0.5f, + feather, + nvgRGBAf(0,0,0,alpha*alpha), + nvgRGBAf(0,0,0,0))); + nvgFill(ctx); +} + +void bndInnerBox(NVGcontext *ctx, float x, float y, float w, float h, + float cr0, float cr1, float cr2, float cr3, + NVGcolor shade_top, NVGcolor shade_down) { + nvgBeginPath(ctx); + bndRoundedBox(ctx,x+1,y+1,w-2,h-3,bnd_fmaxf(0,cr0-1), + bnd_fmaxf(0,cr1-1),bnd_fmaxf(0,cr2-1),bnd_fmaxf(0,cr3-1)); + nvgFillPaint(ctx,((h-2)>w)? + nvgLinearGradient(ctx,x,y,x+w,y,shade_top,shade_down): + nvgLinearGradient(ctx,x,y,x,y+h,shade_top,shade_down)); + nvgFill(ctx); +} + +void bndOutlineBox(NVGcontext *ctx, float x, float y, float w, float h, + float cr0, float cr1, float cr2, float cr3, NVGcolor color) { + nvgBeginPath(ctx); + bndRoundedBox(ctx,x+0.5f,y+0.5f,w-1,h-2,cr0,cr1,cr2,cr3); + nvgStrokeColor(ctx,color); + nvgStrokeWidth(ctx,1); + nvgStroke(ctx); +} + +void bndSelectCorners(float *radiuses, float r, int flags) { + radiuses[0] = (flags & BND_CORNER_TOP_LEFT)?0:r; + radiuses[1] = (flags & BND_CORNER_TOP_RIGHT)?0:r; + radiuses[2] = (flags & BND_CORNER_DOWN_RIGHT)?0:r; + radiuses[3] = (flags & BND_CORNER_DOWN_LEFT)?0:r; +} + +void bndInnerColors( + NVGcolor *shade_top, NVGcolor *shade_down, + const BNDwidgetTheme *theme, BNDwidgetState state, int flipActive) { + + switch(state) { + default: + case BND_DEFAULT: { + *shade_top = bndOffsetColor(theme->innerColor, theme->shadeTop); + *shade_down = bndOffsetColor(theme->innerColor, theme->shadeDown); + } break; + case BND_HOVER: { + NVGcolor color = bndOffsetColor(theme->innerColor, BND_HOVER_SHADE); + *shade_top = bndOffsetColor(color, theme->shadeTop); + *shade_down = bndOffsetColor(color, theme->shadeDown); + } break; + case BND_ACTIVE: { + *shade_top = bndOffsetColor(theme->innerSelectedColor, + flipActive?theme->shadeDown:theme->shadeTop); + *shade_down = bndOffsetColor(theme->innerSelectedColor, + flipActive?theme->shadeTop:theme->shadeDown); + } break; + } +} + +NVGcolor bndTextColor(const BNDwidgetTheme *theme, BNDwidgetState state) { + return (state == BND_ACTIVE)?theme->textSelectedColor:theme->textColor; +} + +void bndIconLabelValue(NVGcontext *ctx, float x, float y, float w, float h, + int iconid, NVGcolor color, int align, float fontsize, const char *label, + const char *value) { + float pleft = BND_PAD_LEFT; + if (label) { + if (iconid >= 0) { + bndIcon(ctx,x+4,y+2,iconid); + pleft += BND_ICON_SHEET_RES; + } + + if (bnd_font < 0) return; + nvgFontFaceId(ctx, bnd_font); + nvgFontSize(ctx, fontsize); + nvgBeginPath(ctx); + nvgFillColor(ctx, color); + if (value) { + float label_width = nvgTextBounds(ctx, 1, 1, label, NULL, NULL); + float sep_width = nvgTextBounds(ctx, 1, 1, + BND_LABEL_SEPARATOR, NULL, NULL); + + nvgTextAlign(ctx, NVG_ALIGN_LEFT|NVG_ALIGN_BASELINE); + x += pleft; + if (align == BND_CENTER) { + float width = label_width + sep_width + + nvgTextBounds(ctx, 1, 1, value, NULL, NULL); + x += ((w-BND_PAD_RIGHT-pleft)-width)*0.5f; + } + y += BND_WIDGET_HEIGHT-BND_TEXT_PAD_DOWN; + nvgText(ctx, x, y, label, NULL); + x += label_width; + nvgText(ctx, x, y, BND_LABEL_SEPARATOR, NULL); + x += sep_width; + nvgText(ctx, x, y, value, NULL); + } else { + nvgTextAlign(ctx, + (align==BND_LEFT)?(NVG_ALIGN_LEFT|NVG_ALIGN_BASELINE): + (NVG_ALIGN_CENTER|NVG_ALIGN_BASELINE)); + nvgTextBox(ctx,x+pleft,y+BND_WIDGET_HEIGHT-BND_TEXT_PAD_DOWN, + w-BND_PAD_RIGHT-pleft,label, NULL); + } + } else if (iconid >= 0) { + bndIcon(ctx,x+2,y+2,iconid); + } +} + +void bndNodeIconLabel(NVGcontext *ctx, float x, float y, float w, float h, + int iconid, NVGcolor color, NVGcolor shadowColor, + int align, float fontsize, const char *label) { + if (label && (bnd_font >= 0)) { + nvgFontFaceId(ctx, bnd_font); + nvgFontSize(ctx, fontsize); + nvgBeginPath(ctx); + nvgTextAlign(ctx, NVG_ALIGN_LEFT|NVG_ALIGN_BASELINE); + nvgFillColor(ctx, shadowColor); + nvgFontBlur(ctx, BND_NODE_TITLE_FEATHER); + nvgTextBox(ctx,x+1,y+h+3-BND_TEXT_PAD_DOWN, + w,label, NULL); + nvgFillColor(ctx, color); + nvgFontBlur(ctx, 0); + nvgTextBox(ctx,x,y+h+2-BND_TEXT_PAD_DOWN, + w,label, NULL); + } + if (iconid >= 0) { + bndIcon(ctx,x+w-BND_ICON_SHEET_RES,y+3,iconid); + } +} + +int bndIconLabelTextPosition(NVGcontext *ctx, float x, float y, float w, float h, + int iconid, float fontsize, const char *label, int px, int py) { + float bounds[4]; + float pleft = BND_TEXT_RADIUS; + if (!label) return -1; + if (iconid >= 0) + pleft += BND_ICON_SHEET_RES; + + if (bnd_font < 0) return -1; + + x += pleft; + y += BND_WIDGET_HEIGHT - BND_TEXT_PAD_DOWN; + + nvgFontFaceId(ctx, bnd_font); + nvgFontSize(ctx, fontsize); + nvgTextAlign(ctx, NVG_ALIGN_LEFT | NVG_ALIGN_BASELINE); + + w -= BND_TEXT_RADIUS + pleft; + + float asc, desc, lh; + static NVGtextRow rows[BND_MAX_ROWS]; + int nrows = nvgTextBreakLines( + ctx, label, NULL, w, rows, BND_MAX_ROWS); + if (nrows == 0) return 0; + nvgTextBoxBounds(ctx, x, y, w, label, NULL, bounds); + nvgTextMetrics(ctx, &asc, &desc, &lh); + + // calculate vertical position + int row = bnd_clamp((int)((float)(py - bounds[1]) / lh), 0, nrows - 1); + // search horizontal position + static NVGglyphPosition glyphs[BND_MAX_GLYPHS]; + int nglyphs = nvgTextGlyphPositions( + ctx, x, y, rows[row].start, rows[row].end + 1, glyphs, BND_MAX_GLYPHS); + int col, p = 0; + for (col = 0; col < nglyphs && glyphs[col].x < px; ++col) + p = glyphs[col].str - label; + // see if we should move one character further + if (col > 0 && col < nglyphs && glyphs[col].x - px < px - glyphs[col - 1].x) + p = glyphs[col].str - label; + return p; +} + +static void bndCaretPosition(NVGcontext *ctx, float x, float y, + float desc, float lineHeight, const char *caret, NVGtextRow *rows,int nrows, + int *cr, float *cx, float *cy) { + static NVGglyphPosition glyphs[BND_MAX_GLYPHS]; + int i,r,nglyphs; + for (r=0; r < nrows && rows[r].end < caret; ++r); + *cr = r; + *cx = x; + *cy = y-lineHeight-desc + r*lineHeight; + if (nrows == 0) return; + *cx = rows[r].minx; + nglyphs = nvgTextGlyphPositions( + ctx, x, y, rows[r].start, rows[r].end+1, glyphs, BND_MAX_GLYPHS); + for (i=0; i < nglyphs; ++i) { + *cx=glyphs[i].x; + if (glyphs[i].str == caret) break; + } +} + +void bndIconLabelCaret(NVGcontext *ctx, float x, float y, float w, float h, + int iconid, NVGcolor color, float fontsize, const char *label, + NVGcolor caretcolor, int cbegin, int cend) { + float pleft = BND_TEXT_RADIUS; + if (!label) return; + if (iconid >= 0) { + bndIcon(ctx,x+4,y+2,iconid); + pleft += BND_ICON_SHEET_RES; + } + + if (bnd_font < 0) return; + + x+=pleft; + y+=BND_WIDGET_HEIGHT-BND_TEXT_PAD_DOWN; + + nvgFontFaceId(ctx, bnd_font); + nvgFontSize(ctx, fontsize); + nvgTextAlign(ctx, NVG_ALIGN_LEFT|NVG_ALIGN_BASELINE); + + w -= BND_TEXT_RADIUS+pleft; + + if (cend >= cbegin) { + int c0r,c1r; + float c0x,c0y,c1x,c1y; + float desc,lh; + static NVGtextRow rows[BND_MAX_ROWS]; + int nrows = nvgTextBreakLines( + ctx, label, label+cend+1, w, rows, BND_MAX_ROWS); + nvgTextMetrics(ctx, NULL, &desc, &lh); + + bndCaretPosition(ctx, x, y, desc, lh, label+cbegin, + rows, nrows, &c0r, &c0x, &c0y); + bndCaretPosition(ctx, x, y, desc, lh, label+cend, + rows, nrows, &c1r, &c1x, &c1y); + + nvgBeginPath(ctx); + if (cbegin == cend) { + nvgFillColor(ctx, nvgRGBf(0.337,0.502,0.761)); + nvgRect(ctx, c0x-1, c0y, 2, lh+1); + } else { + nvgFillColor(ctx, caretcolor); + if (c0r == c1r) { + nvgRect(ctx, c0x-1, c0y, c1x-c0x+1, lh+1); + } else { + int blk=c1r-c0r-1; + nvgRect(ctx, c0x-1, c0y, x+w-c0x+1, lh+1); + nvgRect(ctx, x, c1y, c1x-x+1, lh+1); + + if (blk) + nvgRect(ctx, x, c0y+lh, w, blk*lh+1); + } + } + nvgFill(ctx); + } + + nvgBeginPath(ctx); + nvgFillColor(ctx, color); + nvgTextBox(ctx,x,y,w,label, NULL); +} + +void bndCheck(NVGcontext *ctx, float ox, float oy, NVGcolor color) { + nvgBeginPath(ctx); + nvgStrokeWidth(ctx,2); + nvgStrokeColor(ctx,color); + nvgLineCap(ctx,NVG_BUTT); + nvgLineJoin(ctx,NVG_MITER); + nvgMoveTo(ctx,ox+4,oy+5); + nvgLineTo(ctx,ox+7,oy+8); + nvgLineTo(ctx,ox+14,oy+1); + nvgStroke(ctx); +} + +void bndArrow(NVGcontext *ctx, float x, float y, float s, NVGcolor color) { + nvgBeginPath(ctx); + nvgMoveTo(ctx,x,y); + nvgLineTo(ctx,x-s,y+s); + nvgLineTo(ctx,x-s,y-s); + nvgClosePath(ctx); + nvgFillColor(ctx,color); + nvgFill(ctx); +} + +void bndUpDownArrow(NVGcontext *ctx, float x, float y, float s, NVGcolor color) { + float w; + + nvgBeginPath(ctx); + w = 1.1f*s; + nvgMoveTo(ctx,x,y-1); + nvgLineTo(ctx,x+0.5*w,y-s-1); + nvgLineTo(ctx,x+w,y-1); + nvgClosePath(ctx); + nvgMoveTo(ctx,x,y+1); + nvgLineTo(ctx,x+0.5*w,y+s+1); + nvgLineTo(ctx,x+w,y+1); + nvgClosePath(ctx); + nvgFillColor(ctx,color); + nvgFill(ctx); +} + +void bndNodeArrowDown(NVGcontext *ctx, float x, float y, float s, NVGcolor color) { + float w; + nvgBeginPath(ctx); + w = 1.0f*s; + nvgMoveTo(ctx,x,y); + nvgLineTo(ctx,x+0.5*w,y-s); + nvgLineTo(ctx,x-0.5*w,y-s); + nvgClosePath(ctx); + nvgFillColor(ctx,color); + nvgFill(ctx); +} + +void bndScrollHandleRect(float *x, float *y, float *w, float *h, + float offset, float size) { + size = bnd_clamp(size,0,1); + offset = bnd_clamp(offset,0,1); + if ((*h) > (*w)) { + float hs = bnd_fmaxf(size*(*h), (*w)+1); + *y = (*y) + ((*h)-hs)*offset; + *h = hs; + } else { + float ws = bnd_fmaxf(size*(*w), (*h)-1); + *x = (*x) + ((*w)-ws)*offset; + *w = ws; + } +} + +NVGcolor bndNodeWireColor(const BNDnodeTheme *theme, BNDwidgetState state) { + switch(state) { + default: + case BND_DEFAULT: return nvgRGBf(0.5f,0.5f,0.5f); + case BND_HOVER: return theme->wireSelectColor; + case BND_ACTIVE: return theme->activeNodeColor; + } +} + +//////////////////////////////////////////////////////////////////////////////// + +#ifdef BND_INLINE +#undef BND_INLINE +#endif + +#endif // BLENDISH_IMPLEMENTATION diff --git a/dpf/dgl/src/oui-blendish/blendish_resources.cpp b/dpf/dgl/src/oui-blendish/blendish_resources.cpp new file mode 100644 index 0000000..a1cdcd4 --- /dev/null +++ b/dpf/dgl/src/oui-blendish/blendish_resources.cpp @@ -0,0 +1,24815 @@ +/* (Auto-generated binary data file). */ + +#include "blendish_resources.h" + +static const unsigned char temp1[] = {137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,90,0,0,2,128,8,6,0,0,0,68,254,214,163,0,0,0,4,115,66,73, + 84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13,215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111, + 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,0,29,116,69,88,116,84,105,116,108,101, + 0,66,108,101,110,100,101,114,32,105,99,111,110,115,32,118,46,32,50,46,53,46,48,56,74,212,185,78,0,0,0,22,116,69,88,116,65,117,116,104, + 111,114,0,65,110,100,114,122,101,106,32,65,109,98,114,111,197,188,92,53,214,138,0,0,0,158,116,69,88,116,68,101,115,99,114,105,112,116,105,111, + 110,0,84,104,105,115,32,99,111,110,116,101,110,116,32,105,115,32,117,110,100,101,114,32,67,67,32,65,116,116,114,105,98,117,116,105,111,110,45,78, + 111,110,67,111,109,109,101,114,99,105,97,108,32,83,104,97,114,101,65,108,105,107,101,32,108,105,99,101,110,99,101,32,51,46,48,32,97,115,32,108, + 111,110,103,32,97,115,32,105,116,39,115,32,117,115,101,100,32,102,111,114,32,66,108,101,110,100,101,114,32,51,68,32,71,85,73,46,32,65,110,121, + 32,111,116,104,101,114,32,117,115,101,115,32,97,114,101,32,110,111,116,32,97,108,108,111,119,101,100,46,43,245,213,180,0,0,0,24,116,69,88,116, + 67,114,101,97,116,105,111,110,32,84,105,109,101,0,50,49,46,48,53,46,50,48,49,50,12,64,242,4,0,0,0,99,116,69,88,116,67,111,112,121, + 114,105,103,104,116,0,67,67,32,65,116,116,114,105,98,117,116,105,111,110,45,78,111,110,67,111,109,109,101,114,99,105,97,108,45,83,104,97,114,101, + 65,108,105,107,101,32,104,116,116,112,58,47,47,99,114,101,97,116,105,118,101,99,111,109,109,111,110,115,46,111,114,103,47,108,105,99,101,110,115,101, + 115,47,98,121,45,110,99,45,115,97,47,51,46,48,47,222,4,26,229,0,0,32,0,73,68,65,84,120,156,236,157,119,124,20,69,255,199,63,179,183, + 123,253,82,72,39,161,37,116,164,55,9,72,135,128,130,88,48,8,136,32,162,136,128,82,124,4,20,4,164,91,168,42,242,128,138,96,5,21,145,32, + 77,122,135,0,2,34,1,33,132,20,210,73,187,94,118,126,127,36,123,92,46,215,2,199,243,19,221,247,235,181,175,187,109,159,157,185,157,189,253,236, + 119,102,103,8,165,20,34,34,34,34,34,34,34,34,34,254,135,249,255,78,128,136,136,136,136,136,136,136,200,63,149,106,27,173,164,164,36,159,67,96, + 132,144,62,190,106,86,76,221,255,238,154,190,108,87,93,77,97,242,163,102,247,10,205,57,126,212,188,159,233,236,254,119,213,20,242,235,171,110,117,52, + 157,191,251,41,157,62,149,251,191,131,166,183,109,239,33,157,30,181,239,242,188,207,121,64,210,217,253,239,166,233,92,126,124,209,173,174,166,99,186,253, + 152,78,175,229,254,239,162,233,105,251,123,76,167,91,109,95,203,146,155,115,63,199,219,190,255,36,216,234,108,92,29,163,81,29,6,12,24,64,28,244, + 201,223,85,83,32,41,41,137,10,250,254,192,159,90,21,236,247,183,166,211,239,233,47,230,12,24,48,128,36,37,37,29,0,208,221,79,154,251,43,52, + 239,249,188,59,229,213,47,186,213,53,89,213,213,244,87,185,191,223,154,142,203,238,165,172,58,107,250,163,220,187,58,239,254,212,244,215,181,228,180,191, + 95,174,165,251,81,230,93,148,159,123,214,117,214,244,199,181,228,172,233,143,114,255,191,208,20,150,223,203,181,228,74,211,31,229,222,221,185,191,87,221, + 7,141,106,69,180,238,231,15,84,113,34,122,248,91,211,223,105,190,31,102,211,215,8,204,223,65,19,254,61,71,115,42,52,231,248,81,179,135,191,206, + 209,253,40,239,142,154,254,210,119,214,241,199,121,114,165,121,175,233,117,147,206,123,194,149,230,189,150,251,255,149,38,252,123,142,252,114,45,57,105,250, + 237,90,114,206,175,63,34,26,142,154,254,186,150,92,164,243,158,207,147,43,205,123,77,175,155,116,222,19,174,52,253,113,15,185,95,186,15,18,213,138, + 104,221,47,238,135,33,2,202,47,62,127,106,223,143,168,206,253,138,188,249,43,170,227,66,247,128,31,229,252,22,125,18,168,72,159,95,158,112,31,68, + 196,107,73,188,150,240,55,187,150,92,149,155,1,3,6,204,73,74,74,154,237,79,205,123,197,89,211,95,134,200,69,222,239,233,90,114,222,215,31,215, + 146,23,205,123,138,56,187,203,255,189,232,62,104,252,45,140,22,112,167,144,248,249,201,4,240,115,148,204,223,220,167,116,10,79,162,127,235,188,227,62, + 164,179,226,73,121,182,63,53,43,120,80,126,83,241,90,18,175,37,191,224,207,107,201,169,76,250,37,173,254,46,231,174,52,253,113,12,71,13,127,149, + 209,251,157,119,127,94,75,247,227,220,63,112,80,74,239,219,4,160,143,168,41,106,138,154,162,166,168,41,106,138,154,162,230,191,117,18,187,119,16,17, + 17,17,17,17,17,17,185,79,144,10,103,42,34,34,34,34,34,34,34,34,226,103,220,182,209,138,137,137,217,166,82,169,26,184,91,175,213,106,111,101, + 101,101,245,188,63,201,18,241,5,241,28,137,60,40,16,66,24,220,121,203,153,7,64,169,248,148,39,34,34,242,47,192,173,209,146,203,229,113,127,254, + 249,103,35,158,231,97,179,217,96,181,90,237,159,38,147,9,221,186,117,171,118,67,250,168,168,168,131,18,137,164,94,117,246,177,217,108,55,179,179,179, + 31,113,183,158,16,114,20,64,28,33,196,113,153,199,79,0,89,102,179,185,173,39,77,66,72,156,179,158,27,45,225,187,71,205,224,224,224,211,44,203, + 214,114,165,229,238,59,207,243,215,115,115,115,59,187,211,188,31,231,232,223,76,84,84,212,65,150,101,171,93,62,111,221,186,229,182,124,70,71,71,159, + 101,24,38,186,26,146,18,158,231,83,110,221,186,245,136,59,35,34,148,121,79,34,206,229,137,16,146,97,181,90,219,123,216,222,173,166,135,50,239,81, + 211,97,91,134,101,217,197,17,17,17,227,116,58,157,1,0,149,72,36,52,52,52,84,72,27,0,192,106,181,230,221,190,125,187,133,55,61,17,17,17, + 145,7,9,183,55,98,158,231,25,163,209,136,43,87,174,192,205,255,189,237,46,142,215,40,249,183,221,17,1,17,145,176,154,205,80,135,133,219,181,115, + 46,93,132,213,98,134,213,100,66,157,14,157,132,52,160,89,179,102,18,47,154,181,150,44,89,18,17,16,16,0,131,193,0,131,193,0,163,209,8,131, + 193,0,147,201,4,147,201,4,179,217,12,179,217,12,171,213,10,163,209,136,61,123,246,120,75,123,173,5,11,22,68,4,6,6,218,245,132,73,208,20, + 116,45,22,11,12,6,3,246,238,221,235,81,147,101,217,90,89,89,89,17,82,169,20,148,82,240,60,239,170,113,97,37,234,215,175,111,246,164,121,159, + 206,209,191,153,70,11,190,73,138,8,82,202,97,229,121,12,108,85,223,190,226,250,186,77,160,86,27,120,171,21,13,39,140,176,47,111,218,180,169,199, + 242,73,41,173,187,224,155,164,96,95,53,11,10,10,244,77,154,52,201,66,249,171,207,238,34,62,181,244,122,125,68,133,190,125,161,96,88,24,134,169, + 52,237,220,185,19,3,7,14,244,150,247,90,147,39,79,142,176,88,44,48,153,76,48,26,141,176,88,44,176,90,173,246,201,102,179,217,39,147,201,132, + 19,39,78,120,211,20,34,89,75,250,246,237,59,58,41,41,73,189,101,203,22,117,189,122,245,32,149,74,193,178,172,61,141,44,203,226,225,135,31,254, + 215,188,238,45,34,34,242,239,193,173,209,50,26,141,169,109,218,180,161,21,223,99,228,114,185,212,113,61,33,36,186,81,163,70,41,206,251,121,171,174, + 10,136,136,196,140,218,33,0,128,119,210,10,4,45,188,215,185,181,125,155,119,51,139,1,0,74,165,18,196,241,49,218,13,106,181,26,125,251,246,133, + 76,38,67,251,246,237,193,113,156,203,73,42,149,130,227,56,111,114,32,132,64,163,209,96,238,220,185,0,0,150,101,161,86,200,49,177,115,123,40,64, + 241,223,139,87,97,226,41,88,150,181,79,190,104,74,165,82,92,184,112,1,44,203,66,34,145,216,63,133,239,91,183,110,197,51,207,60,3,150,101,161, + 84,42,1,47,253,140,56,158,35,147,201,84,83,38,147,153,1,8,230,76,74,8,137,186,155,115,244,111,38,72,41,199,200,213,63,1,0,210,151,77, + 0,80,126,238,78,188,250,142,125,155,186,47,15,1,33,4,28,199,129,97,188,191,79,226,171,102,97,97,161,126,232,208,161,135,3,2,2,118,150,148, + 148,120,212,164,148,34,61,61,29,44,203,186,45,239,12,195,96,233,210,165,248,235,175,191,124,202,187,193,96,192,218,181,107,97,179,217,42,233,10,223, + 157,151,121,163,194,100,205,79,72,72,24,145,148,148,84,131,16,130,143,62,250,8,28,199,97,192,128,1,8,13,13,197,174,93,187,32,149,74,241,230, + 155,111,250,148,70,17,17,145,127,45,28,128,214,0,194,81,30,68,40,5,16,236,176,62,175,226,51,220,97,254,148,11,157,14,21,219,8,235,133,121, + 19,0,153,139,229,5,0,148,21,147,17,192,81,0,205,29,142,35,236,231,152,142,74,199,101,129,242,241,135,0,236,7,208,67,232,68,239,214,173,91, + 143,10,27,213,175,95,255,207,148,148,148,38,130,231,169,168,158,146,90,173,214,70,66,85,149,16,45,234,211,167,143,199,39,124,171,185,114,144,198,177, + 234,192,121,185,227,167,59,8,33,48,155,205,24,50,100,8,0,184,189,233,56,78,62,120,55,152,76,38,176,44,139,198,181,195,49,171,95,27,116,164, + 22,104,203,8,172,197,90,60,161,177,224,207,102,109,177,230,102,30,210,74,202,192,178,172,79,154,60,207,187,53,89,18,137,4,171,87,175,198,208,161, + 67,33,145,72,124,210,115,60,71,113,113,113,73,41,41,41,161,132,16,35,0,216,108,54,185,213,106,13,180,90,173,161,54,155,45,180,58,231,232,223, + 140,149,231,43,205,187,43,155,190,150,79,95,53,11,11,11,245,3,7,14,60,46,151,203,191,140,140,140,204,202,200,200,240,168,73,41,173,98,126,156, + 31,42,62,252,240,67,172,92,185,18,61,123,246,244,41,157,70,163,17,132,16,172,89,179,166,202,186,121,243,230,85,57,158,39,205,138,7,36,38,58, + 58,250,213,29,59,118,4,10,219,134,133,133,129,227,56,180,104,209,2,129,129,129,56,124,248,48,108,54,155,207,215,165,136,136,200,63,23,87,94,196, + 129,110,51,102,204,104,191,120,241,226,133,241,241,241,223,30,61,122,244,27,66,200,54,97,37,165,116,32,0,8,203,42,230,59,160,178,233,225,0,132, + 19,66,182,9,219,59,206,59,44,239,3,64,38,204,207,152,49,163,249,226,197,139,23,78,159,62,253,173,69,139,22,73,103,204,152,209,114,241,226,197, + 11,133,227,184,74,135,35,194,99,169,199,94,133,133,42,170,203,151,47,187,171,162,178,67,41,245,248,111,169,14,11,183,71,178,222,173,27,106,95,62, + 55,163,200,126,3,91,213,174,1,212,106,53,250,189,251,190,199,99,1,229,55,45,147,201,132,220,220,92,123,148,193,219,228,171,166,74,169,192,158,201, + 45,144,94,32,195,156,99,133,72,58,247,23,56,142,67,255,102,45,240,168,52,0,51,235,202,48,249,234,13,88,124,108,211,75,41,117,105,176,132,239, + 66,21,138,175,70,203,17,158,231,211,13,6,67,193,149,43,87,244,124,249,141,93,73,41,173,65,8,41,69,121,148,171,166,67,58,196,59,154,27,6, + 182,170,111,143,58,157,8,232,109,95,254,140,246,130,253,156,76,93,253,30,0,160,103,219,135,189,94,15,190,104,22,20,20,232,31,233,221,227,128,77, + 111,90,63,98,196,136,212,125,251,246,41,125,73,171,43,163,37,68,109,5,147,197,178,44,76,38,147,79,121,55,153,76,110,175,15,161,170,175,58,17, + 45,0,208,106,181,166,159,127,254,25,171,86,173,66,104,104,40,18,18,18,80,179,102,77,108,218,180,9,148,82,76,152,48,1,74,165,82,136,94,251, + 164,41,34,34,242,143,197,147,23,145,47,94,188,120,161,179,145,113,156,119,52,80,78,102,74,160,219,140,25,51,154,123,74,128,163,233,18,150,9,199, + 37,132,108,91,180,104,209,64,47,233,200,131,19,246,127,75,79,221,247,27,141,198,212,86,173,90,249,228,38,116,58,93,182,167,245,194,141,201,249,79, + 213,49,74,160,209,104,160,14,212,128,241,241,127,215,98,177,216,141,202,238,221,187,161,84,42,241,216,99,143,221,83,68,203,108,54,67,38,229,192,132, + 69,98,228,178,125,40,40,213,219,111,48,251,175,167,226,76,78,46,38,199,247,134,90,153,139,50,147,201,167,200,27,207,243,85,76,22,203,178,24,50, + 100,136,61,154,32,172,175,168,146,114,43,26,22,22,118,154,101,217,90,14,139,20,113,113,113,192,157,118,61,132,231,249,178,224,224,224,31,1,68,83, + 74,107,1,8,0,188,159,35,17,215,229,211,121,57,239,20,169,186,27,205,130,130,2,253,192,129,3,143,219,244,166,245,153,153,153,199,1,40,58,118, + 236,88,109,163,37,24,44,142,227,176,116,233,82,172,92,185,210,190,222,87,163,101,181,90,43,25,168,171,87,175,86,58,150,179,177,243,84,109,74,41, + 165,132,16,30,0,31,23,23,103,223,39,42,42,10,193,193,193,224,121,30,60,207,67,161,80,64,169,84,66,42,149,186,213,18,17,17,249,247,224,193, + 139,232,167,79,159,254,22,33,100,91,69,100,233,34,224,214,80,185,162,3,42,155,181,42,134,8,184,19,161,114,54,91,142,223,5,102,204,152,209,220, + 69,58,170,84,87,218,255,85,157,186,221,175,132,99,21,149,63,112,85,93,232,120,35,211,4,7,66,169,86,67,34,97,64,8,241,104,240,132,170,67, + 225,143,127,220,184,113,30,219,173,248,218,158,202,108,54,131,97,37,184,21,21,11,27,115,200,190,175,48,49,44,135,180,168,38,144,92,62,11,206,199, + 27,174,115,68,107,194,132,9,88,187,118,45,24,134,177,255,38,44,203,162,97,195,134,72,77,77,245,168,197,178,108,173,180,180,180,8,199,223,81,48, + 177,148,82,216,108,54,212,175,95,223,144,146,146,242,186,79,137,19,177,227,206,52,59,47,183,217,120,159,163,48,174,182,43,40,40,208,39,38,38,30, + 40,46,46,94,255,208,67,15,93,69,121,247,7,62,117,34,44,148,21,71,131,37,152,172,21,43,86,84,50,69,22,139,197,167,7,1,139,197,82,197, + 240,124,240,193,7,149,62,1,160,115,231,206,62,69,134,1,80,134,97,168,84,42,69,223,190,125,209,178,101,75,108,217,178,5,60,207,99,252,248,241, + 80,42,149,88,190,124,57,172,86,43,150,44,89,34,70,180,68,68,68,60,121,17,227,162,69,139,46,46,90,180,200,30,89,2,92,87,213,57,75,162, + 220,84,133,11,38,13,229,109,173,92,181,223,130,59,77,103,227,5,148,71,186,92,164,195,185,186,242,127,63,214,97,246,31,23,240,126,151,54,0,42, + 87,23,174,126,184,9,212,26,53,212,1,26,36,110,61,4,0,21,127,250,211,189,106,90,44,22,187,209,42,40,40,240,104,178,170,19,209,98,100,44, + 54,215,186,13,42,227,192,154,44,149,140,150,132,229,144,30,26,11,134,147,130,181,89,125,210,164,148,86,169,42,28,53,106,20,8,33,246,183,175,90, + 181,106,229,168,229,81,148,16,130,255,132,148,183,193,115,174,142,93,146,111,240,154,30,145,170,100,159,94,135,63,127,120,21,0,240,136,86,107,63,23, + 11,90,221,121,119,96,217,133,3,246,232,227,187,120,227,174,52,11,10,10,244,29,155,54,63,46,13,9,90,127,243,230,205,227,0,152,103,159,125,54, + 184,85,171,86,62,93,147,194,203,21,206,38,203,49,146,37,124,90,44,22,159,242,46,180,149,242,134,80,141,232,173,204,83,74,105,72,72,8,36,18, + 9,130,130,130,16,16,16,96,127,227,86,161,80,64,165,82,217,219,119,250,104,220,68,68,68,254,189,212,16,140,78,133,89,2,80,185,77,150,163,25, + 114,87,133,88,17,129,58,232,229,88,73,40,55,104,46,17,34,107,142,203,156,143,235,8,11,220,25,152,82,248,172,89,179,230,175,26,141,38,214,75, + 66,236,84,231,45,54,155,229,78,99,120,193,100,17,66,160,9,208,64,169,81,67,25,160,169,180,206,23,132,170,67,137,68,98,191,233,124,249,229,151, + 208,104,52,120,225,133,23,170,221,70,11,168,48,90,82,6,187,228,123,33,145,177,149,76,22,203,178,144,112,28,178,53,53,193,112,28,88,171,111,81, + 178,226,226,98,176,44,139,89,179,102,217,159,224,29,77,86,117,242,236,9,134,16,33,186,37,111,216,176,225,27,132,144,186,0,234,105,181,90,121,86, + 86,86,175,123,62,192,63,24,106,187,99,74,220,53,120,175,238,57,114,214,20,34,89,210,144,160,245,77,154,52,177,71,178,84,42,149,240,182,169,87, + 24,134,113,105,178,156,223,16,100,89,182,188,44,123,121,59,210,49,162,181,104,209,34,187,174,99,36,75,160,58,215,145,160,189,127,255,126,36,39,39, + 99,220,184,113,80,42,149,88,185,114,37,172,86,43,230,205,155,7,165,82,9,153,76,230,93,72,68,68,228,31,141,179,23,113,34,207,169,29,20,113, + 50,53,121,64,85,131,229,88,77,232,240,221,241,233,83,208,53,57,85,41,58,47,23,62,11,22,45,90,180,79,136,100,57,44,175,148,14,71,92,58, + 4,185,92,30,123,229,202,21,123,71,152,158,62,77,38,19,122,246,236,233,115,100,76,120,235,144,101,37,149,140,133,42,64,3,85,96,0,148,26,141, + 179,225,240,120,87,99,24,198,254,68,236,104,180,102,207,158,13,150,101,177,118,237,90,0,192,27,111,188,225,115,27,45,65,19,54,130,12,122,13,109, + 150,61,3,211,87,22,228,28,249,29,44,203,34,162,211,163,224,59,62,3,157,82,3,214,102,245,249,173,195,194,194,66,164,166,166,66,34,145,96,202, + 148,41,149,250,58,114,126,147,109,247,238,221,94,243,14,84,141,100,205,190,89,104,215,81,42,149,204,239,191,255,30,203,243,124,156,94,175,111,208,185, + 115,231,234,53,42,250,23,66,121,107,165,121,31,170,17,189,158,35,71,77,161,77,86,113,113,241,250,155,55,111,158,0,192,140,24,49,34,88,165,82, + 225,179,207,62,211,1,144,109,218,180,201,163,219,114,52,231,222,76,22,199,113,229,101,217,7,132,170,109,97,242,214,48,222,151,50,47,164,149,16,2, + 155,205,6,165,82,89,41,146,165,80,40,32,151,203,125,74,159,136,136,200,191,26,183,85,125,46,232,224,96,154,188,237,231,110,125,117,142,231,17,151, + 6,137,97,24,24,141,70,92,186,116,201,87,29,159,59,198,172,221,254,97,188,155,89,12,66,8,254,219,249,33,168,3,53,80,169,213,24,188,229,128, + 253,143,251,194,194,55,32,87,107,16,221,53,193,171,158,240,36,238,108,180,138,138,138,192,113,28,230,207,159,15,134,97,176,100,201,18,196,196,196,224, + 214,173,91,216,180,105,147,87,93,179,217,12,137,77,130,154,207,55,133,106,84,16,2,159,239,134,26,125,103,35,211,196,226,168,65,133,110,134,63,32, + 219,181,2,38,222,230,243,27,88,86,171,21,7,14,28,112,110,240,110,111,83,101,181,90,97,177,88,96,54,155,177,100,201,18,95,222,240,172,52,47, + 220,208,132,117,148,82,73,74,74,74,56,165,52,4,64,16,128,124,159,18,250,47,166,102,167,9,8,111,255,10,0,96,235,162,23,237,203,103,93,184, + 83,62,151,126,85,62,0,64,147,122,222,203,167,163,102,65,65,129,190,127,207,206,7,13,60,247,69,139,22,45,42,69,178,20,10,5,169,152,247,41, + 92,198,48,12,36,18,73,149,234,66,119,102,203,151,54,90,86,171,21,82,169,212,126,29,185,43,215,213,141,104,49,12,131,23,95,124,17,53,107,214, + 180,71,178,222,125,247,93,40,149,74,204,152,49,3,22,139,5,43,86,172,240,89,79,68,68,68,196,11,126,51,73,254,192,229,63,169,193,96,184,209, + 178,101,75,151,59,24,12,134,24,133,66,81,233,95,150,84,116,94,234,92,133,72,8,233,67,41,221,227,172,33,68,111,2,2,3,160,208,168,161,114, + 138,98,41,2,2,33,215,104,192,72,171,254,153,187,210,20,218,150,56,26,45,97,42,46,46,6,199,113,88,181,106,21,2,3,3,97,52,26,189,106, + 10,55,29,137,68,2,93,122,41,254,92,184,7,50,197,81,52,72,24,138,154,156,18,210,195,63,66,111,171,220,102,203,23,205,70,141,26,225,157,119, + 222,169,210,173,131,59,98,98,98,188,230,221,57,146,181,244,161,58,144,202,164,152,250,71,58,140,70,35,25,58,116,40,15,64,15,32,79,175,215,223, + 244,229,247,188,87,254,9,154,158,222,138,21,224,169,205,213,118,46,53,133,72,150,129,231,190,72,77,77,21,34,89,65,42,149,10,159,126,250,169,14, + 0,51,111,222,60,85,221,186,117,171,244,113,230,170,44,73,36,18,44,91,182,204,101,155,44,87,166,203,151,188,11,215,145,227,190,221,187,119,119,217, + 97,169,43,243,230,74,83,72,107,104,104,168,61,146,101,179,217,236,111,27,10,189,207,187,123,168,248,39,148,37,81,83,212,20,53,255,221,184,188,203, + 103,101,101,245,119,183,67,131,6,13,174,92,185,114,165,161,48,20,71,197,31,167,212,96,48,52,234,220,185,179,215,208,14,207,243,144,203,229,160,148, + 162,215,59,139,65,24,128,65,229,155,88,68,151,222,144,72,88,240,229,67,125,120,125,235,80,175,215,87,186,57,184,154,202,202,202,96,52,26,189,190, + 150,46,96,48,24,42,117,193,64,40,143,180,223,190,175,242,246,161,48,249,218,110,71,161,80,84,170,250,241,132,183,254,174,132,155,147,99,213,163,84, + 38,5,43,229,132,136,86,233,149,43,87,18,125,74,152,8,128,59,47,44,0,64,227,206,143,129,231,109,160,54,91,165,97,146,154,198,246,7,79,109, + 48,91,116,48,26,141,222,186,61,33,249,249,249,250,196,196,196,3,0,62,127,226,137,39,82,80,254,198,11,213,104,52,114,142,227,120,0,133,0,232, + 237,219,183,131,50,51,51,121,131,193,80,199,91,58,147,146,146,112,233,210,37,116,237,218,181,210,112,80,66,84,212,177,119,119,95,202,167,80,93,238, + 170,71,120,119,70,206,87,132,198,240,82,169,20,243,231,207,135,84,42,133,74,165,2,0,172,88,177,194,222,249,170,136,136,136,200,63,145,187,121,235, + 80,226,161,90,209,99,21,162,213,106,205,168,91,183,110,181,14,102,179,217,114,60,173,231,121,62,99,211,166,77,82,160,106,227,101,119,159,148,82,143, + 154,148,210,140,173,91,183,218,223,115,119,188,73,185,250,78,202,27,159,123,212,180,217,108,25,245,234,221,25,175,216,23,99,102,177,88,50,61,173,231, + 121,30,139,243,244,142,233,198,212,63,210,221,142,157,40,226,25,155,205,230,161,124,190,237,110,31,111,229,243,106,227,198,141,51,131,131,131,183,71,70, + 70,22,28,57,114,36,180,67,135,14,161,142,219,116,232,208,161,166,211,110,38,184,31,231,16,132,144,140,39,158,120,194,101,153,7,96,55,240,78,229, + 211,99,87,243,148,210,140,147,39,79,74,29,247,119,167,239,112,29,121,238,190,190,124,155,180,54,109,218,48,142,58,238,202,190,197,98,113,217,175,141, + 136,136,136,200,131,76,181,141,150,94,175,79,111,217,178,165,203,214,181,174,170,166,28,201,207,207,111,95,221,227,121,195,108,54,119,126,16,52,243,242, + 242,252,154,119,171,213,154,81,209,65,169,199,109,252,121,204,127,58,254,62,71,0,144,147,147,211,209,223,154,86,171,213,239,229,211,98,177,248,93,19, + 0,10,10,10,226,239,135,174,136,136,136,200,131,66,181,141,150,56,24,241,223,131,251,97,90,69,68,68,68,68,68,68,252,139,79,189,80,139,136,136, + 136,136,136,136,136,136,84,31,130,242,81,170,171,80,157,183,9,8,33,46,53,60,225,77,95,212,20,53,69,77,81,83,212,20,53,69,205,127,158,166, + 55,237,127,220,219,140,66,195,233,251,49,1,232,35,106,138,154,162,166,168,41,106,138,154,162,166,168,249,111,157,196,170,67,17,17,17,17,17,17,17, + 145,251,196,255,124,80,105,145,114,8,33,18,74,169,207,61,234,251,64,13,0,238,6,140,51,1,184,125,23,154,4,128,180,98,18,58,58,178,0,48, + 87,76,62,244,33,49,151,201,202,170,209,156,218,184,14,148,16,142,231,113,174,78,157,218,103,129,254,38,0,208,68,53,107,166,81,43,251,24,205,166, + 88,57,39,187,84,164,45,219,109,200,73,185,113,23,105,21,17,17,17,17,17,249,219,225,214,104,5,4,4,156,102,24,166,150,183,254,121,4,42,198, + 50,203,40,44,44,244,233,109,56,66,8,11,32,81,163,209,244,228,56,174,11,0,88,44,150,35,101,101,101,251,0,108,162,148,250,54,64,91,85,221, + 64,0,67,0,12,175,88,244,53,128,239,41,165,37,119,169,215,50,40,40,232,7,142,227,104,126,126,126,39,0,8,13,13,61,110,177,88,72,73,73, + 201,96,74,233,249,106,234,49,28,199,45,237,218,181,107,55,66,200,231,148,210,85,119,147,46,23,200,25,134,113,105,80,120,158,175,231,106,185,23,164, + 0,130,86,173,90,21,186,113,227,198,54,25,25,25,45,0,160,86,173,90,23,70,140,24,113,118,226,196,137,5,0,138,81,110,184,220,146,149,85,163, + 121,110,246,245,113,57,185,151,134,0,64,84,205,22,223,75,36,140,52,38,230,204,49,85,216,240,176,198,77,234,191,242,237,103,171,164,245,98,107,99, + 239,209,51,173,39,190,254,86,115,69,100,227,15,69,179,245,191,35,48,48,240,52,195,48,181,0,247,215,184,171,107,222,102,179,101,20,20,20,184,188, + 222,3,3,3,79,179,44,91,203,221,190,238,150,241,60,127,61,47,47,207,101,87,19,65,65,65,199,88,150,141,245,85,75,248,180,90,173,25,238,222, + 210,13,10,10,58,45,145,72,106,121,202,167,171,117,60,207,95,207,205,205,117,151,206,42,121,247,71,58,239,70,211,83,58,221,65,8,25,2,96,14, + 202,31,180,150,80,74,191,168,206,254,34,34,34,149,113,107,180,24,134,169,149,153,153,25,161,86,171,1,220,25,143,79,24,76,154,231,121,80,74,237, + 159,86,171,21,77,155,54,245,233,160,132,144,22,129,129,129,155,103,204,152,81,39,49,49,81,38,12,53,147,149,149,213,232,135,31,126,120,110,254,252, + 249,179,9,33,207,80,74,47,248,168,199,0,232,13,96,84,155,54,109,158,126,247,221,119,165,189,122,245,130,205,102,195,246,237,219,187,206,155,55,111, + 21,33,228,71,0,235,1,252,70,41,245,105,112,101,66,200,35,81,81,81,223,28,62,124,184,102,106,106,170,45,49,49,241,59,0,56,125,250,116,156, + 205,102,35,157,58,117,74,34,132,12,163,148,30,246,41,227,229,60,253,218,107,175,61,59,97,194,132,136,23,94,120,97,52,128,85,21,199,34,0,64, + 43,42,191,171,129,61,146,69,41,149,122,216,46,10,190,71,182,212,169,169,169,53,58,119,238,252,106,110,110,238,100,71,221,156,156,28,36,39,39,155, + 23,46,92,184,236,232,209,163,159,196,198,198,222,6,160,117,39,68,109,92,135,156,220,75,67,186,197,175,10,2,128,77,91,95,29,122,242,108,94,192, + 182,29,107,158,147,41,164,198,141,255,93,38,109,216,160,30,246,159,190,138,19,151,10,73,139,71,6,178,197,219,54,244,5,176,198,135,116,138,248,1, + 137,68,18,147,145,145,17,161,82,169,92,14,28,239,212,46,67,232,0,21,141,26,53,114,171,201,178,108,173,204,204,204,8,133,66,97,255,239,112,254, + 207,0,42,143,215,73,41,69,227,198,141,221,26,119,134,97,234,222,188,121,51,66,165,82,217,117,92,165,79,64,48,28,141,27,55,246,148,247,74,233, + 244,69,147,82,138,134,13,27,186,141,70,11,121,23,70,192,240,150,111,65,51,54,54,214,237,181,239,74,211,151,116,214,175,95,223,227,131,80,197,182, + 44,128,185,0,212,0,102,2,152,123,235,214,173,70,18,137,4,181,106,213,154,67,8,249,30,192,252,176,176,48,38,63,63,255,77,74,169,87,77,17, + 17,145,59,184,53,90,132,16,168,213,106,124,247,221,119,110,135,227,112,252,94,167,142,215,81,67,4,221,246,177,177,177,7,14,31,62,172,172,89,243, + 78,135,216,38,147,9,53,106,212,192,248,241,227,101,143,63,254,120,195,132,132,132,227,132,144,238,148,210,211,94,244,158,14,15,15,255,104,214,172,89, + 145,207,62,251,44,66,67,43,117,186,141,196,196,68,12,30,60,88,154,146,146,50,244,203,47,191,28,186,122,245,234,108,66,200,68,74,233,143,158,116, + 85,42,213,19,13,26,52,248,244,240,225,195,17,17,17,17,136,139,139,99,222,124,243,205,134,141,26,53,82,214,170,85,139,185,117,235,22,182,108,217, + 18,51,108,216,176,205,50,153,236,21,147,201,244,179,15,121,151,133,134,134,190,245,202,43,175,132,149,148,148,88,147,147,147,175,8,203,101,50,217,188, + 248,248,248,14,132,144,175,40,165,235,188,105,57,96,143,100,85,68,237,156,199,50,177,8,235,125,140,108,201,206,157,59,23,18,31,31,255,163,209,104, + 108,59,110,220,184,155,11,23,46,84,6,6,6,6,2,32,37,37,37,183,231,206,157,107,90,190,124,249,180,102,205,154,245,62,118,236,216,211,173,91, + 183,182,160,220,196,85,129,18,98,79,79,122,102,30,14,28,229,101,239,204,120,163,214,123,11,98,211,78,253,145,206,179,202,64,252,114,240,34,114,10, + 202,240,235,177,63,16,21,26,64,164,114,174,121,112,173,230,221,139,51,255,56,120,23,198,83,164,154,16,66,160,82,169,240,203,47,191,84,25,186,202, + 213,176,86,44,203,34,56,56,216,235,232,6,10,133,2,187,119,239,118,57,246,162,171,33,125,130,130,130,0,184,31,84,155,16,2,133,66,129,35,71, + 142,128,97,24,151,67,3,57,47,83,171,213,96,60,140,117,37,104,30,60,120,208,171,150,240,169,209,104,0,160,202,152,148,142,200,229,114,28,62,124, + 216,109,158,157,191,107,42,198,123,245,166,121,228,200,145,74,67,127,57,15,9,230,56,175,86,171,237,15,112,94,152,187,101,203,150,183,34,34,34,48, + 104,208,160,103,154,54,109,26,17,28,28,140,207,63,255,28,81,81,81,49,90,173,246,234,150,45,91,162,243,243,243,241,218,107,175,73,1,188,234,131, + 166,136,136,191,225,0,180,6,16,142,242,81,104,74,1,4,163,252,222,35,3,80,0,64,89,49,25,1,148,1,8,171,216,55,31,229,255,45,142,6, + 33,15,149,7,159,238,80,161,45,140,80,17,238,176,78,56,134,243,188,243,167,75,109,22,0,146,146,146,132,155,89,143,1,3,6,28,168,148,51,31, + 76,150,48,78,153,243,53,77,171,14,48,43,87,171,213,63,28,63,126,92,25,30,126,39,15,70,163,17,165,165,165,40,43,43,67,105,105,41,2,2, + 2,176,105,211,38,101,239,222,189,127,32,132,52,162,148,26,221,105,2,88,118,235,214,173,72,171,213,10,153,204,117,19,37,134,97,208,180,105,83,188, + 245,214,91,232,215,175,95,84,207,158,61,151,1,176,27,45,23,154,80,169,84,159,38,39,39,71,168,84,42,92,185,114,5,25,25,25,152,58,117,106, + 109,158,231,145,158,158,142,171,87,175,34,51,51,19,95,126,249,101,196,147,79,62,249,41,128,74,70,203,149,38,128,113,147,39,79,110,82,163,70,13, + 230,253,247,223,47,210,106,181,31,87,44,127,103,229,202,149,207,119,235,214,45,98,204,152,49,148,16,178,145,82,90,197,184,56,105,186,138,100,217,0, + 252,233,180,91,83,167,72,87,20,202,11,97,145,11,77,2,32,40,33,33,97,138,209,104,108,123,248,240,225,191,186,116,233,82,23,192,45,84,20,190, + 160,160,32,245,178,101,203,34,7,14,28,152,210,171,87,175,182,9,9,9,83,242,242,242,22,86,172,167,206,154,60,143,115,81,53,91,124,127,240,216, + 196,33,251,143,152,164,111,188,62,251,102,157,218,245,138,207,93,41,180,253,113,61,15,165,122,43,158,234,85,62,128,121,167,22,117,240,209,119,135,49, + 126,210,219,220,143,223,111,24,252,23,133,26,64,146,135,223,243,158,16,53,203,169,168,98,2,199,113,120,244,209,71,65,8,169,50,150,39,199,113,56, + 118,236,24,122,245,234,5,142,227,240,226,139,47,250,164,201,178,44,18,18,18,236,227,40,58,234,57,155,6,87,158,192,57,239,148,82,176,44,11,134, + 97,220,14,164,237,172,233,237,127,73,72,167,39,45,199,117,222,210,41,68,147,124,53,89,190,106,10,233,100,89,22,157,59,119,198,217,179,103,61,154, + 46,87,254,210,77,89,82,156,63,127,30,221,187,119,199,185,115,231,162,56,142,67,114,114,50,100,50,25,22,45,90,196,52,109,218,52,58,32,32,0, + 251,246,237,67,86,86,150,175,154,247,132,168,249,239,212,244,228,69,0,116,155,49,99,70,251,197,139,23,47,140,143,143,255,246,232,209,163,223,16,66, + 182,81,74,7,10,159,51,102,204,104,190,120,241,226,133,211,167,79,127,107,209,162,69,23,9,33,219,0,192,121,190,34,253,3,29,180,57,0,225,130, + 14,0,56,111,235,106,222,249,211,141,246,157,136,214,128,1,3,72,69,38,137,195,198,62,27,45,95,30,156,88,150,157,176,112,225,194,72,79,38,171, + 172,172,12,89,89,89,168,91,183,46,94,124,241,197,200,85,171,86,77,0,240,129,7,89,169,68,34,193,201,147,39,145,155,155,139,150,45,91,34,54, + 54,182,210,6,215,174,93,195,246,237,219,81,84,84,132,118,237,218,1,229,237,143,92,210,186,117,235,57,77,155,54,77,72,72,72,176,42,149,74,156, + 59,119,14,109,219,182,197,119,223,125,135,58,117,234,64,165,82,33,37,37,5,45,91,182,196,129,3,7,16,30,30,142,54,109,218,88,219,181,107,119, + 168,176,176,112,223,141,27,55,230,184,210,37,132,72,99,98,98,102,143,29,59,86,150,149,149,197,175,95,191,254,48,165,244,48,33,100,194,219,111,191, + 61,186,95,191,126,17,103,206,156,41,62,117,234,212,9,87,38,203,5,174,34,89,149,218,181,85,84,217,24,245,122,189,201,104,52,90,24,134,185,65, + 8,49,217,108,54,119,117,62,138,81,163,70,213,207,207,207,31,63,105,210,164,212,10,147,117,25,229,13,224,1,0,86,171,213,88,86,86,86,18,31, + 31,95,119,216,176,97,127,125,243,205,55,227,71,141,26,181,105,253,250,245,101,0,244,206,130,117,234,212,62,43,145,48,82,109,105,200,245,205,155,214, + 77,222,190,117,66,237,244,244,204,134,161,97,225,90,169,38,60,107,211,215,95,156,6,96,202,202,43,193,249,107,217,224,56,9,46,165,23,163,91,255, + 68,238,175,43,11,30,65,133,209,18,185,175,80,97,16,234,253,251,247,123,140,104,29,59,118,12,28,199,65,169,84,98,249,242,229,30,69,5,99,32, + 68,139,188,153,25,97,112,116,119,8,102,67,24,232,221,121,250,248,227,143,49,105,210,164,74,199,168,48,27,30,163,100,142,6,198,57,125,117,235,213, + 67,110,78,78,165,101,190,12,74,111,179,217,192,113,28,214,174,93,139,129,3,7,98,219,182,109,30,63,31,125,244,81,48,12,227,49,122,43,164,179, + 115,231,206,48,155,205,246,52,95,190,124,217,165,238,234,213,171,189,166,179,130,153,115,231,206,125,90,171,213,214,14,15,15,135,92,46,135,82,169,132, + 82,169,132,66,161,64,94,94,30,50,51,51,233,162,69,139,242,0,76,243,85,84,68,228,110,112,229,69,42,144,47,94,188,120,161,179,137,113,68,88, + 79,8,217,182,104,209,162,129,192,29,83,228,56,95,177,185,227,216,170,221,102,204,152,209,220,97,62,207,209,68,9,11,61,29,219,105,251,74,227,182, + 218,141,86,69,198,122,8,243,12,195,64,248,243,245,102,178,220,61,57,58,19,20,20,244,216,83,79,61,101,55,57,6,131,193,110,176,4,147,37,204, + 167,164,164,160,125,251,246,210,160,160,160,199,224,217,104,149,103,132,101,17,29,29,141,252,252,124,92,184,112,1,117,235,214,133,197,98,193,206,157,59, + 81,92,92,12,142,227,32,149,74,97,54,123,110,94,208,180,105,211,71,55,110,220,216,126,195,134,13,183,37,18,9,46,95,190,140,175,191,254,26,148, + 82,132,135,135,67,167,211,33,39,39,7,251,246,237,131,213,106,133,70,163,65,92,92,156,236,137,39,158,120,100,238,220,185,28,202,27,145,186,162,243, + 224,193,131,131,2,3,3,241,250,235,175,83,179,217,188,136,16,210,121,240,224,193,179,39,78,156,24,122,227,198,13,211,75,47,189,116,210,108,54,191, + 15,0,132,16,142,82,106,113,163,5,192,115,36,203,98,177,8,191,105,106,89,89,25,194,194,194,234,122,105,195,5,0,210,35,71,142,116,6,32,153, + 55,111,158,2,64,14,28,76,150,201,100,66,89,89,25,180,90,173,165,184,184,56,247,63,255,249,143,245,155,111,190,145,84,236,115,9,46,140,22,208, + 223,244,208,67,106,25,165,146,183,215,172,89,163,233,215,175,31,163,209,104,80,90,90,26,248,235,142,29,154,222,61,31,137,91,184,248,189,93,129,181, + 90,230,28,57,119,29,153,217,197,48,89,44,136,171,25,4,128,247,169,45,157,200,189,81,241,34,139,61,162,229,104,42,14,30,60,136,254,253,251,219, + 175,117,169,84,90,41,242,229,77,147,101,89,244,239,223,191,74,132,103,67,39,186,162,0,0,32,0,73,68,65,84,255,254,253,46,163,79,222,112,52, + 69,206,230,200,149,1,99,24,166,74,251,37,87,154,238,170,52,1,84,89,231,139,209,18,242,59,113,226,68,112,28,135,55,223,124,19,44,203,162,77, + 155,54,96,89,22,241,241,241,224,56,14,189,122,245,170,118,222,143,31,63,142,182,109,219,218,211,212,166,77,27,116,232,208,1,44,203,162,107,215,174, + 224,56,14,9,9,9,62,105,10,13,223,227,227,227,99,38,79,158,140,31,127,252,17,83,167,78,181,90,44,150,235,0,240,242,203,47,199,77,157,58, + 85,162,213,106,73,108,108,108,216,229,203,151,79,19,66,196,6,242,34,247,13,103,47,226,128,126,250,244,233,111,17,66,182,9,17,42,160,114,228,201, + 213,188,51,14,102,72,168,218,235,128,202,38,78,168,246,27,224,97,95,147,147,177,114,174,58,116,172,146,244,28,209,18,254,124,125,53,90,222,48,24, + 12,173,35,34,34,132,239,85,76,150,227,167,201,100,66,108,108,44,12,6,67,107,175,194,149,127,8,212,172,89,19,102,179,25,235,214,173,131,84,42, + 133,84,122,199,95,152,76,158,131,69,127,252,241,71,234,241,227,199,219,182,107,215,174,198,79,63,253,148,215,189,123,247,240,126,253,250,65,169,84,66, + 175,215,195,98,177,160,83,167,78,104,218,180,41,50,50,50,240,235,175,191,230,55,106,212,40,236,196,137,19,124,118,118,118,154,7,233,190,189,123,247, + 6,33,4,59,118,236,200,167,148,158,82,40,20,219,23,44,88,80,195,100,50,241,35,70,140,184,89,88,88,56,9,128,89,46,151,175,76,72,72,136, + 151,72,36,95,217,108,54,207,97,3,23,56,255,182,90,173,22,10,133,194,151,174,36,184,194,194,194,22,0,160,86,171,67,0,252,37,172,208,235,245, + 149,204,176,201,100,50,132,132,132,168,1,160,98,31,231,182,97,0,0,66,72,184,74,165,218,156,150,118,61,192,177,253,92,112,112,48,134,15,27,198, + 116,233,220,89,214,170,117,235,132,153,31,110,248,46,58,52,208,20,23,29,10,139,205,130,61,187,118,242,148,183,236,170,110,222,69,170,143,99,213,161, + 115,68,139,227,56,28,56,112,160,202,50,169,84,138,255,254,247,191,30,117,5,99,32,152,42,119,85,103,78,85,93,30,255,72,132,40,187,68,34,193, + 218,181,107,193,243,60,38,79,158,92,169,58,209,81,223,23,28,77,96,211,217,60,0,19,50,150,202,237,251,59,167,183,98,31,159,162,100,171,86,173, + 242,41,162,53,96,192,0,175,198,213,177,134,193,49,93,103,207,158,117,169,187,102,205,26,175,191,39,42,26,190,135,132,132,32,57,57,25,74,165,18, + 132,144,91,51,103,206,92,22,28,28,220,167,184,184,184,94,82,82,18,91,84,84,132,132,132,4,166,75,151,46,141,126,251,237,183,143,9,33,27,252, + 220,61,141,136,8,0,143,17,45,227,162,69,139,46,46,90,180,200,101,196,74,216,200,121,222,25,135,168,84,7,148,27,162,112,193,188,161,188,89,205, + 41,31,246,149,57,87,29,122,202,147,115,68,107,174,48,239,248,231,235,75,245,161,143,225,116,150,16,2,131,193,224,210,96,57,154,3,179,217,140,194, + 194,66,216,108,182,187,238,235,203,213,147,172,55,163,117,225,194,133,23,70,143,30,157,21,20,20,212,42,47,47,47,151,231,249,94,199,142,29,11,103, + 89,22,129,129,129,8,12,12,196,246,237,219,161,82,169,48,113,226,196,92,155,205,118,48,32,32,32,84,175,215,255,158,157,157,61,211,157,46,199,113, + 9,93,187,118,69,114,114,50,110,223,190,189,155,16,210,102,204,152,49,253,107,215,174,77,22,44,88,96,184,118,237,218,114,0,185,106,181,122,227,198, + 141,27,123,182,107,215,46,96,196,136,17,32,132,172,161,148,26,124,205,179,86,171,173,100,176,74,74,74,80,90,90,10,181,90,237,83,119,25,148,82, + 14,229,109,173,132,246,86,246,115,83,17,205,18,206,15,101,89,150,150,111,66,93,154,44,0,80,171,213,243,54,108,216,160,116,126,73,193,102,179,33, + 39,39,7,129,129,129,152,53,115,166,244,221,169,99,218,74,52,145,199,24,134,192,100,166,69,148,55,237,212,230,60,123,200,215,124,139,220,27,130,49, + 24,52,104,80,149,234,66,169,84,138,221,187,119,227,201,39,159,180,63,184,180,107,215,206,235,195,149,96,12,30,127,252,113,0,229,145,161,157,59,119, + 186,172,246,19,34,82,158,112,52,48,18,137,4,175,189,246,26,88,150,197,71,31,125,132,41,83,166,128,97,24,44,93,186,20,12,195,224,157,119,222, + 241,41,223,206,6,230,198,123,229,159,181,166,148,160,96,117,36,0,32,32,48,80,200,144,79,154,66,222,89,150,181,71,178,90,183,110,13,142,227,16, + 31,31,15,150,101,237,145,172,199,30,123,204,241,119,244,120,0,65,147,101,89,92,185,114,197,158,230,248,248,248,74,145,44,150,101,49,96,64,149,135, + 113,183,240,60,143,117,235,214,65,38,147,9,70,11,50,153,172,243,148,41,83,158,118,181,253,67,15,61,196,161,252,101,0,209,104,137,248,29,103,47, + 226,64,13,199,54,87,190,234,57,152,40,251,60,80,181,26,176,34,66,118,208,155,150,171,125,189,193,2,229,14,210,213,202,234,24,45,137,68,226,245, + 143,87,165,82,157,207,205,205,141,87,42,149,149,76,150,43,195,37,145,72,144,157,157,13,149,74,85,173,126,170,188,225,173,234,176,194,212,76,21,230, + 9,33,125,30,123,236,177,245,187,119,239,174,185,103,207,30,156,56,113,2,225,225,225,88,181,106,213,173,156,156,156,23,40,165,187,125,57,110,253,250, + 245,91,104,52,26,28,57,114,4,0,14,0,24,51,126,252,120,98,177,88,176,122,245,106,45,128,29,193,193,193,73,155,54,109,106,219,170,85,43,217, + 158,61,123,74,78,156,56,241,155,143,38,203,198,243,124,21,131,229,248,155,6,4,4,248,242,167,104,9,10,10,186,80,82,82,146,168,215,235,75,228, + 114,121,64,73,73,137,209,209,96,9,250,44,203,114,87,174,92,201,2,16,23,20,20,116,1,14,85,140,142,176,44,219,187,119,239,222,149,204,178,217, + 108,70,78,78,14,178,179,179,97,54,155,209,174,93,59,34,33,22,73,225,205,223,199,250,144,70,17,63,67,8,161,194,181,46,188,37,232,60,177,44, + 139,157,59,119,218,231,25,134,193,23,95,184,175,61,114,52,69,187,119,239,118,27,197,114,81,117,232,53,52,46,108,255,201,39,159,148,15,111,81,17, + 201,98,24,6,211,167,79,135,92,46,199,130,5,11,48,125,250,116,176,44,235,181,234,208,209,192,212,123,83,103,95,46,84,29,90,42,218,67,17,66, + 28,205,150,199,136,150,163,121,243,20,205,243,237,165,192,202,13,236,89,150,133,66,161,112,89,125,234,66,211,219,1,102,199,196,196,204,9,15,15,111, + 176,108,217,50,137,82,169,196,152,49,99,98,180,90,237,16,0,88,190,124,57,38,79,158,12,0,152,54,109,26,22,47,94,12,189,94,95,230,131,174, + 136,72,181,113,231,69,42,200,115,106,95,69,28,171,241,60,124,58,111,15,135,101,142,186,121,168,124,31,115,92,238,108,174,156,143,225,184,77,165,246, + 89,128,151,238,29,170,211,24,222,151,136,150,78,167,251,109,199,142,29,29,134,13,27,198,122,170,54,212,106,181,136,140,140,196,197,139,23,173,58,157, + 238,55,111,186,54,155,239,15,86,222,140,150,51,148,210,61,81,81,81,18,139,197,130,134,13,27,34,38,38,6,6,131,1,69,69,69,18,95,77,22, + 33,68,218,190,125,123,9,0,20,21,21,1,229,175,154,54,110,212,168,17,146,147,147,81,88,88,248,35,128,126,115,231,206,109,215,169,83,39,233,119, + 223,125,167,27,55,110,220,143,22,139,101,142,47,250,60,207,155,172,86,107,44,195,48,230,162,162,162,76,199,223,51,50,50,50,68,173,86,147,156,156, + 28,143,237,189,42,176,180,106,213,234,228,205,155,55,49,111,222,188,188,133,11,23,54,42,45,45,189,93,92,92,108,117,52,91,6,131,129,9,11,11, + 147,175,94,189,90,9,0,173,90,181,58,9,55,70,75,171,213,214,86,169,84,246,121,163,209,136,236,236,108,100,103,103,35,39,39,7,165,165,165,136, + 139,139,131,78,167,171,235,75,94,69,252,143,243,91,114,142,215,183,227,141,188,58,215,58,112,199,192,12,26,52,200,222,182,75,136,144,9,211,230,205, + 155,29,171,13,1,31,141,214,39,159,124,130,215,94,123,13,10,133,2,203,150,45,171,84,117,232,108,94,120,158,247,106,138,88,150,69,236,52,61,178, + 87,134,128,227,56,132,142,203,169,84,69,231,194,16,249,148,206,133,11,23,250,165,234,208,81,179,110,221,186,0,128,181,107,215,34,49,49,17,135,14, + 29,186,235,170,67,74,233,247,132,144,109,86,171,245,74,179,102,205,98,10,10,10,240,250,235,175,51,155,55,111,150,2,192,164,73,147,48,105,210,164, + 74,251,24,12,6,177,237,164,200,255,7,110,171,244,238,147,174,223,142,231,177,90,206,177,145,168,55,163,229,75,68,203,104,52,46,123,253,245,215,199, + 247,233,211,39,36,32,32,0,89,89,89,85,76,86,89,89,25,52,26,13,244,122,61,182,110,221,90,98,52,26,151,121,201,131,197,98,177,32,34,34, + 2,249,249,249,224,221,180,159,102,24,6,74,165,18,101,101,101,128,27,83,224,14,74,41,204,102,51,44,22,11,44,22,11,204,102,179,215,167,100,39, + 84,66,199,175,90,173,22,0,180,209,209,209,13,21,10,5,82,83,83,129,242,55,251,250,244,239,223,159,43,40,40,160,47,189,244,210,97,74,233,88, + 234,185,119,124,211,193,131,7,99,1,64,169,84,166,0,64,70,70,134,165,168,168,168,82,164,80,165,82,209,39,159,124,178,38,165,20,7,15,30,140, + 149,74,165,20,110,250,188,2,96,248,249,231,159,255,8,10,10,250,102,241,226,197,195,6,14,28,120,177,69,139,22,177,90,173,54,87,175,215,235,13, + 6,3,149,72,36,210,26,53,106,40,118,237,218,245,215,177,99,199,250,4,6,6,126,243,243,207,63,255,1,192,101,228,77,173,86,103,232,116,186,122, + 194,57,117,52,89,217,217,217,160,148,226,250,245,235,80,169,84,55,171,243,131,138,248,23,225,161,202,57,242,226,188,204,87,147,37,192,178,44,118,237, + 218,229,54,170,83,29,227,230,104,138,166,76,153,130,149,43,87,86,137,104,45,88,176,0,0,48,115,230,76,159,219,104,1,229,209,171,236,149,33,136, + 122,173,176,82,218,1,128,8,233,171,102,151,110,44,203,98,222,188,121,85,26,169,59,86,237,85,167,138,79,72,103,110,110,46,88,150,69,72,72,8, + 134,15,31,142,132,132,4,123,21,228,93,234,206,255,241,199,31,99,2,2,2,144,150,150,70,203,202,202,72,65,65,1,0,215,17,45,157,78,39,135, + 24,209,18,17,241,25,143,29,249,1,240,201,100,185,251,3,38,132,244,113,156,167,148,22,235,116,186,225,125,251,246,213,235,116,58,212,175,95,31,114, + 185,28,22,139,5,38,147,9,82,169,20,53,107,214,132,213,106,197,154,53,107,244,58,157,110,56,165,180,216,147,38,128,183,219,183,111,111,72,73,73, + 65,157,58,117,16,16,16,80,101,56,138,192,192,64,4,7,7,35,57,57,25,11,22,44,208,3,120,219,139,102,21,4,131,37,24,46,111,70,203,73, + 83,45,68,117,116,58,29,0,88,106,215,174,29,5,0,215,175,95,7,128,27,113,113,113,61,235,215,175,79,14,29,58,4,74,233,78,87,38,203,73, + 179,176,107,215,174,105,93,187,118,53,153,76,38,169,201,100,146,22,23,23,155,195,194,194,34,194,194,194,194,34,35,35,67,34,34,34,130,179,178,178, + 172,86,171,85,106,179,217,164,93,187,118,53,61,252,240,195,55,225,208,59,188,147,38,15,160,100,205,154,53,115,57,142,75,235,220,185,115,243,105,211, + 166,221,176,88,44,198,152,152,152,26,81,81,81,74,157,78,87,186,104,209,162,220,149,43,87,246,225,56,46,109,205,154,53,115,1,148,84,236,91,69, + 211,106,181,254,182,103,207,30,171,197,98,65,102,102,38,178,178,178,112,235,214,45,251,103,112,112,48,78,158,60,105,51,155,205,30,251,100,241,229,28, + 85,23,81,179,28,161,91,1,79,6,75,120,152,242,85,211,209,20,37,38,38,226,217,103,159,197,208,161,67,49,124,248,112,140,24,49,194,173,113,115, + 190,174,156,243,238,216,199,215,180,105,211,48,115,230,76,204,158,61,27,114,185,28,179,102,205,194,156,57,115,48,103,206,28,103,147,69,60,105,10,121, + 231,56,14,197,107,99,160,91,95,15,166,175,26,148,87,29,82,122,103,242,49,157,194,255,15,199,113,152,53,107,22,142,29,59,134,255,252,231,63,216, + 187,119,47,38,76,152,128,237,219,183,99,236,216,177,72,74,74,178,127,10,178,222,52,133,188,119,239,222,29,58,157,206,110,100,95,121,229,149,74,122, + 99,199,142,245,233,247,172,192,240,237,183,223,226,179,207,62,67,98,98,226,173,193,131,7,219,74,74,202,71,44,155,52,105,146,189,231,249,197,139,23, + 151,111,108,48,200,125,208,188,39,68,205,127,167,230,63,21,143,143,124,86,171,21,181,107,215,174,52,118,22,195,48,149,166,234,180,51,0,0,74,233, + 46,66,200,211,93,186,116,249,234,181,215,94,11,104,211,166,13,87,175,94,61,104,181,90,164,166,166,226,226,197,139,214,159,127,254,185,68,167,211,61, + 71,41,245,250,214,25,165,116,3,33,100,103,191,126,253,222,233,212,169,211,43,179,103,207,150,52,110,220,24,197,197,197,168,81,163,6,34,34,34,112, + 249,242,101,108,221,186,213,150,159,159,255,41,128,119,41,165,85,234,80,189,29,198,108,54,99,232,208,161,224,121,30,203,151,47,7,33,164,58,143,183, + 102,179,217,76,1,144,252,252,124,0,208,85,244,46,141,171,87,175,2,64,90,108,108,108,0,0,236,217,179,135,0,240,117,72,31,10,135,200,86,211, + 166,77,83,129,170,195,154,8,235,81,30,201,242,150,110,195,144,33,67,114,117,58,93,191,41,83,166,188,243,201,39,159,12,251,228,147,79,170,108,20, + 24,24,248,205,210,165,75,223,29,50,100,72,46,220,68,179,0,64,171,213,206,28,57,114,228,144,243,231,207,7,40,20,10,104,181,90,20,20,20,192, + 108,54,35,46,46,14,185,185,185,216,176,97,67,169,94,175,159,227,99,158,69,252,140,163,49,112,23,213,242,102,178,220,193,178,44,126,249,229,151,42, + 81,44,95,26,191,187,75,167,171,182,73,158,162,98,158,30,138,132,110,105,156,219,139,113,156,111,125,3,122,210,101,89,22,239,191,255,62,88,150,117, + 27,201,170,78,228,73,208,12,9,9,1,0,8,67,38,13,24,48,224,158,116,1,204,174,120,131,84,13,96,230,141,27,55,78,183,110,221,186,17,224, + 58,162,37,34,34,82,61,220,26,45,155,205,150,209,164,73,19,0,222,7,46,21,176,88,44,25,190,28,148,82,186,147,16,18,183,116,233,210,215,213, + 106,117,31,157,78,215,18,40,111,44,175,213,106,247,24,141,198,21,180,26,131,64,87,24,167,9,132,144,229,253,250,245,91,208,171,87,175,103,166,78, + 157,74,40,165,88,189,122,53,189,118,237,218,102,0,111,83,74,175,249,170,233,72,72,72,200,31,95,124,241,69,228,79,63,253,4,139,197,130,21,43, + 86,32,32,32,224,143,106,164,47,151,101,217,245,157,59,119,126,254,216,177,99,27,40,165,191,203,100,178,47,31,121,228,145,145,199,142,29,251,154,82, + 122,145,101,217,47,59,117,234,52,242,212,169,83,155,40,165,103,171,145,188,194,174,93,187,222,6,16,101,181,186,174,105,236,218,181,171,9,64,54,188, + 155,44,129,146,209,163,71,155,71,143,30,61,117,200,144,33,235,78,157,58,213,177,168,168,168,37,0,4,7,7,159,239,208,161,195,201,239,191,255,254, + 50,202,35,89,30,27,235,83,74,243,8,33,79,182,108,217,242,199,249,243,231,171,155,55,111,206,54,108,216,16,55,110,220,192,133,11,23,172,159,127, + 254,121,153,94,175,31,68,41,245,101,12,70,145,251,128,16,125,10,14,14,174,244,16,37,244,75,85,221,234,66,1,65,211,249,1,77,34,145,184,213, + 244,212,109,130,128,70,163,177,119,110,234,75,147,5,222,93,123,2,135,116,10,154,194,228,131,201,242,250,134,96,197,16,56,62,107,250,210,189,131,90, + 173,134,197,98,177,235,250,240,230,167,247,140,148,71,207,237,81,126,66,200,236,115,231,206,109,0,32,117,213,70,75,68,68,164,122,184,53,90,133,133, + 133,46,71,145,247,23,21,70,234,221,138,201,95,154,215,0,12,33,132,124,176,119,239,222,89,21,139,231,81,47,227,37,122,227,207,63,255,28,200,113, + 220,127,191,249,230,155,78,148,82,4,5,5,29,191,113,227,198,203,213,209,176,90,173,163,9,33,227,133,183,8,77,38,211,104,66,200,235,148,210,50, + 135,245,246,249,106,66,1,24,41,165,209,110,214,27,225,187,201,18,48,0,48,125,255,253,247,101,0,206,225,78,63,89,150,138,201,0,135,234,66,143, + 137,163,116,31,33,164,225,172,89,179,22,74,36,146,222,90,173,54,70,173,86,167,91,173,214,223,116,58,221,219,148,210,130,106,166,77,196,143,152,76, + 166,204,38,77,154,176,64,213,7,40,79,55,114,79,15,86,54,155,45,163,81,163,70,94,31,206,92,104,102,186,91,71,41,77,139,139,139,99,124,213, + 18,48,155,205,185,158,210,25,23,23,231,115,250,28,210,233,49,239,177,177,177,46,243,238,9,158,231,221,230,221,106,181,222,149,166,167,223,211,29,148, + 210,239,99,98,98,38,135,134,134,54,53,24,12,50,131,193,32,117,140,10,42,149,202,98,171,187,167,58,17,17,145,42,220,117,31,85,127,103,42,140, + 213,227,126,212,51,2,120,222,15,58,6,167,249,50,79,243,213,228,126,68,132,120,0,58,175,91,249,0,165,52,31,192,75,254,208,18,241,47,249,249, + 249,15,251,91,179,160,160,192,239,15,106,121,121,121,241,254,214,204,207,207,247,123,58,31,20,77,79,100,102,102,250,189,76,136,136,252,91,185,187,58, + 1,17,17,17,17,17,17,17,17,17,175,16,0,46,223,28,160,213,24,153,251,110,222,62,240,166,47,106,138,154,162,166,168,41,106,138,154,162,230,63, + 79,211,155,118,117,252,199,3,129,240,234,238,253,152,0,244,17,53,69,77,81,83,212,20,53,69,77,81,83,212,252,183,78,98,213,225,223,136,118,132, + 184,29,51,240,239,164,41,34,34,34,34,34,34,226,27,46,27,195,43,107,145,142,234,16,102,131,205,76,111,91,12,244,133,210,27,52,69,93,155,244, + 5,131,103,1,196,202,164,210,154,38,147,57,13,20,59,109,12,182,24,210,232,141,187,77,64,68,68,196,25,165,82,25,89,82,82,146,119,251,246,237, + 214,65,65,65,55,131,131,131,89,147,201,116,225,214,173,91,253,239,70,179,113,184,186,95,155,22,245,63,191,122,61,227,136,173,152,127,249,92,81,81, + 177,247,189,254,247,154,0,64,8,145,52,14,69,127,2,140,9,170,175,232,223,36,156,28,160,192,103,108,62,126,254,131,210,234,141,23,116,159,52,9, + 33,76,96,96,224,166,160,160,160,4,150,101,109,66,7,151,132,16,154,157,157,141,178,178,178,112,234,166,23,251,255,101,89,18,17,17,17,17,241,29, + 142,227,150,133,132,132,140,214,106,181,85,186,233,113,49,148,85,134,78,167,251,159,190,148,241,79,193,181,209,210,72,151,46,223,49,188,225,233,27,59, + 176,110,104,206,124,117,29,18,212,251,217,135,122,245,27,222,26,193,17,74,200,53,12,138,242,75,27,252,121,58,189,207,190,239,175,188,167,8,147,164, + 241,165,172,133,82,170,181,88,44,35,40,165,41,190,38,64,173,86,215,188,126,253,122,100,76,76,140,5,0,66,66,66,164,142,243,119,131,84,42,25, + 189,126,209,235,81,41,231,79,60,51,225,253,159,155,54,136,210,244,248,43,187,44,255,110,245,4,205,47,230,191,26,117,229,143,51,126,209,108,16,65, + 226,88,138,209,173,107,73,95,120,233,201,174,81,3,251,116,65,141,136,154,200,72,191,217,119,251,158,35,125,191,223,113,178,168,113,56,249,82,34,193, + 186,75,217,244,210,255,151,38,0,4,5,5,173,28,53,106,212,227,189,123,247,230,130,130,130,16,17,17,1,133,66,1,185,92,142,78,157,58,21,148, + 149,149,177,0,92,27,173,106,150,37,85,93,50,71,127,19,11,41,165,226,120,106,255,16,8,33,141,107,215,174,253,163,82,169,12,76,73,73,153,73, + 41,93,127,31,143,53,188,83,167,78,43,206,157,59,119,198,104,52,190,94,157,255,34,17,145,127,19,18,137,100,69,143,30,61,134,173,94,189,58,96, + 215,174,93,1,15,61,244,16,76,38,147,125,188,97,157,78,103,31,22,207,102,179,97,245,234,213,255,223,73,126,96,113,105,180,228,10,73,120,112,80, + 13,212,168,205,34,170,78,141,65,111,172,26,200,70,54,80,32,199,118,17,57,180,8,54,171,9,210,26,106,52,234,87,3,109,18,122,73,126,89,115, + 33,238,198,30,14,175,62,63,197,246,242,75,47,239,4,80,183,186,9,81,169,84,53,234,213,171,151,21,21,21,165,4,0,43,49,75,3,227,152,95, + 195,227,148,15,223,186,170,251,143,46,141,126,230,110,223,30,132,176,105,117,239,228,69,97,83,37,205,95,246,217,224,25,67,219,146,181,83,122,55,123, + 117,229,111,199,26,133,42,187,95,41,208,103,249,154,30,87,154,115,63,92,55,120,214,243,157,238,90,211,17,150,98,251,158,61,187,27,133,112,122,80, + 221,29,191,86,171,118,93,188,242,98,93,188,244,210,75,193,127,166,229,78,26,51,225,141,23,0,4,253,127,105,2,128,90,173,142,111,219,182,45,87, + 88,88,136,176,176,48,123,71,150,50,153,204,235,190,119,81,150,230,253,242,209,165,78,164,1,121,138,254,69,221,141,201,40,242,128,64,8,105,220,178, + 101,203,195,71,143,30,13,45,42,42,66,167,78,157,222,3,176,254,126,29,175,125,251,246,75,14,29,58,20,114,228,200,145,190,195,134,13,59,72,8, + 233,86,93,179,69,8,105,92,167,78,157,31,21,10,69,64,74,74,202,116,74,233,215,254,74,31,33,100,84,124,124,252,135,103,206,156,57,109,50,153, + 38,137,70,80,228,255,3,66,200,123,61,123,246,124,122,245,234,213,161,132,16,252,250,235,175,184,122,245,170,189,51,97,31,59,237,245,229,56,45,0, + 16,74,233,249,123,79,245,131,139,199,126,180,24,194,224,221,141,195,88,91,72,38,126,207,221,143,125,159,222,198,95,251,12,38,67,41,95,16,217,84, + 26,221,234,9,21,58,62,153,131,199,198,53,196,94,245,13,156,255,235,172,68,165,82,5,184,211,11,11,11,75,10,8,8,8,100,24,198,126,6,245, + 122,189,106,214,172,89,124,74,74,138,134,16,162,41,188,93,128,230,157,26,208,184,254,52,234,209,137,109,163,194,234,40,48,171,219,201,105,0,92,26, + 173,22,209,154,119,250,141,232,55,179,171,92,202,241,22,51,120,155,25,188,197,12,86,66,113,238,74,38,218,214,86,96,253,132,246,245,199,126,114,234, + 98,253,112,121,135,107,121,70,175,189,195,187,211,148,179,119,175,233,138,232,102,93,193,235,11,64,136,4,214,130,171,176,21,221,0,19,88,11,22,89, + 24,138,243,178,96,53,252,5,41,43,169,86,59,186,123,213,12,14,14,158,40,151,203,151,40,149,74,43,195,48,148,16,66,101,50,153,122,243,230,205, + 120,247,221,119,17,16,16,0,165,82,9,165,82,9,133,66,225,243,197,88,157,178,36,87,75,30,221,188,228,194,44,0,51,171,147,119,145,191,23,142, + 38,203,96,48,224,207,63,255,68,94,94,94,117,70,61,168,54,41,41,41,183,143,30,61,26,93,171,86,45,124,253,245,215,225,99,198,140,57,68,8, + 233,234,171,161,113,54,134,237,218,181,251,16,128,223,140,86,199,142,29,23,28,58,116,168,198,145,35,71,18,18,19,19,239,202,8,138,136,220,43,17, + 17,17,99,62,253,244,211,96,225,255,219,213,200,8,153,153,153,72,187,122,1,122,51,197,35,221,122,250,172,77,8,145,3,72,36,132,140,111,209,162, + 69,7,74,41,24,134,57,78,41,93,14,224,39,119,205,76,254,201,216,141,86,82,82,210,1,0,24,48,96,64,119,251,74,5,69,33,123,20,105,41, + 57,88,63,38,215,106,40,226,47,18,11,134,107,179,145,107,206,102,142,169,74,162,235,167,157,78,149,12,94,96,67,143,97,77,241,193,115,95,195,100, + 53,216,27,95,83,167,87,52,67,66,66,130,79,157,58,21,202,48,12,120,158,7,207,243,48,26,141,217,111,189,245,86,196,224,193,131,53,31,44,125, + 143,233,250,100,107,12,251,160,30,169,223,62,10,69,217,38,124,241,250,159,40,189,101,254,198,157,102,139,6,181,222,88,56,241,41,14,86,51,168,69, + 11,152,116,128,69,7,222,162,5,145,5,3,230,50,132,203,11,240,253,248,38,193,111,124,243,87,74,147,40,77,175,203,217,101,7,29,53,254,23,154, + 174,160,188,21,218,29,211,33,9,109,0,89,147,129,144,183,28,134,204,148,211,56,243,221,2,100,92,56,128,232,166,157,42,111,127,159,53,131,131,131, + 39,55,136,139,251,112,197,242,229,228,183,159,126,68,92,221,218,0,0,169,38,8,203,63,251,12,26,141,198,110,178,148,74,165,219,177,234,92,165,179, + 74,89,42,228,175,89,74,48,195,84,74,127,86,70,147,90,233,231,76,239,165,157,54,61,43,148,165,147,191,164,191,169,168,75,62,19,218,108,249,146, + 247,234,34,106,222,63,77,66,72,243,230,205,155,31,63,122,244,168,74,175,215,99,211,166,77,152,61,123,182,197,108,54,179,132,144,159,93,236,126,10, + 192,199,212,105,232,45,87,233,36,132,4,2,24,15,160,131,11,157,188,167,159,126,218,50,119,238,92,174,127,255,254,248,229,151,95,194,6,15,30,124, + 150,16,210,70,48,52,238,242,238,104,178,244,122,61,46,92,184,128,194,194,194,223,171,155,119,79,84,24,193,154,49,49,49,216,184,113,99,248,200,145, + 35,221,154,173,7,241,188,139,154,15,134,102,89,89,153,121,215,174,93,216,185,115,39,212,106,53,2,2,2,236,6,75,48,95,151,46,93,194,129,143, + 94,197,141,203,231,49,252,189,173,94,53,9,33,245,0,188,162,209,104,198,244,232,209,163,198,160,65,131,16,26,26,10,171,213,138,244,244,244,78,219, + 182,109,235,116,244,232,209,44,66,200,74,0,107,41,165,69,174,210,234,202,139,60,232,176,0,144,148,148,68,1,244,112,94,201,72,8,116,182,66,116, + 110,248,20,122,28,86,178,121,185,249,173,167,62,254,229,70,141,86,173,152,49,99,70,221,71,30,121,68,50,97,250,75,56,245,99,30,122,62,147,135, + 174,195,98,144,246,251,165,109,110,15,198,178,224,121,30,199,143,31,135,205,102,131,209,104,132,201,100,66,171,86,173,10,62,250,116,133,230,137,113,93, + 48,238,203,70,8,173,163,192,254,245,153,248,227,7,106,78,255,211,124,195,88,128,53,238,52,207,166,164,207,126,241,205,15,22,40,165,18,197,219,207, + 197,35,76,110,1,209,68,64,218,227,29,144,128,242,17,105,248,252,20,92,90,59,14,58,147,81,162,181,240,123,229,50,217,110,147,217,252,5,165,116, + 243,189,104,98,199,155,88,246,84,176,228,249,13,198,95,219,69,147,176,228,44,170,247,244,99,63,68,136,148,143,64,27,202,163,49,8,20,103,207,158, + 197,148,37,39,32,97,147,241,106,183,157,120,98,226,82,108,158,63,28,18,171,14,132,0,54,171,5,160,158,71,206,113,214,52,26,13,0,40,172,217, + 191,227,173,165,95,33,185,48,8,146,219,87,48,232,33,41,164,44,241,168,41,151,203,23,172,92,185,146,216,180,90,244,104,28,135,182,189,187,162,172, + 164,4,191,255,121,3,233,233,233,120,236,177,199,236,227,203,197,198,198,98,235,214,170,23,159,59,92,148,165,198,51,158,216,188,165,252,73,7,203,1, + 140,184,176,77,103,173,221,166,224,185,158,207,228,161,231,243,245,184,155,211,207,37,2,88,226,243,65,68,254,78,124,122,226,196,9,149,208,206,227,229, + 151,95,198,248,241,227,57,0,189,156,55,204,205,205,197,145,35,71,6,77,156,56,113,104,133,233,112,59,202,1,33,164,70,219,182,109,143,238,219,183, + 175,113,64,192,157,224,57,207,243,48,155,205,176,88,44,48,155,205,48,26,141,48,26,141,8,12,12,196,209,163,71,21,33,33,33,223,3,104,233,65, + 183,146,201,58,115,230,12,70,142,28,153,103,181,90,253,58,208,95,73,73,201,51,137,137,137,7,55,108,216,16,30,23,23,135,175,191,254,58,252,197, + 23,95,172,86,212,77,68,228,94,33,132,160,89,179,102,184,114,229,74,165,234,66,199,49,72,99,99,99,49,113,238,39,88,251,122,111,252,56,181,11, + 58,190,233,246,214,14,66,200,244,167,159,126,122,65,100,100,36,211,162,69,11,212,172,89,19,70,163,17,197,197,197,160,148,34,44,44,12,47,188,240, + 2,158,124,242,201,232,131,7,15,46,217,183,111,223,92,66,200,23,0,86,80,74,175,8,58,238,188,200,131,142,61,162,53,96,192,128,3,194,247,210, + 219,134,99,103,47,31,175,47,141,3,8,3,92,163,219,1,74,80,100,52,131,55,73,154,190,253,246,219,108,151,46,93,184,77,155,54,161,239,35,3, + 176,125,251,42,116,30,92,134,186,205,195,96,101,204,110,187,19,176,217,108,48,155,203,95,122,179,90,173,176,90,173,48,155,205,72,203,76,149,49,181, + 243,153,23,62,109,6,101,16,135,31,22,92,131,233,66,157,146,169,163,95,41,121,243,205,55,11,40,45,205,118,167,201,132,234,62,62,127,45,167,231, + 170,41,143,15,8,15,148,129,150,21,129,139,95,136,35,169,20,239,127,253,51,20,50,22,143,183,145,226,147,36,3,150,124,248,11,102,134,134,74,8, + 33,253,151,47,95,222,159,16,242,10,165,180,138,137,243,69,115,250,243,29,208,178,247,28,240,95,13,194,235,15,19,229,75,91,84,227,1,188,239,46, + 157,77,34,72,39,69,140,244,135,198,141,226,212,189,123,245,225,182,253,186,91,54,246,213,137,56,124,228,60,114,115,115,241,116,66,60,6,62,159,1, + 56,180,1,231,109,158,35,172,206,154,71,142,28,150,245,239,212,20,111,61,211,28,209,193,28,66,59,62,135,253,211,166,97,217,178,101,248,124,197,28, + 188,24,175,241,168,41,151,203,173,251,182,108,65,247,250,245,81,55,58,6,150,146,18,240,101,90,80,10,212,173,91,23,235,214,173,3,199,113,144,201, + 100,120,238,185,231,60,166,77,192,83,89,170,21,83,7,211,198,188,100,127,210,49,228,153,190,186,184,93,103,47,75,20,104,231,211,65,68,254,142,168, + 45,22,11,132,241,156,211,211,211,61,110,220,170,85,43,172,95,191,254,161,81,163,70,29,36,132,116,113,142,108,1,229,145,172,182,109,219,30,61,120, + 240,96,99,131,193,128,235,215,175,251,148,16,90,254,96,161,117,183,158,16,82,175,69,139,22,71,142,30,61,26,162,215,235,113,246,236,89,60,247,220, + 115,230,194,194,194,139,0,22,187,169,30,47,68,249,56,170,105,46,244,234,2,120,29,64,61,87,59,230,230,230,94,28,49,98,196,35,27,55,110,148, + 214,175,95,31,191,252,242,75,88,98,98,226,17,66,72,7,74,105,170,79,153,18,17,185,71,28,7,38,191,112,225,2,194,20,54,168,229,44,108,86, + 11,172,22,51,148,22,19,88,150,197,111,103,82,209,183,169,219,22,65,2,163,230,205,155,199,216,108,54,228,231,231,195,104,52,86,90,41,244,39,165, + 82,169,240,232,163,143,162,95,191,126,242,228,228,228,113,123,246,236,121,133,16,50,155,82,58,79,216,214,209,139,252,83,112,217,70,203,194,99,238,194, + 39,142,169,57,5,121,136,242,80,75,136,36,128,231,169,212,102,0,134,14,26,37,237,210,165,139,100,211,166,77,136,140,140,196,240,225,195,241,69,194, + 74,90,84,88,66,88,94,9,2,40,92,105,146,118,132,139,177,70,134,254,118,104,151,50,88,21,170,231,121,30,86,171,21,153,183,210,165,91,14,125, + 17,253,234,198,38,118,147,117,99,135,212,60,248,177,238,165,77,154,52,49,50,12,227,214,25,60,244,16,145,178,37,1,63,174,156,244,232,128,142,245, + 148,48,229,167,66,22,82,11,208,68,99,241,134,159,144,158,91,6,99,113,38,210,126,251,21,159,174,94,141,99,199,142,225,231,159,126,64,131,70,77, + 48,119,238,92,156,63,127,126,9,80,57,90,230,139,38,0,172,218,116,14,159,207,76,0,24,41,26,7,223,70,110,137,105,122,64,64,192,75,101,101, + 101,243,41,165,27,42,105,214,32,181,107,132,7,239,218,240,197,103,154,58,113,141,113,254,212,33,108,216,113,22,135,143,236,130,193,96,64,114,114,50, + 26,132,115,224,203,178,193,83,27,132,10,57,222,230,254,197,75,103,77,91,113,58,158,31,253,18,114,110,101,98,236,216,151,49,190,111,109,252,182,127, + 7,6,15,30,140,103,158,121,6,132,16,124,190,98,14,166,213,117,223,190,156,16,34,205,47,45,197,201,63,47,131,227,100,176,100,231,227,210,141,52, + 132,197,198,218,77,49,33,4,82,169,212,190,15,207,243,106,0,13,1,92,112,165,169,203,70,238,71,207,94,166,156,10,68,38,147,217,163,154,225,65, + 81,120,162,231,19,206,79,58,211,246,158,223,226,181,44,137,60,16,12,233,216,177,227,217,95,127,253,85,33,147,201,176,117,235,86,204,158,61,219,82, + 88,88,120,8,78,166,39,50,50,178,249,151,95,126,25,27,23,23,135,85,171,86,61,52,120,240,224,241,0,22,186,208,28,191,111,223,190,198,6,131, + 1,103,207,158,197,200,145,35,83,115,114,114,46,58,109,163,142,141,141,237,250,225,135,31,114,237,218,181,67,73,73,9,250,246,237,171,3,240,138,135, + 180,78,216,191,127,127,136,94,175,71,105,105,41,122,244,232,129,130,130,2,41,92,68,223,4,244,122,61,234,213,171,215,24,64,103,231,117,161,161,161, + 159,221,188,121,179,167,82,169,244,112,72,192,108,54,35,35,35,3,193,193,193,216,182,109,91,72,131,6,13,102,2,24,237,113,39,17,17,63,33,24, + 45,134,97,160,47,72,199,198,181,111,2,54,51,168,69,15,152,117,128,185,12,188,73,7,34,85,2,22,143,149,53,0,0,147,201,132,111,191,253,22, + 109,219,182,69,179,102,205,80,86,86,102,55,93,38,147,9,142,227,144,51,12,131,14,29,58,160,81,163,70,100,242,228,201,195,1,204,115,175,252,224, + 35,24,173,185,142,245,162,134,155,52,21,192,211,26,141,102,115,251,246,237,187,12,27,54,76,29,25,25,9,171,213,10,74,41,182,109,219,134,200,200, + 72,60,247,220,115,232,219,183,175,193,88,132,133,171,19,179,222,224,173,153,22,2,76,115,117,32,205,109,124,220,238,69,174,225,134,228,233,96,211,154, + 22,191,240,204,43,121,183,139,110,75,214,124,183,180,206,168,53,113,36,40,82,134,3,95,102,33,214,220,31,45,19,106,112,127,252,241,71,88,171,86, + 173,220,70,178,236,134,232,181,132,1,15,215,85,224,187,157,39,144,216,66,6,24,3,65,8,32,145,48,40,187,117,30,183,78,172,69,116,199,182,24, + 61,122,52,44,185,151,113,252,213,64,212,95,114,212,252,222,123,239,73,195,194,194,2,171,171,153,115,246,59,88,12,69,208,148,181,5,144,0,163,201, + 136,97,155,173,152,189,240,131,26,99,199,142,173,17,26,26,58,31,64,37,163,165,12,196,33,161,219,0,0,32,0,73,68,65,84,148,125,244,206,180, + 201,202,90,97,26,36,111,89,138,105,27,46,96,199,158,253,48,24,12,56,116,232,16,38,140,123,9,203,159,111,130,147,167,207,224,102,129,9,44,172, + 224,100,10,152,242,74,192,187,169,230,115,212,52,156,251,10,23,175,221,130,209,194,195,172,136,68,175,248,54,88,241,203,33,116,111,28,133,23,70,141, + 194,186,207,62,195,224,193,131,17,25,25,137,101,239,190,1,202,187,214,164,148,114,37,6,96,239,205,92,236,189,178,11,53,163,35,161,215,233,16,152, + 175,135,78,167,131,76,38,131,96,150,10,11,11,209,172,89,51,176,44,43,143,141,141,253,221,249,169,68,128,55,225,241,93,63,28,32,12,195,216,47, + 58,157,78,7,189,94,95,169,231,92,225,73,167,126,147,122,100,221,208,143,96,54,102,195,152,15,177,79,173,7,20,74,105,10,33,164,77,159,62,125, + 14,109,222,188,57,236,177,199,30,67,131,6,13,184,167,158,122,42,92,171,213,246,118,220,150,16,82,99,228,200,145,167,211,211,211,99,43,22,185,106, + 123,5,0,29,2,2,2,112,253,250,117,193,100,181,119,174,102,148,203,229,59,207,157,59,199,201,100,50,156,58,117,10,163,70,141,202,79,77,77,245, + 86,45,23,108,50,153,236,109,14,51,50,50,188,230,239,230,205,155,224,121,222,232,106,29,195,48,242,228,228,100,68,71,71,123,212,96,24,166,210,67, + 11,0,151,109,86,68,68,238,7,6,131,193,110,180,148,161,181,145,48,118,1,2,228,18,44,124,161,11,226,130,1,40,67,32,237,54,13,36,184,110, + 197,30,95,121,146,179,152,76,38,180,111,223,30,169,169,169,72,78,78,182,27,174,252,252,124,100,101,85,126,57,255,228,201,147,56,115,230,12,186,117, + 235,230,172,51,247,31,219,70,107,192,128,1,115,146,146,146,186,87,90,193,178,131,187,119,239,30,191,120,241,226,200,58,117,234,224,232,209,163,246,118, + 15,207,63,255,60,212,106,53,250,245,235,167,79,79,79,31,170,211,153,126,1,48,223,211,129,84,53,164,67,30,125,173,46,0,96,239,186,107,65,107, + 191,251,24,18,194,242,189,38,132,146,90,205,212,40,200,52,226,224,154,2,180,169,151,207,111,221,186,142,25,60,120,48,171,213,106,9,202,199,99,172, + 2,87,18,248,241,138,9,189,6,60,92,87,142,175,182,159,192,251,191,166,95,234,18,25,209,44,74,87,0,90,112,21,79,119,80,162,224,232,41,156, + 201,76,67,72,72,8,138,139,139,241,198,27,111,96,246,254,159,81,191,121,59,137,82,169,132,217,108,182,84,71,243,173,145,29,49,108,219,108,108,221, + 246,21,222,156,241,14,244,87,246,33,241,139,28,60,54,225,67,76,154,52,9,203,150,45,131,94,175,79,114,78,171,141,39,93,30,238,222,79,98,188, + 185,15,211,214,159,195,142,189,135,96,48,24,80,80,80,0,181,90,141,245,27,191,5,0,24,1,60,250,198,179,246,253,114,114,114,144,185,121,180,203, + 16,148,160,105,72,219,135,49,43,143,98,196,216,41,224,184,242,90,219,38,181,187,163,73,194,88,0,64,39,0,37,37,37,80,171,213,232,211,167,15, + 162,163,191,197,224,199,251,216,92,105,82,74,81,171,118,3,180,127,184,21,0,32,52,84,13,173,86,15,99,89,38,14,159,220,11,142,227,112,238,220, + 57,100,101,101,33,36,36,4,35,70,140,0,202,245,61,62,149,240,60,143,175,191,254,218,167,39,157,134,245,154,96,238,216,143,81,82,82,130,201,147, + 39,87,123,140,45,145,191,15,21,102,171,235,227,143,63,126,112,195,134,13,225,181,107,215,70,64,64,64,160,139,237,110,19,66,46,114,28,23,235,74, + 199,21,57,57,57,23,93,181,229,138,138,138,106,99,50,153,112,230,204,25,12,31,62,60,47,59,59,219,151,183,250,230,247,238,221,251,241,93,187,118, + 133,40,20,10,92,188,120,17,195,135,15,55,23,22,22,30,134,251,42,199,27,0,86,184,90,145,151,151,55,188,91,183,110,179,0,132,184,217,87,221, + 168,81,163,71,78,159,62,45,37,132,224,198,141,27,72,76,76,44,4,240,145,151,116,138,136,248,13,193,104,17,66,208,186,117,107,236,222,149,135,49, + 189,26,32,46,42,0,180,36,19,210,94,179,113,46,79,137,15,150,109,247,69,238,157,167,159,126,250,243,241,227,199,7,117,234,212,9,25,25,25,118, + 195,213,166,77,27,180,106,213,10,215,174,93,195,206,157,59,113,230,204,25,200,229,114,52,104,208,0,101,31,124,8,124,8,251,125,216,149,23,249,39, + 224,178,141,22,0,4,6,6,142,30,59,118,108,205,232,232,104,116,235,214,77,151,155,155,171,157,58,117,106,68,104,104,40,26,54,108,136,122,245,234, + 149,228,231,231,15,49,26,141,187,124,57,80,89,174,121,251,177,239,178,135,198,63,27,133,94,99,106,97,47,110,4,93,220,91,136,65,137,229,55,245, + 31,230,94,67,253,136,150,183,53,26,77,32,33,4,10,133,2,22,139,5,112,99,180,90,197,6,63,211,177,54,139,175,126,61,137,247,119,100,45,166, + 132,156,253,49,249,246,166,241,29,120,92,92,49,8,223,156,140,198,142,29,219,241,219,111,191,97,237,218,181,40,40,40,128,74,165,130,76,218,26,59, + 119,253,36,249,225,135,31,176,119,239,222,117,190,106,154,190,77,68,135,196,141,168,25,170,65,120,120,56,84,180,20,131,6,13,180,155,172,229,203,151, + 99,202,148,41,187,0,76,113,145,92,57,39,83,224,232,249,191,240,228,144,242,182,77,197,197,197,8,14,14,70,68,68,132,219,223,204,102,179,97,233, + 210,135,220,213,245,201,57,153,2,167,255,76,69,243,142,61,209,181,107,87,143,191,191,86,171,133,209,104,68,199,142,29,17,18,21,235,82,147,82,74, + 195,195,130,192,162,176,124,159,146,98,216,172,60,106,132,168,33,147,201,112,248,240,97,176,44,139,97,195,134,225,235,175,191,246,244,84,226,136,191,158, + 116,68,30,64,42,204,86,183,254,253,251,47,15,15,15,111,157,157,157,253,150,243,54,132,144,26,207,60,243,76,123,161,61,151,47,68,70,70,54,39, + 132,212,112,54,91,105,105,105,111,182,108,217,242,221,210,210,210,98,157,78,151,232,75,3,115,74,105,42,33,164,75,175,94,189,14,109,221,186,53,172, + 105,211,166,248,234,171,175,164,35,70,140,104,94,80,80,80,237,238,23,42,218,109,189,232,106,29,33,164,113,147,38,77,14,159,60,121,82,202,113,28, + 78,157,58,133,145,35,71,230,167,165,165,117,165,84,28,21,65,228,127,3,33,4,122,189,30,132,16,80,74,177,103,247,110,204,24,212,0,79,181,11, + 135,246,214,21,168,130,194,65,130,235,225,131,101,219,113,241,122,129,87,61,74,233,22,66,200,222,183,222,122,235,63,113,113,113,111,140,27,55,78,222, + 166,77,27,100,100,100,224,198,141,27,56,115,230,12,142,31,63,14,160,188,145,125,76,76,12,46,95,190,140,164,0,77,9,80,54,219,81,235,95,211, + 70,11,0,40,165,209,106,181,26,189,122,245,210,165,166,166,14,49,153,76,215,223,123,239,189,253,227,198,141,139,204,201,201,129,205,102,179,250,106,178, + 0,64,151,137,55,126,158,151,241,40,128,64,193,108,197,15,137,2,97,128,83,63,231,162,236,114,0,175,14,34,38,171,213,74,71,143,30,109,35,132, + 88,242,243,221,119,188,126,34,37,127,254,179,239,253,54,225,114,182,113,93,74,142,110,62,33,132,249,242,140,106,127,211,80,182,199,79,151,210,240,213, + 175,135,176,119,239,94,172,158,249,2,90,245,127,1,11,22,109,133,76,38,3,165,20,191,254,250,43,158,123,238,185,111,44,22,203,68,95,53,123,212, + 207,132,113,77,151,255,99,239,188,227,163,40,222,63,254,153,221,107,185,187,244,228,146,144,78,147,18,170,128,128,20,233,32,161,139,52,41,98,193,47, + 42,168,8,2,63,11,138,64,80,44,20,11,10,42,69,132,128,8,8,74,149,222,3,130,2,1,2,4,146,64,58,73,46,185,126,183,243,251,227,110, + 207,203,229,42,197,175,242,221,247,235,181,185,108,251,236,204,214,103,158,121,102,6,180,194,218,207,231,161,3,251,48,125,182,131,145,245,234,171,187,1, + 12,164,148,214,168,78,16,177,184,144,117,246,232,195,173,59,116,195,91,207,207,197,136,17,35,16,24,24,136,171,87,175,98,253,250,245,208,233,106,140, + 126,0,0,200,207,207,183,92,188,120,113,177,171,117,188,102,203,71,187,226,173,241,111,33,47,47,207,109,119,11,173,90,181,194,216,177,99,113,251,246, + 109,28,58,116,8,215,174,93,91,229,242,26,105,52,215,103,207,123,51,57,40,40,136,145,201,100,40,41,41,65,116,116,52,8,33,120,236,177,199,16, + 16,16,128,62,125,250,32,32,32,0,229,229,229,56,127,254,188,203,82,137,19,46,75,58,167,78,157,66,139,22,45,208,172,89,51,252,254,251,239,56, + 114,228,136,199,146,142,192,191,23,155,161,210,155,159,119,14,22,31,58,116,104,235,85,171,86,213,202,207,207,199,153,51,103,0,107,87,15,174,56,81, + 80,80,48,64,161,80,96,197,138,21,181,199,142,29,123,146,16,194,199,104,241,193,233,223,225,14,58,68,229,189,111,143,63,254,248,129,244,244,244,200, + 6,13,26,96,197,138,21,170,39,159,124,50,29,64,83,127,245,220,33,151,203,23,30,59,118,44,66,44,22,227,200,145,35,24,53,106,84,81,65,65, + 129,208,151,150,192,223,14,31,176,126,228,200,97,204,232,95,7,131,90,4,99,197,207,135,48,170,165,28,48,200,252,214,163,148,170,1,188,69,8,89, + 242,250,235,175,191,153,146,146,242,194,179,207,62,43,106,220,184,49,242,242,242,112,237,218,53,212,171,87,15,57,57,57,88,189,122,181,161,168,168,232, + 83,0,105,148,210,123,50,156,221,63,26,119,163,77,3,104,16,20,20,116,67,42,149,246,181,205,135,41,149,202,203,19,39,78,180,84,86,86,210,208, + 208,208,92,111,35,86,195,105,116,239,184,184,184,140,46,253,218,106,198,125,85,151,126,165,238,72,191,82,119,164,31,101,63,66,235,181,87,153,230,206, + 155,155,191,109,219,182,235,59,118,236,200,222,177,99,71,246,238,221,187,179,175,93,187,118,89,165,82,29,244,164,233,56,53,136,13,12,111,16,165,216, + 83,47,82,66,41,165,180,79,159,62,180,100,97,91,58,253,241,4,218,173,107,87,218,163,71,15,58,98,196,8,78,36,18,165,1,96,252,209,156,214, + 45,130,158,124,163,46,109,151,146,72,115,115,115,105,90,90,26,165,148,210,79,62,249,132,18,130,253,0,100,238,210,249,80,56,186,14,120,180,158,230, + 218,193,213,116,99,218,211,180,69,147,6,244,210,165,75,52,47,47,143,110,217,178,133,134,133,133,150,3,232,27,33,199,115,98,49,218,0,104,110,155, + 162,125,209,60,249,205,171,244,235,87,186,208,121,99,90,210,215,83,147,105,175,38,33,134,24,37,254,15,192,204,49,99,198,112,102,179,153,86,84,84, + 208,165,75,151,82,66,200,102,0,18,119,121,7,16,4,96,118,157,58,117,116,109,218,180,161,173,90,181,162,15,63,252,48,109,222,188,57,77,73,73, + 161,245,235,215,167,117,235,214,165,241,241,241,244,181,215,94,163,189,123,247,166,129,129,129,229,0,6,251,162,185,96,193,2,186,125,251,118,250,245,215, + 95,211,57,115,230,208,87,95,125,149,182,106,213,138,182,111,223,158,62,249,228,147,62,107,222,139,73,208,252,239,104,2,216,126,238,220,57,202,99,177, + 88,104,94,94,30,221,177,99,7,141,137,137,249,19,64,176,43,77,0,193,141,27,55,190,144,153,153,73,111,220,184,65,141,70,163,93,227,194,133,11, + 20,192,190,187,77,39,128,6,113,113,113,133,123,247,238,165,153,153,153,52,38,38,38,231,94,230,61,57,57,185,176,168,168,136,238,217,179,135,170,84, + 170,66,0,13,254,137,215,72,208,124,176,53,149,74,101,193,162,69,139,232,212,169,83,105,187,198,9,212,176,118,56,93,250,116,67,26,25,17,78,79, + 188,158,72,181,31,36,81,75,225,121,122,234,98,33,29,241,214,86,58,226,173,173,84,169,84,22,248,147,78,88,11,82,171,90,181,106,101,89,180,104, + 17,125,225,133,23,104,82,82,146,5,214,206,199,227,238,117,30,255,201,147,39,143,214,69,0,137,128,213,181,31,24,24,120,116,240,224,193,181,135,13, + 27,198,172,89,179,198,162,209,104,246,185,219,215,29,12,195,24,231,191,62,191,224,213,17,221,163,1,200,91,166,70,98,227,220,107,104,145,220,233,54, + 1,209,222,188,121,211,30,172,35,22,139,209,168,81,35,191,244,51,243,212,165,0,186,73,196,204,145,236,236,236,118,201,201,201,168,247,127,251,244,137, + 117,234,137,62,248,112,186,232,228,201,147,152,53,107,214,50,147,201,52,221,95,205,6,49,129,67,55,159,43,24,169,21,5,166,42,149,74,209,200,145, + 35,49,127,254,124,76,159,62,189,0,64,17,128,239,8,33,71,40,165,139,156,53,46,150,208,223,90,198,137,223,30,253,244,11,179,135,116,111,46,237, + 151,34,99,6,244,237,133,213,107,55,160,105,211,166,248,246,219,239,130,159,124,242,201,41,197,26,189,207,221,239,58,107,202,136,133,49,27,52,244,204, + 149,66,67,169,198,244,89,126,21,62,237,214,173,91,241,55,223,124,67,52,26,13,62,253,244,83,204,154,53,107,11,165,116,40,245,48,176,52,117,40, + 149,92,189,122,213,94,42,73,74,74,66,94,94,30,246,236,217,227,119,169,132,122,41,233,92,191,126,253,127,183,164,243,191,137,236,232,209,163,144,201, + 254,42,53,159,57,115,6,47,191,252,242,57,91,76,85,141,174,29,0,128,82,90,65,8,233,208,183,111,223,3,139,22,45,106,108,11,45,0,0,236, + 221,187,23,176,134,57,222,21,212,86,213,217,187,119,239,133,17,17,17,45,242,243,243,223,190,91,77,71,178,179,179,95,107,214,172,217,92,181,90,93, + 225,107,213,166,128,192,253,64,171,181,182,36,84,196,212,71,183,247,246,66,23,16,139,142,157,58,99,249,161,95,241,113,31,9,140,233,163,208,124,232, + 74,172,121,175,47,0,32,240,19,255,244,169,181,42,124,52,33,228,131,140,140,140,255,3,64,1,188,79,169,239,227,236,62,40,120,28,130,135,39,48, + 48,240,155,212,212,212,186,159,124,242,9,179,97,195,6,203,171,175,190,154,103,52,26,39,251,123,48,189,94,127,243,202,205,155,33,159,108,58,92,48, + 119,225,172,200,5,159,159,12,232,217,225,241,202,212,190,131,244,173,91,183,54,59,247,87,115,226,196,9,10,216,2,134,252,192,100,166,105,47,191,252, + 242,166,153,51,103,146,167,158,122,74,6,88,95,196,239,188,243,206,38,179,217,60,209,95,61,0,184,152,95,185,30,192,250,248,248,248,43,193,193,193, + 117,8,33,24,53,106,20,198,141,27,23,13,224,137,162,162,34,52,109,218,20,0,106,24,90,0,112,58,207,244,81,253,8,242,203,242,141,71,158,80, + 4,72,219,232,171,12,185,3,7,12,24,182,98,229,202,176,196,196,68,72,165,82,191,187,50,112,214,212,25,13,103,204,38,238,167,11,197,244,52,33, + 164,113,173,90,181,2,202,202,202,240,249,231,159,251,100,100,57,66,41,45,4,240,50,33,228,227,87,94,121,229,189,86,173,90,141,28,51,102,12,19, + 21,21,133,244,244,116,238,250,245,235,223,1,120,135,82,154,231,107,122,239,135,166,192,191,146,113,207,61,247,156,115,176,184,203,158,225,157,161,214,192, + 249,71,83,83,83,157,123,134,119,27,156,238,47,54,227,167,215,189,208,114,161,253,61,238,225,144,62,2,2,119,10,111,104,181,104,209,2,104,209,194, + 190,124,195,239,209,88,255,71,33,134,54,207,133,254,171,142,32,193,137,119,117,28,74,233,159,0,134,123,221,240,1,198,39,67,171,178,178,114,250,150, + 45,91,90,239,218,181,11,106,181,250,55,163,209,56,133,122,232,189,217,29,69,69,69,99,39,79,158,188,92,34,145,196,152,205,230,66,139,133,202,54, + 173,221,198,109,251,113,167,142,97,152,26,45,225,12,6,131,166,164,164,228,57,127,143,67,41,221,66,8,121,38,43,43,235,195,176,176,176,112,147,201, + 100,62,115,230,204,119,22,139,101,34,189,203,113,150,242,243,243,179,18,18,18,0,128,1,96,143,222,53,155,205,20,128,199,1,166,47,151,208,76,56, + 180,204,35,132,44,236,217,179,231,135,65,65,65,13,213,106,245,59,30,118,245,89,147,135,82,122,158,16,50,119,231,206,157,195,11,11,11,119,3,120, + 217,87,35,203,73,231,158,151,74,132,146,206,255,54,212,67,176,184,143,251,87,192,117,63,91,2,2,2,62,192,113,92,238,199,31,127,236,118,253,75, + 59,24,188,180,131,111,51,117,205,190,207,223,144,180,7,18,159,12,45,91,9,207,115,167,48,190,233,104,1,140,184,91,29,31,143,245,45,128,111,239, + 181,174,217,108,238,115,175,180,168,117,232,129,254,247,74,207,133,254,255,1,248,191,123,164,117,207,75,37,66,73,71,64,64,64,224,239,71,163,209,180, + 254,111,167,225,127,9,198,251,38,2,2,2,2,2,2,2,2,2,119,2,1,224,178,83,72,234,199,8,226,132,16,191,59,150,244,166,47,104,10,154, + 130,166,160,41,104,10,154,130,230,131,167,233,77,219,31,251,227,95,193,253,108,210,136,127,105,211,87,65,83,208,20,52,255,125,154,176,22,28,201,63, + 61,157,255,11,154,252,181,128,181,214,132,241,245,218,252,55,243,238,79,250,30,132,243,249,79,212,124,80,39,159,98,180,238,53,196,218,188,144,1,192, + 81,219,213,17,248,103,97,187,70,124,51,80,42,92,39,129,127,34,132,16,149,68,34,121,85,34,145,60,22,16,16,240,16,165,148,11,12,12,60,111, + 52,26,247,26,141,198,143,169,181,107,17,129,191,17,135,119,7,139,191,62,182,22,0,22,91,79,228,255,168,119,9,33,196,110,20,16,66,56,252,195, + 190,75,247,227,124,254,91,52,31,20,220,26,90,132,144,22,74,165,242,29,169,84,90,135,16,98,169,170,170,58,171,215,235,151,82,74,143,220,205,1, + 9,33,203,163,163,163,199,149,148,148,112,12,195,32,32,32,192,62,138,184,88,44,214,150,149,149,213,24,11,205,23,162,154,13,126,93,68,200,36,11, + 181,44,45,56,187,105,142,183,229,2,238,33,132,16,137,68,50,36,60,60,60,180,168,168,136,242,131,223,178,44,203,15,132,107,46,43,43,251,206,87, + 189,240,240,240,227,225,225,225,161,252,254,132,16,148,148,148,148,21,20,20,60,2,0,114,185,252,144,82,169,140,16,137,68,96,89,22,44,203,66,163, + 209,148,20,23,23,119,184,111,153,20,184,175,172,95,191,158,237,29,247,76,61,17,213,54,103,24,26,194,113,164,220,76,228,103,182,231,45,207,242,101, + 255,161,67,135,186,28,143,211,17,66,200,160,200,200,200,165,91,182,108,9,105,216,176,161,168,180,180,148,36,36,36,160,188,188,188,195,254,253,251,31, + 25,55,110,220,120,66,200,56,74,233,111,119,159,163,7,27,153,76,246,105,116,116,244,179,149,149,149,26,66,8,37,132,128,239,110,199,249,215,98,177, + 228,22,23,23,187,12,166,118,248,216,138,165,82,233,199,49,49,49,99,53,26,141,198,166,71,9,33,168,85,171,86,53,61,0,48,153,76,185,69,69, + 69,62,5,104,71,69,69,45,149,203,229,79,105,52,154,42,155,97,100,199,233,99,126,165,168,168,200,237,216,100,124,90,165,82,233,194,232,232,232,167, + 109,121,7,33,132,170,84,42,191,243,238,136,72,36,202,96,24,166,5,231,48,174,148,115,247,69,14,104,77,38,147,203,239,158,243,249,140,142,142,30, + 235,152,78,66,8,84,42,213,93,93,163,127,170,230,131,132,91,67,171,101,203,150,63,28,59,118,236,33,126,160,98,157,78,215,108,241,226,197,99,8, + 33,105,148,210,25,119,114,48,66,200,138,78,157,58,141,216,191,127,63,179,105,211,38,166,77,155,54,32,132,192,98,177,192,98,177,160,105,211,166,242, + 59,204,7,66,148,138,233,167,118,126,21,208,162,199,115,147,0,204,241,182,220,67,26,91,0,120,19,64,29,63,147,80,4,96,6,165,244,148,171,149, + 225,225,225,135,25,134,241,75,147,227,184,171,165,165,165,143,186,91,127,63,52,109,70,214,19,157,58,117,10,217,181,107,23,201,201,201,33,114,185,28, + 28,199,193,98,177,192,100,50,33,37,37,197,47,79,104,104,104,104,240,244,233,211,235,61,254,248,227,216,176,97,3,198,140,25,131,142,29,59,94,226, + 215,43,149,202,136,115,231,206,61,20,30,30,14,141,70,131,242,242,114,244,236,217,211,159,67,220,19,66,67,67,255,12,10,10,10,99,89,214,254,70, + 116,85,8,227,151,89,44,22,170,213,106,175,150,150,150,186,124,153,183,123,56,225,125,194,16,123,95,81,212,108,41,61,250,123,222,155,119,155,206,136, + 136,136,83,50,153,44,218,219,118,142,47,118,157,78,87,80,82,82,242,176,151,237,147,1,244,103,89,182,190,72,36,106,8,32,217,108,54,71,3,128, + 68,34,41,96,89,54,219,100,50,101,26,12,134,203,0,182,80,15,99,243,245,142,123,166,30,49,107,134,170,245,92,95,69,221,180,6,154,43,211,47, + 42,100,154,109,189,227,158,89,239,171,177,229,37,173,67,158,120,226,137,101,171,87,175,14,6,128,202,202,74,122,225,194,5,4,6,6,114,18,137,132, + 164,166,166,74,46,93,186,84,171,107,215,174,233,132,144,65,148,210,131,126,104,55,0,176,14,214,1,165,95,160,214,214,177,119,147,214,56,0,3,0, + 52,144,72,36,181,141,70,99,49,128,12,0,187,40,165,151,8,33,73,42,149,234,123,142,227,244,37,37,37,207,80,107,247,23,213,104,223,58,241,36, + 195,48,241,176,221,142,28,181,228,30,57,153,115,79,62,80,44,203,46,28,60,120,240,211,235,215,175,87,100,100,100,40,26,55,110,108,47,16,113,28, + 87,227,25,168,93,219,227,216,223,4,128,136,97,152,79,135,14,29,58,114,213,170,85,138,235,215,175,43,98,99,99,237,154,142,70,28,79,108,172,111, + 141,218,35,34,34,150,63,254,248,227,163,87,174,92,41,222,188,121,179,60,50,50,18,17,17,17,144,72,36,53,182,237,208,161,131,183,193,51,25,134, + 97,22,14,28,56,112,244,218,181,107,21,199,142,29,83,52,109,218,20,44,203,222,105,222,1,0,132,144,223,235,214,173,219,40,43,43,139,201,200,200, + 96,188,157,207,160,160,32,79,223,61,251,249,28,48,96,192,200,117,235,214,41,78,157,58,165,104,216,176,161,93,211,161,218,206,215,116,254,91,52,31, + 24,60,125,48,165,70,163,17,251,246,237,3,195,48,8,15,15,199,184,113,227,176,115,231,206,233,132,144,159,253,245,108,17,66,150,219,140,44,49,0, + 252,248,212,32,92,21,3,47,23,26,32,145,72,112,229,202,21,176,44,235,183,107,49,32,32,96,44,165,244,173,136,168,68,153,86,107,130,238,230,73, + 133,92,46,207,230,31,228,208,200,56,235,242,91,39,21,10,133,226,10,203,178,179,213,106,245,10,119,122,245,235,215,95,253,231,159,127,54,114,245,224, + 122,66,163,209,32,49,49,49,9,64,125,87,235,197,98,113,252,245,235,215,163,248,241,22,249,7,206,249,151,255,223,104,52,34,37,37,197,99,191,87, + 158,52,205,102,51,2,2,2,192,48,214,134,165,6,131,1,149,149,149,30,53,121,79,22,111,100,1,192,154,53,107,16,19,19,131,168,168,40,40,149, + 74,200,229,114,187,166,175,176,44,139,222,189,123,99,214,172,89,72,75,75,195,212,169,83,171,189,104,197,98,49,194,195,195,241,235,175,191,34,56,56, + 24,73,73,73,224,13,252,123,129,50,153,52,103,25,50,87,85,71,222,246,214,101,205,84,205,117,186,220,213,118,114,185,92,117,229,202,21,21,203,178, + 53,174,135,243,53,250,51,243,44,210,22,189,139,11,249,71,163,21,73,228,25,87,154,132,33,225,71,78,222,176,151,84,251,116,107,36,106,215,42,233, + 115,235,28,7,134,1,56,206,250,233,36,4,212,108,226,110,159,56,147,231,181,39,114,150,101,99,179,179,179,163,124,61,71,102,179,25,177,177,177,174, + 7,194,228,211,74,72,223,38,77,154,252,56,113,226,68,73,253,250,245,137,68,34,129,72,36,130,72,100,125,69,112,28,151,68,41,77,226,56,174,75, + 65,65,1,93,188,120,241,7,132,144,193,148,210,109,174,244,68,84,219,92,173,231,250,30,56,141,71,134,246,120,3,191,166,79,127,164,83,75,14,65, + 10,109,22,128,59,50,180,218,183,74,60,39,11,144,133,27,77,102,70,165,138,136,88,185,114,37,99,50,153,168,78,167,163,148,82,180,105,211,134,99, + 24,134,28,58,116,136,153,55,111,30,54,109,218,68,211,211,211,131,219,183,111,191,146,16,146,66,41,213,120,59,6,33,164,65,147,38,77,78,31,59, + 118,44,192,104,52,162,93,187,118,71,9,33,173,232,29,244,224,78,8,9,3,240,209,140,25,51,70,79,156,56,145,13,13,13,133,84,42,133,90,173, + 70,86,86,214,216,239,190,251,142,18,66,62,3,16,148,157,157,221,254,248,241,227,232,218,181,235,100,0,175,58,107,49,12,27,127,232,248,53,251,8, + 244,3,122,55,147,60,218,38,169,0,0,106,150,5,40,56,11,151,123,236,116,174,87,67,140,16,242,193,144,33,67,70,173,95,191,62,16,0,190,248, + 226,11,12,25,50,4,225,225,225,80,40,20,144,72,36,16,139,197,213,126,61,104,241,213,70,31,12,31,62,124,232,170,85,171,130,0,96,213,170,85, + 24,52,104,16,34,34,34,16,20,20,4,169,84,234,118,92,86,79,68,68,68,44,239,248,200,35,227,87,174,92,9,0,248,191,87,94,193,227,109,219, + 34,80,33,135,66,46,5,127,46,164,172,24,125,94,158,228,45,223,12,128,5,67,134,12,25,182,118,237,218,32,0,200,200,200,64,97,97,33,162,163, + 163,33,151,203,33,149,74,237,121,38,132,64,46,247,238,7,32,132,28,175,83,167,78,131,172,172,44,9,112,239,206,231,224,193,131,135,174,91,183,46, + 8,0,190,251,238,59,244,232,209,3,97,97,97,246,243,41,145,72,30,40,205,7,13,183,134,214,233,211,167,159,80,42,149,243,0,168,164,82,105,232, + 200,145,35,19,198,143,31,143,225,195,135,99,207,158,61,19,0,248,108,104,17,66,72,116,116,244,184,253,251,247,219,191,208,6,167,151,131,76,38,243, + 251,3,110,227,173,147,19,38,196,164,101,85,226,232,241,76,4,128,33,89,31,127,172,210,93,186,4,139,193,128,247,174,168,113,244,120,38,100,102,142, + 156,157,242,114,76,139,79,62,123,11,128,91,67,139,16,34,211,235,245,184,116,233,146,187,77,92,146,147,147,3,142,227,220,14,1,66,8,129,68,34, + 193,31,127,252,225,210,75,226,76,82,82,146,39,87,179,87,205,237,219,183,99,202,148,41,200,204,204,4,63,84,137,15,154,36,60,60,60,148,55,178, + 0,171,17,36,151,203,33,22,139,137,72,36,34,124,213,30,33,132,248,90,231,206,48,12,86,175,94,141,249,243,231,99,218,180,105,88,186,116,41,154, + 55,111,110,95,47,18,137,80,81,81,129,176,176,48,132,133,133,85,51,16,239,134,176,58,36,216,108,193,146,102,61,35,70,61,254,114,18,137,76,12, + 192,91,157,143,191,1,235,88,91,53,96,89,150,48,12,131,140,140,12,151,122,132,16,104,180,85,88,180,252,67,20,5,100,160,207,27,137,72,77,108, + 201,184,211,116,62,59,31,127,178,72,1,142,194,26,4,194,1,28,64,65,193,81,14,5,121,89,120,103,214,135,62,127,125,196,98,49,46,95,190,108, + 79,23,239,25,230,13,35,71,175,65,114,114,178,215,123,73,34,145,188,251,211,79,63,73,87,175,94,141,181,107,215,130,16,2,153,76,6,165,82,137, + 208,208,80,68,68,68,216,167,248,248,120,242,205,55,223,72,154,55,111,254,46,0,151,134,22,195,208,16,69,221,180,6,67,123,188,1,0,24,250,6, + 197,237,75,115,90,48,101,111,135,248,154,71,103,228,242,128,200,221,7,46,170,166,77,155,134,5,159,14,6,195,48,80,171,213,132,82,74,0,10,150, + 21,225,216,177,99,248,250,235,175,241,252,243,207,227,242,229,203,76,157,58,117,44,147,38,77,10,95,176,96,193,243,0,60,14,34,66,8,105,208,172, + 89,179,131,135,15,31,14,208,104,52,224,56,14,219,182,109,83,244,232,209,227,0,33,164,147,191,198,86,114,114,242,230,195,135,15,119,80,169,84,40, + 47,47,71,69,69,5,76,38,19,88,150,69,82,82,18,62,248,224,3,50,112,224,192,151,198,142,29,171,147,203,229,176,117,132,156,236,74,203,249,81, + 91,188,228,243,80,74,173,247,15,229,104,181,223,210,194,108,188,242,154,111,253,31,39,36,36,188,176,97,195,134,64,126,62,54,54,214,254,49,116,54, + 10,248,201,195,189,68,0,48,137,137,137,227,191,255,254,123,187,102,100,100,36,68,34,17,196,98,49,68,34,17,24,134,193,129,3,7,48,239,221,25, + 8,83,197,98,209,146,47,188,166,51,42,42,106,105,223,190,125,159,90,177,226,175,87,119,179,186,117,145,218,161,45,162,34,131,17,25,22,100,61,79, + 28,193,153,204,107,30,181,108,134,1,147,144,144,240,76,122,122,186,61,157,44,203,218,243,10,88,11,207,188,23,223,96,48,160,117,235,214,94,159,35, + 177,88,220,234,202,149,43,246,151,151,47,231,211,83,82,109,233,28,207,27,194,0,16,30,30,94,77,79,44,22,35,253,215,149,206,121,188,107,77,127, + 175,187,179,230,181,107,215,48,119,238,220,106,215,157,247,110,197,197,197,97,241,226,197,94,207,167,19,109,0,168,28,230,13,0,164,14,191,69,176,142, + 48,225,188,29,191,92,12,160,133,109,157,5,128,26,64,168,11,61,119,58,197,176,118,174,173,114,218,222,249,56,53,16,1,192,214,173,91,249,167,184, + 75,106,106,234,62,219,255,101,50,153,44,71,161,80,196,0,80,111,219,182,13,207,63,255,60,108,174,213,1,17,17,17,53,220,233,26,141,230,180,94, + 175,127,131,82,106,43,105,217,155,104,50,165,165,165,220,206,157,59,153,85,131,123,193,64,129,150,111,205,67,239,126,253,176,61,78,10,22,192,35,23, + 138,161,80,40,68,98,177,216,196,95,12,254,194,56,198,110,81,167,102,159,132,16,54,64,36,66,187,131,91,49,229,224,86,60,162,148,162,36,125,45, + 212,135,246,131,97,8,58,43,35,49,117,212,78,60,26,34,131,84,175,1,195,48,53,140,75,71,205,75,151,46,61,25,28,28,60,207,233,4,251,194, + 85,0,239,187,210,180,165,19,148,82,52,111,222,28,132,16,187,183,192,241,5,228,56,157,62,125,186,198,1,60,105,2,128,82,169,132,82,169,196,158, + 61,123,236,219,116,239,222,29,58,157,14,225,225,225,62,105,22,21,21,209,155,55,111,146,85,171,86,65,44,22,35,34,34,2,10,133,130,172,92,185, + 114,134,68,34,137,215,233,116,156,193,96,128,84,42,93,196,123,183,68,34,81,85,121,121,121,132,59,77,150,101,49,113,226,68,188,254,250,235,88,186, + 116,41,38,76,152,0,231,245,58,157,14,145,145,145,118,99,203,249,1,116,214,244,70,72,2,169,35,13,19,255,250,220,199,13,235,213,109,29,140,178, + 124,3,190,157,124,129,170,111,25,215,120,74,103,121,121,57,58,118,236,88,227,26,137,68,34,48,34,128,11,173,192,216,133,245,209,167,117,3,94,19, + 110,53,57,138,63,79,109,199,185,179,187,192,89,56,88,56,10,74,45,224,204,64,198,206,163,15,221,186,122,51,142,130,218,199,23,144,149,87,154,187, + 68,202,26,2,216,180,183,88,255,169,183,188,139,68,34,232,116,58,252,244,211,79,184,112,225,2,182,109,219,6,173,86,139,200,200,72,132,134,134,162, + 109,219,182,24,59,118,44,146,147,107,126,187,157,53,41,165,43,114,114,114,90,118,236,216,145,148,149,149,161,172,172,12,90,173,22,22,139,5,102,179, + 25,34,145,8,1,1,1,144,203,229,136,142,142,134,78,167,163,122,189,126,133,59,77,142,35,229,154,43,211,47,254,154,62,253,145,161,111,80,172,159, + 79,80,47,81,166,217,125,50,104,252,166,131,83,123,2,160,156,237,173,195,0,212,100,225,138,95,159,241,209,75,158,210,105,245,38,114,56,124,248,16, + 222,122,235,45,232,245,122,155,65,9,48,140,8,39,78,156,192,23,95,124,129,113,227,198,34,49,49,1,102,179,133,84,84,84,88,58,118,236,40,253, + 242,203,47,187,195,102,104,185,58,159,14,70,86,132,86,171,133,90,109,141,161,151,74,165,88,191,126,125,100,255,254,253,247,19,66,58,187,51,182,92, + 105,6,5,5,37,177,44,139,63,254,248,3,95,126,249,37,118,239,222,141,130,130,130,219,177,177,177,33,93,186,116,97,94,121,229,21,180,108,217,18, + 223,126,251,173,203,225,183,156,243,158,125,233,0,178,47,31,4,199,89,189,171,214,201,245,255,238,74,64,206,233,172,170,170,210,157,62,125,58,112,217, + 178,101,136,138,138,66,237,218,181,161,80,40,16,16,16,80,237,35,235,248,225,245,246,108,106,181,90,93,118,118,118,224,15,63,252,128,136,136,8,36, + 39,39,67,161,80,64,42,149,66,36,18,129,16,130,85,171,86,97,205,172,81,200,206,60,139,65,169,53,195,4,156,53,21,10,197,83,43,86,172,168, + 230,2,137,14,11,131,72,204,128,21,19,132,117,31,12,0,184,189,103,163,219,222,33,157,52,137,90,173,214,29,59,118,44,240,228,201,147,224,56,14, + 201,201,201,208,104,52,8,14,14,182,231,127,231,206,157,24,56,112,32,86,175,94,141,246,237,219,123,205,59,199,113,220,233,211,167,25,127,206,167,183, + 188,87,85,85,233,50,50,50,2,191,255,254,123,132,133,133,33,62,62,222,238,113,227,141,163,249,159,207,170,166,17,64,106,221,181,166,191,215,221,89, + 115,240,224,193,168,87,175,30,130,131,131,161,84,42,237,218,158,52,221,216,34,60,42,66,200,207,14,199,239,103,171,93,179,255,186,219,206,246,111,231, + 25,51,102,180,78,75,75,155,219,190,125,251,31,14,31,62,188,198,157,158,59,157,25,51,102,52,73,75,75,155,235,184,189,139,227,212,192,110,116,164, + 166,166,18,91,38,9,33,164,118,171,86,173,78,236,217,179,39,60,40,40,200,190,241,141,27,55,80,86,86,134,160,160,160,224,143,63,254,56,184,75, + 151,46,136,142,142,182,223,44,151,46,93,74,105,208,160,65,5,0,103,191,45,199,48,12,30,125,244,81,252,105,187,175,122,247,235,135,248,248,120,240, + 65,30,1,1,1,120,233,165,151,200,148,41,83,68,188,55,131,82,10,173,86,139,90,181,106,185,245,217,242,23,170,137,182,24,27,187,118,1,67,0, + 77,198,81,72,164,4,12,75,240,48,45,193,47,221,30,3,3,10,195,233,195,0,220,190,131,248,99,158,2,112,95,2,132,40,165,200,202,202,242,201, + 163,101,195,171,185,239,78,147,247,104,28,62,124,24,22,75,181,184,98,79,154,148,97,24,40,149,74,196,196,196,64,46,151,67,161,80,144,31,126,248, + 225,205,218,181,107,215,154,50,101,10,83,81,81,193,60,250,232,163,24,50,100,136,136,175,226,108,210,164,137,231,76,16,130,125,251,246,225,203,47,191, + 196,132,9,19,92,122,180,248,96,201,224,224,59,106,11,81,141,160,68,210,33,60,41,224,231,231,62,107,28,18,145,24,128,189,223,229,97,231,103,185, + 151,212,5,230,143,76,21,216,234,113,223,160,32,156,58,245,87,152,29,127,127,157,61,127,26,115,151,205,209,140,65,0,0,32,0,73,68,65,84,79, + 193,200,5,41,224,53,175,108,149,226,82,134,225,182,254,54,150,186,210,226,0,24,205,38,104,42,181,246,170,71,139,197,130,179,123,127,127,232,234,239, + 151,154,252,252,195,106,49,0,232,246,110,116,220,173,214,144,207,215,53,232,18,46,57,182,183,212,120,204,149,46,159,38,145,72,132,113,227,198,33,45, + 45,13,79,61,245,20,182,109,219,134,183,223,126,27,207,62,251,172,125,59,231,224,83,119,152,76,166,175,198,140,25,51,97,253,250,245,13,223,120,227, + 13,134,247,104,41,20,10,16,66,160,211,233,160,215,235,161,213,106,145,153,153,201,61,247,220,115,23,13,6,195,87,238,244,204,68,126,70,33,211,108, + 171,27,207,212,171,186,246,97,80,199,182,201,90,34,111,85,62,184,65,15,218,119,92,114,24,40,5,229,0,142,2,122,125,21,94,122,105,178,87,111, + 30,103,177,208,43,23,246,34,243,194,121,4,4,4,160,180,180,20,252,227,44,18,137,240,254,236,217,120,126,194,4,36,38,38,0,212,234,73,253,225, + 135,31,216,22,45,90,192,96,48,52,115,167,235,104,100,233,116,58,156,62,125,26,93,187,118,69,78,78,14,206,159,63,143,135,30,122,8,43,87,174, + 84,141,28,57,210,163,177,229,204,217,179,103,103,180,104,209,98,97,101,101,101,105,101,101,229,66,0,107,40,165,101,132,144,198,89,89,89,139,183,111, + 223,222,233,157,119,222,97,109,158,44,30,215,102,2,165,48,153,204,208,106,245,30,13,44,126,158,82,111,225,73,246,188,211,134,13,27,162,127,255,254, + 16,139,197,80,40,20,8,12,12,172,86,109,230,108,32,120,128,2,224,8,33,136,141,141,69,223,190,125,33,145,72,170,105,242,247,97,223,190,125,49, + 233,189,183,240,213,164,110,248,114,204,67,232,241,126,129,199,116,106,52,154,202,223,126,251,77,254,250,132,9,104,81,191,62,34,131,131,145,24,173,130, + 92,38,133,196,49,77,196,251,187,149,82,74,9,33,28,203,178,104,218,180,41,10,10,10,112,237,218,53,92,187,118,13,12,195,160,99,199,142,224,171, + 206,47,95,190,140,247,222,123,15,122,189,222,231,112,6,111,231,115,249,242,229,248,246,219,111,193,48,12,102,207,174,49,122,90,181,164,194,118,62,27, + 53,106,132,199,30,123,172,218,249,148,203,229,118,163,8,0,114,142,85,218,175,87,92,92,156,95,154,59,142,223,192,178,157,191,65,111,224,80,161,49, + 85,219,161,86,100,48,14,126,255,134,95,233,252,234,171,175,80,94,94,14,150,101,171,121,179,120,39,74,66,66,2,190,252,242,75,151,98,142,182,136, + 203,131,121,48,104,220,108,199,223,92,178,180,180,180,185,206,251,123,211,115,92,239,180,191,193,201,56,115,123,19,187,172,58,148,201,100,51,127,251,237, + 183,240,242,242,114,92,190,124,25,12,195,216,235,212,69,34,17,140,70,35,174,92,185,130,176,176,48,20,22,22,66,38,147,129,101,89,24,12,6,0, + 168,17,112,75,41,165,114,185,28,148,82,76,42,178,134,8,253,26,43,65,54,128,212,34,123,96,49,44,22,11,54,108,216,128,192,192,64,4,5,5, + 217,127,189,85,35,157,189,150,133,2,49,1,115,120,31,8,3,48,4,32,44,192,48,20,12,177,45,39,128,50,34,204,163,142,51,62,4,198,123,12, + 128,119,210,178,123,159,92,121,178,156,255,223,187,119,175,47,233,3,165,20,245,234,213,67,96,96,160,125,218,190,125,187,125,155,238,221,187,195,98,177, + 32,34,34,194,171,38,165,148,74,36,18,112,28,135,168,168,40,136,197,98,178,114,229,202,25,117,234,212,169,245,218,107,175,49,44,203,226,212,169,83, + 56,119,238,28,146,147,147,125,142,217,42,43,43,187,53,99,198,12,203,140,25,214,54,20,77,154,52,65,89,89,89,33,191,190,162,162,162,164,87,175, + 94,213,226,54,138,139,139,75,188,158,0,23,4,38,146,70,177,141,20,219,95,88,218,68,33,15,17,99,195,156,43,56,184,50,255,27,125,1,150,2, + 184,68,61,12,90,76,8,65,69,69,5,58,117,234,4,190,5,164,88,44,6,17,81,4,212,175,192,11,95,55,6,175,121,105,11,240,237,103,203,48, + 108,216,48,29,165,149,249,174,244,56,142,131,217,104,134,70,167,67,165,90,99,247,14,21,222,44,8,125,99,202,171,226,5,47,61,13,0,152,242,233, + 18,168,151,254,245,34,219,248,250,200,168,193,11,126,152,14,96,160,167,188,86,86,86,66,167,211,161,110,221,186,56,124,248,48,212,106,53,250,244,233, + 3,66,136,189,133,168,175,80,74,13,132,144,14,253,250,245,59,241,201,39,159,212,109,220,184,49,169,170,170,130,70,163,129,227,239,217,179,103,233,154, + 53,107,174,106,52,154,71,41,165,6,119,122,219,243,150,103,245,142,123,102,253,238,83,108,191,168,122,23,131,243,110,215,53,151,228,201,170,42,180,153, + 58,11,61,7,106,1,44,224,64,205,28,44,182,106,47,111,112,148,194,104,50,131,82,14,217,217,217,200,204,188,128,71,30,121,4,183,111,223,134,132, + 82,76,191,114,5,77,2,100,168,148,72,65,109,85,137,79,63,253,180,89,171,213,50,132,184,255,2,215,170,85,235,115,222,200,202,200,200,192,232,209, + 163,13,197,197,197,82,0,120,234,169,167,12,171,86,173,146,214,171,87,15,43,87,174,84,13,25,50,36,29,64,83,31,207,233,106,0,171,157,151,71, + 68,68,44,186,113,227,70,23,199,152,31,179,217,62,4,171,194,165,22,7,152,76,38,104,181,122,148,151,171,97,48,154,108,239,76,14,22,139,217,246, + 203,193,108,123,143,74,37,162,160,86,205,106,85,82,74,193,16,82,118,242,236,173,4,87,186,188,225,195,7,148,243,6,129,175,222,44,23,88,136,173, + 149,89,68,68,4,196,98,49,86,175,94,141,51,135,182,67,202,82,88,204,38,152,77,70,88,76,6,136,89,22,187,79,93,67,207,70,65,222,52,65, + 8,161,145,145,145,72,109,223,30,253,218,183,183,54,111,19,137,16,40,147,65,33,9,176,122,178,0,80,11,227,165,40,109,135,227,211,25,29,29,141, + 147,39,79,98,210,164,73,152,63,127,62,228,114,185,189,245,243,133,11,23,176,110,221,58,244,236,217,211,175,106,46,199,243,249,213,87,95,97,243,230, + 205,120,249,229,151,49,102,204,24,172,94,189,26,151,47,95,134,197,98,177,14,232,236,25,11,127,239,242,213,123,82,169,180,154,247,137,55,0,253,189, + 70,142,154,79,15,170,133,205,135,214,128,128,224,232,247,175,86,243,60,125,177,246,128,223,154,239,188,243,78,181,116,250,226,205,242,21,39,175,147,47, + 219,241,177,32,218,233,211,167,207,36,132,252,60,125,250,244,153,243,230,205,251,211,23,61,55,235,249,2,123,170,195,50,215,49,39,112,99,104,41,20, + 138,71,2,3,3,113,249,242,101,244,233,211,199,80,82,82,114,81,44,22,63,84,92,92,44,43,44,44,132,70,163,169,156,61,123,246,53,0,242,118, + 237,218,213,219,189,123,55,114,114,114,176,106,213,42,0,216,232,74,147,97,24,112,28,103,191,41,156,139,175,44,203,226,200,145,35,56,114,164,122,232, + 215,178,101,203,188,126,48,134,252,180,5,167,78,157,178,127,28,121,43,218,241,151,101,89,4,4,4,0,9,46,223,55,46,241,22,24,239,45,0,222, + 21,190,198,126,57,122,35,188,145,151,151,231,118,255,35,71,142,216,61,90,190,104,178,44,11,139,197,2,185,92,78,36,18,9,145,72,36,241,188,145, + 197,178,172,253,129,145,201,100,144,201,100,213,74,169,30,210,215,213,211,250,194,194,66,191,186,113,32,173,136,88,81,130,161,4,40,168,186,129,189,124, + 172,152,178,54,137,10,137,146,238,120,102,81,99,187,145,117,104,101,254,23,250,2,124,4,224,154,167,152,50,210,138,136,99,16,41,61,123,225,52,50, + 50,50,236,121,42,45,43,193,115,51,159,192,200,197,13,237,70,86,92,85,55,188,245,213,243,104,214,172,25,88,150,245,216,13,129,209,100,130,86,99, + 128,186,82,139,119,231,217,134,222,124,23,199,0,28,235,240,194,36,76,236,221,179,27,252,172,166,230,211,22,21,21,133,125,251,246,129,16,130,244,244, + 116,132,132,132,160,119,239,222,8,14,14,198,244,233,211,241,228,147,79,250,245,50,163,148,150,19,66,58,188,242,202,43,39,62,252,240,195,196,132,132, + 4,24,12,6,24,141,70,24,12,6,100,101,101,97,205,154,53,57,26,141,166,3,165,180,220,155,222,246,188,229,89,63,238,159,114,179,199,240,33,218, + 11,5,191,34,63,191,4,102,115,30,56,139,25,70,179,197,234,225,51,155,97,54,91,32,145,176,193,31,206,121,117,39,7,10,134,33,134,161,67,135, + 62,238,172,199,81,10,202,113,136,139,141,68,230,217,237,40,47,43,194,207,27,142,66,171,213,0,96,192,190,216,15,231,127,254,18,242,115,181,97,14, + 8,192,31,231,50,73,118,118,78,128,197,194,225,161,218,129,49,238,210,25,26,26,218,184,188,188,28,103,207,158,197,216,177,99,243,75,74,74,206,3, + 232,14,0,37,37,37,7,71,143,30,221,120,197,138,21,49,181,107,215,70,96,96,160,87,151,43,33,36,16,192,68,0,189,96,141,3,225,41,5,48, + 91,165,82,201,50,50,50,106,180,180,219,191,127,63,0,184,244,98,82,216,60,90,58,29,138,74,110,227,217,23,222,180,45,183,253,165,213,183,253,207, + 203,8,0,128,226,130,44,60,253,236,36,153,167,244,114,28,231,242,67,232,71,140,142,245,184,86,79,17,127,14,16,24,24,104,173,126,219,180,6,91, + 63,122,1,176,24,65,77,90,192,168,1,140,149,224,12,26,16,137,28,48,105,61,234,218,244,104,96,96,32,2,229,114,68,133,134,90,59,129,100,89, + 136,197,34,112,38,128,88,172,199,165,28,192,121,237,24,196,154,214,200,200,72,112,28,7,185,92,142,236,236,108,76,156,56,17,70,163,17,131,6,13, + 130,193,96,128,78,167,131,86,171,69,157,58,117,160,209,120,109,71,97,199,241,124,126,249,229,151,8,11,11,195,165,75,151,208,181,107,87,156,60,121, + 18,173,91,91,219,40,84,85,85,161,184,184,24,214,24,67,215,105,228,207,39,199,113,246,243,201,27,91,142,85,124,0,252,190,70,206,154,214,246,1, + 168,113,221,39,143,233,238,183,230,188,121,243,80,84,84,84,195,147,197,255,31,23,23,135,47,190,240,30,155,231,230,120,188,247,200,85,203,235,84,167, + 237,0,107,172,213,9,0,250,121,243,230,253,57,111,222,188,126,132,144,159,231,205,155,215,207,105,59,111,58,206,235,139,124,77,179,221,208,178,185,234, + 186,56,174,228,79,116,120,120,56,155,152,152,200,4,7,7,163,172,172,12,42,149,138,22,21,21,13,87,40,20,179,126,248,225,135,122,149,149,149,184, + 112,225,2,22,45,90,116,12,192,66,87,7,226,13,173,109,42,155,235,216,230,201,114,156,239,223,191,63,106,215,174,93,205,155,37,151,203,61,222,60, + 252,58,222,35,196,178,44,26,52,104,32,191,122,245,170,86,34,145,32,62,62,94,158,159,159,175,229,251,129,242,7,111,129,241,222,2,224,157,211,73, + 8,65,155,54,109,170,121,176,28,127,29,255,223,188,121,51,224,165,234,144,215,108,220,184,177,253,124,5,5,5,241,251,2,0,250,244,233,3,142,227, + 16,25,25,233,147,38,111,212,218,2,224,161,211,233,56,181,90,205,100,100,100,64,42,149,34,40,40,200,30,171,19,16,16,96,247,102,254,157,4,222, + 198,103,221,158,139,127,78,87,105,193,193,181,183,190,32,132,188,136,186,144,132,75,217,159,199,47,106,20,23,18,45,197,190,21,55,113,112,69,254,114, + 125,33,22,81,74,175,250,162,249,200,51,178,160,15,127,121,26,25,107,43,17,42,142,2,43,98,81,65,242,240,220,55,245,193,107,94,220,68,81,25, + 118,5,159,22,124,10,199,192,92,87,80,202,193,96,50,65,171,213,162,178,178,18,0,144,245,199,134,106,219,24,245,110,29,108,94,225,95,176,165,165, + 165,216,190,125,59,126,253,245,87,251,75,220,217,168,246,213,224,162,148,22,17,66,58,78,157,58,245,232,251,239,191,31,27,30,30,14,163,209,136,27, + 55,110,224,155,111,190,185,169,209,104,58,82,74,125,126,193,128,2,38,147,25,58,141,30,229,21,106,204,154,243,157,187,45,25,0,40,45,204,68,255, + 1,79,74,93,109,64,41,133,209,104,70,114,66,36,46,103,158,193,152,103,94,251,235,32,14,199,163,213,119,66,225,173,11,24,247,204,100,183,165,181, + 243,231,207,191,218,186,117,235,57,106,181,186,76,163,209,60,9,96,129,195,106,77,73,73,73,167,1,3,6,124,18,30,30,222,170,176,176,112,166,151, + 28,3,192,244,236,236,236,153,73,73,73,213,22,234,245,122,36,37,37,53,40,44,44,28,213,185,115,231,183,0,132,59,172,14,2,176,3,192,231,174, + 4,41,229,236,85,135,149,149,90,4,135,214,66,222,181,125,94,19,34,97,117,160,156,251,106,68,98,235,114,192,149,23,203,209,155,229,199,253,67,99, + 98,172,54,45,255,193,126,252,137,49,120,124,98,26,20,98,96,238,211,29,80,39,20,128,60,28,146,206,111,128,132,38,89,119,156,184,197,39,253,105, + 95,126,137,83,182,247,113,188,74,133,169,195,135,131,154,128,195,231,206,97,237,111,191,97,120,215,174,80,4,184,12,121,115,155,119,137,68,130,172,172, + 44,28,62,124,24,141,26,53,194,229,203,151,171,117,67,65,41,245,57,255,206,231,51,61,61,29,185,185,185,96,24,6,91,182,108,65,94,94,30,26, + 54,108,8,157,78,7,157,78,135,221,187,119,163,109,219,182,110,245,40,165,84,165,82,129,82,90,45,168,222,85,64,189,63,215,200,149,38,207,157,94, + 119,71,205,57,115,230,184,108,0,224,139,166,43,91,196,5,25,168,238,77,2,31,47,197,27,70,206,243,0,194,248,101,211,167,79,159,233,235,126,142, + 243,188,71,204,73,215,43,34,192,90,39,234,184,176,180,180,244,232,209,163,71,83,148,74,37,50,51,51,165,193,193,193,41,182,229,96,24,6,233,233, + 233,65,125,251,246,221,185,96,193,130,120,142,227,80,80,80,128,215,95,127,189,210,108,54,143,160,148,154,93,29,136,183,100,61,177,101,75,205,135,109, + 211,166,77,62,85,129,240,134,148,72,36,66,88,88,152,86,171,213,66,161,80,32,44,44,76,171,209,104,160,84,42,249,186,98,134,16,34,245,84,237, + 193,227,67,96,124,181,0,120,95,56,119,238,156,79,219,49,12,227,182,164,227,76,118,182,235,238,140,248,216,40,190,207,60,95,53,109,165,60,202,27, + 126,10,133,2,225,225,225,144,201,100,144,203,229,213,140,44,153,76,230,245,193,241,214,33,169,92,46,63,174,84,42,67,29,171,235,212,106,117,89,73, + 73,201,35,174,244,20,97,146,97,143,79,74,2,0,132,68,73,254,243,243,194,235,128,17,133,253,166,37,183,142,111,172,68,73,158,30,219,23,95,191, + 164,47,196,18,0,62,185,16,171,107,230,34,244,86,39,68,132,69,34,47,226,71,240,154,151,54,139,176,250,235,117,72,73,73,113,44,165,185,245,146, + 113,160,48,27,205,208,106,117,168,84,123,47,181,251,139,193,96,128,76,38,195,154,53,107,208,161,67,7,180,107,215,14,128,127,177,89,174,160,148,230, + 18,66,186,44,92,184,240,216,199,31,127,28,86,89,89,137,111,191,253,182,188,178,178,178,11,165,52,215,47,45,142,194,100,52,66,163,211,163,170,210, + 122,14,174,252,185,193,203,94,30,180,204,38,60,250,72,61,20,21,151,64,161,12,195,205,107,7,188,238,199,66,99,117,117,184,211,165,116,13,0,123, + 131,6,23,65,191,87,0,248,252,82,5,208,54,41,41,9,249,249,213,107,148,175,95,191,14,139,197,162,167,214,126,178,158,113,56,30,75,41,245,232, + 135,161,148,90,189,163,90,61,42,43,173,222,21,93,85,177,31,73,114,15,111,108,184,139,201,186,147,123,136,16,2,177,88,12,150,101,241,210,75,47, + 225,236,153,51,232,30,91,129,58,49,65,160,21,121,144,116,123,7,191,23,201,177,224,19,151,141,86,61,178,206,33,4,98,193,186,117,46,215,93,25, + 232,177,214,221,14,159,247,139,23,47,66,46,151,195,98,177,212,248,222,248,155,127,199,243,57,106,212,40,140,29,59,22,203,151,47,135,82,169,68,84, + 84,20,118,236,216,129,130,130,2,136,68,34,212,170,85,203,167,130,42,239,37,227,175,209,197,171,231,176,235,240,47,184,158,123,13,55,243,115,252,74, + 159,59,77,30,254,186,255,184,235,52,158,232,233,177,235,61,183,154,239,188,243,14,10,11,11,171,121,178,28,223,75,238,60,90,206,182,136,19,197,78, + 177,80,252,188,193,201,232,113,158,119,222,30,0,10,1,176,94,246,115,158,47,158,55,111,222,94,222,19,102,211,101,169,151,248,44,192,125,247,14,105, + 3,7,14,28,176,104,209,34,85,64,64,128,189,5,210,244,233,211,49,117,234,84,212,173,91,23,42,149,42,46,52,52,20,37,37,37,152,63,127,62, + 178,179,179,159,167,46,58,218,227,225,63,76,157,174,170,33,149,254,85,96,229,61,91,0,48,126,252,248,26,30,45,254,2,121,194,100,50,33,34,34, + 2,26,141,6,44,203,98,208,160,65,236,31,127,252,97,233,221,187,55,6,15,30,204,158,57,115,198,146,154,154,10,150,101,209,173,91,183,138,31,127, + 252,113,10,33,228,35,111,198,214,189,12,140,231,111,50,95,3,42,125,49,46,61,105,18,66,160,209,104,32,18,137,236,129,242,190,104,242,85,135,142, + 15,32,195,48,8,13,13,181,151,80,120,143,22,111,104,121,211,245,214,33,169,66,161,8,206,204,204,172,199,55,188,40,46,46,70,183,110,221,220,26, + 72,149,133,198,109,71,214,230,143,104,63,60,6,221,158,141,7,128,255,252,185,167,20,237,158,180,150,164,191,125,41,147,211,231,73,141,1,1,248,88, + 167,211,77,38,132,132,200,229,242,153,148,82,177,78,167,123,149,186,232,128,210,89,115,207,178,223,112,96,79,41,38,127,111,13,218,223,56,251,26,38, + 140,152,131,198,141,27,219,95,74,182,23,164,251,136,16,14,48,154,45,168,212,234,80,169,245,189,234,193,27,252,243,176,116,233,82,156,63,127,30,58, + 157,14,139,23,47,182,55,42,112,52,178,238,212,224,162,148,102,61,252,240,195,92,159,62,125,112,244,232,81,200,100,50,19,165,212,239,254,175,56,202, + 193,104,54,67,167,213,162,178,170,202,223,221,157,211,4,163,209,12,150,161,48,26,77,0,40,244,218,82,159,119,191,171,131,251,135,221,170,62,127,254, + 60,12,6,3,222,123,239,61,203,137,19,39,246,2,120,1,176,247,227,52,234,177,199,30,155,157,154,154,26,74,8,153,76,41,253,206,157,32,165,20, + 38,179,205,104,191,203,243,232,136,99,141,128,171,152,172,59,233,102,197,241,195,202,113,28,158,127,238,57,244,136,173,192,224,86,42,84,221,186,4,69, + 136,10,36,52,25,11,62,217,134,63,175,250,28,138,73,1,160,119,231,129,104,222,168,102,247,96,29,187,91,203,100,7,119,31,71,65,241,77,159,211, + 9,88,243,94,85,85,229,214,115,229,143,71,139,135,63,143,211,167,79,199,83,79,61,133,170,170,42,152,76,38,108,219,182,13,43,86,172,64,70,70, + 6,44,22,11,250,247,239,15,150,101,61,158,100,231,107,244,211,142,181,184,173,46,133,84,34,69,105,89,49,174,231,93,67,116,132,219,154,113,159,52, + 29,191,33,13,83,103,1,0,98,85,33,126,25,90,142,154,31,126,248,97,13,227,253,30,116,217,115,220,203,188,191,251,255,109,184,52,180,40,165,215, + 8,33,237,134,15,31,62,29,214,250,77,0,40,7,176,110,231,206,157,3,163,162,162,186,182,111,223,94,36,149,74,113,248,240,97,252,248,227,143,223, + 81,74,215,122,58,144,84,42,213,38,39,39,203,249,151,63,255,32,6,7,7,179,243,231,207,39,203,150,45,115,185,223,150,45,91,188,94,160,242,242, + 114,84,85,85,33,36,36,4,70,163,17,125,250,244,177,156,63,127,30,18,137,4,3,6,12,176,156,59,119,206,126,161,191,254,250,235,120,173,86,251, + 232,175,191,254,218,11,64,103,111,39,136,199,33,48,62,16,62,6,192,187,208,240,217,208,242,181,58,206,157,230,164,73,53,59,236,243,69,83,34,145, + 152,249,158,223,25,134,129,209,104,196,195,15,63,140,194,194,66,251,67,163,84,42,237,70,150,47,134,150,173,250,217,109,135,164,34,145,8,6,131,1, + 157,59,119,6,33,4,75,150,44,241,152,86,77,30,94,95,255,238,149,72,0,221,121,195,168,253,176,24,16,6,56,177,169,16,33,85,13,244,23,42, + 142,54,169,170,170,66,98,98,226,138,70,141,26,169,14,30,60,24,203,207,3,104,233,74,115,243,251,55,135,0,144,184,210,76,9,233,133,118,109,30, + 181,23,18,248,128,115,143,47,96,142,35,129,129,17,136,141,109,0,85,148,14,156,47,193,35,126,48,109,218,180,106,198,20,117,209,243,50,0,159,239, + 57,103,120,45,63,90,201,214,212,0,236,85,94,85,85,186,59,214,1,0,142,163,48,153,76,208,104,245,208,27,238,78,203,87,162,162,162,218,17,66, + 54,57,45,46,5,48,219,67,193,210,126,161,115,114,114,208,187,119,111,252,242,203,47,236,198,141,27,187,111,222,188,249,92,189,122,245,114,134,13,27, + 150,48,97,194,4,89,231,206,157,81,92,92,140,86,173,90,189,11,224,59,119,233,160,182,42,88,173,78,143,170,170,123,239,29,117,229,205,186,155,15, + 35,127,79,190,253,246,91,232,81,171,12,131,90,132,96,197,207,135,48,170,165,28,48,120,12,25,115,9,159,150,136,184,218,168,221,180,93,141,245,1, + 33,214,190,92,107,55,109,7,54,231,178,95,218,206,85,111,206,207,244,157,120,244,196,98,49,190,253,246,91,44,91,182,12,109,218,180,65,112,112,176, + 221,200,58,115,230,12,62,248,224,3,4,4,4,96,242,228,201,208,233,116,62,53,17,229,175,209,230,93,235,81,81,89,14,134,48,40,45,47,129,78, + 175,197,180,255,120,237,231,216,163,166,227,59,226,218,174,121,0,128,13,59,253,254,196,217,53,103,206,156,137,252,252,252,106,158,172,187,137,203,250,183, + 227,182,195,82,74,233,53,0,207,59,47,39,132,4,189,251,238,187,61,249,113,139,62,249,228,19,132,135,135,119,136,136,136,248,211,96,48,20,87,85, + 85,77,229,141,16,66,72,15,106,235,107,35,63,63,223,101,16,105,80,80,144,177,103,207,158,226,90,181,106,85,107,109,168,84,42,237,219,56,62,240, + 142,154,252,58,179,217,140,105,211,166,97,238,220,185,72,76,76,68,106,106,42,250,245,235,7,66,8,250,244,233,131,212,212,191,170,114,67,67,67,37, + 191,252,242,203,99,12,195,156,115,167,233,10,62,48,222,100,50,249,20,0,239,172,201,223,108,147,38,77,194,220,185,115,49,115,166,231,80,15,91,211, + 215,106,79,248,223,161,89,82,82,242,157,227,122,165,82,185,100,240,224,193,162,156,156,156,106,198,149,227,228,226,197,84,77,211,91,135,164,44,203,34, + 58,58,26,239,191,255,62,34,34,34,16,19,19,99,239,120,211,149,38,165,244,22,33,100,252,250,119,175,124,3,155,177,21,16,40,66,101,169,17,155, + 62,200,206,77,144,52,145,171,213,106,249,238,221,187,97,52,26,213,38,147,41,74,173,86,131,159,119,167,153,156,156,92,89,188,39,49,252,8,110,192, + 81,115,231,194,34,60,156,168,195,23,95,124,97,79,119,96,96,32,230,204,153,3,56,121,74,28,53,45,148,203,248,48,237,173,142,223,174,218,44,150, + 73,129,35,251,55,160,226,118,245,234,36,189,241,175,166,212,210,135,187,195,112,106,119,141,235,230,234,186,3,86,99,122,214,172,89,152,53,107,86,141, + 125,28,89,186,180,102,239,19,190,220,243,142,248,98,108,185,212,228,40,81,40,195,16,160,140,69,74,147,48,112,174,35,11,124,210,228,227,148,116,58, + 61,52,26,159,66,35,125,79,103,117,78,28,63,126,124,64,68,68,4,114,115,115,85,98,177,120,128,227,74,173,86,139,228,228,228,6,0,236,67,89, + 185,211,156,52,105,146,254,205,55,223,148,141,24,49,2,131,7,15,198,136,17,35,100,18,137,164,190,213,59,103,68,110,110,46,118,239,222,141,162,162, + 162,11,158,210,201,81,74,228,138,80,4,40,107,33,165,105,40,56,206,191,243,232,46,157,142,94,113,71,111,150,63,70,150,187,251,19,0,78,236,222, + 132,183,95,109,138,239,182,30,195,162,227,64,243,208,66,164,168,138,192,21,93,192,235,163,90,99,193,247,39,1,0,251,247,121,214,132,53,12,200,109, + 26,116,90,143,131,104,184,77,167,99,65,149,247,92,57,30,199,91,140,150,171,235,206,107,174,89,179,6,87,174,92,1,33,4,106,181,26,183,110,221, + 194,161,67,135,176,118,237,90,12,29,58,20,128,53,22,118,228,200,145,140,39,77,231,107,52,229,185,255,195,155,11,94,3,5,69,195,122,41,152,62, + 113,22,218,52,111,127,199,121,119,215,109,135,55,111,150,39,205,133,11,23,222,209,189,244,160,226,215,152,117,0,16,25,25,57,226,177,199,30,131,94, + 175,135,74,165,66,118,118,54,24,134,169,11,88,171,240,226,226,226,214,1,168,235,171,30,203,178,48,155,205,246,216,31,126,2,128,254,253,251,99,203, + 150,45,94,75,20,49,49,49,72,72,72,192,43,175,188,82,163,149,3,239,61,99,24,6,114,185,28,91,183,110,205,47,45,45,45,245,43,160,23,127, + 5,198,31,60,120,208,231,0,120,71,140,70,99,206,165,75,151,106,45,93,186,148,5,92,127,252,28,217,191,127,191,25,94,134,42,185,31,154,206,240, + 47,26,119,70,150,47,221,8,120,235,144,84,36,18,225,226,197,139,120,251,237,183,65,8,193,134,13,222,99,120,108,113,68,118,99,171,101,106,36,126, + 156,115,149,86,222,52,205,63,93,118,250,70,120,120,248,139,176,182,10,73,59,117,234,84,80,120,120,248,44,126,222,157,166,197,98,185,54,109,226,219, + 161,31,126,49,155,57,130,235,104,153,26,137,141,115,175,97,198,11,239,163,95,159,129,53,90,137,109,220,184,209,192,113,156,219,113,240,206,94,40,94, + 214,34,37,42,172,255,227,29,155,129,16,24,13,53,107,170,3,111,91,131,228,165,15,119,199,224,143,214,98,227,148,225,190,228,61,235,192,129,3,225, + 75,151,46,21,1,222,175,251,129,3,7,204,119,82,237,199,127,112,140,70,35,180,218,59,243,162,80,74,15,207,155,243,102,207,149,171,183,137,9,49, + 224,200,190,13,40,47,115,29,206,32,21,139,176,108,197,143,102,137,152,117,25,116,98,225,56,54,60,50,1,70,139,12,173,90,183,131,197,98,6,231, + 165,91,8,66,0,139,133,130,250,208,39,157,3,159,13,26,52,104,196,226,197,139,83,92,173,244,161,17,76,182,78,167,67,94,94,30,52,26,205,250, + 25,51,102,24,183,109,219,246,204,144,33,67,208,162,69,11,212,170,85,11,183,110,221,66,86,86,22,86,172,88,65,15,29,58,180,30,192,139,158,18, + 68,41,221,148,54,231,205,177,43,190,223,38,101,136,17,71,246,111,64,249,109,151,189,138,216,145,72,196,88,254,221,143,70,137,68,156,233,105,59,126, + 208,248,123,225,201,114,102,192,232,137,24,188,112,17,234,182,233,141,180,249,61,176,124,206,147,248,184,143,4,198,244,81,104,62,116,37,214,188,215,23, + 0,16,235,114,172,134,154,136,69,18,220,112,225,177,42,43,183,6,192,171,213,254,121,58,249,188,3,238,61,87,254,122,180,120,77,106,235,59,175,184, + 184,24,58,157,206,30,159,26,18,242,215,224,8,67,135,14,197,83,79,61,229,213,163,229,120,141,186,60,218,19,199,58,121,188,164,126,165,211,157,161, + 117,47,52,93,221,75,255,249,207,127,0,224,127,202,187,229,183,161,85,81,81,113,134,82,218,140,191,89,170,28,226,5,174,95,191,14,142,227,252,10, + 70,97,24,6,6,131,129,239,28,179,90,191,76,124,112,188,167,7,159,82,106,41,45,45,197,99,143,61,134,78,157,58,217,171,79,28,39,30,163,209, + 136,141,27,55,130,227,56,151,65,214,158,112,8,140,175,132,159,1,240,0,80,88,88,216,187,115,231,206,59,69,34,145,79,163,104,114,28,151,93,80, + 80,80,163,137,251,253,214,116,134,111,45,234,206,200,2,188,191,136,188,117,72,42,18,137,160,84,42,241,211,79,63,33,50,50,210,231,180,241,198,214, + 186,119,174,164,165,207,190,210,217,98,192,90,67,25,50,0,156,160,148,58,119,76,218,199,155,94,110,110,110,215,225,195,135,111,39,132,36,107,15,148, + 133,108,152,157,45,21,155,229,218,119,54,191,167,157,251,222,252,26,69,102,163,209,120,177,176,176,240,73,79,154,191,159,43,252,192,211,250,46,145,178, + 125,0,84,131,63,90,123,99,111,177,33,169,75,164,244,250,198,215,71,36,122,218,39,63,63,191,215,240,225,195,127,241,245,186,155,205,230,107,249,249, + 249,126,93,119,192,106,104,101,102,102,114,207,62,251,108,113,81,81,145,199,124,186,99,250,219,139,62,158,251,238,75,17,125,122,182,107,3,6,48,232, + 221,218,39,148,0,84,36,102,115,166,206,252,244,57,87,27,24,140,198,130,55,255,111,114,216,183,223,109,96,2,2,100,56,118,112,19,42,202,11,93, + 109,106,71,34,22,97,209,146,85,156,136,97,60,143,203,226,152,16,74,43,8,33,29,158,120,226,137,23,241,87,232,132,35,217,112,211,186,218,198,194, + 132,132,132,166,44,203,202,0,188,77,41,189,78,8,249,236,208,161,67,189,0,180,101,89,182,150,197,98,201,131,181,208,179,150,82,250,187,183,52,253, + 126,174,96,66,139,198,170,248,62,61,218,246,6,33,212,96,240,92,214,35,4,20,148,82,137,68,156,121,252,247,155,205,221,111,87,109,4,142,123,222, + 130,248,197,23,95,196,139,47,90,109,72,74,41,150,44,233,132,245,127,28,196,208,230,185,208,127,213,17,36,216,227,173,94,45,157,0,240,127,111,61, + 123,207,210,230,152,119,62,125,247,34,70,139,215,124,230,153,103,208,176,97,67,176,44,139,13,27,54,32,38,38,6,173,91,183,198,232,209,163,177,126, + 253,122,116,236,216,145,47,168,122,44,45,220,143,107,244,223,212,252,95,50,176,120,252,54,180,140,70,227,59,181,107,215,22,7,4,4,164,88,44,22, + 80,74,97,177,88,168,205,168,241,187,21,158,88,44,214,61,244,208,67,196,85,235,4,254,127,165,82,233,182,56,205,178,236,188,228,228,228,25,132,239, + 4,196,134,171,122,118,142,227,56,145,72,52,207,159,244,241,220,109,96,60,165,180,10,128,103,255,238,63,64,211,25,177,88,92,213,168,81,35,123,60, + 146,115,159,40,132,16,200,229,114,143,209,185,222,58,36,173,170,170,186,213,187,119,111,139,227,122,199,14,77,61,97,51,182,166,0,72,130,117,236,169, + 203,30,235,24,60,107,85,1,232,0,0,132,144,104,171,102,165,1,168,188,76,125,24,144,248,142,32,244,122,223,17,207,36,237,45,54,36,1,0,111, + 108,193,67,195,18,74,169,22,192,99,247,37,61,14,92,189,122,213,208,182,109,219,213,106,181,122,226,221,228,127,230,59,75,124,233,18,193,43,231,46, + 150,54,19,179,204,245,65,3,122,196,91,171,222,12,148,56,212,220,58,95,116,254,13,192,136,152,171,25,127,20,248,220,215,29,96,53,182,0,204,189, + 147,116,218,98,183,186,57,45,251,29,128,87,131,202,19,191,159,47,242,219,88,246,134,217,108,206,173,91,215,90,1,225,171,49,97,50,153,60,182,60, + 53,153,76,185,206,222,95,71,254,68,8,102,30,5,172,195,196,149,248,164,169,211,233,74,219,183,111,239,151,219,197,108,54,123,124,135,56,230,189,86, + 173,90,136,141,141,181,255,242,56,47,247,150,78,0,218,224,224,224,106,35,153,80,74,73,219,182,109,249,112,8,166,178,178,146,235,220,185,51,195,178, + 172,197,246,30,245,232,134,187,31,215,200,147,102,108,236,74,87,187,220,149,230,157,166,243,65,193,111,67,139,82,122,3,192,168,123,149,128,130,130,130, + 187,26,115,165,188,188,124,57,220,12,18,44,112,247,148,148,148,68,120,223,202,51,222,58,36,45,40,40,240,216,161,169,55,168,117,108,77,207,99,120, + 252,3,52,93,177,183,200,48,174,198,50,155,209,245,223,166,170,170,42,209,91,183,3,238,24,58,116,232,189,141,252,7,64,173,227,202,248,222,227,176, + 128,87,138,139,139,107,54,225,187,75,138,138,138,238,185,102,105,105,169,219,33,148,238,148,251,145,119,147,201,116,247,99,136,57,113,63,210,249,111,209, + 124,80,16,162,212,4,4,4,92,114,167,70,150,128,128,128,128,192,95,16,0,61,92,173,240,167,69,18,33,196,165,134,39,188,233,11,154,130,166,160, + 41,104,10,154,130,166,160,249,224,105,122,211,246,199,254,248,87,224,42,120,252,94,77,0,122,8,154,130,166,160,41,104,10,154,130,166,160,41,104,254, + 175,78,66,213,161,128,128,128,128,128,128,128,192,125,66,48,180,4,4,4,4,4,4,4,4,238,19,130,161,37,32,32,32,32,32,32,32,112,159,16, + 12,45,1,1,1,1,1,1,1,129,251,132,96,104,9,8,8,8,8,8,8,8,220,39,136,173,245,128,128,128,128,128,128,128,128,128,192,61,70,4, + 0,91,183,110,181,91,91,169,169,169,254,141,160,41,32,32,32,32,32,32,32,112,151,60,168,182,136,125,8,158,7,41,83,2,2,2,2,2,2,2, + 255,62,30,68,91,196,30,163,229,104,73,10,8,8,8,8,8,8,8,252,221,60,136,182,136,221,208,122,16,173,72,1,1,1,1,1,1,129,127,15, + 15,162,45,82,205,163,245,32,90,146,2,2,2,2,2,2,2,255,14,30,68,91,68,104,117,40,32,32,32,32,32,32,32,112,159,16,250,209,18,16, + 16,16,16,16,16,16,184,79,220,87,67,139,16,210,67,208,20,52,5,77,65,83,208,20,52,5,77,65,243,127,21,193,163,37,32,32,32,32,32,32, + 32,112,159,16,12,45,1,1,1,1,1,1,1,129,251,132,96,104,9,8,8,8,8,8,8,8,220,39,4,67,75,64,64,64,64,64,64,64,224,62, + 33,24,90,2,2,2,2,2,2,2,2,247,9,2,192,101,203,1,74,233,46,159,69,238,160,245,129,55,125,65,83,208,20,52,5,77,65,83,208,20, + 52,31,60,77,111,218,254,216,31,255,10,40,165,247,109,2,208,67,208,20,52,5,205,7,78,147,113,152,254,233,154,184,199,154,255,150,107,36,104,10, + 154,255,58,205,7,117,18,221,107,195,77,224,193,130,16,34,2,0,74,169,249,78,214,11,252,59,33,177,19,228,96,202,40,205,77,215,57,173,122,52, + 63,63,63,10,0,88,150,165,42,149,42,7,192,169,255,150,102,108,127,34,103,74,64,115,143,208,26,154,69,69,69,42,149,74,165,41,42,42,82,248, + 163,41,32,32,32,112,47,113,105,104,17,66,234,3,152,9,32,196,97,241,113,74,233,60,167,237,190,7,160,112,88,84,5,224,61,74,233,101,31,142, + 45,177,233,203,108,19,7,64,7,64,15,64,13,192,228,99,30,4,238,19,132,144,246,0,250,217,254,255,153,82,122,196,159,245,15,26,177,177,177,242, + 176,176,176,94,167,78,157,146,158,63,127,30,7,14,28,160,203,150,45,51,222,190,125,123,199,205,155,55,181,255,237,244,221,43,152,164,33,27,107,37, + 37,14,146,136,3,65,18,7,166,209,27,155,102,216,86,137,206,157,59,23,215,172,89,179,85,0,192,48,140,209,100,26,226,212,41,0,0,32,0,73, + 68,65,84,50,61,225,139,38,155,56,120,93,173,164,164,39,37,226,64,144,164,129,159,208,235,155,94,187,91,205,90,143,145,141,33,113,33,131,196,193, + 18,68,119,32,159,20,28,162,188,166,248,236,217,179,113,173,90,181,90,158,145,145,241,76,171,86,173,150,251,170,73,8,233,13,96,186,109,54,141,82, + 186,221,151,253,60,232,17,133,66,49,73,169,84,246,149,201,100,177,102,179,153,104,52,154,155,85,85,85,59,205,102,243,71,148,82,238,14,52,7,134, + 135,135,63,211,176,97,195,250,217,217,217,121,55,111,222,252,30,64,58,128,39,99,99,99,71,37,39,39,199,101,102,102,94,46,45,45,93,78,41,221, + 244,223,74,167,128,128,128,21,119,30,173,183,41,165,163,28,23,16,82,115,64,237,110,221,186,13,216,177,99,135,130,227,56,240,147,92,46,55,3,24, + 231,229,184,17,135,15,31,78,154,56,113,226,224,155,55,111,182,86,171,213,143,0,128,66,161,56,22,21,21,117,98,225,194,133,63,244,234,213,43,23, + 86,131,203,103,8,33,34,177,88,252,116,88,88,88,95,179,217,252,48,165,20,98,177,248,212,237,219,183,183,155,76,166,229,148,82,191,141,55,66,136, + 84,36,18,189,40,147,201,122,155,205,230,102,0,32,18,137,206,234,245,250,237,102,179,249,51,74,169,225,14,52,3,164,82,233,139,193,193,193,61,13, + 6,67,51,0,144,74,165,103,43,42,42,118,26,12,134,207,40,173,81,58,255,219,177,121,170,250,81,74,197,0,192,178,236,192,246,237,219,39,17,66, + 56,66,8,165,148,18,134,97,90,90,44,22,198,182,125,63,66,200,137,127,171,103,75,165,82,205,229,56,46,214,211,54,33,33,33,173,79,157,58,213, + 112,221,186,117,150,175,190,250,170,108,252,248,241,129,19,39,78,20,45,89,178,228,51,0,147,157,183,143,140,140,252,152,97,152,72,95,142,207,113,92, + 113,113,113,241,107,222,183,188,255,4,6,5,15,216,145,254,33,110,87,113,232,220,125,232,120,0,188,161,101,78,73,73,185,97,177,88,6,239,219,183, + 47,164,119,239,222,139,1,248,52,88,170,50,36,100,176,93,179,199,208,113,0,248,188,222,177,166,60,68,49,32,125,249,175,168,180,84,96,112,175,222, + 142,154,118,202,202,202,196,190,104,57,48,253,243,93,234,206,148,2,47,246,12,98,0,220,149,161,21,23,23,183,98,236,216,177,35,154,53,107,38,162, + 148,194,100,50,65,175,215,55,60,114,228,72,151,13,27,54,180,6,240,164,63,122,132,144,231,222,120,227,141,247,103,207,158,29,41,22,139,137,201,100, + 170,183,110,221,186,135,39,76,152,240,202,210,165,75,19,134,13,27,22,196,47,127,251,237,183,219,16,66,234,80,74,63,250,187,211,41,32,32,240,23, + 238,12,45,37,0,16,66,10,0,28,183,45,59,238,188,209,158,61,123,54,139,68,34,222,163,245,72,85,85,85,52,170,123,193,92,145,60,122,244,232, + 246,235,215,175,159,59,108,216,176,124,133,66,241,208,144,33,67,212,132,16,118,221,186,117,45,235,214,173,43,239,223,191,255,232,110,221,186,77,249,229, + 151,95,14,0,40,242,37,35,132,144,148,240,240,240,31,63,248,224,131,164,222,189,123,75,34,35,35,65,41,197,205,155,55,227,182,110,221,218,231,221, + 119,223,157,66,8,25,68,41,61,231,139,158,77,179,141,92,46,95,255,238,187,239,214,234,211,167,143,40,38,38,6,58,157,14,231,207,159,239,177,125, + 251,246,206,75,151,46,157,76,8,25,74,41,61,225,135,230,35,33,33,33,27,190,125,227,141,232,118,79,63,45,10,15,15,7,165,20,69,69,69,61, + 14,174,92,217,229,63,31,124,48,153,16,242,4,165,180,198,249,254,111,34,149,74,153,85,171,86,181,144,74,165,0,0,131,193,128,38,77,154,212,180, + 190,255,165,16,66,226,111,222,188,25,34,145,72,92,174,183,88,44,232,220,185,115,109,137,68,130,143,62,250,200,84,92,92,220,114,241,226,197,167,214, + 172,89,19,249,217,103,159,13,133,11,67,139,97,152,200,220,220,92,151,154,22,139,5,70,163,17,102,179,25,6,131,1,141,27,55,190,231,121,186,83, + 164,82,41,202,170,44,152,183,185,2,32,112,78,60,203,27,68,122,189,126,52,128,124,159,52,37,50,7,77,234,252,222,185,35,77,177,68,130,42,139, + 26,239,223,122,30,180,250,187,204,92,183,110,221,178,201,147,39,167,245,232,209,227,235,185,115,231,206,4,224,171,199,49,9,0,182,157,209,1,64,184, + 143,251,184,69,169,84,54,26,57,114,164,168,168,168,8,98,177,24,70,163,17,249,249,249,104,210,164,9,187,122,245,234,6,254,234,213,171,87,111,124, + 90,90,154,106,219,182,109,198,85,171,86,25,122,246,236,41,30,63,126,124,112,231,206,157,27,199,199,199,51,223,124,243,141,126,231,206,157,166,209,163, + 71,75,231,205,155,167,218,186,117,107,127,0,94,13,173,123,157,78,1,1,129,191,240,22,163,117,156,82,58,16,0,36,18,73,203,132,132,132,21,102, + 179,57,6,0,68,34,81,190,88,44,254,200,104,52,158,6,0,66,200,38,142,227,6,120,209,139,24,61,122,116,251,95,126,249,101,193,145,35,71,202, + 75,74,74,98,54,111,222,172,155,50,101,74,54,0,92,189,122,181,78,255,254,253,227,94,122,233,165,220,94,189,122,45,236,218,181,235,203,191,253,246, + 219,78,88,171,36,221,66,8,73,105,210,164,201,225,253,251,247,7,133,134,134,86,91,151,156,156,140,151,95,126,89,50,96,192,128,186,221,187,119,63, + 68,8,233,68,41,253,195,75,58,65,8,121,164,126,253,250,187,246,236,217,19,24,22,22,134,178,178,50,228,231,231,67,163,209,32,56,56,24,195,134, + 13,147,60,214,177,67,194,75,147,38,239,34,132,244,240,197,216,34,132,60,210,33,37,101,215,154,121,243,2,77,55,110,64,46,151,163,178,178,18,0, + 16,20,20,132,214,181,107,139,78,174,92,25,55,106,218,52,94,243,111,55,182,8,33,50,0,160,148,234,9,33,63,179,44,59,80,42,149,50,3,7, + 14,196,174,93,187,136,78,167,19,1,64,64,64,128,121,224,192,129,144,203,229,48,24,12,28,128,159,255,173,222,44,30,169,84,138,172,172,172,106,203, + 212,106,53,138,138,138,80,82,82,2,189,94,143,178,178,50,112,28,71,228,114,121,17,199,113,96,24,171,67,207,157,166,68,34,193,197,139,23,171,45, + 51,155,205,168,170,170,130,94,175,135,209,104,132,90,173,150,7,5,5,213,79,73,73,201,5,176,169,180,180,244,163,252,252,252,235,247,58,127,190,162, + 173,44,189,242,205,214,204,250,101,249,90,192,164,63,224,176,74,124,246,236,217,184,30,61,122,124,153,147,147,51,166,168,168,72,172,82,169,124,242,24, + 105,213,37,151,190,217,154,217,184,44,95,11,152,117,71,239,133,166,94,163,189,178,226,212,167,245,53,149,6,128,192,81,147,42,20,138,67,163,71,143, + 14,93,184,112,161,101,234,212,169,153,0,14,251,162,9,224,198,207,167,117,137,0,12,0,174,249,184,143,39,56,0,56,112,224,0,10,10,10,80,92, + 92,140,162,162,34,196,199,199,227,78,170,227,178,178,178,62,111,218,180,41,249,243,207,63,183,3,88,178,110,221,186,113,165,165,165,211,167,78,157,26, + 254,225,135,31,150,78,155,54,45,13,192,119,235,214,173,123,161,81,163,70,125,47,92,184,176,244,191,145,78,1,129,251,64,27,0,42,219,255,197,176, + 190,119,35,28,230,207,192,250,220,242,219,25,0,72,93,252,242,240,243,69,0,78,56,236,199,207,223,51,24,0,216,186,117,43,229,39,87,27,69,71, + 71,79,234,214,173,219,130,140,140,140,198,183,110,221,10,187,117,235,86,88,70,70,70,227,110,221,186,45,136,142,142,158,196,111,103,107,137,0,135,121, + 199,38,154,146,195,135,15,39,253,248,227,143,105,187,118,237,42,111,217,178,165,97,207,158,61,230,94,189,122,21,2,48,3,48,247,234,213,171,240,183, + 223,126,179,180,107,215,78,254,203,47,191,228,28,58,116,232,227,245,235,215,71,3,96,221,104,130,16,34,14,13,13,253,105,223,190,125,53,140,44,71, + 18,18,18,240,243,207,63,7,135,134,134,110,34,132,84,43,165,187,208,12,8,8,8,216,240,219,111,191,5,6,5,5,161,176,176,16,98,177,24,81, + 81,81,40,47,47,71,254,173,91,184,126,233,18,24,131,1,159,204,153,29,36,151,203,215,19,66,164,222,52,67,66,66,54,172,153,59,55,176,100,215, + 46,252,254,254,251,48,26,141,246,42,87,163,209,136,67,19,39,162,104,247,110,124,243,246,219,129,33,33,33,27,8,33,1,158,52,239,5,142,154,132, + 144,137,0,74,1,148,18,66,38,82,74,143,52,105,210,36,227,252,249,243,232,212,169,19,210,211,211,155,79,157,58,117,226,212,169,83,39,166,167,167, + 55,239,212,169,19,206,159,63,143,38,77,154,100,56,198,103,221,239,116,222,79,77,139,197,82,109,226,184,191,190,49,177,177,177,133,63,254,248,35,134, + 13,27,198,72,165,210,91,195,135,15,151,29,60,120,144,2,248,217,159,116,234,116,58,104,181,90,84,85,85,225,234,213,171,242,15,62,248,160,227,172, + 89,179,234,237,218,181,43,110,230,204,153,255,81,169,84,167,98,98,98,146,252,209,244,23,79,154,12,53,229,37,212,126,8,161,209,117,1,139,38,219, + 113,55,150,101,193,113,156,36,46,46,110,109,66,66,194,55,248,235,69,231,81,147,133,41,199,174,105,214,221,19,77,70,196,228,69,55,82,65,81,95, + 10,80,100,59,173,54,177,44,11,150,101,249,112,1,139,47,154,176,122,211,140,176,22,238,174,123,216,174,26,174,52,187,119,239,222,180,94,189,122,209, + 235,254,12,195,109,73,67,112,146,80,112,146,80,88,34,218,32,75,250,56,18,19,19,163,131,130,130,218,251,163,73,41,93,245,199,31,127,180,165,148, + 206,162,148,150,80,74,23,76,155,54,237,93,66,200,129,105,211,166,205,166,148,46,176,45,127,255,252,249,243,237,40,165,107,254,27,233,188,91,4,205, + 255,77,77,47,182,136,138,16,242,51,33,228,231,25,51,102,116,5,16,225,52,255,168,227,118,0,164,174,126,249,201,97,185,10,64,170,195,126,42,23, + 199,190,43,236,29,150,166,166,166,146,212,212,84,190,100,126,156,16,178,25,192,113,137,68,210,178,69,139,22,3,127,253,245,215,32,149,234,175,227,171, + 84,42,172,95,191,62,40,37,37,101,160,68,34,105,9,224,120,112,112,240,102,184,168,98,180,17,58,113,226,196,193,99,198,140,169,104,217,178,37,0, + 148,157,59,119,78,209,174,93,187,42,179,217,76,204,102,51,105,215,174,93,213,185,115,231,20,38,147,73,221,166,77,27,101,247,238,221,179,95,123,237, + 181,209,0,2,220,104,2,192,200,249,243,231,199,135,133,133,185,221,128,82,10,181,90,141,232,232,104,76,156,56,49,70,44,22,63,227,233,164,136,68, + 162,23,231,207,159,31,21,26,26,138,219,183,111,35,62,62,30,6,131,1,23,47,94,132,174,170,18,38,117,5,76,21,101,40,186,114,25,161,98,17, + 70,15,232,23,45,18,137,94,244,164,41,149,74,95,92,62,109,90,180,33,59,27,87,211,211,97,49,215,116,254,152,141,70,156,253,250,107,232,114,115, + 145,246,236,179,209,82,169,212,163,230,189,196,230,201,250,144,82,42,167,148,202,9,33,11,31,125,244,209,213,114,185,124,226,188,121,243,122,239,216,177, + 163,207,254,253,251,187,152,205,102,177,217,108,22,31,56,112,160,147,78,167,19,201,100,50,136,68,34,159,98,106,254,141,136,197,98,72,36,18,200,229, + 114,116,236,216,241,202,178,101,203,76,241,241,241,226,13,27,54,132,197,198,198,42,151,44,89,82,166,86,171,231,251,170,103,52,26,161,215,235,161,213, + 106,161,211,233,176,103,207,158,218,47,189,244,146,72,167,211,89,250,247,239,95,106,50,153,244,211,166,77,11,14,15,15,159,114,63,243,117,135,88,82, + 82,82,42,242,243,243,135,89,44,150,193,57,57,57,227,97,45,21,254,211,52,1,160,141,74,165,50,234,245,250,209,69,69,69,1,0,30,246,113,63, + 51,128,74,88,13,45,61,191,144,16,34,35,132,52,227,61,190,190,80,86,86,182,116,249,242,229,241,140,44,20,7,13,125,241,3,247,46,118,132,44, + 65,97,210,235,136,138,175,135,17,35,70,68,81,74,151,248,149,43,23,80,74,23,83,74,59,83,74,23,222,201,254,247,59,157,132,144,164,192,192,192, + 244,224,224,224,131,129,129,129,233,132,144,164,59,213,226,233,85,159,244,24,216,152,205,237,85,143,208,129,141,217,220,94,245,253,239,235,73,224,159,137, + 147,45,226,72,17,165,180,31,165,180,95,90,90,218,92,126,161,195,188,220,23,125,94,195,113,153,205,192,186,111,216,171,14,183,110,221,74,249,204,57, + 182,46,76,72,72,88,177,98,197,138,32,231,29,111,221,186,133,138,138,10,188,249,230,155,65,99,198,140,153,156,147,147,51,214,203,177,164,249,249,249, + 15,143,26,53,42,192,104,52,222,230,56,142,169,168,168,16,133,132,132,216,75,154,33,33,33,150,242,242,114,113,85,85,21,107,177,88,244,99,198,140, + 145,62,251,236,179,173,225,224,209,114,70,165,82,245,236,219,183,175,212,221,122,147,201,132,170,170,42,84,85,85,253,63,123,231,29,30,85,209,182,241, + 123,206,158,173,41,155,77,207,38,33,129,64,32,64,0,5,84,144,22,94,9,82,4,81,64,138,104,164,68,16,34,2,210,155,52,105,74,149,142,40, + 68,144,162,88,64,4,11,189,168,32,45,33,148,144,144,144,158,64,146,45,217,126,206,124,127,100,55,46,201,166,2,22,190,253,93,215,94,187,123,102, + 206,61,115,182,229,206,204,51,207,192,100,50,161,99,199,142,146,173,91,183,118,7,176,161,178,115,36,18,73,116,116,116,180,240,254,253,251,240,240,240, + 64,90,90,26,82,83,83,97,208,104,96,210,168,96,210,168,97,81,171,64,85,197,184,119,235,58,218,53,141,16,237,148,72,94,4,176,162,50,77,185, + 92,30,221,46,38,134,117,117,117,69,212,208,210,117,6,135,154,54,5,229,56,240,28,7,206,98,193,139,55,110,192,108,54,131,97,24,60,115,255,62, + 43,223,177,35,26,192,71,85,190,170,143,9,137,68,194,198,199,199,15,17,139,197,160,148,18,163,209,136,35,71,142,252,19,93,249,71,17,139,197,144, + 74,165,48,153,76,168,95,191,190,110,232,208,161,103,22,45,90,20,194,48,140,171,72,36,250,241,222,189,123,31,102,101,101,165,212,84,207,108,54,195, + 104,52,194,104,52,66,167,211,225,246,237,219,1,13,26,52,32,239,188,243,14,87,82,82,18,182,102,205,154,228,35,71,142,184,44,93,186,244,85,0, + 113,143,241,210,234,2,123,229,202,21,121,93,86,243,253,205,154,117,90,117,104,29,149,246,8,241,102,181,66,1,52,0,220,173,166,224,85,66,72,187, + 102,205,154,121,94,187,118,173,144,16,114,14,192,151,148,210,236,170,244,120,158,39,60,207,227,237,103,139,240,78,123,1,204,230,98,20,23,23,35,45, + 45,13,137,137,137,248,237,183,26,135,139,62,128,84,42,29,225,230,230,214,93,42,149,214,183,88,44,140,70,163,73,43,41,41,249,153,231,249,77,180, + 252,180,66,13,120,92,253,180,225,234,234,186,108,198,140,25,29,60,60,60,112,241,226,197,176,221,187,119,47,195,67,6,215,75,133,204,182,21,171,62, + 9,10,242,83,224,242,137,239,131,62,220,184,103,27,128,224,135,234,168,147,127,5,246,94,164,28,127,0,232,109,93,225,254,146,131,242,26,241,176,231, + 215,133,50,163,85,201,133,193,98,177,4,216,143,100,81,74,145,157,157,141,204,204,76,228,231,231,195,211,211,19,38,147,41,160,6,109,73,212,106,245, + 179,222,222,222,37,66,161,208,160,211,233,224,226,226,194,11,133,66,106,109,135,88,87,45,114,6,131,129,176,44,107,118,119,119,119,51,24,12,17,168, + 34,150,140,82,250,172,183,183,183,195,50,131,193,0,141,70,3,173,86,11,141,70,3,131,193,0,127,127,127,88,44,150,42,255,187,181,88,44,45,125, + 125,125,145,149,149,5,153,76,134,140,140,12,24,53,106,152,212,106,88,180,42,112,197,197,224,85,42,240,90,21,204,198,18,4,53,110,10,219,138,196, + 202,48,26,141,45,189,189,189,161,213,254,21,110,70,173,6,203,98,177,192,98,13,142,182,77,39,250,248,248,192,182,34,241,239,192,26,147,53,153,97, + 152,213,18,137,132,29,51,102,12,178,179,179,31,248,76,140,25,51,166,44,38,171,115,231,206,39,165,82,169,37,63,63,31,6,131,161,182,43,187,254, + 51,16,66,64,8,41,125,143,44,22,248,248,248,104,11,10,10,126,43,44,44,28,82,23,61,179,217,108,91,209,5,157,78,7,74,41,46,94,188,8, + 169,84,42,228,56,46,193,98,177,184,8,133,66,48,214,224,175,127,43,117,88,205,87,25,212,58,197,103,41,42,42,18,90,167,250,30,118,132,180,214, + 154,132,144,168,8,133,120,197,226,118,126,138,167,250,184,106,93,196,2,45,159,246,84,253,207,150,39,238,126,99,216,8,247,249,243,231,135,250,248,248, + 72,147,147,147,245,11,22,44,104,16,31,31,79,80,205,63,65,233,233,233,251,103,204,152,225,213,171,87,175,48,137,68,66,138,139,139,145,159,159,143, + 220,220,92,164,166,166,210,203,151,47,223,54,24,12,123,107,115,97,129,129,129,91,199,141,27,247,70,155,54,109,132,64,233,8,169,86,171,125,250,248, + 241,227,125,15,29,58,212,9,64,173,63,151,119,239,222,221,59,115,230,76,215,158,61,123,70,72,36,18,230,81,244,211,30,134,97,252,221,220,220,240, + 243,207,63,67,161,80,128,97,24,255,186,106,217,208,155,248,160,192,0,111,232,79,175,64,132,111,40,244,38,62,232,97,53,157,252,59,168,204,139,160, + 52,134,10,148,210,151,170,49,75,186,105,211,166,205,32,132,28,152,54,109,218,140,242,133,118,231,113,246,245,236,234,27,202,159,243,176,212,42,97,41, + 207,243,200,204,204,68,86,86,22,50,51,51,113,239,222,61,48,12,3,74,105,77,86,159,81,66,8,255,211,79,63,121,158,57,115,70,251,204,51,207, + 20,217,226,95,44,22,11,49,155,205,196,26,23,67,210,210,210,68,167,78,157,82,36,37,37,249,163,116,26,161,202,96,76,71,255,196,217,12,150,253, + 77,175,215,67,42,173,106,22,242,47,108,127,8,47,94,184,80,106,178,52,106,235,148,97,49,56,85,49,168,86,13,49,103,134,24,20,68,95,82,35, + 77,251,120,31,0,101,38,203,100,53,90,70,163,17,102,179,25,60,207,195,226,96,106,241,113,67,41,93,255,244,211,79,183,222,191,127,255,240,204,204, + 204,10,229,253,250,245,67,92,92,28,198,141,27,151,212,187,119,239,203,223,127,255,61,198,142,29,11,158,231,159,34,132,20,83,74,15,253,237,157,126, + 204,24,12,134,178,17,40,189,94,15,147,201,4,84,17,252,94,158,242,159,77,219,123,107,177,88,108,218,100,255,254,175,113,242,228,73,38,49,49,33, + 120,204,152,119,108,1,247,143,248,74,106,142,128,49,185,171,242,111,195,168,50,64,36,41,177,15,124,172,243,106,62,49,111,146,107,243,110,193,84,100, + 132,55,175,179,159,231,231,154,55,111,174,58,124,248,240,184,23,95,124,241,147,187,119,239,190,133,26,78,29,178,102,70,174,73,209,195,164,227,225,166, + 23,216,247,179,198,154,132,144,158,98,134,108,158,252,148,183,116,82,43,111,173,152,37,154,27,155,103,104,82,67,228,90,255,122,46,198,224,6,138,192, + 15,63,92,164,76,74,186,110,152,53,107,214,181,65,131,6,249,77,154,52,169,217,87,95,125,213,137,16,242,41,165,180,168,18,93,105,76,76,204,57, + 63,63,191,6,27,55,110,204,187,123,247,174,167,217,108,118,53,153,76,188,86,171,77,213,233,116,63,155,76,166,159,41,165,23,106,114,173,54,220,221, + 221,91,197,196,196,8,139,138,138,192,178,44,76,38,19,242,242,242,208,161,67,7,193,119,223,125,215,188,54,90,54,238,223,191,191,130,16,114,108,215, + 174,93,221,229,114,121,27,137,68,18,0,128,83,171,213,185,90,173,246,82,93,250,105,15,199,113,185,23,46,92,104,40,151,203,145,158,158,14,142,227, + 114,235,170,101,67,42,98,238,94,57,241,93,189,166,62,13,112,234,204,57,72,69,204,221,135,213,116,242,175,199,22,67,5,123,3,229,192,32,157,89, + 188,120,177,108,201,146,37,88,188,120,113,66,121,17,155,6,165,244,165,197,139,23,39,216,234,217,213,63,241,168,59,206,2,85,58,72,176,44,155,147, + 159,159,239,169,80,40,202,12,86,86,86,22,178,178,178,32,22,139,145,150,150,6,177,88,92,229,16,186,21,189,76,38,59,255,244,211,79,55,73,73, + 73,17,45,88,176,160,222,133,11,23,228,29,58,116,104,33,147,201,56,74,41,244,122,61,115,237,218,53,183,143,62,250,40,232,217,103,159,53,62,251, + 236,179,127,238,217,179,71,135,42,146,151,18,66,126,207,206,206,14,171,95,191,62,128,191,86,116,217,110,246,134,11,40,157,242,100,89,182,202,12,209, + 44,203,94,185,113,227,70,55,23,169,4,70,181,10,38,141,10,22,181,26,156,186,24,92,113,49,160,85,65,108,177,64,200,153,33,147,74,145,153,145, + 1,150,101,175,84,165,41,22,139,175,228,230,230,118,83,40,20,101,127,68,205,22,75,233,141,227,96,180,88,202,70,180,132,66,33,238,222,189,11,177, + 88,92,165,230,227,128,97,24,206,150,194,193,17,98,177,24,254,254,254,124,187,118,237,48,118,236,88,112,28,7,148,230,59,140,34,132,156,162,148,106, + 254,182,206,62,98,28,153,91,91,208,186,78,167,131,70,163,65,97,97,33,43,147,201,154,180,104,209,226,156,209,104,220,107,177,88,182,165,164,164,168, + 42,211,180,26,51,0,165,166,139,231,121,80,74,193,113,28,204,102,51,68,34,17,127,252,248,9,124,180,114,25,182,111,139,167,125,251,246,37,223,125, + 247,29,120,158,207,120,60,87,89,57,132,16,242,212,83,79,141,126,182,101,253,214,239,191,38,71,150,90,141,33,153,215,135,42,59,145,211,217,39,233, + 22,212,97,53,31,33,132,121,250,233,167,223,237,222,184,65,187,89,61,221,160,43,208,227,147,237,41,175,190,41,18,189,179,195,108,222,64,41,101,175, + 92,185,34,239,214,173,219,198,11,23,46,140,8,12,12,140,175,110,154,207,166,217,218,163,113,235,89,65,203,160,205,203,194,186,236,30,253,223,16,137, + 70,237,48,153,182,192,58,29,89,67,205,143,139,190,92,36,133,133,211,26,142,239,210,124,113,83,165,157,255,197,170,243,70,177,64,213,182,139,127,203, + 176,6,77,4,10,133,39,179,97,211,234,123,59,227,247,37,167,167,167,171,214,173,91,215,190,73,147,38,30,151,46,93,10,2,224,208,104,185,184,184, + 132,143,24,49,34,166,176,176,80,180,125,251,246,61,217,217,217,231,1,36,82,74,203,134,180,9,33,189,9,33,159,163,116,229,147,63,74,127,231,78, + 81,74,23,84,113,249,60,33,4,71,143,30,173,176,58,144,127,56,119,174,104,212,168,209,107,41,41,41,39,115,114,114,42,188,86,98,177,120,126,227, + 198,141,95,76,72,72,152,71,41,253,161,54,194,37,37,37,83,246,237,219,183,92,32,16,4,114,28,151,165,211,233,166,60,68,63,1,0,122,51,63, + 114,241,134,221,91,116,70,46,68,38,22,164,235,205,252,168,135,213,116,242,207,83,149,23,129,53,70,203,246,24,0,41,247,252,146,245,177,209,174,110, + 62,80,54,138,101,44,55,10,230,168,44,31,143,33,89,122,101,153,225,167,3,120,22,192,239,66,161,112,245,27,111,188,241,209,206,157,59,221,85,42, + 21,114,115,115,145,151,151,7,150,101,33,151,203,177,126,253,122,93,110,110,238,106,251,115,202,103,144,183,162,247,241,241,57,31,31,31,31,176,121,243, + 102,246,205,55,223,76,235,221,187,119,196,250,245,235,83,68,34,17,229,56,142,24,12,6,242,246,219,111,55,92,185,114,229,29,129,64,224,242,218,107, + 175,17,87,87,215,223,81,26,160,234,144,252,252,252,159,190,249,230,155,87,38,78,156,40,49,26,141,14,71,178,108,199,20,10,5,78,159,62,109,44, + 44,44,172,50,216,200,96,48,252,244,227,15,7,59,191,62,104,144,200,172,86,193,172,86,193,162,82,129,83,23,129,104,84,16,114,22,200,68,60,252, + 131,100,224,244,110,56,248,199,37,179,193,96,168,50,177,161,74,165,250,233,212,246,237,81,207,134,134,178,167,223,125,23,38,179,25,61,111,220,40,51, + 87,38,147,9,223,182,108,9,142,16,60,21,27,139,91,22,139,69,165,82,253,84,149,230,63,197,229,203,151,243,134,14,29,122,129,231,249,214,168,197, + 232,206,191,29,179,249,193,239,151,205,16,89,172,38,56,47,47,79,124,240,224,193,206,215,174,93,19,93,189,122,21,39,79,158,124,106,231,206,157,211, + 67,67,67,91,166,165,165,57,204,253,100,111,222,28,37,253,133,53,254,112,207,174,189,24,61,122,52,201,201,201,193,151,95,126,137,234,146,167,62,106, + 162,162,162,36,237,219,183,31,222,181,107,215,233,202,64,37,185,145,155,132,108,243,77,52,158,234,43,40,250,163,100,115,80,15,246,53,170,229,134,103, + 157,162,217,118,171,249,40,236,86,243,149,167,125,251,246,210,14,29,58,140,234,218,181,235,164,128,128,0,146,119,51,9,200,203,64,108,43,63,230,122, + 94,201,58,233,173,251,131,198,6,7,15,31,243,227,143,16,8,4,230,114,186,85,106,70,69,69,189,239,170,42,70,246,141,75,96,178,115,241,118,43, + 127,38,41,183,100,243,104,87,233,32,89,96,189,81,195,191,254,186,166,154,90,88,56,153,241,248,46,77,239,31,210,213,103,179,117,11,0,28,166,58, + 11,173,87,175,222,229,54,109,60,125,0,192,160,231,2,194,195,195,187,176,44,43,6,0,55,55,183,54,222,222,222,235,1,116,44,47,72,8,17,12, + 26,52,168,157,159,159,223,211,135,14,29,186,148,157,157,157,64,41,253,173,124,189,134,13,27,206,74,74,74,122,70,40,20,18,187,115,43,187,116,68, + 69,69,53,9,13,13,245,254,225,166,7,84,162,70,160,130,98,128,149,130,83,180,66,154,168,25,130,131,207,121,43,20,138,167,138,138,138,46,85,42, + 226,0,66,72,215,87,94,121,101,219,246,237,219,131,187,116,233,66,9,33,76,249,148,14,13,27,54,236,126,246,236,217,214,163,70,141,218,104,93,145, + 92,227,224,97,74,105,26,128,1,181,233,83,117,28,185,69,127,134,53,231,153,147,255,55,212,38,229,194,35,77,207,240,176,84,54,117,248,44,207,243, + 125,25,134,129,201,100,90,236,239,239,255,237,107,175,189,214,111,250,244,233,110,222,222,222,101,35,89,235,215,175,215,165,166,166,126,101,50,153,46,18, + 66,230,100,101,101,245,13,12,172,244,239,131,122,205,154,53,187,251,244,233,243,102,108,108,172,174,101,203,150,242,136,136,136,146,51,103,206,184,69,71, + 71,171,4,2,1,61,125,250,180,123,195,134,13,245,132,16,201,47,191,252,114,239,220,185,115,13,23,47,94,252,41,74,151,91,87,198,174,133,11,23, + 206,234,219,183,111,67,111,111,111,168,84,170,7,204,150,237,177,84,42,69,78,78,14,190,254,250,235,108,179,217,252,105,85,47,138,197,98,89,247,201, + 250,13,227,187,182,123,46,72,238,34,67,78,70,26,184,226,66,64,171,129,216,98,134,76,76,17,216,208,5,66,214,21,201,185,26,108,63,243,71,142, + 197,98,89,87,149,166,209,104,92,23,183,114,229,248,179,27,54,4,133,14,28,136,196,29,59,202,166,10,109,70,139,35,4,33,47,188,0,198,195,3, + 31,110,220,152,107,52,26,171,212,124,28,240,60,47,48,26,43,159,185,49,26,141,224,121,62,35,49,49,113,55,33,68,77,8,137,178,22,29,251,47, + 143,102,1,165,70,107,206,156,57,88,178,100,9,166,77,43,221,133,197,104,52,150,77,31,22,21,21,53,56,117,234,148,232,248,241,227,116,227,198,141, + 247,222,124,243,77,69,108,108,172,98,243,230,205,19,0,56,252,47,221,108,54,99,202,148,41,216,184,113,35,70,143,30,93,161,92,32,16,240,25,25, + 119,161,215,235,233,154,53,107,178,132,66,161,231,167,159,126,42,27,53,106,212,223,106,96,165,82,169,119,251,246,237,155,72,36,18,117,86,102,86,201, + 254,89,123,100,5,173,46,145,122,195,20,240,141,118,131,188,149,244,127,105,155,239,93,15,236,72,166,156,217,151,156,104,48,24,134,162,154,196,162,94, + 94,94,158,45,90,180,104,200,178,172,42,51,35,195,99,254,174,221,46,29,115,174,161,127,99,111,210,62,216,29,17,62,178,142,123,18,243,19,190,25, + 61,122,99,214,205,155,195,189,66,66,212,213,233,122,121,121,121,182,106,213,170,129,80,40,44,86,201,92,228,115,198,76,116,137,134,22,175,132,123,217, + 52,187,238,73,204,79,248,62,46,110,67,110,114,242,91,30,193,193,154,106,52,103,202,134,206,126,15,165,191,49,171,41,165,199,108,5,114,185,92,182, + 127,255,55,44,0,124,181,239,107,33,165,212,195,150,96,246,139,47,190,144,118,232,208,193,207,145,32,165,148,147,74,165,134,165,75,151,122,143,28,57, + 178,199,175,191,254,234,73,8,105,7,224,60,128,92,148,154,107,63,0,137,62,62,62,242,61,123,246,4,117,239,222,221,181,170,215,18,0,212,106,245, + 167,187,119,239,174,191,242,148,7,126,208,190,130,187,252,64,80,5,133,151,159,26,205,220,210,49,100,200,144,192,213,171,87,111,1,208,166,58,45,27, + 132,144,33,253,250,245,91,178,125,251,246,192,145,35,71,230,252,249,231,159,185,0,182,59,48,124,5,111,188,241,70,246,142,29,59,148,148,210,13,132, + 16,49,165,244,171,154,182,227,196,201,255,103,136,163,248,38,66,200,183,22,139,165,47,203,178,223,217,39,44,245,247,247,31,111,52,26,149,132,16,42, + 18,137,114,114,115,115,87,219,39,44,205,200,200,232,27,28,28,92,118,142,53,233,166,125,174,13,121,207,158,61,187,157,61,123,118,237,129,3,7,242, + 212,106,181,219,190,125,251,100,75,150,44,73,227,121,158,78,157,58,53,244,197,23,95,44,225,56,46,59,54,54,182,97,131,6,13,98,147,146,146,126, + 134,157,209,114,160,9,66,72,243,70,141,26,157,254,234,171,175,228,10,133,2,121,121,121,184,127,255,62,180,90,45,56,142,131,80,40,68,126,126,62, + 22,44,88,160,202,202,202,170,144,176,180,18,205,103,235,7,5,253,180,122,222,28,119,5,203,224,222,245,107,176,20,222,131,208,98,70,189,102,10,136, + 36,82,220,186,161,198,132,93,95,171,211,239,23,85,72,88,90,153,102,219,240,240,159,55,78,158,236,166,191,123,23,202,183,222,66,73,73,9,76,38, + 19,24,134,193,237,213,171,33,242,245,197,172,61,123,180,9,233,233,47,148,79,88,234,72,243,97,177,215,36,132,188,67,8,41,11,134,239,215,175,223, + 3,117,191,249,230,27,108,216,176,1,6,131,193,66,41,29,79,41,93,79,8,113,3,0,123,147,245,184,251,249,56,52,189,189,189,87,31,58,116,168, + 190,159,159,31,177,207,216,14,252,21,91,55,118,236,216,23,206,157,59,39,121,250,233,167,13,5,5,5,207,248,250,250,254,26,31,31,239,243,218,107, + 175,101,37,36,36,4,149,215,244,241,241,249,232,171,175,190,106,212,168,81,35,198,54,42,86,126,122,114,248,240,225,221,226,227,227,197,175,188,242,138, + 65,171,213,250,187,187,187,39,127,245,213,87,62,47,191,252,114,78,66,66,130,242,239,184,118,27,227,198,141,235,169,213,106,123,220,189,123,151,170,84, + 170,173,217,210,139,94,46,161,162,29,33,177,94,65,174,97,98,232,239,154,96,188,40,64,201,37,14,57,183,178,151,103,157,164,83,170,211,140,141,141, + 237,97,48,24,94,188,123,247,46,167,86,171,183,70,38,36,120,250,187,139,191,24,212,204,55,164,190,66,130,28,173,9,137,26,6,215,84,102,164,222, + 201,90,181,195,100,154,80,23,77,165,92,178,115,80,51,159,122,33,30,18,100,107,76,72,210,11,113,93,195,33,249,86,218,202,29,38,211,196,234,52, + 29,17,25,25,121,43,33,33,161,145,237,185,78,167,67,126,126,62,10,10,10,160,80,40,16,29,29,125,59,53,53,181,145,35,77,66,200,211,3,6, + 12,152,183,101,203,150,110,174,174,174,162,19,39,78,104,127,254,249,103,125,90,90,154,197,108,54,83,165,82,201,118,236,216,81,218,171,87,47,87,137, + 68,194,204,158,61,187,96,209,162,69,62,132,144,93,212,186,253,89,121,205,214,173,91,255,246,227,143,63,62,75,8,129,64,32,128,209,104,66,81,81, + 17,50,51,51,144,152,152,136,179,103,207,226,200,145,35,151,52,26,205,211,149,93,83,185,239,187,55,128,19,6,131,33,66,44,22,215,216,216,115,28, + 7,150,101,175,3,232,78,41,205,248,47,126,223,157,154,255,78,205,39,149,170,86,243,1,192,179,132,16,219,166,164,191,151,79,225,64,8,153,78,8, + 153,99,125,250,108,13,66,4,84,135,14,29,58,217,173,91,183,177,47,188,240,194,202,238,221,187,103,103,103,103,135,173,88,177,34,216,98,177,152,18, + 19,19,153,228,228,228,180,243,231,207,55,106,220,184,113,108,82,82,210,113,84,61,154,101,235,107,34,33,164,67,215,174,93,191,142,141,141,13,105,215, + 174,157,88,161,80,128,101,89,164,164,164,224,210,165,75,198,61,123,246,100,20,21,21,213,120,11,30,74,233,239,132,144,232,215,198,141,255,42,182,95, + 31,159,231,34,154,136,149,74,37,160,211,225,250,221,28,156,187,126,201,180,245,228,185,124,131,193,208,191,188,201,170,70,179,219,255,38,79,254,106,254, + 235,175,251,35,59,155,85,42,149,16,139,197,72,77,77,69,50,207,91,150,110,218,148,171,82,169,254,246,45,120,108,121,180,120,158,103,1,64,38,147, + 33,46,46,14,246,91,238,108,216,176,1,58,157,14,0,88,66,200,114,66,200,182,255,250,40,150,141,251,247,239,207,234,217,179,231,98,150,101,43,205, + 122,235,233,233,9,181,90,13,139,197,194,101,102,102,94,247,244,244,132,80,40,4,165,21,182,148,1,0,220,187,119,111,86,255,254,253,23,50,12,227, + 112,228,3,0,228,114,121,218,175,191,254,26,62,106,212,40,230,179,207,62,75,25,57,114,164,228,215,95,127,229,40,165,95,63,138,235,170,13,159,124, + 242,201,161,103,158,121,38,33,52,52,52,251,232,209,163,28,0,248,70,145,136,27,31,228,44,243,239,37,31,237,217,84,78,150,142,216,140,34,203,61, + 140,232,241,122,12,42,25,197,179,103,243,230,205,63,182,108,217,50,161,113,227,198,57,199,143,31,231,0,224,109,66,154,174,253,35,115,113,167,16,143, + 184,38,1,10,210,119,205,122,244,42,190,143,209,125,94,127,19,192,132,106,36,177,121,243,230,31,91,181,106,117,53,60,60,60,215,78,51,98,245,239, + 198,197,81,245,21,113,141,252,21,164,223,215,135,209,231,126,30,70,182,238,16,3,7,123,32,214,5,251,127,74,173,255,196,85,58,197,73,41,189,72, + 8,89,121,254,252,121,223,113,227,198,133,13,29,58,84,222,181,107,87,55,251,58,58,157,142,255,254,251,239,181,27,54,108,40,62,121,242,228,157,225, + 195,135,183,67,21,11,1,210,211,211,15,126,248,225,135,30,189,122,245,106,12,160,44,62,43,63,63,31,105,105,105,184,122,245,106,79,106,166,82,0, + 0,32,0,73,68,65,84,154,201,100,250,174,22,215,115,143,16,50,127,240,224,193,203,119,236,216,17,56,114,228,200,156,61,123,246,92,69,105,210,226, + 242,40,250,245,235,215,114,199,142,29,202,145,35,71,230,0,88,64,41,253,219,227,8,157,56,249,79,66,41,173,112,3,240,185,209,104,164,122,189,158, + 150,148,148,80,141,70,67,1,124,235,160,222,183,89,89,89,52,35,35,131,166,167,167,211,59,119,238,80,0,95,216,149,119,115,164,79,41,117,221,185, + 115,103,163,160,160,160,121,46,46,46,135,5,2,129,74,32,16,168,36,18,201,143,222,222,222,115,151,46,93,26,68,41,21,85,210,183,202,52,1,128, + 21,10,133,163,252,252,252,190,245,242,242,202,240,244,244,204,240,243,243,251,86,40,20,142,6,32,172,226,188,170,52,165,44,203,190,239,234,234,250,147, + 68,34,201,147,72,36,121,174,174,174,63,177,44,251,62,0,105,93,53,197,98,241,251,190,190,190,63,201,229,242,60,185,92,158,231,235,235,251,147,88, + 44,174,179,102,93,111,54,77,0,18,0,37,212,10,33,196,252,212,83,79,109,108,221,186,245,250,214,173,91,175,111,213,170,213,102,66,136,217,86,14, + 160,4,128,228,239,238,231,63,169,25,25,25,25,191,99,199,14,126,214,172,89,170,198,141,27,223,159,53,107,150,106,199,142,29,124,100,100,100,124,93, + 53,253,253,253,67,35,35,35,239,111,217,178,197,114,227,198,13,186,101,203,22,75,100,100,228,125,127,127,255,208,127,211,181,251,63,143,168,136,24,15, + 254,80,113,60,125,241,106,16,245,239,128,172,135,213,124,131,101,59,76,15,244,229,53,135,246,208,219,61,34,232,235,66,97,193,163,208,156,85,207,159, + 55,92,249,237,161,53,155,55,111,126,139,218,97,52,26,105,126,126,62,189,113,227,6,61,121,242,36,13,14,14,190,85,157,38,74,179,220,191,13,224, + 251,128,128,128,164,246,237,219,167,119,232,208,33,61,52,52,52,69,40,20,158,5,240,1,128,72,235,109,57,128,198,85,105,2,104,175,80,40,62,12, + 14,14,254,46,60,60,252,116,253,250,245,207,122,121,121,29,144,74,165,75,0,60,95,151,247,29,64,215,87,94,121,37,77,163,209,112,109,218,180,73, + 114,116,94,211,166,77,79,105,52,26,110,208,160,65,25,40,221,108,190,206,239,209,227,248,124,58,53,159,12,205,39,245,86,217,136,214,135,98,177,152, + 133,117,115,105,43,142,70,88,126,47,23,147,85,12,224,67,7,245,202,163,29,50,100,72,234,144,33,67,150,163,116,84,77,128,210,20,14,22,148,70, + 252,155,80,77,74,7,71,208,210,189,246,182,88,111,143,4,74,169,30,165,249,114,30,89,226,208,199,161,249,176,80,107,30,45,66,200,114,235,161,201, + 23,47,94,92,111,95,135,16,114,217,190,156,82,250,200,243,141,252,155,41,42,42,26,255,201,39,159,252,62,109,218,52,73,76,76,12,174,94,189,138, + 37,75,150,24,138,138,138,118,85,127,182,99,114,114,114,210,2,2,2,90,175,90,181,106,210,202,149,43,95,38,132,252,227,123,29,58,34,231,52,61, + 230,215,145,76,30,209,123,216,123,0,120,10,140,123,88,205,237,102,243,233,24,145,232,189,49,47,15,155,76,0,158,18,242,222,35,210,156,52,178,109, + 167,137,15,171,169,211,233,110,183,106,213,10,164,52,96,137,90,44,150,178,213,162,214,12,255,183,171,211,160,148,222,3,176,201,122,3,33,196,11,165, + 171,12,239,81,74,203,143,214,79,174,129,222,89,0,103,171,171,87,27,40,165,71,9,33,111,37,39,39,127,120,251,246,109,135,171,72,111,221,186,117, + 172,99,199,142,238,151,47,95,158,73,41,61,248,40,219,119,226,228,73,199,161,209,162,148,222,2,240,122,117,39,83,199,171,11,107,10,135,106,54,139, + 118,242,247,66,75,99,174,182,89,31,87,48,81,213,149,63,233,100,100,100,20,2,40,219,138,36,44,44,172,66,28,91,93,176,154,170,56,252,251,50, + 193,63,64,222,41,250,49,128,143,31,165,230,231,38,211,26,0,107,30,177,230,74,0,43,31,86,39,37,37,165,231,35,232,206,3,80,74,29,77,203, + 253,227,208,210,69,0,237,42,43,55,155,205,115,0,204,169,172,220,137,19,39,149,83,171,132,165,78,158,124,170,51,80,255,31,13,150,19,39,78,156, + 56,113,82,87,8,0,135,155,113,210,90,172,38,32,164,246,27,122,86,167,239,212,116,106,58,53,157,154,78,77,167,166,83,243,201,211,180,211,174,108, + 228,249,122,57,189,205,181,237,195,191,138,199,25,0,134,255,72,0,158,83,211,169,233,212,116,106,58,53,157,154,78,205,127,86,179,146,118,98,255,142, + 118,30,231,205,57,117,232,196,73,29,248,95,35,18,198,243,214,108,215,60,40,199,98,219,201,100,90,240,48,154,155,55,111,14,227,121,126,0,0,80, + 74,169,197,98,217,22,23,23,247,80,154,78,156,56,113,226,228,159,197,161,209,218,183,111,159,192,246,120,240,224,193,195,57,142,43,91,97,36,16,8, + 62,249,242,203,47,183,85,37,58,96,192,128,10,219,114,216,107,58,162,186,118,28,105,70,54,241,24,227,237,225,50,190,168,184,100,85,74,22,119,82, + 175,215,55,179,149,73,165,210,107,219,182,109,187,249,168,251,57,124,248,240,198,229,219,169,31,44,140,242,114,151,198,221,47,210,172,184,122,83,253,223, + 30,226,252,143,66,8,241,1,240,146,187,84,212,183,185,66,212,254,234,61,253,25,173,137,251,30,165,105,73,10,31,117,123,60,143,113,157,90,71,116, + 110,247,84,35,245,207,167,175,250,94,76,74,51,0,88,253,144,178,147,188,188,188,70,43,20,10,90,80,80,192,23,21,21,85,169,169,84,42,35,228, + 114,249,48,0,205,75,74,74,252,92,92,92,242,0,36,170,84,170,248,236,236,236,235,149,157,87,158,168,6,36,13,64,136,245,105,250,177,84,26,90, + 147,178,234,120,177,17,209,83,64,66,8,76,135,111,209,178,13,52,123,132,19,61,79,43,30,127,49,156,24,41,133,136,0,134,195,201,180,102,187,191, + 255,7,32,132,200,1,68,163,52,133,195,101,0,71,40,165,53,219,137,222,137,19,39,255,121,28,26,173,225,195,135,119,22,177,100,45,5,85,0,212, + 219,96,48,8,197,98,49,140,70,35,92,92,100,235,222,30,57,124,30,24,20,153,45,136,219,182,109,91,157,119,186,174,77,59,3,6,12,56,90,254, + 124,79,185,108,225,177,239,167,122,118,238,189,116,137,49,181,96,138,90,173,102,36,18,9,12,6,3,60,60,60,58,140,137,141,109,195,8,169,81,36, + 114,61,179,114,229,202,42,183,11,169,138,9,19,38,4,152,76,250,231,121,158,23,27,141,70,73,249,118,60,92,92,151,30,251,126,170,75,151,151,150, + 204,3,224,52,90,127,51,132,16,113,168,167,235,241,85,131,163,154,182,111,30,14,62,241,4,244,70,83,223,99,25,154,190,115,207,102,77,36,132,180, + 166,148,86,190,175,80,245,250,12,195,48,239,43,20,138,30,247,239,223,95,65,41,61,80,164,71,235,200,102,17,141,95,124,190,153,140,231,232,153,139, + 73,105,181,218,50,103,222,188,121,76,118,118,246,251,98,177,184,135,78,167,91,177,117,235,214,3,26,141,166,85,211,166,77,73,88,88,24,73,72,72, + 224,139,139,139,29,106,18,66,4,97,97,97,99,67,67,67,7,109,218,180,73,20,22,22,6,169,84,10,157,78,167,188,125,251,182,114,204,152,49,93, + 26,54,108,184,59,37,37,101,29,165,180,210,189,8,237,8,57,246,249,108,0,64,135,97,11,66,8,33,239,163,52,79,26,186,212,255,171,44,42,102, + 65,8,33,100,50,30,92,45,156,77,41,117,152,36,147,2,226,3,59,62,66,223,55,222,103,9,33,99,108,199,123,53,6,126,252,98,53,122,12,30, + 255,192,241,23,27,130,253,126,199,71,120,233,141,247,43,221,213,188,71,99,198,204,243,142,19,196,2,0,195,16,203,225,91,212,209,6,195,185,148,210, + 10,251,145,18,66,94,68,233,134,206,14,235,191,212,148,205,53,153,57,135,9,103,69,66,65,222,129,36,75,133,115,99,90,19,179,153,43,253,109,21, + 177,224,60,60,60,142,205,156,57,147,125,233,165,151,176,117,235,214,142,155,55,111,142,37,132,252,2,224,59,74,105,114,101,215,226,196,137,147,39,3, + 135,63,88,172,0,27,191,251,106,91,163,220,188,2,188,57,106,18,118,237,218,133,194,194,66,120,122,122,66,44,18,9,87,45,159,29,32,151,187,6, + 188,25,59,101,35,128,136,58,55,94,187,118,194,203,159,79,172,89,227,89,1,35,20,139,197,204,238,221,187,81,84,84,4,133,66,1,177,88,200,172, + 92,50,93,38,151,187,201,70,188,51,173,35,128,189,117,237,167,209,168,233,184,127,215,54,121,126,126,62,98,70,79,65,249,118,68,34,17,7,148,254, + 97,169,107,27,78,30,138,153,155,226,222,104,218,194,29,48,37,156,134,80,32,128,139,135,39,162,89,1,4,4,205,222,60,124,103,6,128,185,15,161, + 223,229,192,129,3,75,91,180,104,129,23,95,124,49,130,16,178,125,226,91,125,58,106,57,17,246,159,78,193,185,243,215,29,253,161,174,146,204,204,204, + 46,99,199,142,93,234,237,237,141,141,27,55,70,196,198,198,110,239,217,179,103,187,130,130,2,112,28,135,194,194,66,166,178,115,195,194,194,198,14,28, + 56,112,208,194,133,11,69,12,83,90,77,171,213,66,167,211,33,40,40,8,199,142,29,19,205,154,53,107,208,55,223,124,3,212,33,117,66,66,66,66, + 253,144,144,16,61,0,244,105,233,94,190,44,212,86,6,0,238,238,238,168,14,111,133,171,33,33,225,92,115,219,121,99,95,8,226,42,57,174,7,224, + 82,149,22,207,83,246,200,218,49,149,150,143,90,184,211,114,121,239,201,136,176,176,48,157,253,113,55,55,183,202,78,241,215,104,52,33,229,15,218,234, + 155,204,156,95,101,237,117,143,219,224,208,128,153,57,176,59,119,238,4,0,124,252,254,80,193,150,223,10,88,150,45,253,169,93,190,124,57,230,207,159, + 47,62,124,248,112,175,29,59,118,244,34,132,172,170,204,168,58,113,226,228,201,192,161,209,98,8,113,151,187,187,97,192,144,183,113,232,208,143,232,220, + 185,115,89,89,131,6,13,48,176,255,203,248,242,243,149,0,80,253,175,108,21,60,108,59,133,197,218,185,61,6,173,93,144,158,163,57,123,224,192,1, + 116,234,212,233,129,243,135,188,54,0,95,124,186,28,148,82,209,195,244,147,80,70,228,46,119,197,224,55,71,195,81,59,177,49,253,14,188,56,112,117, + 183,220,123,218,135,206,221,227,164,246,52,10,240,238,222,178,105,4,10,191,94,135,75,69,122,28,202,210,99,68,244,115,136,244,146,161,147,133,67,128, + 171,240,127,120,56,163,229,27,26,26,10,150,101,17,18,18,226,183,104,209,162,41,141,27,4,225,251,47,183,96,219,238,131,60,84,89,7,4,34,212, + 106,131,93,66,136,175,151,151,23,88,150,133,187,187,187,223,203,47,191,60,37,48,48,16,151,47,95,198,165,75,151,120,161,80,184,142,231,249,10,154, + 74,165,50,34,52,52,244,1,147,165,86,171,161,209,104,160,82,169,160,86,171,193,48,12,166,76,153,34,58,126,252,248,32,165,82,249,115,13,166,17, + 211,59,12,91,80,106,54,4,66,205,156,57,115,12,126,126,126,6,23,23,23,202,138,36,234,168,152,5,238,0,192,176,34,245,170,85,171,140,65,65, + 65,122,150,101,197,227,199,143,175,212,12,218,99,48,24,168,189,166,209,104,40,59,190,116,233,82,163,191,191,191,193,197,197,133,154,76,53,31,116,188, + 146,122,31,18,145,0,18,145,0,82,177,16,238,245,159,129,164,240,42,44,22,11,150,45,91,102,10,8,8,48,186,184,184,80,177,88,44,122,247,221, + 119,171,237,231,240,225,195,169,66,161,48,185,184,184,136,230,207,159,95,97,36,241,215,203,153,144,137,133,112,145,176,8,111,16,12,9,213,57,146,113, + 136,64,240,96,52,130,68,34,65,199,142,29,209,188,121,115,124,251,237,183,81,0,156,70,203,137,147,39,24,22,0,14,30,60,216,5,192,49,0,232, + 221,187,55,1,0,2,138,201,99,251,99,68,204,96,112,28,111,139,254,7,97,8,222,121,171,23,120,190,250,25,9,90,131,37,158,181,109,199,94,147, + 18,70,0,0,141,66,149,52,118,196,235,224,120,190,52,13,42,0,8,128,183,99,122,148,30,123,4,253,20,128,195,164,49,175,194,81,59,17,141,2, + 25,139,73,15,98,183,217,99,77,52,107,139,83,211,49,205,235,41,27,154,117,58,232,245,102,108,191,126,95,247,83,166,214,143,81,220,201,95,61,160, + 157,84,144,159,133,80,119,113,133,209,208,186,246,179,115,231,206,104,215,174,29,52,26,13,206,38,229,210,83,9,89,99,41,165,27,31,70,51,52,52, + 20,245,234,213,131,70,163,193,173,91,183,104,82,82,210,216,205,155,55,59,212,148,203,229,195,54,109,218,84,193,100,229,230,230,50,26,141,6,38,147, + 137,87,171,213,224,56,14,211,166,77,19,206,154,53,107,24,33,100,190,85,199,224,72,243,88,42,13,37,132,76,78,72,72,8,157,57,115,166,233,127, + 255,251,95,122,131,6,13,180,2,129,0,74,165,114,117,116,116,180,215,194,133,11,77,189,122,245,186,35,16,8,16,30,30,174,189,122,245,106,40,0, + 153,253,117,84,117,237,246,154,219,126,253,132,2,0,33,4,209,209,209,105,225,225,225,90,129,64,128,155,223,47,173,176,119,96,101,154,66,150,65,227, + 32,143,210,39,132,0,50,55,192,26,137,23,29,29,157,17,17,17,161,97,24,6,87,174,92,9,6,240,64,188,151,35,77,153,76,102,30,50,100,72, + 250,245,235,215,43,212,7,0,86,192,160,93,132,117,0,43,168,53,144,113,170,210,126,10,5,176,204,26,59,148,85,72,1,137,187,143,65,165,82,65, + 46,151,3,0,76,38,19,46,94,188,136,246,237,219,119,217,187,119,239,241,74,94,174,42,175,253,97,112,106,58,53,255,205,154,142,188,200,147,128,109, + 68,235,88,249,139,226,56,11,26,132,248,99,233,236,225,224,56,30,28,199,193,98,189,231,56,14,102,83,181,123,61,215,136,135,105,199,83,46,91,248, + 227,238,56,207,255,245,91,254,194,226,153,49,63,113,28,192,243,102,152,205,0,199,155,193,115,28,204,230,58,135,230,60,128,153,231,17,26,28,128,197, + 51,99,80,190,157,248,47,247,246,249,245,187,41,46,157,95,90,50,9,192,178,71,210,160,147,26,35,21,73,88,202,74,97,52,90,160,54,242,70,74, + 169,118,192,179,205,77,212,213,71,10,0,44,67,30,217,234,218,23,94,120,1,201,201,201,88,184,112,33,14,31,62,124,22,192,67,199,216,52,108,216, + 16,183,111,223,198,209,163,71,145,150,150,86,157,102,243,176,176,48,0,127,153,172,143,62,250,200,103,253,250,245,65,0,208,191,127,255,204,23,94,120, + 161,224,198,141,27,80,42,149,164,160,160,160,55,128,241,0,64,8,153,76,41,93,95,137,174,54,36,36,68,239,235,235,107,176,25,34,134,97,108,163, + 120,122,63,63,63,67,120,120,184,86,36,18,129,97,24,216,140,94,77,32,132,64,32,16,192,166,105,143,64,32,128,77,179,54,8,89,187,250,229,236, + 153,173,29,71,237,85,134,84,42,165,0,42,173,47,96,236,126,30,217,170,35,4,62,255,147,10,9,33,199,40,165,248,243,207,63,145,146,146,2,145, + 72,132,128,128,0,204,159,63,31,6,67,169,223,29,56,112,96,23,0,87,106,212,65,39,78,254,127,80,193,139,60,9,60,240,7,232,224,193,131,93, + 122,247,238,125,28,40,53,64,165,102,199,129,249,49,91,96,54,155,0,90,233,230,245,53,166,170,118,56,142,175,178,29,91,140,22,207,83,214,161,201, + 226,121,88,204,230,135,238,35,0,240,156,25,60,111,174,96,178,120,142,3,33,76,233,248,22,197,67,77,81,58,169,27,1,33,161,140,57,164,1,78, + 90,244,8,242,150,136,1,32,172,73,83,193,197,18,51,78,95,190,6,31,55,249,195,190,47,172,76,86,58,120,83,175,94,61,184,185,185,225,187,239, + 190,3,128,231,199,141,27,247,3,33,164,17,165,52,163,54,130,148,82,86,40,20,150,105,186,187,187,163,77,155,54,32,132,60,31,31,31,255,195,240, + 225,195,27,109,219,182,173,130,102,73,73,137,159,84,42,133,86,171,45,27,201,90,191,126,125,144,209,104,100,0,128,101,133,193,249,124,144,148,227,1, + 15,121,54,10,11,139,189,41,165,165,163,212,132,44,39,132,108,163,85,100,247,23,137,68,101,6,197,222,0,73,36,146,58,25,24,27,54,115,38,18, + 137,28,30,47,63,189,86,29,34,123,163,5,90,58,170,101,135,205,216,217,98,163,170,67,44,22,151,93,187,35,88,129,93,123,130,218,135,98,154,76, + 38,104,52,26,20,21,21,65,42,45,29,48,163,148,130,16,50,30,192,67,239,241,232,196,201,147,132,189,23,121,18,40,255,43,116,12,165,217,226,97, + 49,155,28,154,159,189,223,159,70,122,142,22,1,62,191,131,90,235,214,148,65,131,6,125,174,84,42,203,246,211,146,200,220,188,99,227,62,128,197,98, + 130,187,140,193,168,97,61,30,48,89,165,35,90,198,242,255,176,150,81,88,172,157,219,99,224,154,5,30,114,239,179,229,205,207,226,237,23,6,20,170, + 12,193,12,243,7,10,137,146,27,248,246,7,195,109,231,49,12,115,121,247,134,57,19,107,218,111,74,24,225,128,49,171,99,41,235,214,204,133,81,159, + 152,26,243,220,126,123,51,231,229,229,117,160,251,128,85,221,114,239,59,99,180,254,9,220,61,20,76,112,219,40,180,29,191,22,191,78,159,74,1,192, + 91,25,196,116,29,187,8,110,109,251,224,220,168,97,53,218,160,156,16,34,0,48,16,165,75,241,109,159,109,95,0,244,155,111,190,193,43,175,188,2, + 157,78,7,141,70,3,0,176,88,44,200,201,201,17,1,168,116,216,116,224,192,129,2,185,92,62,144,82,26,109,221,156,24,132,16,95,0,244,206,157, + 59,80,42,149,15,104,242,60,15,149,74,37,18,139,197,14,53,93,92,92,242,74,74,74,148,58,157,14,42,149,10,42,149,234,129,114,86,40,36,177, + 163,199,249,8,69,98,152,77,70,28,138,95,84,237,117,71,53,32,105,93,234,35,164,79,75,119,8,132,98,117,98,88,216,106,150,101,193,48,12,190, + 95,55,117,252,215,43,226,220,1,224,242,129,117,170,193,83,62,89,195,48,12,12,6,131,164,90,97,59,238,222,189,27,108,48,24,244,86,131,102,123, + 29,144,154,154,90,207,96,48,232,236,143,215,4,153,139,59,160,104,0,184,60,24,143,78,8,193,157,59,119,2,205,102,115,9,203,178,48,26,141,53, + 114,69,12,195,136,174,92,185,18,204,243,188,195,250,205,27,6,2,1,45,1,177,71,77,187,88,22,6,81,93,29,66,8,181,153,97,39,78,156,0, + 176,243,34,79,2,54,163,21,117,240,224,65,187,95,5,10,139,217,108,53,89,127,153,30,142,227,145,149,175,199,141,27,55,177,106,213,42,156,62,247, + 190,199,194,133,11,37,179,102,205,50,12,26,52,104,5,207,243,173,24,134,185,60,96,192,128,241,142,26,227,121,190,222,133,11,23,194,108,207,205,102, + 51,220,221,221,225,238,238,142,136,240,224,10,38,139,227,56,152,170,152,58,180,197,104,17,202,83,179,153,3,199,243,101,230,167,80,101,8,254,238,231, + 63,27,217,85,111,98,123,208,241,153,102,21,180,108,12,26,51,191,236,58,118,111,152,51,113,225,214,173,146,66,206,247,221,193,3,70,68,14,28,60, + 12,67,94,237,217,197,96,52,126,43,96,40,111,46,107,15,12,40,30,136,209,114,242,247,145,92,164,53,11,37,50,184,5,212,199,77,13,39,98,89, + 246,247,145,35,71,136,24,1,11,134,21,33,177,80,95,211,97,205,126,223,126,251,237,174,30,61,122,128,216,141,144,232,116,58,116,232,208,161,100,206, + 156,57,121,44,203,90,24,134,81,3,128,201,100,42,209,106,181,27,40,165,249,149,9,202,229,242,126,163,71,143,222,213,162,69,139,178,99,132,16,232, + 116,58,124,240,193,7,37,70,163,49,143,97,24,11,33,68,13,0,28,199,149,152,76,166,13,91,182,108,169,76,51,49,57,57,89,89,175,94,61,168, + 84,42,88,44,22,190,127,255,254,153,44,43,12,102,133,66,242,210,224,113,124,78,78,150,153,97,4,160,148,67,207,129,239,16,137,84,38,50,25,141, + 22,0,147,43,25,205,178,79,225,224,30,29,29,237,101,91,9,248,245,138,56,119,187,50,121,155,54,109,188,236,87,29,214,4,177,88,76,6,13,26, + 36,11,9,9,33,0,240,71,252,76,0,128,72,36,34,125,250,244,145,134,132,148,198,225,255,178,174,230,123,106,251,184,80,160,56,21,40,190,243,192, + 113,129,64,128,62,125,250,72,194,194,194,106,245,93,180,6,192,87,154,187,203,149,181,0,57,127,214,72,43,166,53,49,207,236,12,118,69,79,6,98, + 55,111,67,187,169,135,127,171,170,190,211,108,57,113,82,70,57,47,242,100,192,2,128,117,136,238,175,47,57,5,204,22,83,5,147,197,113,28,132,196, + 128,85,171,86,225,189,247,222,3,0,209,196,137,19,247,47,92,184,240,21,158,231,91,81,74,59,17,82,249,111,5,195,48,199,148,74,101,46,165,84, + 200,48,76,167,117,235,214,121,245,236,217,19,238,238,238,160,60,173,96,178,56,142,135,201,100,172,16,131,97,195,83,46,91,248,227,222,119,61,255,247, + 242,242,23,56,158,255,201,102,178,120,142,3,248,210,147,238,229,102,224,200,143,223,98,227,134,77,133,32,52,9,20,60,195,48,151,43,235,35,207,243, + 173,78,253,113,173,83,199,103,154,97,225,214,173,146,132,11,217,251,199,77,152,17,57,112,240,48,236,253,50,30,140,165,232,79,123,147,197,153,121,20, + 23,22,244,57,234,140,209,250,71,32,132,120,249,248,248,144,97,195,134,241,106,181,26,34,177,152,55,155,205,130,231,159,127,158,123,239,189,247,152,156, + 156,28,168,212,26,150,16,226,69,41,189,95,141,156,247,157,59,119,144,149,149,245,192,65,74,41,218,182,109,235,146,152,152,248,52,165,84,85,201,185, + 149,245,207,59,59,59,27,158,158,158,21,52,155,52,105,226,242,231,159,127,62,189,105,211,166,26,107,170,84,170,248,49,99,198,116,57,113,226,132,136, + 97,24,168,84,42,116,237,218,181,32,159,15,146,198,142,30,231,147,149,149,105,145,203,88,131,72,36,68,94,94,30,223,165,215,16,221,224,225,227,3, + 223,155,241,225,230,172,51,27,42,139,207,122,0,251,149,128,229,203,182,108,217,98,12,10,10,210,75,36,18,113,76,76,76,141,230,15,141,70,35,93, + 186,116,169,161,252,234,66,163,209,72,87,173,90,101,12,14,14,54,200,100,50,106,54,87,31,247,201,48,196,50,106,225,78,139,197,98,41,59,102,251, + 205,17,8,4,48,243,68,179,118,237,90,83,112,112,176,209,197,197,133,74,36,18,81,77,250,57,110,220,56,234,233,233,105,114,117,117,21,77,153,50, + 229,161,86,29,154,57,176,11,215,149,165,119,144,184,187,187,67,173,86,151,245,85,169,84,86,56,199,105,182,156,56,113,224,69,158,16,28,6,48,240, + 128,38,47,191,192,207,199,191,62,44,22,139,245,102,134,197,108,198,187,111,15,198,138,13,107,1,192,102,182,162,39,78,156,184,31,64,181,63,102,187, + 119,239,94,48,113,226,68,121,110,110,238,225,207,63,255,220,107,232,208,161,152,60,121,50,150,47,95,14,161,88,10,47,223,122,101,237,216,218,45,200, + 191,15,10,170,113,164,103,139,209,162,20,172,183,111,40,204,156,25,188,217,12,179,217,12,34,40,189,180,35,63,126,139,161,111,197,65,40,241,240,252, + 100,213,50,93,100,91,229,43,179,70,142,172,52,70,197,78,156,73,184,144,189,127,220,123,83,162,109,38,235,171,248,13,73,31,79,123,121,151,68,204, + 150,181,99,230,121,48,140,192,25,163,245,15,64,8,241,146,72,36,251,126,248,225,135,91,173,91,183,38,90,173,22,102,179,25,5,5,5,216,191,127, + 127,34,165,20,158,158,158,248,225,135,31,248,161,67,135,238,35,132,12,168,198,108,109,158,52,105,82,196,220,185,115,7,206,154,53,203,191,99,199,142, + 8,9,9,1,207,243,40,40,40,0,234,240,3,16,24,24,184,249,224,193,131,17,135,15,31,30,216,165,75,23,255,224,224,224,50,77,173,86,11,147, + 201,84,43,205,236,236,236,235,13,27,54,220,61,99,198,140,193,211,166,77,19,242,60,143,27,55,110,128,2,84,40,18,131,97,24,8,133,44,138,139, + 85,188,139,155,34,219,68,5,46,66,145,24,140,64,84,213,50,225,244,168,152,210,244,14,12,43,82,219,86,2,138,68,34,156,219,251,145,42,42,102, + 129,28,0,68,18,89,97,247,238,221,211,154,53,107,166,61,127,254,124,40,202,173,58,44,15,1,44,253,98,166,8,92,100,82,109,116,116,116,186,77, + 243,206,79,159,168,134,189,51,147,16,129,88,251,210,75,47,165,69,70,70,106,5,2,1,174,125,187,76,213,47,102,138,148,252,181,166,183,2,135,111, + 209,81,151,247,158,140,88,180,104,145,185,87,175,94,119,109,241,98,119,238,220,9,236,221,187,183,100,229,202,149,230,222,189,123,103,180,104,209,66,195, + 48,12,46,92,184,224,112,21,97,121,100,50,153,121,196,136,17,233,87,175,94,173,211,170,195,234,168,87,175,30,120,158,71,215,174,93,161,215,59,30, + 16,116,154,45,39,78,158,76,28,26,45,179,197,60,46,246,221,121,159,0,228,175,44,127,148,254,53,176,68,65,222,127,127,146,43,0,153,205,108,77, + 152,48,161,218,109,78,236,76,86,219,161,67,135,98,250,244,233,248,248,227,143,185,229,203,151,11,174,223,76,53,197,188,51,183,168,92,59,160,160,26, + 222,204,143,115,164,87,88,172,157,219,169,247,146,121,153,185,37,167,98,198,204,42,251,245,226,0,168,136,146,3,128,141,27,54,106,133,18,15,215,129, + 131,135,1,64,244,39,171,150,237,95,136,173,213,155,45,74,154,142,155,48,197,211,102,178,214,173,92,116,213,131,228,174,141,155,148,88,54,13,101,251, + 107,224,229,142,253,157,122,47,121,49,239,190,246,97,183,96,113,82,11,196,98,241,130,95,127,253,213,181,101,203,150,228,222,189,123,224,184,210,119,196, + 100,50,161,184,184,24,106,181,26,6,131,1,109,218,180,97,214,172,89,227,26,23,23,183,0,192,59,149,233,81,74,121,66,136,110,231,206,157,254,81, + 81,81,72,74,74,130,74,165,130,135,71,205,227,114,202,51,119,238,92,126,212,168,81,186,145,35,71,250,135,135,135,227,250,245,235,48,153,76,16,139, + 235,158,219,54,37,37,101,221,119,223,125,135,227,199,143,15,154,54,109,154,48,32,32,128,120,120,228,16,179,201,8,128,210,252,252,124,222,197,77,145, + 237,227,31,156,158,149,147,215,212,108,50,130,231,76,149,70,155,91,211,59,188,159,144,144,80,255,163,143,62,50,218,175,4,28,60,229,147,53,109,218, + 180,241,90,187,118,173,241,165,151,94,74,179,5,175,215,36,24,254,200,109,140,79,72,184,210,188,188,102,84,236,71,159,218,52,237,87,35,246,153,180, + 233,211,240,240,112,175,200,200,200,180,170,116,195,194,194,116,74,165,210,24,17,17,161,17,10,133,165,35,89,102,115,73,88,88,24,239,239,239,111,108, + 214,172,153,166,182,65,251,50,153,140,2,21,115,94,217,168,205,170,67,161,0,150,161,67,135,150,101,134,127,63,60,60,123,216,176,97,202,137,19,39, + 226,211,79,63,197,233,211,167,43,152,253,46,93,186,224,196,137,19,243,240,112,249,222,156,56,113,242,47,196,161,209,250,236,179,248,95,96,23,211,228, + 136,133,11,23,74,172,35,89,209,239,189,247,30,116,58,157,103,249,58,132,144,110,182,92,27,142,76,214,178,101,203,118,81,74,131,1,116,228,56,254, + 183,45,91,63,235,90,93,135,237,53,41,97,4,12,67,52,98,33,189,184,97,243,167,95,216,215,179,6,191,55,1,193,229,79,86,45,211,1,136,46, + 111,182,6,12,24,80,82,94,211,198,232,49,111,151,153,172,79,86,45,251,41,178,109,200,43,179,70,46,112,104,206,22,204,125,219,149,97,200,243,246, + 49,90,142,52,31,22,167,230,95,154,132,144,174,195,135,15,111,245,220,115,207,49,246,38,203,104,52,150,37,238,180,5,139,103,102,102,162,75,151,46, + 76,171,86,173,90,16,66,186,82,74,143,218,107,70,53,39,174,40,193,171,247,116,104,62,111,242,152,247,91,183,138,68,110,110,46,230,207,159,79,23, + 45,90,84,171,209,5,155,230,250,245,235,93,9,33,175,22,23,23,55,239,215,175,223,251,161,161,161,200,205,205,197,177,99,199,104,255,254,253,235,164, + 105,123,110,221,86,103,141,82,169,252,121,206,156,57,195,10,10,10,122,23,22,22,121,31,252,124,33,122,12,28,67,186,244,26,162,53,82,86,154,145, + 157,27,113,236,135,157,94,135,118,175,131,201,104,140,37,100,227,53,91,122,7,7,239,81,137,45,141,67,68,68,132,214,222,168,132,132,132,232,3,3, + 3,13,145,145,145,101,199,29,173,230,115,244,190,215,86,211,26,255,165,173,74,19,64,153,105,43,159,54,194,197,197,5,54,243,85,155,126,218,175,182, + 116,68,117,171,14,237,53,63,255,147,10,237,203,62,39,68,16,31,31,223,45,62,62,190,45,128,139,0,142,0,48,91,207,43,11,154,167,148,126,0, + 224,131,234,174,253,97,112,106,58,53,255,205,154,79,42,117,202,47,100,11,124,7,192,76,152,48,161,80,167,211,121,14,27,54,172,202,115,114,114,114, + 62,221,190,125,251,3,38,235,213,87,95,125,107,223,190,125,63,231,229,229,213,165,27,240,148,203,22,30,255,126,170,103,151,151,150,188,7,96,185,195, + 74,20,124,100,91,229,43,159,172,90,182,31,15,154,173,29,0,94,117,112,6,1,128,238,61,94,198,206,207,214,218,98,187,100,87,207,103,30,26,244, + 231,124,135,171,21,21,110,146,249,214,126,76,132,51,70,235,111,65,36,18,69,77,155,54,77,164,213,106,43,152,172,242,70,75,165,82,225,242,229,203, + 136,137,137,145,92,186,116,41,10,192,3,251,102,146,18,12,15,11,241,31,223,163,65,176,176,36,247,10,62,91,53,15,127,220,46,164,7,15,30,92, + 49,117,234,212,73,62,62,62,184,119,239,158,5,64,141,211,129,51,12,51,220,199,199,103,121,203,150,45,153,162,162,34,156,59,119,14,201,201,201,244, + 214,173,91,43,140,70,227,36,137,68,130,146,146,18,75,73,73,73,205,83,140,151,35,59,59,251,186,53,25,233,120,219,116,147,68,42,19,13,25,254, + 94,112,217,170,195,221,235,96,208,235,0,128,173,73,122,7,150,101,69,151,46,93,10,181,141,90,153,76,38,137,237,248,249,243,231,67,109,185,181,244, + 122,125,141,87,29,62,46,205,43,87,174,4,219,86,71,218,86,23,178,44,43,186,112,225,66,176,77,211,96,48,212,104,232,80,44,22,139,46,93,186, + 20,204,113,220,35,91,117,104,195,106,140,15,91,111,0,74,13,150,213,100,17,235,116,161,115,218,208,137,147,39,148,58,25,45,91,224,123,77,235,19, + 66,216,250,245,235,119,31,60,120,240,3,38,107,192,128,1,220,215,95,127,125,76,169,84,230,50,12,83,221,54,33,21,117,109,49,90,128,176,124,25, + 195,48,151,59,62,211,12,12,195,92,158,53,114,164,97,33,182,62,96,182,190,221,191,231,197,74,100,75,211,3,248,7,99,232,91,113,24,250,86,156, + 39,128,14,64,229,171,21,171,234,135,147,199,3,33,68,28,24,24,120,85,175,215,131,16,2,131,193,80,102,176,212,106,53,138,139,139,203,158,155,76, + 38,228,231,231,35,36,36,4,132,144,10,113,116,20,96,122,118,121,42,179,95,215,54,157,118,255,124,165,228,163,93,95,179,127,166,170,223,161,148,110, + 147,203,229,1,193,193,193,209,215,174,93,155,70,41,173,113,150,94,74,41,19,26,26,202,40,149,74,214,26,39,102,188,126,253,250,59,91,183,110,221, + 22,23,23,23,224,225,225,17,157,155,155,59,109,239,222,189,143,38,243,175,21,147,201,100,153,54,239,163,237,2,86,100,225,57,35,99,50,153,222,66, + 45,190,231,211,166,77,99,224,32,246,42,46,46,206,225,241,127,74,115,198,140,25,14,87,9,198,197,197,85,185,122,176,50,38,77,154,244,200,86,29, + 214,4,167,161,114,226,228,255,15,117,50,90,12,195,92,118,176,186,144,0,160,142,86,244,81,74,45,2,129,96,158,66,161,120,91,171,213,254,248,234, + 171,175,78,24,48,96,0,7,148,6,200,215,165,15,64,105,140,86,84,159,165,19,139,52,134,181,229,203,202,143,60,217,204,214,186,213,203,214,239,223, + 247,229,128,156,172,12,135,43,176,108,6,173,178,50,71,199,139,85,186,121,81,125,150,190,87,168,210,57,99,180,254,38,56,142,59,34,147,201,136,109, + 51,101,251,209,43,149,74,133,146,146,18,88,183,164,1,0,104,52,26,120,120,120,128,227,56,135,107,88,19,110,164,187,182,104,24,116,166,184,176,128, + 184,65,125,158,82,186,13,0,84,42,213,208,186,246,177,168,168,136,200,229,114,220,191,127,31,238,238,238,159,109,221,186,117,27,0,172,93,187,182,206, + 154,229,161,148,26,8,33,147,9,33,182,17,221,201,41,71,87,151,125,182,9,89,123,217,190,172,138,209,172,236,154,108,16,237,232,188,170,202,30,131, + 102,110,21,27,68,87,69,110,45,245,114,1,64,36,20,228,85,182,121,180,72,40,168,219,80,124,57,108,163,90,0,230,61,10,61,39,78,156,252,187, + 112,104,180,108,38,168,50,42,203,147,85,21,28,199,45,5,176,180,182,231,85,197,213,155,234,205,0,54,215,180,190,53,38,235,77,235,205,33,220,189, + 132,90,95,219,128,1,3,54,2,216,88,109,69,39,143,12,179,217,252,43,0,248,250,250,194,215,215,183,54,231,85,56,38,96,112,232,216,249,164,150, + 199,254,72,34,0,192,48,216,251,176,253,227,121,254,80,122,122,122,251,244,244,116,6,0,40,165,59,31,86,179,50,40,165,235,9,33,219,172,143,13, + 53,45,43,87,239,145,111,108,252,152,52,15,87,95,235,209,233,29,72,178,248,63,202,246,170,232,135,115,132,203,137,147,39,148,71,182,7,156,19,39, + 255,85,126,73,161,183,0,188,245,40,53,199,142,29,123,11,165,89,230,255,22,170,49,81,213,167,51,113,226,196,137,19,39,143,5,2,160,155,163,130, + 218,172,38,32,132,56,212,168,138,234,244,157,154,78,77,167,166,83,211,169,233,212,116,106,62,121,154,213,105,151,91,97,30,75,41,173,241,204,213,191, + 18,74,233,99,187,1,232,230,212,116,106,58,53,157,154,78,77,167,166,83,211,169,89,199,118,98,255,142,118,30,231,173,102,217,252,156,56,113,226,196, + 137,19,39,78,156,212,26,103,140,86,13,33,245,250,205,6,232,244,210,39,100,25,77,255,230,131,127,182,71,143,158,129,3,7,86,154,61,220,17,169, + 169,10,230,79,40,63,150,187,138,250,104,180,230,143,185,11,115,42,172,254,180,135,16,66,124,194,90,191,225,34,117,121,199,104,52,54,112,115,119,207, + 187,127,47,127,227,253,244,43,235,236,170,201,127,251,237,55,229,115,207,61,151,5,64,13,0,212,250,111,141,19,39,78,30,29,196,179,121,61,16,50, + 28,160,127,45,187,228,105,34,45,186,246,217,3,245,20,205,222,2,67,154,219,29,210,129,98,11,45,76,188,235,80,247,175,37,233,138,228,228,228,14, + 143,132,18,0,0,32,0,73,68,65,84,208,70,141,26,165,1,40,42,87,173,66,153,243,123,238,228,73,229,161,141,22,105,220,191,1,44,204,155,160, + 120,29,4,151,104,202,222,254,117,210,105,244,106,16,120,246,89,0,173,1,218,218,85,38,125,90,103,52,229,241,148,190,65,147,119,95,172,181,94,216, + 192,49,168,124,59,139,121,52,101,239,134,218,41,210,25,127,156,248,90,162,112,33,104,212,230,149,41,176,203,224,92,87,8,33,98,0,157,24,134,105, + 238,226,226,162,44,41,41,201,231,121,254,46,128,159,41,165,213,110,105,84,137,38,3,96,132,155,171,107,143,80,119,113,235,244,130,226,76,181,153,59, + 9,96,121,93,53,29,81,106,178,2,54,191,55,228,185,152,101,239,118,131,34,106,233,20,0,149,26,45,66,8,9,110,242,252,183,131,6,15,140,26, + 27,27,227,22,228,235,134,236,2,173,247,134,79,227,63,138,143,223,249,210,200,65,209,61,0,96,193,130,5,253,234,213,171,87,95,32,16,164,206,158, + 61,123,199,220,185,115,169,221,15,119,121,77,37,0,150,82,122,215,250,220,21,64,36,128,48,0,41,0,18,40,165,90,71,231,214,148,255,138,102,112, + 112,112,32,207,243,35,253,253,253,123,231,230,230,30,100,24,102,107,70,70,70,86,245,103,62,86,54,217,226,43,106,122,15,224,237,218,52,32,147,201, + 114,245,122,189,31,0,72,165,210,60,157,78,247,216,86,9,254,157,109,253,45,16,140,58,114,42,161,135,253,161,238,29,155,87,172,199,144,230,71,78, + 37,118,126,176,94,36,7,7,191,129,214,236,171,152,55,111,30,153,63,127,254,91,13,27,54,12,103,24,230,198,156,57,115,30,72,125,83,190,204,246, + 61,119,154,45,39,79,34,117,50,90,164,249,64,87,232,233,0,128,196,116,105,223,166,227,219,111,244,33,84,32,197,144,81,83,45,181,214,170,255,150, + 4,2,221,194,150,145,205,39,12,236,211,141,105,27,89,31,74,95,15,128,17,98,211,15,119,188,215,46,155,189,30,192,115,117,232,230,220,219,103,119, + 249,101,23,113,32,4,32,4,96,8,160,209,243,232,222,239,205,185,0,106,105,180,8,163,112,33,152,176,75,15,128,212,106,228,199,161,26,33,245,125, + 125,125,223,26,63,126,188,107,100,100,164,66,42,149,138,245,122,189,127,114,114,178,239,236,217,179,35,9,33,223,83,74,255,168,165,102,72,163,224,192, + 61,107,39,140,120,182,85,88,40,132,70,13,120,131,182,222,205,228,91,237,71,175,223,59,138,16,50,152,214,97,203,132,130,130,2,2,0,62,62,62, + 20,176,55,89,237,98,86,78,236,142,9,43,142,160,68,111,252,162,42,13,175,250,79,13,123,229,149,151,163,22,205,140,115,203,188,103,194,165,84,29, + 188,220,68,152,59,121,140,216,96,48,183,95,191,35,62,246,147,37,83,183,112,28,247,63,0,109,57,142,59,15,96,199,188,121,243,8,128,10,63,190, + 214,140,232,51,74,31,146,157,2,129,224,167,110,221,186,53,24,57,114,36,105,211,166,13,46,92,184,16,182,107,215,174,110,44,203,166,114,28,119,5, + 192,13,74,105,197,220,14,14,32,132,8,1,52,17,8,4,45,255,205,154,129,129,129,50,163,209,248,102,112,112,112,108,223,190,125,91,246,233,211,135, + 52,105,210,4,215,175,95,111,115,232,208,161,185,79,61,245,212,149,140,140,140,205,98,177,120,123,86,86,86,157,51,208,215,21,66,72,44,128,64,171, + 79,158,87,131,251,44,0,243,40,165,85,229,209,122,0,189,94,239,103,251,219,76,8,113,152,239,234,81,81,155,182,8,33,215,8,33,94,214,199,168, + 234,158,97,24,88,44,22,173,197,98,105,88,141,102,19,160,86,225,30,148,82,90,85,34,104,25,0,116,239,208,252,62,8,18,1,0,60,77,172,80, + 139,167,137,101,6,140,162,249,145,211,137,94,15,140,130,149,99,222,188,121,100,238,220,185,248,224,131,15,250,0,232,196,243,252,201,166,77,155,174,121, + 64,146,231,203,202,230,206,157,187,186,178,239,185,19,39,79,2,53,54,90,132,16,130,134,253,59,131,67,76,104,61,255,1,239,142,124,77,22,217,180, + 17,244,112,195,157,2,14,63,28,56,4,0,187,107,211,56,9,27,212,150,21,97,251,178,15,38,71,116,122,54,18,87,51,205,56,159,201,161,36,213, + 12,1,99,6,199,83,128,194,241,86,247,53,32,163,208,130,83,55,140,96,8,32,96,0,134,33,16,212,53,42,141,51,222,92,240,217,133,200,130,92, + 30,224,140,55,235,218,39,0,32,132,52,111,220,184,241,176,249,243,231,43,114,114,114,92,47,92,184,0,137,68,2,79,79,79,129,82,169,12,92,177, + 98,133,238,221,119,223,237,77,8,185,67,41,45,168,161,102,211,94,109,91,158,217,188,108,129,135,249,183,67,40,250,242,43,8,24,10,145,171,27,26, + 200,100,56,244,74,35,175,1,7,82,191,38,132,52,165,148,102,86,167,151,148,148,36,48,24,12,131,229,114,121,59,161,80,232,47,245,172,207,103,177, + 109,239,229,147,176,148,60,191,146,206,19,187,249,247,248,248,189,174,152,176,226,8,86,237,58,247,121,107,228,204,169,74,207,197,197,237,237,119,223,25, + 233,150,81,96,194,194,175,11,240,217,9,21,222,236,228,142,9,61,61,48,116,200,32,215,189,95,237,123,27,192,22,187,83,174,55,109,218,148,36,37, + 37,57,50,89,158,0,166,26,141,70,70,36,18,17,169,84,58,108,209,162,69,166,33,67,134,100,216,234,116,234,212,9,157,58,117,34,106,181,58,236, + 232,209,163,97,241,241,241,22,66,200,53,74,233,183,149,245,81,38,115,73,215,235,117,245,164,50,89,201,134,245,235,63,238,220,185,51,47,145,252,181, + 43,76,93,52,1,64,161,80,108,105,220,184,49,153,62,125,122,214,163,210,108,208,160,193,145,78,157,58,117,237,222,189,59,219,161,67,7,4,6,6, + 150,149,249,248,248,160,83,167,78,228,238,221,187,173,78,158,60,185,254,200,145,35,107,26,52,104,112,52,53,53,181,123,85,154,143,26,235,72,21,106, + 97,156,54,87,50,120,249,159,131,16,226,182,105,211,38,63,219,158,140,102,179,25,28,199,149,221,219,110,60,207,131,227,56,44,90,180,168,202,220,133, + 54,172,35,159,54,83,98,187,241,142,238,197,98,177,79,205,58,139,68,165,164,168,153,171,171,107,40,128,94,141,27,55,158,106,95,28,110,77,83,167, + 213,106,211,178,13,138,68,0,157,43,104,252,133,98,254,252,249,111,126,240,193,7,47,227,175,61,43,91,14,28,56,240,104,185,122,45,173,247,90,66, + 200,49,134,97,190,7,240,25,128,71,54,234,238,228,137,227,25,0,246,73,19,141,0,108,91,102,21,160,244,123,225,93,238,184,125,61,219,125,190,245, + 184,175,245,60,106,167,155,15,160,86,3,28,53,129,5,128,131,7,15,210,222,189,123,19,219,189,195,154,13,6,252,48,98,72,223,30,189,95,120,30, + 140,212,19,55,243,128,179,233,20,44,99,6,3,138,223,78,31,165,96,249,237,246,167,84,53,122,66,26,12,152,212,178,69,228,210,173,203,198,11,174, + 229,177,248,236,100,9,76,122,13,242,115,210,145,151,149,134,236,140,20,100,166,167,92,1,200,220,154,106,150,135,82,128,227,81,250,63,32,15,148,190, + 158,21,47,175,70,154,102,109,82,195,136,22,145,133,98,14,48,107,147,170,111,219,177,38,33,164,69,120,120,248,144,153,51,103,122,37,36,36,200,74, + 74,74,12,135,14,29,186,126,231,206,29,185,82,169,188,63,102,204,152,240,192,192,64,121,191,126,253,196,123,246,236,233,7,187,132,172,85,104,70,246, + 109,247,244,217,79,215,172,116,189,183,119,45,140,201,151,241,67,182,22,167,115,75,104,152,135,132,140,107,229,11,55,9,139,5,29,2,221,122,237,79, + 94,10,96,104,85,154,103,206,156,81,186,184,184,172,120,253,245,215,149,113,113,113,18,142,85,176,251,206,222,243,152,186,254,108,96,137,193,36,24,210, + 181,62,38,190,222,18,19,87,253,106,51,89,177,13,26,20,241,85,105,154,77,166,6,193,126,114,92,186,163,195,103,39,84,248,101,102,32,94,88,148, + 133,87,91,179,104,26,226,6,139,201,220,100,224,192,129,219,81,186,153,249,31,0,250,13,28,56,48,66,32,16,252,10,224,155,234,222,35,169,212,241, + 238,41,158,158,158,232,210,165,11,154,54,109,202,118,238,220,185,37,128,50,3,83,94,211,100,50,42,121,158,194,221,221,93,230,237,237,237,233,238,238, + 126,207,150,89,190,174,154,0,224,229,229,213,191,75,151,46,236,174,93,187,10,82,83,83,127,27,50,100,72,138,92,46,127,96,244,215,213,213,21,225, + 225,225,152,61,123,54,219,163,71,143,106,53,253,253,253,163,227,227,227,65,8,41,251,163,93,158,208,208,80,4,4,4,160,87,175,94,108,255,254,253, + 163,237,203,234,50,178,89,29,229,53,173,35,90,15,100,59,175,106,250,205,81,253,26,188,239,121,182,209,37,169,84,90,163,76,237,213,104,86,58,221, + 41,145,72,202,70,161,202,183,229,72,147,97,24,204,154,53,11,132,16,8,133,66,136,68,34,135,247,81,81,81,181,237,231,93,66,8,35,18,137,166, + 178,44,59,210,96,48,4,75,165,210,44,142,227,62,55,24,12,139,172,35,162,10,71,159,221,202,52,93,93,93,67,111,222,188,217,184,178,23,197,96, + 48,160,101,203,150,128,1,215,170,210,76,78,78,14,109,216,176,97,19,0,182,45,218,78,80,74,59,219,61,183,231,4,165,180,167,245,241,141,219,183, + 111,135,194,106,180,254,142,207,167,83,243,223,167,89,141,23,241,37,132,28,176,107,255,37,219,243,105,211,166,205,88,188,120,113,2,33,228,128,253,113, + 251,122,246,247,0,96,123,60,125,250,244,200,37,75,150,124,104,171,251,168,175,9,168,221,212,161,60,95,239,138,147,233,114,176,2,14,44,67,192,10, + 0,80,130,180,59,201,80,171,138,78,209,148,175,82,107,34,68,194,6,118,120,234,233,150,203,118,174,154,194,108,59,89,130,34,173,30,73,23,143,225, + 143,99,223,228,112,22,238,27,16,122,30,96,46,32,133,191,78,233,222,26,253,167,87,177,17,202,150,26,45,171,185,122,192,108,253,51,16,66,90,69, + 68,68,12,154,61,123,182,207,159,127,254,41,45,46,46,86,239,220,185,51,203,96,48,220,1,112,56,45,45,45,98,245,234,213,226,101,203,150,181,104, + 213,170,149,114,223,190,125,198,154,104,78,142,25,122,118,228,187,239,73,175,237,89,7,241,181,11,152,117,185,128,251,37,187,100,38,128,85,184,171,233, + 144,175,183,252,180,178,75,61,166,190,187,8,141,20,98,199,191,234,86,146,146,146,4,46,46,46,43,226,227,227,67,159,121,230,25,6,0,78,222,176, + 72,166,174,63,27,120,120,113,7,210,161,185,55,242,138,12,24,191,238,18,14,157,205,251,177,188,201,170,12,119,119,247,252,140,60,149,191,183,155,20, + 111,116,116,195,11,139,178,48,160,173,4,18,17,193,245,212,28,52,106,88,159,92,58,245,109,91,148,154,172,103,178,179,179,1,160,45,128,212,187,119, + 239,42,1,20,219,180,40,165,133,132,144,165,98,177,120,22,33,132,62,243,204,51,151,90,180,104,161,241,244,244,132,78,167,131,193,96,128,72,36,130, + 78,167,67,90,90,26,126,251,237,55,120,122,122,86,215,197,7,208,104,52,112,119,119,7,207,243,15,173,201,113,28,217,184,113,163,107,66,66,130,235, + 190,125,251,252,39,76,152,112,175,89,179,102,231,7,13,26,116,203,207,207,207,112,249,242,101,156,57,115,6,133,133,133,104,215,174,93,141,52,141,70, + 35,88,150,133,78,167,131,68,34,1,203,178,176,88,44,224,121,190,204,124,105,52,26,220,191,127,31,34,145,8,70,99,181,31,165,71,142,109,68,203, + 158,170,166,223,28,213,175,142,71,29,39,85,213,116,103,81,81,145,76,161,80,76,173,201,8,29,33,4,2,129,0,34,145,8,132,16,116,238,220,25, + 35,70,140,64,235,214,173,145,156,156,140,47,191,252,18,127,252,241,7,132,66,97,89,253,154,18,21,21,37,144,74,165,103,250,246,237,27,57,115,230, + 76,105,253,250,245,113,237,218,181,144,37,75,150,76,253,249,231,159,95,38,132,180,165,148,86,251,157,44,155,18,44,157,46,236,101,48,24,112,237,90, + 5,31,85,213,57,21,104,212,168,81,26,195,48,183,120,158,63,9,160,37,165,180,51,33,228,16,0,215,114,85,181,148,210,158,132,16,21,128,43,12, + 195,220,224,121,62,205,25,162,229,164,58,202,155,33,155,129,90,188,120,241,75,229,143,57,50,78,229,143,47,89,178,228,67,187,231,143,101,68,181,204, + 104,29,60,120,176,234,79,56,143,87,15,124,189,235,220,11,38,132,70,182,233,132,191,70,135,40,46,252,118,6,0,253,188,38,13,146,192,62,50,198, + 197,245,243,141,31,198,49,155,142,149,224,110,86,30,206,252,240,57,242,179,239,124,6,208,9,52,101,175,170,238,151,99,109,163,65,255,22,126,190,190, + 10,189,137,130,167,0,42,152,173,191,31,66,72,235,38,77,154,244,63,123,246,172,143,94,175,151,158,58,117,170,36,62,62,62,199,100,50,29,163,148, + 158,182,214,249,51,63,63,127,32,0,184,186,186,10,88,150,21,87,21,32,74,8,105,61,121,228,155,167,150,110,252,84,122,235,234,37,172,222,247,3, + 138,74,74,184,99,121,186,126,148,82,155,163,255,181,145,66,146,73,65,235,9,25,2,165,171,48,128,16,34,165,148,58,156,146,53,24,12,67,94,127, + 253,117,165,205,100,1,64,129,218,204,150,24,204,130,14,205,189,209,166,235,64,92,56,186,23,123,78,100,162,161,175,203,137,6,174,213,155,44,0,200, + 207,203,222,184,114,237,166,149,75,231,77,22,79,236,229,129,1,109,133,144,138,8,228,46,66,44,90,179,197,252,231,111,39,46,43,149,202,3,0,250, + 101,103,103,67,169,84,106,0,220,16,8,4,169,28,199,101,149,127,9,40,165,115,8,33,254,219,183,111,103,204,102,179,38,57,57,25,1,1,1,240, + 247,247,135,135,135,7,146,146,146,240,203,47,191,224,250,245,235,224,121,30,79,61,245,84,77,186,89,198,189,123,247,112,249,242,101,244,234,213,123,66, + 126,126,158,220,211,203,91,123,234,228,137,143,234,162,201,243,60,1,128,200,200,72,68,70,70,74,51,51,51,131,15,28,56,224,183,112,225,194,244,208, + 208,208,157,58,221,95,225,83,6,67,205,146,184,219,140,147,94,175,47,51,129,82,169,20,34,145,8,42,149,10,185,185,185,80,171,213,0,0,133,66, + 241,143,24,45,71,35,84,143,178,254,227,160,170,233,78,66,200,235,0,166,58,56,173,2,132,16,88,44,22,136,68,34,60,247,220,115,88,187,118,45, + 254,248,227,15,124,243,205,55,8,9,9,65,76,76,12,24,134,65,66,66,66,109,187,200,159,61,123,118,106,191,126,253,34,183,111,223,46,77,75,75, + 195,245,235,215,161,80,40,176,118,237,90,73,108,108,108,163,163,71,143,206,1,176,188,58,33,251,213,133,129,129,129,175,181,108,217,178,66,157,128,128, + 0,143,195,135,15,251,217,12,88,249,21,137,14,40,154,51,103,206,202,166,77,155,174,178,78,23,118,2,224,74,41,141,218,183,111,31,1,128,1,3, + 6,80,66,200,49,107,253,43,123,247,238,237,154,148,148,68,63,248,224,3,167,203,114,226,208,139,88,71,149,179,173,143,29,26,168,154,82,126,196,203, + 198,244,233,211,35,23,47,94,252,123,93,117,171,162,236,143,105,165,83,134,54,88,70,25,224,231,237,53,45,166,3,120,30,176,112,128,133,163,208,150, + 232,112,237,234,31,37,144,146,125,53,106,81,34,94,182,112,230,123,97,151,50,24,100,21,154,112,252,219,77,52,63,251,78,127,154,178,103,248,163,49, + 89,131,90,6,248,251,29,223,181,105,1,243,71,138,17,28,95,234,179,120,158,150,61,254,187,33,132,4,248,250,250,14,61,119,238,156,175,68,34,145, + 222,188,121,147,223,187,119,111,161,201,100,250,217,102,178,172,116,104,219,182,173,197,205,205,13,90,173,214,108,50,153,244,85,152,172,224,168,214,173,78, + 44,221,248,169,84,111,52,162,88,103,128,192,219,175,188,201,2,33,228,249,174,141,131,130,136,212,29,20,192,29,149,41,171,50,147,5,0,18,137,164, + 91,92,92,156,196,254,152,143,187,208,226,34,17,114,167,19,11,248,11,71,247,226,100,66,1,47,21,9,56,95,154,18,86,211,215,160,40,35,113,227, + 55,223,29,248,105,210,236,101,154,18,173,26,13,3,101,208,168,139,177,104,241,82,243,217,179,39,143,77,157,48,186,253,222,189,123,151,0,184,97,61, + 229,198,222,189,123,223,156,61,123,246,14,88,211,60,56,32,107,232,208,161,25,205,155,55,47,110,218,180,105,241,189,123,247,144,152,152,136,194,194,66, + 172,94,189,26,215,174,93,3,207,151,250,64,71,211,40,213,193,243,60,10,11,239,187,81,74,81,120,255,158,235,204,153,51,61,234,162,201,113,220,3, + 223,173,160,160,32,140,25,51,70,84,82,82,162,72,79,79,151,219,151,213,84,211,104,52,218,146,249,129,82,10,163,209,136,226,226,98,24,141,70,220, + 186,117,171,204,100,89,219,255,199,70,180,108,143,101,50,89,46,41,221,56,25,82,169,20,132,16,71,211,111,143,36,251,179,173,45,66,8,149,201,100, + 149,109,38,237,16,171,217,115,72,109,251,199,113,28,68,34,17,70,140,24,129,223,127,255,29,201,201,201,16,8,4,208,106,181,40,41,41,65,116,116, + 52,196,98,177,173,221,154,202,82,145,72,244,250,140,25,51,164,169,169,169,40,40,40,248,63,246,206,59,42,170,171,107,227,207,153,59,149,25,134,222, + 59,210,85,108,168,216,176,247,88,146,88,177,107,236,70,163,177,199,216,98,212,24,123,139,70,19,99,176,226,171,98,139,45,150,88,163,98,141,162,136, + 2,210,165,151,1,166,222,243,253,1,99,16,7,152,1,76,251,230,89,235,174,196,59,231,254,238,62,83,55,251,236,179,183,54,153,30,26,141,6,211, + 167,79,55,17,10,133,67,97,96,232,62,57,57,185,91,116,116,180,95,249,35,53,53,53,183,108,78,97,117,117,232,208,33,210,191,127,127,218,191,127, + 127,170,117,184,140,50,74,151,116,249,34,101,63,123,181,177,188,167,139,81,186,124,104,82,83,182,46,233,181,116,72,188,7,53,182,183,182,186,184,123, + 203,82,211,19,143,8,18,19,226,144,158,18,143,166,45,219,227,201,163,251,96,85,154,195,52,58,188,202,237,233,196,115,128,111,64,221,122,147,218,181, + 12,196,170,19,5,136,142,60,131,156,244,148,205,52,246,224,225,154,79,5,32,30,3,26,218,219,219,92,252,121,203,82,139,95,30,115,144,144,16,135, + 136,159,215,81,149,82,158,3,160,236,78,46,131,255,106,54,97,21,130,130,156,52,40,242,53,16,113,10,117,39,4,85,32,74,105,170,157,157,221,149, + 117,235,214,117,106,209,162,133,96,200,144,33,169,217,217,217,17,148,210,155,111,108,47,73,144,239,185,105,211,38,251,132,132,4,92,184,112,33,5,64, + 133,75,177,148,210,68,134,97,182,254,250,243,142,89,38,117,252,177,97,254,231,234,67,183,31,247,161,148,254,82,134,25,208,185,129,239,137,101,51,39, + 115,216,187,167,241,32,62,13,47,115,229,191,86,196,204,200,200,32,133,133,133,238,22,22,22,101,239,3,71,137,76,62,123,160,111,114,151,57,87,157, + 138,149,26,8,121,28,58,173,175,123,242,173,136,67,214,25,197,25,68,187,27,177,42,141,29,212,185,239,150,176,35,195,79,156,56,57,73,41,47,14, + 244,247,247,163,119,110,92,124,48,103,250,132,238,85,95,173,83,166,183,110,221,226,48,12,243,150,131,94,54,66,164,149,190,145,34,67,164,47,179,188, + 163,165,149,90,173,126,231,188,190,76,185,92,14,93,62,184,174,92,45,150,101,223,203,252,171,82,217,8,85,217,37,67,109,62,93,113,113,177,157,137, + 137,73,154,118,249,175,182,34,90,53,217,137,88,217,242,165,33,246,113,56,28,176,44,11,62,159,143,70,141,26,225,196,137,19,176,178,178,130,153,153, + 25,204,204,204,96,98,98,2,107,107,235,55,142,22,135,163,247,46,29,42,151,203,221,220,220,220,240,252,249,115,136,68,162,55,135,80,40,68,253,250, + 245,33,147,201,156,241,183,197,238,141,50,234,253,74,27,141,42,155,107,53,119,238,220,249,213,229,205,157,59,119,190,174,8,87,109,138,11,252,233,65, + 234,242,36,181,78,214,174,205,75,204,142,220,3,18,19,99,113,238,224,198,124,149,82,145,205,178,42,247,151,79,239,3,28,252,164,215,221,56,180,121, + 223,158,29,200,185,63,20,200,203,73,199,179,59,103,226,80,36,152,87,27,19,209,58,89,187,183,44,177,56,254,136,32,33,33,14,191,236,219,144,167, + 82,42,59,211,151,225,119,106,194,30,38,16,244,29,84,215,162,215,152,54,201,208,132,104,48,244,73,84,15,167,16,210,55,249,74,229,59,195,202,234, + 245,235,215,17,82,169,148,124,251,237,183,237,138,139,139,255,71,41,125,19,162,36,132,4,122,121,121,13,254,254,251,239,173,18,18,18,120,87,175,94, + 149,93,188,120,17,0,142,85,198,212,104,52,179,9,33,76,19,15,231,79,239,198,37,245,161,148,158,46,195,172,223,43,168,222,181,31,86,44,148,170, + 174,29,66,65,74,2,230,93,75,204,3,160,247,243,173,82,169,144,155,155,11,85,65,166,186,169,163,44,119,241,0,59,121,90,118,49,151,199,22,170, + 3,204,94,203,47,102,190,100,196,98,177,190,56,0,192,150,21,179,194,0,132,13,24,48,96,247,195,27,39,155,58,58,58,158,12,8,8,32,0,160, + 107,135,97,69,42,45,239,48,189,85,171,86,36,56,56,248,247,245,235,215,159,213,62,166,203,169,168,78,68,171,42,233,203,100,89,86,231,175,168,74, + 165,122,231,243,86,157,136,86,89,233,114,180,254,206,136,150,46,167,165,172,147,88,214,17,170,78,142,86,109,171,50,103,202,16,251,180,121,114,124,62, + 31,247,239,223,135,171,171,43,148,74,37,164,82,41,164,82,41,76,77,77,145,159,159,15,30,143,103,80,126,22,0,86,36,18,189,122,252,248,177,159, + 173,173,45,52,26,205,91,206,86,116,116,52,36,18,73,18,12,140,104,57,57,57,157,41,221,117,248,150,28,28,28,204,13,225,84,164,178,145,172,254, + 253,251,27,151,8,141,210,169,202,124,17,0,233,229,34,81,138,50,255,78,7,64,74,255,157,14,188,113,196,202,254,191,66,199,185,204,21,43,86,92, + 44,147,223,149,142,247,160,74,35,90,196,123,80,99,59,43,203,139,59,55,44,54,59,24,9,36,37,196,226,242,225,77,185,106,141,178,35,88,154,114, + 227,252,225,67,32,40,196,203,67,151,129,131,85,223,141,69,147,38,117,221,113,244,15,21,210,19,163,65,41,187,139,166,253,92,88,211,73,16,239,126, + 141,236,236,236,46,238,218,180,216,252,200,125,130,196,132,88,156,59,184,41,79,173,42,236,68,95,254,47,178,186,220,79,8,177,228,72,197,223,13,239, + 214,124,128,123,29,103,176,84,5,150,79,241,241,108,27,238,179,187,133,71,221,186,50,7,217,2,118,82,226,13,253,10,129,230,231,231,31,37,132,220, + 41,91,94,129,16,210,208,199,199,103,224,214,173,91,109,19,19,19,69,119,239,222,45,218,190,125,251,107,150,101,143,80,74,171,92,74,165,148,126,78, + 8,217,89,182,94,14,33,164,225,172,209,67,110,12,25,245,137,40,246,124,24,44,99,159,96,230,181,100,205,179,108,69,40,165,52,181,34,150,141,141, + 13,205,200,200,136,207,201,201,241,147,72,36,200,204,204,68,86,86,22,114,115,115,33,207,203,82,91,107,114,100,68,157,5,30,143,135,215,9,42,104, + 52,154,84,125,163,89,0,44,151,46,93,58,150,101,89,109,69,196,183,118,23,150,25,167,125,63,248,13,24,48,96,183,118,215,33,202,36,195,151,41, + 239,64,74,203,59,180,56,125,250,116,84,247,238,221,19,129,119,157,21,161,80,136,226,98,195,170,132,84,180,139,177,58,204,138,34,90,229,207,27,194, + 212,46,95,106,147,224,203,159,215,138,97,24,176,44,251,206,249,191,66,101,157,150,178,187,3,245,25,95,153,170,42,28,90,157,157,136,90,213,86,68, + 11,192,155,136,214,177,99,199,48,106,212,40,104,52,26,136,197,98,152,154,154,66,34,145,224,240,225,195,208,150,127,48,196,68,149,74,181,103,197,138, + 21,243,183,109,219,102,66,41,133,64,32,120,227,104,45,94,188,184,72,169,84,238,129,30,142,214,155,138,239,44,125,236,99,91,249,174,67,93,215,84, + 144,175,101,177,116,233,210,17,44,203,246,69,185,18,14,229,198,189,85,250,193,88,222,193,40,61,84,235,101,23,254,42,85,232,104,17,239,126,141,108, + 45,109,46,238,216,176,216,108,239,109,130,228,132,151,184,126,108,115,174,134,85,117,44,83,169,189,141,65,119,35,164,137,147,157,5,178,110,22,33,47, + 227,21,64,113,183,38,198,255,105,167,237,197,31,55,45,54,15,191,199,65,210,171,88,92,58,188,41,87,173,150,119,162,47,255,87,109,254,48,129,160, + 111,125,95,151,31,6,247,104,99,105,78,84,80,199,71,97,231,200,129,136,236,173,68,235,65,230,104,222,83,10,239,198,162,129,167,118,100,117,114,10, + 33,159,232,27,221,42,231,100,53,241,244,244,236,119,243,230,77,27,150,101,69,151,46,93,42,222,190,125,251,235,162,162,162,179,148,210,251,250,218,90, + 206,201,106,50,119,220,200,171,203,191,219,41,122,28,121,27,171,246,28,71,145,74,161,57,147,88,48,160,236,178,98,69,146,203,229,231,55,109,218,228, + 254,197,23,95,8,179,178,178,144,145,145,129,236,236,108,228,228,228,32,43,43,11,5,5,5,112,112,112,192,153,51,103,20,121,121,121,55,171,226,105, + 117,253,250,117,79,15,15,143,0,148,236,36,4,222,221,93,88,86,183,83,82,82,154,161,130,93,135,186,36,149,74,193,231,243,161,84,42,223,68,180, + 132,66,33,204,205,205,145,153,153,137,3,7,14,0,64,86,101,12,62,95,144,194,225,16,87,19,177,88,46,18,137,88,71,71,199,119,198,24,202,44, + 85,98,143,30,61,92,150,46,93,42,10,10,10,122,115,82,27,209,170,14,147,82,90,216,181,107,87,241,198,141,27,225,238,238,14,133,66,241,150,67, + 197,225,112,192,231,243,145,144,144,128,101,203,150,129,82,90,227,63,104,12,85,89,167,165,172,51,84,154,67,245,142,35,164,111,196,168,170,165,65,67, + 119,34,150,117,220,132,66,33,114,114,114,76,8,33,67,117,149,120,48,36,162,165,117,180,158,60,121,130,221,187,119,163,103,207,158,176,180,180,68,118, + 118,54,14,30,60,136,168,168,40,8,4,2,16,66,12,137,106,177,193,193,193,223,92,185,114,165,119,104,104,104,189,153,51,103,154,4,6,6,226,217, + 179,103,88,186,116,105,113,100,100,100,76,81,81,209,82,232,83,216,180,180,226,187,182,24,169,94,187,14,203,93,83,94,21,148,119,232,161,115,240,219, + 165,31,222,42,239,96,148,81,255,37,85,28,209,98,57,155,118,110,92,98,182,231,22,7,9,241,49,184,115,106,107,121,39,171,74,17,66,58,151,173, + 181,33,50,145,4,178,164,100,59,115,94,70,2,64,25,131,29,161,242,76,176,156,77,63,108,92,108,190,239,14,65,114,194,11,92,139,216,82,226,100, + 189,8,215,155,93,150,57,92,32,88,200,227,114,190,248,160,109,19,126,72,99,63,136,95,199,34,53,49,25,7,158,164,103,197,100,203,63,185,70,148, + 136,127,33,223,217,115,172,149,149,165,3,15,189,38,88,91,221,60,158,119,212,185,35,71,73,149,116,69,242,85,186,88,167,157,239,222,211,65,42,149, + 134,222,185,115,199,76,36,18,153,220,185,115,135,221,190,125,123,102,81,81,209,41,74,233,13,189,230,254,238,227,46,205,124,189,46,47,223,178,67,84, + 32,43,132,76,161,132,208,222,81,115,228,198,163,126,180,130,2,152,229,153,66,161,112,223,190,125,251,122,182,109,219,214,61,48,48,144,163,117,174,180, + 201,213,182,182,182,120,242,228,9,27,27,27,155,44,20,10,247,235,107,103,171,86,173,98,57,28,206,211,210,101,180,167,40,183,187,176,204,80,191,148, + 148,148,102,142,142,142,151,1,136,181,187,14,81,210,41,254,60,240,86,121,135,249,0,56,132,144,219,247,239,223,47,232,222,189,59,76,76,76,32,147, + 201,224,230,230,6,181,90,141,83,167,78,33,50,50,82,198,178,236,101,0,111,57,175,229,237,44,42,42,116,35,132,112,138,10,11,27,141,24,49,162, + 221,140,25,51,222,218,146,110,103,103,7,43,43,43,131,152,0,144,149,149,85,247,244,233,211,159,221,191,127,255,243,158,61,123,154,207,159,63,95,232, + 233,233,9,141,70,195,169,46,51,59,59,219,252,238,221,187,171,219,180,105,51,185,123,247,238,220,229,203,151,195,220,220,28,26,141,6,38,38,38,200, + 203,203,195,210,165,75,113,245,234,85,53,165,116,75,110,110,238,204,170,152,53,85,121,102,69,17,160,138,28,33,93,227,255,10,59,203,57,110,176,176, + 176,152,3,96,142,174,18,15,250,50,129,63,35,90,12,195,32,46,46,14,219,183,111,127,167,142,150,182,252,131,46,118,5,115,167,151,46,93,210,16, + 66,90,222,185,115,103,206,240,225,195,63,145,201,100,46,18,137,36,89,165,82,253,84,84,84,164,173,163,197,215,215,78,160,164,24,169,174,93,135,229, + 199,0,22,239,156,47,203,44,87,222,225,173,18,14,229,46,123,171,244,67,249,242,14,127,197,235,110,100,254,243,152,255,85,233,116,180,72,208,120,30, + 79,32,105,112,37,134,84,219,201,210,37,121,113,97,204,194,125,175,26,43,228,197,144,229,166,61,163,177,251,13,10,235,87,100,231,111,49,4,113,177, + 47,112,235,196,150,18,59,95,132,87,219,78,2,204,221,122,42,156,79,204,173,240,224,179,81,72,206,145,225,151,151,217,7,105,161,124,82,88,105,175, + 64,151,150,228,202,15,95,164,110,13,249,216,124,160,141,51,15,107,103,253,4,209,92,107,126,243,78,109,245,238,129,72,41,77,181,183,183,191,178,97, + 195,134,206,33,33,33,194,1,3,6,188,147,32,111,168,40,165,137,132,144,239,78,110,91,51,203,186,65,11,108,254,114,182,102,223,141,71,111,237,66, + 172,74,1,1,1,154,235,215,175,207,24,63,126,252,218,206,157,59,59,245,233,211,71,224,230,230,6,161,80,136,23,47,94,224,202,149,43,138,151,47, + 95,38,23,22,22,206,104,216,176,161,33,53,206,178,23,46,92,248,77,233,61,72,233,114,97,83,148,238,46,212,14,42,45,90,218,20,128,120,241,226, + 197,195,1,64,215,182,239,210,242,14,219,80,210,235,48,53,44,44,172,101,68,68,68,203,233,211,167,243,123,246,236,137,155,55,111,226,220,185,115,74, + 165,82,121,3,192,13,170,103,91,155,210,250,67,119,9,33,143,86,173,90,213,146,97,152,55,21,239,31,63,126,140,93,187,118,85,135,169,6,176,154, + 16,242,93,88,88,216,194,243,231,207,143,30,49,98,132,153,74,165,194,147,39,79,240,227,143,63,86,151,249,153,173,173,237,130,83,167,78,253,116,246, + 236,217,15,135,13,27,198,153,58,117,42,54,109,218,132,255,253,239,127,172,70,163,137,224,241,120,35,210,211,211,107,212,71,177,186,42,141,0,37,163, + 164,226,187,190,61,15,171,228,214,100,105,80,79,187,245,110,1,84,145,180,243,104,223,190,253,155,40,35,165,244,173,188,58,173,131,101,232,210,33,0, + 139,210,247,233,22,148,244,23,45,91,21,158,193,159,149,227,245,37,214,75,145,91,60,134,28,79,42,111,42,109,1,80,232,14,101,253,169,156,133,11, + 23,174,91,180,104,209,186,242,37,28,202,14,42,95,250,97,201,146,37,58,63,231,70,25,245,95,144,78,71,139,70,110,87,17,175,254,243,55,44,159, + 189,72,173,82,228,82,40,251,211,152,255,233,189,148,85,145,40,75,231,94,216,187,120,19,40,178,169,70,173,87,61,154,74,121,239,201,78,98,110,133, + 252,165,19,241,191,63,146,105,170,76,245,81,152,66,241,86,52,168,52,39,107,144,83,8,57,96,233,196,59,242,89,71,107,114,50,107,184,193,247,73, + 75,75,59,38,149,74,57,107,214,172,105,87,88,88,248,86,130,124,117,69,41,157,77,8,97,154,251,184,127,122,235,121,124,95,125,150,11,203,171,85, + 171,86,41,81,81,81,67,206,158,61,27,250,219,111,191,117,150,201,100,238,132,16,136,197,226,120,185,92,126,94,40,20,238,51,208,201,2,0,44,90, + 180,136,46,89,178,132,68,69,69,81,134,97,126,5,16,203,48,76,92,217,36,248,178,231,181,215,44,94,188,184,162,185,150,253,65,252,141,16,18,185, + 116,233,210,182,75,151,46,109,132,146,168,208,111,213,93,50,43,117,120,126,51,49,17,39,19,66,92,248,2,161,236,250,245,235,231,107,200,44,68,73, + 164,100,237,218,181,107,191,150,72,36,205,30,63,126,252,107,77,152,165,78,84,63,107,107,107,167,221,187,119,135,255,240,195,15,45,184,92,238,77,66, + 200,128,156,156,156,191,187,169,244,120,232,215,227,176,236,127,171,84,109,23,41,125,31,142,155,70,163,41,88,176,96,193,27,150,118,110,229,163,87,218, + 127,43,149,74,189,146,243,12,220,69,89,133,227,66,10,0,160,164,119,97,73,91,29,125,155,74,3,168,176,119,166,246,115,206,225,112,34,0,60,227, + 112,56,207,203,111,116,41,251,216,146,37,75,42,253,156,27,101,212,191,93,21,46,29,210,23,135,54,1,216,68,200,18,14,165,139,106,37,147,150,198, + 134,159,71,73,18,116,173,169,182,237,164,192,183,99,155,183,159,133,146,191,10,215,150,119,178,202,42,249,10,141,112,108,77,86,52,239,212,118,58,74, + 46,88,110,232,253,116,37,200,215,84,186,18,228,13,85,64,64,128,6,64,24,128,176,242,77,165,171,105,19,37,37,191,48,90,198,209,132,132,4,39, + 141,70,147,82,238,47,217,183,206,47,94,188,88,123,173,62,247,40,4,240,11,33,228,44,165,180,122,29,5,202,169,168,168,208,21,0,8,33,76,109, + 49,41,165,175,1,124,82,155,204,204,204,204,100,0,173,188,189,189,5,49,49,49,127,253,22,195,10,84,27,209,161,247,173,218,118,220,0,64,169,84, + 214,173,109,38,165,244,89,213,163,12,2,254,216,181,77,61,6,101,107,7,85,213,84,26,0,64,10,64,241,99,5,54,150,253,156,239,126,241,226,133, + 59,203,178,241,58,162,85,111,61,166,253,156,215,120,78,70,25,245,15,84,149,117,180,106,203,201,122,223,170,45,59,127,86,40,22,1,88,84,229,192, + 82,165,92,163,95,0,248,162,38,247,172,77,39,171,12,211,96,39,43,60,188,154,237,142,244,84,185,47,210,60,0,121,58,190,91,43,58,111,200,125, + 106,125,30,255,22,230,63,201,201,50,234,159,45,154,253,56,1,192,151,85,142,171,186,26,252,219,227,255,252,240,102,3,200,174,224,179,92,217,99,70, + 25,245,159,146,65,201,1,70,25,101,148,81,70,25,101,148,81,70,233,47,2,160,179,174,7,12,217,77,64,8,209,201,168,76,85,241,141,76,35,211, + 200,52,50,141,76,35,211,200,252,239,49,171,98,151,223,189,76,107,169,61,215,223,38,237,78,152,247,113,160,100,75,190,145,105,100,26,153,70,166,145, + 105,100,26,153,70,102,117,238,51,238,175,184,207,251,60,140,75,135,70,25,101,148,81,70,25,245,47,82,23,63,226,216,195,155,56,215,22,175,135,55, + 113,174,77,114,156,189,32,0,0,32,0,73,68,65,84,158,81,111,75,175,166,210,70,253,243,68,8,241,1,48,31,64,217,94,100,183,40,165,43,202, + 141,219,11,160,108,67,66,25,128,165,148,210,231,134,220,143,97,152,21,109,219,182,157,116,245,234,213,53,42,149,106,105,53,236,117,119,116,116,252,134, + 16,18,4,128,71,8,121,145,150,150,182,66,165,82,85,187,224,29,33,164,142,131,131,195,74,0,141,57,28,14,143,16,18,147,150,150,182,76,165,82, + 149,111,247,97,8,83,106,111,111,223,154,82,234,0,128,225,241,120,153,73,73,73,191,211,106,238,158,27,176,36,138,159,39,83,243,0,192,76,194,85, + 133,47,10,80,234,123,174,186,115,48,202,40,163,254,35,34,132,41,127,170,155,23,190,38,20,51,53,0,233,86,135,108,60,19,139,153,186,46,5,0, + 232,218,112,83,142,217,205,11,95,83,90,194,232,230,77,86,159,121,81,197,230,46,61,152,90,125,15,112,198,233,211,224,252,61,108,12,250,39,169,82, + 71,107,176,31,113,212,112,193,13,127,76,19,128,146,31,33,0,141,0,248,0,120,14,224,62,165,52,191,38,6,252,83,153,127,197,220,107,168,133,148, + 210,33,101,79,232,42,129,208,177,99,199,62,103,207,158,21,107,219,179,176,44,11,19,19,19,53,128,145,250,222,136,16,98,23,26,26,58,119,231,206, + 157,24,56,112,224,2,66,200,58,74,105,129,190,215,91,89,89,245,175,83,167,206,166,29,59,118,216,182,104,209,146,8,4,2,188,120,17,227,50,126, + 252,248,64,123,123,251,136,180,180,180,79,244,101,105,101,109,109,61,212,203,203,107,237,246,237,219,109,218,180,105,3,66,8,34,35,35,93,62,251,236, + 179,70,14,14,14,251,83,83,83,39,27,202,180,177,177,241,245,242,242,234,176,121,243,102,147,214,173,91,67,36,18,225,254,253,251,166,19,38,76,112, + 112,112,112,120,146,154,154,122,217,16,222,128,37,81,252,135,145,199,63,84,43,229,171,0,128,203,23,206,110,185,46,239,120,86,228,111,189,171,58,55, + 96,9,142,26,157,45,163,140,50,170,172,134,58,193,129,82,204,58,251,227,151,28,0,232,58,250,171,169,67,157,176,102,79,50,42,236,97,107,32,111, + 230,8,103,108,218,157,132,180,154,216,249,61,192,249,140,203,157,218,60,56,216,102,202,181,107,49,74,224,167,154,240,254,237,170,208,209,234,95,143,44, + 5,23,243,1,144,30,62,100,255,185,88,230,74,151,46,93,188,199,140,25,67,154,52,105,130,200,200,72,223,253,251,247,127,192,229,114,99,52,26,77, + 36,128,63,168,158,85,173,9,33,60,0,245,25,134,9,250,39,50,223,231,220,107,81,18,0,32,132,164,1,208,22,58,125,167,224,233,133,11,23,142, + 113,185,92,109,68,171,185,76,38,179,199,219,81,48,125,228,161,82,169,240,244,233,83,112,56,28,30,0,79,188,219,82,67,167,8,33,46,46,46,46, + 91,111,220,138,180,38,92,19,100,23,3,40,86,66,96,106,143,157,187,194,172,102,76,155,220,207,204,204,236,74,94,94,222,207,250,26,67,8,241,116, + 115,115,91,247,224,193,3,107,177,88,12,150,101,145,159,159,15,7,7,7,236,216,177,195,98,198,140,25,67,76,76,76,46,21,21,21,253,207,0,166, + 212,203,203,171,195,163,71,143,76,180,13,165,21,10,5,92,92,92,176,119,239,94,225,212,169,83,235,10,133,194,68,185,92,254,82,95,102,158,76,205, + 83,43,229,171,118,111,89,236,10,0,35,38,47,94,37,200,55,59,165,207,185,60,153,250,36,0,163,163,101,212,95,42,66,72,144,141,141,205,161,140, + 140,140,203,0,62,161,181,16,105,32,132,248,138,68,162,134,44,203,58,112,56,28,48,12,147,42,147,201,30,80,74,163,171,203,180,241,238,208,27,66, + 241,40,80,182,17,7,0,225,112,238,107,148,133,187,50,158,93,60,94,35,166,192,100,52,64,27,113,0,150,112,56,15,88,117,225,142,244,168,139,6, + 23,125,126,95,186,153,11,63,47,7,253,27,99,214,6,111,112,29,56,114,88,112,246,198,65,239,50,68,159,2,61,167,77,155,230,48,121,210,36,50, + 106,228,72,159,203,87,175,146,118,134,116,43,248,143,73,167,163,53,160,30,177,4,48,103,255,166,249,28,46,195,144,208,105,43,134,252,176,101,53,167, + 75,239,1,111,150,79,66,66,66,16,18,18,66,86,173,90,229,243,235,175,191,250,236,221,187,87,77,8,121,64,41,61,80,209,205,186,123,147,34,22, + 16,125,224,207,149,133,126,249,243,246,224,224,96,8,133,66,212,132,9,0,93,125,152,151,61,131,189,31,132,126,186,48,190,69,139,86,180,38,76,237, + 220,247,109,156,207,240,184,12,66,167,173,24,114,249,204,209,162,58,117,155,228,87,151,249,158,117,139,82,218,23,0,8,33,150,110,110,110,173,213,106, + 181,8,0,184,92,110,49,128,79,105,105,235,32,66,72,4,203,178,125,244,5,19,66,56,0,22,245,233,211,103,193,148,41,83,224,230,230,134,169,83, + 167,66,165,82,69,18,66,22,2,88,73,75,179,21,43,146,157,157,221,194,173,91,183,90,113,5,18,52,153,19,139,148,28,53,0,192,84,8,28,155, + 72,49,117,234,84,179,59,119,238,44,3,160,183,163,101,103,103,183,116,199,142,29,86,98,177,24,148,210,55,189,24,11,10,10,80,80,80,128,201,147, + 39,155,61,121,242,228,27,0,122,59,90,246,246,246,173,55,111,222,108,34,18,137,80,80,80,192,87,42,149,36,63,63,31,133,133,133,84,161,80,40, + 63,253,244,83,225,31,127,252,209,30,128,222,142,150,81,239,87,164,100,185,226,35,30,143,247,177,183,183,119,211,231,207,159,223,83,171,213,135,1,28, + 174,233,31,62,132,144,78,78,78,78,95,39,39,39,111,166,148,134,213,142,197,255,124,217,219,219,31,190,126,253,186,235,214,173,91,71,174,89,179,230, + 20,12,248,12,149,23,33,132,207,231,243,251,117,233,210,197,117,196,136,17,2,123,123,123,200,229,114,196,198,198,154,29,60,120,208,93,34,145,36,150, + 118,196,208,251,15,10,27,191,214,166,224,154,237,111,217,161,115,155,129,253,62,146,218,91,155,163,72,161,193,243,248,20,183,211,167,142,181,115,10,252, + 224,186,82,153,59,56,227,217,53,189,35,238,90,102,135,238,189,218,116,238,212,73,106,110,97,142,92,153,18,47,226,146,220,47,158,59,30,226,24,248, + 193,111,44,81,13,75,123,120,246,47,111,204,94,86,83,1,174,76,100,221,176,81,171,38,119,186,142,89,214,148,82,10,14,197,198,242,209,172,169,0, + 119,35,160,54,148,7,74,41,33,88,93,54,154,245,102,89,145,3,210,205,19,149,47,83,150,170,43,32,180,176,178,10,158,48,110,28,201,207,203,195, + 253,251,247,11,219,149,115,178,214,57,131,255,27,7,30,17,9,168,182,179,253,111,146,222,201,240,98,177,88,231,121,115,115,115,116,232,208,1,43,86, + 172,224,2,8,42,251,24,45,223,100,21,16,158,216,54,15,230,18,33,199,205,205,77,106,102,102,86,99,102,201,73,214,179,149,27,237,113,251,231,249, + 35,207,239,93,91,95,150,159,195,43,63,196,212,212,20,126,126,126,88,176,96,129,94,204,178,46,254,237,179,7,124,107,131,89,83,85,198,116,116,116, + 244,15,9,9,9,186,112,249,178,69,114,114,178,48,57,57,89,120,246,194,5,139,150,45,91,6,57,58,58,250,151,97,232,205,4,240,213,150,45,91, + 22,70,68,68,112,66,66,66,96,105,105,137,14,29,58,224,212,169,83,220,53,107,214,44,7,176,160,42,59,57,28,78,155,144,144,16,2,74,145,154, + 171,198,239,43,252,113,127,117,0,242,139,41,178,114,243,80,84,84,12,177,88,44,42,93,154,213,119,238,173,90,182,108,73,0,188,113,174,242,243,75, + 142,130,2,25,20,10,37,132,66,161,148,16,34,210,151,73,41,117,104,221,186,53,0,64,169,84,190,121,249,115,114,114,72,110,110,46,20,10,5,120, + 60,30,159,16,82,233,114,123,89,166,153,132,171,226,242,133,179,71,76,94,156,48,98,242,226,4,46,95,56,91,33,205,211,232,115,206,76,194,85,233, + 98,214,150,170,98,18,66,108,25,134,249,209,219,219,251,9,195,48,187,9,33,14,53,97,18,66,154,17,66,150,139,197,226,243,117,235,214,77,144,72, + 36,23,8,33,43,9,33,45,171,195,36,132,8,196,98,241,133,229,203,151,135,223,187,119,111,224,175,191,254,234,249,240,225,195,126,171,86,173,218,111, + 106,106,122,133,16,162,251,11,171,10,59,181,242,244,244,252,225,247,223,127,111,214,170,85,171,157,132,16,97,85,227,245,97,18,66,24,66,72,99,162, + 103,175,161,191,250,117,39,132,56,53,105,210,196,85,36,18,161,115,231,206,0,208,190,38,76,62,159,223,111,193,130,5,94,95,126,249,165,32,37,37, + 5,23,46,92,192,173,91,183,160,86,171,49,113,226,68,225,136,17,35,234,72,165,210,126,6,217,201,53,219,63,237,179,233,221,103,77,29,43,125,240, + 74,137,93,231,95,225,232,141,20,188,46,20,160,119,191,17,230,221,250,14,234,38,16,154,235,108,118,95,25,115,238,156,57,221,199,141,30,34,125,156, + 194,226,216,205,84,220,124,154,11,53,207,2,61,251,125,98,217,168,117,247,15,184,224,253,100,16,179,6,170,136,185,3,104,49,109,218,52,219,217,171, + 247,92,115,106,246,209,198,244,108,132,148,117,124,124,1,11,43,137,228,163,167,237,218,141,53,41,233,23,91,41,243,45,94,80,223,77,175,179,209,182, + 108,126,86,91,43,248,148,46,43,50,103,127,252,146,67,9,166,14,117,130,67,101,76,0,184,4,12,156,54,125,58,207,220,210,18,91,182,108,129,92, + 38,123,43,103,182,147,43,186,159,23,115,19,235,4,184,60,233,224,78,174,232,255,204,252,123,245,230,71,227,228,201,147,244,131,15,62,32,0,16,254, + 152,102,247,175,71,190,25,52,101,249,2,194,33,212,163,126,171,199,206,94,245,100,214,214,214,40,44,44,132,92,46,7,159,207,71,113,113,49,94,189, + 122,133,155,55,111,194,210,210,210,160,27,231,229,229,193,212,212,20,166,166,166,181,194,156,55,178,179,240,69,66,186,240,204,205,75,237,54,76,250,95, + 11,175,198,237,31,118,26,52,245,145,153,173,83,241,195,135,15,113,253,250,117,100,103,103,35,56,56,184,82,142,118,238,131,63,93,254,37,225,16,4, + 53,12,40,86,101,61,243,95,51,185,115,61,191,38,237,31,119,26,48,229,177,161,204,247,164,91,165,223,215,183,8,33,150,33,33,33,46,103,206,255, + 102,89,80,204,154,197,165,169,120,44,203,66,44,118,84,31,56,116,44,119,96,191,222,132,16,242,26,192,173,82,231,182,210,158,138,165,14,138,127,255, + 254,253,231,78,154,52,9,49,49,49,24,59,118,108,209,173,91,183,50,91,181,106,101,189,99,199,14,147,25,51,102,224,242,229,203,139,8,33,71,0, + 196,82,74,117,246,106,163,148,242,249,124,62,212,165,110,131,82,195,66,235,223,231,229,229,129,22,101,131,207,231,51,0,108,1,232,149,243,198,178,44, + 159,199,227,189,113,178,94,165,229,225,213,235,66,228,21,40,80,84,164,134,162,136,130,17,91,115,129,56,123,0,113,250,48,1,48,34,145,8,106,181, + 26,249,249,37,102,104,35,101,10,133,2,185,185,185,96,24,198,20,128,25,128,44,125,128,37,73,238,56,90,186,12,136,219,123,250,216,60,63,57,79, + 217,127,241,147,55,231,204,36,92,213,161,25,117,25,107,151,70,87,27,15,252,41,64,123,238,239,204,207,34,132,8,109,109,109,47,134,135,135,215,245, + 241,241,65,108,108,108,192,128,1,3,130,9,33,141,169,129,61,25,9,33,98,14,135,243,205,168,81,163,38,133,134,134,18,95,95,95,112,185,92,168, + 213,106,151,152,152,152,14,7,15,30,156,195,229,114,119,104,52,154,207,245,205,251,35,132,112,4,2,193,129,237,219,183,183,13,14,14,198,238,221,187, + 113,235,214,45,182,89,179,102,156,225,195,135,195,221,221,61,120,248,240,225,71,9,33,61,171,19,217,34,132,184,15,29,58,212,149,97,24,180,106,213, + 138,127,253,250,245,38,0,174,27,202,41,199,52,117,113,113,185,220,190,125,251,198,231,207,159,191,75,8,105,111,72,158,35,33,164,175,147,147,211,42, + 115,115,115,189,191,20,243,242,242,10,147,146,146,102,82,74,15,233,121,73,139,160,160,32,196,199,199,195,223,223,31,124,62,191,37,33,100,60,128,238, + 0,190,160,148,62,49,192,94,223,30,61,122,184,182,111,223,158,28,58,116,232,77,126,40,135,195,129,90,173,6,159,207,71,139,22,45,56,145,145,145, + 206,132,16,95,125,150,17,109,188,59,244,110,213,169,123,155,182,193,13,57,107,14,61,135,134,213,128,33,106,112,9,11,86,37,132,144,207,192,183,126, + 83,230,233,31,15,130,109,252,186,244,206,120,118,174,202,101,68,27,239,14,189,187,247,238,19,82,215,223,151,179,225,232,11,228,36,61,209,36,69,253, + 150,193,97,56,168,27,212,209,198,183,94,99,166,113,112,123,94,114,236,31,29,172,124,218,117,206,122,126,185,214,29,43,125,180,4,96,92,156,109,62, + 234,213,165,61,63,37,57,89,118,240,208,241,71,133,42,220,4,128,203,0,233,9,52,108,208,188,121,187,29,43,87,90,59,58,58,242,134,133,134,170, + 191,191,123,247,238,56,64,231,210,239,18,128,177,113,112,232,60,97,194,4,38,37,57,153,30,60,124,242,161,150,7,0,98,160,65,67,151,128,94,144, + 61,53,104,153,178,55,32,176,119,112,168,59,126,252,120,164,38,39,99,119,88,88,65,49,112,3,40,137,98,29,99,176,185,158,151,195,168,217,159,244, + 33,174,142,54,152,176,232,251,150,29,148,175,189,46,226,207,200,86,89,95,228,191,162,10,255,58,63,244,152,46,52,19,16,207,131,7,247,113,210,243, + 149,178,152,152,24,216,216,216,192,209,209,17,230,230,230,120,252,248,49,46,92,184,128,103,207,158,129,101,89,52,106,212,200,160,27,103,100,100,224,193, + 131,7,176,180,180,172,53,166,151,171,45,166,184,218,242,211,50,243,248,231,111,61,11,254,126,94,191,122,156,128,126,63,20,23,255,233,3,40,20,85, + 119,40,57,244,152,46,236,238,77,190,12,91,59,69,41,177,117,200,84,49,166,249,113,169,121,138,179,103,46,57,108,153,59,208,79,80,247,195,48,67, + 153,181,173,178,187,11,221,220,220,90,239,218,181,139,47,87,67,234,59,254,198,183,178,98,141,4,0,36,34,70,22,185,202,239,243,175,190,250,74,54, + 122,244,232,128,87,175,94,173,168,152,88,34,129,64,240,117,143,30,61,102,81,74,121,211,166,77,3,0,140,24,49,34,239,230,205,155,190,148,210,215, + 132,16,167,49,99,198,68,95,188,120,81,60,125,250,116,70,173,86,63,230,114,185,148,16,178,148,82,186,184,60,143,195,225,220,185,123,247,174,135,147, + 187,31,220,173,57,8,89,80,210,174,205,90,204,34,49,238,5,162,30,222,130,131,131,131,185,163,163,227,19,127,127,127,101,82,82,210,156,130,130,130, + 173,149,217,200,231,243,239,71,70,70,58,186,187,187,163,160,160,0,137,233,133,152,122,88,140,188,162,146,32,6,15,69,104,236,234,39,53,225,40,110, + 217,219,219,43,21,10,197,151,57,57,57,149,182,17,225,241,120,153,15,31,62,52,117,115,115,67,113,113,49,205,202,202,34,50,153,12,249,249,249,228, + 228,201,147,31,166,164,164,52,243,244,244,36,46,46,46,75,125,124,124,138,146,146,146,198,234,147,3,22,190,40,64,73,8,209,112,185,220,53,227,198, + 141,27,120,228,200,145,59,135,22,215,237,171,93,46,33,132,152,215,175,95,255,76,195,134,245,156,194,86,55,216,72,41,253,182,42,230,95,160,81,243, + 231,207,175,107,101,101,133,9,19,38,96,201,146,37,88,184,112,161,207,132,9,19,198,1,88,167,47,132,16,98,226,224,224,112,123,195,134,13,1,173, + 91,183,198,169,83,167,176,111,223,62,188,124,249,82,237,233,233,201,13,14,14,198,162,69,139,208,173,91,183,177,159,126,250,105,59,66,72,19,61,157, + 143,209,139,22,45,234,219,166,77,27,140,28,57,82,126,233,210,165,129,0,206,158,59,119,174,227,229,203,151,15,237,217,179,199,100,249,242,229,157,103, + 204,152,49,1,192,166,106,204,255,195,182,109,75,122,40,183,105,211,6,171,86,173,234,134,26,56,90,132,16,129,181,181,245,201,221,187,119,55,246,243, + 243,195,176,97,195,154,12,28,56,240,36,33,164,11,165,84,175,47,15,103,103,231,111,34,34,34,188,43,90,89,208,37,185,92,110,245,209,71,31,173, + 4,96,144,163,181,119,239,94,204,156,57,19,141,26,53,106,216,162,69,139,109,227,199,143,71,255,254,253,59,17,66,236,41,165,50,125,64,34,145,168, + 225,224,193,131,5,191,255,254,59,0,160,126,253,250,104,220,184,49,226,227,227,113,231,206,29,200,229,114,216,219,219,227,227,143,63,22,197,197,197,53, + 4,170,94,66,226,8,197,163,250,246,234,41,61,118,51,5,26,86,141,166,222,102,8,14,176,195,211,196,60,68,62,73,132,70,193,135,153,149,53,90, + 182,235,106,149,154,244,114,20,128,170,243,181,132,226,81,31,247,253,192,244,216,141,100,228,36,71,209,231,183,142,92,80,21,203,198,2,192,157,95,247, + 111,115,176,54,233,226,27,212,148,105,223,165,143,229,225,125,169,163,0,252,45,142,214,101,87,108,119,231,101,140,152,61,36,132,242,44,93,110,73,85, + 170,205,218,199,186,1,93,231,204,159,223,226,147,113,227,68,44,203,98,207,207,63,231,61,184,123,247,105,101,187,253,54,3,238,3,251,246,21,74,205, + 204,240,217,212,169,144,170,84,23,181,143,9,129,78,159,205,154,213,122,242,228,201,38,219,150,78,186,211,109,204,178,32,150,82,162,107,153,178,188,206, + 3,205,198,244,237,11,169,153,25,166,77,155,6,162,84,158,209,62,118,130,139,139,163,63,12,9,30,210,187,13,8,8,246,157,184,138,231,241,233,15, + 47,166,224,69,77,159,159,127,186,42,93,6,201,87,34,173,211,7,253,112,247,238,93,0,64,102,102,38,50,51,51,225,237,237,141,77,155,222,254,254, + 170,142,179,193,178,108,173,51,1,192,222,218,12,195,122,54,231,94,125,176,79,36,75,79,23,153,154,154,190,241,138,244,101,178,0,172,29,29,20,114, + 53,225,179,132,171,118,116,117,41,238,57,120,88,246,170,57,211,155,231,85,147,249,190,164,86,171,69,158,158,158,200,43,2,201,45,84,153,102,236,47, + 137,248,219,12,190,100,170,80,40,56,166,166,166,144,203,229,149,46,163,1,37,27,10,250,246,237,59,235,192,129,3,188,168,168,40,120,121,121,65,169, + 84,226,230,205,155,137,180,164,17,50,40,165,201,12,195,36,179,44,235,211,168,81,35,172,88,177,2,1,1,1,164,103,207,158,115,74,157,173,183,62, + 220,41,41,41,223,140,31,63,190,227,193,67,71,172,182,15,42,66,94,110,30,10,10,10,112,255,222,29,100,165,21,227,251,239,191,135,72,100,66,0, + 240,95,191,78,227,79,159,62,125,163,139,139,75,247,196,196,196,94,21,217,153,156,156,252,245,228,201,147,91,238,223,191,223,34,63,63,31,69,69,197, + 200,146,137,241,100,125,73,31,223,186,159,61,193,150,205,91,57,13,60,36,54,133,133,133,152,52,105,210,90,39,39,167,214,201,201,201,99,42,98,38, + 37,37,253,62,101,202,20,251,61,123,246,136,20,10,133,82,163,209,160,168,168,136,179,127,255,254,57,30,30,30,150,59,118,236,32,34,145,73,233,216, + 68,254,196,137,19,15,56,56,56,236,73,77,77,29,89,197,115,202,48,12,179,62,44,44,108,248,160,65,131,164,41,41,41,245,34,34,34,132,0,138, + 74,135,56,118,233,210,197,99,245,234,213,182,245,235,215,159,67,8,225,81,74,13,110,78,94,155,178,177,177,249,180,111,223,190,88,185,114,37,142,31, + 63,62,195,202,202,106,237,146,37,75,224,228,228,52,133,16,178,190,170,188,188,50,250,118,221,186,117,1,1,1,1,24,49,98,132,226,252,249,243,243, + 1,28,5,16,127,229,202,21,183,159,126,250,169,247,129,3,7,86,110,216,176,65,180,105,211,38,239,126,253,250,173,7,80,225,107,164,149,189,189,253, + 244,208,208,80,172,94,189,26,151,46,93,234,71,41,61,85,250,208,47,132,144,222,203,151,47,255,117,193,130,5,88,183,110,221,52,24,232,104,17,66, + 76,235,214,173,251,101,247,238,221,113,229,202,21,132,132,132,160,101,203,150,51,8,33,27,41,165,25,134,176,74,121,28,83,83,211,3,187,118,237,10, + 241,240,240,192,178,101,203,48,107,214,44,252,240,195,15,33,195,134,13,59,64,8,249,184,252,103,70,151,204,205,205,77,197,98,49,230,204,153,67,95, + 190,124,153,93,213,120,87,87,87,203,181,107,215,18,75,75,75,189,54,190,16,66,76,68,34,81,171,192,192,64,44,90,180,8,231,206,157,195,130,5, + 11,16,24,24,136,248,248,120,12,30,60,88,252,197,23,95,244,7,160,111,223,67,59,91,91,91,68,71,151,248,79,129,129,129,184,119,239,30,212,106, + 53,92,92,92,240,234,213,43,4,5,5,129,203,229,130,101,89,59,253,144,52,208,198,202,28,175,255,72,2,23,106,4,249,218,224,226,163,76,40,85, + 44,236,172,45,144,250,58,13,45,2,93,160,80,184,129,82,54,80,31,162,128,225,4,9,69,38,200,202,207,64,210,147,75,153,74,141,124,124,206,203, + 171,9,0,96,229,213,118,252,157,171,231,238,12,248,160,173,93,129,204,21,132,178,205,245,156,123,173,106,128,27,92,37,34,238,136,19,219,231,17,53, + 203,162,199,152,175,155,117,183,71,33,210,0,91,192,115,192,224,193,173,62,255,252,115,65,116,76,12,59,125,234,212,156,123,183,111,95,58,13,220,169, + 140,89,0,248,116,233,210,5,28,0,167,207,158,149,101,0,137,0,96,15,184,246,249,232,163,182,243,231,206,21,188,136,139,99,111,198,20,28,123,241, + 154,174,104,101,133,7,251,227,75,198,84,38,13,208,64,203,61,115,230,12,45,42,181,163,189,43,166,116,107,93,63,120,120,223,182,72,76,205,196,170, + 157,199,240,48,58,229,140,53,139,161,181,240,20,253,227,85,101,142,150,174,239,212,194,194,119,87,15,106,234,108,188,15,166,46,25,196,20,74,139,8, + 143,203,161,132,203,106,40,87,77,9,97,117,237,155,248,187,29,45,173,84,170,146,85,18,133,138,133,66,85,242,221,45,151,203,81,84,84,84,217,101, + 111,68,41,85,157,57,115,102,247,212,169,83,177,118,237,90,68,71,71,131,207,231,35,48,48,208,145,16,98,10,148,68,96,130,130,130,236,56,28,14, + 158,62,125,138,53,107,214,96,244,232,209,244,250,245,235,63,232,250,193,160,148,222,203,202,202,218,60,126,236,232,156,236,180,87,80,21,101,227,117,210, + 11,200,101,57,88,182,226,27,20,170,184,72,205,85,34,53,87,9,142,208,10,219,118,236,98,234,214,173,219,157,203,229,86,232,104,81,74,111,166,165, + 165,237,152,56,113,98,78,106,106,234,155,249,41,84,20,10,213,219,47,144,88,44,198,250,245,235,205,125,125,125,251,242,120,188,14,149,48,83,18,18, + 18,162,38,78,156,168,72,75,75,67,110,110,46,142,29,59,214,219,195,195,195,114,229,183,107,137,76,201,69,106,142,18,169,57,74,8,76,237,112,224, + 208,17,198,207,207,111,8,143,199,171,48,199,72,235,100,237,217,179,103,248,160,65,131,164,223,126,251,109,86,68,68,196,22,74,105,217,23,228,233,250, + 245,235,15,30,56,112,32,127,214,172,89,86,171,86,173,154,65,8,153,95,225,139,244,158,69,8,233,48,104,208,32,127,150,101,17,30,30,254,144,82, + 186,238,200,145,35,183,229,114,57,6,15,30,236,137,146,101,36,125,56,205,134,12,25,50,41,36,36,4,159,125,246,153,242,252,249,243,65,148,210,181, + 148,210,56,90,162,120,74,233,198,203,151,47,55,250,244,211,79,229,205,155,55,199,200,145,35,71,19,66,66,170,224,182,10,13,13,13,96,89,22,251, + 247,239,127,80,198,201,2,0,80,74,47,28,58,116,232,166,66,161,192,208,161,67,235,16,66,58,26,48,119,190,80,40,12,255,234,171,175,44,146,146, + 146,48,124,248,112,249,211,167,79,177,120,241,98,19,115,115,243,83,218,207,128,33,18,10,133,223,127,247,221,119,125,27,52,104,128,137,19,39,42,182, + 110,221,58,117,210,164,73,138,160,160,32,108,217,178,165,175,64,32,48,168,181,72,114,114,114,206,227,199,143,173,171,58,18,19,19,245,218,158,79,8, + 17,75,165,210,27,245,235,215,207,11,12,12,108,170,86,171,241,248,241,227,23,187,119,239,102,3,3,3,177,121,243,102,172,90,181,10,189,122,245,2, + 195,48,253,245,181,147,97,24,40,149,74,136,197,98,112,185,92,188,120,241,66,91,90,6,124,62,31,0,32,145,72,96,98,98,2,14,135,163,151,227, + 78,8,104,94,161,10,60,30,7,92,14,139,168,248,92,40,85,44,68,124,6,60,46,1,40,11,11,9,15,34,1,3,14,33,85,215,110,42,97,34, + 87,166,132,128,207,1,143,47,32,28,181,198,68,251,24,135,171,49,49,49,17,16,27,51,33,68,252,127,80,109,111,82,242,43,52,10,224,73,220,220, + 6,174,94,179,70,144,87,80,128,126,253,250,101,197,221,190,29,86,4,220,110,87,197,14,63,14,151,235,219,190,93,59,68,222,189,139,252,236,236,231, + 64,73,114,188,192,201,105,208,250,245,235,5,69,197,197,232,247,241,199,57,209,87,175,238,73,40,192,137,253,122,56,89,0,192,240,249,14,90,110,110, + 118,118,54,80,82,66,194,222,214,116,229,228,33,221,144,95,88,140,217,223,132,177,119,163,82,166,92,73,196,7,71,146,145,91,179,39,227,223,161,42, + 11,150,178,236,187,239,87,93,142,133,92,46,175,145,33,239,131,169,203,73,52,132,73,69,210,2,150,37,92,134,80,1,171,225,41,53,26,86,83,83, + 230,251,16,151,203,45,126,246,236,153,192,204,218,137,181,150,242,178,61,70,95,53,7,0,43,83,110,174,82,163,98,147,147,147,33,20,10,117,230,80, + 149,87,113,113,241,88,66,200,50,0,245,184,92,238,137,93,187,118,145,176,176,48,203,208,208,208,24,66,72,82,253,250,245,221,119,237,218,101,6,0, + 27,55,110,164,7,14,28,232,134,146,242,22,21,134,148,83,83,83,23,243,120,188,235,147,39,79,222,36,16,8,44,37,18,137,245,149,43,87,72,177, + 146,162,217,252,248,55,59,17,205,76,56,248,109,158,25,198,141,27,199,60,121,242,100,5,128,19,149,48,231,8,133,194,43,209,209,209,107,205,93,26, + 219,74,220,231,155,7,207,123,10,0,112,183,225,129,83,250,189,152,147,147,131,244,244,116,76,154,52,201,50,38,38,102,14,128,139,21,49,19,19,19, + 47,11,133,194,196,63,254,248,163,61,143,199,19,72,36,146,102,55,110,220,32,197,10,22,13,231,196,35,171,160,196,78,43,83,46,238,124,101,143,41, + 83,166,112,159,63,127,254,13,128,54,186,120,28,14,103,85,89,39,107,246,236,217,247,1,212,33,132,188,181,52,170,209,104,200,208,161,67,31,1,8, + 156,53,107,150,21,165,116,6,33,36,139,82,186,189,34,91,223,151,204,204,204,86,142,31,63,30,7,14,28,64,118,118,246,122,0,200,203,203,91,183, + 119,239,222,253,99,199,142,197,207,63,255,188,146,16,114,90,143,168,86,143,193,131,7,227,151,95,126,193,175,191,254,250,37,165,244,177,174,65,148,210, + 104,66,200,156,136,136,136,13,161,161,161,248,241,199,31,187,3,168,44,65,182,75,183,110,221,112,234,212,41,100,102,102,110,209,53,32,39,39,103,235, + 177,99,199,90,116,235,214,13,43,86,172,232,2,224,66,85,243,38,132,4,152,155,155,239,218,176,97,67,179,6,13,26,96,200,144,33,197,74,165,178, + 251,172,89,179,142,239,219,183,79,186,123,247,238,166,227,198,141,251,157,16,242,9,165,244,102,85,60,0,96,24,102,249,166,77,155,198,180,111,223,30, + 51,102,204,80,159,57,115,166,15,165,244,44,33,36,102,246,236,217,39,215,172,89,195,172,94,189,122,12,195,48,233,26,141,230,239,114,174,191,218,184, + 113,99,139,174,93,187,226,197,139,23,184,121,243,38,148,74,229,207,55,110,220,248,205,199,199,231,43,133,66,113,92,34,145,12,151,74,165,129,141,27, + 55,238,72,8,17,235,153,167,151,22,27,27,107,97,110,110,14,181,90,141,135,15,31,194,205,205,13,74,165,18,47,95,190,68,131,6,13,192,231,243, + 145,150,150,6,0,175,245,49,148,16,206,195,152,184,228,58,86,82,9,160,17,225,222,211,68,216,218,88,66,67,56,72,77,77,65,99,127,23,16,66, + 144,147,153,10,66,200,35,125,152,26,202,70,190,74,126,237,108,45,21,162,65,139,174,214,55,78,167,135,153,123,181,25,199,101,8,35,20,153,109,31, + 51,114,164,13,203,82,228,100,166,129,203,225,84,154,219,250,190,20,254,10,9,237,188,68,247,186,142,89,214,152,80,208,34,37,118,255,152,134,108,49, + 208,120,227,23,95,88,88,219,216,96,200,144,33,108,102,82,210,249,66,64,175,194,202,117,124,124,236,77,165,82,92,187,118,13,12,16,11,0,63,0, + 1,171,102,207,182,182,115,112,192,232,49,99,216,180,87,175,46,20,1,201,134,216,90,199,203,139,167,229,114,74,185,41,12,166,206,234,19,34,148,152, + 8,177,124,219,17,36,100,200,246,223,72,193,54,195,159,137,127,175,222,184,233,21,37,159,149,36,85,191,157,23,80,222,177,16,137,68,111,162,41,250, + 170,108,9,134,218,98,86,37,67,153,44,223,50,87,35,144,230,107,24,190,154,114,56,84,5,174,178,252,175,203,251,176,83,31,17,66,230,17,66,34, + 8,33,243,18,18,18,162,198,140,25,163,84,43,229,249,215,151,213,153,123,119,133,199,196,27,139,29,39,30,157,106,62,183,48,55,43,127,227,198,141, + 170,132,132,132,168,178,215,84,198,166,148,190,162,148,158,250,233,167,159,182,134,135,135,35,48,48,16,143,31,63,182,147,201,100,77,30,61,122,100,21, + 16,16,128,176,176,48,28,56,112,96,45,165,244,92,101,78,150,86,42,149,234,124,74,74,138,95,124,124,188,183,133,133,133,202,194,194,2,229,119,34, + 230,21,177,200,204,201,133,149,149,53,204,204,204,60,171,98,202,229,242,83,41,41,41,190,172,165,127,91,223,140,245,185,145,203,93,17,185,220,21,167, + 230,56,193,209,66,128,236,236,108,164,167,167,35,61,61,29,132,16,168,84,170,186,122,48,95,38,39,39,239,124,245,234,85,132,189,189,61,164,82,41, + 40,128,212,28,21,238,175,14,192,253,213,1,72,205,81,33,47,63,31,30,30,30,144,74,165,58,151,40,8,33,28,103,103,231,158,131,6,13,146,2, + 64,169,3,213,137,82,58,81,199,49,65,173,86,183,214,142,157,57,115,166,21,128,110,85,217,90,155,42,221,17,55,121,236,216,177,77,69,34,17,54, + 111,222,252,18,192,158,210,135,195,183,110,221,250,20,0,166,78,157,90,31,192,12,82,65,37,104,173,248,124,126,80,221,186,117,113,227,198,13,0,56, + 82,197,237,15,93,191,126,29,62,62,62,16,137,68,205,170,24,235,233,234,234,138,167,79,159,2,192,189,10,198,220,123,250,244,41,92,93,93,65,8, + 169,242,125,68,8,233,219,181,107,215,135,23,47,94,108,214,170,85,43,140,25,51,70,241,251,239,191,247,164,148,254,118,239,222,189,14,67,135,14,149, + 249,250,250,226,242,229,203,1,67,135,14,189,206,48,204,50,61,152,163,151,46,93,58,239,195,15,63,196,210,165,75,233,193,131,7,135,80,74,207,2, + 0,165,244,204,254,253,251,135,127,253,245,215,244,227,143,63,198,146,37,75,230,17,66,38,86,198,147,201,100,185,26,141,6,50,153,76,175,240,185,190, + 227,109,108,108,122,116,237,218,21,11,22,44,128,179,179,51,142,31,63,78,1,156,160,148,94,145,203,229,109,41,165,107,100,50,89,196,141,27,55,208, + 165,75,23,62,128,15,244,188,255,195,189,123,247,202,205,205,205,225,238,238,142,58,117,234,32,53,53,21,113,113,113,104,208,160,1,130,130,130,160,86, + 171,177,115,231,206,226,252,252,124,189,106,242,169,21,178,221,231,78,30,206,181,150,10,225,98,103,14,15,103,43,20,228,100,32,61,53,25,65,117,221, + 208,46,200,3,25,185,10,156,57,113,56,59,63,191,112,183,62,76,149,188,112,215,249,211,199,115,45,165,124,248,249,215,199,208,49,83,27,55,110,18, + 124,174,121,243,214,103,190,93,185,188,97,167,150,117,73,98,70,49,126,57,113,36,59,55,47,79,223,101,211,90,213,18,128,41,54,247,253,109,75,68, + 228,206,122,221,199,238,140,74,196,122,0,80,49,76,64,207,30,61,144,152,152,136,195,225,225,41,133,192,3,125,121,38,38,38,28,0,200,205,205,133, + 176,164,91,8,212,128,255,7,31,124,128,244,140,12,236,221,179,39,253,23,224,174,33,118,246,6,4,98,147,146,128,96,110,110,46,8,144,7,0,132, + 139,158,205,3,125,144,158,149,135,139,183,162,10,60,138,48,169,50,206,127,45,17,30,168,122,233,48,99,198,140,25,16,10,133,112,116,116,124,227,28, + 105,29,11,129,64,0,71,71,71,168,213,106,236,223,191,31,0,42,205,97,224,0,242,62,19,87,176,114,21,45,228,241,120,181,194,4,0,14,135,35, + 239,55,251,71,246,244,117,221,155,98,170,197,36,164,104,192,7,3,27,156,62,125,69,196,21,89,231,113,5,124,162,80,19,165,54,76,86,29,102,45, + 171,121,105,77,172,230,148,210,236,184,184,184,196,129,253,250,228,198,199,252,145,42,203,73,78,201,203,76,72,73,120,249,40,117,254,156,25,185,137,137, + 137,9,165,181,180,154,39,39,39,247,1,160,111,174,193,140,129,3,7,126,55,118,236,88,122,255,254,125,0,64,100,100,36,70,142,28,73,135,15,31, + 190,30,192,220,106,216,45,43,42,42,122,203,95,85,106,216,55,75,126,121,121,121,72,78,78,134,66,161,208,219,123,141,62,179,250,89,86,220,29,85, + 125,119,9,234,187,75,16,224,42,6,81,23,188,113,178,210,211,211,181,127,57,235,21,213,43,85,158,92,46,127,203,206,178,75,147,121,121,121,72,77, + 77,133,70,163,209,249,67,70,41,101,147,146,146,206,28,56,112,32,31,0,190,253,246,219,44,66,200,175,132,144,239,116,28,219,184,92,238,53,237,216, + 213,171,87,103,1,56,165,139,251,62,68,8,249,176,65,131,6,217,243,230,205,219,60,109,218,52,108,219,182,13,41,41,41,115,41,165,106,237,92,50, + 50,50,102,111,217,178,5,163,70,141,194,194,133,11,87,55,105,210,36,143,16,82,97,126,133,173,173,173,11,151,203,197,221,187,119,243,40,165,149,38, + 187,82,74,83,239,222,189,155,70,8,129,163,163,163,87,101,99,173,172,172,188,165,82,41,146,146,146,128,210,191,152,117,40,46,57,57,153,10,4,2, + 56,57,57,249,84,49,125,88,90,90,206,222,185,115,39,247,143,63,254,64,167,78,157,18,47,95,190,220,133,82,122,169,212,182,187,145,145,145,33,29, + 58,116,120,118,238,220,57,124,243,205,55,164,81,163,70,149,58,69,0,224,238,238,62,97,244,232,209,216,180,105,19,182,111,223,62,145,82,26,94,110, + 206,251,182,108,217,50,117,251,246,237,24,51,102,12,60,61,61,43,205,85,137,143,143,159,211,190,125,251,200,232,232,104,189,58,30,232,51,158,16,210, + 33,56,56,216,187,168,168,244,197,234,60,0,0,32,0,73,68,65,84,8,187,118,237,122,225,237,237,125,59,60,60,124,6,165,180,252,15,246,209,195, + 135,15,99,216,176,97,104,212,168,209,46,66,72,104,85,247,167,148,70,63,121,242,36,225,194,133,11,44,159,207,135,187,187,59,122,245,234,133,33,67, + 134,160,97,195,134,80,42,149,56,124,248,48,251,232,209,163,68,185,92,174,87,45,165,140,103,23,143,199,198,62,187,118,247,247,223,84,92,134,3,55, + 71,43,124,212,185,49,62,233,223,26,65,1,206,136,127,93,132,11,23,206,169,98,99,95,220,208,103,199,161,150,25,245,248,193,245,63,238,94,85,243, + 184,4,1,254,190,88,48,127,182,229,215,139,230,88,248,122,185,225,193,203,92,156,59,251,139,42,57,49,225,226,223,181,227,240,50,192,55,21,18,9, + 195,225,64,195,17,202,152,210,66,198,129,245,234,249,217,59,56,224,228,201,147,224,0,122,239,8,189,12,240,77,77,75,86,193,11,10,10,160,229,121, + 251,251,251,187,185,187,227,212,201,147,96,88,246,73,59,3,11,140,62,5,196,101,185,4,40,158,228,10,169,183,171,157,191,165,185,4,191,63,120,14, + 185,138,222,218,147,141,191,181,30,217,223,161,170,150,14,191,221,182,109,91,243,157,59,119,118,153,49,99,134,233,136,17,35,32,18,137,80,88,88,8, + 23,23,23,104,52,26,156,62,125,26,119,238,220,41,96,89,246,28,202,149,13,32,132,116,46,91,107,227,116,12,53,41,41,130,89,216,60,98,192,128, + 90,97,2,128,233,115,214,44,211,67,17,182,49,252,234,199,123,207,220,37,159,133,182,227,4,249,187,2,0,236,237,237,97,102,102,102,56,51,134,90, + 100,122,20,134,253,184,117,231,71,135,246,132,59,15,159,252,233,125,39,255,86,153,0,169,54,179,166,42,207,44,187,172,155,146,146,242,148,16,242,122, + 236,216,177,1,218,196,119,161,80,88,156,144,144,16,85,234,100,189,115,77,85,118,150,238,140,155,68,8,57,150,155,155,123,102,214,172,89,248,250,235, + 175,113,252,248,241,16,74,233,53,125,237,44,199,212,120,122,122,230,220,186,117,203,222,167,110,19,212,177,227,161,237,151,209,160,148,194,90,76,145,159, + 147,133,123,247,238,34,63,63,255,119,67,236,116,114,114,202,121,253,250,181,141,157,157,29,178,178,178,144,145,145,241,198,201,202,206,206,70,86,86,22, + 37,228,237,154,45,85,48,101,222,222,222,133,81,81,81,2,123,87,31,120,217,241,17,60,255,41,64,41,220,172,56,200,207,203,193,141,27,55,144,155, + 155,123,169,34,38,203,178,159,15,29,58,148,1,48,124,214,172,89,86,0,26,205,158,61,251,92,249,157,133,60,30,111,93,88,88,88,160,118,137,113, + 206,156,57,107,41,165,59,245,177,179,186,42,203,180,182,182,254,252,228,201,147,82,165,82,137,141,27,55,98,237,218,181,63,80,74,223,218,81,73,41, + 61,201,48,204,22,14,135,51,121,202,148,41,24,63,126,188,184,105,211,166,51,240,103,212,235,45,102,82,82,210,130,160,160,160,133,175,95,191,214,43, + 177,63,58,58,122,92,80,80,208,130,215,175,95,175,170,200,78,0,144,72,36,18,141,70,131,216,216,216,108,74,169,206,252,14,74,105,177,175,175,111, + 146,70,163,113,17,139,197,86,149,205,29,0,178,179,179,151,55,109,218,116,113,90,90,218,89,0,203,202,151,42,161,148,222,39,132,212,159,54,109,218, + 167,43,87,174,252,56,53,53,245,157,58,77,229,153,241,241,241,203,59,116,232,240,229,179,103,207,126,170,104,9,152,82,186,153,16,162,12,11,11,155, + 24,27,27,251,206,142,224,178,76,74,233,9,84,178,148,174,131,173,115,124,89,38,195,48,179,87,174,92,201,217,182,109,27,40,165,171,213,106,117,69, + 118,62,96,24,102,119,235,214,173,71,132,135,135,139,234,215,175,63,30,192,190,138,230,174,85,97,97,225,225,240,240,240,143,31,60,120,224,50,98,196, + 8,145,159,159,31,148,74,37,82,82,82,176,109,219,182,226,71,143,30,37,230,228,228,28,214,117,207,138,152,106,69,94,232,245,11,17,251,226,162,31, + 181,108,223,189,175,165,66,233,2,97,38,131,156,204,84,156,62,113,56,59,54,246,197,141,194,194,28,157,142,96,69,76,165,60,119,240,141,139,199,246, + 39,198,70,181,104,219,161,167,101,177,194,29,66,62,7,153,105,73,56,125,50,34,43,54,246,229,149,98,149,124,164,33,204,154,168,60,147,241,196,50, + 38,245,206,216,9,189,27,195,196,210,229,30,15,216,216,26,48,177,177,183,231,3,64,116,116,52,76,129,120,125,153,105,128,192,167,116,149,170,176,176, + 16,60,64,49,10,224,217,218,218,154,0,192,179,103,207,32,6,94,25,106,103,1,32,17,151,225,114,128,194,76,46,156,189,205,36,4,0,18,83,51, + 161,80,161,194,223,141,255,178,170,42,190,200,2,184,73,8,185,187,106,213,170,182,223,125,247,93,187,233,211,167,11,122,244,232,129,219,183,111,227,252, + 249,243,10,185,92,126,25,192,111,84,207,234,190,239,131,25,94,50,110,96,115,103,98,165,100,139,142,44,248,238,151,54,30,14,22,84,173,97,201,163, + 71,143,112,253,250,245,26,49,21,170,188,195,155,151,47,107,99,34,49,243,19,50,213,103,214,182,74,131,107,205,9,33,17,165,167,110,149,47,225,80, + 186,92,168,141,96,53,215,149,115,167,135,238,113,185,92,234,239,239,79,74,219,211,232,204,183,209,87,169,169,169,67,230,204,153,115,246,224,161,35,220, + 195,83,76,144,155,147,139,188,188,60,228,228,230,32,51,45,25,23,46,92,80,166,167,167,143,55,132,153,158,158,62,41,52,52,244,224,190,125,251,172, + 178,179,179,223,56,90,217,217,217,96,89,22,63,252,240,67,122,90,90,90,229,205,82,203,41,37,37,101,204,172,89,179,14,237,221,127,136,123,110,174, + 37,10,180,213,231,101,185,200,124,157,130,227,199,143,203,51,50,50,166,85,116,61,165,84,67,8,249,108,232,208,161,64,169,179,117,227,198,141,169,132, + 144,205,218,31,115,66,72,157,207,63,255,60,180,76,30,215,218,191,122,215,97,102,102,230,215,45,90,180,88,155,158,158,254,82,169,84,134,83,74,117, + 86,233,215,104,52,83,8,33,215,55,111,222,60,216,198,198,198,62,53,53,117,101,69,204,218,114,12,202,235,213,171,87,243,130,130,130,230,191,126,253, + 186,194,123,3,192,243,231,207,39,151,142,91,85,217,184,210,123,159,4,112,178,138,49,106,148,148,182,208,171,188,5,165,52,2,64,132,30,227,190,7, + 96,80,66,124,109,73,163,209,124,219,160,65,3,145,90,173,62,87,85,62,32,203,178,227,166,79,159,158,56,115,230,204,198,26,141,70,223,231,64,9, + 96,63,33,196,247,213,171,87,13,53,26,141,3,0,240,120,188,212,220,220,220,7,250,70,178,202,170,180,226,123,47,27,191,46,189,195,127,218,52,138, + 178,154,70,132,16,48,28,230,126,126,65,225,46,125,35,89,58,152,31,216,248,117,233,157,150,20,63,154,178,154,70,0,97,185,92,206,131,252,130,194, + 29,233,81,231,254,182,22,60,35,156,97,207,16,76,57,251,227,151,4,0,186,140,254,170,177,135,5,76,213,57,200,65,233,119,121,74,74,10,44,129, + 42,119,162,106,37,6,212,202,210,156,232,236,172,44,136,129,162,20,128,41,205,187,36,105,169,169,48,53,128,167,21,15,80,150,227,230,2,16,106,211, + 57,179,242,100,128,254,117,13,255,91,162,148,234,125,160,164,191,222,71,0,86,148,254,87,82,197,248,206,127,7,179,133,35,252,58,123,147,168,158,254, + 220,44,0,253,107,139,217,193,19,143,59,213,193,235,218,98,26,122,148,101,2,248,73,161,80,208,226,226,98,90,88,88,72,11,10,10,40,128,8,29, + 215,68,36,39,39,211,196,196,68,250,234,213,43,26,23,23,71,1,236,49,212,78,51,51,179,157,3,6,12,208,240,120,188,77,134,216,89,209,97,101, + 101,181,34,56,56,88,185,97,195,6,122,244,232,81,186,99,199,14,58,101,202,20,26,24,24,40,183,176,176,8,173,14,211,193,193,97,129,191,191,127, + 230,15,63,252,64,247,236,217,67,215,175,95,79,191,248,226,11,141,139,139,75,170,84,42,237,86,29,166,157,157,221,247,109,218,180,81,126,255,253,247, + 244,220,185,115,116,239,222,189,244,243,207,63,167,1,1,1,114,137,68,210,79,31,38,0,134,203,229,174,153,48,97,66,170,147,147,211,201,114,143,137, + 235,213,171,119,123,232,208,161,201,0,230,252,29,239,37,35,211,200,52,50,255,153,204,225,206,112,234,82,7,106,250,219,151,148,254,246,37,237,92,7, + 236,16,39,56,83,128,17,243,249,131,219,133,132,172,230,3,131,41,192,232,60,116,217,9,48,34,134,233,223,58,56,120,53,31,8,213,142,21,49,76, + 255,118,33,33,171,121,12,51,172,66,94,37,76,10,48,124,46,119,78,235,150,45,215,112,129,249,218,115,29,235,144,39,159,119,119,165,33,238,228,249, + 48,59,136,43,99,86,240,124,140,171,237,231,248,175,62,170,251,70,224,214,246,155,240,255,51,211,128,123,151,117,180,124,80,178,108,19,81,230,152,167, + 227,154,121,229,198,252,4,192,167,154,115,55,169,205,185,3,104,96,99,99,243,139,143,143,79,186,135,135,71,178,165,165,229,62,0,46,53,100,214,119, + 112,112,248,217,222,222,62,218,209,209,241,129,141,141,205,58,0,182,53,97,242,120,188,96,123,123,251,75,158,158,158,57,238,238,238,105,54,54,54,251, + 1,216,27,202,4,224,8,29,95,42,0,248,0,28,255,174,247,146,145,105,100,26,153,255,80,38,192,116,245,194,202,46,117,160,238,82,7,154,174,158, + 88,87,214,65,233,5,152,84,215,41,26,9,8,203,143,175,146,87,5,147,2,76,43,192,180,252,53,61,93,80,79,31,102,5,207,199,191,222,209,170, + 178,188,131,46,209,210,36,217,218,212,255,103,102,117,68,41,125,14,84,93,236,141,150,169,32,95,11,247,212,175,32,151,254,188,135,0,122,212,50,243, + 15,0,195,107,147,169,84,42,127,135,158,125,223,42,19,165,84,231,214,107,90,178,196,162,215,182,108,163,140,50,234,255,145,40,213,156,1,230,118,241, + 35,27,185,26,112,126,121,65,147,202,62,124,252,207,194,199,6,49,1,96,151,142,246,60,213,226,149,97,2,192,53,224,157,238,14,39,107,152,110,242, + 111,87,181,28,45,163,140,50,202,40,163,140,50,234,175,209,185,103,186,255,72,51,234,223,33,2,160,179,174,7,168,1,59,41,8,33,58,25,149,169, + 42,190,145,105,100,26,153,70,166,145,105,100,26,153,255,61,102,25,118,69,27,43,158,150,227,253,45,27,70,106,77,239,115,93,18,255,198,53,113,35, + 211,200,52,50,141,76,35,211,200,52,50,255,114,230,127,245,248,7,53,112,50,234,255,131,90,186,144,42,155,91,27,101,148,81,70,25,101,212,127,69, + 198,28,173,191,88,132,144,166,0,98,104,5,197,22,75,91,134,72,1,60,161,148,86,187,183,15,145,250,91,129,193,187,77,112,121,140,156,166,63,214, + 171,225,172,222,247,17,16,62,205,136,170,180,13,79,71,111,82,135,207,112,183,55,244,180,108,215,195,135,115,53,171,136,249,42,189,144,171,179,178,183, + 146,97,133,57,66,165,172,40,233,237,196,207,26,217,73,8,3,107,127,219,170,236,36,222,222,2,168,213,37,45,32,184,92,74,99,98,42,108,97,66, + 8,225,192,205,205,142,198,199,87,193,36,2,168,81,202,4,165,49,180,82,166,216,29,182,178,56,90,123,175,17,33,140,187,187,216,38,46,78,86,171, + 76,127,55,216,70,197,87,221,126,201,16,166,187,141,216,38,46,189,246,236,244,151,18,43,185,21,10,227,226,104,173,53,36,109,79,218,115,227,197,241, + 214,113,178,184,90,124,62,131,120,176,46,178,174,234,253,105,48,211,70,110,85,171,159,119,66,184,98,177,216,90,38,171,197,247,146,149,183,20,28,158, + 184,86,231,110,223,64,12,153,165,41,149,93,170,53,59,141,50,170,186,50,56,162,69,8,9,17,137,68,99,106,211,136,32,39,210,184,189,55,183,86, + 153,255,68,49,12,179,105,216,176,97,183,135,13,27,150,65,8,153,80,254,113,66,200,144,22,45,90,68,135,134,134,222,7,176,163,186,247,33,86,254, + 75,108,157,29,95,251,212,173,31,87,254,112,113,114,77,37,22,254,107,107,52,17,0,132,212,227,19,75,191,159,157,60,61,210,93,156,221,83,136,165, + 255,198,202,198,51,44,190,248,121,213,156,142,43,191,152,201,108,27,237,221,206,194,132,189,224,109,203,198,105,143,58,182,108,156,137,165,42,78,105,174, + 136,19,186,139,159,122,249,184,36,154,185,145,74,153,122,219,106,30,208,88,224,208,40,74,31,59,33,87,70,139,45,173,139,197,86,54,197,80,170,178, + 136,155,91,71,157,76,39,79,95,129,143,239,93,23,15,207,20,226,230,86,41,83,170,68,180,179,181,184,216,197,70,92,108,166,66,150,185,27,209,201, + 52,119,37,117,108,125,248,55,61,61,92,82,205,220,73,165,175,145,183,55,17,120,120,16,161,183,55,17,84,54,206,201,67,224,231,230,45,125,230,226, + 233,152,234,236,110,162,23,83,123,84,196,246,113,39,254,245,125,120,207,220,189,93,82,252,61,107,231,53,170,99,35,244,241,178,147,60,171,227,100,155, + 234,97,35,172,241,251,19,0,252,108,152,165,246,174,54,175,173,88,113,178,159,57,241,168,13,166,135,192,163,79,134,121,70,170,151,147,87,170,135,208, + 163,86,236,36,150,126,129,124,7,205,11,87,23,143,170,223,159,250,50,205,3,26,11,29,232,139,218,250,188,3,128,137,137,73,51,51,51,179,103,38, + 38,38,169,18,137,164,218,76,34,241,180,35,86,254,99,137,149,255,143,196,50,32,202,222,209,35,183,54,230,78,136,189,88,96,234,189,132,43,13,188, + 99,109,234,146,235,226,229,152,74,204,90,215,202,220,141,50,170,70,50,116,173,81,32,16,68,51,12,35,7,32,173,173,53,220,14,94,204,173,230,46, + 68,213,196,17,214,181,197,4,192,3,192,41,253,127,71,0,238,0,204,13,97,150,50,132,208,179,118,86,85,76,123,123,251,212,132,132,4,170,86,171, + 233,156,57,115,88,0,19,203,140,31,210,175,95,63,77,108,108,44,125,249,242,37,245,245,245,45,208,218,111,232,220,5,246,141,243,247,255,158,65,15, + 69,230,210,240,59,57,111,29,187,46,39,82,129,93,163,36,67,153,111,219,81,151,15,11,191,99,189,198,45,165,71,238,23,232,197,236,92,7,47,11, + 79,127,65,63,9,22,81,229,119,245,104,255,186,132,94,27,7,122,109,28,232,209,225,160,141,235,19,58,110,217,199,244,232,179,109,244,247,194,163,244, + 76,226,79,212,198,87,80,35,59,41,165,128,89,125,11,198,186,110,252,138,189,55,232,238,43,201,85,218,9,103,215,248,158,39,206,208,94,103,47,210, + 58,99,198,82,226,230,158,171,227,181,37,196,217,249,250,178,11,151,233,238,248,36,42,240,241,173,148,41,117,69,252,140,51,61,233,236,139,189,104,155, + 177,117,168,185,59,121,135,73,41,133,153,11,142,172,59,49,143,158,77,218,93,229,220,157,220,68,241,129,65,82,234,236,46,202,117,119,135,208,203,11, + 2,93,76,39,87,209,186,239,247,76,163,207,147,195,104,29,63,243,74,153,126,30,136,15,105,198,163,33,205,75,14,127,79,232,180,211,207,3,27,246, + 238,154,68,83,94,253,76,27,249,215,252,53,162,148,194,205,74,248,213,166,153,131,105,242,217,205,212,207,209,172,86,152,141,157,133,69,25,23,191,163, + 203,199,245,160,190,150,24,83,83,166,135,200,163,127,23,207,46,154,232,239,163,233,235,136,215,212,223,220,63,185,54,236,132,133,255,170,9,95,237,166, + 97,87,83,169,208,161,113,173,204,29,22,126,123,102,109,60,169,215,123,94,159,195,210,210,82,42,145,72,94,117,236,216,145,246,232,209,131,154,154,154, + 86,107,238,140,212,185,135,169,115,227,130,110,99,151,211,185,91,79,211,221,87,146,233,209,135,133,244,167,203,137,53,154,187,80,104,230,41,146,56,62, + 108,214,127,33,253,234,224,31,244,232,195,66,186,235,82,18,21,216,118,172,149,231,179,194,231,217,200,172,85,230,127,245,48,104,233,144,16,210,218,204, + 204,204,193,201,201,73,243,236,217,179,209,64,73,23,241,154,168,137,11,9,180,16,50,245,58,213,53,83,93,120,146,63,1,192,178,154,240,8,33,68, + 34,145,124,101,106,106,58,25,192,3,66,200,72,91,91,219,199,221,186,117,83,29,57,114,36,3,128,175,158,28,19,129,64,144,18,28,28,204,70,70, + 70,22,1,112,54,53,53,125,204,225,112,36,69,69,69,163,84,42,213,37,67,109,75,75,75,59,177,107,215,174,177,99,198,140,193,178,101,203,8,151, + 203,221,66,8,1,128,252,79,62,249,228,231,175,191,254,154,83,84,84,132,163,71,143,34,38,38,38,156,150,180,43,50,88,92,62,195,23,138,76,48, + 126,80,47,164,167,165,36,224,237,230,160,249,32,228,235,234,112,129,146,72,22,44,52,135,122,245,15,237,61,108,236,20,124,53,119,26,238,223,190,17, + 5,66,150,86,122,33,197,193,115,17,187,230,45,251,216,21,151,162,114,241,42,159,147,63,244,48,47,7,0,41,52,215,56,206,92,51,149,219,160,105, + 93,252,180,238,0,238,94,127,128,244,228,244,104,80,44,170,174,157,37,182,18,2,11,191,221,195,198,77,119,179,180,182,193,148,97,31,230,42,84,242, + 207,43,191,136,70,157,154,52,206,81,108,99,203,235,185,109,39,226,47,189,251,50,51,46,246,35,218,244,234,213,210,211,63,0,159,246,234,161,80,20, + 23,85,202,36,4,247,119,142,59,229,32,181,21,243,7,126,221,14,79,46,198,189,51,198,204,133,120,185,122,59,245,105,214,46,8,19,251,76,135,188, + 88,81,101,187,160,175,190,243,198,180,208,103,102,82,51,105,113,118,166,42,15,128,249,59,182,242,152,15,218,117,104,130,165,11,190,71,113,177,178,202, + 214,62,223,109,246,66,110,158,26,148,2,147,166,84,216,11,186,67,112,203,134,88,185,124,59,138,229,138,111,170,98,234,35,66,224,235,239,102,141,221, + 17,231,161,144,43,42,109,7,163,143,188,189,137,192,201,196,92,100,66,138,113,244,220,21,150,170,112,172,22,204,252,106,243,248,205,156,123,209,247,176, + 96,198,130,100,149,90,53,167,22,152,0,224,32,181,118,196,161,253,97,144,23,23,85,59,146,173,21,113,113,17,153,72,28,251,122,214,107,138,175,230, + 78,129,66,33,159,95,83,102,113,113,241,22,95,95,95,87,134,97,112,237,218,181,2,150,101,13,110,40,207,55,179,159,106,102,231,181,246,195,79,87, + 49,82,17,7,47,159,221,197,111,103,79,226,217,147,135,234,156,172,204,103,32,164,90,223,253,150,150,150,102,92,30,243,91,147,15,199,59,187,53,238, + 138,95,246,254,132,141,81,207,53,25,25,57,79,1,90,163,223,19,163,140,170,21,149,245,186,78,156,56,65,43,243,202,4,2,193,153,35,71,142,208, + 109,219,182,81,161,80,152,12,128,212,212,211,107,231,201,28,186,127,100,149,38,229,208,100,218,198,157,147,217,191,138,42,177,85,120,216,214,82,169,244, + 230,150,45,91,228,49,49,49,212,204,204,44,10,128,223,144,33,67,178,19,19,19,169,165,165,101,188,1,44,243,54,109,218,100,101,102,102,210,122,245, + 234,189,166,148,194,201,201,41,237,246,237,219,180,79,159,62,121,166,166,166,43,80,46,226,164,7,147,79,8,57,182,100,201,18,154,152,152,72,85,42, + 21,93,188,120,49,59,115,230,76,86,38,147,209,248,248,120,186,102,205,26,202,229,114,47,66,207,42,236,186,14,177,107,83,249,129,200,124,106,227,223, + 158,194,221,93,88,91,94,185,54,146,213,227,147,197,52,236,102,6,109,208,101,20,133,133,223,10,125,174,237,238,5,105,151,58,152,213,165,14,174,119, + 246,194,252,118,238,37,209,69,169,43,54,76,248,246,35,122,240,233,90,234,211,194,70,41,117,195,100,107,95,152,214,138,189,22,190,179,26,117,31,75, + 127,190,158,73,189,130,63,102,97,225,247,65,149,215,56,187,198,139,27,7,209,158,39,207,82,211,224,150,20,174,110,111,69,117,224,110,110,46,9,240, + 206,216,28,29,67,123,207,255,130,114,92,157,23,87,201,244,130,64,234,130,87,51,206,244,164,238,45,77,169,153,219,187,145,34,169,27,182,124,241,211, + 56,186,254,151,121,84,234,138,95,171,98,58,185,137,226,143,221,105,66,155,180,52,167,199,35,155,80,119,111,241,59,76,39,79,129,79,247,62,1,52, + 62,243,71,234,19,96,89,208,164,9,120,149,49,253,60,16,255,228,182,63,237,216,154,79,253,61,65,253,60,222,181,179,78,29,216,118,108,109,77,243, + 179,118,211,150,65,230,202,64,59,136,107,227,181,114,183,20,61,120,190,111,14,157,208,167,25,117,179,20,181,168,41,207,223,2,245,250,53,115,164,5, + 103,22,210,122,246,220,172,154,242,60,248,30,129,31,122,127,72,179,182,102,209,122,86,245,100,94,18,47,155,218,152,119,201,251,212,239,236,231,59,110, + 208,230,31,207,164,176,244,125,167,85,148,161,7,223,204,119,64,147,190,51,232,188,176,7,148,88,250,63,169,41,79,36,145,14,114,114,114,162,189,123, + 247,166,142,142,142,84,36,18,13,54,148,33,148,88,47,117,174,223,129,126,180,226,34,109,63,101,59,229,218,54,76,130,133,223,60,152,251,181,133,99, + 147,106,127,215,81,74,97,98,98,178,189,65,243,118,244,131,105,223,81,51,167,166,74,142,164,254,120,216,180,171,180,69,154,241,248,103,31,85,249,34, + 255,182,67,175,136,22,33,68,0,32,192,193,193,33,164,123,247,238,56,120,240,32,204,205,205,37,105,105,105,161,132,144,8,74,105,161,161,14,94,80, + 16,225,113,50,224,99,38,49,237,213,160,251,56,14,137,24,8,55,107,62,255,153,82,62,162,158,45,9,127,156,78,101,134,240,120,60,94,136,139,139, + 203,129,19,39,254,143,189,243,14,143,162,90,255,248,247,108,239,187,217,244,70,66,79,3,18,122,175,210,67,85,44,112,65,185,160,32,194,197,130,10, + 138,128,40,210,17,11,85,16,80,154,32,74,71,20,144,78,2,129,52,72,2,164,215,77,175,187,155,205,150,247,247,7,9,191,16,82,118,19,238,245, + 94,159,124,159,231,60,155,156,153,249,236,59,179,179,103,190,123,206,153,119,78,184,180,109,219,150,93,184,112,1,92,46,23,0,16,23,23,103,186,125, + 251,182,173,33,34,57,57,217,124,237,218,53,228,231,231,91,0,192,222,222,158,117,235,214,13,63,255,252,179,98,231,206,157,111,127,248,225,135,131,25, + 99,99,136,40,199,26,30,17,85,48,198,38,45,91,182,236,48,128,177,211,167,79,199,199,31,127,204,0,32,43,43,11,71,142,28,193,135,31,126,248, + 167,201,100,10,166,38,100,97,39,2,180,134,71,189,18,207,74,85,61,89,67,199,191,52,118,236,63,102,99,245,39,239,227,238,237,144,85,84,16,187, + 200,154,237,79,63,164,18,0,107,43,11,0,64,217,146,245,108,209,222,125,238,168,169,131,177,254,221,109,208,164,231,78,43,78,165,131,207,36,94,117, + 251,190,106,39,183,149,211,230,125,140,31,182,127,133,248,251,119,215,82,65,92,189,15,14,174,210,232,45,223,225,204,219,115,96,49,62,253,16,0,174, + 73,176,122,232,244,55,28,114,178,115,240,219,129,31,147,44,28,94,189,15,55,6,30,205,209,82,56,75,91,28,254,228,34,102,126,55,26,95,189,112, + 228,201,229,30,204,222,206,89,53,189,223,168,30,248,124,206,6,48,192,170,94,162,252,220,10,204,255,212,11,92,30,171,117,57,153,216,43,61,250,180, + 193,173,91,119,81,166,213,255,113,255,94,195,55,87,228,230,26,241,233,18,47,252,116,56,23,127,94,120,250,126,13,129,25,131,131,130,188,145,152,240, + 16,249,249,69,33,113,26,219,191,251,181,73,192,231,180,113,183,227,33,45,51,7,38,35,239,65,83,121,22,46,231,197,33,65,30,184,29,113,23,70, + 163,217,230,222,231,167,120,28,203,164,97,126,195,112,45,230,26,202,180,101,71,146,244,73,185,77,101,86,147,163,129,73,144,159,159,7,88,184,217,207, + 128,247,74,203,192,126,8,189,116,14,100,65,147,190,79,18,137,189,39,79,192,219,218,161,67,7,36,37,37,161,176,176,112,175,78,167,59,96,11,67, + 44,147,13,145,219,123,46,238,49,98,50,238,95,62,132,216,27,127,220,54,243,4,99,168,32,182,201,147,223,197,98,241,0,133,66,241,122,203,118,254, + 8,251,227,39,232,139,242,95,51,151,37,236,111,42,183,89,205,122,150,170,117,50,60,99,204,89,32,16,196,10,4,130,28,46,151,91,46,16,8,180, + 173,91,183,190,182,123,247,110,65,114,114,50,24,99,120,237,181,215,228,106,181,122,11,143,199,43,20,8,4,122,133,66,145,238,224,224,112,75,42,149, + 118,169,141,217,181,53,83,14,106,195,189,51,176,13,55,163,143,55,71,203,205,70,185,155,163,211,173,47,215,175,229,178,204,16,160,36,29,115,135,122, + 200,29,20,252,175,228,98,86,208,219,155,171,31,212,150,159,62,180,189,240,86,255,182,252,1,245,237,132,189,189,253,242,129,3,7,30,189,126,253,186, + 171,179,179,51,187,113,227,6,12,6,3,42,135,229,192,229,114,33,22,139,31,255,111,173,106,110,199,225,60,58,92,55,111,222,196,228,201,147,69,103, + 206,156,233,230,233,233,25,201,231,243,7,90,203,36,162,10,34,154,180,108,217,178,227,187,118,237,66,90,90,26,210,210,210,112,248,240,225,103,98,178, + 128,71,227,132,186,114,19,44,207,200,105,85,153,172,65,193,147,198,142,124,233,117,124,253,233,135,54,153,172,90,153,1,76,192,229,112,118,78,255,248, + 69,206,181,179,161,8,191,26,125,252,153,153,44,215,182,142,60,62,231,208,212,249,203,184,209,225,55,113,238,248,207,87,81,232,218,224,80,92,149,180, + 57,217,24,184,108,5,6,127,177,26,28,222,255,255,22,17,120,57,188,234,221,57,232,141,78,227,95,192,254,213,203,97,54,86,204,165,164,36,171,238, + 102,123,241,243,129,120,101,245,96,236,154,115,6,102,227,147,79,190,96,60,204,25,249,242,64,113,114,124,10,162,110,222,11,47,74,105,56,217,31,3, + 194,63,121,51,62,116,209,204,7,21,38,227,211,159,179,163,183,212,85,34,19,190,63,104,120,59,92,250,51,28,140,232,87,107,226,92,242,105,10,62, + 250,36,25,111,190,225,10,46,247,233,239,139,133,225,181,110,221,91,32,44,44,26,140,112,222,26,102,67,242,116,144,184,123,56,202,164,92,179,14,105, + 217,133,133,233,37,37,249,77,134,18,94,26,217,201,9,191,221,184,11,80,211,207,43,6,214,183,187,119,119,92,138,185,4,88,240,75,163,24,14,237, + 124,153,218,55,68,217,110,176,137,217,251,69,50,71,159,246,0,192,56,60,167,82,51,31,197,133,5,0,207,220,36,163,165,86,183,86,138,148,118,163, + 100,174,237,16,21,122,1,104,130,209,98,140,113,44,92,246,131,191,159,143,210,96,48,32,49,49,49,69,44,22,191,101,11,67,165,82,217,241,184,130, + 31,2,187,247,101,201,145,23,17,119,253,228,121,179,68,223,255,89,220,97,200,24,19,241,120,188,239,252,253,253,89,86,90,50,114,83,30,156,52,52, + 155,172,102,253,23,138,7,0,39,79,158,164,224,224,224,234,173,106,5,0,203,164,73,147,236,182,108,217,194,147,203,229,208,235,245,226,156,156,28,132, + 134,134,66,44,22,163,111,223,190,108,248,240,225,114,137,68,2,0,252,205,155,55,187,30,60,120,80,105,48,24,158,122,126,18,0,152,45,96,196,129, + 96,212,208,65,142,239,173,222,197,231,202,156,1,139,73,140,220,104,224,207,69,0,87,136,30,237,21,56,243,177,135,12,92,33,74,141,28,254,143,127, + 38,185,237,251,243,129,189,209,104,169,243,151,56,99,76,209,190,125,251,185,123,247,238,181,43,41,41,65,110,110,46,36,18,9,136,232,41,163,101,171, + 24,99,16,139,197,143,13,86,213,43,0,196,198,198,162,69,139,22,236,252,249,243,46,61,123,246,220,141,71,147,237,173,97,118,0,144,91,105,182,14, + 223,185,115,103,44,143,199,195,177,99,199,254,52,153,76,193,0,20,140,177,0,0,209,68,164,183,57,104,0,32,130,182,252,217,244,104,85,153,172,190, + 35,158,31,59,228,249,25,216,186,242,35,60,136,186,217,36,147,5,0,138,82,124,52,100,74,111,63,165,163,12,235,255,245,93,169,209,130,57,77,143, + 246,209,197,129,235,208,98,255,208,151,223,114,229,10,37,56,176,121,77,62,56,230,151,137,254,180,238,25,149,140,133,159,154,51,171,218,45,225,84,10, + 0,18,79,101,15,153,179,251,246,193,11,63,199,249,157,91,144,18,117,231,39,83,90,206,105,235,144,8,223,49,235,212,35,38,161,172,68,128,209,85, + 203,20,222,172,183,218,94,177,120,224,196,94,248,97,205,17,128,176,198,26,102,90,178,110,2,0,120,120,75,146,243,115,43,188,168,198,135,205,99,166, + 85,83,223,232,41,45,42,42,196,137,95,110,197,100,164,150,91,117,1,90,190,212,11,60,62,195,220,183,19,80,97,122,146,217,182,21,155,218,169,163, + 243,240,62,189,92,240,198,172,195,68,12,86,153,183,134,36,224,145,79,107,23,41,10,11,243,81,162,53,220,111,42,207,215,142,55,177,115,107,69,59, + 103,73,5,206,223,73,214,106,37,56,213,24,142,147,172,165,11,71,171,47,213,144,70,43,228,9,59,121,219,123,227,126,198,125,48,14,139,104,104,91, + 166,106,223,10,28,238,183,82,149,99,55,109,81,206,125,152,185,175,113,4,194,179,3,167,47,246,116,106,21,128,236,196,168,142,127,238,249,236,0,99, + 172,171,216,171,151,147,193,72,208,149,22,17,242,92,235,236,29,247,80,120,216,155,74,77,229,26,210,212,217,139,104,50,113,39,122,248,245,22,228,106, + 50,144,151,158,120,135,138,99,31,54,102,223,1,128,39,119,89,224,238,234,48,208,193,193,30,33,55,110,152,45,22,203,228,252,252,252,18,91,24,38, + 147,105,91,187,246,62,110,204,80,130,152,91,215,243,77,38,222,63,40,35,233,153,60,51,85,44,149,47,245,240,112,111,43,22,139,113,231,250,173,82, + 142,69,240,212,157,220,205,250,223,82,45,94,228,111,161,170,159,235,131,78,158,60,73,168,124,112,46,17,21,50,198,186,31,57,114,228,140,74,165,234, + 190,102,205,26,225,133,11,23,144,159,159,15,137,68,2,177,88,252,248,85,36,18,97,227,198,141,21,135,15,31,206,53,24,12,3,137,168,214,25,180, + 225,73,84,212,213,157,117,63,253,251,197,83,114,229,123,189,102,127,186,77,200,46,46,6,82,47,1,92,33,192,19,62,241,122,240,66,130,241,224,229, + 248,66,179,193,50,232,102,22,197,212,179,15,166,188,188,60,60,124,248,16,118,118,118,80,169,84,96,140,129,199,227,61,30,58,228,112,56,141,234,209, + 226,112,56,16,137,68,79,24,54,0,80,42,149,0,128,162,162,34,20,20,20,128,195,225,88,53,105,157,49,246,254,152,49,99,86,123,123,123,211,55, + 223,124,179,138,136,198,31,59,118,172,23,0,39,0,39,0,12,232,208,161,195,137,30,61,122,72,126,252,241,199,203,0,234,237,201,171,75,132,170,161, + 195,166,57,173,42,147,213,99,232,132,177,253,38,76,199,174,245,159,32,225,238,173,38,155,44,185,23,243,119,116,85,125,52,114,122,63,236,95,115,20, + 218,162,178,247,117,105,148,209,164,96,43,37,112,113,89,210,42,160,239,115,126,189,71,227,192,154,185,164,215,23,77,161,252,135,86,179,41,53,121,66, + 205,58,137,167,196,157,35,146,29,237,185,240,115,65,114,196,45,132,238,223,25,109,172,176,62,29,73,81,50,61,197,4,0,187,86,204,75,36,224,31, + 125,107,237,171,130,152,240,7,184,126,246,86,100,73,26,14,91,203,5,30,247,108,105,0,246,248,65,174,206,173,68,195,252,2,28,166,14,25,237,137, + 143,231,157,133,209,108,124,135,170,61,244,181,46,17,67,248,236,185,241,26,0,32,160,204,204,253,127,67,216,166,13,115,226,9,57,27,223,155,31,136, + 3,63,133,34,62,49,119,211,253,68,138,178,37,214,58,101,49,7,247,243,177,195,141,187,201,0,208,160,137,169,79,237,237,4,157,236,196,252,93,171, + 38,185,98,255,159,15,80,172,53,237,75,203,183,237,7,11,99,140,43,81,180,89,236,164,112,249,68,172,0,243,20,183,250,222,223,169,189,29,99,12, + 9,154,132,146,68,125,98,74,125,219,243,237,124,22,59,58,182,88,214,99,240,20,110,107,191,94,120,112,247,138,195,31,63,175,187,19,212,115,162,220, + 91,229,142,51,155,222,199,11,175,175,199,67,215,182,65,89,102,203,24,103,123,79,190,90,111,134,177,48,87,67,20,83,235,15,130,86,226,86,139,219, + 216,181,89,86,42,40,179,180,20,183,60,202,177,112,62,75,48,36,68,215,92,143,24,94,241,236,212,23,169,81,215,0,52,190,39,79,96,231,29,36, + 149,43,62,247,239,220,19,177,119,174,65,167,211,173,208,233,116,215,109,97,200,100,178,87,213,106,245,36,79,15,119,132,132,133,194,108,50,206,160,178, + 180,103,146,215,74,40,83,119,148,74,100,11,218,180,105,131,216,216,88,24,43,12,239,235,116,217,207,164,13,105,214,95,170,39,188,200,223,69,60,0, + 8,14,14,190,8,224,9,23,66,68,90,198,216,224,157,59,119,30,200,206,206,14,222,183,111,159,232,183,223,126,3,135,195,121,108,178,196,98,49,222, + 127,255,125,221,181,107,215,238,235,116,186,161,68,84,111,151,127,88,6,233,6,49,54,244,224,207,191,236,201,204,210,76,88,190,253,132,152,157,124,13, + 208,230,252,191,209,226,10,177,100,95,68,249,165,187,153,137,21,101,166,193,33,217,84,111,87,58,17,233,196,98,241,248,73,147,38,29,216,176,97,131, + 75,255,254,253,57,140,49,112,185,220,39,12,146,72,36,122,162,71,202,26,85,245,104,85,113,170,94,171,140,214,239,191,255,110,252,240,195,15,179,243, + 242,242,38,91,137,28,247,229,151,95,50,47,47,47,22,24,24,248,209,140,25,51,56,68,180,168,146,61,184,95,191,126,167,191,251,238,59,161,64,32, + 64,124,124,124,63,198,152,3,17,229,217,20,52,42,231,104,149,155,96,105,130,207,170,50,89,157,7,143,31,219,35,248,85,28,248,106,25,146,99,194, + 154,108,178,24,99,28,133,39,118,76,124,103,8,63,246,118,60,194,254,136,190,84,156,138,103,242,28,43,177,187,221,63,21,246,222,159,244,121,225,125, + 156,251,105,3,114,210,238,127,65,249,201,103,155,194,148,120,74,122,112,132,194,95,218,205,89,232,98,32,66,232,215,159,21,112,152,105,28,105,242,154, + 52,55,201,190,45,83,128,112,98,234,226,241,142,92,62,7,219,62,217,151,203,24,141,183,198,16,85,87,85,207,86,149,28,91,240,198,182,241,83,30, + 158,251,129,47,59,122,40,26,247,99,115,79,102,37,151,255,110,13,43,46,161,118,67,216,162,45,107,205,24,126,124,245,69,79,53,160,195,158,125,17, + 105,124,9,154,116,30,84,169,141,11,115,146,138,37,83,135,249,43,177,252,215,68,128,225,167,198,178,124,237,196,175,185,72,69,91,54,78,240,22,229, + 230,24,241,229,153,140,36,19,89,62,176,149,195,183,107,183,185,139,239,224,55,102,13,125,7,142,22,62,14,158,253,114,166,216,12,164,23,166,67,111, + 208,71,54,180,189,136,104,202,187,47,175,132,47,170,22,0,0,32,0,73,68,65,84,226,230,21,100,224,226,158,229,152,246,194,50,8,251,100,201,251, + 119,127,30,71,206,124,133,226,140,248,50,73,114,138,172,163,155,63,10,83,98,223,14,112,108,7,105,74,26,248,102,83,88,61,216,41,59,38,237,224, + 218,73,236,184,87,18,175,76,90,121,113,245,152,150,146,150,211,147,116,73,143,205,148,131,162,189,143,196,222,101,176,218,179,29,66,126,221,76,0,175, + 81,199,146,169,124,90,242,25,231,80,215,193,227,249,5,5,233,200,200,204,8,209,235,116,159,217,194,16,139,197,45,133,66,225,183,1,1,1,72,76, + 74,70,113,73,233,119,134,210,252,103,113,231,39,24,99,28,145,212,254,187,128,206,125,120,133,133,89,208,104,52,151,116,58,237,255,246,179,240,154,5, + 160,118,47,242,119,80,189,206,131,136,76,6,131,225,197,83,167,78,105,210,211,211,225,234,234,250,68,143,150,193,96,192,185,115,231,132,90,173,182,79, + 67,38,171,74,127,18,153,46,37,152,166,92,189,126,45,161,32,49,12,112,12,120,162,55,171,130,248,56,123,59,149,111,40,52,246,106,200,100,85,73, + 175,215,95,214,104,52,157,222,121,231,157,208,13,27,54,148,41,20,10,40,20,138,39,230,86,53,182,71,171,182,57,90,18,137,4,203,151,47,47,250, + 240,195,15,111,228,229,229,117,34,162,16,43,145,167,215,172,89,131,204,204,76,76,155,54,13,187,118,237,90,200,24,91,201,24,27,60,106,212,168,211, + 63,253,244,147,80,36,18,225,218,181,107,8,13,13,189,212,24,147,5,52,189,71,171,202,100,117,24,48,118,108,231,17,255,192,175,91,62,123,38,38, + 11,0,148,45,240,126,199,33,109,123,122,4,56,225,208,250,223,12,100,198,235,84,25,104,99,31,207,195,24,227,202,60,100,27,28,60,219,239,28,248, + 218,183,156,132,168,139,136,9,249,245,162,41,63,165,73,233,33,164,94,130,55,164,78,234,43,157,151,45,115,19,184,185,226,206,154,133,102,179,190,116, + 146,62,185,232,233,252,12,214,199,202,20,45,216,107,28,14,239,254,248,121,67,59,180,14,106,129,77,31,252,80,161,215,151,143,43,76,162,228,198,114, + 85,222,172,165,115,43,193,222,224,87,220,143,125,252,69,43,65,88,104,6,14,236,142,201,224,112,57,54,205,169,169,17,43,215,181,61,123,79,166,228, + 223,93,48,223,171,215,11,99,20,88,251,77,20,244,6,243,27,119,239,218,118,179,74,109,242,117,21,123,115,120,188,99,139,70,57,219,231,22,20,226, + 92,84,86,82,114,94,249,101,91,24,131,24,227,249,42,149,147,125,149,138,176,222,206,246,187,14,142,238,44,210,150,240,48,255,96,122,137,217,128,23, + 18,10,168,184,33,6,99,93,249,76,237,187,130,235,16,16,199,212,190,215,21,50,167,25,255,24,243,1,14,252,241,13,182,156,89,137,249,195,63,198, + 115,62,195,241,32,231,1,136,81,131,70,75,104,177,44,92,183,241,229,184,221,63,188,123,46,229,97,232,225,171,167,54,227,37,223,49,72,8,57,137, + 184,232,243,33,34,139,121,173,33,49,22,125,156,58,66,68,150,129,61,28,124,97,78,75,132,208,98,185,85,23,147,44,180,112,232,246,161,15,167,236, + 155,2,1,87,128,253,175,236,21,117,112,233,112,192,91,228,189,134,49,198,13,96,1,2,130,229,199,46,163,102,112,115,19,34,81,146,155,126,133,10, + 238,166,218,114,44,1,128,217,251,245,20,138,248,55,123,61,63,183,141,216,190,5,162,111,94,41,35,19,155,66,68,214,13,189,227,209,121,195,225,112, + 126,244,243,243,147,233,245,122,36,37,37,63,52,72,249,239,216,26,75,93,226,41,221,62,112,243,237,222,221,206,201,5,113,113,113,6,147,201,244,184, + 13,105,86,179,254,27,101,205,93,135,60,179,217,236,234,233,233,137,204,204,76,72,36,146,199,102,203,193,193,1,106,181,186,60,47,47,207,11,64,156, + 181,111,202,24,99,125,188,56,45,237,60,253,129,135,187,1,174,232,177,217,18,8,133,112,86,203,116,153,150,210,54,0,238,88,203,36,162,60,198,88, + 159,125,251,246,125,118,237,218,181,55,119,236,216,161,110,170,209,98,140,61,49,116,88,92,92,76,90,173,22,131,6,13,202,75,77,77,253,170,168,168, + 104,133,141,95,240,149,219,183,111,247,224,112,56,111,46,90,180,8,83,166,76,1,135,195,89,120,234,212,169,15,118,238,220,201,41,42,42,194,149,43, + 87,48,123,246,236,123,122,189,254,197,6,227,171,227,49,59,2,137,148,53,118,142,22,83,180,119,128,29,103,167,79,159,224,177,1,67,38,227,244,142, + 21,200,124,16,222,36,147,165,240,96,246,92,14,183,31,152,121,138,87,160,235,11,163,230,245,198,233,109,87,80,170,209,110,84,151,137,140,157,91,240, + 251,187,72,240,81,80,43,245,144,49,62,156,63,76,21,244,206,153,68,170,119,174,142,194,131,217,115,184,232,76,12,3,100,45,56,163,219,244,232,18, + 216,121,204,60,68,159,59,130,187,231,246,68,8,136,247,114,133,141,189,67,10,15,102,207,24,186,17,227,12,97,12,207,121,118,241,9,12,154,251,42, + 50,238,166,32,118,203,242,66,179,214,240,138,62,181,236,130,173,76,14,15,94,100,65,59,48,180,87,122,97,108,199,65,109,59,143,154,213,15,12,92, + 108,95,120,16,121,89,133,255,44,73,166,27,182,48,185,124,120,146,5,109,65,104,199,19,242,198,122,251,170,187,79,156,209,10,110,206,124,108,248,226, + 33,162,111,21,167,112,25,119,144,38,89,103,213,197,86,225,203,236,133,128,55,8,62,4,142,47,64,62,142,237,88,231,110,253,221,91,254,115,122,75, + 148,100,22,225,141,15,226,205,105,169,250,165,201,241,244,155,53,76,95,15,102,79,2,56,112,8,118,102,130,29,7,176,179,0,118,204,194,81,91,136, + 245,105,231,33,28,244,246,72,15,65,39,39,17,102,124,31,111,49,19,155,73,13,228,142,243,85,40,236,185,196,233,100,38,78,15,198,208,131,39,183, + 235,61,204,222,201,113,106,107,47,180,117,16,226,199,187,73,216,26,147,120,207,98,49,79,136,41,174,176,110,126,146,157,246,203,54,221,134,189,213,115, + 232,52,112,242,242,80,154,122,31,25,57,137,184,22,245,219,53,1,89,244,49,29,94,120,110,128,119,47,236,185,185,13,28,226,52,104,180,242,74,30, + 30,3,30,229,237,98,108,16,239,90,248,209,132,107,17,199,130,24,99,177,82,158,105,185,217,204,2,243,210,99,49,181,205,72,108,182,16,70,56,4, + 97,107,220,38,8,201,92,167,209,74,50,36,29,3,112,172,149,160,85,167,249,199,230,31,248,87,191,127,249,238,152,180,3,107,47,174,125,255,200,221, + 163,47,151,112,205,130,241,189,95,117,238,228,210,13,159,237,156,109,4,113,231,91,179,235,143,218,16,234,8,198,233,6,162,110,42,71,215,49,67,167, + 47,18,150,20,23,227,210,222,37,134,10,131,126,74,185,190,168,214,71,101,213,37,137,68,178,200,205,205,173,143,189,189,61,66,66,66,204,100,193,20, + 210,212,61,175,204,234,56,57,150,32,46,12,147,61,219,118,158,222,113,232,203,136,61,245,13,202,203,203,151,150,151,151,55,122,30,90,179,154,245,159, + 144,53,70,43,104,224,192,129,70,179,217,44,76,75,75,195,134,13,27,180,69,69,69,230,117,235,214,41,6,12,24,128,94,189,122,89,78,156,56,209, + 3,181,24,45,198,216,80,162,167,239,160,234,236,10,159,86,173,91,50,14,79,0,77,86,58,214,28,189,175,75,201,41,179,44,156,220,75,214,205,207, + 27,129,237,220,248,154,188,251,61,81,139,209,170,139,9,0,149,166,103,177,88,44,254,125,216,176,97,91,184,92,238,31,0,242,35,34,34,116,221,187, + 119,79,179,88,44,181,154,193,58,152,134,204,204,76,214,175,95,191,156,226,226,226,114,0,40,40,40,72,111,221,186,117,73,118,118,246,171,68,245,95, + 24,107,99,18,17,49,198,222,218,186,117,43,0,188,185,112,225,66,188,242,202,43,152,50,101,10,39,39,39,7,23,47,94,196,236,217,179,239,105,181, + 218,65,68,244,212,237,227,213,153,204,206,103,177,204,217,117,153,80,162,224,214,92,143,199,23,193,100,182,60,202,82,154,204,171,215,110,213,100,202,157, + 61,150,121,6,244,228,250,15,124,1,23,127,92,141,172,135,182,155,172,234,76,165,55,91,108,239,45,95,230,228,109,199,245,10,116,70,167,17,109,113, + 253,64,36,98,78,220,67,23,49,255,67,38,177,124,200,44,22,236,89,179,8,66,145,20,69,119,118,143,124,99,231,131,18,0,47,215,197,148,87,50, + 157,189,237,184,158,29,157,224,210,174,61,4,146,214,56,191,109,35,226,67,195,127,209,155,229,211,40,187,225,134,189,182,56,157,91,171,185,222,65,46, + 112,9,106,3,142,220,5,215,127,56,131,187,191,94,15,55,115,56,19,245,169,250,228,198,48,85,46,114,174,189,167,28,142,158,118,240,240,117,129,131, + 171,10,87,14,132,35,244,215,168,76,99,185,249,221,226,84,170,119,136,167,54,166,189,167,146,235,238,231,0,119,95,7,120,182,150,67,72,21,72,8, + 201,196,206,229,119,81,86,108,252,137,199,53,207,215,36,86,212,217,35,92,157,233,224,195,22,187,184,169,150,169,221,148,92,7,119,21,236,61,148,176, + 119,87,193,211,93,12,181,192,140,159,247,133,227,207,83,73,119,200,104,121,35,51,158,234,204,147,82,157,233,211,138,45,118,247,22,44,115,176,231,115, + 149,74,46,84,74,30,148,74,30,236,164,92,56,136,249,104,229,32,132,183,74,136,219,145,90,60,191,53,217,156,85,96,122,63,94,83,241,148,137,173, + 206,244,147,218,45,246,18,41,151,181,19,171,184,190,18,21,124,37,42,248,72,84,168,176,152,113,36,61,30,111,71,36,27,242,42,180,59,133,98,221, + 7,119,235,73,59,241,196,57,175,246,253,200,161,133,239,155,157,71,207,64,216,233,93,232,232,211,23,221,187,140,198,245,223,247,128,129,237,5,168,236, + 82,220,31,207,13,112,235,138,7,57,15,0,134,90,231,165,213,213,46,85,222,132,241,196,247,199,133,185,220,140,77,189,83,209,66,232,32,216,56,106, + 53,220,121,42,220,76,184,92,162,214,74,175,54,196,76,172,72,140,108,203,218,246,220,112,105,195,129,184,236,184,81,139,135,44,198,155,189,223,244,228, + 48,46,42,24,225,221,163,95,160,180,56,119,17,21,198,214,58,215,173,230,247,221,173,165,247,178,22,45,91,115,219,251,119,132,123,43,95,200,157,189, + 113,235,250,21,92,250,254,211,28,179,161,100,108,69,73,110,104,93,199,177,54,166,84,42,93,172,80,40,62,245,245,245,69,92,92,28,116,58,221,50, + 173,86,91,167,129,180,134,89,21,103,171,214,109,185,45,125,59,66,214,166,31,174,31,92,131,212,196,152,27,122,173,118,125,99,152,207,74,205,204,103, + 203,252,187,170,65,163,197,225,112,250,74,36,18,193,186,117,235,140,43,86,172,168,176,88,44,159,24,141,198,204,41,83,166,108,26,51,102,140,40,32, + 32,64,126,225,194,133,254,0,246,88,251,166,92,46,250,121,200,45,236,247,239,151,152,63,91,119,197,64,140,54,26,12,150,232,247,54,95,248,182,103, + 7,47,73,107,79,39,177,76,38,28,2,96,115,99,118,74,175,215,95,6,224,95,173,202,219,86,70,229,29,127,142,213,235,52,26,77,215,198,196,83, + 131,251,132,217,250,224,131,15,192,24,195,213,171,87,235,53,89,79,137,177,41,131,94,93,194,21,201,159,74,6,14,0,40,203,215,192,160,43,45,3, + 226,173,238,242,7,135,59,101,240,140,101,92,14,151,143,171,251,214,32,43,62,162,233,115,178,128,41,47,127,49,152,75,22,66,122,76,30,14,47,249, + 19,45,178,178,240,195,16,64,200,173,0,0,124,115,29,144,10,128,249,75,63,195,230,87,91,131,199,169,253,89,128,143,195,4,166,188,242,197,96,174, + 197,66,72,139,206,65,196,169,27,72,186,115,204,84,146,87,190,66,151,97,250,148,72,107,115,95,94,85,156,22,11,33,37,60,27,161,223,95,69,114, + 68,174,65,87,108,216,169,229,152,223,163,70,60,148,184,138,201,225,49,20,164,151,162,32,163,20,145,127,220,71,244,133,36,157,174,176,124,181,204,132, + 117,185,25,182,165,242,168,98,130,8,233,177,121,136,187,156,138,243,219,242,144,155,80,84,97,54,211,25,6,238,183,69,41,166,115,54,49,25,155,50, + 109,197,24,46,135,203,65,94,122,33,242,210,138,112,255,70,50,174,165,21,33,39,41,183,84,87,164,95,150,243,0,95,217,50,127,140,203,48,229,139, + 229,222,92,161,144,161,184,196,140,146,18,51,74,74,76,40,41,53,35,37,207,128,219,247,180,184,122,179,12,185,5,166,80,128,51,255,97,102,69,131, + 23,116,14,99,83,54,181,233,203,37,0,49,218,66,220,40,205,193,14,205,125,220,211,21,102,151,83,197,102,19,44,91,30,150,106,109,203,111,197,56, + 83,251,77,126,159,147,20,126,1,113,161,103,111,106,226,35,187,112,251,79,225,222,185,119,222,100,98,236,103,158,88,82,126,253,225,159,186,156,110,255, + 148,196,100,198,232,13,122,195,93,155,248,181,72,67,26,109,75,113,203,47,222,59,249,222,178,249,125,230,227,179,243,159,161,180,188,244,203,36,74,178, + 106,56,246,33,61,44,97,140,141,57,19,119,230,163,63,19,254,124,183,167,119,111,59,51,227,224,108,202,181,236,50,139,105,109,121,201,125,171,204,7, + 227,112,167,124,182,113,27,151,44,22,60,136,189,139,123,183,174,224,110,244,183,72,137,139,184,105,178,152,94,164,98,77,189,147,254,107,19,17,77,9, + 10,10,226,228,228,228,32,35,35,227,154,78,167,91,105,43,163,174,56,45,102,51,110,134,134,226,236,182,133,200,188,119,237,112,121,153,100,58,81,137, + 245,237,91,179,154,245,23,137,53,52,242,165,84,42,127,47,45,45,125,78,44,22,255,160,211,233,22,84,205,27,98,140,201,164,82,233,103,6,131,97, + 158,84,42,77,40,42,42,122,234,209,54,117,57,222,129,109,248,71,116,6,211,4,137,136,119,170,76,103,122,43,44,131,82,1,160,147,11,147,202,165, + 252,207,76,70,243,191,132,2,126,206,165,248,114,55,107,153,77,209,95,193,100,143,198,35,55,61,247,220,115,111,58,56,56,224,196,137,19,13,154,172, + 26,191,242,198,129,177,85,0,234,154,215,84,2,96,37,21,196,214,155,92,176,14,166,25,132,109,84,24,251,77,3,187,217,32,83,209,130,141,99,12, + 171,56,196,228,124,19,71,193,183,112,244,2,19,247,137,187,192,28,197,70,213,71,163,157,149,189,218,200,17,153,170,197,250,83,233,95,158,77,160,119, + 235,99,130,97,21,1,58,0,87,24,195,37,152,112,185,36,221,186,121,130,245,197,9,64,199,8,23,0,252,81,76,184,66,105,54,223,177,86,27,211, + 194,24,30,128,240,192,66,136,35,1,78,149,198,91,151,228,182,62,38,128,120,70,120,104,97,136,230,0,199,139,82,168,176,49,76,7,31,54,14,96, + 171,64,48,131,33,14,96,177,140,89,98,153,9,177,82,19,98,147,172,52,153,79,244,104,181,124,28,39,135,1,69,4,20,85,189,18,161,8,64,146, + 145,131,211,9,9,84,239,208,102,117,166,191,212,110,28,24,91,69,128,142,24,110,113,136,66,25,227,132,222,43,43,136,107,104,200,177,46,230,227,115, + 158,232,26,76,230,69,224,241,251,242,97,89,192,55,155,191,215,150,60,220,9,0,30,210,214,163,121,22,243,219,0,118,39,235,147,247,53,196,180,86, + 173,68,173,230,17,163,201,4,58,153,82,158,178,178,230,62,88,195,236,202,186,242,243,68,69,253,12,60,102,209,148,121,92,109,40,141,73,29,223,119, + 29,192,66,65,8,129,5,55,168,56,198,166,161,184,26,61,90,227,136,104,21,128,91,140,177,15,181,90,109,163,242,101,213,22,39,35,179,142,131,138, + 27,48,151,255,102,42,209,88,149,124,184,46,230,179,82,51,179,185,71,203,42,53,148,58,30,64,23,0,157,234,89,238,195,227,241,134,215,177,172,214, + 135,78,246,242,66,80,55,79,244,175,139,217,213,13,237,187,183,224,78,178,133,217,148,242,87,50,1,116,194,163,97,178,90,31,10,252,223,18,231,191, + 147,89,215,227,121,254,219,226,108,102,54,51,155,153,205,204,102,230,191,143,249,119,45,13,14,29,18,213,61,39,163,114,121,28,108,152,8,15,0,215, + 147,41,188,190,229,183,50,232,62,128,38,39,46,252,95,16,17,69,2,104,112,130,237,223,89,181,61,158,167,89,205,106,86,179,154,213,172,191,131,108, + 75,44,213,172,102,53,171,89,205,106,86,179,154,213,44,171,197,0,12,173,109,1,217,48,246,202,24,171,149,81,159,26,226,55,51,155,153,205,204,102, + 102,51,179,153,217,204,252,251,49,27,98,219,226,63,254,39,244,239,28,151,196,255,200,184,112,51,179,153,217,204,108,102,54,51,155,153,205,204,191,150, + 249,119,45,214,228,209,106,86,179,154,213,8,29,62,124,248,169,28,103,182,104,210,164,73,214,165,83,56,204,184,40,240,109,5,34,119,112,133,153,200, + 140,140,199,82,235,239,194,171,147,169,9,240,134,196,232,2,147,56,7,154,136,132,38,51,155,213,172,102,253,109,213,114,208,116,81,245,255,147,75,5, + 102,10,219,102,252,171,226,249,111,82,179,209,106,86,179,254,205,58,177,238,181,32,99,133,233,7,87,207,150,97,222,109,3,106,77,36,249,219,245,216, + 128,203,145,241,65,224,240,95,219,181,107,151,109,185,154,114,252,124,192,195,74,112,224,6,170,120,8,167,128,149,64,237,137,53,109,98,10,44,159,195, + 204,241,4,85,196,193,217,119,21,128,38,231,144,106,214,127,159,236,20,188,177,237,218,120,109,76,77,211,72,219,181,119,51,69,69,37,189,89,88,98, + 58,254,87,199,213,172,255,13,49,198,152,71,255,127,237,229,240,212,35,24,145,144,193,34,34,130,209,93,108,46,119,233,53,103,146,230,198,102,155,242, + 250,253,29,245,31,159,12,47,16,8,52,140,49,139,68,34,57,194,24,123,42,79,86,179,154,245,172,196,24,115,171,60,207,44,2,129,64,99,227,182, + 114,62,159,191,68,38,147,93,16,139,197,217,98,177,56,91,46,151,95,224,243,249,75,24,99,79,61,246,168,46,157,88,247,90,144,163,157,242,204,206, + 95,47,183,105,235,229,252,162,135,189,48,248,95,51,95,246,169,94,76,60,233,40,177,107,219,41,9,137,41,126,110,110,110,231,166,79,159,30,96,117, + 160,63,118,146,130,99,30,101,48,90,60,206,68,22,58,107,203,205,62,224,152,70,227,123,31,171,99,172,149,201,99,195,245,21,22,175,189,161,90,151, + 50,131,201,31,132,166,49,43,197,24,179,19,10,133,103,24,99,142,13,175,221,172,255,132,186,117,235,176,229,210,197,29,45,191,92,255,150,211,193,31, + 23,184,181,110,237,178,188,41,188,0,198,186,117,231,243,23,248,51,54,132,217,250,220,179,102,253,207,73,222,125,154,218,66,52,102,216,216,105,234,225, + 19,255,41,29,54,113,38,119,248,243,51,69,93,251,12,87,113,200,208,168,164,227,127,55,253,199,141,150,209,104,116,206,205,205,101,123,246,236,25,167, + 82,169,30,242,249,252,69,140,49,193,127,58,142,191,74,10,133,226,154,74,165,210,216,217,217,105,84,42,213,237,134,234,255,142,98,140,249,56,59,59, + 39,59,56,56,60,145,22,196,57,232,249,62,237,251,189,186,212,177,195,132,129,77,228,11,248,124,254,34,149,74,245,112,207,158,61,227,210,211,211,153, + 209,104,116,182,97,251,1,106,181,250,94,72,72,200,39,185,185,185,3,83,111,236,116,202,10,217,230,148,252,231,250,65,183,78,125,243,137,157,157,234, + 46,99,108,64,67,156,227,171,95,235,228,104,167,60,179,234,199,63,149,148,114,137,255,207,121,139,248,73,247,35,122,29,251,245,215,54,85,235,124,185, + 231,100,203,27,241,165,253,246,31,248,137,79,128,224,226,197,139,66,165,82,249,199,244,233,211,253,235,65,255,191,244,22,23,112,184,131,163,51,181,210, + 204,98,163,75,88,146,86,1,112,7,193,128,198,255,136,41,178,184,0,52,36,60,77,39,187,150,239,228,114,57,190,92,9,14,103,48,244,204,181,209, + 204,74,113,56,156,55,45,22,203,48,129,64,240,118,83,89,205,122,54,146,74,164,98,16,65,46,19,3,32,112,154,104,141,132,28,78,223,107,227,198, + 125,254,97,96,224,60,63,96,108,109,102,139,61,210,191,252,253,253,79,51,198,94,105,218,59,62,193,92,227,231,231,151,206,24,179,234,89,143,53,182, + 175,181,93,10,10,234,213,167,223,160,145,75,59,116,235,53,240,89,49,255,78,42,9,221,147,207,96,254,215,111,71,190,79,56,121,224,219,194,63,126, + 222,140,27,191,253,128,236,132,16,116,247,208,181,101,140,77,249,171,99,252,171,101,181,209,122,177,53,235,59,165,13,187,248,114,107,86,242,74,27,86, + 58,173,13,187,50,169,117,253,143,74,169,75,14,14,14,24,48,96,0,55,61,61,93,242,222,123,239,45,21,139,197,137,140,177,17,141,97,73,165,210, + 91,50,153,44,149,207,231,63,17,139,76,38,187,37,151,203,83,249,124,254,115,213,235,149,74,229,53,149,74,165,81,42,149,181,154,25,133,66,113,75, + 165,82,105,20,10,197,19,207,231,226,243,249,207,41,20,138,52,165,82,89,179,126,136,82,169,76,173,89,95,151,248,124,190,103,106,106,170,115,90,90, + 154,179,80,40,116,169,94,159,146,146,226,156,154,154,250,68,189,45,226,243,249,67,228,114,121,170,76,38,123,42,70,185,92,158,90,115,159,234,82,181, + 99,87,215,49,109,212,231,14,60,106,120,134,15,31,126,37,51,51,211,203,206,206,206,174,250,50,123,149,221,136,31,118,110,122,119,252,232,225,111,58, + 7,76,236,212,72,254,8,177,88,156,248,222,123,239,45,77,79,79,151,244,238,221,155,203,225,88,255,123,130,49,54,116,252,248,241,71,53,26,141,71, + 80,80,16,215,100,50,33,250,216,18,72,35,222,134,56,113,43,90,72,114,120,15,127,95,229,57,124,80,183,163,13,221,141,83,97,44,159,255,209,202, + 77,2,83,90,40,95,123,101,61,116,55,54,113,94,13,238,139,179,231,206,62,222,183,111,246,159,237,252,195,143,123,121,89,89,89,44,35,35,3,90, + 173,86,254,213,87,95,149,233,245,250,5,13,6,123,56,64,0,102,25,96,33,114,186,151,174,119,10,30,247,34,239,78,170,206,201,104,54,219,3,220, + 65,216,221,82,212,32,163,54,38,207,216,223,66,228,114,46,137,239,52,248,165,121,220,243,73,60,39,163,217,236,0,14,6,54,138,89,41,198,24,159, + 203,229,190,187,126,253,122,14,128,185,140,49,97,99,89,255,139,234,233,193,60,158,107,199,11,237,234,206,250,62,43,38,99,172,131,76,38,187,197,24, + 243,105,42,107,199,174,211,244,210,148,181,201,15,30,106,62,107,10,199,96,177,196,30,72,72,248,109,106,219,182,99,62,12,12,156,94,211,108,85,254, + 189,104,213,170,85,211,162,163,163,157,90,183,110,61,139,49,214,164,31,253,149,204,45,171,86,173,122,63,58,58,218,189,85,171,86,159,218,194,172,175, + 93,82,57,57,140,216,177,227,187,119,71,141,24,253,102,64,143,126,86,183,75,245,49,255,110,74,191,188,105,119,218,229,175,218,100,92,219,170,78,186, + 180,101,112,202,149,109,247,135,250,114,48,107,198,52,168,213,234,119,158,209,219,8,1,12,6,16,12,224,57,0,61,42,255,238,94,89,130,241,40,139, + 66,245,215,238,149,219,86,45,239,89,7,35,184,150,237,186,87,171,175,254,127,205,191,27,22,17,225,196,137,19,84,253,181,102,121,185,21,150,205,235, + 227,161,189,119,124,31,149,166,38,80,65,204,29,186,179,253,11,154,215,221,73,59,165,53,86,219,120,167,2,17,17,93,189,122,149,162,163,163,169,180, + 180,148,238,223,191,79,61,123,246,212,73,165,210,115,0,90,217,194,83,40,20,154,115,231,206,209,240,225,195,139,228,114,249,58,0,28,34,130,82,169, + 212,92,189,122,149,134,15,31,94,164,80,40,54,2,224,18,17,94,120,225,133,108,34,34,39,39,167,140,218,120,227,199,143,47,32,34,82,169,84,154, + 202,120,185,10,133,98,227,91,111,189,85,122,243,230,77,82,171,213,85,245,28,165,82,185,110,238,220,185,165,97,97,97,143,235,27,42,246,246,246,169, + 102,179,153,142,31,63,78,206,206,206,143,99,80,171,213,169,102,179,153,142,30,61,90,103,108,245,28,83,142,92,46,95,59,117,234,212,146,164,164,36, + 114,112,112,208,84,171,95,247,234,171,175,150,164,164,164,144,163,163,163,85,49,58,56,56,104,174,93,187,70,207,63,255,124,113,245,99,234,224,224,160, + 185,126,253,122,85,253,218,170,250,250,138,187,187,251,44,103,103,231,12,103,103,231,12,59,59,187,21,110,110,110,89,57,57,57,68,68,212,166,77,155, + 108,34,130,83,224,196,62,237,250,78,91,234,220,97,220,59,91,15,93,15,185,20,149,151,19,56,236,205,181,170,192,241,79,101,136,175,231,24,180,146, + 74,165,231,6,14,28,168,75,77,77,165,178,178,50,138,136,136,160,171,87,175,210,131,7,15,168,242,188,107,136,161,144,203,229,233,229,229,229,150,242, + 242,114,75,78,78,142,57,59,59,219,28,179,206,141,232,123,254,227,82,120,116,44,101,93,90,105,81,202,165,105,0,20,117,241,94,233,38,243,159,51, + 64,157,85,18,246,99,113,209,79,83,169,240,240,63,13,139,134,171,245,103,55,204,56,75,49,135,183,83,204,225,237,171,222,153,124,225,249,137,227,203, + 179,53,89,166,216,216,88,10,9,9,201,80,171,213,185,18,137,164,115,131,251,189,41,192,147,182,249,30,184,187,196,43,230,210,170,145,70,74,58,79, + 251,166,59,25,47,190,227,241,144,182,248,253,76,219,252,91,216,114,30,61,102,110,241,223,23,241,177,87,236,55,159,254,203,152,156,156,76,11,94,29, + 105,58,59,207,35,158,182,250,29,106,20,243,255,143,239,228,137,19,39,150,166,164,164,80,64,64,64,25,151,203,157,209,88,214,255,90,233,225,14,143, + 161,62,194,244,136,189,11,44,99,59,72,243,186,184,161,111,83,153,0,58,56,59,59,231,238,222,189,155,20,10,69,54,0,159,198,112,198,7,247,41, + 208,21,157,163,224,17,129,5,13,188,223,187,29,59,118,12,3,240,124,3,235,49,63,96,220,158,192,192,163,150,73,147,204,123,2,3,143,250,1,227, + 240,40,157,16,3,240,209,154,53,107,194,140,70,99,216,174,93,187,194,198,141,27,23,6,224,253,38,28,7,6,96,219,234,213,171,201,104,52,210,174, + 93,187,104,220,184,113,4,224,235,186,182,177,166,93,10,12,236,217,167,239,192,17,75,59,116,238,249,206,161,95,79,133,68,198,36,228,12,27,249,252, + 218,192,192,129,181,182,75,214,48,255,27,139,82,169,108,29,24,24,184,199,223,223,63,57,40,40,168,220,223,223,191,220,215,215,55,41,48,48,112,143, + 82,169,108,221,200,207,100,228,144,33,67,232,226,197,139,212,167,79,159,28,107,183,107,192,139,244,88,184,112,225,34,0,180,112,225,194,69,68,20,92, + 217,174,7,87,255,187,230,43,17,13,173,254,127,109,140,170,82,27,179,182,247,168,241,119,195,199,163,106,167,78,156,56,49,240,196,137,19,23,107,174, + 240,98,107,244,153,215,199,67,167,203,201,164,168,47,222,166,11,131,61,233,234,32,87,138,123,119,34,101,238,221,72,115,58,171,181,147,90,99,176,13, + 31,0,17,17,133,133,133,81,88,88,24,221,190,125,155,18,19,19,169,168,168,136,14,30,60,104,118,112,112,208,137,68,162,85,0,36,86,158,36,26, + 34,162,242,242,114,90,177,98,133,94,161,80,220,6,224,82,105,148,168,176,176,144,86,173,90,165,87,169,84,17,0,220,29,29,29,83,19,18,18,200, + 197,197,165,86,51,163,86,171,53,177,177,177,164,86,171,53,0,60,212,106,117,212,177,99,199,42,136,136,210,210,210,200,222,222,94,3,192,197,193,193, + 225,206,137,19,39,42,136,136,50,50,50,200,222,222,222,106,163,165,211,233,232,236,217,179,79,196,80,85,127,250,244,233,39,12,152,21,199,211,69,165, + 82,133,29,60,120,208,96,54,155,41,42,42,138,84,42,149,6,128,139,157,157,221,237,67,135,14,25,204,102,51,197,196,196,88,109,6,91,182,108,153, + 77,68,100,50,153,104,235,214,173,229,85,199,180,170,222,96,48,208,230,205,155,203,149,74,101,24,0,151,250,88,142,142,142,25,6,131,129,10,11,11, + 169,103,207,158,165,87,175,94,165,226,226,98,34,34,170,228,193,119,224,140,207,66,238,151,22,255,243,131,77,63,181,234,49,229,139,223,66,211,211,118, + 252,122,43,204,177,195,248,145,86,236,191,68,36,18,173,114,115,115,211,95,190,124,217,92,81,81,65,41,41,41,116,251,246,237,199,231,88,100,100,164, + 85,70,139,199,227,45,9,9,9,169,48,155,205,150,220,220,92,115,118,118,182,57,59,59,219,84,211,104,209,247,124,202,61,253,58,157,220,62,223,32, + 16,8,150,212,197,59,116,232,16,247,149,110,50,255,89,189,100,89,49,155,198,22,46,26,174,214,159,169,52,89,74,165,130,170,204,214,138,249,147,47, + 12,26,208,175,252,204,201,19,121,149,38,171,235,161,67,135,184,245,198,123,8,92,218,230,59,158,182,249,134,237,158,234,152,91,114,123,63,209,239,243, + 41,254,179,214,180,100,164,162,196,178,205,55,140,182,249,77,162,101,3,121,214,158,75,116,8,92,218,238,63,150,182,249,134,173,126,209,59,239,78,216, + 77,186,120,241,34,109,222,184,134,230,13,245,40,179,108,243,13,163,45,254,207,219,196,172,86,68,34,209,253,43,87,174,208,165,75,151,232,211,79,63, + 37,169,84,154,210,24,206,147,49,251,11,104,139,143,55,109,106,63,136,118,182,119,163,63,27,23,219,191,179,244,112,135,199,48,31,97,90,238,157,95, + 137,242,31,80,214,186,0,26,233,203,111,146,217,170,52,89,57,73,73,73,148,149,149,69,27,54,108,32,165,82,217,40,179,53,62,184,79,129,174,240, + 143,122,141,22,128,101,95,126,249,37,25,141,70,106,215,174,221,125,43,226,123,202,108,249,2,227,1,44,94,187,118,237,99,147,181,105,211,166,176,200, + 200,200,48,47,47,175,83,141,60,14,12,192,246,181,107,215,62,54,89,155,54,109,162,200,200,72,242,246,246,78,173,107,59,107,218,165,129,195,130,63, + 139,139,79,43,254,224,163,229,63,245,232,51,244,139,208,59,247,210,126,57,241,123,88,135,160,158,181,182,75,214,48,159,65,225,17,145,176,178,240,137, + 168,202,188,242,0,240,171,58,20,172,41,147,38,77,18,247,235,215,47,100,202,148,41,101,123,246,236,161,164,164,36,138,142,142,166,117,235,214,209,178, + 101,203,232,251,239,191,167,151,94,122,169,172,103,207,158,33,147,38,77,18,219,240,153,4,120,122,122,22,29,62,124,152,246,239,223,79,34,145,104,191, + 181,219,214,231,69,168,14,51,85,151,193,170,185,172,30,35,86,175,97,107,232,253,172,217,175,234,93,171,127,6,7,7,15,68,13,241,8,203,223,120, + 239,51,113,226,238,13,208,28,252,22,220,66,13,248,37,121,40,191,114,18,198,43,199,48,173,119,111,137,132,177,207,107,110,215,144,132,66,33,132,66, + 33,4,2,1,180,90,45,50,50,50,208,175,95,63,206,237,219,183,197,179,102,205,154,47,145,72,82,24,99,19,26,226,84,245,72,95,187,118,13,175, + 191,254,186,232,199,31,127,12,114,114,114,10,55,155,205,66,0,136,137,137,193,203,47,191,44,218,191,127,127,71,119,119,247,219,21,21,21,82,145,72, + 4,46,183,246,59,239,25,99,16,10,133,48,26,141,162,246,237,219,71,132,135,135,119,24,51,102,12,63,57,57,25,9,9,9,48,26,141,66,31,31, + 159,200,219,183,111,7,5,7,7,243,83,83,83,145,156,156,12,102,229,156,79,198,24,12,6,3,68,34,17,170,15,105,49,198,80,94,94,14,161,80, + 104,53,139,207,231,15,241,243,243,139,12,15,15,239,50,126,252,120,193,205,155,55,145,150,150,6,179,217,44,244,247,247,143,12,15,15,239,60,110,220, + 56,65,68,68,4,52,26,13,172,29,66,171,90,47,60,60,28,255,248,199,63,132,103,206,156,233,236,230,230,22,97,50,153,132,0,16,25,25,137,151, + 95,126,89,248,219,111,191,117,105,209,162,69,68,3,67,137,92,0,48,26,141,152,53,107,150,76,169,84,34,53,53,21,22,139,5,102,243,163,236,5, + 121,5,121,145,225,145,81,49,211,38,191,56,80,87,81,94,126,61,244,214,189,54,45,189,61,25,163,150,245,197,201,24,155,32,147,201,82,214,173,91, + 247,78,82,82,146,200,207,207,143,19,31,31,143,146,146,18,8,4,130,199,231,152,181,251,45,20,10,7,5,4,4,240,244,122,61,44,22,11,0,16, + 135,83,251,140,21,113,225,21,248,187,152,248,18,137,100,80,125,204,9,239,127,31,87,98,194,115,159,126,247,219,195,50,142,122,215,205,152,212,227,203, + 55,108,143,44,46,46,129,178,231,140,153,203,55,108,143,52,105,115,143,24,10,82,247,61,255,252,196,212,242,242,242,145,187,119,239,174,247,17,85,0, + 128,226,0,7,88,48,44,57,199,32,18,217,121,42,228,110,62,64,202,37,180,118,18,129,203,225,138,111,38,104,101,0,13,131,87,174,131,85,59,255, + 152,105,25,150,144,109,16,25,237,59,202,221,61,189,144,151,151,135,22,109,252,160,23,58,9,175,61,40,147,131,217,200,172,20,99,172,127,251,246,237, + 93,219,181,107,135,220,220,92,116,233,210,5,106,181,90,205,24,27,102,43,235,177,118,183,20,161,24,125,193,216,122,112,57,159,194,200,91,137,7,57, + 93,176,189,43,191,209,204,103,172,158,30,204,67,41,23,222,216,127,224,160,135,131,151,63,112,242,159,112,177,19,97,231,155,93,236,157,84,162,163,141, + 25,70,100,140,117,112,113,113,57,31,18,18,226,40,22,139,113,251,246,109,4,4,4,96,195,134,13,78,106,181,250,146,237,195,136,143,126,208,83,221, + 239,183,236,203,47,191,92,58,119,238,92,236,221,187,23,237,218,181,107,199,24,155,91,47,145,136,98,128,227,171,35,34,118,253,248,240,225,137,169,109, + 219,142,153,210,190,253,23,179,95,121,229,181,127,253,235,95,88,179,102,13,142,30,61,138,190,125,251,226,141,55,222,48,166,164,164,236,177,45,230,199, + 195,133,219,215,173,91,247,250,252,249,243,107,50,43,146,147,147,87,215,179,121,131,237,82,65,110,65,100,100,84,84,204,228,201,175,12,172,48,149,151, + 135,94,15,185,215,170,101,75,79,70,117,182,75,13,50,155,32,6,64,12,64,90,89,100,0,164,251,247,239,87,141,31,63,94,89,89,39,1,32,97, + 140,53,56,188,239,231,231,231,154,158,158,158,246,246,219,111,247,216,187,119,175,84,38,147,161,184,184,24,59,119,238,196,130,5,143,102,45,24,141,70, + 108,223,190,93,250,250,235,175,247,72,76,76,76,243,246,246,110,112,142,38,99,76,36,151,203,15,173,89,179,70,201,231,243,177,100,201,146,130,242,242, + 242,15,42,151,45,81,42,149,33,140,177,225,13,96,106,245,34,213,222,227,68,245,255,137,104,76,205,186,154,203,136,104,76,125,12,91,84,223,251,213, + 165,234,87,160,65,39,79,158,188,248,20,20,8,116,109,229,139,162,223,15,65,194,99,144,112,43,11,143,129,19,31,137,22,98,62,140,68,29,108,13, + 182,234,34,88,85,248,124,62,180,90,45,204,102,51,22,130,41,222,144,0,0,32,0,73,68,65,84,45,90,36,58,123,246,172,3,135,195,249,185,33, + 78,117,195,20,23,23,7,127,127,127,118,252,248,113,151,185,115,231,74,170,222,167,168,168,8,237,218,181,99,167,79,159,118,254,248,227,143,229,245,153, + 25,198,24,4,2,1,230,207,159,47,9,13,13,181,119,119,119,71,124,124,60,242,243,243,33,151,203,49,127,254,124,73,72,72,136,147,187,187,59,146, + 146,146,80,84,84,4,185,92,110,179,209,18,8,4,79,108,195,24,67,69,69,133,77,198,64,165,82,237,11,11,11,115,82,169,84,136,136,136,128,201, + 100,130,74,165,194,188,121,243,36,97,97,97,78,118,118,118,136,137,137,1,17,65,169,84,218,20,35,0,88,44,22,196,196,196,160,101,203,150,184,116, + 233,146,243,236,217,179,197,85,245,15,30,60,128,167,167,39,46,93,186,228,44,147,201,246,213,197,178,88,44,200,204,204,68,116,116,52,226,227,227,145, + 147,147,131,220,220,92,148,148,148,192,100,50,1,0,164,37,197,39,247,255,116,60,92,34,145,72,3,124,218,123,69,70,221,205,150,72,36,82,111,47, + 47,31,198,62,173,243,96,112,56,156,159,147,147,147,29,166,79,159,46,200,202,202,66,65,65,1,120,60,222,83,231,150,80,104,221,84,32,147,201,228, + 47,22,139,89,69,69,69,85,87,50,132,66,33,222,217,167,69,192,18,60,81,94,217,152,13,50,27,97,48,24,26,156,180,62,225,253,239,227,158,255, + 104,111,175,126,211,191,152,231,59,236,245,173,190,195,94,223,10,0,41,41,41,108,253,161,208,111,124,135,189,190,245,237,79,214,190,177,251,199,125,221, + 172,50,89,140,49,48,67,123,48,214,229,70,124,153,125,255,49,147,5,72,56,3,88,140,0,135,135,65,129,158,188,163,145,101,46,32,4,162,28,126, + 128,21,31,60,99,12,168,104,7,176,110,103,239,155,28,250,78,124,83,144,158,158,14,129,64,0,145,72,132,46,67,94,224,237,15,55,186,130,33,8, + 21,240,181,138,89,77,18,137,228,147,165,75,151,202,170,51,103,204,152,33,83,169,84,75,109,225,60,214,238,150,34,148,73,123,195,76,111,71,167,235, + 188,87,156,204,242,139,207,214,249,129,240,30,96,236,220,84,179,197,24,27,36,22,139,19,24,99,253,26,203,232,233,193,60,148,10,225,245,3,7,14, + 122,216,183,120,100,178,96,210,3,124,9,92,157,236,176,243,157,193,246,78,118,18,155,204,86,165,201,58,119,227,198,13,71,177,88,140,176,176,48,8, + 4,2,136,197,98,116,234,212,9,219,182,109,115,178,183,183,183,217,108,17,8,181,57,173,42,147,245,214,91,111,97,239,222,189,40,47,47,199,138,21, + 43,224,237,237,61,185,65,102,165,217,90,21,17,177,251,139,168,168,7,139,58,118,244,157,32,147,217,191,245,143,127,168,62,254,248,227,19,199,142,29, + 219,21,28,28,156,27,26,26,250,37,17,29,178,37,222,74,147,245,221,250,245,235,103,86,25,183,143,63,254,120,215,177,99,199,86,6,7,7,103,134, + 134,134,190,75,68,155,234,218,222,154,118,169,164,80,112,242,208,161,67,225,98,169,68,234,211,222,215,43,234,94,84,182,88,42,145,122,121,183,242,97, + 159,62,221,46,89,195,108,140,156,157,157,135,222,184,113,35,0,128,0,128,8,149,70,43,42,42,202,174,184,184,216,78,46,151,219,185,185,185,41,42, + 235,37,19,39,78,180,227,243,249,253,235,99,234,245,250,35,139,22,45,178,159,56,113,34,0,160,180,180,20,215,175,95,199,142,29,59,32,147,201,158, + 88,119,244,232,209,120,243,205,55,237,77,38,211,17,43,194,125,117,214,172,89,190,46,46,46,88,184,112,97,121,124,124,252,96,34,74,103,140,169,134, + 14,29,186,44,58,58,186,71,143,30,61,142,51,198,186,214,195,168,213,139,84,169,166,105,170,171,174,177,235,91,35,91,183,127,124,178,4,7,7,95, + 4,80,235,157,84,21,249,26,136,96,134,132,203,32,229,86,51,91,176,128,87,148,109,99,147,251,72,181,93,12,133,66,33,184,92,46,12,6,3,242, + 242,242,172,226,84,153,2,165,82,9,185,92,14,157,78,7,147,201,4,177,88,12,0,80,169,84,80,42,149,224,243,249,224,243,249,16,139,197,79,245, + 38,85,23,135,195,129,64,32,128,76,38,67,102,102,38,146,147,147,97,177,88,32,151,203,33,147,201,32,20,10,145,145,145,129,140,140,12,16,17,100, + 50,25,100,50,153,213,230,8,0,204,102,115,173,23,127,163,209,104,83,143,150,201,100,194,189,123,247,144,146,146,2,177,88,252,120,95,69,34,17,30, + 60,120,128,172,172,44,72,165,82,40,149,74,168,84,42,171,185,85,251,162,80,40,32,145,72,80,80,80,0,173,86,251,248,152,42,149,74,200,100,50, + 20,21,21,33,59,59,187,222,125,55,155,205,200,200,200,64,78,78,14,82,83,83,145,155,155,251,184,1,170,236,53,106,146,138,139,139,145,151,151,247, + 184,39,178,174,98,141,44,22,11,74,74,74,112,227,198,13,102,177,88,80,88,88,104,201,201,202,50,207,201,16,226,232,178,45,116,240,204,29,253,254, + 83,97,186,35,231,162,117,155,142,68,234,196,61,63,109,124,235,137,71,231,102,74,74,10,155,57,115,166,109,73,253,54,119,80,193,200,31,158,91,106, + 20,229,84,8,84,46,29,134,2,9,167,1,14,15,16,171,209,171,99,107,36,23,152,101,177,26,131,24,12,35,176,201,71,109,21,211,204,31,150,83, + 98,20,37,85,56,41,253,3,187,66,163,209,64,36,18,65,36,18,161,91,223,161,72,200,51,75,239,166,235,164,32,12,183,138,89,41,198,88,27,185, + 92,222,187,95,191,126,172,58,115,244,232,209,96,140,117,98,140,249,217,180,255,223,180,21,162,66,218,11,124,122,251,110,166,214,253,104,148,222,103,236, + 132,23,236,55,254,145,237,23,147,169,111,5,139,105,1,168,162,107,99,205,22,99,108,160,66,161,56,241,205,55,223,180,18,139,197,167,25,99,245,94, + 180,234,146,92,194,221,250,201,91,147,61,212,85,38,203,168,5,120,18,128,47,1,120,18,184,58,59,226,243,215,135,217,75,197,124,107,46,96,0,0, + 137,68,178,127,211,166,77,78,53,77,86,85,233,210,165,11,150,44,89,226,100,111,111,95,231,143,159,234,178,151,11,253,139,139,75,248,32,160,76,171, + 21,218,203,133,143,127,56,84,55,89,107,214,172,193,241,227,199,209,171,87,47,204,156,57,179,36,57,57,121,101,125,92,198,216,48,165,82,185,103,240, + 224,193,55,210,100,178,57,169,129,129,252,115,42,85,209,115,69,69,42,239,168,40,163,47,16,9,96,115,106,106,234,72,107,77,22,99,236,37,165,82, + 25,58,100,200,144,10,153,76,166,89,181,106,213,140,185,115,231,98,205,154,53,88,188,120,241,46,0,51,137,232,163,212,212,84,247,250,76,22,240,239, + 105,151,254,93,109,157,197,98,73,61,116,232,80,143,138,138,10,79,60,26,30,20,21,22,22,42,243,243,243,21,21,21,21,50,139,197,34,179,179,179, + 147,3,144,78,155,54,141,23,29,29,29,96,50,153,210,235,99,38,39,39,79,91,180,104,145,38,55,55,23,0,208,169,83,39,228,228,228,96,193,130, + 5,143,123,180,58,119,238,12,34,66,126,126,62,86,175,94,157,149,145,145,49,205,138,112,219,182,111,223,30,81,81,81,136,139,139,251,3,128,153,49, + 166,0,80,114,251,246,237,152,188,188,60,236,219,183,79,224,225,225,113,172,174,20,47,245,121,145,70,234,100,99,54,170,234,185,170,173,71,204,86,113, + 0,32,56,56,152,85,127,173,46,46,67,68,202,173,75,176,239,208,245,137,222,44,41,151,65,162,84,33,33,53,25,2,176,104,91,223,184,174,11,98, + 65,65,1,230,204,153,163,155,50,101,74,158,197,98,121,161,193,29,168,188,200,171,84,42,168,84,42,220,189,123,151,158,127,254,121,205,134,13,27,116, + 85,245,74,165,18,113,113,113,52,124,248,240,236,165,75,151,150,214,103,180,170,122,180,86,173,90,165,27,52,104,80,78,116,116,52,85,153,41,185,92, + 142,117,235,214,233,6,15,30,172,185,121,243,38,85,213,217,210,163,197,225,112,30,27,173,234,219,112,56,28,88,44,22,155,140,86,89,89,217,148,224, + 224,96,77,76,76,12,85,237,167,74,165,194,134,13,27,116,195,134,13,211,68,71,71,83,85,157,82,169,180,218,12,86,189,191,66,161,128,82,169,196, + 221,187,119,105,248,240,225,154,175,191,254,90,95,189,254,222,189,123,52,110,220,56,77,73,73,73,157,183,239,90,44,22,84,13,231,153,76,38,232,245, + 122,228,230,230,34,53,53,245,113,119,186,78,166,28,57,249,165,177,65,58,157,78,123,55,238,126,74,167,142,1,206,58,157,78,155,156,146,18,71,180, + 180,206,22,202,98,177,188,208,161,67,135,188,57,115,230,232,10,10,10,154,108,180,132,66,97,12,143,199,163,254,253,251,147,193,96,160,212,212,84,99, + 110,65,129,201,239,139,47,40,250,157,119,152,228,214,45,145,92,46,103,149,76,78,124,124,188,69,34,145,196,88,5,175,67,141,50,91,28,139,43,24, + 245,187,124,191,212,110,216,216,151,133,44,43,20,168,40,5,68,106,64,164,6,79,230,128,81,253,59,115,119,223,40,118,5,89,250,64,32,242,108,144, + 201,39,23,192,210,255,247,56,189,186,223,164,121,194,252,252,124,112,185,220,199,166,72,42,147,225,185,9,211,56,223,135,150,187,2,212,23,140,219,48, + 179,82,66,161,240,131,79,62,249,68,80,80,80,0,14,135,243,255,76,169,20,179,103,207,22,41,149,202,197,86,239,251,225,0,1,248,162,94,176,208, + 219,177,89,58,247,99,17,58,159,247,86,238,148,116,232,220,3,179,6,57,75,86,158,202,14,8,79,215,182,2,204,239,194,100,232,102,171,217,98,140, + 245,87,40,20,39,111,221,186,37,29,61,122,52,214,173,91,39,147,72,36,167,173,73,231,81,83,101,165,230,185,203,191,254,65,19,241,229,8,160,162, + 236,145,193,170,86,178,75,45,88,178,243,124,145,209,72,13,246,14,85,73,167,211,189,58,115,230,204,188,35,71,142,60,101,178,196,98,49,18,19,19, + 177,98,197,138,252,252,252,252,215,26,98,217,203,133,254,193,99,7,133,237,222,245,133,12,32,124,187,113,158,100,208,144,128,168,94,61,123,232,21,10, + 69,226,234,213,171,151,206,153,51,167,202,200,124,250,235,175,191,206,29,55,110,92,196,173,91,183,166,18,81,157,67,39,140,177,97,115,231,206,253,34, + 35,35,195,255,252,249,243,188,172,172,44,245,7,43,86,20,29,200,203,203,95,25,21,21,247,81,199,142,237,22,6,6,190,86,87,234,135,58,152,47, + 189,245,214,91,7,211,211,211,187,159,63,127,158,159,153,153,233,52,105,210,36,172,92,185,178,186,201,178,218,205,88,211,46,201,212,134,145,47,190,248, + 98,144,94,171,211,198,221,143,77,233,232,223,209,89,175,213,105,83,146,19,227,104,233,211,237,146,53,204,198,40,47,47,239,193,190,125,251,238,207,157, + 59,183,107,90,90,154,63,0,135,146,146,18,89,73,73,137,200,96,48,72,212,106,181,186,115,231,206,142,111,188,241,134,252,246,237,219,1,233,233,233, + 37,0,146,234,99,18,81,124,70,70,198,200,209,163,71,231,23,20,20,160,99,199,142,24,55,110,28,220,220,220,224,230,230,134,113,227,198,33,32,32, + 0,133,133,133,120,229,149,87,114,51,51,51,71,18,81,188,21,225,62,204,202,202,66,159,62,125,176,124,249,242,49,47,190,248,98,116,255,254,253,139, + 59,118,236,88,218,162,69,139,54,95,125,245,21,60,60,60,112,232,208,33,55,145,72,244,83,205,141,235,243,34,0,114,42,13,143,161,198,107,78,3, + 203,172,221,182,214,191,173,88,175,65,53,120,229,173,0,150,236,57,180,91,47,244,106,7,149,111,16,164,98,49,36,66,33,36,106,7,148,91,44,216, + 145,152,165,45,35,178,190,161,172,84,205,11,33,99,12,223,126,251,173,169,119,239,222,250,243,231,207,127,163,211,233,188,136,232,215,134,56,213,77,193, + 215,95,127,173,157,63,127,126,120,118,118,118,144,88,44,54,84,213,127,243,205,55,218,105,211,166,69,165,165,165,117,145,74,165,218,186,230,103,85,241, + 42,135,54,202,179,179,179,123,204,152,49,35,102,243,230,205,101,82,169,20,50,153,12,34,145,200,144,157,157,29,52,103,206,156,240,181,107,215,106,37, + 18,9,100,50,153,77,195,114,68,244,148,161,170,94,111,173,140,70,227,249,236,236,236,160,249,243,231,223,249,234,171,175,202,170,12,80,245,24,215,175, + 95,175,149,203,229,54,245,104,85,173,39,147,201,176,113,227,70,237,188,121,243,194,179,179,179,131,68,34,145,161,90,125,217,220,185,115,239,100,103,103, + 7,25,141,198,243,117,177,204,102,179,185,184,184,24,60,30,15,81,81,81,229,2,129,0,28,14,7,15,30,60,120,220,248,216,219,219,7,4,117,234, + 232,247,195,254,67,23,37,2,145,168,119,143,110,254,241,73,201,105,68,172,161,198,226,87,157,78,231,117,254,252,249,111,122,247,238,173,255,246,219,111, + 77,117,245,108,89,163,242,242,242,139,183,111,223,54,138,197,98,150,153,153,105,226,114,185,48,155,205,84,222,163,71,121,167,175,190,162,187,11,23,50, + 165,76,198,19,8,4,144,74,165,236,204,153,51,6,173,86,123,209,42,120,61,178,217,108,113,32,5,131,228,126,118,185,66,204,49,49,196,253,250,200, + 100,137,237,0,177,26,16,171,225,225,225,137,208,68,173,2,28,8,97,182,34,135,24,145,12,12,210,40,13,20,124,161,132,101,101,101,61,54,68,85, + 165,85,59,127,220,78,46,149,131,145,8,92,216,146,130,100,140,131,131,3,47,51,51,243,41,102,64,64,0,215,104,52,90,159,218,37,195,236,6,88, + 230,198,101,235,221,127,9,215,250,188,179,242,123,137,196,92,8,220,250,26,29,218,184,227,157,73,157,133,31,31,205,233,112,51,73,219,6,60,154,13, + 75,169,147,181,104,198,88,63,133,66,113,250,230,205,155,82,133,66,129,248,248,120,244,232,209,3,219,183,111,151,74,165,210,83,140,177,122,231,227,213, + 212,141,44,74,46,45,49,247,254,224,80,74,86,68,166,233,9,147,149,83,70,152,185,250,88,97,65,177,254,133,235,41,117,127,127,106,138,136,238,20, + 22,22,14,95,188,120,113,94,78,78,206,19,38,43,57,57,25,147,39,79,206,207,201,201,25,68,68,13,254,248,101,60,44,88,241,249,219,162,208,208, + 40,140,12,126,219,116,251,206,3,44,124,127,60,199,217,73,37,138,136,136,104,249,194,11,47,84,25,153,79,137,104,25,17,109,74,78,78,14,34,162, + 122,179,198,43,20,138,41,43,87,174,196,177,99,199,208,165,75,23,221,145,35,71,192,229,114,113,248,247,223,147,246,221,191,191,168,106,206,86,109,169, + 31,234,97,190,187,114,229,74,28,63,126,28,93,186,116,41,251,229,151,95,192,225,112,176,118,237,218,92,216,104,178,0,235,218,37,59,59,117,64,167, + 142,29,253,246,239,63,112,81,192,19,137,122,244,238,233,159,152,148,148,70,172,246,118,201,26,102,99,68,68,148,155,155,123,245,187,239,190,187,62,100, + 200,16,217,212,169,83,157,143,30,61,234,160,213,106,221,5,2,129,139,193,96,16,222,189,123,151,119,248,240,97,183,123,247,238,37,234,116,186,80,170, + 156,149,94,159,10,11,11,35,238,221,187,55,34,48,48,240,222,134,13,27,210,92,92,92,44,175,191,254,58,94,127,253,117,184,184,184,88,54,110,220, + 152,214,167,79,159,232,216,216,216,145,101,101,101,145,86,134,187,235,139,47,190,184,186,127,255,126,140,29,59,22,171,87,175,198,129,3,7,112,225,194, + 5,201,229,203,151,133,219,183,111,135,64,32,64,175,94,189,48,98,196,136,129,204,134,228,207,0,110,226,81,239,212,31,53,94,111,54,176,204,218,109, + 235,250,187,161,245,26,150,53,51,230,255,209,6,203,102,119,84,104,175,77,237,69,89,111,244,35,205,203,254,116,101,160,61,205,104,203,202,94,109,100, + 122,7,157,78,247,184,28,57,114,132,92,93,93,203,20,10,133,205,233,29,92,93,93,53,197,197,197,212,189,123,247,124,39,39,167,199,169,8,220,220, + 220,52,101,101,101,212,171,87,175,124,103,103,231,199,233,29,60,61,61,83,137,136,188,189,189,107,189,179,207,213,213,85,99,50,153,200,213,213,181,42, + 69,2,223,222,222,126,75,207,158,61,243,53,26,13,185,185,185,61,78,157,224,228,228,180,174,71,143,30,79,212,91,17,111,106,90,90,26,165,165,165, + 81,139,22,45,50,170,215,39,39,39,83,114,114,50,121,122,122,218,156,222,193,201,201,105,109,205,88,26,27,163,151,151,151,70,167,211,81,159,62,125, + 158,56,166,94,94,94,26,189,94,95,85,111,85,122,7,137,68,50,75,44,22,103,136,197,226,12,145,72,180,162,101,203,150,217,63,253,244,19,109,220, + 184,145,20,10,197,163,244,14,1,227,122,183,235,243,218,71,78,1,227,223,107,74,122,7,133,66,113,206,213,213,181,236,200,145,35,79,156,95,58,157, + 206,234,244,14,18,137,36,173,180,180,212,162,209,104,140,87,175,94,213,222,186,117,75,27,21,21,165,77,76,76,212,229,101,103,87,104,52,26,93,81, + 81,81,121,120,120,120,185,84,90,127,122,135,67,135,14,113,235,42,85,223,131,234,42,44,44,36,133,66,97,169,90,167,206,88,183,251,180,163,45,126, + 199,30,46,111,117,119,254,0,169,62,242,243,32,162,159,39,18,157,154,73,116,254,3,10,221,246,6,245,105,37,50,95,93,208,34,142,182,250,254,98, + 85,74,134,237,157,218,209,22,191,83,247,63,109,117,247,213,254,238,250,29,155,55,82,72,72,8,69,69,69,81,124,124,60,157,250,245,39,234,211,70, + 250,136,185,197,239,152,45,105,30,0,244,21,137,68,165,27,54,108,160,27,55,110,60,102,30,59,118,140,164,82,169,22,176,242,174,101,128,209,166,128, + 137,166,205,190,87,22,15,147,151,230,157,248,128,40,114,55,209,246,14,68,187,122,18,253,20,76,116,252,53,186,177,113,18,245,109,37,48,210,86,223, + 203,180,51,96,152,181,113,242,249,252,226,35,71,142,80,70,70,6,93,186,116,137,110,221,186,69,49,49,49,148,146,146,66,39,79,158,36,62,159,175, + 7,96,243,93,141,61,93,224,61,180,189,32,51,124,85,95,162,163,147,41,103,223,63,104,76,71,69,126,175,22,188,33,182,178,170,29,211,206,14,14, + 14,185,39,79,158,164,196,196,68,186,120,241,34,57,59,59,231,2,232,96,45,163,95,111,255,56,50,132,211,128,190,254,21,74,165,252,198,128,190,237, + 41,253,225,215,212,163,107,75,227,230,205,155,41,43,43,139,164,82,105,162,173,177,13,30,60,56,132,136,194,186,116,233,114,25,192,128,160,160,160,203, + 9,9,9,97,221,187,119,191,129,122,82,63,52,192,172,32,34,234,218,181,107,9,128,113,129,129,129,37,9,9,9,212,189,123,119,67,99,142,159,53, + 237,82,64,96,175,222,125,6,13,255,40,160,75,239,247,172,73,239,96,13,179,169,5,143,38,220,123,0,8,192,163,28,78,221,42,255,118,135,13,119, + 28,214,194,156,202,231,243,119,216,217,217,253,105,103,103,247,39,159,207,223,1,96,106,99,152,120,212,129,51,11,192,89,39,39,167,7,129,129,129,186, + 17,35,70,208,168,81,163,232,173,183,222,34,139,197,66,17,17,17,228,39,145,232,183,1,9,219,129,179,219,172,204,50,240,191,90,172,94,113,82,43, + 244,157,222,134,93,156,210,26,37,147,91,163,244,159,109,217,149,23,90,161,222,134,2,181,60,221,187,234,2,99,177,88,40,46,46,142,6,15,30,92, + 38,147,201,210,1,140,176,242,67,124,130,233,232,232,120,203,217,217,57,149,199,123,178,209,170,86,255,92,245,122,103,103,231,107,110,110,110,26,39,39, + 167,219,181,49,29,29,29,111,185,185,185,105,28,29,29,111,85,223,142,203,229,142,118,116,116,76,175,89,207,227,241,134,56,59,59,167,214,172,175,109, + 223,137,30,25,170,140,140,12,202,201,201,33,47,47,175,39,140,86,90,90,26,101,101,101,61,97,192,172,97,54,20,75,93,245,117,49,173,56,166,54, + 127,238,213,150,249,120,120,120,100,175,95,191,158,228,114,249,19,141,143,239,128,127,126,18,114,191,180,120,230,135,91,126,114,242,159,208,201,150,125,175, + 182,222,8,153,76,150,62,120,240,224,178,184,184,56,178,88,44,100,177,88,106,53,90,117,156,159,35,187,117,235,150,151,155,155,107,46,41,41,49,165, + 166,166,150,39,36,36,232,62,255,252,243,138,156,156,28,125,105,105,169,33,34,34,162,220,205,205,45,7,192,83,183,121,87,103,218,98,180,70,143,30, + 77,106,181,250,83,198,88,73,77,163,245,84,156,135,252,5,180,205,191,47,109,245,63,25,179,212,251,222,107,61,101,229,97,235,71,19,157,255,128,110, + 108,153,73,189,91,9,31,25,162,109,126,167,233,123,159,1,244,117,27,97,131,251,126,200,95,64,59,218,246,167,109,126,167,239,46,241,190,55,177,171, + 147,97,255,238,109,244,224,193,3,58,118,120,31,245,106,93,105,178,182,250,159,165,45,254,131,173,98,62,185,172,175,72,36,42,221,185,115,39,61,120, + 240,128,126,249,229,23,171,76,214,19,76,128,209,150,128,9,166,205,190,87,22,13,149,23,206,236,41,46,159,220,89,104,24,223,65,80,49,188,157,192, + 212,199,155,103,14,114,227,88,252,157,64,195,125,37,229,180,213,247,50,109,245,127,170,93,169,43,78,161,80,152,130,106,57,117,106,22,145,72,148,83, + 151,209,106,232,252,236,233,2,239,161,62,162,204,115,203,135,208,216,64,69,158,53,38,171,33,38,128,206,142,142,142,185,187,118,237,34,23,23,151,28, + 107,76,86,117,166,189,74,176,43,45,241,12,29,218,247,25,245,239,237,67,187,183,205,165,155,87,150,145,189,138,191,183,119,239,222,153,185,185,185,212, + 175,95,191,82,91,227,84,40,20,123,74,75,75,195,118,239,222,29,214,169,83,167,203,27,55,110,12,187,122,245,106,152,68,34,217,83,185,254,83,102, + 203,191,70,251,95,11,51,180,164,164,132,118,239,222,77,157,58,117,42,217,184,113,35,93,189,122,149,36,18,73,104,67,241,89,121,126,214,217,46,245, + 27,50,250,147,251,9,25,197,31,44,254,236,39,255,238,125,173,110,151,234,99,54,229,115,111,76,249,171,153,0,228,246,18,201,189,240,240,112,42,40, + 40,160,46,173,91,83,20,159,79,121,2,1,93,224,114,43,182,2,171,158,117,124,255,77,229,223,11,175,195,104,233,245,122,90,176,96,129,65,44,22, + 107,5,2,193,34,0,130,255,149,19,166,169,76,71,71,199,107,46,46,46,26,23,23,151,39,204,94,245,122,71,71,199,219,127,117,156,255,78,38,0, + 31,129,64,144,204,231,243,227,170,215,59,5,140,235,221,182,239,171,139,93,58,140,27,213,148,56,1,8,4,2,193,34,177,88,172,93,176,96,129,161, + 180,180,212,106,163,85,89,63,76,42,149,166,239,217,179,71,119,255,254,125,99,126,126,190,41,36,36,196,120,235,214,45,195,178,101,203,74,164,82,105, + 58,128,90,123,74,108,53,90,74,165,146,136,136,6,12,24,64,29,59,118,148,186,187,187,219,55,104,180,136,64,95,183,17,86,153,173,200,197,222,49, + 99,59,74,43,182,191,59,156,122,183,172,97,178,118,121,139,172,254,140,190,110,35,172,50,91,119,62,246,138,25,236,35,55,173,92,252,14,245,106,45, + 121,210,100,217,194,124,114,121,95,169,84,90,178,116,233,82,171,123,178,158,98,238,240,245,162,45,126,123,31,153,168,134,138,255,14,250,214,215,235,191, + 225,156,39,122,100,182,158,243,17,69,91,219,147,101,13,19,64,103,181,90,125,207,26,147,85,147,169,150,9,252,167,77,30,174,79,122,112,148,74,243, + 78,81,228,205,141,244,226,196,110,20,216,169,99,238,230,205,155,41,54,54,150,100,50,217,5,91,227,4,48,108,246,236,217,97,73,73,73,97,241,241, + 241,97,87,175,94,13,155,48,97,66,88,245,239,76,117,179,85,241,252,243,229,157,57,156,119,26,96,190,52,123,246,108,74,76,76,164,248,248,120,186, + 122,245,42,77,152,48,129,0,188,244,172,62,163,186,218,165,128,192,94,189,251,14,28,182,184,67,96,15,155,219,165,186,152,77,253,220,255,29,231,231, + 191,147,9,64,58,106,212,40,139,217,108,166,81,35,71,210,2,198,138,190,103,44,247,123,198,114,183,2,233,223,0,45,159,117,124,255,77,133,135,255, + 176,42,31,208,235,36,151,203,79,234,245,250,121,68,148,249,159,142,225,175,84,78,78,78,31,91,234,255,142,34,162,56,0,222,53,235,179,163,143,94, + 7,112,253,25,240,43,0,172,100,140,237,217,182,109,219,55,235,214,173,155,32,22,139,173,154,180,88,185,253,239,140,177,14,179,102,205,122,71,44,22, + 15,214,106,181,62,0,32,147,201,226,202,203,203,47,232,116,186,47,137,168,176,169,113,114,254,143,189,243,14,143,162,234,254,248,247,206,108,239,105,155, + 30,66,32,144,132,208,123,145,34,210,65,186,116,69,16,68,20,1,69,69,197,74,21,81,81,176,33,136,130,72,147,222,69,64,84,122,135,64,8,1, + 18,82,72,79,54,219,119,167,220,223,31,73,48,134,148,13,182,247,253,189,251,121,158,125,118,103,118,230,187,231,206,236,206,158,57,247,222,115,24,198, + 252,214,91,111,53,55,24,12,183,50,50,50,16,26,26,106,89,185,114,165,103,131,183,167,37,187,176,44,250,12,228,242,69,77,194,212,179,223,232,71, + 201,194,253,199,34,23,15,13,188,211,49,90,115,27,82,241,61,16,231,41,140,79,113,122,108,80,137,230,41,168,184,69,205,35,212,179,23,12,2,121, + 111,239,55,145,239,15,246,191,211,177,190,246,14,40,222,131,194,118,188,86,154,229,160,148,254,70,8,233,251,193,7,31,124,107,179,217,38,81,74,15, + 215,90,68,199,100,193,202,189,9,142,109,2,138,170,7,223,81,106,3,131,203,200,103,106,85,76,252,239,228,68,22,77,5,80,235,84,56,213,65,41, + 61,15,192,179,186,152,21,40,176,184,174,250,105,229,173,246,236,61,50,43,58,58,226,17,135,147,9,27,51,118,2,38,61,211,210,63,52,52,20,243, + 231,207,167,86,171,245,253,7,176,233,71,66,8,214,174,93,59,166,81,163,70,13,18,18,18,110,216,237,246,117,148,210,31,203,109,67,9,33,59,223, + 187,120,209,186,60,33,225,55,151,40,254,86,131,230,198,82,205,23,26,53,106,212,44,33,33,225,162,221,110,255,144,82,122,223,128,234,7,165,170,235, + 210,149,11,199,31,248,186,84,149,230,255,26,148,82,27,203,178,203,98,99,99,7,223,184,113,99,238,30,74,191,250,183,109,250,39,33,165,222,230,223, + 35,78,72,15,74,233,65,175,166,87,243,191,89,179,108,176,46,245,224,199,226,169,230,156,57,115,234,204,159,63,191,152,82,106,34,132,80,74,105,217, + 132,136,202,10,240,86,173,185,44,90,14,185,188,53,168,56,13,4,245,64,73,58,100,226,210,154,156,172,26,53,85,164,45,120,201,12,16,68,128,34, + 11,148,249,168,38,39,235,31,61,71,132,16,188,141,170,7,81,191,141,123,183,210,30,107,254,9,254,63,104,18,66,250,104,181,218,217,205,154,53,107, + 113,225,194,133,51,86,171,245,125,74,233,190,255,52,59,189,154,255,127,53,255,191,242,143,71,180,188,120,249,111,195,19,7,171,182,204,155,55,239,206, + 188,121,37,5,21,94,127,253,245,72,131,193,144,170,215,235,171,203,100,93,57,211,146,93,216,28,127,26,121,236,44,48,168,7,240,169,176,242,89,152, + 150,226,122,96,227,74,52,79,34,143,76,7,139,24,200,249,100,88,92,89,152,242,39,52,255,106,74,206,73,213,231,229,193,210,160,254,79,83,234,84, + 213,232,88,121,241,226,165,118,120,29,45,47,94,254,101,230,205,155,119,7,64,228,252,249,243,115,30,72,96,120,130,27,64,122,233,227,175,225,239,208, + 244,226,197,139,151,255,65,8,128,30,149,189,81,155,144,32,33,164,82,141,234,168,73,223,171,233,213,244,106,122,53,189,154,94,77,175,230,255,63,205, + 10,218,125,43,121,43,177,18,205,21,181,181,227,63,134,191,115,164,61,254,31,206,158,240,106,254,117,154,40,201,223,82,109,254,156,255,4,59,189,154, + 94,77,175,166,87,211,171,249,247,107,86,243,89,147,255,169,207,250,59,30,222,174,67,47,255,24,132,144,120,0,61,1,28,1,208,78,213,93,181,80, + 112,80,74,8,25,8,192,1,96,24,128,211,148,82,143,107,191,121,241,226,197,139,23,47,255,201,252,171,142,150,58,32,38,4,18,166,25,17,105,28, + 0,80,134,92,3,47,94,180,229,93,255,211,41,31,116,97,177,126,20,242,77,4,174,199,204,25,137,5,127,86,175,105,172,97,104,80,128,110,108,86, + 190,233,219,203,215,204,219,107,179,175,143,79,93,131,210,207,119,184,211,205,53,145,203,100,119,220,69,197,43,10,10,146,205,127,214,166,191,19,117,64, + 76,8,97,208,77,163,211,181,82,40,213,109,213,58,223,134,34,5,10,178,51,82,92,28,255,171,224,178,157,165,34,142,212,116,174,8,33,101,101,158, + 122,105,94,159,186,87,59,118,40,10,103,47,112,50,220,9,52,220,25,172,40,202,229,145,26,149,246,245,59,175,197,212,123,126,122,123,172,248,242,68, + 89,56,249,8,0,145,150,222,206,252,91,180,110,230,55,33,196,104,24,150,146,150,247,229,229,235,230,29,255,166,45,255,36,186,208,198,19,24,137,252, + 13,66,185,96,48,178,12,222,229,124,205,146,117,197,163,226,191,0,80,39,174,227,49,66,152,186,148,138,169,119,174,29,235,112,111,125,124,167,3,162, + 32,198,17,194,220,76,187,246,91,183,154,182,247,132,152,104,205,216,48,163,97,145,205,234,186,112,226,82,222,159,42,254,234,197,139,23,47,127,53,85, + 58,90,117,27,119,62,173,84,170,162,0,64,164,20,34,5,172,197,69,103,239,38,159,238,13,0,198,168,86,251,165,74,125,43,145,150,188,47,136,0, + 239,118,220,54,165,156,104,227,201,7,107,3,99,135,244,232,213,99,232,128,1,253,99,155,54,105,26,13,0,151,46,95,74,222,181,107,119,162,54,48, + 118,139,37,39,113,235,159,105,24,133,114,110,235,214,45,30,58,115,230,220,187,0,158,253,51,90,0,224,239,175,157,118,224,135,89,93,30,25,186,68, + 3,160,86,142,150,210,207,119,248,160,71,251,180,120,233,249,41,204,83,179,22,68,157,254,237,200,98,93,104,147,34,42,114,7,172,217,35,127,169,174, + 112,114,109,32,161,173,84,42,193,62,154,128,78,65,73,175,240,74,149,72,191,207,203,187,110,169,141,142,33,180,113,143,176,200,168,45,35,39,204,84, + 170,13,65,18,176,50,0,4,153,41,87,113,104,253,66,223,25,239,172,106,249,219,197,84,254,167,31,62,117,104,66,27,15,181,102,94,169,106,186,248, + 72,149,190,235,39,12,81,40,173,166,253,251,52,163,7,195,193,88,193,69,232,20,228,7,87,122,242,15,150,112,235,69,23,224,164,249,221,31,9,170, + 167,215,93,65,72,112,58,0,76,232,173,82,253,224,160,37,209,46,74,233,47,213,182,187,110,93,133,218,46,31,6,130,241,0,92,132,146,175,173,185, + 234,157,148,158,253,67,237,64,77,80,220,35,115,23,124,244,194,204,9,189,42,27,19,112,31,209,209,68,222,180,65,131,201,63,172,126,182,237,67,3, + 22,184,72,221,186,71,239,189,153,154,106,167,37,249,186,254,117,84,65,141,218,234,52,218,209,96,153,1,162,8,158,119,187,183,186,157,214,239,173,57, + 215,47,63,136,158,62,188,217,59,237,58,61,60,107,232,152,73,170,140,34,130,243,87,146,235,93,254,241,203,175,244,17,205,3,138,211,46,124,234,137, + 134,76,46,175,179,107,215,174,224,94,189,122,5,25,34,90,148,228,28,35,128,65,167,209,31,60,120,128,244,233,211,39,52,160,94,235,34,74,1,42, + 138,48,24,244,250,61,187,119,145,62,125,122,123,86,249,188,28,140,128,23,55,172,122,38,244,163,207,14,248,197,69,171,218,93,75,182,159,172,173,134, + 23,47,94,188,252,93,84,233,104,41,149,170,168,19,71,118,249,109,253,53,13,0,208,163,101,48,94,155,183,172,23,33,36,17,0,6,62,245,118,204, + 187,175,62,143,99,87,114,64,41,69,139,6,254,232,59,232,49,143,162,15,170,224,248,54,35,71,140,24,51,107,214,139,3,111,220,184,145,242,253,247, + 223,255,2,0,157,59,119,110,176,96,193,130,17,75,124,253,20,170,224,248,12,123,86,130,103,5,27,43,234,135,69,135,197,55,108,54,118,195,215,203, + 152,110,189,135,141,86,133,69,47,180,103,36,103,120,178,175,209,104,156,46,149,74,13,64,73,53,246,50,234,71,176,193,0,192,11,162,206,47,44,206, + 204,202,148,130,66,33,75,48,91,44,223,154,210,19,86,86,167,233,228,184,198,51,158,121,146,57,127,51,31,81,141,59,179,75,23,190,14,81,224,124, + 103,190,58,111,248,153,147,27,0,188,245,243,131,180,179,12,189,49,190,190,192,8,83,13,18,201,240,94,125,122,186,102,191,248,108,184,72,69,44,254, + 120,197,107,7,246,31,120,75,19,20,179,87,36,116,133,61,43,201,163,227,233,231,239,247,221,244,57,31,105,173,174,223,211,20,149,58,89,248,234,219, + 77,184,144,38,34,46,54,78,18,60,125,177,246,203,121,147,191,65,73,157,173,251,80,105,31,250,176,126,199,35,1,46,139,128,155,199,35,187,103,119, + 26,156,133,122,193,193,184,148,114,4,156,48,205,58,50,119,44,128,76,0,107,186,119,59,178,45,62,158,233,122,233,146,184,119,156,90,61,120,77,189, + 122,10,183,217,12,255,212,212,229,0,154,84,166,175,13,142,143,163,84,156,236,43,215,141,155,252,236,120,223,193,131,6,80,139,205,77,214,109,220,218, + 119,203,150,77,191,170,131,98,150,216,33,63,68,179,47,217,52,129,13,155,190,50,251,213,29,125,122,116,246,56,138,155,155,43,143,112,213,21,253,0, + 128,231,161,85,59,228,69,40,75,221,20,20,235,6,170,73,152,89,5,36,168,169,218,71,70,199,107,180,134,233,162,40,238,206,72,252,237,133,218,106, + 148,167,81,251,126,109,131,67,66,247,247,24,62,73,111,172,19,71,76,86,43,146,46,159,157,117,254,199,239,39,249,214,139,111,94,120,43,33,173,54, + 122,190,190,245,244,50,95,227,140,137,83,102,170,22,204,157,3,187,185,16,114,181,15,186,140,124,69,183,231,203,23,230,17,66,190,160,148,214,88,33, + 215,225,112,20,244,238,221,39,196,24,20,74,150,173,252,200,96,113,240,176,58,121,204,125,101,18,6,13,26,4,181,70,75,190,253,126,171,193,225,18, + 224,228,4,76,127,246,41,244,233,211,143,114,28,95,101,98,89,66,136,194,96,48,236,82,42,149,18,160,44,195,3,160,83,48,245,40,5,68,17,82, + 170,138,219,219,176,197,195,229,28,96,10,155,205,238,206,116,231,54,160,41,15,150,104,213,139,23,47,94,254,12,213,254,233,104,85,18,36,222,202,2, + 0,248,168,128,105,79,63,129,252,188,220,24,23,47,98,194,19,227,112,238,218,93,36,222,206,5,165,20,49,225,106,0,213,36,16,44,7,11,177,245, + 132,137,19,186,238,63,112,224,212,27,115,222,88,67,72,73,214,221,47,87,124,213,225,205,183,222,156,52,238,137,113,61,55,111,222,124,5,158,86,198, + 174,216,40,162,91,246,254,162,249,242,244,60,135,99,250,172,217,226,139,176,196,247,2,0,0,32,0,73,68,65,84,47,76,95,138,146,241,63,53,34, + 149,74,13,233,233,233,90,134,249,227,141,245,123,243,103,31,237,57,116,73,82,202,157,162,243,251,119,236,104,19,31,31,143,244,140,172,78,139,63,254, + 162,121,72,116,155,39,205,197,246,161,214,220,132,74,179,80,43,164,210,43,239,44,254,188,133,232,211,128,121,109,82,63,52,142,14,69,70,78,17,186, + 244,30,40,57,123,250,116,47,0,63,63,72,59,59,118,236,216,57,171,208,241,154,66,171,168,63,101,210,68,50,229,169,177,33,156,40,97,114,77,78, + 48,12,193,135,239,205,143,144,45,121,151,126,183,113,231,208,79,63,255,170,151,38,40,182,128,130,190,101,203,190,94,67,23,24,245,11,15,212,35,49, + 173,164,119,179,162,147,101,117,240,0,0,25,43,128,128,250,87,165,226,118,38,39,229,37,29,13,182,155,210,33,138,166,43,40,178,118,199,217,228,0, + 0,185,154,192,216,119,130,131,2,199,90,157,46,135,165,168,80,176,228,92,239,78,8,145,0,192,121,226,190,116,44,53,53,238,178,221,14,11,144,80, + 153,182,38,40,246,195,110,157,219,207,124,121,230,179,104,210,36,158,58,92,64,86,161,131,168,101,34,158,158,50,197,57,122,244,232,134,217,217,89,227, + 237,197,182,28,101,72,92,246,216,209,227,126,30,51,106,164,242,66,170,221,18,19,174,172,241,216,106,181,218,184,110,221,122,78,234,212,62,254,122,207, + 225,75,46,231,230,185,246,204,95,125,184,123,199,88,31,100,230,20,99,204,160,135,101,53,138,84,32,32,32,70,27,168,215,159,28,48,112,104,125,65, + 160,210,29,219,54,252,233,238,99,153,76,182,250,165,215,222,52,72,124,234,224,110,161,29,60,8,26,183,238,196,74,165,172,239,217,253,27,151,3,120, + 180,54,122,188,66,209,164,211,67,15,211,204,66,55,4,151,13,187,182,111,198,224,161,143,65,165,214,65,231,19,40,242,238,184,24,0,87,107,210,201, + 184,126,162,169,62,172,153,245,179,175,55,169,191,57,120,7,82,150,192,229,180,65,89,191,63,218,7,231,96,220,228,23,177,239,76,54,228,82,6,22, + 171,21,234,168,94,200,62,179,198,94,112,231,92,165,78,117,41,202,102,205,154,201,15,31,62,172,44,205,33,11,0,88,191,110,69,222,227,207,45,97, + 40,228,217,167,142,157,169,39,149,253,241,212,12,27,51,41,223,246,211,121,5,0,175,163,229,197,139,151,127,28,9,0,236,222,189,155,246,239,223,255, + 62,39,73,16,40,18,111,151,12,193,97,89,22,253,31,106,128,165,139,223,129,221,197,227,194,45,19,182,30,75,131,203,90,4,74,41,242,26,7,222, + 39,78,43,76,241,252,96,145,186,37,171,144,142,236,213,165,65,93,63,95,95,223,164,43,107,172,111,190,144,221,72,66,221,103,231,189,215,224,150,204, + 79,210,113,211,166,141,241,143,14,24,32,215,106,117,47,107,194,91,132,75,173,244,197,162,162,11,166,170,52,43,162,14,106,52,112,200,224,193,221,131, + 131,131,196,49,11,78,94,91,246,92,203,58,13,27,52,236,164,14,138,25,88,149,131,81,94,83,20,69,48,12,131,236,236,108,8,130,0,167,211,9, + 142,227,144,150,150,146,45,82,26,46,64,100,66,66,194,33,145,200,17,85,55,18,159,47,93,168,94,187,97,71,219,87,222,152,187,157,16,210,190,108, + 76,81,121,77,71,65,225,230,61,251,14,24,41,14,133,190,54,169,31,155,83,104,193,161,211,55,112,174,118,193,134,202,218,62,183,91,167,182,170,194, + 194,252,8,185,140,149,158,78,204,133,200,42,1,16,16,2,220,45,112,64,45,151,144,62,253,250,27,198,142,26,106,56,114,236,98,240,132,39,159,252, + 12,192,142,106,52,225,116,114,194,67,113,26,182,121,125,3,46,38,23,226,212,222,227,152,62,231,35,156,185,229,132,217,98,3,17,156,96,169,19,121, + 169,55,193,11,194,125,81,204,50,77,158,203,30,149,117,171,235,84,0,22,0,95,150,70,66,178,213,129,177,111,189,253,198,43,115,90,117,232,142,148, + 108,43,190,253,250,203,207,180,193,49,249,148,210,205,0,64,8,233,223,137,227,38,163,36,218,181,170,50,59,117,58,237,232,93,155,190,134,217,206,35, + 45,215,65,210,243,236,176,56,120,240,34,117,168,21,178,155,62,58,223,92,93,144,214,98,21,82,235,119,237,212,117,243,171,175,204,210,38,101,58,201, + 133,155,38,58,180,157,111,149,109,7,0,189,94,223,166,95,191,126,99,151,44,89,210,244,253,69,47,93,87,202,36,17,12,35,42,19,210,173,184,145, + 39,194,94,88,117,53,159,202,52,9,33,140,42,48,166,175,70,175,255,240,153,103,103,214,29,58,108,164,228,171,21,159,185,24,150,109,165,49,198,7, + 149,119,208,141,198,120,13,175,144,78,87,107,212,61,1,178,55,253,218,175,239,85,247,157,47,50,21,235,66,35,27,2,84,132,148,17,161,150,1,121, + 38,17,190,145,77,224,114,126,93,101,105,150,42,53,5,65,20,68,17,78,183,8,137,84,142,1,253,251,65,99,8,130,132,33,16,120,14,2,195,84, + 233,28,222,167,73,0,135,91,0,67,0,134,33,200,204,72,71,221,58,17,128,251,46,28,110,1,82,9,3,169,132,193,245,228,20,52,141,171,135,236, + 179,247,7,196,43,106,26,12,6,136,162,136,188,188,60,112,28,7,183,219,93,242,91,229,56,222,234,16,36,31,124,246,45,95,182,109,124,163,198,76, + 215,78,173,24,185,92,65,170,211,252,43,240,106,122,53,189,154,127,158,170,124,145,255,118,170,141,104,37,167,21,32,241,86,22,198,13,104,141,240,176, + 16,156,186,94,8,147,149,67,145,213,141,34,171,27,162,68,135,172,226,34,20,23,100,35,41,53,175,186,60,205,0,0,86,33,29,57,99,134,105,150, + 101,94,195,187,71,246,78,67,152,49,41,254,149,87,138,122,46,93,106,112,249,70,232,26,61,247,204,211,189,119,238,218,67,92,78,23,234,215,139,84, + 118,234,218,243,201,47,86,172,8,70,229,121,54,238,67,31,30,239,171,80,169,86,206,123,251,101,197,162,141,73,183,173,46,88,183,28,207,190,249,226, + 236,55,125,166,76,24,253,185,62,60,254,215,226,244,132,66,79,180,202,46,226,46,151,11,60,207,35,35,237,234,192,159,182,190,212,164,203,192,197,126, + 10,165,18,20,128,217,206,35,207,228,196,195,143,244,100,91,109,223,219,248,152,203,53,17,192,125,221,136,69,69,41,38,93,104,51,221,238,237,235,216, + 141,63,158,135,94,163,194,241,139,55,112,234,231,189,60,21,185,3,101,219,233,66,27,198,0,202,253,32,68,113,111,103,34,166,155,211,47,181,174,204, + 70,137,68,226,152,252,212,120,87,82,82,210,119,39,78,93,140,250,237,240,158,214,97,245,155,42,27,182,234,69,124,2,194,192,16,224,124,158,9,23, + 111,22,33,219,228,196,7,147,155,178,96,72,141,93,103,34,240,194,200,137,47,125,252,249,199,239,177,113,117,180,88,183,98,17,204,86,23,242,138,172, + 200,204,33,184,118,211,132,51,151,18,177,119,219,58,94,20,153,23,171,210,161,148,102,3,120,179,226,250,240,176,224,73,189,122,15,192,192,209,147,161, + 84,170,209,119,196,51,56,243,235,254,199,1,108,46,221,47,5,192,171,213,217,200,176,12,4,145,34,45,207,129,188,98,23,204,118,14,185,38,23,242, + 205,124,122,190,217,100,85,40,100,249,18,56,15,31,90,183,232,133,245,107,214,4,166,23,112,236,233,27,38,92,187,99,169,246,91,106,48,24,30,30, + 54,108,216,144,55,222,120,163,65,82,82,226,141,188,204,196,78,59,214,205,136,107,223,111,129,116,239,186,21,160,12,11,81,224,193,176,50,104,130,98, + 75,181,8,103,205,190,86,105,132,203,191,110,203,241,193,209,109,223,235,241,72,15,205,136,145,227,84,117,234,54,128,205,5,60,49,126,178,60,32,192, + 216,123,197,231,75,147,2,162,90,175,20,76,133,239,242,74,73,176,74,167,63,48,240,209,17,65,84,20,101,63,238,221,42,2,168,54,91,60,21,41, + 146,179,29,112,186,221,112,186,220,40,180,58,145,93,104,69,161,229,193,130,55,148,64,110,177,186,160,144,49,24,247,220,7,56,184,114,34,250,77,89, + 138,27,153,217,112,216,76,18,123,230,21,143,19,152,18,0,14,151,0,169,132,128,129,136,236,236,92,12,30,215,7,215,143,158,128,211,45,64,38,97, + 192,128,226,198,237,12,204,156,48,0,63,174,169,89,83,20,69,80,74,225,118,187,225,118,187,193,113,28,246,236,216,24,180,254,203,167,84,31,44,223, + 167,90,181,252,237,119,139,221,62,201,34,68,85,76,76,163,133,173,91,173,53,242,226,191,58,159,194,139,23,47,255,227,84,249,167,235,112,216,111,15, + 27,57,14,33,129,193,218,65,221,198,203,206,38,23,33,247,110,42,110,92,191,12,155,131,131,204,183,30,160,12,70,221,168,72,92,76,220,238,254,228, + 253,221,22,145,119,222,174,74,111,208,160,208,240,16,163,134,121,127,113,157,19,215,19,11,91,173,155,179,26,99,198,104,3,222,95,92,231,68,202,77, + 13,163,86,210,142,79,62,49,154,48,132,226,149,87,102,97,208,128,62,152,240,228,227,228,219,111,191,105,239,105,99,68,72,151,191,250,250,59,242,236, + 34,222,117,234,186,197,169,214,168,84,191,37,89,172,141,163,234,168,250,13,29,159,185,123,211,202,143,0,60,225,137,150,203,229,186,119,33,119,187,221, + 0,32,0,0,195,148,60,231,155,93,200,41,114,34,187,200,9,94,16,49,116,228,19,170,211,103,46,60,129,74,28,173,82,235,68,142,231,176,229,199, + 115,200,56,189,89,36,12,107,42,27,12,15,148,56,89,193,193,117,142,14,24,250,184,81,174,84,3,0,204,86,39,190,253,98,113,149,54,82,74,29, + 132,16,149,191,191,191,116,64,191,71,210,157,206,78,119,126,254,245,132,226,167,13,31,116,35,126,241,190,133,250,46,172,155,167,144,73,89,72,24,6, + 102,59,15,212,232,14,3,89,73,199,63,13,110,216,129,76,156,58,107,233,204,151,94,99,103,126,242,11,92,14,27,156,118,43,138,77,133,80,73,56, + 92,57,182,131,167,2,55,211,146,121,206,163,193,209,229,177,219,221,238,66,155,3,26,141,6,18,185,6,249,133,38,220,95,225,175,122,8,32,114,60, + 133,217,206,149,62,120,20,88,249,187,151,83,76,126,33,129,218,76,41,193,197,31,62,153,254,196,230,205,155,227,138,157,68,118,236,106,33,174,166,21, + 11,199,247,172,200,195,235,149,155,236,227,227,51,104,220,184,113,61,158,127,254,249,136,228,228,228,27,119,239,102,114,96,72,73,132,132,130,217,184,226, + 29,132,250,169,144,109,226,48,114,234,60,172,93,246,10,156,46,55,134,244,236,112,95,33,104,66,8,9,172,215,230,147,142,29,58,78,124,99,206,91, + 74,72,181,200,43,22,176,251,68,10,66,252,125,32,145,48,136,111,211,155,93,218,188,171,110,207,174,245,207,237,217,186,238,73,41,40,51,121,230,2, + 93,124,211,182,100,246,212,65,102,179,217,244,124,37,186,140,33,188,233,170,25,19,95,127,122,241,151,111,54,14,10,170,67,45,54,7,92,2,69,177, + 205,133,98,171,11,46,78,128,195,102,3,5,163,210,27,227,235,15,233,55,43,99,251,161,15,63,51,165,95,153,88,227,44,78,2,127,95,95,31,214, + 234,224,161,41,13,4,17,2,176,44,129,84,166,20,149,193,177,145,142,172,196,84,79,207,147,147,19,32,101,25,100,221,205,68,120,104,0,34,131,245, + 184,14,2,151,91,132,84,194,224,230,237,52,68,133,25,209,60,186,202,30,232,63,80,222,209,114,185,92,224,56,14,12,195,208,82,59,169,94,234,56, + 158,145,150,117,200,199,167,185,129,23,196,133,54,39,15,158,255,75,230,154,120,241,226,197,203,3,81,165,163,149,114,229,151,54,0,16,219,166,119,190, + 86,41,241,147,48,4,217,233,201,248,118,201,116,136,34,69,191,73,239,67,23,21,12,149,140,133,211,146,111,201,191,113,164,218,43,37,33,92,207,79, + 191,204,136,154,250,76,125,253,186,117,22,41,0,172,91,103,145,62,51,37,66,255,217,151,183,163,218,61,212,10,84,16,48,96,208,48,140,28,53,18, + 41,89,54,252,112,244,14,172,118,151,71,245,213,212,198,70,205,3,67,195,250,204,24,223,71,35,97,9,105,24,105,96,211,114,57,158,101,165,194,206, + 211,166,204,161,67,71,5,28,218,179,177,187,218,216,168,185,45,247,234,133,154,244,156,78,231,31,186,14,253,2,234,237,233,57,108,73,250,221,44,243, + 238,172,66,71,59,43,199,35,187,200,137,156,34,39,138,172,110,4,235,124,193,115,174,166,85,233,81,74,215,12,30,54,238,113,0,12,97,248,213,230, + 204,171,215,203,222,43,115,178,250,12,26,99,60,122,54,25,55,206,236,45,164,34,95,50,99,142,136,85,70,16,40,165,118,134,97,20,10,197,189,0, + 24,211,173,115,7,119,108,131,232,253,223,109,61,56,142,211,116,134,92,202,66,194,16,176,18,2,139,135,142,22,0,100,37,29,95,30,220,176,3,62, + 254,100,233,7,29,123,142,145,253,124,238,54,236,28,208,161,101,12,182,109,248,202,73,41,247,146,37,243,220,114,79,180,202,32,132,176,106,99,204,202, + 136,200,136,240,91,183,82,49,227,229,55,144,153,111,71,246,237,43,8,52,134,246,212,4,197,45,181,229,36,206,244,36,165,131,40,136,212,201,9,176, + 216,248,50,71,203,233,224,200,45,163,65,173,213,170,20,23,191,126,103,228,83,27,214,173,139,144,200,212,210,131,231,242,145,144,106,118,30,217,176,208, + 101,203,186,50,174,50,61,163,209,56,98,252,248,241,29,199,143,31,31,120,237,218,181,219,38,147,137,115,56,156,176,58,228,219,123,14,95,114,51,55, + 159,219,115,38,197,221,237,151,155,50,100,155,92,16,5,17,155,78,23,195,237,180,86,106,159,177,126,219,125,79,62,57,161,219,136,17,99,100,151,111, + 21,195,206,149,68,118,4,206,129,179,87,11,16,28,24,4,0,96,25,6,45,59,15,151,53,110,211,71,198,241,2,228,106,61,174,39,223,130,205,97, + 203,182,102,39,94,169,168,171,54,54,28,213,181,223,0,89,76,191,14,35,21,223,168,223,234,57,114,122,80,78,118,22,114,11,173,112,242,34,172,54, + 23,138,205,22,0,20,62,141,250,250,230,95,220,182,169,247,244,94,159,229,51,215,181,63,239,230,134,0,168,50,71,153,54,36,174,115,96,72,248,151, + 15,117,235,161,73,206,119,34,225,199,119,144,125,215,142,111,151,191,132,206,195,95,66,215,71,39,232,15,109,253,252,130,79,88,211,25,69,25,151,190, + 173,233,28,161,212,161,146,73,24,164,103,164,99,104,175,54,200,53,185,0,74,225,18,74,34,90,87,18,111,99,100,191,86,40,178,122,54,129,179,44, + 1,96,217,239,210,237,118,163,203,195,253,114,70,63,189,210,183,160,200,124,245,218,237,226,95,203,182,21,68,10,187,83,128,240,239,102,8,241,226,197, + 203,255,56,247,28,173,221,187,119,83,0,168,172,127,52,35,187,0,254,90,9,140,161,81,24,59,253,3,172,249,232,5,8,2,7,74,1,94,240,236, + 110,145,82,233,143,207,62,19,21,87,55,138,53,142,29,163,182,127,183,206,166,26,59,70,109,111,210,212,223,244,236,51,81,183,205,142,58,157,120,65, + 192,111,87,114,112,249,182,9,151,83,138,161,85,121,158,230,139,149,203,158,89,188,104,161,76,194,18,114,37,213,98,73,207,231,45,172,84,234,86,171, + 228,212,69,37,206,148,60,154,255,200,224,39,237,59,215,126,60,17,192,115,85,233,148,205,52,44,187,136,151,61,83,74,41,1,68,145,8,66,122,158, + 3,22,55,135,236,194,223,29,45,194,87,237,193,232,66,27,198,24,244,126,251,88,150,85,80,10,112,110,126,132,46,180,97,111,115,102,210,245,242,78, + 214,137,43,153,72,62,127,48,91,112,219,198,89,179,175,253,84,243,49,165,14,177,252,212,200,82,36,18,34,16,6,84,38,101,137,132,101,192,50,4, + 44,3,88,28,156,135,110,86,9,89,73,199,151,71,198,63,52,231,192,250,143,2,39,244,111,132,13,71,75,124,62,135,57,183,216,146,94,59,39,11, + 0,84,65,13,122,62,241,248,147,227,95,152,49,21,119,114,28,72,202,176,64,46,147,163,109,251,78,104,214,186,189,236,235,175,87,77,79,56,186,101, + 19,80,50,57,162,58,168,40,138,54,167,128,98,59,7,179,141,135,205,77,111,58,56,241,150,86,167,144,238,89,245,142,126,241,162,247,162,66,195,194, + 201,254,115,249,184,146,82,88,252,227,154,215,69,123,126,74,31,123,246,213,83,149,233,137,162,200,21,20,20,96,231,206,157,174,203,151,47,195,102,179, + 65,42,149,194,229,118,135,41,101,18,21,195,240,202,237,191,157,131,84,225,3,131,79,3,80,80,184,171,185,7,16,120,161,201,192,129,131,100,7,78, + 165,225,139,111,214,97,204,160,30,32,170,80,68,26,213,56,117,241,58,120,162,6,67,8,24,166,228,33,147,176,144,74,100,144,9,46,220,76,74,0, + 5,61,86,169,48,97,90,119,238,217,79,220,242,213,138,130,208,58,209,50,159,128,64,201,227,189,26,194,233,226,112,39,199,140,66,171,11,44,75,80, + 96,118,97,197,86,78,198,42,181,225,87,142,31,187,214,177,103,175,174,71,246,108,111,141,74,28,45,66,8,209,132,54,125,189,126,131,70,175,140,159, + 250,154,230,90,22,133,143,90,139,194,156,52,236,222,187,15,35,71,142,66,168,175,1,218,38,109,73,253,6,49,134,45,95,47,90,22,16,213,170,83, + 222,237,179,147,106,58,79,46,94,132,205,106,134,192,11,104,19,31,129,243,55,75,134,91,114,28,69,177,217,2,139,205,129,206,45,163,112,43,211,86, + 147,212,61,68,81,4,199,113,247,110,134,56,129,7,40,37,44,88,161,124,202,13,78,160,176,57,5,8,30,94,163,188,120,241,242,239,83,157,47,242, + 223,10,3,148,52,168,236,81,113,3,74,129,164,212,60,200,37,34,194,235,70,131,150,251,167,166,0,248,251,199,66,87,202,246,237,153,233,245,27,88, + 197,151,95,190,211,161,73,83,255,139,207,76,137,184,214,164,169,255,197,151,95,190,211,161,126,3,171,200,241,82,129,150,230,235,42,203,205,85,187,92, + 149,76,219,230,241,245,216,119,214,37,221,153,250,217,245,68,153,76,198,133,7,168,73,100,144,154,173,99,84,201,157,28,227,140,105,220,210,5,134,180, + 172,78,165,204,111,113,185,92,127,120,228,231,38,15,60,240,195,172,65,97,65,190,227,51,114,237,184,147,99,67,90,174,13,119,114,109,176,57,121,92, + 186,122,19,96,101,149,230,45,210,235,252,246,127,255,221,154,58,205,27,213,15,140,143,169,27,184,242,155,53,117,148,74,159,253,186,208,134,49,117,162, + 98,207,158,60,184,209,120,226,74,38,82,19,207,100,241,206,226,239,61,113,178,128,146,136,22,207,243,162,211,233,132,195,225,32,22,139,69,234,118,187, + 137,40,138,96,0,72,88,6,18,134,64,194,18,48,132,148,206,22,172,253,237,189,197,206,99,231,201,44,236,218,186,30,191,254,180,171,182,187,223,131, + 80,118,216,163,3,250,34,49,205,138,11,183,76,200,41,114,33,41,195,138,205,191,102,224,151,75,5,136,110,218,13,34,161,195,61,209,162,148,82,139, + 157,135,213,193,195,226,20,179,109,46,114,147,227,200,205,179,135,214,59,102,78,28,48,168,119,151,230,100,247,177,91,56,151,152,97,223,251,197,116,105, + 117,78,22,0,228,231,231,111,221,177,99,199,190,211,167,79,103,55,110,220,88,27,26,26,42,213,106,213,172,94,197,119,221,177,110,70,111,127,63,229, + 224,240,208,22,80,233,227,113,215,84,18,89,225,169,8,187,195,81,169,30,47,8,82,151,155,135,147,163,104,221,188,41,168,76,139,59,89,185,72,72, + 78,135,201,84,140,236,220,124,228,20,20,34,175,176,24,69,197,54,20,154,29,40,182,184,224,112,243,48,155,11,225,182,217,110,86,122,12,65,85,10, + 133,76,121,243,230,53,81,174,84,193,205,11,216,114,42,7,219,78,231,224,194,29,43,174,102,88,177,253,84,6,54,31,75,5,199,243,96,37,114,225, + 242,153,19,162,74,169,146,83,16,85,101,154,170,224,70,79,117,234,210,227,181,241,207,207,213,156,73,225,81,207,104,128,45,105,11,40,117,97,232,208, + 225,176,89,139,145,114,234,123,132,26,244,240,245,13,192,51,175,188,175,173,19,213,112,164,95,157,166,211,171,59,71,4,0,199,83,164,222,73,71,219, + 102,209,40,178,184,193,50,37,19,53,56,158,226,202,245,219,232,210,186,33,236,78,1,44,91,178,190,38,202,174,9,101,17,45,167,211,137,35,7,119, + 6,125,191,98,146,254,145,46,13,218,197,69,171,218,149,109,43,240,20,54,39,143,74,230,107,120,241,226,229,63,144,234,124,145,255,102,60,10,25,69, + 134,7,225,228,229,219,104,26,87,15,6,189,14,215,146,211,193,50,82,48,165,23,76,79,161,110,110,195,135,31,26,144,122,91,195,124,246,249,237,168, + 103,159,137,186,253,225,135,134,227,212,205,109,0,48,142,210,146,11,105,89,130,212,218,220,136,82,145,139,8,242,83,179,103,110,90,243,25,134,117,250, + 27,148,162,191,65,193,248,235,228,82,153,148,21,121,202,184,195,3,163,28,84,20,155,123,162,87,190,235,80,16,4,16,194,8,0,32,138,162,38,45, + 223,14,147,131,69,118,145,19,133,102,55,26,134,105,112,240,208,102,155,192,217,215,85,166,197,74,101,134,232,168,112,188,54,247,67,216,157,2,146,50, + 44,144,41,20,193,65,193,141,47,140,155,58,91,241,252,138,100,76,236,238,143,23,126,73,206,176,101,43,103,123,218,102,81,20,121,139,197,66,178,178, + 178,52,46,151,75,42,149,74,221,114,185,92,40,177,23,144,72,8,24,194,128,33,0,8,96,182,11,64,173,98,90,37,168,149,18,60,218,62,24,14, + 247,104,216,157,60,142,253,84,251,10,57,132,116,147,68,53,49,14,174,27,89,7,7,206,229,194,238,20,96,115,242,40,182,241,224,69,138,236,34,7, + 162,67,125,32,87,24,30,35,132,188,80,83,247,161,211,229,190,248,219,201,115,82,141,127,148,191,91,16,239,236,248,118,113,93,153,96,234,26,236,167, + 213,142,29,245,58,155,148,97,69,86,250,205,220,221,95,189,231,227,182,22,141,183,103,39,86,233,100,149,81,92,92,188,79,167,211,89,10,10,10,250, + 245,234,213,75,95,80,144,47,228,218,74,206,59,165,96,126,90,55,23,132,149,2,148,194,118,251,16,54,189,177,173,172,117,92,69,45,194,48,191,109, + 220,240,125,191,199,70,140,144,230,23,6,224,240,233,100,72,37,12,146,44,121,224,33,129,212,108,134,90,37,135,193,79,139,0,31,41,212,74,57,68, + 202,128,227,1,173,86,15,86,46,191,127,26,47,0,10,114,237,234,249,179,77,166,190,53,87,249,234,248,113,76,253,204,44,80,137,20,148,176,40,182, + 57,81,108,115,194,226,224,224,176,217,192,89,76,224,172,5,206,199,167,205,10,217,183,125,147,21,148,94,171,76,83,34,85,77,238,220,107,168,242,203, + 165,115,65,220,38,156,118,217,208,171,123,47,76,153,189,26,119,10,44,168,31,164,71,226,175,223,225,163,183,31,7,35,85,64,173,243,193,144,209,147, + 52,203,23,189,250,56,128,143,171,60,160,4,176,217,156,200,204,202,198,180,209,15,33,179,208,5,153,132,160,228,43,40,226,74,210,29,76,121,125,4, + 204,118,30,50,9,3,79,178,195,84,28,12,239,118,187,193,48,44,45,59,71,102,151,111,127,109,80,92,164,40,23,85,188,80,242,29,19,188,131,225, + 189,120,241,242,47,226,145,163,165,85,43,65,89,37,126,57,155,140,216,248,102,248,102,199,41,52,104,218,30,119,205,60,40,24,143,255,186,95,156,109, + 59,7,224,220,160,65,161,225,67,134,132,245,164,84,250,227,103,95,152,210,1,224,243,245,93,75,46,191,34,69,73,182,232,18,135,203,99,136,36,245, + 246,221,226,186,81,193,26,36,164,187,157,26,133,140,241,213,200,89,163,65,46,147,73,36,16,40,113,222,189,155,236,36,64,138,39,114,21,187,14,213, + 218,144,61,143,12,126,63,55,229,142,233,76,195,2,91,115,147,91,14,74,129,134,97,26,92,62,177,91,200,206,184,145,100,207,78,252,162,50,45,81, + 4,235,230,69,92,184,105,66,145,149,67,145,197,141,78,15,63,42,235,212,99,32,126,185,156,7,145,231,176,248,171,221,102,129,114,35,41,77,184,239, + 79,187,42,68,81,164,119,239,222,37,12,195,200,117,58,93,49,0,158,227,56,112,28,7,128,128,101,24,16,2,72,37,4,193,62,10,20,22,91,249, + 218,187,89,128,201,202,97,199,137,44,236,220,242,61,84,42,213,131,72,64,109,204,233,54,114,212,116,159,204,2,39,44,118,14,54,23,15,155,171,228, + 79,80,20,41,220,60,133,201,198,33,164,89,159,16,206,81,220,30,53,116,31,74,92,220,152,153,207,79,105,209,163,255,40,195,221,60,203,208,232,122, + 145,195,95,156,62,85,241,195,47,105,152,243,222,74,26,209,176,77,222,154,207,23,186,221,214,226,150,149,141,117,170,10,179,217,252,155,76,38,179,20, + 22,22,14,27,62,124,184,58,245,150,230,104,207,225,75,174,228,229,186,246,196,142,235,221,141,145,200,192,187,29,56,119,99,55,172,217,137,85,122,6, + 69,169,103,7,235,66,155,45,58,115,246,236,243,147,166,60,171,236,222,162,57,110,164,23,227,212,85,57,108,110,160,67,227,80,24,125,213,200,45,52, + 227,210,153,67,252,177,131,155,236,62,126,1,204,216,169,115,53,81,245,26,64,194,74,187,85,166,43,145,75,190,221,181,97,221,143,109,31,234,246,190, + 221,110,123,243,242,225,245,111,20,182,28,88,135,18,6,2,97,224,112,113,40,42,44,134,211,225,128,249,250,254,12,129,115,76,43,54,219,83,246,255, + 176,57,94,37,226,190,193,245,0,32,101,80,87,165,214,129,119,89,177,115,203,38,12,25,58,12,62,241,143,225,114,90,62,148,114,22,169,121,38,52, + 232,52,14,135,126,57,138,31,126,216,132,81,99,30,71,112,112,24,220,156,43,178,166,227,153,120,43,13,245,34,130,161,80,200,193,11,110,200,164,12, + 24,66,144,124,59,3,117,67,253,17,224,163,65,122,158,3,50,169,231,9,225,203,28,173,178,155,160,150,109,186,228,140,154,252,149,111,190,89,180,5, + 181,120,226,197,16,182,68,203,16,84,95,106,115,241,224,188,17,45,47,94,188,252,139,120,228,104,9,34,69,128,191,31,56,42,193,237,108,19,172,36, + 16,14,27,133,32,16,8,148,162,170,192,19,33,164,71,101,185,54,182,111,207,76,71,105,126,164,223,249,61,146,117,239,185,146,59,209,170,52,9,21, + 14,238,216,123,228,177,129,157,187,251,94,187,155,149,46,147,50,18,137,140,149,202,36,12,145,73,24,151,94,37,97,55,127,185,94,78,9,142,212,164, + 233,112,56,208,163,71,143,63,108,147,120,229,120,96,65,78,146,139,18,81,52,202,205,8,48,24,113,43,229,14,126,218,187,197,150,157,113,35,81,112, + 58,6,149,143,194,252,65,147,82,177,192,228,132,195,45,160,208,82,146,26,131,55,118,192,182,99,153,80,202,88,100,95,216,108,207,205,74,159,238,200, + 78,170,114,214,102,101,118,82,74,119,174,94,189,90,214,182,109,91,166,77,155,54,129,110,183,155,225,56,206,237,116,58,65,24,134,50,44,136,65,37, + 131,94,205,210,139,191,238,72,73,60,190,77,66,65,151,122,114,60,203,163,87,75,48,176,93,48,156,238,209,200,51,57,113,250,200,182,234,54,175,84, + 147,16,58,236,225,174,157,145,124,215,10,155,75,128,221,201,195,238,20,74,186,136,197,146,115,158,91,236,70,64,100,11,164,156,92,63,28,21,28,173, + 138,154,165,101,133,142,170,3,226,130,181,126,129,95,61,255,249,90,197,142,147,185,56,156,96,69,238,225,13,69,132,95,157,226,176,21,79,170,206,201, + 170,170,237,110,183,251,146,66,161,176,174,94,189,250,137,184,6,254,186,146,49,90,162,178,168,32,31,166,140,155,144,200,21,149,201,221,167,105,206,188, + 56,91,19,24,119,232,149,151,95,156,166,85,43,59,63,212,185,155,116,228,208,145,42,70,170,193,153,179,167,185,185,239,45,117,56,157,206,98,74,133, + 181,110,187,107,153,211,105,235,178,124,238,211,43,218,182,239,202,56,236,150,56,125,120,188,111,113,122,66,97,121,77,211,157,203,69,36,180,85,151,113, + 157,163,237,227,178,175,37,6,199,118,158,91,87,46,135,175,49,0,185,249,69,112,10,128,198,207,31,238,130,124,136,156,221,110,203,78,220,5,0,79, + 21,59,187,208,188,235,246,202,236,116,243,226,214,148,91,215,159,82,168,180,100,192,160,225,96,101,42,164,228,22,66,41,103,96,43,202,134,54,36,12, + 69,54,11,52,122,127,12,29,62,2,90,157,15,18,19,206,82,153,84,118,182,166,227,153,120,35,21,143,15,108,143,252,98,55,164,18,6,50,73,137, + 243,127,46,225,22,134,247,108,14,179,131,187,183,222,147,115,84,84,84,4,153,76,246,135,223,167,195,150,139,171,23,14,74,117,26,181,109,234,140,41, + 127,168,82,192,9,20,197,102,219,31,46,36,158,124,231,107,139,87,211,171,233,213,244,82,21,30,56,90,20,245,67,52,104,16,166,129,195,29,8,135, + 75,128,213,33,160,216,230,70,177,141,195,237,44,27,46,255,5,165,118,75,162,88,37,157,7,148,2,32,37,14,158,167,247,162,114,183,107,238,7,139, + 23,140,88,223,178,133,235,249,254,33,17,23,111,187,50,9,97,236,12,43,225,252,116,18,233,181,107,23,115,143,31,221,211,69,201,11,143,87,167,195, + 243,188,41,44,44,12,192,31,75,240,52,138,86,13,250,109,247,43,245,186,14,92,108,252,104,254,44,27,195,202,68,34,145,93,22,56,251,247,246,236, + 196,207,171,235,234,98,100,202,171,39,207,39,180,247,241,139,192,141,12,43,172,14,30,110,94,132,175,86,134,244,75,251,221,183,175,157,217,104,206,184, + 240,141,135,77,189,199,233,211,167,143,182,107,215,238,194,209,163,71,31,61,115,230,76,247,14,29,58,8,209,209,209,62,44,203,218,41,145,192,160,146, + 33,35,241,88,198,254,35,223,242,188,224,62,64,68,246,29,107,206,181,156,218,126,78,94,177,11,123,207,228,96,247,214,13,96,165,181,174,58,3,0, + 144,43,228,254,118,135,27,117,3,253,144,91,232,68,182,75,128,221,37,148,68,180,40,133,86,37,129,90,206,34,211,228,2,64,140,53,233,145,160,166, + 106,173,92,254,188,82,239,63,109,224,132,215,253,14,94,42,194,169,164,98,80,129,3,231,180,217,138,239,156,106,87,147,70,117,56,157,206,91,74,37, + 249,90,198,40,14,237,88,55,35,170,67,223,5,204,229,237,115,241,123,247,214,253,221,133,149,97,205,185,118,16,192,65,66,8,179,61,63,183,239,201, + 227,191,172,25,253,196,20,93,242,229,115,172,217,92,52,199,146,121,101,89,185,205,55,170,194,162,143,253,180,127,91,35,2,168,205,119,19,43,205,249, + 70,51,207,222,115,152,36,18,105,186,185,32,59,152,72,100,80,233,180,224,89,25,204,119,115,193,153,238,130,48,210,132,202,246,185,79,143,179,127,178, + 245,219,79,70,52,235,53,73,71,53,117,32,58,242,113,253,196,86,87,202,229,35,46,42,10,38,153,92,169,111,219,165,191,166,239,200,231,216,64,99, + 0,110,38,158,163,223,124,177,196,228,182,22,77,173,74,51,178,113,231,131,6,131,65,101,187,125,16,117,35,6,225,110,190,11,82,9,131,13,43,22, + 160,32,63,27,54,247,13,180,124,97,16,172,142,146,217,152,31,188,247,14,52,90,181,42,162,81,167,19,105,87,127,171,42,165,139,227,234,213,171,46, + 163,209,88,218,157,91,242,147,11,208,241,49,199,246,207,86,127,176,124,95,253,105,79,246,45,116,83,245,31,207,141,192,185,205,6,147,55,43,188,23, + 47,94,254,21,106,116,180,28,14,199,237,135,122,60,10,81,164,16,40,32,10,165,145,39,241,247,232,147,192,57,170,141,196,120,130,40,10,167,150,175, + 88,213,175,101,219,174,108,124,29,45,138,243,179,112,226,183,195,60,68,90,227,12,52,160,36,194,161,14,110,56,108,196,240,33,155,158,152,48,165,168, + 203,195,15,107,2,3,131,157,233,25,233,182,175,215,126,199,237,223,179,189,139,8,126,84,94,94,82,181,5,150,139,138,138,42,29,115,242,200,67,17, + 157,0,212,99,37,196,101,203,185,174,169,77,219,242,50,210,134,46,152,251,118,202,152,73,51,229,245,195,162,145,99,98,113,59,61,11,215,142,110,119, + 102,92,63,189,181,56,253,220,196,218,232,149,231,228,201,147,102,0,223,181,105,211,230,167,195,135,15,63,121,234,212,169,214,49,49,49,34,231,178,59, + 127,252,106,90,134,219,105,78,96,121,188,106,203,75,188,241,32,250,162,40,164,30,61,126,222,239,177,46,173,37,254,186,137,88,181,97,15,7,42,166, + 214,86,199,230,114,189,56,122,212,72,210,189,103,191,193,131,30,27,7,165,66,139,211,215,139,160,146,179,136,240,87,34,191,168,16,103,14,172,71,94, + 242,111,219,4,130,215,107,210,211,201,100,215,194,91,12,9,108,208,226,97,121,186,157,69,234,173,66,184,45,119,81,120,113,93,1,5,249,236,65,218, + 90,145,122,245,112,87,169,148,220,5,16,197,48,112,89,179,175,63,240,0,77,74,169,8,96,183,198,24,31,247,225,162,55,7,105,116,250,38,42,165, + 230,124,197,237,74,107,114,122,84,151,19,0,44,102,211,212,228,223,54,30,12,136,237,164,135,50,152,113,185,92,176,23,220,22,204,169,103,138,221,14, + 211,75,30,105,100,95,75,208,4,197,118,250,101,203,210,149,84,224,26,73,164,178,12,129,115,125,203,185,92,223,218,242,174,223,213,27,227,235,255,122, + 96,227,211,39,126,218,50,156,231,221,126,50,185,252,162,211,108,153,104,206,75,190,85,165,168,72,27,237,59,176,155,244,31,48,144,78,25,251,104,137, + 147,71,0,173,70,165,218,191,255,0,233,211,119,0,29,212,175,231,61,231,79,163,85,171,246,237,221,71,250,246,237,27,85,149,36,165,212,9,160,71, + 197,245,113,81,154,83,132,160,13,203,50,110,35,147,254,216,213,91,166,67,158,180,219,139,23,47,94,254,9,72,237,102,246,213,82,188,22,161,69,63, + 191,104,157,204,207,119,30,195,74,59,57,92,174,48,10,89,154,192,187,126,182,8,120,179,252,221,120,77,154,1,1,49,90,135,68,242,58,24,166,43, + 68,33,146,0,41,148,224,136,146,19,22,150,118,55,61,144,157,77,99,12,195,2,141,186,113,57,121,230,53,151,18,77,53,142,6,175,168,169,13,170, + 111,148,40,253,222,103,24,182,151,32,136,82,81,224,110,8,110,199,123,246,220,196,29,158,228,141,242,212,206,54,109,218,52,146,72,36,79,229,22,187, + 12,119,243,237,43,236,57,137,39,254,140,166,209,24,175,145,250,232,126,18,65,34,69,145,130,23,196,84,214,106,125,36,55,55,161,242,4,82,53,104, + 170,2,99,219,75,101,210,37,15,117,127,180,67,243,206,143,82,23,47,33,135,247,111,65,210,201,29,199,4,65,120,169,42,123,43,106,234,235,180,57, + 199,74,101,129,84,4,35,82,145,128,138,14,128,185,37,186,204,11,44,89,9,247,117,15,63,72,219,1,160,121,188,239,104,163,159,118,200,221,172,226, + 47,175,220,48,213,248,93,254,55,66,244,134,192,232,122,68,161,31,67,88,201,40,10,254,55,40,179,0,0,32,0,73,68,65,84,234,22,92,206,181, + 60,177,111,168,174,144,250,223,109,103,120,108,135,51,74,165,50,196,102,179,155,50,147,78,220,43,5,20,22,211,254,146,74,165,242,183,217,108,197,153, + 73,39,227,202,214,71,196,118,56,173,80,42,67,43,174,247,196,206,152,104,205,216,16,163,97,161,197,230,188,118,246,82,193,128,242,41,30,106,178,243, + 175,194,171,233,213,244,106,254,125,16,66,38,83,74,87,0,104,3,192,8,32,23,37,181,144,203,47,163,244,53,42,89,206,67,73,119,132,63,0,23, + 128,242,93,51,101,203,85,173,47,219,63,1,64,163,82,77,1,192,41,0,30,85,154,185,151,0,240,239,120,0,232,225,213,244,106,86,246,80,5,54, + 28,232,95,183,197,37,67,120,147,75,170,192,134,3,255,83,237,244,106,122,53,189,154,94,77,175,230,63,163,89,205,103,77,46,125,221,191,196,109,161, + 253,41,165,61,42,44,247,71,201,212,188,251,150,103,207,158,253,106,249,109,203,214,151,95,174,106,125,185,253,251,205,158,61,251,85,0,180,67,135,14, + 223,83,74,27,120,106,191,231,25,65,189,120,249,11,41,45,240,253,23,140,238,243,226,197,139,23,47,255,75,16,66,118,81,74,7,16,66,118,85,92, + 87,241,117,217,118,11,23,46,28,80,94,163,236,253,138,84,92,95,126,255,69,139,22,45,40,247,190,199,89,150,37,132,144,251,198,60,148,138,123,28, + 18,172,74,163,186,247,106,210,247,106,122,53,189,154,94,77,175,166,87,211,171,249,255,79,243,65,246,47,237,62,188,91,250,254,128,202,156,173,218,80, + 222,25,171,110,61,33,100,215,236,217,179,95,67,73,100,235,181,178,229,133,11,23,218,1,100,122,244,97,127,115,184,239,191,34,92,233,213,244,106,122, + 53,189,154,94,77,175,166,87,243,223,213,172,230,179,42,235,58,236,79,43,116,251,85,181,174,170,103,74,105,155,170,52,60,89,239,169,253,222,174,67, + 47,94,188,120,241,242,63,71,64,64,140,22,184,151,147,175,70,52,198,248,32,0,176,230,38,100,255,157,118,121,241,152,221,0,250,151,45,208,114,209, + 45,90,121,68,170,50,78,151,215,40,219,190,162,70,197,247,74,245,60,78,25,243,64,142,22,33,68,202,72,228,51,148,42,237,120,194,64,111,41,202, + 11,123,16,157,255,15,16,66,72,76,93,205,115,17,17,198,135,211,51,178,191,189,118,211,182,221,211,125,53,129,177,171,117,122,195,195,22,179,105,137, + 149,85,175,170,46,215,81,77,104,131,234,27,137,220,119,43,17,157,11,138,211,47,239,125,80,157,202,32,132,40,226,227,227,91,0,64,66,66,194,121, + 90,50,205,254,79,161,9,138,29,237,171,247,121,218,45,186,4,155,213,246,185,37,235,250,230,63,111,233,239,232,66,27,250,67,162,251,2,2,255,48, + 40,88,176,146,11,196,233,120,170,56,55,161,210,26,130,101,212,25,180,48,110,226,136,254,115,86,109,220,61,239,206,246,87,239,43,89,227,215,119,153, + 110,218,227,189,94,249,116,253,246,69,121,59,94,246,232,2,237,229,143,212,121,104,140,15,47,9,102,51,143,44,201,175,205,126,225,177,29,174,72,165, + 82,163,219,237,206,201,184,126,162,137,39,251,68,196,117,60,199,178,76,168,192,139,233,105,137,199,90,63,152,197,255,91,168,2,235,119,0,207,191,70, + 1,2,34,249,192,145,127,243,240,159,209,11,13,13,85,25,12,134,46,122,189,62,66,173,86,43,11,11,11,237,133,133,133,119,82,83,83,15,81,74, + 249,191,202,238,218,160,9,138,125,149,72,201,91,165,175,223,177,102,39,46,172,110,123,109,80,220,60,194,208,87,75,95,47,180,100,95,155,243,79,216, + 89,29,36,58,90,174,177,74,38,129,146,25,32,196,135,66,248,202,38,177,189,67,211,211,43,47,192,90,9,126,126,126,189,36,18,201,189,26,168,60, + 207,219,11,10,10,14,252,61,22,255,37,228,150,58,64,185,149,45,151,115,142,42,91,38,165,203,174,42,52,92,21,156,43,87,133,245,174,10,122,23, + 60,53,186,214,142,22,33,132,149,42,212,191,142,153,240,108,147,69,111,207,86,46,93,181,13,74,173,111,130,195,82,24,95,91,173,127,2,99,253,118, + 103,88,134,13,47,191,78,16,133,244,220,155,39,255,146,139,110,108,93,213,196,215,95,30,247,194,232,17,61,34,123,12,152,78,0,120,236,104,129,160, + 249,198,31,182,70,28,61,114,248,147,85,171,86,188,171,14,140,251,80,170,144,44,55,221,185,92,84,27,27,12,129,209,245,228,90,227,209,135,6,61, + 27,124,246,224,119,223,104,140,241,61,173,185,9,23,107,219,150,251,204,35,196,24,29,29,221,38,38,38,198,127,218,180,105,50,0,248,232,163,143,26, + 52,104,208,32,63,57,57,249,52,165,52,183,38,141,202,208,4,198,141,251,120,201,187,107,250,246,237,135,204,60,43,22,127,248,105,55,109,112,204,99, + 127,149,179,229,235,91,79,47,209,251,94,154,254,242,187,129,125,186,181,97,45,14,30,251,142,158,239,252,221,167,239,158,210,27,227,219,86,231,108,137, + 54,211,156,32,45,237,35,218,76,0,48,186,226,251,97,90,174,135,81,37,244,9,81,72,206,3,168,49,205,135,111,212,67,251,165,10,69,36,195,148, + 212,156,100,24,2,150,144,146,58,161,110,123,106,250,213,163,189,255,84,99,255,34,244,145,237,178,192,74,252,25,242,187,125,132,41,125,166,180,248,238, + 245,95,252,255,236,103,16,66,12,77,26,248,52,238,223,233,161,175,127,190,85,160,169,211,117,230,110,66,153,207,82,143,126,224,209,5,75,169,84,250, + 238,220,185,211,216,167,79,31,67,80,147,193,63,123,178,143,86,174,140,223,181,107,135,172,79,31,207,15,179,38,48,182,39,24,102,45,1,164,162,72, + 63,98,69,186,209,146,127,61,153,150,246,97,120,138,58,40,110,34,3,234,241,117,70,4,57,99,203,190,182,170,230,45,43,71,170,52,60,34,149,201, + 102,212,139,105,218,50,35,229,198,25,171,197,252,33,231,40,250,185,214,66,28,255,210,193,95,206,246,149,72,165,164,207,35,237,88,0,127,202,209,10, + 10,10,26,188,108,217,178,250,29,58,116,0,0,240,60,175,223,180,105,83,240,220,185,115,53,240,224,55,84,25,132,144,48,163,209,88,71,46,151,135, + 1,128,203,229,202,200,205,205,189,67,41,173,49,7,157,54,56,58,128,64,242,238,47,71,143,74,0,160,115,231,46,243,34,59,79,243,101,101,218,74, + 111,116,57,151,89,3,96,230,137,147,199,9,0,180,111,215,97,182,198,24,191,252,223,138,108,17,66,136,42,48,102,190,159,92,243,194,128,49,99,229, + 253,123,118,129,90,165,194,222,125,7,94,89,189,106,197,112,125,120,124,235,226,244,4,143,210,14,72,36,18,213,169,83,167,162,25,134,97,121,158,119, + 180,111,223,254,206,159,177,45,44,182,227,49,2,38,194,205,187,190,202,189,121,102,62,165,84,168,96,59,107,136,104,249,58,88,201,36,81,20,211,138, + 83,79,119,172,229,71,156,174,97,249,65,248,43,52,170,165,214,142,22,35,145,207,24,253,228,212,38,51,95,124,77,57,125,233,33,236,254,116,118,222, + 127,170,147,5,0,44,195,134,31,56,176,63,80,165,96,1,0,22,187,128,190,30,92,116,125,162,218,29,97,8,137,45,203,80,41,240,110,165,68,42, + 119,16,0,32,37,9,57,2,66,235,30,10,9,241,83,143,30,209,35,114,237,250,31,211,239,164,231,255,92,91,251,8,43,67,251,46,189,208,163,103, + 111,195,169,147,199,222,93,241,197,231,175,106,130,99,63,23,57,241,67,123,126,82,141,3,237,212,33,49,173,52,134,160,125,67,159,158,235,239,96,252, + 240,230,252,143,3,142,238,93,247,115,215,254,227,196,212,212,52,7,37,36,161,176,224,238,12,203,221,27,137,30,217,67,8,171,213,106,235,107,181,218, + 230,125,251,246,85,206,154,53,75,218,173,219,239,101,247,38,79,158,44,59,114,228,72,200,146,37,75,250,133,134,134,58,44,22,203,5,139,197,114,179, + 226,15,170,58,130,131,141,207,13,27,242,40,186,15,125,22,130,72,48,121,234,76,236,223,187,101,10,128,191,196,209,226,212,250,185,147,158,158,101,108, + 223,166,5,251,238,186,68,168,228,18,244,110,29,75,158,156,54,199,103,213,39,239,174,4,208,181,226,62,117,6,45,140,19,109,166,57,77,2,92,163, + 6,118,168,135,29,223,187,70,133,247,120,5,140,218,112,47,178,21,221,247,121,157,175,74,181,44,212,135,13,84,8,185,203,162,251,62,127,48,121,239, + 39,230,234,108,145,42,20,145,235,191,95,215,208,87,43,3,203,18,72,24,6,44,75,224,116,11,24,254,216,168,191,162,185,32,132,176,170,192,134,253, + 24,224,73,0,16,129,213,246,156,164,61,181,57,39,132,149,249,239,218,177,85,18,104,80,128,101,9,88,6,96,25,130,148,108,59,38,78,124,210,240, + 39,237,51,246,237,20,216,230,200,242,174,189,219,55,241,107,182,225,56,49,180,239,59,210,63,207,161,30,191,126,251,225,81,117,186,188,112,146,82,241, + 253,180,95,150,86,123,39,237,116,58,179,123,247,233,171,39,18,141,250,224,182,111,186,72,24,2,55,79,33,136,37,143,223,253,32,2,134,33,160,34, + 197,164,73,19,209,187,79,95,155,200,139,233,30,27,204,48,107,247,29,252,205,232,228,68,44,89,182,234,93,171,41,247,221,91,215,252,83,212,65,49, + 51,75,103,203,122,38,3,218,58,237,230,229,167,215,237,58,129,38,241,141,238,217,25,27,174,193,186,221,39,16,23,27,119,175,214,103,76,132,22,109, + 90,183,1,238,43,77,230,25,82,165,254,205,174,253,31,127,103,192,99,19,16,104,52,130,161,220,128,131,187,215,13,144,170,12,47,113,118,211,146,90, + 137,81,225,222,255,2,21,197,63,61,188,36,52,52,212,216,166,77,155,123,203,60,207,35,42,42,10,25,25,25,177,181,213,34,132,168,67,66,66,250, + 127,249,229,151,129,253,250,245,147,6,7,7,3,0,178,178,178,194,246,237,219,215,50,52,52,52,231,238,221,187,187,41,165,85,206,8,19,56,70,198, + 72,192,42,149,106,0,0,5,97,102,61,247,120,179,160,144,208,74,35,245,185,185,89,242,151,159,61,76,36,18,89,233,246,96,40,21,171,76,94,236, + 231,231,215,67,42,149,170,42,123,207,205,234,219,83,169,225,41,134,101,40,8,0,158,203,45,72,61,219,168,178,109,43,67,31,16,215,79,27,20,187, + 126,230,43,111,105,135,15,236,9,94,4,126,61,126,14,145,117,125,48,113,252,88,132,70,212,141,154,251,214,236,207,0,140,244,84,147,101,89,73,78, + 78,78,138,175,175,111,176,167,251,84,169,197,144,122,63,238,223,27,120,240,167,67,179,63,88,250,201,51,161,49,157,57,145,210,123,117,140,235,52,233, + 46,237,57,96,132,62,48,186,189,242,147,183,158,146,254,217,207,251,111,161,214,63,34,185,74,55,226,141,151,167,41,231,126,119,2,187,63,157,146,103, + 53,229,222,43,151,162,53,248,158,179,152,10,91,62,136,33,186,192,216,14,132,149,60,77,88,86,67,24,34,23,5,49,141,119,185,230,217,242,174,223, + 125,16,189,242,8,34,240,195,111,181,171,60,67,40,26,172,221,184,45,48,200,71,1,135,139,199,200,209,227,176,118,237,26,93,128,94,14,135,139,199, + 251,31,124,96,182,164,236,14,76,73,43,204,232,241,232,11,7,110,222,206,185,124,231,174,99,99,109,109,115,186,5,20,219,120,216,156,12,26,54,110, + 131,247,63,140,83,222,73,189,245,194,55,171,87,62,175,9,138,91,35,178,204,59,246,204,132,180,202,246,213,132,52,237,109,240,13,253,126,200,211,243, + 125,146,114,36,160,112,35,89,175,196,136,241,207,235,235,7,171,160,81,178,62,183,82,51,66,102,189,244,210,175,134,192,232,182,166,156,106,50,121,151, + 82,183,110,221,161,3,6,12,80,191,248,226,139,210,136,136,8,172,94,183,41,178,115,239,199,30,205,188,155,29,65,41,69,80,96,96,218,164,39,31, + 219,185,103,207,158,212,180,180,52,233,226,197,139,219,109,221,186,53,30,181,184,51,21,40,133,195,41,64,16,74,254,120,114,107,89,29,133,16,66,194, + 194,194,20,25,25,25,206,178,40,3,33,228,222,133,79,27,214,162,247,35,93,219,73,190,220,123,27,22,135,0,141,82,138,219,217,54,180,110,209,148, + 124,37,240,205,43,211,156,56,162,255,156,32,45,237,51,176,67,61,4,250,170,241,245,242,249,216,113,252,86,159,108,11,65,192,192,197,79,135,40,36, + 61,141,106,217,178,110,173,163,131,187,183,138,196,233,214,209,193,71,207,38,94,111,58,226,195,105,25,22,233,193,130,189,211,42,117,184,88,134,129,159, + 78,142,149,251,82,160,86,74,160,81,74,160,81,148,60,51,204,3,39,154,7,0,168,66,227,35,88,81,152,168,15,141,159,56,106,196,99,161,99,70, + 61,70,193,50,216,244,195,206,65,223,125,183,246,174,54,56,118,165,192,176,171,170,250,254,148,135,48,64,160,65,142,151,86,94,134,94,37,133,78,45, + 133,94,45,69,247,102,70,176,158,215,123,254,163,38,33,190,83,6,213,239,119,113,77,143,135,99,235,104,27,94,72,54,37,76,156,119,102,233,145,162, + 135,103,44,255,40,222,223,82,228,146,188,57,107,146,36,61,51,243,225,77,59,127,238,30,218,118,98,34,239,182,190,150,115,97,99,165,81,225,180,107, + 199,90,134,119,120,76,233,182,112,151,46,36,166,71,23,58,21,184,146,82,12,141,82,2,109,217,177,85,74,160,81,74,161,85,74,144,153,126,27,5, + 86,246,215,12,127,230,97,122,228,88,173,186,168,28,110,1,231,111,89,80,55,182,5,66,66,66,225,234,55,182,238,201,67,63,108,215,132,52,90,104, + 189,123,181,170,241,30,247,177,110,215,9,204,158,249,244,89,2,156,3,0,10,180,124,115,209,167,173,222,157,253,236,31,214,205,122,231,147,86,181,177, + 175,60,82,165,126,206,195,67,158,125,167,75,207,193,48,23,100,227,216,129,141,232,61,96,24,198,78,152,14,31,159,128,247,165,74,195,5,206,113,127, + 182,124,93,72,163,135,154,54,105,244,93,88,104,104,132,88,90,111,148,82,224,161,174,221,241,242,140,73,16,41,69,243,150,109,187,247,27,53,141,82, + 90,226,16,230,229,231,89,19,175,37,244,176,103,95,59,233,169,125,14,135,131,203,205,205,197,249,243,231,113,253,250,117,92,185,114,5,249,249,249,48, + 24,12,181,234,122,39,132,232,155,53,107,54,230,208,161,67,74,95,95,223,123,235,93,46,23,116,58,29,198,140,25,35,237,213,171,87,88,255,254,253, + 159,32,132,172,163,148,22,87,166,99,207,79,202,212,7,199,125,209,181,91,215,103,0,64,165,15,185,181,108,245,206,106,11,207,171,12,161,145,29,59, + 118,138,6,165,32,160,31,91,243,18,179,170,218,86,34,145,104,78,156,56,81,159,101,217,123,255,175,162,40,226,179,175,55,196,253,248,203,165,161,139, + 222,95,162,212,107,20,200,53,185,240,212,216,33,30,255,7,171,131,98,251,107,117,154,157,175,188,62,135,12,233,223,3,223,238,60,131,117,171,63,231, + 51,110,95,226,30,238,63,65,217,178,109,71,116,111,219,26,205,90,180,27,161,14,141,91,108,203,188,118,95,229,137,26,248,75,178,151,55,12,215,66, + 55,176,183,114,202,227,3,149,46,78,64,145,149,131,211,93,82,110,205,100,229,144,112,199,140,0,253,131,149,114,251,111,69,178,123,247,110,218,191,127, + 255,123,87,252,138,203,21,81,200,164,161,26,131,17,148,94,69,185,255,54,4,133,132,231,127,254,197,87,126,6,95,255,84,83,97,126,36,224,217,20, + 79,85,104,124,132,132,176,31,118,237,214,165,215,51,83,167,34,182,126,184,76,16,4,122,249,250,45,238,155,85,95,143,55,68,52,93,90,156,126,121, + 14,45,41,97,226,145,102,121,4,81,72,175,24,193,18,68,225,15,119,183,149,105,18,2,248,104,100,248,98,207,45,80,10,16,80,232,213,82,172,63, + 146,142,91,103,183,20,15,104,94,108,29,179,232,237,238,15,247,123,254,80,66,178,99,99,78,142,99,63,165,52,171,58,205,202,112,184,69,56,221,2, + 56,158,199,230,157,59,209,167,123,59,116,236,216,14,93,58,119,148,156,57,123,113,194,212,103,38,69,160,180,236,72,121,77,85,112,195,54,122,159,240, + 141,67,159,89,172,187,148,206,67,194,2,245,130,85,240,211,201,224,226,9,82,114,75,146,99,83,248,96,218,172,119,252,102,191,240,204,30,66,226,155, + 80,154,240,135,172,217,21,237,180,217,108,242,113,227,198,73,57,142,115,143,121,106,122,175,172,172,220,65,159,125,252,158,34,48,48,8,54,7,143,179, + 87,110,52,122,247,221,119,234,237,220,119,100,219,219,47,77,217,222,167,79,31,195,134,13,27,196,234,52,43,146,155,157,183,252,235,239,54,175,249,104, + 201,2,36,166,22,98,213,151,159,130,10,252,23,213,237,83,94,147,82,74,95,123,237,53,213,182,109,219,194,53,26,77,177,205,102,43,223,133,201,48, + 12,145,100,23,216,16,160,147,67,38,97,16,228,171,68,160,65,1,41,11,48,132,8,149,105,174,218,184,123,158,104,51,97,199,247,174,81,95,47,159, + 143,9,207,189,142,203,121,242,125,140,218,48,239,217,81,67,103,27,85,66,159,80,31,38,176,123,171,186,208,40,101,120,245,249,113,104,123,54,37,48, + 163,72,124,61,215,206,182,0,74,202,6,85,108,59,195,16,72,88,2,157,90,138,125,223,189,159,99,53,229,154,202,186,228,92,78,71,106,117,109,174, + 238,120,106,130,98,103,183,106,209,108,254,51,147,39,50,157,58,180,165,12,35,69,158,217,69,40,5,102,76,155,130,103,167,76,10,78,203,204,121,243, + 211,79,191,152,163,13,108,52,215,146,115,245,237,234,52,25,82,18,5,210,42,37,208,170,74,28,23,173,82,2,135,75,0,33,96,125,35,91,153,72, + 73,36,55,51,63,165,242,59,240,138,154,126,117,26,255,244,227,45,93,92,225,198,194,227,183,51,175,204,59,123,49,251,20,165,180,160,78,215,23,158, + 112,243,20,22,7,143,219,217,54,240,110,74,38,244,141,68,212,112,18,187,224,235,115,107,8,33,250,50,7,186,162,102,250,241,77,142,128,166,67,71, + 126,244,201,151,167,151,204,127,157,205,51,185,32,82,10,165,156,133,74,46,41,125,176,176,91,77,248,244,243,175,178,120,144,161,244,200,17,190,58,59, + 239,67,164,99,135,244,235,178,158,0,114,194,200,210,67,35,235,70,62,242,232,120,229,35,3,199,65,224,93,179,53,65,113,135,173,217,215,126,242,68, + 179,73,124,35,16,224,156,37,59,113,10,0,104,131,98,191,136,139,141,107,85,113,93,131,6,177,247,57,90,213,217,41,83,233,159,243,245,51,190,30, + 219,184,69,96,116,211,174,68,239,31,134,91,73,231,177,254,243,55,215,138,14,215,59,63,237,222,56,127,233,170,173,35,30,233,51,4,95,127,246,222, + 171,0,14,85,212,164,162,56,246,155,149,43,34,164,114,5,56,94,4,39,208,146,103,94,64,65,65,33,56,94,132,82,173,3,47,18,112,130,8,142, + 23,225,116,241,154,41,227,250,79,5,112,207,209,42,175,25,222,168,219,126,153,66,17,73,81,82,187,150,82,10,150,119,49,33,33,33,235,0,64,161, + 80,64,161,80,64,20,69,156,77,204,125,206,24,215,227,25,148,58,120,130,219,149,90,120,251,215,222,85,181,61,56,56,248,209,138,78,150,195,225,128, + 197,98,193,47,199,79,27,86,174,217,220,231,118,106,122,125,145,26,156,186,192,250,189,1,60,90,213,241,44,206,186,54,53,162,195,100,230,197,103,159, + 104,240,201,55,187,78,37,237,155,251,106,85,199,26,0,234,245,152,237,122,241,233,97,173,23,125,188,42,169,224,215,207,103,214,116,142,36,18,137,52, + 55,55,55,181,108,121,217,87,223,183,62,151,152,49,120,233,71,75,149,103,111,154,113,233,118,38,158,232,81,167,228,14,167,2,149,105,106,131,163,3, + 140,129,33,155,6,15,28,66,134,63,218,19,43,119,156,199,138,207,150,23,100,101,36,70,106,24,210,63,249,218,153,245,62,225,241,136,206,49,35,174, + 89,59,92,56,127,170,37,128,243,213,105,86,66,173,28,173,234,52,15,95,204,131,197,193,195,233,226,193,137,20,197,54,14,57,69,46,20,219,220,176, + 216,121,60,209,179,78,165,251,213,214,31,249,111,65,2,252,222,152,221,187,119,87,123,160,9,33,245,213,122,127,133,94,37,69,189,168,58,120,242,181, + 175,3,244,126,65,57,74,185,132,221,187,119,159,95,190,75,11,134,97,171,44,205,82,17,93,96,76,71,149,74,189,251,131,15,62,192,168,71,59,171, + 238,228,113,150,139,119,236,217,86,23,248,64,99,140,124,222,130,69,218,69,139,223,127,118,215,14,177,8,192,251,149,105,248,68,181,57,195,146,114,99, + 176,8,1,21,133,244,130,219,167,90,3,192,159,25,139,101,117,240,96,75,199,214,16,2,216,156,2,88,150,228,20,37,110,76,24,51,119,94,247,181, + 235,127,204,164,140,143,217,106,189,173,166,148,122,222,53,81,14,135,75,128,147,19,112,229,194,89,116,105,31,143,142,173,227,96,115,8,176,57,121,68, + 69,199,2,64,64,101,251,73,88,230,22,21,56,7,165,130,110,64,27,35,2,125,228,8,241,85,64,33,147,128,19,0,187,75,132,195,37,32,37,199, + 14,179,93,133,166,93,31,171,231,31,114,198,233,31,217,102,91,126,234,233,161,213,217,36,8,2,190,89,183,185,65,102,102,246,160,61,219,190,83,228, + 22,115,184,152,98,69,78,145,19,96,141,120,107,193,114,197,43,51,39,15,254,230,251,31,82,31,233,220,46,181,182,109,182,230,92,91,219,180,99,255, + 47,6,12,24,172,186,114,114,15,146,206,255,52,223,146,237,249,248,44,66,8,179,105,211,38,126,242,228,201,230,5,11,22,68,236,216,177,35,42,55, + 55,247,60,0,206,199,199,39,46,166,65,228,133,3,251,246,134,245,31,252,152,52,61,207,14,131,90,134,200,64,53,142,255,178,159,147,203,165,149,142, + 55,41,237,30,28,29,222,227,21,236,56,126,171,207,149,124,229,145,73,19,159,72,61,112,52,49,127,217,154,3,239,133,105,185,243,74,49,119,217,153, + 214,209,193,179,167,141,195,194,79,214,226,231,179,137,57,86,38,100,254,93,39,255,227,219,35,95,174,212,86,150,65,137,163,165,146,194,90,156,107,186, + 113,118,111,76,109,143,87,21,60,113,96,219,90,166,192,204,33,45,207,65,50,11,204,16,68,10,31,181,12,188,72,81,84,144,71,190,91,187,6,167, + 79,31,103,192,50,79,1,120,187,58,49,134,148,116,21,106,149,210,146,136,144,170,228,153,19,68,196,54,136,198,138,101,31,234,3,2,131,240,80,151, + 135,61,54,80,231,31,217,124,253,234,101,56,114,236,92,183,159,151,46,111,163,13,53,126,162,15,143,95,98,136,234,233,112,186,5,152,138,10,33,119, + 165,161,109,88,46,252,212,2,82,138,67,112,57,43,73,91,211,88,168,188,75,91,206,27,155,12,153,179,121,231,161,133,189,123,118,195,229,148,98,168, + 228,18,40,229,44,148,114,22,82,34,224,195,207,191,224,10,77,230,1,121,151,183,229,121,108,112,41,165,133,192,239,141,73,211,6,213,55,174,253,100, + 206,183,147,94,94,220,187,207,144,241,228,242,233,195,175,1,248,169,106,133,223,17,196,251,155,82,217,58,177,146,117,85,161,210,27,63,126,97,206,251, + 207,247,26,240,24,88,86,2,158,227,176,121,195,90,172,94,254,214,53,151,37,127,60,165,84,36,196,111,242,198,181,159,63,246,242,155,31,146,38,205, + 219,86,90,96,93,100,201,151,143,79,124,122,100,80,80,144,238,247,136,22,69,76,108,60,250,13,28,134,253,219,183,34,225,202,69,136,180,196,97,18, + 69,138,162,194,252,44,158,115,125,83,149,109,114,165,50,242,235,213,107,26,50,12,129,155,19,225,226,69,204,156,250,164,107,202,140,215,30,234,215,171, + 235,21,57,139,226,148,59,119,125,142,159,187,218,84,148,106,35,38,206,250,80,230,112,10,48,217,56,236,89,85,181,175,163,242,139,236,208,188,227,224, + 137,83,222,88,161,80,176,140,187,113,76,196,173,174,237,27,167,213,9,13,48,191,187,104,121,219,95,79,158,235,55,98,204,68,229,19,113,173,72,168, + 191,74,247,228,152,33,205,52,254,117,30,183,230,223,89,83,149,166,84,237,91,84,39,170,193,189,46,70,117,112,236,22,66,81,175,252,54,148,224,150, + 45,43,113,40,0,132,132,214,113,72,21,250,106,135,10,252,97,223,210,239,241,39,95,125,223,250,194,245,204,73,31,125,180,84,125,246,166,25,231,111, + 154,160,144,49,112,115,34,136,167,46,132,200,78,83,200,21,202,231,166,60,137,179,55,138,176,253,135,45,112,219,138,158,82,17,97,53,37,164,111,160, + 159,14,197,102,179,152,154,109,97,124,252,252,1,160,177,167,118,222,251,8,177,228,126,217,16,24,93,79,144,40,250,73,229,154,14,132,208,198,132,194, + 23,160,25,249,165,255,169,213,182,185,220,107,107,246,117,44,94,240,38,62,94,185,21,153,249,14,24,132,52,108,95,53,15,47,46,92,7,187,179,234, + 81,13,158,250,35,255,77,72,0,160,172,81,213,53,142,16,18,99,12,137,60,182,125,219,22,223,66,139,27,74,25,139,58,81,13,240,246,178,237,198, + 190,173,3,144,231,54,224,251,21,75,10,28,54,243,6,79,62,88,21,20,215,78,167,211,237,217,242,195,86,212,175,19,40,251,238,151,130,219,231,110, + 217,239,133,122,139,115,83,229,81,122,155,100,232,144,33,234,159,14,29,158,129,42,28,45,150,176,225,95,173,249,33,80,167,146,130,16,192,108,231,49, + 233,241,97,15,112,40,42,64,69,118,194,248,199,65,74,157,172,226,252,44,188,246,242,51,14,13,151,148,112,39,229,78,70,143,71,95,252,169,216,66, + 28,35,199,77,61,157,112,125,161,103,245,142,42,193,233,18,240,127,236,157,119,120,84,69,219,198,239,217,158,45,233,61,1,130,64,10,4,66,151,222, + 139,72,164,72,17,16,5,21,65,44,216,16,80,80,186,32,210,81,144,34,32,32,29,105,65,8,29,164,19,122,73,2,41,132,244,190,37,219,119,207, + 124,127,236,6,3,236,38,27,124,121,63,245,157,223,117,157,43,123,78,102,239,157,179,57,187,185,207,51,207,60,99,48,113,72,73,185,143,79,71,244, + 128,144,207,3,159,207,217,146,165,45,206,47,70,117,86,98,177,123,112,204,160,141,11,62,92,29,18,24,224,171,144,75,169,66,38,33,13,235,71,136, + 90,183,110,43,126,33,170,177,232,244,29,29,50,10,116,72,205,86,66,18,216,84,48,180,235,203,216,184,120,124,103,66,8,175,60,66,232,140,195,39, + 206,247,89,179,98,145,36,175,212,132,187,25,26,228,150,232,145,83,98,64,110,177,30,10,169,16,29,251,142,150,196,237,89,217,167,91,135,86,75,159, + 229,188,83,83,211,226,210,179,114,6,55,110,246,34,54,254,178,174,131,183,119,29,143,146,146,84,135,161,126,7,208,89,179,102,137,231,206,157,43,88, + 182,108,153,170,117,235,214,65,95,126,249,229,75,249,249,249,23,107,215,174,29,117,104,215,250,99,77,59,246,107,9,206,228,223,161,83,23,145,132,19, + 32,126,255,126,211,182,173,155,138,116,58,245,123,149,9,243,100,158,179,242,52,4,254,161,161,183,20,98,107,15,1,175,52,169,248,247,143,54,0,216, + 85,239,229,113,71,142,95,78,76,106,145,144,30,112,44,225,94,126,177,214,20,121,255,247,207,42,253,226,229,19,2,1,159,7,119,169,0,60,251,183, + 170,123,104,147,123,32,196,31,176,93,91,4,196,254,19,32,4,217,197,15,174,184,144,179,65,40,71,129,196,204,50,104,244,182,208,124,13,63,25,10, + 242,50,177,124,233,122,92,185,124,9,61,95,238,139,31,87,111,194,187,111,14,174,114,22,18,143,103,143,104,85,136,102,41,164,2,0,4,165,101,102, + 236,252,227,33,234,213,225,185,254,143,1,128,187,66,6,165,90,7,158,200,29,247,19,14,200,126,63,126,225,203,41,51,23,125,81,146,115,61,227,222, + 141,211,136,242,83,162,78,168,9,183,114,61,112,185,232,5,68,133,215,5,79,228,90,94,106,225,173,152,121,123,120,59,95,105,209,52,186,77,88,128, + 23,116,70,171,61,170,197,199,186,181,27,144,158,150,249,78,225,173,221,87,92,239,173,115,52,121,41,5,110,129,17,31,220,184,112,52,245,213,215,63, + 64,112,104,45,135,195,207,142,112,100,160,28,29,115,100,190,28,33,150,123,127,57,254,155,5,227,122,198,14,194,249,211,71,113,245,214,125,180,106,213, + 2,47,247,31,10,181,170,184,254,246,13,139,123,0,56,36,144,88,198,189,216,182,43,225,172,86,36,223,189,121,223,145,150,125,104,201,163,226,49,153, + 127,131,38,10,79,159,171,6,147,21,89,89,153,56,115,246,68,179,234,14,65,73,68,124,196,95,201,135,201,204,193,100,225,208,177,83,15,163,136,103, + 232,48,123,209,218,214,57,217,57,60,185,135,31,231,19,218,64,20,44,49,25,174,165,40,69,38,51,135,186,33,242,74,53,253,67,194,191,29,63,254, + 211,6,124,145,20,234,50,131,49,39,59,43,104,213,230,227,154,59,119,111,132,214,8,240,244,248,110,241,74,145,74,79,144,175,52,160,88,173,34,175, + 143,153,16,178,230,135,57,195,1,56,53,90,79,66,40,234,196,197,159,174,239,237,46,34,26,189,133,43,82,153,172,175,247,119,253,198,194,17,118,147, + 53,122,209,194,197,178,43,41,106,92,75,81,194,77,196,135,88,196,131,209,204,193,149,143,19,33,132,231,95,187,217,39,19,191,24,15,14,60,92,184, + 145,138,156,135,247,169,187,66,190,59,234,197,247,192,23,73,48,168,87,27,132,6,251,240,142,159,191,139,64,79,47,16,160,115,213,202,143,163,209,106, + 249,102,113,208,91,193,161,181,219,13,24,250,150,103,88,173,80,18,224,231,11,11,21,96,244,155,3,93,254,228,219,140,57,48,119,230,151,48,24,140, + 240,247,18,131,82,96,237,210,105,48,26,141,8,241,149,64,89,102,118,250,124,87,252,200,63,141,71,227,195,149,133,231,136,88,28,229,23,28,118,46, + 254,208,65,207,221,215,56,156,255,237,50,98,91,5,67,36,224,65,230,25,130,107,105,74,196,237,90,81,186,103,203,202,44,131,193,224,208,16,85,68, + 22,20,209,194,93,238,113,232,151,141,91,57,63,95,95,222,242,248,130,148,34,181,229,209,144,86,210,133,189,220,229,67,171,130,41,200,65,55,55,183, + 112,163,209,232,93,153,30,71,129,181,241,15,236,73,188,255,153,40,35,225,243,173,155,54,109,132,175,135,24,6,51,135,73,95,124,172,27,209,83,81, + 250,250,107,67,187,118,233,61,238,152,80,30,113,180,109,179,8,218,180,105,211,82,62,159,95,181,30,33,130,128,128,128,105,60,30,111,152,88,44,118, + 55,26,141,106,49,68,178,50,189,17,122,19,160,213,234,33,20,217,204,162,144,79,160,211,27,161,213,25,43,213,84,231,220,248,3,192,99,17,18,82, + 175,158,248,215,237,123,62,30,244,218,144,41,161,77,250,43,210,114,148,16,17,19,90,54,8,198,241,131,191,209,204,244,164,79,171,50,89,0,144,95, + 80,92,211,223,63,16,87,82,53,200,42,210,33,215,110,178,114,74,12,80,235,212,104,28,22,130,82,165,178,102,149,39,238,236,253,0,126,59,116,232, + 208,224,222,253,134,96,220,23,211,219,255,188,98,254,117,69,80,228,219,154,220,164,42,23,132,166,148,82,66,72,241,196,137,19,235,173,94,189,154,55, + 124,248,112,93,76,76,140,219,27,111,188,209,126,195,134,13,110,50,153,155,238,218,233,189,83,70,125,52,169,223,170,37,179,154,148,148,148,16,139,217, + 252,187,169,164,100,146,186,10,51,151,177,231,203,187,36,122,250,200,30,29,252,247,250,200,120,13,37,212,56,148,68,79,223,74,111,79,53,221,255,125, + 169,58,230,181,133,31,101,151,114,147,245,188,128,217,85,153,44,0,224,241,9,140,102,14,238,82,33,120,60,251,48,1,229,130,215,109,253,93,230,239, + 41,134,144,207,131,128,79,160,210,154,81,168,50,225,131,183,250,185,248,14,82,206,98,165,208,25,45,208,218,239,14,213,170,66,124,249,197,103,120,185, + 207,171,24,245,222,103,40,209,1,151,83,213,48,153,205,85,126,40,120,132,7,173,193,130,183,123,134,161,88,99,66,153,206,2,163,133,131,76,44,128, + 80,192,131,220,77,0,15,153,16,160,84,68,8,25,13,0,66,161,80,111,50,153,54,58,237,33,165,120,161,102,32,116,102,30,94,28,50,31,221,219, + 68,226,214,31,59,5,39,207,223,168,243,201,23,147,241,241,187,125,176,227,110,61,248,4,132,65,33,151,194,76,121,0,92,43,29,66,233,84,46,184, + 254,128,97,63,173,94,151,56,227,155,137,110,165,101,4,18,17,31,199,142,30,193,185,11,151,151,20,220,218,237,180,95,207,130,144,242,2,61,60,60, + 224,38,230,195,104,50,84,254,193,172,128,149,163,160,64,51,69,96,212,79,128,45,31,203,202,193,193,177,170,255,159,8,165,158,147,198,77,156,245,109, + 207,216,65,136,223,191,3,219,118,108,181,182,125,121,20,127,211,186,159,208,190,123,95,180,239,57,4,191,255,182,225,51,161,212,51,122,244,199,95,207, + 236,216,181,55,226,227,118,32,47,55,115,129,171,253,229,11,201,184,174,61,250,64,111,180,162,67,183,87,112,112,223,111,31,193,62,201,194,85,158,52, + 227,28,120,150,207,62,29,39,204,87,26,133,133,74,35,30,22,234,144,158,91,134,221,91,126,118,249,159,40,129,177,101,199,198,53,132,163,231,29,123, + 88,179,70,176,65,104,208,73,147,238,167,212,31,245,214,8,97,157,240,250,188,124,165,1,5,74,3,10,149,6,104,244,22,132,215,136,224,153,45,164, + 77,117,250,13,0,126,158,98,225,143,251,82,225,33,23,162,109,253,103,159,104,203,113,220,159,38,107,145,205,100,93,79,85,66,34,226,67,34,226,65, + 34,226,195,98,165,46,221,184,72,3,234,143,12,173,81,67,209,179,75,59,92,190,175,68,78,102,38,122,245,234,78,210,74,197,216,56,115,48,138,148, + 90,204,88,125,18,95,140,138,69,191,174,77,144,155,95,8,62,159,31,81,157,190,30,136,63,81,43,254,212,149,137,31,140,159,170,120,173,79,23,254, + 213,20,37,114,138,13,184,159,164,174,94,228,13,128,197,202,129,130,98,253,214,253,144,138,5,40,80,154,64,41,197,172,101,219,224,46,21,34,167,196, + 54,220,95,25,255,134,225,194,138,84,153,136,39,22,43,234,251,249,134,156,143,63,120,192,253,183,107,86,28,191,86,132,65,29,106,64,83,156,129,239, + 191,120,173,152,128,26,121,124,126,169,65,167,221,165,211,149,205,166,148,154,42,211,147,5,71,53,147,75,61,142,252,184,234,23,139,95,64,0,54,158, + 46,206,44,41,179,60,178,183,86,171,153,92,62,180,170,142,133,51,247,210,229,38,87,121,123,203,81,136,230,172,216,3,128,130,227,56,80,142,131,208, + 77,33,247,175,215,38,15,0,172,28,117,19,240,136,237,142,222,126,181,80,206,146,89,144,82,121,24,148,0,240,144,9,177,245,100,22,0,228,241,213, + 9,119,94,127,205,54,92,168,55,186,169,26,214,171,71,91,182,108,89,42,149,58,156,92,242,184,22,33,252,192,192,192,139,83,166,76,169,63,106,212, + 40,137,88,44,134,197,98,241,89,185,106,21,183,106,246,187,24,240,209,143,16,137,37,208,233,77,16,96,176,138,251,0,0,32,0,73,68,65,84,10, + 5,40,81,106,80,170,210,66,173,117,238,250,157,65,239,223,55,2,152,23,18,213,225,213,151,20,141,95,20,243,68,104,30,21,140,227,135,118,211,243, + 7,215,190,171,205,75,252,197,37,29,74,161,209,155,145,93,164,71,86,145,30,185,37,122,228,22,27,144,91,162,7,33,4,122,227,95,43,127,83,150, + 159,184,125,227,47,107,250,26,76,24,218,177,231,171,248,108,234,143,97,27,127,154,123,68,26,88,191,157,43,137,182,148,82,43,33,36,253,173,183,222, + 106,178,121,243,102,126,163,70,141,116,119,238,220,145,1,224,0,152,20,10,153,244,231,31,230,28,122,241,197,23,183,100,37,221,61,6,160,196,149,233, + 249,181,59,191,37,169,239,81,60,186,150,188,237,75,117,131,100,168,37,87,191,84,95,113,237,251,128,110,159,124,155,127,116,113,126,142,193,114,184,64, + 199,111,154,165,17,186,148,131,103,54,232,31,12,24,52,4,124,194,131,73,175,125,0,0,32,182,196,243,105,155,238,66,225,38,132,187,84,0,133,84, + 136,246,209,62,46,221,225,150,191,5,102,43,7,173,193,10,157,193,2,189,209,2,191,154,222,88,189,113,59,50,242,117,216,115,169,16,137,15,212,136, + 168,33,7,165,85,127,77,114,86,115,89,159,129,195,221,249,60,2,62,143,240,162,235,71,162,88,99,130,72,192,131,200,77,10,185,68,0,15,169,16, + 34,145,16,249,249,249,48,24,12,168,85,171,150,91,165,29,228,40,220,21,82,68,212,9,129,201,108,193,129,83,183,49,251,211,1,232,209,177,5,136, + 80,129,187,134,102,112,247,113,7,199,227,193,100,225,96,52,89,1,240,156,70,223,106,213,170,213,85,46,151,203,181,90,173,250,193,131,7,39,114,238, + 238,202,8,104,216,127,244,193,248,99,27,95,121,185,7,174,92,191,133,29,191,237,61,93,232,171,28,95,254,156,70,141,26,181,246,243,243,83,20,21, + 21,169,110,220,184,113,209,245,183,247,79,8,33,68,30,88,255,147,54,237,59,67,83,154,143,188,135,105,46,47,249,209,32,204,29,95,207,249,177,121, + 84,100,84,115,43,181,25,175,232,90,238,248,124,234,210,230,245,34,34,155,151,79,8,105,80,75,81,169,142,80,238,209,243,205,209,159,207,233,59,104, + 36,142,197,239,197,194,217,95,108,84,184,251,55,240,241,242,104,218,168,117,79,156,62,178,23,110,238,65,240,246,13,106,63,252,237,15,187,15,26,62, + 6,231,78,31,193,146,185,95,109,176,26,212,191,186,210,87,69,96,93,255,166,45,59,190,238,238,19,136,82,165,26,238,222,1,104,208,184,229,235,138, + 192,186,19,53,121,41,207,84,202,5,176,13,73,26,76,20,37,106,19,50,10,108,38,43,45,79,11,142,171,70,78,144,149,35,10,55,129,192,199,124, + 175,214,141,35,199,104,88,205,64,50,111,230,23,124,19,220,80,80,106,51,89,5,42,35,10,148,70,104,244,102,248,200,5,224,172,206,103,6,58,163, + 68,99,130,187,76,8,79,153,200,229,40,163,35,86,172,219,26,117,45,41,187,255,194,133,139,101,87,83,43,152,44,161,45,154,37,17,241,97,229,56, + 192,133,79,60,143,71,103,76,249,106,2,116,38,14,249,165,70,136,37,98,132,134,214,131,168,196,140,55,191,217,1,33,159,143,33,177,173,1,216,34, + 220,23,238,170,96,181,184,126,238,101,58,29,127,213,166,184,79,182,111,219,226,169,183,10,176,242,247,116,104,13,22,184,137,248,144,136,248,144,138,248, + 143,229,99,87,133,197,106,203,185,203,40,52,67,171,215,67,165,51,131,2,184,120,79,3,157,209,2,101,153,25,173,235,87,26,59,249,215,33,120,210, + 57,86,220,23,43,124,26,120,250,250,159,63,248,251,126,197,111,215,56,156,184,110,51,89,102,93,33,22,76,28,150,169,42,45,236,66,41,173,180,0, + 100,69,228,254,209,141,165,50,217,177,239,22,175,52,5,4,134,114,187,206,151,230,43,181,214,199,220,132,213,96,224,81,142,138,92,49,89,0,192,227, + 17,211,212,143,94,5,71,41,166,45,222,142,111,199,15,129,66,58,92,70,8,145,149,233,45,248,116,250,26,44,248,250,29,119,153,68,0,66,108,57, + 81,111,14,125,213,165,254,150,233,45,184,127,97,179,70,157,186,255,78,197,225,194,86,237,95,190,220,170,85,171,82,111,111,111,72,165,210,63,35,21, + 78,8,12,12,252,122,234,212,169,81,239,189,247,158,164,252,152,64,32,192,7,239,191,207,179,90,41,126,255,125,45,252,107,55,195,222,195,231,209,171, + 107,75,104,180,122,20,151,170,193,161,234,72,153,51,212,165,133,199,114,211,111,188,216,174,75,31,156,56,180,155,158,255,253,231,119,171,83,163,199,219, + 199,251,97,194,141,251,13,8,241,177,69,180,236,38,203,104,230,16,22,40,195,195,244,251,240,242,244,172,114,54,91,57,178,128,250,253,8,143,190,71, + 64,215,106,114,147,182,219,77,207,48,121,80,253,235,183,110,94,157,253,202,235,227,4,61,7,189,207,255,105,206,135,95,225,137,36,214,74,48,37,38, + 38,222,126,231,157,119,218,158,59,119,206,10,64,75,8,49,243,249,124,153,209,104,20,117,233,210,69,121,247,238,221,147,0,170,28,218,237,240,246,14, + 63,34,81,191,92,47,162,229,176,48,119,117,143,46,29,218,160,77,195,154,120,216,161,13,0,140,123,160,81,68,181,31,251,243,214,58,254,53,14,252, + 180,110,223,183,239,14,233,254,105,72,159,233,11,179,247,77,173,180,200,108,198,237,19,14,106,137,148,15,39,10,161,144,10,224,46,21,194,221,77,8, + 179,197,181,59,92,59,212,108,225,108,17,45,163,5,26,157,5,199,174,230,33,87,105,68,169,218,4,157,201,10,10,106,187,27,117,225,219,60,63,249, + 15,175,242,199,222,97,205,149,171,150,205,247,216,249,71,230,163,25,125,158,50,49,220,101,182,217,216,167,78,157,130,175,111,213,119,251,28,199,97,199, + 193,139,88,184,254,24,14,174,157,0,55,17,31,141,251,77,199,200,254,173,192,81,14,247,19,111,229,69,68,55,9,228,241,164,224,17,2,131,153,3, + 64,157,190,159,70,163,209,55,35,35,67,21,30,30,30,20,26,26,58,136,207,231,83,9,96,216,189,165,88,123,116,255,175,178,50,157,193,42,179,40, + 215,134,231,232,98,35,34,34,64,8,161,126,126,126,162,99,199,142,105,98,98,98,252,157,233,86,6,33,132,39,13,136,92,50,106,236,39,131,234,213, + 173,139,237,191,174,5,165,100,167,171,207,223,180,239,28,102,126,249,248,12,195,207,167,46,109,190,96,250,184,199,142,141,253,114,97,165,179,14,165,18, + 197,248,1,195,70,227,242,197,179,248,126,250,231,91,12,154,226,145,102,139,121,112,113,78,234,150,58,209,173,64,77,106,196,111,155,143,33,111,188,43, + 233,249,202,32,156,59,125,4,223,126,53,118,147,182,52,255,45,87,235,127,113,84,248,94,151,151,250,11,117,6,19,150,206,251,6,99,198,207,70,235, + 174,125,132,55,175,158,127,15,192,12,87,207,217,96,178,162,75,140,159,205,60,155,57,236,77,229,11,28,93,129,2,62,225,53,173,235,5,157,209,2, + 85,21,55,149,2,145,48,183,84,169,170,253,195,183,159,240,203,244,22,20,40,141,200,87,26,80,88,250,167,193,42,84,26,80,160,52,66,40,32,72, + 74,121,0,158,80,80,237,252,188,18,141,25,47,70,122,3,32,16,60,227,232,136,89,224,209,234,224,201,107,3,22,46,92,228,118,45,77,141,235,169, + 42,123,36,139,15,137,144,7,177,253,177,149,179,229,70,86,134,123,112,68,251,122,47,68,132,180,121,177,9,238,102,216,210,159,3,131,130,161,85,231, + 163,67,179,122,136,237,220,24,94,30,238,184,243,64,137,111,55,223,196,189,123,41,224,155,93,205,192,176,177,116,229,150,94,163,62,248,220,139,39,20, + 99,195,161,52,91,63,249,86,220,61,191,79,159,125,255,70,153,70,85,68,65,173,46,230,32,19,106,177,218,46,183,111,167,77,194,150,245,203,113,40, + 33,255,81,242,214,31,59,23,224,147,47,103,161,80,101,4,28,36,223,87,230,71,254,201,56,141,104,201,189,3,26,121,186,123,158,253,253,247,125,242, + 221,215,233,35,147,101,210,22,210,217,227,250,100,170,74,11,122,86,203,100,5,68,54,146,200,229,39,167,204,90,98,8,12,173,109,57,112,85,85,164, + 214,91,159,10,139,136,100,114,171,220,211,95,239,21,214,108,161,80,103,252,166,160,224,118,165,201,245,4,182,59,166,253,23,114,65,169,237,22,105,219, + 169,44,216,239,204,97,229,108,195,42,135,175,230,67,96,207,67,113,5,66,128,21,43,151,171,98,99,148,101,175,127,59,237,209,112,97,235,38,182,72, + 150,135,135,7,188,188,188,160,80,40,80,213,208,33,33,228,205,81,163,70,61,117,247,159,159,159,143,238,221,186,96,217,242,213,104,210,109,4,14,159, + 57,4,147,153,67,227,232,186,168,29,226,141,135,121,46,231,93,62,134,34,168,254,7,47,118,125,245,171,246,93,251,224,216,193,93,244,252,193,117,163, + 171,91,8,49,182,123,219,125,51,103,78,171,51,101,246,15,18,119,55,1,238,104,140,224,17,130,176,64,25,124,229,60,156,216,189,65,63,164,79,219, + 125,174,234,213,172,25,186,113,193,178,85,242,5,115,167,119,113,15,141,58,166,206,74,44,6,128,178,220,187,243,100,65,245,111,215,56,27,127,160,73, + 167,87,17,24,82,183,135,171,154,246,33,68,109,74,74,74,234,148,41,83,162,230,206,157,75,249,124,62,7,64,178,120,241,98,109,114,114,242,85,0, + 133,229,109,43,211,234,214,163,225,167,10,177,181,181,143,140,215,176,110,144,12,109,26,218,70,69,135,196,182,71,205,90,181,144,146,171,109,90,172,229, + 132,26,35,191,238,143,43,175,95,122,193,143,255,174,69,103,188,141,234,20,168,181,67,240,103,130,124,121,52,203,93,42,4,7,84,231,206,145,154,45, + 182,25,171,58,131,21,58,163,5,101,70,43,180,70,43,56,106,251,76,16,66,96,178,112,229,47,233,122,255,8,224,225,227,135,186,47,16,120,200,108, + 125,243,176,151,123,32,0,124,125,125,17,16,16,80,117,7,41,133,209,100,251,136,27,205,220,163,97,125,163,201,2,74,41,146,146,18,39,164,167,166, + 246,11,143,8,239,24,221,184,137,143,76,194,3,0,167,70,75,171,213,90,221,221,221,3,124,124,124,120,89,89,89,143,204,115,120,211,46,150,223,118, + 237,196,128,1,175,106,238,92,188,246,168,142,139,78,167,35,237,218,181,243,168,89,179,38,207,96,48,84,235,191,15,33,132,200,253,35,251,215,172,223, + 118,246,155,111,141,137,236,210,189,23,142,31,141,199,158,93,155,127,41,203,79,116,185,114,118,84,84,253,167,102,29,214,139,136,124,106,214,97,237,58, + 17,149,26,173,232,198,45,91,81,34,192,161,253,219,168,158,103,26,107,75,120,39,219,182,174,248,122,198,176,247,190,172,215,187,239,48,188,249,198,72, + 8,4,124,156,56,188,15,11,166,127,22,167,81,230,143,112,37,77,0,0,72,116,180,40,188,86,237,143,107,213,107,132,132,243,167,113,63,233,230,173, + 107,151,206,53,12,143,105,13,255,144,176,143,73,116,244,92,122,251,118,165,163,21,0,96,212,235,31,140,28,241,6,42,206,58,108,211,44,202,247,177, + 11,208,190,163,85,231,155,126,158,255,105,114,249,172,67,206,100,124,224,76,87,89,82,176,227,196,153,11,227,251,197,246,226,21,170,140,182,8,150,210, + 104,223,12,40,44,127,172,50,32,34,68,129,196,91,9,156,94,89,232,178,33,182,119,75,63,114,240,75,183,129,63,147,255,9,224,114,149,245,114,168, + 208,99,244,188,239,23,186,93,75,213,224,122,154,202,54,84,40,228,219,12,150,144,247,200,116,217,102,179,87,161,197,241,215,205,152,62,25,70,19,69, + 137,198,4,66,0,119,79,31,168,4,82,220,205,177,64,157,86,130,7,57,105,200,72,79,67,89,65,42,132,124,10,15,137,9,174,214,68,178,82,113, + 176,214,72,99,6,197,118,20,236,58,155,3,153,68,0,131,58,15,191,111,157,95,96,208,168,102,235,180,154,93,174,212,115,44,135,71,72,129,74,163, + 15,148,8,249,216,190,254,7,12,30,57,214,126,34,182,31,19,38,207,4,120,4,197,37,106,16,66,158,57,74,250,79,195,169,209,226,56,250,123,252, + 193,125,242,63,210,37,184,152,152,99,55,89,5,220,172,143,98,51,213,202,226,151,40,165,73,213,122,37,30,239,165,33,111,143,191,85,55,50,218,112, + 252,166,38,173,180,204,236,52,207,161,205,160,41,183,46,199,45,235,173,52,167,188,175,8,105,104,229,44,150,121,218,252,196,233,14,251,73,33,158,190, + 100,251,163,97,195,137,115,55,216,30,91,173,176,82,14,148,3,62,252,122,5,44,156,21,156,213,10,206,74,97,182,82,89,85,221,13,8,169,189,171, + 228,238,182,250,175,207,120,122,184,208,203,203,11,190,190,190,240,245,245,133,135,135,71,149,70,75,40,20,42,4,130,199,223,234,7,15,30,32,61,61, + 29,30,30,30,160,156,25,70,51,208,168,117,79,220,184,127,19,71,254,184,10,202,89,33,87,84,62,156,224,8,69,80,253,247,91,118,238,247,67,215, + 190,239,224,240,174,149,244,210,169,125,99,180,121,137,107,92,125,190,213,106,37,102,179,25,177,61,59,63,184,114,235,222,193,201,227,223,235,213,246,149, + 49,146,54,81,161,208,27,173,200,76,191,143,19,187,215,233,35,235,4,31,234,214,161,213,3,179,217,12,171,213,90,229,63,114,189,209,84,200,23,74, + 229,67,135,190,46,188,116,241,226,78,69,64,228,118,43,225,93,35,148,198,16,130,129,141,27,55,128,201,204,65,171,85,85,123,98,129,90,173,78,93, + 187,118,109,157,17,35,70,200,162,163,163,133,247,239,223,199,130,5,11,138,212,106,117,149,117,195,202,137,63,149,184,88,64,74,146,197,156,105,88,152, + 187,186,71,70,251,54,24,250,74,123,108,137,251,3,39,78,159,195,3,141,226,170,198,34,216,253,240,65,182,161,161,143,106,103,223,54,181,249,219,215, + 151,236,12,232,242,229,107,148,74,226,11,78,76,117,121,182,173,109,210,134,25,30,50,91,189,167,242,200,22,159,16,151,29,17,1,82,79,159,75,104, + 212,34,34,26,87,82,149,200,47,53,64,103,176,128,227,40,56,80,248,186,139,225,38,226,33,35,61,21,28,53,165,185,218,55,27,180,160,83,199,78, + 2,128,128,16,42,16,10,4,160,176,213,87,148,74,165,154,128,128,0,151,34,90,38,139,5,3,122,181,66,235,150,141,209,111,140,173,102,230,209,95, + 38,193,91,33,196,150,141,107,144,113,114,209,198,186,109,199,198,223,188,113,107,224,173,43,103,95,127,185,185,180,105,144,32,91,228,76,79,163,209,236, + 36,132,136,69,34,81,175,142,29,59,250,236,220,185,179,212,207,207,143,19,139,68,5,125,251,188,194,9,69,162,226,242,182,103,206,156,17,142,25,51, + 198,189,164,164,36,35,47,47,239,28,165,180,210,144,137,60,160,126,119,240,176,25,132,184,41,164,178,7,109,186,15,13,105,217,186,149,103,255,1,131, + 33,17,75,112,56,254,32,150,46,154,187,77,147,115,231,109,151,223,70,252,231,102,29,102,102,164,165,106,117,134,152,70,45,58,147,211,241,187,199,17, + 226,191,136,47,241,152,223,125,192,216,122,169,217,26,44,157,51,1,222,158,114,164,221,191,171,75,190,115,99,133,89,175,154,224,170,201,2,0,89,145, + 117,96,155,55,122,121,27,76,86,156,58,22,167,231,44,92,175,115,39,15,220,175,17,217,210,173,81,203,110,222,133,123,214,12,0,176,165,42,157,204, + 59,79,71,112,107,69,189,152,118,244,216,17,207,192,176,134,124,2,2,147,65,143,130,148,75,22,109,222,93,149,50,243,134,75,179,112,139,30,226,235, + 47,167,126,247,126,203,22,45,228,20,110,143,69,176,202,13,86,161,202,8,63,119,49,116,170,2,36,95,58,168,215,22,240,43,173,119,102,49,150,201, + 10,243,243,30,21,116,210,228,37,182,174,172,125,97,126,158,216,98,44,171,242,127,7,143,199,135,135,92,140,27,105,89,143,18,223,37,66,91,110,150, + 88,200,127,148,167,5,60,157,207,246,36,18,137,228,133,102,141,27,225,65,158,22,70,163,9,58,173,30,154,50,61,10,10,85,200,204,206,67,126,110, + 30,116,101,42,72,132,20,17,238,185,176,130,135,180,140,60,80,194,185,52,129,193,76,132,81,45,91,119,144,220,76,183,229,98,185,9,41,246,109,158, + 91,164,81,229,119,80,103,39,37,187,162,81,17,139,213,122,228,250,237,228,134,53,130,95,32,87,239,43,177,113,245,50,24,237,145,77,179,217,138,155, + 25,101,200,41,214,34,35,229,14,229,172,214,106,149,106,250,39,227,212,104,17,10,65,227,70,13,208,115,120,127,44,95,190,2,41,169,233,220,236,113, + 189,51,52,234,210,151,93,53,89,132,144,238,229,181,54,202,114,239,206,123,123,121,90,230,222,43,197,60,157,177,242,245,173,220,252,195,208,225,237,5, + 135,116,234,98,177,213,160,21,236,219,248,246,102,71,154,0,192,35,48,206,254,124,8,20,82,1,8,33,40,31,46,252,113,230,104,200,36,182,177,101, + 157,193,130,225,159,46,196,198,133,159,129,2,24,54,248,143,199,170,6,87,212,172,176,118,97,141,7,233,249,89,221,251,124,126,84,111,146,24,94,121, + 117,196,229,22,45,90,148,74,165,82,72,165,82,120,120,120,192,219,219,27,94,94,94,112,68,69,77,179,217,172,49,26,141,190,98,177,24,28,199,33, + 45,45,13,105,105,105,80,42,149,40,40,40,64,153,70,101,185,120,116,187,160,81,155,222,8,169,27,131,176,136,38,16,242,9,4,2,30,78,236,93, + 237,80,211,17,138,160,250,239,183,236,212,247,199,110,253,70,225,240,174,85,244,210,169,125,239,105,243,18,87,59,107,239,72,147,227,184,107,3,6,12, + 136,25,51,102,140,104,234,248,49,135,226,226,79,36,109,223,191,170,79,73,73,105,77,74,41,188,60,61,31,14,233,211,118,95,151,118,45,31,28,61, + 122,148,219,188,121,179,129,16,114,163,50,77,0,40,204,207,255,229,232,145,99,211,58,116,234,140,53,235,55,119,186,117,251,78,167,251,247,147,81,51, + 172,46,94,168,19,1,45,241,198,177,147,167,161,41,205,119,152,67,230,236,220,237,81,45,82,82,82,114,118,200,144,33,61,255,248,227,15,222,144,33, + 67,180,133,133,133,103,96,191,143,114,22,205,170,168,121,118,69,255,2,0,191,212,238,252,214,182,44,83,233,199,0,230,214,10,171,133,19,167,207,225, + 220,31,23,86,20,202,106,77,127,123,248,91,163,107,247,229,143,234,219,166,54,63,192,91,134,95,87,45,224,239,61,151,190,48,189,200,186,6,192,204, + 202,250,249,36,69,106,19,218,53,240,129,217,74,193,81,219,23,174,187,155,208,225,23,175,35,77,129,81,242,246,123,99,198,220,111,212,184,233,39,195, + 223,122,79,212,180,110,77,92,188,87,10,16,2,159,32,57,114,114,114,112,106,199,42,75,73,214,221,21,124,62,247,212,176,79,101,253,44,78,191,18, + 94,161,221,232,194,194,66,156,56,113,2,229,6,203,223,223,223,161,209,122,82,179,40,47,251,204,204,239,87,182,123,247,205,87,241,74,231,134,56,121, + 233,62,140,246,122,77,229,83,201,83,207,253,36,254,120,72,93,227,251,3,34,85,58,179,56,253,235,52,229,169,138,179,98,159,212,164,148,26,9,33, + 123,19,19,19,219,55,105,210,164,246,129,3,7,138,111,93,56,52,174,98,63,62,255,252,115,197,242,229,203,101,148,210,51,6,131,225,169,168,187,195, + 115,231,225,215,132,203,151,125,77,102,14,167,47,92,107,208,173,93,83,112,20,184,116,233,18,214,252,188,70,127,227,250,213,249,101,121,65,51,156,153, + 23,103,239,167,171,166,202,81,187,138,154,57,89,233,243,15,199,237,216,216,178,83,31,188,254,225,140,25,39,226,54,79,107,222,225,21,94,131,150,61, + 145,112,238,24,142,28,56,248,157,73,83,60,173,170,117,72,157,245,83,34,149,125,20,221,188,19,50,30,164,35,45,249,230,47,186,162,228,108,69,80, + 253,95,178,51,31,188,87,167,97,59,252,113,104,203,56,56,49,90,85,93,243,53,253,165,171,14,236,223,59,52,51,243,167,160,50,157,94,66,41,213, + 75,196,130,92,5,207,249,12,245,167,255,238,183,77,114,159,23,6,12,30,254,94,220,210,165,139,132,129,94,50,228,150,232,161,210,153,160,214,154,192, + 35,4,225,33,114,104,213,197,56,185,227,123,179,81,83,50,132,210,123,38,103,154,138,192,250,179,0,250,225,231,99,143,67,236,89,51,164,78,183,175, + 42,141,214,169,179,175,247,249,124,236,190,40,74,105,55,69,96,125,117,249,90,135,142,206,157,16,219,231,251,245,46,53,97,178,216,234,143,89,56,192, + 202,113,246,40,31,64,31,141,231,63,253,129,175,168,233,225,229,129,149,219,79,161,176,88,3,173,193,4,157,222,8,131,209,2,139,197,4,41,223,136, + 6,190,37,16,121,170,80,108,16,227,230,221,98,20,100,221,43,161,132,124,173,205,75,90,94,217,251,89,142,72,234,21,21,28,18,196,203,81,25,33, + 21,243,113,245,228,1,147,217,104,152,239,138,201,114,164,89,90,84,188,240,147,241,95,12,91,183,118,125,80,76,29,15,100,22,234,144,89,160,135,90, + 111,187,207,177,88,57,24,52,133,184,126,108,125,174,85,175,94,88,213,107,252,91,112,106,180,44,38,189,122,231,193,139,190,147,166,125,207,191,119,63, + 197,60,235,227,216,76,157,70,213,187,218,145,172,10,172,125,255,133,42,239,136,30,199,94,210,100,70,122,165,173,158,26,46,164,28,56,74,177,239,66, + 238,163,225,66,206,158,121,121,229,126,229,203,8,86,92,187,176,115,239,113,135,175,39,170,55,233,116,121,158,119,239,205,47,1,0,62,159,255,104,43, + 207,205,210,235,245,149,206,66,162,148,110,88,189,122,245,196,247,222,123,79,242,240,225,67,220,191,127,31,165,165,165,112,115,115,195,193,131,7,205,224, + 44,243,175,255,241,91,90,98,66,252,55,81,45,122,214,136,105,211,27,50,153,28,130,106,44,173,38,15,140,26,218,178,115,191,31,186,245,127,23,71, + 126,91,77,47,157,220,59,86,155,159,184,202,101,1,59,37,37,37,183,8,33,201,243,231,207,111,186,102,205,154,58,227,199,143,79,217,240,195,180,165, + 0,80,84,100,91,3,248,202,149,43,116,236,216,177,6,189,94,159,90,82,82,146,80,213,4,8,0,208,21,200,190,93,243,227,220,70,15,179,114,94, + 173,219,232,69,248,215,121,17,65,225,173,80,162,54,225,226,189,108,164,220,57,138,59,167,119,28,208,42,44,211,170,219,231,38,77,154,212,228,241,120, + 47,104,52,154,160,232,232,232,38,114,185,252,74,147,38,77,154,9,4,130,204,203,151,47,87,126,241,60,65,250,137,117,134,218,157,223,90,242,64,237, + 222,37,37,87,219,236,129,218,253,138,86,226,249,89,254,209,197,134,192,158,243,23,82,107,201,173,237,235,75,118,254,186,106,1,127,248,232,207,173,55, + 149,222,31,11,164,226,195,115,70,198,184,252,26,132,240,114,222,31,209,239,207,242,14,246,72,150,253,177,75,97,250,210,210,107,74,0,19,165,33,13, + 127,184,249,241,152,153,141,91,182,123,163,227,203,67,120,22,145,2,135,126,251,137,166,94,63,182,93,64,173,147,181,46,172,6,80,21,70,163,177,74, + 147,229,8,229,67,121,231,237,155,127,30,185,243,183,93,115,250,247,237,231,251,227,215,175,225,251,149,187,33,151,74,64,57,14,67,186,214,26,116,103, + 243,75,125,106,6,186,133,238,60,158,121,234,195,69,55,39,106,181,166,164,170,34,49,118,227,124,218,221,221,189,160,125,251,246,173,37,18,9,41,44, + 44,20,4,4,4,88,60,61,61,141,57,57,57,90,131,193,176,147,82,234,114,148,17,0,76,102,14,105,121,122,236,217,181,19,215,46,28,197,157,59, + 137,234,59,183,239,44,35,2,186,72,147,155,84,92,181,194,211,112,14,103,29,58,62,86,25,86,131,250,215,13,43,102,117,213,234,13,35,155,180,141, + 69,237,6,237,120,38,179,21,55,46,29,199,241,29,139,190,55,170,139,38,61,75,255,202,9,169,81,39,130,242,197,56,123,34,14,148,227,86,0,0, + 229,184,21,87,254,56,240,94,171,222,163,224,19,80,187,9,33,132,184,154,239,85,17,145,128,87,246,251,206,117,191,165,165,165,225,238,221,187,184,119, + 239,30,138,139,139,241,235,175,105,213,250,251,148,21,167,29,86,248,214,125,105,224,107,175,239,27,52,244,77,183,58,17,49,188,168,26,222,240,85,8, + 144,120,47,29,73,151,175,115,137,23,15,232,77,170,252,254,218,226,52,167,198,79,238,31,29,72,120,116,82,249,218,133,109,218,180,139,250,98,246,156, + 214,190,254,1,14,191,199,139,10,242,197,19,62,220,27,117,238,252,89,151,214,58,228,172,214,162,209,35,135,112,124,219,66,161,120,20,167,38,0,104, + 121,20,203,118,156,114,150,74,35,248,102,179,5,141,130,76,208,202,141,32,60,1,252,253,195,144,158,241,16,233,153,42,164,103,23,225,218,221,68,100, + 100,164,154,168,133,187,67,249,88,81,213,141,245,83,240,4,117,124,125,124,144,90,172,129,155,88,128,244,164,203,134,50,149,114,83,181,52,42,160,45, + 76,202,145,7,70,245,28,50,100,232,193,174,47,245,245,108,217,182,187,204,207,195,11,34,1,69,114,90,54,18,206,28,44,75,185,118,74,101,54,106, + 122,253,39,86,125,249,167,224,212,104,153,12,101,125,134,245,235,180,139,207,23,136,57,206,98,48,25,13,3,255,138,201,122,94,80,106,205,28,57,204, + 150,220,94,126,111,96,225,168,116,216,224,67,186,138,247,10,102,43,149,13,27,124,70,11,0,148,115,158,216,23,28,236,19,91,190,118,225,131,7,69, + 151,138,139,13,199,159,181,24,105,57,121,121,121,51,103,207,158,253,138,86,171,173,223,185,115,103,137,135,135,7,138,138,138,16,31,31,111,222,191,127, + 255,237,252,252,252,111,40,205,179,16,210,252,151,235,250,223,70,36,94,142,255,166,126,139,151,106,196,180,237,237,242,107,136,36,210,119,187,246,125,135, + 28,217,189,154,94,60,177,251,125,109,126,210,202,103,237,175,221,56,93,32,132,220,156,60,121,114,203,192,192,192,192,111,190,249,198,77,165,82,9,127, + 252,241,71,125,97,97,97,174,74,165,58,71,169,243,196,229,167,53,19,204,0,6,40,2,35,187,208,157,171,123,120,249,133,246,244,244,175,81,175,180, + 32,43,85,89,144,29,15,224,136,189,80,100,181,104,214,172,89,93,30,143,55,4,64,35,185,92,30,174,80,40,36,148,210,250,132,144,91,28,199,93, + 143,142,142,222,15,160,90,127,191,244,19,235,12,29,223,255,121,115,177,150,19,25,121,162,205,233,39,214,25,0,32,47,126,188,22,192,158,192,46,147, + 6,236,61,151,190,244,86,137,231,184,252,227,223,186,188,246,93,57,165,15,175,134,87,221,202,53,116,217,183,50,1,140,148,7,70,45,184,113,229,220, + 84,66,33,180,194,50,75,155,151,124,249,63,161,47,20,10,245,161,161,161,14,103,23,74,36,146,74,243,87,40,61,97,1,176,134,144,206,235,119,109, + 91,63,114,247,222,61,115,58,118,235,239,235,86,163,6,94,8,32,88,63,169,249,184,163,87,10,46,246,253,226,212,242,148,108,253,117,74,105,181,242, + 97,212,106,117,18,33,164,68,163,209,244,163,148,62,36,132,212,44,41,41,185,106,54,155,111,84,219,16,112,120,189,77,155,23,127,37,132,8,168,133, + 155,119,78,200,223,172,207,185,147,249,44,198,162,34,49,47,120,224,211,111,150,52,175,23,30,217,188,124,173,195,134,181,221,49,102,226,130,230,181,235, + 68,52,255,115,253,195,202,211,4,236,145,219,183,119,253,60,239,212,149,243,199,191,242,11,174,93,59,55,51,229,206,195,123,87,103,90,116,202,103,90, + 152,185,34,105,247,110,45,90,51,127,226,248,156,172,212,53,101,249,73,55,1,160,44,63,233,166,44,48,242,235,194,220,204,241,69,249,41,243,159,245, + 189,40,43,43,203,222,180,105,147,87,187,118,237,120,129,129,129,40,40,40,192,241,227,199,57,142,227,170,92,0,250,73,52,69,41,199,9,169,231,243, + 203,202,31,230,137,228,238,189,45,22,75,8,165,128,64,32,200,49,106,85,7,213,60,249,23,180,56,173,138,235,146,35,0,120,229,107,23,114,28,71, + 230,45,93,159,46,116,115,119,184,62,162,89,175,150,113,28,231,242,90,135,37,15,46,215,171,238,121,57,213,42,42,220,241,230,216,73,175,2,212,10, + 10,43,33,196,66,41,44,32,84,3,142,156,230,19,44,215,84,99,57,164,39,33,4,30,148,8,224,46,21,128,128,64,163,44,166,213,201,201,114,68, + 89,94,226,45,66,58,135,253,110,220,54,226,216,225,3,131,173,86,235,11,246,43,39,205,160,43,219,174,201,241,254,133,210,75,127,109,218,250,63,12, + 242,23,191,71,42,23,119,113,24,229,239,164,89,191,174,172,95,141,208,192,17,105,233,249,23,83,30,106,127,161,21,150,213,249,43,253,180,151,120,248, + 154,16,242,134,88,44,86,24,141,198,50,74,233,134,188,188,188,153,244,169,21,206,155,11,165,1,186,17,98,55,217,20,147,190,236,108,89,94,226,235, + 142,52,43,34,15,136,234,233,38,151,79,212,235,202,54,148,229,38,174,127,214,126,58,105,227,41,145,72,154,41,20,10,97,97,97,225,5,74,169,242, + 175,106,86,151,202,52,155,54,109,90,139,199,227,189,192,113,92,32,0,79,0,5,0,10,5,2,65,214,229,203,151,211,93,25,58,124,146,14,111,239, + 240,235,214,163,225,167,241,167,18,23,219,135,21,31,81,99,240,34,183,55,122,119,249,252,151,93,123,158,154,117,248,79,188,230,255,91,154,132,116,22, + 40,130,11,71,242,196,158,179,186,69,233,181,133,217,89,99,79,223,40,184,64,41,117,58,235,195,149,126,138,197,226,225,38,147,73,42,18,137,116,70, + 163,177,202,187,241,255,214,185,203,2,235,191,195,3,117,121,101,10,14,228,114,197,73,43,255,158,191,59,225,199,196,196,116,16,137,68,181,172,86,171, + 204,104,52,106,117,58,93,90,122,122,250,217,39,191,251,254,91,253,84,4,70,46,18,137,36,31,3,128,201,100,88,162,201,75,250,180,178,231,58,107, + 255,79,255,27,249,215,105,153,44,224,11,253,97,47,204,205,89,44,5,185,41,23,93,170,193,245,60,250,89,201,107,141,166,148,86,123,132,230,111,3, + 181,47,187,240,60,54,0,221,153,38,211,100,154,76,211,65,91,222,63,161,159,76,243,223,171,233,22,220,160,166,91,112,131,154,174,62,223,81,251,127, + 234,185,255,93,53,43,121,173,209,255,173,215,122,30,155,203,43,135,51,24,12,198,127,10,90,141,25,113,12,198,243,64,151,125,219,229,58,128,207,210, + 158,193,40,135,0,232,238,232,23,180,26,33,65,66,136,67,141,202,168,74,159,105,50,77,166,201,52,153,38,211,100,154,255,62,205,39,180,95,118,240, + 171,68,7,154,108,232,240,191,21,90,100,154,76,147,105,50,77,166,201,52,153,230,191,79,243,223,186,85,190,118,12,131,193,96,48,24,12,6,227,153, + 97,70,139,193,96,48,24,12,6,227,57,193,140,22,131,193,96,48,24,12,198,115,130,25,45,6,131,193,96,48,24,140,231,4,51,90,12,6,131,193, + 96,48,24,207,9,66,41,69,92,92,28,141,141,141,37,0,30,123,204,96,48,24,12,6,131,241,223,224,223,234,69,30,69,180,226,226,226,158,223,90, + 60,12,6,131,193,96,48,24,85,240,111,244,34,143,140,86,108,108,44,249,55,158,32,131,193,96,48,24,140,127,6,255,70,47,242,88,142,214,191,37, + 76,199,96,48,24,12,6,227,159,201,191,205,139,176,100,120,6,131,193,96,48,24,140,231,4,177,151,210,103,48,24,12,6,131,193,96,252,135,97,17, + 45,6,131,193,96,48,24,140,231,4,51,90,12,6,131,193,96,48,24,207,137,231,106,180,8,33,221,153,38,211,100,154,76,147,105,50,77,166,201,52, + 255,151,32,132,140,46,127,204,34,90,12,6,131,193,96,48,24,14,32,132,72,8,33,146,138,251,174,60,143,82,186,170,252,177,224,121,116,140,193,96, + 48,24,12,6,227,159,10,33,68,66,41,53,0,208,3,48,18,66,60,43,236,59,44,63,81,49,138,197,140,22,131,193,96,48,24,12,134,115,148,0, + 36,0,64,41,149,16,66,12,132,16,79,103,141,9,33,163,43,154,171,138,251,204,104,49,24,12,6,131,193,96,84,128,82,90,62,68,104,44,223,39, + 132,24,202,247,171,3,51,90,12,6,131,193,96,48,24,14,176,27,172,114,211,85,62,124,232,168,221,42,103,67,135,4,128,195,153,3,148,210,35,174, + 118,228,89,102,31,84,165,207,52,153,38,211,100,154,76,147,105,50,205,127,159,102,85,218,213,241,31,207,27,187,201,82,86,56,228,212,108,57,133,82, + 250,220,54,0,221,153,38,211,100,154,76,147,105,50,77,166,201,52,255,137,155,205,38,57,223,175,112,124,180,51,13,86,222,129,193,96,48,24,12,6, + 195,49,198,242,18,15,246,232,86,165,57,90,21,135,15,203,97,57,90,12,6,131,193,96,48,24,14,160,127,38,193,63,218,119,214,182,220,100,149,255, + 164,108,214,33,131,193,96,48,24,12,134,115,8,33,60,216,243,178,202,163,90,212,65,142,22,173,144,252,254,36,204,104,49,24,12,6,131,193,96,56, + 166,27,128,125,132,144,126,0,246,216,143,61,21,213,114,52,100,200,34,90,12,6,131,193,96,48,24,149,19,15,192,13,182,138,240,110,206,26,149,155, + 170,39,11,151,2,0,177,103,203,35,46,46,142,198,198,198,58,44,43,207,96,48,24,12,6,131,241,188,249,187,121,145,138,249,89,229,56,203,211,114, + 100,178,0,251,162,210,229,39,22,23,23,71,255,243,221,100,48,24,12,6,131,193,168,156,191,169,23,145,194,150,163,37,1,224,9,64,238,168,81,197, + 68,248,242,173,252,119,108,232,144,193,96,48,24,12,6,195,49,79,230,104,205,7,48,229,201,70,44,25,158,193,96,48,24,12,6,163,250,60,153,163, + 165,135,3,163,85,89,50,60,203,209,98,48,24,12,6,131,241,183,224,239,230,69,170,147,163,229,84,163,220,104,49,24,12,6,131,193,96,48,254,164, + 194,130,210,143,112,84,71,171,50,216,208,33,131,193,96,48,24,12,134,99,148,0,196,120,124,233,157,106,69,180,216,90,135,12,6,131,193,96,48,24, + 14,176,15,19,26,97,159,121,88,89,105,7,103,26,207,213,104,17,66,186,51,77,166,201,52,153,38,211,100,154,76,147,105,254,131,241,132,45,178,85, + 41,21,75,59,176,242,14,12,6,131,193,96,48,24,85,96,207,209,210,3,112,43,207,215,114,150,163,229,172,196,3,51,90,12,6,131,193,96,48,24, + 142,81,194,54,116,88,49,162,229,40,65,158,213,209,98,48,24,12,6,131,193,168,14,148,82,137,163,153,135,79,194,22,149,102,48,24,12,6,131,193, + 168,38,132,144,151,96,171,8,95,113,230,161,211,136,150,163,245,14,153,209,98,48,24,12,6,131,193,112,204,65,252,89,17,222,211,89,163,138,17,173, + 242,199,143,204,23,0,135,51,7,40,165,71,92,237,197,179,204,62,168,74,159,105,50,77,166,201,52,153,38,211,100,154,255,62,205,170,180,171,227,63, + 158,55,132,144,86,0,78,86,60,86,221,202,240,160,148,62,183,13,64,119,166,201,52,153,38,211,100,154,76,147,105,62,187,0,203,0,0,32,0,73, + 68,65,84,50,205,127,243,6,96,180,253,103,48,128,209,229,251,148,82,86,176,148,193,96,48,24,12,6,227,63,1,165,52,135,254,39,115,180,8,33, + 97,94,94,94,191,186,185,185,81,189,94,79,74,75,75,95,167,148,62,120,6,157,104,0,115,0,20,1,152,74,41,125,248,23,251,213,14,192,135,246, + 221,31,40,165,103,254,138,30,131,193,96,48,24,140,255,61,158,156,113,72,157,175,115,24,247,196,204,195,184,242,7,207,28,209,34,132,132,249,250,250, + 238,57,126,252,120,86,118,118,118,221,19,39,78,228,250,250,250,238,33,132,132,85,83,167,233,160,65,131,46,152,205,230,216,146,146,146,145,66,161,112, + 206,51,244,165,29,33,228,160,221,96,193,221,221,253,43,74,233,107,28,199,189,166,80,40,190,114,212,134,193,96,48,24,12,6,163,10,148,21,55,251, + 44,196,167,40,143,100,85,216,114,202,127,247,76,70,139,16,18,230,237,237,189,39,62,62,62,185,113,227,198,189,1,100,198,196,196,180,61,120,240,224, + 21,47,47,175,95,171,161,211,116,208,160,65,167,127,249,229,23,217,165,75,151,176,115,231,78,152,205,102,93,53,251,210,238,195,15,63,60,106,54,155, + 95,26,48,96,192,17,66,200,152,14,29,58,52,3,0,141,70,3,127,127,255,24,66,200,152,55,223,124,243,72,113,113,113,207,224,224,224,120,102,182, + 24,12,6,131,193,96,84,5,181,175,111,72,109,9,240,158,176,205,66,124,138,39,151,223,249,75,75,240,16,66,194,60,61,61,247,236,221,187,55,185, + 73,147,38,189,41,165,23,8,33,87,1,104,155,55,111,94,211,205,205,141,186,168,243,200,100,93,187,118,13,169,169,169,152,53,107,150,26,192,162,106, + 118,105,242,194,133,11,197,2,129,0,155,54,109,18,44,91,182,236,167,128,128,0,24,12,6,232,245,122,236,223,191,223,239,228,201,147,43,70,141,26, + 69,82,82,82,48,117,234,84,193,152,49,99,38,3,232,85,221,115,103,48,24,12,6,131,241,63,139,18,64,107,71,191,120,50,47,171,34,132,82,138, + 184,184,184,114,115,212,57,54,54,246,164,211,198,182,156,172,61,91,182,108,73,238,209,163,71,31,163,209,120,214,106,181,94,149,201,100,90,0,1,55, + 110,220,240,234,220,185,115,205,146,146,146,182,149,245,212,145,201,154,50,101,138,250,225,195,135,157,41,165,87,171,62,215,199,180,218,13,26,52,232,200, + 134,13,27,4,34,145,72,80,92,92,140,51,103,206,32,51,51,19,86,171,21,254,254,254,168,87,175,30,132,66,33,138,138,138,44,239,191,255,190,41, + 37,37,165,39,203,219,98,48,24,12,6,227,239,131,171,94,228,191,9,33,68,82,49,47,235,201,253,10,199,131,1,196,194,150,155,21,11,252,105,190, + 30,13,29,198,198,198,18,0,39,42,121,177,48,111,111,239,189,59,119,238,204,238,214,173,91,239,251,99,134,74,116,58,157,74,163,209,104,13,6,67, + 141,91,183,110,5,119,239,222,189,126,105,105,233,235,149,104,180,35,132,236,5,112,126,241,226,197,78,77,150,189,221,6,251,86,233,48,31,165,244,204, + 142,29,59,62,185,123,247,46,191,168,168,8,219,183,111,231,46,94,188,104,252,249,231,159,13,191,254,250,171,225,225,195,135,230,228,228,100,170,209,104, + 112,248,240,97,126,74,74,202,103,204,100,49,24,12,6,131,241,247,163,42,47,242,255,128,30,120,44,41,94,239,164,93,172,221,88,197,150,231,105,149, + 255,226,145,209,178,59,201,206,21,159,69,8,169,225,238,238,190,210,203,203,235,84,205,154,53,227,14,30,60,168,236,208,166,117,167,228,177,175,203,238, + 159,59,131,237,225,65,175,202,229,242,246,119,239,222,13,237,210,165,75,237,194,194,194,126,206,102,29,18,66,218,125,244,209,71,167,84,42,85,31,149, + 74,37,90,179,102,13,142,28,57,226,208,100,217,219,189,161,82,169,222,24,58,116,232,41,103,102,139,16,210,206,195,195,227,247,151,95,126,121,70,76, + 76,12,57,125,250,52,30,62,124,104,254,238,187,239,214,223,188,121,51,248,202,149,43,193,95,125,245,213,90,30,143,199,185,187,187,163,105,211,166,150, + 26,53,106,124,227,238,238,206,146,226,25,12,6,131,193,248,155,225,200,139,252,127,99,55,89,250,170,214,60,44,207,203,122,50,71,235,209,208,161,221, + 69,62,66,42,149,14,140,137,137,153,186,97,195,6,190,159,159,31,213,235,245,5,62,238,138,134,247,62,121,199,39,229,220,89,100,229,21,160,119,66, + 242,175,69,69,69,161,47,189,244,146,87,73,73,73,63,74,105,122,37,29,216,160,82,169,222,88,178,100,9,114,115,115,209,191,127,127,244,232,209,195, + 4,160,117,197,225,194,138,237,242,243,243,209,167,79,31,244,236,217,115,35,165,244,77,7,154,91,57,142,123,141,16,2,173,86,139,85,171,86,97,221, + 186,117,134,91,183,110,5,83,74,75,237,109,188,58,119,238,156,187,115,231,78,241,177,99,199,224,231,231,7,131,193,128,94,189,122,109,163,148,14,113, + 245,141,102,48,24,12,6,131,241,252,112,228,69,254,191,33,132,60,53,76,72,171,89,25,222,97,50,60,33,164,70,179,102,205,190,57,113,226,68,80, + 217,229,115,197,234,143,134,186,115,197,5,94,183,35,154,120,167,93,189,130,204,188,2,116,61,122,97,91,94,94,222,11,177,177,177,178,146,146,146,254, + 149,153,172,114,56,142,67,110,110,46,242,242,242,160,84,42,1,32,254,201,156,44,190,208,45,10,0,242,243,243,145,147,147,3,149,74,85,165,102,97, + 97,33,140,70,35,56,142,131,72,36,114,216,78,34,145,64,173,86,163,184,184,24,122,189,179,200,31,131,193,96,48,24,12,198,35,60,129,63,235,103, + 57,139,106,85,136,96,197,85,44,237,0,216,141,214,147,14,82,161,80,76,89,189,122,181,81,123,229,124,177,220,98,12,231,213,12,195,195,228,68,220, + 204,56,132,66,43,225,186,199,159,221,106,176,88,234,245,238,221,91,82,90,90,218,159,82,154,230,66,103,87,141,30,61,122,248,59,239,188,67,212,106, + 53,22,44,152,143,58,66,60,168,216,64,30,88,255,147,150,239,200,154,143,25,59,26,111,141,120,27,42,149,10,11,22,44,176,2,112,150,205,255,131, + 151,151,151,187,175,175,111,204,174,93,187,252,252,252,252,132,3,7,14,228,95,185,114,101,14,33,228,75,123,155,57,227,199,143,231,219,77,155,121,238, + 220,185,133,106,181,250,6,128,31,92,232,51,131,193,96,48,24,140,255,2,127,183,104,150,29,61,0,35,33,196,211,110,182,244,176,173,19,253,24,229, + 57,89,246,97,195,199,143,217,215,230,121,12,47,47,175,83,201,201,201,18,227,200,216,154,210,224,144,192,252,11,231,240,176,84,141,44,35,135,2,185, + 103,238,251,215,147,11,163,162,162,120,121,121,121,253,40,165,169,174,246,150,16,210,78,70,176,40,38,80,218,124,114,167,80,20,20,233,176,230,143,172, + 145,103,244,244,23,121,80,212,136,142,159,168,215,55,25,170,197,241,57,66,92,250,89,155,96,53,235,19,1,172,170,42,121,157,16,50,102,233,210,165, + 43,26,53,106,68,138,139,139,169,209,104,180,174,90,181,202,10,0,95,124,241,5,191,115,231,206,130,173,91,183,34,62,62,158,110,219,182,109,44,165, + 116,165,171,125,102,48,24,12,6,131,241,191,9,33,132,82,74,137,125,8,209,19,128,158,82,250,148,209,170,44,162,229,176,96,41,165,20,70,163,177, + 148,211,168,105,193,241,195,200,86,170,81,200,19,162,238,199,19,81,38,145,67,36,18,249,232,245,250,146,234,152,44,187,238,153,50,142,182,32,74,221, + 167,165,37,70,244,137,241,71,131,96,249,4,0,8,110,104,158,208,100,168,22,55,118,202,112,115,183,223,167,22,147,174,5,165,244,77,23,76,86,187, + 225,195,135,47,30,51,102,12,17,8,4,144,203,229,36,58,58,90,176,127,255,126,113,92,92,156,184,110,221,186,130,205,155,55,163,160,160,0,17,17, + 17,214,218,181,107,47,100,137,240,12,6,131,193,96,48,92,192,8,60,202,203,82,150,239,63,137,163,138,240,229,56,52,90,28,199,37,157,57,115,70, + 175,238,18,123,59,215,204,33,207,196,161,198,187,227,16,247,227,143,104,61,126,98,246,197,139,23,77,28,199,37,85,213,59,66,72,119,135,191,208,227, + 231,164,98,163,158,184,185,131,199,231,139,1,128,39,164,98,0,200,185,38,212,187,89,185,159,171,161,57,121,209,162,69,226,155,55,111,162,176,176,208, + 18,23,23,71,19,18,18,204,123,246,236,193,134,13,27,176,123,247,110,115,124,124,60,45,43,43,179,4,6,6,10,6,15,30,44,4,48,217,165,126, + 254,5,152,38,211,100,154,76,147,105,50,77,166,249,143,71,90,33,47,203,211,190,61,5,33,36,216,62,108,24,252,228,239,28,38,195,107,52,154,89, + 19,38,76,216,251,235,134,245,231,77,101,6,174,244,96,92,163,251,91,182,160,253,55,51,30,118,29,54,188,118,100,100,100,129,70,163,153,85,157,158, + 206,232,20,241,134,222,96,238,75,57,107,171,158,109,107,123,15,234,16,229,86,98,177,32,49,75,181,15,0,114,110,136,246,149,229,137,63,109,55,218, + 234,118,81,104,205,107,58,40,178,132,71,8,120,60,254,25,158,144,191,243,194,198,27,187,156,72,207,110,216,176,97,135,241,227,199,11,126,252,241,71, + 75,122,122,250,103,53,106,212,152,186,102,205,154,160,162,162,34,204,159,63,191,176,168,168,104,70,88,88,216,194,193,131,7,211,85,171,86,153,1,204, + 174,78,223,25,12,6,131,193,96,252,79,210,13,192,62,66,72,63,0,123,236,199,28,37,196,199,82,74,87,217,135,16,31,203,43,119,104,180,40,165, + 153,82,169,244,219,129,175,13,253,114,242,228,201,169,125,127,63,121,77,38,147,249,95,188,120,81,18,25,25,89,80,84,84,52,157,82,154,89,157,158, + 126,62,118,136,128,154,141,124,88,205,65,212,98,230,149,20,149,96,213,238,51,106,43,176,24,0,44,148,191,248,236,18,239,183,95,30,47,244,24,50, + 91,44,21,64,36,21,16,137,73,192,19,9,44,58,190,208,153,46,165,244,12,33,164,231,248,241,227,39,3,152,77,41,61,227,238,238,222,79,167,211, + 5,233,116,58,104,52,154,27,148,210,149,132,144,59,243,230,205,123,212,166,58,125,103,48,24,12,6,131,241,63,73,60,0,55,216,146,224,221,42,107, + 88,177,142,22,240,103,50,188,211,181,14,117,58,221,78,66,200,197,175,191,254,122,202,55,223,124,19,8,91,2,216,85,141,70,51,171,186,38,11,0, + 126,92,119,224,129,206,96,184,199,81,122,197,96,52,72,18,110,63,136,163,28,183,252,15,29,205,2,0,93,246,237,135,210,208,152,232,251,127,88,222, + 175,219,202,210,91,44,178,138,248,124,83,41,143,199,187,39,16,11,50,222,251,201,185,182,221,56,61,90,187,80,163,209,204,238,223,191,127,121,93,136, + 31,28,181,97,48,24,12,6,131,193,168,2,35,254,204,205,82,218,143,61,21,209,170,108,173,195,74,23,149,182,27,170,49,127,161,131,143,152,112,40, + 225,4,170,40,171,175,203,186,145,5,224,43,251,246,204,216,77,21,139,90,49,24,12,6,131,193,248,43,72,1,84,44,208,105,114,214,176,98,53,120, + 135,75,240,48,24,12,6,131,193,96,48,30,163,27,108,145,172,242,173,155,163,70,132,144,209,21,102,30,174,170,104,186,8,0,135,51,7,40,165,71, + 92,237,197,179,204,62,168,74,159,105,50,77,166,201,52,153,38,211,100,154,255,62,205,170,180,171,227,63,158,55,132,16,138,199,115,179,156,214,209,170, + 24,197,122,108,159,82,250,220,54,0,221,153,38,211,100,154,76,147,105,50,77,166,201,52,255,137,27,0,195,147,91,37,109,71,151,111,21,143,87,154, + 163,197,96,48,24,12,6,131,241,63,140,195,186,89,142,160,78,18,226,93,206,209,34,132,248,11,133,194,175,100,50,217,114,153,76,182,82,40,20,206, + 39,132,120,187,250,252,114,20,10,197,184,224,224,224,187,193,193,193,153,97,97,97,7,60,60,228,159,212,115,35,29,9,33,78,75,56,84,163,143,60, + 66,72,20,33,228,19,153,76,118,71,42,149,166,19,66,54,18,66,62,33,132,248,253,21,237,89,161,100,224,173,79,250,239,158,21,74,6,62,241,154, + 177,65,65,65,167,9,33,61,255,90,239,255,100,152,156,116,31,172,32,25,131,21,36,99,152,252,217,139,194,121,120,120,188,17,18,18,114,206,207,207, + 47,43,36,36,228,140,84,42,29,84,157,231,19,66,2,130,130,130,190,175,85,171,86,82,104,104,232,98,71,133,216,254,78,116,116,35,29,218,184,145, + 130,182,18,162,110,47,33,203,219,74,72,143,158,132,200,158,69,139,16,210,158,16,178,195,211,211,243,170,80,40,220,79,8,25,96,191,190,6,8,133, + 194,253,158,158,158,87,9,33,59,8,33,237,159,65,155,71,8,249,158,16,146,69,8,249,214,190,255,81,173,90,181,212,77,154,52,73,111,210,164,201, + 186,136,136,136,55,93,213,147,203,229,61,106,213,170,181,51,44,44,44,189,109,219,182,197,53,106,212,72,172,89,179,230,122,55,55,183,206,174,245,103, + 48,63,32,172,241,171,126,181,155,44,10,9,111,57,195,195,191,110,221,234,158,19,131,193,96,252,75,41,207,205,210,87,120,252,20,21,115,178,158,218, + 119,33,108,214,7,192,28,0,203,174,95,191,158,64,41,77,160,148,38,92,191,126,61,1,192,114,0,115,225,36,132,248,228,113,95,95,223,233,179,102, + 205,210,231,228,228,208,130,130,2,154,148,148,68,23,77,153,200,189,228,35,160,117,253,189,181,193,193,193,247,195,106,212,216,210,80,193,155,8,160,94, + 117,194,149,0,188,165,82,233,133,41,83,166,104,78,159,62,173,49,26,141,26,142,227,52,217,217,217,154,35,71,142,104,218,181,107,167,1,240,41,0, + 254,179,132,64,103,132,224,36,253,249,107,58,35,4,39,43,30,175,95,191,254,109,142,227,232,192,129,3,13,0,66,255,74,88,53,20,112,107,232,1, + 175,65,10,228,89,214,207,164,244,199,241,116,144,28,25,207,162,25,16,16,176,103,220,184,113,170,172,172,44,106,48,24,104,70,70,6,29,51,102,140, + 50,32,32,96,147,139,239,167,111,76,76,76,222,185,115,231,184,210,210,82,122,226,196,9,174,81,163,70,121,0,130,93,184,102,186,63,209,151,85,33, + 33,33,7,170,179,5,4,4,172,169,238,223,168,149,4,25,166,132,227,148,94,138,167,123,7,182,161,139,90,212,160,3,124,196,165,237,197,248,168,19, + 32,168,198,181,52,184,83,167,78,101,55,110,220,176,22,21,21,209,219,183,111,115,239,190,251,174,30,192,173,119,223,125,87,127,251,246,109,174,168,168, + 136,222,184,113,195,218,169,83,167,50,0,163,92,237,39,108,55,55,107,167,77,155,70,41,165,116,214,172,89,180,113,227,198,180,107,215,174,84,163,209, + 80,74,105,58,165,116,157,197,98,25,233,138,166,167,167,231,27,227,198,141,211,104,181,90,90,14,199,113,180,180,180,148,46,91,182,172,44,40,40,232, + 0,0,191,202,206,221,205,63,178,77,171,46,253,150,93,191,115,111,229,79,95,77,88,233,30,24,177,194,59,40,114,137,119,80,228,0,63,191,6,114, + 87,175,185,103,185,230,153,38,211,100,154,76,243,239,190,193,86,206,193,233,144,161,189,205,104,103,251,149,14,29,18,66,134,77,156,56,241,179,161,67, + 135,162,113,227,198,5,31,125,244,145,181,78,157,58,124,0,72,77,77,213,0,120,225,242,229,203,190,59,118,236,232,70,8,241,163,148,110,174,68,203, + 187,109,219,182,227,222,121,231,29,73,167,78,157,96,50,153,112,238,220,57,124,50,115,46,105,123,239,24,212,119,18,164,225,203,127,175,155,88,172,173, + 187,243,195,161,67,188,20,238,179,66,130,131,85,102,139,101,101,97,97,225,20,106,239,185,19,237,87,27,52,104,176,126,235,214,173,68,36,18,97,235, + 214,173,152,62,125,58,138,138,138,80,183,110,93,116,236,216,17,199,143,31,199,134,13,27,102,124,254,249,231,111,19,66,26,83,74,173,149,157,187,171, + 220,187,119,239,216,205,155,55,27,204,153,51,71,188,115,231,206,143,1,124,225,164,143,158,94,94,94,173,9,33,145,148,210,164,210,210,210,243,148,82, + 101,36,33,10,169,39,188,219,213,174,43,91,49,172,187,249,65,161,202,227,244,197,4,49,45,83,1,39,119,60,83,159,188,188,188,222,24,57,114,100, + 151,185,115,231,42,172,86,43,204,102,51,124,125,125,241,253,247,223,123,104,52,154,87,164,82,233,171,58,157,238,183,202,52,252,252,252,62,94,186,116, + 169,111,237,218,181,201,205,155,55,161,211,233,200,152,49,99,252,103,204,152,49,30,192,103,213,233,15,143,199,11,91,187,118,173,183,175,175,47,204,102, + 51,154,53,107,86,126,33,34,62,62,30,38,147,9,102,179,25,253,251,247,7,96,51,255,13,26,52,168,246,140,88,10,16,170,211,0,9,135,209,177, + 69,12,58,212,244,194,176,166,101,158,187,174,165,45,221,118,59,179,59,33,164,111,101,215,81,57,66,161,240,253,117,235,214,73,87,173,90,101,222,191, + 127,191,190,101,203,150,226,229,203,151,75,86,173,90,21,109,52,26,241,254,251,239,27,46,93,186,100,124,229,149,87,220,214,174,93,43,13,15,15,127, + 13,192,26,23,187,249,237,180,105,211,222,154,58,117,42,78,157,58,133,201,147,39,99,242,100,219,138,80,101,101,101,232,214,173,27,138,139,139,161,86, + 171,205,169,169,149,47,37,234,238,238,222,239,131,15,62,88,62,103,206,28,121,197,227,132,16,200,229,114,140,24,49,66,214,187,119,239,94,93,187,118, + 189,78,8,137,161,148,22,57,210,241,244,80,180,24,249,250,107,162,64,93,9,26,27,243,113,107,235,15,60,121,157,72,201,207,75,150,118,95,176,121, + 127,48,128,101,46,158,27,131,193,96,252,171,176,47,191,163,7,224,86,190,20,15,165,212,224,160,105,220,19,81,173,184,71,143,42,115,171,19,38,76, + 72,160,148,38,76,158,60,57,1,182,200,150,8,128,194,190,9,0,12,157,52,105,82,2,165,52,97,226,196,137,9,0,250,56,115,188,0,250,108,223, + 190,221,180,120,241,98,26,24,24,72,131,130,130,232,146,37,75,40,199,113,52,119,255,38,122,180,1,232,157,175,70,80,74,41,77,154,253,33,61,218, + 0,52,101,197,12,58,124,248,112,173,76,38,27,230,204,69,3,240,105,222,188,185,90,167,211,105,214,175,95,175,145,201,100,151,0,68,3,16,194,54, + 171,82,1,224,205,232,232,104,213,205,155,55,53,155,55,111,214,0,152,238,138,51,7,80,15,64,23,185,92,62,96,82,168,48,153,254,252,53,157,20, + 136,27,0,26,1,240,183,183,9,153,56,113,34,165,148,210,154,53,107,158,114,114,238,158,49,49,49,19,147,147,147,167,154,205,230,169,87,174,92,153, + 26,25,25,249,101,223,58,193,109,118,15,235,209,76,57,99,108,51,186,224,179,152,249,47,191,216,125,203,144,206,195,222,122,193,239,244,219,1,110,218, + 215,60,249,234,161,178,199,116,92,186,131,8,13,13,189,144,145,145,65,181,90,45,85,171,213,84,173,86,211,172,172,44,154,154,154,74,79,159,62,77, + 131,131,131,143,86,165,25,20,20,116,59,35,35,131,174,88,180,136,14,108,84,159,118,244,114,167,157,188,221,105,11,133,91,89,3,160,69,21,206,190, + 251,19,90,135,175,94,189,154,0,32,1,64,66,81,81,81,66,81,81,81,66,73,73,201,163,99,0,18,148,74,101,130,82,169,76,48,26,141,9,117, + 235,214,61,232,202,223,168,226,214,206,13,237,90,185,161,184,141,4,186,62,161,126,217,99,235,248,89,207,15,107,67,75,62,232,74,23,55,11,165,237, + 197,248,200,197,191,123,31,177,88,124,2,192,120,0,124,0,35,122,245,234,165,165,148,210,94,189,122,105,1,140,176,31,255,68,32,16,28,1,208,203, + 149,126,2,224,133,135,135,151,81,106,139,100,1,56,27,30,30,94,214,184,113,99,218,184,113,99,90,179,102,77,53,128,17,85,189,159,229,91,189,122, + 245,146,116,58,29,165,148,82,131,193,64,75,75,75,105,118,118,54,77,73,73,161,183,110,221,162,151,46,93,162,233,233,233,116,219,182,109,86,47,47, + 175,56,103,154,110,254,145,109,90,117,234,179,44,110,194,135,43,239,253,186,114,165,193,66,87,234,213,218,149,105,187,183,172,172,85,43,250,71,47,175, + 23,60,92,185,238,92,189,62,171,179,49,77,166,201,52,255,119,52,255,142,27,170,145,12,239,84,163,252,193,254,253,251,233,19,226,223,93,190,124,57, + 97,210,164,73,9,120,34,36,246,68,187,209,147,39,79,46,31,74,156,227,172,93,104,104,232,154,164,164,36,58,98,196,8,26,21,21,69,163,162,162, + 232,200,145,35,169,82,169,164,154,123,55,233,209,6,160,151,94,107,65,41,165,84,125,231,10,61,218,0,52,97,120,91,122,237,218,53,90,163,70,141, + 248,74,94,127,223,153,51,103,10,54,109,218,148,11,96,163,221,96,181,6,176,68,42,149,174,133,109,184,176,54,0,239,136,136,136,98,173,86,171,25, + 56,112,160,6,64,173,74,52,59,69,69,69,221,95,179,102,13,205,207,207,167,197,197,197,116,94,187,72,74,127,254,154,206,106,81,155,91,177,98,133, + 97,252,248,241,101,62,62,62,251,1,132,12,28,56,208,66,41,165,29,59,118,204,115,164,231,229,229,213,43,57,57,121,170,94,175,159,90,90,90,58, + 181,184,184,120,234,222,221,187,167,190,212,40,114,132,114,198,216,102,187,135,245,104,246,114,168,247,128,133,61,91,190,151,245,229,168,129,147,219,70,223, + 209,207,253,248,248,224,58,129,223,63,203,133,225,239,239,159,99,48,24,40,128,167,182,251,247,239,83,95,95,223,140,170,52,124,124,124,38,127,50,116, + 136,245,213,218,161,244,254,226,41,212,124,120,51,53,31,88,79,239,125,247,25,237,27,228,167,106,45,226,77,114,181,63,65,65,65,135,47,92,184,240, + 152,209,42,41,41,113,104,180,84,42,85,130,209,104,76,8,15,15,63,248,44,231,94,113,107,45,70,221,78,82,254,165,43,35,58,208,130,177,93,105, + 47,79,97,250,95,248,176,13,133,173,224,238,240,106,62,143,7,96,110,185,161,250,238,187,239,40,165,148,134,135,135,151,1,224,253,133,254,120,214,175, + 95,63,117,212,168,81,150,6,13,26,228,183,107,215,174,244,226,197,139,244,228,201,147,244,192,129,3,116,199,142,29,244,230,205,155,52,43,43,139,38, + 37,37,209,216,216,216,82,0,157,28,107,13,226,123,6,215,127,75,30,16,185,242,202,134,213,43,245,122,211,202,140,131,123,87,94,154,240,246,202,26, + 33,17,46,27,45,182,177,141,109,108,251,171,219,147,94,228,239,176,193,54,116,248,104,171,238,243,121,0,16,23,23,71,99,99,99,73,92,92,28,5, + 108,195,92,0,220,90,180,104,81,48,119,238,220,5,212,86,124,139,52,22,144,193,221,100,194,107,221,100,194,107,141,5,100,48,33,132,80,74,87,205, + 158,61,123,102,227,198,141,115,96,91,229,58,8,14,160,148,118,240,245,245,69,70,70,6,60,61,61,225,233,233,137,140,140,12,80,74,97,161,128,153, + 2,6,147,9,58,157,14,122,142,66,199,1,42,141,6,65,65,65,48,153,76,14,147,115,9,33,77,94,123,237,181,186,49,49,49,5,19,38,76,200, + 6,48,10,192,218,119,222,121,231,240,217,179,103,99,52,26,77,241,173,91,183,244,141,26,53,234,5,32,40,57,57,249,141,101,203,150,97,196,136,17, + 0,208,201,137,102,163,216,216,216,3,55,111,222,172,59,124,248,112,156,56,113,2,243,230,205,67,97,97,161,205,218,26,12,212,106,181,154,218,182,109, + 107,90,188,120,241,139,29,59,118,188,80,97,56,245,158,19,205,200,176,176,48,24,12,6,20,20,20,224,230,205,155,112,247,244,196,245,236,194,192,206, + 11,87,20,125,181,251,176,112,232,139,49,62,159,246,104,103,248,54,254,68,68,116,72,96,160,209,100,14,74,202,201,203,118,164,87,21,34,145,40,163, + 176,176,16,70,163,17,58,157,14,42,149,10,69,69,69,40,44,44,68,118,118,54,68,34,209,253,170,52,60,138,139,79,165,158,57,73,182,253,244,29, + 234,90,138,33,216,185,4,130,61,203,81,207,88,128,149,83,198,184,27,125,253,167,121,122,120,148,120,123,123,175,34,132,132,87,165,215,172,89,51,20, + 21,21,161,168,168,8,190,190,190,240,246,246,134,183,183,55,74,75,75,161,84,42,161,82,169,16,17,17,129,38,77,154,96,195,134,13,207,114,218,79, + 113,206,64,83,44,176,142,61,156,152,13,145,92,142,58,222,138,176,23,221,137,143,179,246,132,144,174,34,145,104,187,175,175,111,60,33,228,3,66,136, + 156,16,242,129,175,175,111,188,80,40,236,15,96,22,165,116,83,53,187,241,237,180,105,211,38,38,39,39,203,174,93,187,134,9,19,38,96,250,244,233, + 184,119,239,222,15,148,82,206,254,186,239,251,249,249,237,231,243,249,171,9,33,189,9,33,189,66,66,66,28,22,197,171,64,255,241,227,199,235,155,55, + 111,158,116,231,206,157,254,103,206,156,105,241,217,103,159,41,31,60,120,128,164,164,36,4,7,7,163,102,205,154,208,104,52,40,41,41,65,255,254,253, + 61,61,60,60,134,57,18,162,116,187,85,8,96,205,151,239,81,57,172,72,253,121,1,178,143,239,193,214,248,179,212,68,73,82,73,73,170,10,0,252, + 253,163,229,161,33,225,23,106,134,68,228,149,111,1,65,145,57,242,128,134,1,213,124,79,24,12,6,227,41,158,244,34,127,7,8,33,47,193,133,100, + 248,202,112,152,163,37,147,201,166,157,58,117,170,205,168,81,163,74,174,95,191,190,13,0,98,248,24,212,191,109,211,181,159,141,126,93,198,233,52,152, + 179,114,203,90,92,79,6,128,237,0,246,183,104,209,226,139,21,43,86,4,183,105,211,230,67,0,147,29,200,218,50,214,189,189,161,215,235,65,8,129, + 155,155,27,56,142,131,86,171,71,153,21,176,234,141,80,42,149,208,217,247,57,131,9,101,101,101,143,158,235,128,206,163,70,141,42,88,182,108,153,53, + 39,39,231,39,0,141,70,140,24,209,111,233,210,165,88,176,96,129,126,230,91,111,248,122,22,102,142,140,230,243,57,179,16,91,18,205,152,124,234,212, + 41,140,30,61,26,132,144,33,0,126,121,82,80,42,149,46,223,178,101,139,244,214,173,91,232,219,183,239,173,204,204,204,153,0,174,78,15,198,90,0, + 29,44,69,185,183,62,252,240,195,117,205,155,55,31,59,116,232,80,185,86,171,13,232,219,183,47,50,50,50,144,149,149,117,214,81,39,41,165,73,87, + 174,92,105,17,20,20,68,82,82,82,144,152,152,40,221,179,103,79,67,43,143,231,149,105,117,119,27,223,46,162,116,120,235,166,250,77,231,174,138,78, + 39,166,122,125,214,189,189,247,213,135,57,114,51,65,149,134,200,17,106,181,122,201,204,153,51,27,124,251,237,183,138,226,226,98,228,231,231,131,82,10, + 55,55,55,204,155,55,79,83,92,92,188,180,42,141,16,55,193,231,223,127,246,14,17,220,62,11,92,59,249,232,184,225,110,2,214,249,136,241,227,206, + 223,196,145,81,81,226,75,151,46,141,26,61,122,244,16,66,72,11,74,105,178,51,61,251,93,1,120,188,199,83,175,8,33,224,241,120,106,74,169,86, + 46,151,155,21,10,5,120,60,158,144,58,30,3,175,54,60,11,76,224,243,1,177,20,60,161,243,148,68,66,200,224,33,67,134,252,176,104,209,34,137, + 68,34,33,27,55,110,108,49,113,226,196,79,191,251,238,59,239,55,222,120,67,104,48,24,232,167,159,126,218,137,16,50,158,82,234,178,19,12,15,15, + 255,112,234,212,169,152,55,111,30,182,108,217,2,157,78,167,189,119,239,222,26,0,83,8,33,31,133,135,135,15,254,240,195,15,221,150,44,89,130,188, + 188,188,160,221,187,119,7,88,173,214,43,227,198,141,187,90,133,116,251,158,61,123,98,236,216,177,0,144,67,41,125,16,25,25,105,201,206,206,70,211, + 166,77,241,226,139,47,34,55,55,23,26,141,6,165,165,165,8,11,11,3,199,113,109,156,137,113,132,90,45,20,200,59,123,24,239,254,126,215,92,100, + 129,21,32,167,249,22,126,60,96,51,89,30,30,226,243,51,99,219,70,53,240,149,243,1,128,114,28,62,223,122,188,232,162,210,224,5,32,223,213,247, + 132,193,96,48,254,65,28,196,159,139,74,59,45,245,240,228,172,67,160,138,69,165,221,220,220,188,155,53,107,134,58,117,234,120,95,191,126,93,0,192, + 228,43,22,124,249,233,168,161,50,69,194,65,168,245,6,12,233,208,80,150,144,152,250,37,108,70,75,16,22,22,38,105,214,172,25,220,221,221,107,56, + 233,199,137,220,220,220,240,102,205,154,225,206,157,59,0,128,232,232,104,152,76,38,40,213,106,155,177,50,115,80,42,149,208,20,228,65,107,5,68,238, + 190,72,79,79,7,159,207,119,150,21,28,92,175,94,189,130,213,171,87,91,1,156,2,48,103,250,244,233,152,52,105,18,150,45,91,182,101,128,28,115, + 183,28,57,224,139,43,199,208,127,210,162,161,137,102,250,197,195,135,15,225,229,229,5,185,92,30,225,72,176,99,199,142,205,229,114,57,214,175,95,79, + 51,51,51,219,81,74,213,0,48,51,148,80,0,144,242,160,164,148,46,33,132,252,114,247,238,221,29,31,127,252,113,72,235,214,173,241,238,187,239,2, + 192,126,71,154,165,165,165,231,223,252,63,246,206,59,44,170,107,107,227,239,158,62,48,3,51,244,46,42,130,136,138,138,189,97,193,26,123,239,70,163, + 38,70,175,137,38,246,4,196,168,49,26,99,202,53,137,137,37,106,52,138,98,215,168,216,43,22,20,165,35,69,80,122,153,206,244,217,223,31,48,92, + 84,202,144,228,126,55,101,126,207,115,30,152,57,251,188,179,246,153,115,102,214,236,189,246,90,51,102,180,93,185,114,37,175,188,188,92,112,252,248,241, + 177,235,215,175,103,119,234,212,169,244,113,124,252,208,185,179,103,233,112,254,250,225,159,110,223,191,236,110,47,24,211,204,217,17,199,226,18,57,70,38, + 238,214,209,239,106,186,113,88,115,248,44,50,223,72,77,238,76,194,200,87,25,232,119,50,157,97,167,155,155,219,24,141,70,51,120,206,156,57,66,59, + 59,59,100,102,102,98,223,190,125,138,184,184,184,35,26,141,230,100,67,186,70,19,237,232,211,180,9,112,238,74,245,115,58,19,197,93,45,7,195,223, + 121,15,94,222,62,208,104,52,104,219,182,45,137,140,140,20,188,255,254,251,75,81,57,162,88,39,175,58,89,0,12,132,144,18,74,169,68,161,80,40, + 109,108,108,52,28,14,7,101,101,101,60,250,7,44,86,32,132,48,122,241,240,65,143,182,254,0,207,6,207,74,21,121,119,229,180,172,182,182,118,118, + 118,111,109,219,182,141,255,221,119,223,233,82,82,82,76,187,118,237,226,253,235,95,255,114,213,233,116,152,61,123,182,38,48,48,144,177,109,219,54,254, + 153,51,103,198,2,104,244,144,155,94,175,71,124,124,252,103,148,210,21,85,182,125,176,102,205,154,201,17,17,17,0,128,67,135,14,161,176,176,16,227, + 198,141,131,167,167,39,34,34,34,16,25,25,89,87,191,108,219,181,107,23,226,228,228,132,171,87,175,230,81,74,159,17,66,58,118,236,216,209,110,212, + 168,81,104,213,170,21,148,74,37,116,58,93,181,163,229,229,229,5,177,88,236,84,151,125,58,208,51,139,55,127,239,97,164,112,7,112,182,44,63,229, + 188,121,159,217,201,90,55,162,115,160,219,139,36,230,188,99,249,101,121,122,166,1,0,180,38,98,50,153,56,146,198,158,15,43,86,172,88,249,139,208, + 13,141,40,42,253,106,134,120,160,202,209,50,15,213,13,27,54,236,165,180,242,175,126,49,26,203,139,32,81,170,144,45,85,33,167,220,244,210,62,147, + 233,229,199,175,146,151,151,119,242,246,237,219,111,133,132,132,176,242,242,42,103,196,66,66,66,160,82,169,144,247,40,22,74,19,32,104,17,12,165,82, + 137,242,164,135,16,182,235,14,167,97,211,240,197,55,223,104,74,75,75,191,175,77,147,203,229,178,189,189,189,139,51,51,51,13,0,202,68,34,209,160, + 38,77,154,224,202,149,43,0,240,51,5,54,35,238,50,112,53,26,180,114,72,69,232,235,235,139,162,162,34,40,20,138,43,181,105,222,190,125,59,77, + 175,215,183,29,57,114,36,217,179,103,207,33,66,72,56,128,199,171,220,193,124,148,91,8,165,17,124,66,200,64,7,7,135,247,35,34,34,194,22,46, + 92,136,19,39,78,224,252,249,243,58,84,198,130,221,126,85,147,82,42,37,132,108,255,240,195,15,187,49,24,140,119,46,92,184,96,8,8,8,144,233, + 116,58,99,203,192,64,70,120,228,90,206,130,119,230,137,75,85,72,28,220,210,163,7,33,64,226,139,162,103,105,242,218,87,137,153,233,195,99,157,154, + 212,187,93,232,91,147,70,8,5,45,90,67,249,36,214,125,123,212,153,47,250,218,176,134,23,86,24,70,137,68,162,241,87,174,92,89,160,213,106,155, + 243,120,188,167,18,137,228,75,185,92,222,160,147,197,98,177,134,5,251,120,59,72,202,202,192,175,26,137,146,233,77,40,209,24,144,44,14,192,148,42, + 39,171,184,184,24,5,5,5,112,119,119,39,70,163,113,68,125,154,231,207,159,199,240,225,195,1,0,18,137,4,132,16,16,66,74,2,3,3,11,121, + 60,94,41,135,195,145,109,222,188,89,173,86,171,193,98,177,248,70,163,145,217,144,157,245,209,85,64,92,67,109,200,183,111,143,236,55,160,125,235,86, + 244,218,189,71,164,92,165,222,93,87,123,185,92,254,111,127,127,127,86,89,89,217,73,0,201,122,189,126,255,161,67,135,248,211,167,79,87,71,69,69, + 77,5,224,183,101,203,150,241,10,133,162,206,10,237,181,145,158,158,254,239,245,235,215,47,95,189,122,53,246,238,221,187,16,192,10,0,240,247,247,31, + 21,17,17,129,205,155,55,99,239,222,189,166,228,228,228,51,38,147,41,125,201,146,37,237,220,220,220,74,242,243,243,211,235,114,180,0,116,26,50,100, + 136,230,198,141,27,92,185,92,126,157,16,242,254,252,249,243,231,116,237,218,85,62,105,210,36,65,89,89,153,196,214,214,150,187,99,199,14,7,22,139, + 5,165,82,9,66,8,228,114,185,182,54,49,23,151,214,2,71,30,206,16,6,241,165,20,48,152,76,147,60,125,2,223,207,203,77,249,165,166,147,229, + 254,34,137,185,243,81,78,89,150,158,187,171,40,47,109,89,99,206,131,21,43,86,172,52,68,93,190,200,255,18,74,105,44,106,113,172,94,229,165,218, + 134,85,255,191,54,162,85,179,131,42,149,170,48,39,39,167,213,139,23,47,12,0,12,0,80,170,53,124,186,126,71,244,206,177,221,252,5,249,122,61, + 142,221,75,80,149,106,13,159,86,29,110,120,241,226,133,252,217,179,103,118,21,21,21,138,58,236,184,245,237,183,223,86,92,190,124,217,46,35,35,3, + 70,163,17,29,59,118,68,106,106,42,202,147,227,33,104,213,17,130,62,195,145,240,224,30,226,206,199,32,75,161,53,164,124,180,94,170,80,42,35,180, + 90,237,177,218,4,217,108,118,89,101,95,42,71,63,100,50,217,99,133,66,209,219,205,205,13,137,137,137,2,165,17,139,198,175,252,226,107,74,169,145, + 83,185,82,108,241,164,73,147,112,255,254,125,0,184,95,155,166,76,38,91,56,119,238,220,203,63,253,244,19,43,35,35,99,240,206,22,236,177,68,0, + 0,32,0,73,68,65,84,157,59,7,167,164,164,80,82,150,99,188,161,98,195,111,230,162,206,223,249,6,158,31,62,124,56,60,60,60,176,99,199,14, + 124,249,229,151,250,119,223,125,55,237,203,47,191,236,12,96,127,109,186,148,82,41,128,95,157,157,157,23,180,105,211,70,174,84,42,81,90,90,138,188, + 188,60,56,58,57,49,12,96,244,112,17,139,247,159,44,144,11,88,191,222,65,236,243,252,122,71,179,186,115,88,51,38,247,237,16,250,175,213,43,133, + 184,113,12,100,110,4,232,206,79,240,222,155,227,237,212,154,253,125,58,177,88,211,165,6,195,62,0,141,202,17,65,8,25,210,187,119,239,95,214,175, + 95,111,179,106,211,122,108,105,229,5,67,105,41,138,53,70,148,104,12,144,149,39,35,49,49,1,78,78,206,200,202,202,130,90,173,70,82,82,18,101, + 50,153,245,58,112,122,189,190,230,107,128,193,96,200,1,72,120,60,94,41,155,205,46,100,177,88,101,25,25,25,74,181,90,13,6,131,33,48,26,141, + 54,22,216,234,237,236,236,188,4,192,88,0,39,228,37,37,95,133,176,33,6,11,125,155,187,58,13,253,232,237,233,206,77,60,93,37,25,105,79,245, + 223,159,187,89,162,214,224,211,186,180,40,165,167,80,99,68,146,16,242,94,84,84,212,28,0,187,104,101,221,173,24,0,223,53,100,83,45,124,116,228, + 200,145,229,171,87,175,134,141,141,77,117,242,84,27,27,27,62,0,28,56,112,0,137,137,137,93,205,241,90,0,126,177,64,211,47,56,56,56,35,58, + 58,154,11,192,115,254,252,249,221,191,254,250,107,188,249,230,155,69,9,9,9,93,41,165,153,132,16,191,119,222,121,231,238,222,189,123,29,76,38,19, + 202,203,203,161,213,106,107,29,25,182,181,49,253,240,113,79,159,142,207,74,203,152,79,95,20,98,222,184,145,88,126,252,193,119,118,158,45,31,54,21, + 243,207,157,57,246,147,111,206,174,173,184,159,252,180,226,172,194,62,171,180,48,109,229,111,56,15,86,172,88,177,210,32,127,70,103,203,18,94,29,197, + 170,201,75,83,135,230,142,169,213,234,127,251,250,250,138,0,248,0,24,14,224,196,99,35,14,35,37,27,241,89,207,87,2,149,142,215,99,99,245,151, + 248,196,187,119,239,106,155,54,109,250,8,192,39,117,24,33,115,118,118,94,183,100,201,146,13,235,214,173,99,177,88,44,92,190,124,25,183,207,157,54, + 37,93,143,37,217,21,198,10,217,189,15,95,176,168,241,142,91,69,217,147,135,42,28,161,148,62,175,175,99,74,165,50,39,61,61,157,219,166,77,27, + 227,195,135,15,157,41,165,71,207,156,57,211,123,217,178,101,184,114,229,202,254,11,106,227,20,74,77,135,8,33,44,0,83,70,140,24,241,254,248,241, + 227,209,190,125,123,29,234,152,254,161,148,222,32,132,76,201,205,205,221,190,116,233,82,241,210,165,75,193,96,48,72,205,115,85,82,82,130,71,143,30, + 97,210,164,73,210,155,55,111,46,10,11,11,155,221,171,87,47,156,61,123,214,179,62,123,1,128,16,114,43,41,41,105,140,72,36,34,233,233,233,144, + 201,100,184,113,227,6,219,215,215,183,199,161,67,135,120,205,155,55,71,194,147,39,56,51,101,202,48,66,136,47,165,244,89,109,58,54,108,178,96,230, + 132,17,66,205,141,147,64,220,53,0,128,66,38,71,69,86,60,198,119,241,183,191,146,148,61,31,149,171,48,27,133,163,163,227,123,91,182,108,17,4, + 4,4,224,131,245,155,176,100,245,50,188,227,234,11,217,139,28,148,24,1,174,173,45,214,125,180,26,35,38,76,130,171,171,43,158,60,121,66,119,236, + 216,161,148,74,165,155,235,211,53,59,90,76,38,19,132,16,0,80,74,165,82,5,151,203,149,178,88,172,82,163,209,88,120,234,155,175,58,50,74,11, + 103,17,66,152,54,38,198,169,170,197,22,181,198,231,137,9,241,109,225,231,247,228,199,29,59,4,93,187,118,37,247,238,221,91,48,127,222,220,57,99, + 131,155,157,25,61,32,20,238,30,238,26,147,78,43,57,115,226,148,254,187,168,51,87,181,196,180,244,1,165,21,150,158,7,74,233,47,168,225,244,16, + 66,38,3,152,0,32,154,82,250,51,33,100,38,128,209,0,142,212,21,32,79,8,97,0,248,97,220,184,202,98,2,21,21,21,42,243,243,237,218,181, + 171,249,90,245,15,7,191,130,173,173,173,29,159,207,127,122,246,236,89,155,73,147,38,57,108,216,176,225,197,155,111,190,233,181,127,255,254,127,3,200, + 34,132,4,2,104,161,84,42,141,12,6,3,129,129,129,216,182,109,155,194,104,52,238,170,77,207,134,24,155,245,25,62,130,105,163,146,192,80,161,128, + 42,55,11,77,213,133,2,185,141,40,110,205,232,30,182,249,155,22,163,160,195,96,236,97,167,203,148,164,124,252,31,49,173,107,197,138,21,43,117,241, + 103,118,178,8,33,188,218,98,136,107,155,50,52,83,107,140,22,165,52,151,16,82,18,31,31,223,225,240,225,195,31,19,66,60,40,165,223,161,50,30, + 43,234,85,241,21,43,86,204,27,59,118,44,58,117,234,244,152,82,90,88,151,129,37,37,37,155,217,108,118,55,91,91,219,209,71,143,30,85,82,74, + 99,202,75,75,207,186,115,141,143,114,43,240,168,177,95,56,0,178,31,60,120,224,208,169,83,39,195,158,61,123,124,1,236,93,186,116,233,218,251,247, + 239,219,93,187,118,173,207,138,21,43,242,93,92,92,42,130,131,131,109,102,204,152,129,69,139,22,97,249,242,229,72,73,73,153,69,235,249,210,165,148, + 30,38,132,156,190,114,229,202,108,46,151,219,223,207,207,175,217,104,63,183,32,187,38,77,89,73,231,78,42,247,164,23,239,1,144,140,202,47,98,165, + 88,44,158,41,22,139,13,114,185,188,214,248,159,87,206,193,222,25,51,102,132,173,90,181,202,142,195,225,144,248,248,120,122,228,200,17,135,91,183,110, + 241,124,124,124,136,92,46,135,111,211,166,216,252,249,231,252,153,51,103,126,0,224,95,181,233,232,77,212,219,206,187,41,200,156,143,171,159,179,91,82, + 233,235,228,174,158,6,157,137,250,52,226,60,86,163,213,106,59,53,109,218,20,42,149,10,54,54,54,24,49,115,14,62,217,186,25,51,219,180,1,67, + 111,132,49,191,0,210,135,247,85,159,60,124,148,162,2,241,97,50,153,39,36,18,201,231,148,210,90,87,92,154,25,57,114,36,164,82,41,8,33,104, + 221,186,53,4,2,129,158,195,225,104,55,110,220,168,201,202,202,82,157,250,230,171,142,97,254,158,17,239,109,223,196,55,150,23,99,195,230,111,230,255, + 250,40,45,22,175,92,111,102,4,78,142,159,252,248,227,143,130,208,208,80,2,0,221,187,119,39,235,54,124,202,59,184,227,123,191,183,60,125,238,223, + 143,189,173,63,126,38,70,125,47,41,109,219,77,53,14,214,229,176,153,233,104,71,156,4,12,70,164,64,36,30,173,144,73,142,234,77,166,240,219,50, + 90,14,0,132,144,137,1,1,1,159,164,166,166,218,4,5,5,181,33,132,12,110,213,170,85,215,164,164,36,155,160,160,160,214,132,16,54,165,180,182, + 105,201,13,107,214,172,153,181,122,245,234,234,149,134,85,206,215,71,227,199,87,86,67,170,168,168,80,3,64,7,33,113,182,103,49,54,216,59,185,140, + 150,149,22,31,147,25,76,171,30,42,104,201,171,130,77,185,164,101,136,200,118,212,238,165,243,219,53,51,86,60,26,54,104,192,221,105,211,166,225,204, + 153,51,217,0,154,56,57,57,93,27,48,96,128,195,144,33,67,80,82,82,34,18,8,4,216,182,109,155,234,244,233,211,95,105,181,218,90,29,66,22, + 192,49,26,77,144,63,186,14,229,179,76,24,12,70,116,119,36,204,229,195,250,219,234,83,227,161,145,203,113,50,250,180,182,168,176,116,153,58,63,53, + 167,190,243,104,197,138,21,43,127,55,170,126,243,155,157,63,53,33,132,95,151,179,85,243,113,181,227,85,79,222,136,17,203,151,47,127,64,41,53,231, + 210,154,94,75,155,145,171,87,175,126,64,41,125,176,108,217,178,7,120,61,153,232,107,9,205,0,172,217,182,109,27,229,241,120,63,254,198,124,22,53, + 19,120,186,143,30,61,186,155,76,38,235,236,230,230,214,25,149,142,163,143,179,179,115,198,254,253,251,21,21,21,21,10,74,169,194,96,48,40,238,223, + 191,175,232,219,183,175,2,149,1,219,164,33,59,95,221,86,185,227,198,189,143,222,162,171,220,113,227,149,99,167,237,218,181,235,108,102,102,230,73,123, + 123,251,101,150,104,2,240,113,113,113,9,119,116,116,60,231,236,236,188,202,209,209,49,95,167,211,209,242,242,114,154,154,154,74,175,92,185,66,111,223, + 190,77,29,29,29,159,215,101,103,152,13,235,78,249,166,5,212,180,107,61,213,126,189,146,2,160,146,173,43,104,201,183,145,244,222,220,193,180,47,159, + 121,171,177,231,147,82,10,177,88,252,195,209,163,71,77,233,233,233,244,212,169,83,244,244,233,211,116,209,162,69,180,165,167,135,166,27,151,81,216,155, + 199,58,247,91,18,150,106,52,154,7,50,153,236,129,66,161,120,16,20,20,244,160,75,151,46,209,221,186,117,251,34,42,42,234,189,13,27,54,140,10, + 179,227,165,170,98,162,40,93,58,148,210,5,189,232,211,57,125,105,127,27,214,163,58,53,221,220,158,107,52,26,74,41,165,74,165,146,94,187,118,141, + 94,186,116,137,186,59,59,203,66,109,152,243,122,242,208,167,167,61,196,150,218,217,79,196,216,125,231,219,79,141,21,103,247,210,3,51,135,26,250,138, + 25,219,106,180,59,72,41,205,31,55,110,92,22,165,52,255,200,145,35,185,148,210,252,177,99,199,102,81,74,243,1,252,82,155,230,43,201,73,119,161, + 50,167,214,130,53,107,214,60,160,148,62,88,179,102,205,3,160,50,137,106,31,17,227,167,216,237,155,77,154,211,63,209,168,217,195,140,125,68,140,159, + 106,181,83,204,58,25,183,107,43,213,158,251,153,30,93,52,213,216,203,221,254,106,64,64,192,230,247,222,123,47,250,246,237,219,143,141,70,99,98,70, + 70,70,226,55,223,124,147,216,173,91,183,155,78,78,78,241,92,46,247,221,250,250,222,169,153,255,165,91,159,175,162,169,75,70,211,187,131,155,208,91, + 253,189,233,181,80,79,122,177,135,27,189,60,176,37,221,60,188,191,209,199,167,85,84,99,175,165,63,98,179,106,90,53,173,154,255,28,205,191,194,6, + 160,43,106,73,90,138,122,242,141,214,185,222,157,82,122,146,16,34,160,148,46,25,63,126,60,54,110,220,56,177,109,219,182,147,189,188,188,92,0,32, + 47,47,79,5,64,54,126,252,120,132,135,135,99,211,166,77,95,208,202,88,150,255,55,40,165,5,132,16,239,133,11,23,22,109,216,176,193,52,123,246, + 236,86,148,210,39,132,144,150,83,167,78,93,192,98,177,198,251,250,250,6,231,231,231,23,87,84,84,252,12,96,59,173,252,98,108,52,60,6,140,157, + 154,122,224,28,3,213,211,38,132,144,161,225,225,225,147,198,142,29,171,219,186,117,171,65,38,147,157,176,208,238,92,0,107,205,143,157,156,156,220,31, + 61,122,244,174,171,171,43,35,35,35,3,26,141,6,233,233,233,38,0,199,235,210,80,24,232,87,223,29,185,16,184,100,218,112,123,85,242,67,112,152, + 76,232,217,92,20,220,57,135,93,215,146,101,74,29,26,76,225,80,27,18,137,228,243,69,139,22,77,93,182,108,25,223,215,215,151,220,186,117,11,135, + 14,29,210,20,21,21,13,161,148,94,253,45,154,64,229,98,9,46,151,11,0,88,177,98,5,24,12,6,187,168,168,136,75,8,225,17,66,108,9,33, + 76,125,102,34,76,178,114,20,150,75,144,91,88,255,66,54,163,201,116,40,54,54,118,113,135,14,29,24,247,238,221,67,113,113,49,210,211,211,169,145, + 210,95,174,170,12,141,10,88,7,0,91,71,167,209,237,29,120,12,238,238,112,132,106,25,204,239,77,24,7,96,65,213,238,93,132,16,14,128,210,160, + 160,160,126,85,35,89,21,201,201,201,103,9,33,94,0,126,170,77,211,198,198,166,4,64,201,145,35,71,0,96,46,165,212,68,8,233,24,17,17,145, + 127,237,218,53,172,89,179,166,16,192,54,0,16,58,56,141,12,22,113,8,119,207,26,116,215,128,241,181,137,214,186,184,64,232,234,214,191,141,128,1, + 246,206,143,209,217,61,144,193,53,232,218,70,70,70,94,83,40,20,154,131,7,15,106,103,205,154,197,76,75,75,187,11,224,58,42,167,53,13,13,245, + 189,88,135,95,46,198,165,244,155,209,173,37,144,149,1,163,65,9,202,99,131,99,43,66,138,209,150,126,247,164,36,57,215,192,127,179,113,103,212,138, + 21,43,86,254,126,208,58,130,227,169,165,49,90,181,28,120,128,16,82,178,105,211,166,254,0,236,163,162,162,58,181,108,217,18,0,144,154,154,106,27, + 24,24,152,210,174,93,187,36,0,119,40,165,13,174,102,171,194,252,193,223,216,105,194,186,72,88,182,108,25,217,187,119,175,1,168,116,130,170,190,92, + 190,2,240,85,125,113,62,191,151,128,128,128,129,31,127,252,177,118,231,206,157,198,79,62,249,228,4,173,39,143,84,125,148,149,149,109,153,62,125,250, + 212,136,136,8,145,157,157,29,137,143,143,55,237,218,181,75,86,86,86,182,165,174,99,98,181,134,131,125,120,172,177,18,101,212,192,137,33,77,237,146, + 22,14,67,106,236,117,252,124,53,81,158,86,86,113,254,158,193,112,232,183,216,66,41,77,39,132,180,15,15,15,95,161,211,233,198,178,217,236,187,50, + 153,44,146,82,90,107,142,48,75,208,235,245,133,205,155,55,127,245,117,244,38,147,137,82,74,217,6,131,65,224,168,51,157,142,248,114,231,59,179,2, + 69,188,146,18,9,246,164,201,52,53,22,91,188,70,113,113,241,23,115,230,204,121,51,34,34,194,193,222,222,158,36,36,36,208,131,7,15,42,138,75, + 75,55,254,22,27,85,229,101,231,79,29,142,26,223,75,107,32,251,178,228,148,197,36,103,107,216,122,1,192,5,0,32,132,76,35,132,140,3,112,140, + 82,250,90,30,182,151,52,85,170,243,0,184,227,198,141,67,124,124,252,68,0,7,0,252,178,118,237,218,110,225,225,225,136,140,140,68,68,68,196,64, + 0,231,228,229,165,167,163,127,249,121,74,95,189,158,177,47,91,110,98,50,200,153,90,53,75,10,47,156,189,16,51,178,179,189,39,249,225,220,117,147, + 202,68,31,206,156,57,179,92,171,213,158,3,240,53,128,120,74,105,173,171,11,235,34,231,69,250,174,67,183,176,86,64,13,238,253,218,247,6,87,169, + 128,180,180,20,103,159,73,141,63,103,20,165,169,148,154,158,180,60,211,226,248,54,43,86,172,88,249,187,64,8,233,131,202,170,32,125,41,165,87,95, + 153,70,172,217,174,206,60,90,141,25,46,115,119,116,116,220,213,188,121,243,40,95,95,223,40,161,80,248,5,0,159,198,14,45,2,240,91,191,126,189, + 76,36,18,181,255,141,195,118,181,105,186,2,240,2,224,244,71,105,190,186,173,245,192,194,180,101,19,31,173,245,192,194,26,199,117,105,213,170,213,167, + 0,222,248,45,154,175,180,247,117,116,116,252,198,209,209,241,185,163,163,227,55,0,124,45,209,236,196,100,78,237,199,103,222,234,193,101,20,244,227,51, + 111,117,102,50,167,52,242,117,255,20,67,202,0,72,48,19,19,250,219,176,30,245,183,97,61,10,102,98,2,106,76,241,214,241,190,123,59,59,59,111, + 117,116,116,204,115,118,118,174,245,156,89,106,103,123,27,120,244,23,51,143,245,176,35,202,254,34,230,145,78,182,112,251,189,125,7,16,178,102,205,154, + 55,41,165,111,122,122,122,142,55,247,19,64,112,120,120,248,112,74,233,112,15,15,143,48,74,41,186,216,194,181,175,152,185,191,167,61,145,244,21,51, + 247,119,177,133,107,93,118,246,19,51,15,245,180,39,146,80,123,198,254,38,60,52,253,35,222,35,4,5,113,220,220,252,195,155,121,250,103,55,243,244, + 151,250,120,248,167,216,185,6,188,15,47,47,254,95,237,90,178,106,90,53,173,154,127,77,205,63,227,86,233,38,189,254,183,81,26,255,101,3,255,18, + 111,174,85,211,170,105,213,180,106,90,53,173,154,86,205,255,173,230,159,113,171,233,88,161,170,102,112,29,237,230,213,216,60,106,238,171,119,234,208,138, + 21,43,86,172,88,177,98,229,159,10,173,49,77,72,107,153,50,172,177,175,58,70,139,16,50,143,16,82,253,28,1,48,160,142,131,44,14,108,39,132, + 212,170,81,31,13,233,91,53,173,154,86,77,171,166,85,211,170,105,213,252,251,105,54,164,221,24,255,227,191,13,33,228,181,24,239,186,28,174,26,113, + 90,167,105,205,133,119,255,229,33,183,191,196,112,165,85,211,170,105,213,180,106,90,53,173,154,86,205,255,173,230,159,117,67,35,227,178,80,53,133,104, + 126,108,157,58,180,98,197,138,21,43,86,172,88,169,3,90,207,148,161,153,87,86,29,190,52,162,85,171,163,197,238,186,190,208,96,48,184,2,0,139, + 197,42,210,223,253,200,163,190,23,96,3,97,6,224,199,42,193,185,250,202,229,240,175,106,94,48,24,12,14,85,154,229,250,187,31,13,174,87,179,203, + 186,115,47,181,143,93,61,176,150,158,49,217,93,214,229,189,98,107,131,101,112,170,169,165,148,200,127,195,206,191,138,230,63,25,78,183,245,133,122,125, + 229,117,196,102,179,138,116,177,245,95,71,156,174,235,242,94,106,127,103,181,91,125,154,182,54,188,210,22,94,46,95,212,167,153,145,87,178,68,169,82, + 59,213,167,217,216,123,211,199,195,35,204,88,117,111,50,129,185,185,121,121,255,63,247,166,133,16,66,58,1,248,8,128,125,141,167,227,41,165,239,255, + 86,77,43,86,172,88,249,163,168,145,222,193,76,95,90,75,78,73,218,216,60,90,6,131,193,245,193,209,8,40,53,64,216,140,117,174,126,163,183,191, + 86,40,217,160,46,231,74,18,14,6,51,245,50,7,23,150,206,62,47,47,143,84,25,245,35,128,38,181,104,58,60,56,26,1,149,22,8,157,28,233, + 208,4,176,47,230,112,62,176,17,8,250,85,84,84,180,1,0,27,27,155,132,10,165,242,178,139,78,183,229,213,246,117,117,160,166,173,253,167,175,115, + 109,53,122,251,34,163,201,196,125,113,239,251,80,117,73,26,139,109,208,108,91,5,156,141,0,44,170,207,246,210,235,78,88,233,196,6,250,115,249,252, + 246,98,7,135,222,38,74,131,76,38,19,49,26,12,137,50,169,244,186,201,96,120,100,208,42,157,30,156,248,212,84,159,157,175,246,101,2,192,58,10, + 140,23,8,133,253,152,108,118,15,0,48,234,245,183,148,10,197,229,49,192,97,75,250,110,233,249,249,173,237,255,105,232,245,6,215,204,115,17,208,232, + 129,144,113,159,186,182,155,186,103,63,0,104,139,30,185,41,210,78,116,5,0,65,139,225,177,60,247,144,66,0,96,61,203,119,77,61,181,26,26,61, + 16,52,60,210,181,33,205,89,225,135,156,150,205,27,203,3,128,243,71,254,221,242,82,244,119,67,1,160,255,216,249,103,7,141,91,152,10,0,155,126, + 136,118,250,229,211,137,245,106,90,118,111,74,57,210,180,83,254,90,89,190,216,71,192,114,79,75,75,99,0,128,167,167,167,69,247,166,55,32,202,7, + 22,48,152,204,222,45,252,253,67,0,208,140,167,79,227,140,6,195,13,15,96,219,31,124,45,45,162,244,229,228,172,85,181,48,173,252,77,32,132,244, + 118,23,8,6,217,113,56,97,84,169,132,194,100,186,88,96,48,156,167,148,94,255,61,154,66,119,193,32,174,29,39,76,166,151,128,170,232,69,67,17, + 126,175,102,168,189,189,251,64,30,79,56,160,162,130,97,210,235,101,23,53,154,130,11,191,71,211,202,223,130,43,148,82,66,8,89,67,41,93,83,21, + 179,213,168,15,169,58,167,14,149,26,224,106,58,208,167,91,59,204,155,250,134,176,230,190,195,219,35,155,164,221,59,222,106,231,158,45,140,118,237,218, + 33,51,51,211,162,23,83,105,129,43,105,0,36,73,118,229,2,193,211,173,155,55,219,15,28,56,144,229,233,233,9,66,8,10,10,10,186,197,196,196, + 116,90,188,120,241,59,144,36,149,171,180,144,95,177,32,5,168,217,214,54,45,155,226,163,133,19,69,0,176,106,198,182,78,247,82,10,29,159,62,125, + 26,182,124,249,242,82,230,229,203,223,57,3,187,11,129,92,75,236,220,123,50,150,47,202,63,224,55,109,225,194,35,254,254,254,66,95,95,95,98,103, + 103,7,38,147,137,242,242,242,38,9,9,9,67,99,99,99,149,49,87,127,228,222,191,59,50,163,136,223,85,109,81,223,43,242,248,231,237,236,18,166, + 143,25,227,61,113,226,68,126,139,22,45,0,0,79,159,62,13,56,124,248,240,228,35,71,142,132,163,34,207,160,210,66,221,80,223,171,53,1,240,129, + 30,98,87,215,105,76,54,187,141,193,96,240,2,0,22,139,245,194,168,215,39,72,138,138,126,126,181,189,149,215,209,232,129,164,124,96,64,239,16,76, + 31,59,64,0,0,203,39,173,239,246,44,43,157,163,213,106,209,50,48,168,231,39,159,126,113,14,12,6,246,69,199,84,183,183,68,51,62,41,19,17, + 159,108,69,222,227,195,221,140,210,244,126,114,153,148,9,0,246,34,209,216,195,7,15,92,246,12,30,127,39,189,68,103,145,102,125,247,230,175,7,191, + 241,120,254,228,114,235,111,207,239,98,55,105,210,4,143,31,63,182,168,239,213,215,134,52,197,206,228,225,145,184,101,233,82,247,208,208,80,8,133,66, + 176,88,44,24,12,134,1,55,110,220,24,16,17,17,49,31,210,20,165,165,247,166,5,108,33,132,244,155,53,111,145,199,27,163,198,99,236,144,158,127, + 136,168,149,255,61,132,16,55,127,71,199,83,91,22,45,106,57,180,127,127,129,151,175,47,76,69,69,200,77,77,237,124,234,198,141,69,1,124,126,106, + 186,70,51,156,214,83,31,183,54,77,103,127,199,83,75,182,44,106,217,127,104,127,65,83,47,95,228,168,179,145,250,44,185,243,205,179,119,22,113,154, + 177,82,245,217,198,70,107,186,185,249,159,90,190,252,139,150,3,7,14,19,248,248,120,162,168,200,132,180,180,103,93,46,95,62,249,158,157,93,64,170, + 66,145,222,40,77,43,127,43,250,154,3,226,9,33,17,0,250,54,86,160,86,71,139,197,98,21,13,156,185,193,181,119,215,182,184,247,40,85,154,157, + 147,175,48,239,43,75,56,220,114,84,79,175,214,215,174,93,133,70,163,193,173,91,183,240,232,209,35,100,101,101,225,237,183,223,214,176,128,185,117,104, + 150,135,78,142,116,128,52,77,24,192,77,105,22,147,156,204,84,171,213,184,118,237,26,202,203,203,193,229,114,225,237,237,141,65,131,6,177,146,147,147, + 29,195,6,14,17,133,14,153,146,9,81,128,130,197,98,149,215,217,1,22,171,40,108,198,58,215,214,1,77,241,52,59,79,250,209,167,59,21,38,19, + 101,101,100,61,211,93,189,122,21,33,33,33,184,112,225,130,83,89,89,217,199,219,182,109,251,136,253,217,183,95,233,181,165,31,214,163,87,30,58,57, + 210,193,169,40,202,247,210,175,199,56,9,9,9,156,239,191,255,30,165,165,165,224,114,185,16,139,197,112,119,119,71,203,150,45,201,170,85,171,132,195, + 135,39,224,95,115,199,251,234,252,230,164,212,101,103,117,223,21,207,108,157,101,231,91,68,159,62,205,232,213,171,215,75,30,113,243,230,205,49,120,240, + 96,254,180,105,211,90,76,156,60,213,20,58,108,214,83,8,125,85,13,106,42,115,109,156,84,183,61,7,76,158,124,34,50,50,82,236,238,238,14,129, + 64,0,0,144,74,165,222,217,217,217,221,194,195,195,199,197,198,31,100,133,14,207,205,131,192,167,162,190,243,249,79,133,205,102,21,153,71,145,236,4, + 54,229,185,207,11,149,0,160,213,106,161,213,106,161,209,104,240,238,252,183,153,115,199,117,241,247,237,189,232,97,214,139,194,178,160,152,59,142,230,99, + 27,210,100,169,178,36,146,156,139,115,35,150,46,117,119,115,251,207,140,224,190,189,123,153,101,101,101,3,34,34,34,90,83,219,190,146,160,225,145,226, + 250,52,235,187,55,37,169,167,155,125,178,112,112,251,237,159,158,130,209,104,196,237,219,183,113,237,218,53,124,241,197,23,244,236,217,179,82,123,129,160, + 129,123,51,197,174,151,71,129,223,103,159,29,33,60,30,15,199,143,31,71,114,114,50,24,12,6,218,181,107,135,233,211,167,99,192,128,1,238,243,230, + 189,77,67,135,76,202,128,40,80,254,123,174,165,170,2,219,139,86,70,124,230,49,99,206,2,108,250,100,149,213,209,250,155,64,8,105,218,210,199,231, + 230,165,221,187,61,60,236,236,128,248,120,32,33,1,250,243,231,209,210,199,7,173,250,247,23,76,234,222,61,100,208,167,159,198,17,66,122,82,74,179, + 45,209,108,210,210,231,230,222,75,187,61,68,30,118,72,70,60,46,33,1,123,36,219,225,235,221,28,125,222,31,40,232,58,182,99,200,166,81,95,55, + 70,179,89,211,166,45,111,236,223,31,227,225,224,224,137,204,76,224,238,93,138,139,23,77,240,240,8,196,232,209,173,4,125,250,76,10,249,248,227,65, + 113,132,144,174,148,210,231,127,204,25,178,242,87,161,106,154,208,162,24,45,74,233,15,132,16,15,0,195,170,142,173,76,239,64,41,197,233,211,167,205, + 203,23,251,14,27,54,236,42,8,97,248,141,222,190,255,211,85,115,133,43,55,252,168,200,56,246,246,84,0,16,1,77,154,119,232,144,126,233,210,37, + 86,122,122,58,246,236,217,163,10,8,8,184,215,188,121,243,178,193,3,7,202,154,248,250,74,95,228,231,47,3,165,175,151,215,33,132,209,20,176,43, + 177,181,77,79,78,78,118,78,76,76,196,253,251,247,225,231,231,7,7,7,7,176,217,108,232,245,122,200,100,50,4,6,6,130,199,227,161,99,199,142, + 37,78,74,165,127,54,32,175,67,147,9,0,129,163,191,95,188,110,229,91,194,143,63,221,37,77,62,246,246,215,142,64,128,111,135,14,9,43,87,174, + 100,104,52,26,152,76,38,4,7,7,195,211,211,19,238,222,77,75,244,26,165,123,213,25,124,125,58,177,242,195,31,222,94,94,133,9,9,9,206,193, + 193,193,40,42,42,130,88,44,134,72,36,130,88,44,174,222,154,53,107,134,37,75,150,192,195,195,163,168,66,173,246,168,210,172,181,239,29,1,94,154, + 64,144,114,245,234,85,159,144,144,144,90,223,40,181,90,13,149,74,133,184,184,56,140,27,55,46,55,64,169,12,124,0,104,234,210,180,5,58,180,8, + 14,62,123,241,226,69,103,123,123,123,20,20,20,64,38,147,129,197,98,193,214,214,22,206,206,206,224,243,249,0,128,180,180,52,12,27,54,172,36,63, + 35,99,168,10,120,88,171,230,63,153,170,107,233,85,124,221,220,6,233,8,57,242,205,55,223,240,187,118,237,138,139,23,47,98,246,155,111,110,48,2, + 225,47,53,172,253,90,98,2,0,15,8,235,220,171,215,217,207,62,251,140,193,227,241,16,21,21,133,248,248,120,16,66,208,185,115,103,204,153,51,7, + 0,240,246,219,111,155,46,157,61,59,84,3,92,172,71,179,214,123,83,12,120,247,26,62,60,37,58,58,154,159,155,155,139,209,163,71,191,72,78,72, + 88,201,7,226,59,2,25,87,0,93,149,102,173,215,146,55,32,50,121,120,36,30,57,114,196,189,160,160,0,31,124,240,65,201,243,103,207,150,11,42, + 107,38,66,9,244,246,109,222,252,179,125,251,246,57,251,251,251,35,36,36,164,192,152,147,211,250,57,32,253,45,215,82,149,147,181,99,101,196,103,179, + 102,204,89,128,189,59,182,225,211,200,229,185,148,82,31,66,72,12,165,212,26,67,248,23,133,16,66,188,4,130,39,177,71,143,182,246,84,169,128,187, + 119,129,202,149,88,208,159,60,105,110,4,198,128,1,200,114,118,166,253,34,35,147,94,232,245,109,105,213,114,173,186,52,237,189,4,79,142,199,30,109, + 173,245,84,33,30,119,65,81,217,252,251,103,149,161,143,4,4,67,108,71,195,53,207,155,174,27,178,37,201,80,72,27,210,100,136,68,30,9,103,207, + 62,104,101,50,185,33,37,133,154,205,196,217,179,38,179,153,232,214,141,192,198,38,155,46,93,218,47,65,173,126,222,174,62,77,43,191,143,215,124,145, + 63,1,141,41,193,67,95,201,165,101,126,204,48,63,57,108,216,48,130,151,3,190,94,163,130,201,220,176,105,211,38,150,90,173,198,206,157,59,229,19, + 198,141,139,234,211,187,119,70,51,95,95,9,97,48,26,252,176,45,230,241,222,219,180,105,147,88,171,213,226,254,253,251,232,212,169,19,220,221,221,33, + 20,10,33,20,10,225,234,234,138,192,192,64,20,21,21,193,206,206,14,203,150,45,19,21,243,120,239,53,164,107,50,81,22,0,24,77,38,46,7,152, + 231,215,185,243,253,240,240,112,134,147,147,19,28,29,29,33,20,10,145,156,156,12,173,86,11,91,27,91,139,86,90,50,24,12,134,80,40,196,165,75, + 151,176,104,209,34,244,232,209,3,98,177,24,118,118,118,104,211,166,13,6,13,26,132,185,115,231,34,35,35,3,196,130,160,146,68,22,107,193,220,185, + 115,93,235,115,178,36,18,9,138,139,139,225,237,237,141,241,227,199,187,38,178,88,11,106,109,12,192,9,112,247,14,8,56,113,247,238,93,103,129,64, + 128,125,251,246,225,216,177,99,248,245,215,95,113,230,204,25,156,58,117,10,199,143,31,71,113,113,49,0,32,32,32,0,135,14,29,114,22,186,186,158, + 114,2,220,45,57,7,86,128,103,133,133,231,219,20,20,56,79,155,58,245,186,66,161,192,180,105,211,176,97,227,198,85,108,96,177,37,199,7,2,34, + 71,15,143,221,159,125,246,25,163,160,160,0,99,198,140,41,217,178,113,227,91,113,231,206,181,120,240,235,175,45,54,68,70,190,213,167,79,159,146,231, + 207,159,99,239,222,189,12,183,38,77,118,7,2,162,198,218,41,7,22,125,249,229,151,124,181,90,141,129,3,7,102,152,18,18,2,13,192,1,5,144, + 92,237,100,213,67,62,176,96,217,178,101,238,60,30,15,31,124,240,65,137,234,217,179,182,6,96,143,20,200,150,2,217,6,96,143,60,51,179,237,140, + 25,51,74,120,60,30,182,110,221,234,158,255,159,162,219,22,65,8,233,68,8,57,65,8,185,10,32,111,214,188,69,179,66,186,116,55,59,89,187,1, + 76,32,132,252,12,160,206,17,103,43,127,9,38,172,26,53,202,219,195,198,166,16,177,177,101,168,205,47,161,20,234,115,231,202,248,64,246,196,206,157, + 189,0,76,104,72,115,218,138,169,222,14,238,162,194,120,196,150,153,157,172,151,36,65,113,86,118,172,76,224,32,204,238,53,181,187,37,154,147,38,77, + 250,216,211,214,214,173,48,41,137,150,213,97,38,174,92,209,148,41,149,188,172,14,29,38,248,0,24,223,128,166,149,223,137,37,190,200,255,51,87,170, + 28,171,134,108,58,93,149,168,116,94,213,10,196,211,230,29,213,142,86,149,39,89,239,220,163,131,147,83,167,182,109,219,226,214,173,91,8,14,14,190, + 43,22,139,13,28,30,15,28,30,15,212,212,240,143,90,27,129,32,108,192,128,1,172,59,119,238,192,207,207,15,54,54,54,224,114,185,224,112,56,213, + 27,159,207,135,135,135,7,100,50,25,194,194,194,216,54,2,65,88,131,194,0,158,165,61,17,22,223,249,108,206,143,63,237,254,246,208,161,131,54,77, + 154,52,129,157,157,29,156,156,156,224,236,236,140,166,77,155,86,78,1,233,169,204,18,61,163,209,104,100,50,153,240,243,243,195,134,13,27,176,123,247, + 110,92,185,114,5,39,78,156,192,146,37,75,208,185,115,103,60,121,242,4,177,177,177,176,228,23,142,157,72,244,198,196,137,19,185,181,237,211,104,52, + 144,74,165,144,74,165,144,72,36,200,207,207,71,247,238,221,185,118,34,209,27,117,233,105,248,252,113,123,247,238,117,229,114,185,48,153,76,144,203,229, + 200,201,201,65,108,108,172,250,216,177,99,138,211,167,79,171,174,95,191,174,190,117,235,22,5,0,153,76,6,66,8,134,15,31,238,84,193,229,78,180, + 228,28,88,169,228,60,160,9,210,106,71,116,237,210,37,46,35,35,3,239,189,247,30,198,77,154,244,153,45,208,190,161,99,51,94,113,96,232,179,103, + 193,58,96,79,49,144,93,12,100,235,128,61,134,204,204,224,154,14,76,70,35,29,24,0,176,19,137,58,123,120,120,224,226,197,139,200,201,202,90,158, + 8,52,170,8,52,131,201,236,21,26,26,138,19,39,78,224,249,179,103,203,139,129,226,87,219,20,3,197,217,25,25,203,119,239,222,141,65,131,6,129, + 201,98,245,106,164,153,139,40,165,35,40,165,161,148,82,183,93,219,191,194,153,227,135,205,78,214,28,74,233,93,74,233,116,74,233,147,70,234,90,249, + 19,33,98,50,223,24,214,189,187,189,113,251,118,55,253,185,115,28,42,149,222,1,33,6,243,126,10,24,158,74,36,119,98,211,211,57,185,7,14,52, + 27,212,162,133,200,22,168,243,179,14,0,56,34,246,27,161,195,122,218,159,213,29,117,123,170,74,227,232,140,218,59,64,13,77,66,12,164,132,125,71, + 243,76,207,57,254,226,80,179,86,131,90,136,24,182,245,107,178,217,162,193,189,122,13,183,143,138,50,185,93,188,104,226,200,229,52,22,64,181,166,201, + 68,13,169,169,79,239,156,59,119,135,243,203,47,47,154,251,249,13,20,1,194,122,87,228,90,249,253,88,226,139,252,47,168,10,136,175,243,187,158,82, + 154,79,41,253,161,198,86,29,109,219,168,17,45,87,87,87,47,161,80,136,188,188,60,4,181,106,85,196,227,241,192,101,179,193,231,214,234,63,188,134, + 74,165,10,246,244,244,132,84,42,133,179,179,243,75,14,86,77,135,203,206,206,14,12,6,3,77,154,52,129,74,165,10,110,80,183,240,137,235,193,175, + 231,191,123,251,234,217,230,99,198,140,133,131,131,35,124,124,188,225,234,234,10,27,27,27,248,248,248,160,69,139,22,116,203,150,45,176,117,109,119,215, + 18,91,107,58,79,44,22,11,70,163,17,133,133,133,72,73,73,65,124,124,60,110,223,190,141,135,15,31,66,46,151,195,146,145,100,85,69,69,123,22, + 235,245,193,52,141,70,3,137,68,2,137,68,82,237,104,21,23,23,35,59,59,27,10,165,178,67,93,122,14,78,78,99,219,182,109,203,4,0,27,27, + 27,116,232,208,1,219,183,111,55,156,60,118,108,82,235,219,183,29,125,206,157,19,255,248,253,247,147,198,143,31,111,188,115,231,14,100,50,25,146,146, + 146,224,226,226,194,226,242,249,86,71,171,145,60,0,148,206,114,249,144,30,61,122,100,74,165,82,108,222,188,153,193,182,179,251,33,18,168,117,202,177, + 26,38,179,167,217,129,201,123,246,108,197,179,90,28,152,103,64,113,78,70,198,10,179,3,67,88,172,70,7,42,117,235,214,173,173,201,100,194,227,199, + 143,33,6,98,27,123,124,11,127,255,16,243,200,175,121,186,176,54,4,192,245,184,184,56,216,216,216,32,168,117,235,142,141,124,153,45,132,144,252,217, + 111,191,135,232,95,111,2,0,118,255,240,117,33,42,157,44,235,84,246,223,4,54,208,203,213,215,23,52,59,27,208,233,132,134,235,215,187,25,111,222, + 44,2,144,86,76,105,218,173,236,236,162,188,194,194,110,148,82,161,54,63,31,158,206,206,96,3,245,58,237,12,54,163,151,143,155,15,10,76,47,96, + 132,65,152,173,201,232,246,66,157,93,196,164,172,52,27,165,93,26,205,36,69,21,210,138,110,148,82,97,145,54,31,206,158,206,0,187,1,77,6,21, + 31,142,147,0,0,32,0,73,68,65,84,167,135,143,143,43,242,242,40,244,122,8,111,222,164,93,99,99,105,17,165,36,77,42,45,78,139,137,185,89, + 148,154,250,162,27,165,84,248,252,185,6,142,142,158,0,26,253,227,194,74,35,249,179,141,104,209,87,74,240,212,149,83,171,230,104,86,141,81,45,0, + 53,28,45,11,95,16,0,192,102,179,193,229,241,192,229,114,43,29,36,30,207,98,13,66,8,248,124,126,181,99,85,211,193,170,249,191,173,173,173,69, + 14,12,0,148,167,255,218,123,206,91,179,185,60,30,15,90,173,6,148,82,240,120,124,136,197,98,248,249,249,65,38,147,161,71,207,62,154,92,9,231, + 148,83,208,232,248,198,244,217,140,193,96,128,82,169,68,121,121,57,202,202,202,32,147,201,80,81,81,97,241,82,116,147,201,196,204,205,205,197,129,3, + 7,80,90,90,10,160,50,208,218,236,92,153,255,102,102,102,98,223,190,125,200,202,202,2,26,241,254,244,238,221,27,167,78,157,98,246,13,11,219,113, + 193,215,55,239,130,175,111,94,223,176,176,29,39,78,156,96,122,121,121,33,59,59,27,247,239,223,71,121,121,185,69,201,215,172,188,206,83,160,92,85, + 86,54,123,213,170,85,84,40,20,98,243,231,159,183,95,15,76,169,239,152,154,14,140,168,30,7,70,244,251,28,24,80,74,97,50,153,96,52,90,148, + 197,228,53,8,33,132,205,102,55,54,181,130,197,141,107,6,190,47,251,120,3,206,28,63,108,222,149,102,117,178,254,94,24,1,38,209,235,81,115,202, + 208,32,151,35,249,248,113,156,42,40,64,69,205,207,117,74,1,157,14,166,6,126,176,80,35,101,26,97,4,106,76,25,170,141,106,92,76,60,135,138, + 251,6,152,180,53,218,130,66,15,29,168,169,129,31,65,160,12,131,129,188,52,179,41,147,25,241,227,143,41,120,244,232,36,76,166,255,12,10,87,153, + 9,128,54,234,59,211,202,63,7,243,72,214,171,255,3,85,171,14,171,60,200,234,191,117,81,88,88,248,66,169,84,54,247,245,245,197,243,231,207,93, + 155,52,105,242,140,203,102,131,195,229,130,48,26,190,254,108,109,109,31,231,229,229,245,244,242,242,130,193,96,168,118,170,216,108,118,245,198,225,112,0, + 84,142,210,60,124,248,16,182,182,182,143,161,174,55,115,2,140,218,242,166,29,59,118,172,30,25,170,12,86,23,129,199,227,99,245,234,213,166,173,91, + 182,108,107,210,63,82,250,230,226,85,116,213,250,29,13,218,217,24,44,253,98,178,181,181,125,236,227,227,211,93,36,18,33,58,58,26,217,217,217,40, + 47,47,135,74,165,130,70,163,129,74,165,130,86,171,5,159,207,71,235,214,173,97,111,111,143,152,152,152,199,208,104,106,213,43,47,45,141,126,252,248, + 113,247,46,93,186,84,127,152,244,235,215,143,244,235,215,207,217,252,88,165,82,161,164,164,4,119,239,222,69,76,76,12,8,33,72,75,75,51,106,42, + 42,126,249,189,253,254,167,162,6,110,49,119,239,222,245,206,59,239,188,213,179,103,79,24,129,161,0,246,213,213,254,191,237,192,152,185,125,251,246,19, + 163,209,216,179,101,203,150,144,0,93,1,28,111,204,241,79,211,211,227,12,6,67,88,251,246,237,17,29,21,213,27,64,173,43,182,148,64,239,144,144, + 16,84,84,84,32,41,49,241,129,37,218,181,5,190,239,254,225,235,220,93,219,191,242,129,5,241,99,86,254,90,24,129,219,133,105,105,19,221,189,188, + 64,37,18,69,161,193,144,148,94,84,212,145,154,76,158,42,153,12,169,132,24,236,249,252,88,47,141,38,200,198,217,89,152,147,155,11,35,112,187,62, + 77,147,129,222,206,40,120,58,209,201,213,13,114,42,87,148,23,151,39,165,102,165,116,52,81,147,167,172,66,6,146,69,12,124,1,63,214,232,166,9, + 114,228,56,11,115,115,114,65,140,13,104,154,116,119,51,50,10,125,93,93,221,32,147,81,69,105,105,65,82,74,74,122,71,163,145,122,202,100,42,16, + 146,106,224,243,237,99,53,26,175,32,87,87,91,225,139,23,185,0,244,141,30,45,182,98,57,150,250,34,255,159,88,154,176,180,170,237,75,1,241,102, + 26,229,157,75,203,203,31,196,197,197,161,99,199,142,120,250,244,105,23,106,50,177,56,92,46,184,28,14,24,22,124,145,84,40,149,23,47,94,188,104, + 232,208,161,3,20,10,5,88,44,214,75,163,89,92,46,23,108,54,187,122,213,220,209,163,71,117,21,74,229,197,134,116,77,70,147,145,193,96,84,127, + 153,73,36,18,168,84,21,216,176,97,3,190,217,178,101,170,17,88,204,22,184,52,42,102,229,143,70,173,82,93,58,115,230,140,190,121,243,230,152,53, + 107,22,22,47,94,140,197,139,23,227,157,119,222,193,172,89,179,48,125,250,116,140,25,51,6,93,187,118,133,139,139,11,82,82,82,244,106,149,234,82, + 93,122,60,181,250,200,204,153,51,139,204,14,154,82,169,132,92,46,135,84,42,69,113,113,49,110,222,188,137,189,123,247,98,203,150,45,56,122,244,40, + 52,26,13,116,58,29,30,62,124,88,46,208,235,163,254,63,251,254,119,131,13,68,223,184,113,3,142,142,142,240,244,246,238,83,95,219,42,7,6,237, + 219,183,135,20,232,93,87,59,233,111,112,96,106,162,148,203,239,101,102,102,162,111,223,190,240,240,246,254,172,53,96,211,152,227,141,6,195,245,27,55, + 110,96,198,140,25,240,109,222,252,51,23,192,229,213,54,46,128,75,179,22,45,62,155,53,107,22,206,159,63,15,163,193,80,231,8,221,43,129,239,217, + 214,192,247,127,14,50,163,49,230,220,221,187,229,134,161,67,115,238,20,21,233,210,138,139,187,82,147,233,63,113,19,148,178,100,106,117,215,68,64,199, + 236,219,55,229,114,102,102,169,10,168,183,136,176,94,174,143,185,121,238,118,121,8,237,150,115,239,193,61,93,114,102,82,87,19,253,143,38,5,101,85, + 40,213,93,117,25,208,117,99,247,77,73,187,156,89,106,82,53,160,169,151,93,186,117,235,92,89,151,46,134,156,216,216,219,186,196,196,180,174,70,35, + 253,143,38,5,75,173,150,117,165,52,81,215,171,23,35,37,43,235,114,41,80,247,103,178,149,191,31,102,39,203,60,101,104,14,138,175,122,254,213,182, + 243,204,127,127,215,212,161,141,209,184,242,195,15,63,212,51,24,12,140,29,59,214,238,248,137,19,227,31,62,122,228,87,84,84,36,54,26,141,13,106, + 185,104,52,95,125,248,225,135,18,173,86,139,192,192,64,148,149,149,193,104,52,130,197,98,129,197,98,129,16,2,6,131,1,161,80,136,184,184,56,236, + 218,181,75,230,162,209,124,213,144,174,209,104,124,188,111,223,62,48,153,76,202,231,243,65,8,1,139,197,194,214,173,91,139,190,1,162,1,128,201,96, + 104,1,128,193,248,79,0,101,3,52,56,111,105,14,68,183,164,173,131,70,243,229,166,77,155,228,73,73,73,80,42,149,213,163,111,10,133,2,50,153, + 172,250,49,33,4,74,165,18,39,78,156,144,59,104,52,95,214,165,87,10,20,60,79,75,27,217,165,75,151,210,204,204,76,72,165,82,60,126,252,24, + 49,49,49,56,116,232,16,206,159,63,143,244,244,116,24,12,6,120,121,121,129,82,138,99,199,142,73,13,114,249,208,82,160,192,194,115,240,143,164,169, + 187,123,152,155,171,107,142,139,179,243,243,166,238,238,175,45,198,16,1,169,169,169,169,48,24,12,240,243,243,115,172,47,78,139,26,12,55,204,14,140, + 79,243,230,27,125,107,113,96,124,1,23,223,22,45,54,154,29,24,106,48,220,104,172,205,118,192,215,75,151,46,173,224,112,56,56,120,240,160,159,222, + 223,63,153,5,76,17,2,173,250,2,156,134,142,247,0,182,125,252,241,199,5,132,16,252,252,243,207,206,162,22,45,158,176,128,153,34,160,169,8,104, + 202,2,102,138,90,180,120,114,240,224,65,103,131,193,128,197,139,23,23,120,0,219,234,145,172,25,248,238,99,13,124,255,71,177,119,249,177,99,229,241, + 105,105,62,246,131,7,59,214,58,219,65,8,188,186,119,119,76,45,46,110,185,253,201,19,41,128,189,13,105,238,90,185,175,252,209,147,135,62,161,162, + 48,71,6,121,93,147,128,160,179,123,119,199,194,244,226,150,247,183,91,166,185,119,239,135,210,184,184,39,62,253,251,219,59,50,24,175,15,22,16,2, + 244,232,225,229,88,92,156,218,242,201,147,237,229,168,103,244,218,202,223,18,115,86,248,62,64,165,227,85,215,10,196,87,2,225,95,154,58,36,181,197, + 65,177,187,174,47,4,168,107,159,110,237,112,239,81,138,212,217,193,254,156,121,95,89,194,225,150,253,131,237,219,125,251,237,183,96,179,217,200,205,205, + 69,98,98,34,236,237,237,49,117,234,84,77,133,92,62,210,92,235,144,16,50,128,82,26,83,165,89,89,79,77,154,38,108,193,138,111,254,235,153,83, + 76,145,72,4,133,66,1,6,131,1,62,159,15,91,91,91,216,216,216,224,254,253,251,24,54,98,148,177,216,54,180,58,97,169,185,158,90,77,77,115, + 158,162,174,128,109,28,240,129,171,167,231,135,31,125,244,145,205,224,193,131,193,225,112,224,221,52,160,192,111,200,230,175,25,12,98,120,94,42,91,221, + 162,169,167,40,49,45,27,0,169,172,137,88,149,167,168,54,59,155,104,175,250,29,221,179,197,190,67,135,202,120,116,137,68,130,194,194,66,20,21,21, + 65,34,145,64,169,84,2,0,78,157,58,133,51,215,146,101,21,222,227,51,234,178,243,63,125,79,177,243,212,197,54,219,191,111,15,211,197,197,5,133, + 133,133,40,46,46,134,68,34,65,69,69,5,140,70,35,202,202,202,176,115,247,30,99,169,48,52,203,156,16,178,94,77,101,174,141,163,226,166,87,72, + 107,95,250,214,91,111,217,217,219,219,195,100,50,161,188,188,28,57,57,57,200,204,204,196,181,107,215,148,69,18,45,148,206,3,159,155,19,150,214,122, + 62,255,32,254,146,154,53,242,104,121,122,120,228,61,123,246,204,213,104,52,194,203,203,203,32,41,43,219,200,5,206,219,1,249,0,104,9,240,209,151, + 95,127,61,123,212,168,81,232,220,185,115,110,65,97,97,179,218,174,37,16,194,12,4,68,42,111,239,132,187,119,239,186,231,228,228,96,198,140,25,37, + 207,158,62,93,97,142,215,146,2,189,125,91,180,216,120,240,224,65,231,230,205,155,35,56,56,184,128,159,147,211,38,165,50,63,85,109,215,103,157,247, + 166,36,245,116,179,249,99,218,118,126,247,221,119,97,48,24,112,237,218,53,196,198,198,226,217,179,103,184,121,243,166,196,94,32,152,100,174,117,88,215, + 245,57,52,64,233,247,243,207,251,8,135,195,193,238,221,187,17,23,23,7,0,8,9,9,193,172,89,179,96,48,24,48,109,218,116,122,58,197,38,163, + 190,235,147,16,210,22,192,231,168,116,242,58,83,74,249,132,144,60,0,62,141,137,201,250,75,94,75,86,77,16,66,218,121,139,197,167,15,207,158,237, + 33,98,50,137,228,214,45,104,243,242,144,32,149,194,214,213,21,78,109,219,66,170,215,211,15,99,98,242,138,85,170,225,148,210,120,75,52,29,189,197, + 167,231,31,158,237,193,17,49,201,61,201,45,20,104,243,80,250,84,10,23,190,43,130,156,218,66,39,209,211,147,139,99,242,148,133,22,107,182,23,139, + 125,78,206,158,125,208,147,201,116,32,183,110,73,144,151,167,133,84,154,0,55,55,91,4,7,59,67,173,46,167,151,46,45,123,161,82,21,13,161,148, + 38,53,164,249,123,249,39,107,254,217,48,231,204,170,235,111,45,237,171,71,177,94,139,209,122,149,154,245,212,214,125,7,209,203,101,62,230,230,29,222, + 30,201,234,213,59,180,85,228,154,8,70,151,46,93,224,227,227,131,144,144,16,228,228,228,240,196,98,113,67,245,212,20,161,67,166,100,182,107,215,78, + 188,98,197,10,209,160,65,131,216,62,62,62,160,148,34,46,46,14,209,209,209,186,29,59,118,200,84,110,35,36,15,46,31,80,88,82,79,45,22,80, + 1,88,235,157,151,247,195,130,249,243,35,58,116,236,248,214,154,53,107,24,66,91,27,246,134,213,115,248,0,176,238,223,135,68,163,198,79,197,151,254, + 64,159,41,181,215,145,171,105,103,206,243,185,207,222,24,19,230,255,193,194,217,198,137,19,39,10,236,237,237,225,227,227,3,7,7,7,100,100,100,224, + 249,243,231,244,228,201,147,138,219,15,83,217,199,206,223,123,198,23,121,88,82,151,80,30,58,120,66,214,27,111,188,225,48,115,230,76,187,78,157,58, + 177,121,60,30,120,60,30,10,11,11,145,158,158,174,59,121,242,164,66,229,58,180,252,193,229,131,114,11,107,29,86,132,78,142,76,191,126,97,205,226, + 132,199,143,167,155,128,246,58,157,206,203,104,52,18,6,131,145,111,50,153,30,235,228,242,93,154,144,53,91,173,181,14,45,195,104,52,114,140,70,35, + 36,18,9,46,92,184,192,122,250,244,233,71,143,30,61,250,40,47,47,15,122,189,30,227,198,141,67,72,72,8,46,95,190,140,226,194,194,147,245,105, + 165,0,82,222,243,231,179,230,206,157,123,118,223,190,125,140,71,143,30,57,239,222,189,123,103,109,14,204,244,233,211,77,133,57,57,179,52,128,180,46, + 189,6,238,205,146,95,15,126,243,104,244,216,241,173,215,132,127,196,238,209,163,7,156,157,157,209,187,119,111,232,116,58,113,80,80,80,67,247,166,60, + 116,200,164,140,246,237,219,11,182,110,221,234,62,123,246,108,44,92,184,16,0,80,81,81,129,243,231,207,99,241,226,197,5,57,172,174,202,134,174,207, + 170,145,42,179,3,118,21,64,40,128,12,107,224,251,63,3,74,105,60,33,100,240,176,173,91,163,231,245,232,225,212,43,32,192,193,187,103,79,180,80, + 40,144,155,151,135,99,169,169,229,209,9,9,165,114,96,44,165,52,177,49,154,159,13,219,26,29,58,175,135,83,203,94,1,14,157,189,123,66,102,84, + 224,69,78,30,18,143,164,150,199,69,37,148,82,121,163,52,31,17,66,134,108,221,58,34,186,71,143,121,78,1,1,125,29,122,245,242,132,92,238,143, + 188,188,92,36,38,30,45,75,74,138,46,3,228,99,95,117,178,172,252,163,48,151,225,169,51,237,68,125,9,75,27,172,117,120,61,246,9,106,150,249, + 168,196,35,209,208,100,230,211,183,63,220,24,204,212,203,28,216,68,109,159,150,154,74,26,170,121,88,93,79,77,20,160,112,202,252,165,203,134,117,235, + 222,251,242,203,47,195,204,41,28,108,109,109,31,87,40,149,23,93,52,154,175,84,162,128,139,141,173,205,247,28,40,4,48,223,225,193,131,175,135,143, + 26,183,137,239,232,199,94,181,126,135,154,201,96,104,211,243,138,241,165,63,32,176,96,129,164,74,11,36,72,60,12,133,78,227,83,62,94,186,244,131, + 117,107,215,118,17,10,133,125,116,6,67,128,201,100,2,76,166,52,149,82,121,149,234,116,119,53,33,225,91,248,34,15,106,113,93,66,113,144,220,49, + 235,112,151,159,118,237,90,20,21,21,245,90,223,157,52,154,175,85,226,160,24,75,250,94,179,141,26,184,133,162,162,91,117,181,37,176,214,58,180,20, + 150,201,52,207,193,193,97,111,88,88,24,127,192,128,1,24,54,108,24,122,244,232,1,147,201,4,74,41,228,114,57,14,29,58,132,77,155,54,165,53, + 3,214,54,164,167,1,46,242,206,156,25,218,190,125,251,221,245,57,48,85,78,86,131,49,137,245,223,155,188,52,131,104,100,246,228,5,27,252,181,178, + 124,177,147,173,193,61,225,201,99,134,229,247,102,160,220,24,119,168,235,184,49,99,22,48,89,172,222,85,43,32,105,82,98,226,3,115,81,105,132,204, + 186,208,200,107,201,156,187,206,26,248,254,15,130,82,154,72,8,9,218,112,227,198,84,219,91,183,6,178,40,237,105,160,20,70,224,166,6,184,0,96, + 63,165,212,210,80,142,151,52,47,110,184,49,245,138,237,173,129,148,69,123,82,3,5,49,225,166,73,253,251,52,111,220,216,48,237,214,173,175,6,82, + 202,238,70,169,209,4,24,238,0,234,11,0,14,52,86,211,202,223,134,190,53,70,175,8,80,57,202,133,70,230,249,170,179,214,161,121,212,135,197,98, + 21,153,203,124,212,5,27,8,171,26,201,66,131,181,14,171,254,207,6,228,208,104,62,129,70,243,73,117,163,26,171,11,217,175,180,111,76,167,202,129, + 20,24,52,195,81,148,8,156,152,95,169,215,101,221,242,154,125,170,235,216,151,237,228,148,169,129,235,80,40,174,67,161,216,92,107,223,89,156,178,134, + 236,124,181,239,57,128,236,247,246,253,85,205,58,79,198,111,108,255,79,230,69,73,201,49,0,66,239,83,167,220,126,61,117,106,226,7,75,150,140,243, + 240,244,108,225,236,236,236,96,103,103,199,184,115,231,78,166,65,173,254,186,3,240,83,213,104,106,131,104,128,139,129,57,57,109,38,140,25,179,128,176, + 88,189,106,58,48,212,96,184,233,7,108,171,111,36,203,76,99,239,77,31,158,71,88,213,72,22,152,22,222,155,207,43,237,88,15,131,97,61,226,95, + 207,134,242,27,238,205,117,132,16,57,128,90,239,33,43,127,95,170,28,148,61,85,219,159,93,243,167,170,205,138,21,0,149,117,14,9,33,213,69,165, + 171,168,117,213,33,173,172,115,88,235,212,33,40,165,255,181,13,192,0,171,166,85,243,239,162,137,202,160,119,251,63,187,157,86,77,171,166,85,211,170, + 249,87,212,252,187,110,214,228,107,86,172,88,8,165,212,72,169,101,37,156,172,88,177,98,197,202,63,151,154,163,91,4,192,128,218,26,209,70,172,38, + 32,132,212,170,81,31,13,233,91,53,173,154,86,77,171,166,85,211,170,105,213,252,251,105,54,164,221,24,255,227,207,74,205,96,248,90,211,59,252,129, + 47,244,151,88,82,106,213,180,106,90,53,173,154,86,77,171,166,85,243,127,171,249,87,166,230,8,150,25,179,163,101,157,58,180,98,197,138,21,0,145, + 145,132,81,153,162,50,146,1,28,102,2,19,152,149,143,127,59,19,38,144,90,147,217,46,154,230,104,247,123,116,173,88,177,242,231,130,214,147,176,180, + 206,244,14,86,254,251,16,66,154,184,187,187,111,7,64,10,10,10,230,81,74,115,254,215,54,89,121,29,39,39,167,48,131,193,0,169,84,218,96,234, + 133,191,34,109,252,201,24,202,64,80,245,19,20,57,137,105,180,214,172,218,173,3,200,12,144,255,228,226,34,38,36,37,164,211,163,150,190,22,33,132, + 49,116,128,207,54,0,56,27,147,187,128,254,23,242,106,17,66,90,186,184,184,156,99,177,88,44,163,209,56,191,176,176,240,84,93,109,39,76,152,192, + 4,0,54,189,188,210,217,177,213,138,247,223,33,108,149,102,151,68,83,161,148,50,217,204,44,30,219,253,6,152,94,103,203,21,221,107,205,203,20,21, + 21,85,103,21,239,182,1,100,104,171,214,173,71,116,12,182,201,248,252,171,46,95,246,241,115,102,103,230,62,20,126,246,189,116,187,189,99,211,17,51, + 39,57,157,98,217,146,233,59,119,150,40,234,210,248,171,179,129,16,87,19,139,213,134,201,229,122,83,189,222,141,0,70,6,155,93,168,85,169,158,171, + 129,248,79,41,149,52,86,243,83,66,28,117,64,48,155,199,243,49,26,12,110,4,160,76,22,171,80,175,209,228,114,128,248,21,255,0,77,14,143,231, + 109,52,24,220,0,224,207,104,231,63,17,66,136,7,128,97,53,159,163,13,229,209,178,179,179,187,207,96,48,188,73,141,31,116,140,170,82,10,230,231, + 106,238,35,132,192,104,52,62,47,43,43,235,212,8,195,236,1,76,4,96,94,162,190,31,192,161,223,26,112,76,8,177,231,112,56,31,10,4,130,254, + 21,21,21,109,0,192,198,198,38,65,169,84,94,210,233,116,159,255,22,93,66,8,11,192,4,161,80,216,143,193,96,244,163,149,245,142,46,43,20,138, + 75,0,162,232,111,200,175,66,8,177,113,117,117,93,223,170,85,171,41,43,87,174,44,117,114,114,10,92,188,120,241,61,23,23,151,3,37,37,37,171, + 41,165,255,211,186,140,102,8,33,45,220,221,221,247,179,217,108,102,110,110,110,63,0,240,241,241,185,172,213,106,141,69,69,69,83,41,165,79,27,169, + 39,0,208,77,40,20,118,18,10,133,161,70,163,49,200,100,50,193,100,50,37,41,20,138,107,58,157,238,62,128,59,148,82,229,127,163,63,191,5,66, + 136,157,171,171,235,62,66,8,8,33,1,148,82,249,255,218,166,63,26,202,64,80,98,66,114,160,249,113,235,54,173,234,110,76,208,164,150,182,22,59, + 90,253,251,120,140,24,57,114,32,3,0,180,250,179,35,208,200,226,215,13,65,8,105,57,118,236,216,91,251,246,237,115,208,104,52,152,55,111,222,126, + 145,72,180,77,42,149,174,172,239,56,123,161,195,226,205,91,207,219,86,214,191,134,171,201,100,116,125,241,226,105,64,226,147,91,67,18,18,110,111,168, + 72,190,116,199,68,216,111,235,208,59,217,18,59,90,183,32,195,71,77,24,51,108,237,218,53,152,50,105,74,211,132,4,181,141,151,125,6,183,172,66, + 224,239,228,226,58,114,237,186,195,228,198,245,99,35,247,237,142,188,244,214,91,206,253,255,110,206,86,36,33,12,38,139,213,199,53,36,164,203,164,99, + 199,136,173,187,59,147,193,98,49,0,192,164,211,53,145,61,123,230,181,239,141,55,186,126,66,200,229,112,224,30,181,32,134,133,16,66,214,177,88,221, + 28,90,181,10,157,116,236,24,132,62,62,44,22,143,199,0,0,131,70,227,163,200,205,245,56,56,114,100,215,72,66,174,68,80,106,81,241,103,171,230, + 31,171,249,15,103,24,173,74,241,64,95,41,44,93,167,163,197,96,48,188,95,188,120,225,42,16,8,0,84,166,129,48,26,141,48,26,141,168,250,114, + 4,165,180,250,175,193,96,64,171,86,245,124,64,87,65,42,63,201,250,3,120,179,111,223,190,227,63,255,252,115,118,112,112,176,185,100,72,239,85,171, + 86,253,155,16,114,4,149,249,76,46,90,250,139,151,16,50,88,32,16,252,188,121,243,102,251,129,3,7,178,60,61,61,65,8,65,65,65,65,183,152, + 152,152,78,139,23,47,158,79,8,153,70,41,61,215,176,90,181,102,91,59,59,187,195,99,198,140,241,238,211,167,15,63,40,40,8,38,147,9,15,31, + 62,156,125,255,254,253,201,71,142,28,137,32,132,140,167,22,214,107,35,132,16,161,80,56,211,203,203,107,125,120,120,184,227,180,105,211,184,79,158,60, + 41,247,243,243,35,55,110,220,112,57,116,232,208,252,141,27,55,78,176,179,179,91,173,80,40,246,88,242,225,99,111,111,127,159,193,96,120,3,13,59, + 194,0,44,118,134,9,33,29,154,53,107,118,232,250,245,235,205,178,179,179,141,163,71,143,222,11,0,151,46,93,10,214,235,245,100,208,160,65,103,9, + 33,19,41,165,15,45,236,123,59,71,71,199,227,83,166,76,113,108,209,162,133,109,179,102,205,136,64,32,0,147,201,132,84,42,245,76,72,72,24,112, + 231,206,157,138,152,152,152,50,66,200,72,250,74,249,140,6,180,123,184,186,186,78,103,179,217,109,13,6,131,23,0,176,88,172,23,122,189,254,73,81, + 81,209,62,74,105,157,137,92,27,194,205,205,237,155,245,235,215,59,23,21,21,209,141,27,55,126,3,96,230,111,213,250,179,179,255,64,20,238,223,139, + 5,0,142,185,198,68,205,253,132,16,18,20,0,206,251,239,47,65,167,206,93,49,117,202,132,6,53,135,13,240,217,204,230,114,156,212,106,245,45,169, + 74,19,229,230,36,158,56,101,242,240,52,0,56,251,235,149,137,93,187,58,94,22,217,242,38,240,249,252,30,122,173,174,244,116,76,238,82,75,237,37, + 132,180,244,242,242,58,231,224,224,96,91,86,86,86,80,92,92,252,221,216,177,99,215,253,244,211,79,14,153,153,153,200,205,205,197,123,239,189,39,124, + 254,252,249,2,30,143,119,91,163,209,212,57,178,37,151,151,125,181,106,197,168,112,145,200,153,41,176,181,135,157,200,17,126,45,218,163,91,143,17,24, + 58,236,45,164,167,197,117,251,105,247,218,184,23,47,98,62,21,58,54,95,39,145,52,171,243,115,169,77,32,233,99,118,178,194,195,215,32,53,57,89, + 158,157,197,248,215,233,99,44,219,161,97,173,120,6,109,65,246,141,235,199,154,245,234,61,26,0,58,237,219,29,121,105,209,52,199,176,175,127,46,251, + 91,56,241,19,8,97,182,99,179,223,26,249,211,79,226,160,73,147,56,146,132,4,109,234,129,3,154,130,152,24,35,95,44,54,121,188,241,6,211,45, + 44,140,183,40,45,141,115,109,253,250,208,245,235,214,53,7,112,160,62,77,66,8,89,203,102,207,28,188,117,171,107,200,252,249,28,69,86,150,46,227, + 251,239,85,133,215,174,25,89,60,30,245,25,50,132,184,244,235,199,159,159,148,196,185,185,113,99,232,6,46,215,111,149,86,251,179,85,243,255,79,211, + 10,78,147,26,133,165,1,11,70,180,8,33,16,8,4,56,120,240,32,216,108,54,88,44,22,216,108,118,157,255,55,105,242,90,101,143,218,52,199,186, + 187,187,255,123,219,182,109,110,131,7,15,6,159,207,175,222,199,100,50,49,112,224,64,12,24,48,128,157,151,151,55,249,224,193,131,147,55,108,216,80, + 72,8,89,72,41,141,110,64,183,95,96,96,96,244,249,243,231,109,212,106,53,174,93,187,134,242,242,114,112,185,92,120,123,123,99,208,160,65,172,228, + 228,100,199,129,3,7,70,19,66,134,83,74,47,91,96,107,39,23,23,151,171,71,142,28,225,183,107,215,142,164,167,167,35,36,36,4,0,32,149,74, + 49,122,244,104,254,180,105,211,90,76,154,52,233,14,169,44,52,121,191,1,189,142,238,238,238,123,198,140,25,227,185,97,195,6,123,59,59,59,100,103, + 103,231,187,187,187,7,152,207,247,228,201,147,185,35,70,140,240,216,180,105,211,87,135,15,31,94,74,8,153,73,41,125,80,159,174,217,33,182,181,181, + 69,97,97,33,246,239,223,143,5,11,22,128,201,100,162,168,168,8,135,14,29,194,191,254,245,47,179,67,99,145,51,44,16,8,6,180,111,223,126,231, + 165,75,151,188,197,98,49,60,61,61,25,31,127,252,113,91,63,63,63,155,166,77,155,50,243,243,243,17,29,29,237,55,125,250,244,227,124,62,127,182, + 90,173,110,112,74,205,205,205,109,215,233,211,167,155,36,36,36,224,251,239,191,71,89,89,25,184,92,46,196,98,49,220,221,221,17,16,16,64,86,172, + 88,97,59,98,196,8,219,133,11,23,238,2,208,161,33,77,66,72,123,87,87,215,237,147,39,79,246,139,140,140,20,187,187,187,195,252,195,64,42,149, + 122,103,103,103,119,11,15,15,31,239,230,230,150,89,84,84,244,54,165,244,81,131,157,127,89,191,67,88,88,216,240,209,163,71,51,243,243,243,177,111, + 223,190,225,132,144,14,150,58,151,127,53,238,223,139,197,188,119,223,83,120,250,248,112,206,159,219,57,86,34,105,125,79,108,83,89,144,90,82,1,93, + 255,62,204,206,131,6,191,197,121,99,216,104,197,15,223,126,37,180,196,209,98,115,57,78,251,127,254,34,231,250,141,251,109,47,196,196,14,25,59,114, + 36,229,112,196,126,0,176,116,241,251,236,232,19,39,118,15,28,208,53,175,119,175,78,57,83,167,45,105,248,67,164,10,66,72,203,150,45,91,94,137, + 139,139,115,227,241,120,40,43,43,115,250,225,135,31,190,232,213,171,23,35,35,35,3,201,201,201,200,202,202,130,84,42,197,192,129,3,133,15,30,60, + 248,14,64,157,142,150,142,209,127,189,103,83,253,215,78,54,130,102,58,163,204,149,234,243,91,95,56,125,161,221,47,251,42,66,220,60,90,5,188,57, + 43,2,107,215,29,97,31,216,255,89,248,197,152,95,0,70,179,186,43,2,80,244,88,181,122,37,100,114,13,166,77,153,139,233,83,230,58,81,104,61, + 168,81,45,208,86,148,139,237,56,73,167,182,237,248,98,12,0,239,26,206,214,197,191,139,179,213,154,197,234,51,250,192,1,81,224,168,81,220,216,133, + 11,21,170,236,108,85,203,17,35,202,125,195,195,181,76,163,17,146,204,76,206,211,136,8,129,67,239,222,252,208,149,43,29,52,197,197,94,145,132,116, + 136,168,231,190,90,203,98,117,29,254,239,127,187,180,157,51,135,247,40,50,82,89,114,237,90,133,255,27,111,148,135,188,243,142,6,0,228,89,89,156, + 212,136,8,91,151,208,80,155,238,31,126,232,96,212,106,221,63,33,164,203,199,148,222,109,172,102,147,137,19,141,225,187,119,119,190,182,100,73,95,162, + 215,51,135,116,239,254,112,227,190,125,47,126,143,230,31,105,103,222,213,171,154,50,63,63,132,140,30,93,218,196,213,85,243,71,246,253,247,216,249,79, + 135,82,154,15,224,135,218,246,17,74,41,78,159,62,221,7,149,213,168,35,135,13,27,182,6,0,196,98,113,161,68,34,113,141,142,142,110,208,201,98, + 179,217,240,240,240,64,64,64,64,81,97,97,161,91,93,134,16,66,114,77,38,147,55,165,180,122,244,165,46,52,26,13,210,210,210,208,174,93,187,231, + 148,82,159,122,52,237,108,109,109,51,146,147,147,157,19,19,19,113,255,254,125,248,249,249,193,193,193,1,108,54,27,122,189,30,50,153,12,129,129,129, + 224,241,120,232,216,177,99,137,82,169,244,171,111,10,136,16,194,19,8,4,105,87,175,94,245,9,9,9,193,221,187,119,225,227,227,3,119,119,119,0, + 64,86,86,22,110,220,184,129,55,222,120,3,113,113,113,24,55,110,92,174,82,169,12,160,148,106,234,210,116,114,114,202,191,116,233,210,243,224,224,96, + 181,82,169,100,20,22,22,178,175,93,187,102,144,203,229,66,169,84,202,150,72,36,108,153,76,198,82,42,149,108,6,131,193,169,168,168,96,95,188,120, + 145,169,213,106,237,235,59,79,230,247,233,196,137,19,8,14,14,70,116,116,52,62,248,224,3,220,188,121,19,62,62,62,136,138,138,194,135,31,126,136, + 148,148,20,56,59,59,163,117,235,214,245,190,71,0,224,239,239,159,254,248,241,227,22,28,14,199,92,215,209,92,47,15,197,197,197,120,250,244,41,94, + 188,120,1,127,127,127,76,153,50,229,233,243,231,207,253,235,211,3,0,111,111,239,226,132,132,4,231,118,237,218,161,176,176,16,98,177,24,34,145,8, + 98,177,184,250,127,63,63,63,44,89,178,4,238,238,238,69,21,21,21,245,218,72,8,233,16,28,28,124,238,226,197,139,206,246,246,246,40,40,40,128, + 76,38,3,139,197,130,173,173,45,156,157,157,171,29,249,180,180,52,12,27,54,172,36,35,35,99,112,35,70,224,24,110,110,110,201,241,241,241,1,148, + 82,228,228,228,32,37,37,5,239,190,251,110,154,90,173,110,245,223,136,45,250,95,81,35,238,138,51,115,214,60,206,152,81,61,180,73,9,167,8,207, + 148,130,14,109,237,165,0,240,240,137,76,164,97,4,34,168,205,112,122,244,248,45,238,158,159,126,96,195,4,55,16,164,36,166,210,79,234,210,30,220, + 223,115,206,251,239,207,110,219,183,87,31,134,92,169,116,253,238,187,173,29,51,50,146,92,1,192,207,47,168,104,254,252,197,15,236,4,130,162,43,55, + 174,154,190,252,114,215,147,115,151,242,118,52,100,47,33,196,47,32,32,224,246,201,147,39,157,93,92,92,32,18,137,160,84,42,161,211,233,144,152,152, + 168,62,120,240,160,222,222,222,222,174,160,160,0,18,137,4,132,16,156,56,113,34,135,82,234,251,170,150,57,70,11,0,222,29,26,196,110,221,63,192, + 129,195,51,216,216,176,83,61,64,140,60,66,133,110,103,207,61,108,119,246,194,221,169,99,198,126,224,210,187,207,24,132,127,52,94,159,151,151,19,162, + 67,239,228,218,98,180,130,2,72,255,209,227,198,76,88,187,118,13,214,132,71,226,212,137,99,82,161,128,161,177,23,179,69,161,255,199,222,121,199,55, + 85,189,127,252,115,178,87,247,222,5,10,180,133,182,172,178,65,70,217,101,137,128,40,42,200,20,17,5,17,65,16,4,7,202,144,37,50,101,131,200, + 198,50,203,22,65,100,211,22,218,50,58,73,155,238,36,109,246,205,61,191,63,218,212,82,211,54,69,253,126,229,251,203,251,245,202,171,201,205,185,159, + 156,115,115,155,251,220,231,60,231,121,58,116,214,205,120,119,72,86,105,169,60,112,209,146,189,175,197,14,153,17,208,165,235,80,92,254,229,48,118,110, + 93,120,131,72,232,11,61,141,184,144,16,111,255,232,232,177,227,174,95,23,92,155,50,165,84,204,231,23,68,77,152,96,181,122,64,78,124,188,76,208, + 176,161,147,115,207,158,110,43,26,53,162,218,130,130,239,23,88,249,93,94,72,136,171,75,72,200,164,105,169,169,130,59,159,125,86,202,200,229,197,209, + 211,167,23,88,211,204,142,143,151,9,253,252,156,92,7,15,118,91,21,28,76,77,121,121,27,172,197,24,89,211,60,227,224,224,242,227,137,19,49,148, + 207,239,54,235,227,143,37,3,7,14,132,74,165,194,129,3,7,176,97,253,122,189,175,175,239,61,191,132,132,91,145,42,213,60,91,53,163,167,79,47, + 48,155,205,100,196,204,153,189,19,211,210,122,230,230,229,53,0,0,95,55,183,172,232,144,144,27,91,226,226,146,215,52,108,200,218,218,207,77,39,79, + 122,239,79,79,31,239,230,230,38,81,228,229,241,68,66,97,97,135,230,205,247,125,63,119,238,5,230,238,93,129,56,32,192,201,121,224,192,122,143,61, + 122,250,244,130,34,181,154,55,237,139,47,58,103,40,20,13,74,245,250,38,37,106,181,143,217,100,226,56,73,165,133,141,194,194,242,180,151,46,229,52, + 210,104,222,223,68,105,141,149,85,254,42,214,108,145,255,5,44,30,173,11,177,177,177,127,90,93,67,41,181,201,155,197,231,243,159,153,166,170,5,1, + 33,4,55,111,222,132,187,187,59,124,124,124,32,18,61,91,124,48,63,63,31,191,254,250,43,238,223,191,143,150,45,91,2,40,191,163,174,9,145,72, + 244,193,146,37,75,92,12,6,3,110,220,184,129,232,232,104,136,68,34,8,4,130,103,140,192,188,188,60,68,68,68,96,214,172,89,206,95,125,245,213, + 7,168,165,70,29,143,199,155,58,97,194,4,47,139,7,43,43,43,11,109,218,180,169,124,223,211,211,19,183,111,223,70,116,116,52,2,2,2,48,124, + 248,112,175,157,59,119,78,5,176,172,38,77,161,80,200,137,138,138,106,11,0,50,153,12,28,14,39,197,201,201,201,211,219,219,91,230,228,228,244,167, + 49,110,221,186,181,132,195,225,152,106,27,59,80,62,93,152,155,155,139,200,200,72,40,149,229,21,92,202,202,202,208,164,73,19,168,84,229,33,105,122, + 189,30,126,126,126,208,106,107,15,253,106,217,178,229,103,225,225,225,125,186,119,239,46,226,243,249,184,115,231,14,90,183,110,141,189,123,247,34,40,40, + 8,82,169,20,169,169,169,136,138,138,194,197,139,23,225,233,233,137,136,136,8,81,155,54,109,126,41,42,42,58,159,158,158,254,89,45,253,228,56,56, + 56,224,226,197,139,216,178,101,11,210,210,210,32,151,203,225,232,232,136,86,173,90,161,121,243,230,232,212,169,19,82,83,83,65,234,56,153,8,33,62, + 77,155,54,141,251,253,247,223,61,40,165,216,185,115,39,74,75,75,97,48,24,192,225,112,32,22,139,225,234,234,138,158,61,123,194,211,211,19,77,155, + 54,197,79,63,253,228,209,191,127,255,227,21,30,169,220,186,142,171,171,171,235,251,11,22,44,8,244,242,242,66,122,122,58,148,74,37,188,189,189,209, + 189,123,119,255,51,103,206,188,15,96,69,93,26,47,10,150,192,119,66,8,57,125,234,135,97,77,27,21,71,181,12,147,6,30,140,243,14,220,27,151, + 23,1,0,164,219,124,119,0,0,32,0,73,68,65,84,145,205,188,19,135,13,148,102,221,73,140,203,58,125,234,240,141,251,41,56,104,203,212,182,82, + 163,223,23,127,230,90,191,214,45,219,176,75,190,153,25,251,238,148,241,34,47,239,113,80,100,30,198,153,115,55,131,102,126,56,193,115,217,242,77,39, + 226,207,92,227,40,53,250,121,182,244,55,52,52,104,205,182,181,157,60,84,249,251,144,122,95,8,137,99,20,26,55,14,133,82,169,132,88,44,22,191, + 246,218,107,230,57,115,230,104,156,156,156,164,132,16,156,63,127,62,15,64,223,186,116,117,94,174,212,108,52,49,84,200,101,41,113,212,18,115,145,48, + 33,233,9,250,244,234,161,232,210,62,242,171,57,139,150,127,210,52,180,181,231,219,227,23,242,191,248,236,245,245,32,232,106,77,231,126,42,61,215,188, + 49,145,0,136,93,244,249,103,120,252,56,213,117,226,152,146,133,60,145,196,47,60,184,179,227,250,45,231,251,53,105,210,176,193,140,169,195,143,125,251, + 221,183,177,168,226,217,218,182,117,193,17,66,72,140,45,199,246,223,8,95,40,140,26,113,240,32,41,185,119,207,160,121,252,88,211,254,219,111,139,13, + 90,45,185,179,97,131,187,226,230,77,39,137,163,163,169,65,175,94,37,141,95,126,89,237,219,187,119,89,246,209,163,28,167,118,237,68,189,191,248,130, + 127,112,210,164,102,0,126,179,34,219,226,141,184,56,148,102,102,154,138,126,249,69,23,243,221,119,5,129,125,251,174,48,24,141,30,150,159,10,14,33, + 32,150,208,9,150,37,188,89,179,56,148,199,131,201,213,117,204,108,32,180,46,205,15,115,114,134,189,62,126,124,236,145,147,39,209,176,97,195,202,235, + 153,139,139,11,102,206,156,137,233,211,167,139,110,223,190,221,110,255,254,253,237,150,45,93,234,61,27,24,102,75,63,79,255,246,155,235,228,69,139,230, + 182,140,142,14,218,177,123,183,168,113,227,198,0,128,71,143,30,53,253,230,235,175,131,35,163,162,20,95,125,240,193,182,196,57,115,34,0,252,82,155, + 102,238,165,75,134,253,233,233,227,207,157,63,239,18,25,25,9,0,72,78,78,246,90,181,106,213,132,136,225,195,71,47,122,231,157,121,3,117,186,18, + 167,252,124,209,192,53,107,120,63,142,24,81,167,166,165,159,0,208,253,237,183,63,232,218,163,71,243,97,227,199,187,5,5,5,17,7,7,7,24,141, + 70,200,229,114,215,196,196,196,198,113,106,181,234,208,111,191,237,220,84,81,44,254,31,194,170,45,242,162,99,49,180,186,31,59,118,140,2,232,30,27, + 27,123,17,40,191,128,155,205,102,155,140,44,30,143,135,138,96,97,155,62,148,82,138,130,130,2,20,20,20,84,78,29,229,229,229,225,220,185,115,72, + 77,77,5,159,207,135,64,32,128,209,88,119,13,90,153,76,214,171,87,175,94,188,223,126,251,13,33,33,33,144,72,36,149,253,178,60,4,2,1,124, + 125,125,161,82,169,16,19,19,195,95,189,122,117,47,212,98,104,57,59,59,15,24,57,114,164,208,242,186,180,180,20,92,110,249,141,175,94,175,71,105, + 105,41,138,138,138,80,82,82,2,157,78,135,142,29,59,10,227,226,226,6,160,22,67,171,42,26,141,166,52,47,47,207,165,107,215,174,174,219,182,109, + 75,238,216,177,99,88,213,247,47,92,184,160,211,233,116,124,14,135,99,83,29,189,93,187,118,85,30,251,167,79,159,98,253,250,245,149,239,165,166,166, + 98,245,234,213,149,165,0,106,251,142,194,195,195,251,239,220,185,51,122,199,142,29,197,92,46,23,201,201,201,216,189,123,55,40,165,240,244,244,132,70, + 163,129,66,161,192,249,243,231,193,48,12,28,28,28,224,239,239,47,158,58,117,106,151,133,11,23,242,1,124,86,147,182,217,108,54,115,185,92,4,7, + 7,99,254,252,249,208,233,116,16,8,202,237,75,149,74,133,146,146,18,220,186,117,11,233,233,233,168,235,34,35,22,139,135,239,216,177,195,75,40,20, + 66,171,213,66,173,86,35,43,43,11,25,25,25,186,188,188,60,198,209,209,145,19,28,28,204,17,137,68,162,161,67,135,18,139,193,57,112,224,64,247, + 157,59,119,190,138,58,140,36,66,136,103,179,102,205,62,153,48,97,66,229,220,54,165,20,185,185,185,24,54,108,152,244,202,149,43,115,8,33,187,41, + 165,249,181,233,188,104,80,74,105,73,73,243,235,55,206,36,71,29,140,243,14,204,200,54,119,158,249,209,114,30,0,108,220,176,184,243,193,184,167,191, + 134,55,84,100,237,63,20,122,221,197,37,169,214,239,136,16,194,233,217,205,119,144,183,187,203,200,97,131,7,211,117,235,86,180,121,119,202,120,81,112, + 232,76,0,128,63,223,11,49,204,231,68,163,125,36,94,183,110,69,155,97,131,95,185,149,150,150,190,33,166,187,223,79,231,46,230,252,92,155,199,208, + 203,93,236,47,21,151,193,63,164,57,194,154,201,112,251,206,3,28,216,119,21,97,205,218,193,96,48,128,97,24,217,160,65,131,52,123,247,238,213,165, + 164,164,168,181,90,109,55,74,105,74,93,227,207,206,78,98,195,124,58,24,5,18,17,163,86,10,52,179,231,237,31,209,166,125,159,104,87,95,127,190, + 167,140,253,185,127,239,118,187,183,108,158,63,125,222,130,221,104,219,174,79,199,251,201,191,52,7,112,207,154,86,210,35,26,23,217,148,48,143,31,62, + 140,205,72,79,207,14,245,246,49,60,42,161,166,247,103,111,234,221,181,219,240,22,141,155,189,36,188,159,116,145,204,159,245,234,158,69,75,190,125,13, + 21,198,214,217,248,61,221,198,140,185,42,4,80,163,119,252,223,12,225,114,3,165,62,62,220,196,109,219,244,141,99,99,75,0,224,206,134,13,238,202, + 135,15,37,237,102,204,120,74,76,38,242,52,62,222,73,238,225,193,248,117,233,162,117,14,11,211,235,211,210,52,222,45,90,56,10,197,98,127,107,154, + 2,145,40,192,33,56,152,151,182,109,155,54,100,208,160,98,0,48,24,141,30,105,233,233,206,82,169,20,148,82,152,76,166,103,98,136,45,113,195,145, + 97,97,86,61,227,213,53,211,62,253,180,197,172,89,179,144,155,155,11,134,97,192,231,243,159,105,175,209,104,80,86,86,134,49,99,198,96,205,210,165, + 29,108,209,52,155,205,100,242,162,69,115,63,158,59,183,241,164,73,147,56,85,127,123,221,220,220,176,255,192,1,225,218,181,107,3,62,89,179,102,204, + 235,34,209,227,186,52,11,154,52,129,155,66,33,177,24,89,0,16,22,22,134,245,235,215,139,198,141,27,39,28,52,104,208,242,219,45,91,174,90,209, + 165,203,67,247,208,80,39,161,72,20,96,235,241,4,0,181,78,23,185,98,213,42,215,107,215,174,65,161,80,32,55,183,252,126,148,16,130,182,109,219, + 146,55,222,120,195,185,81,96,96,59,107,154,127,35,127,178,69,94,20,172,5,193,91,224,1,64,197,128,72,197,0,43,207,6,179,217,252,140,193,82, + 151,161,245,60,148,148,148,160,164,164,4,155,55,111,134,64,32,168,188,248,2,128,193,96,168,115,127,141,70,19,229,231,231,7,165,82,137,208,208,208, + 103,60,89,2,129,0,60,30,15,2,129,0,34,145,8,122,189,30,65,65,65,208,104,52,81,181,105,106,181,218,86,110,110,110,0,202,47,176,122,125, + 249,111,158,94,175,175,236,175,193,96,64,113,113,49,74,75,75,161,86,171,81,86,86,214,218,150,241,178,44,139,132,132,132,71,97,97,97,173,184,92, + 46,28,28,28,100,101,101,101,149,177,69,69,69,69,216,190,125,123,217,155,111,190,233,113,244,232,209,58,13,45,66,8,222,123,239,61,136,68,34,104, + 52,26,172,91,183,14,211,166,77,131,64,32,128,90,173,198,250,245,235,49,99,198,12,240,120,60,24,12,6,172,90,181,170,70,173,164,164,164,180,223, + 126,251,173,117,155,54,109,92,15,29,58,148,223,187,119,111,207,190,125,251,66,34,145,64,171,213,194,100,50,161,67,135,14,8,15,15,71,94,94,30, + 78,156,56,81,208,180,105,83,143,107,215,174,177,185,185,185,25,181,245,179,170,241,196,227,241,96,54,155,161,80,40,80,82,82,130,252,252,124,200,229, + 114,100,103,103,131,199,227,161,174,155,121,119,119,247,87,34,35,35,185,0,32,145,72,208,170,85,43,204,157,59,151,209,106,181,35,1,156,168,104,214, + 127,211,166,77,135,46,95,190,204,243,243,243,195,131,7,15,224,233,233,201,19,139,197,117,26,90,62,62,62,91,127,254,249,103,55,139,113,109,57,206, + 26,77,249,215,49,108,216,48,183,29,59,118,108,5,48,160,214,142,190,128,184,72,32,104,21,233,164,220,27,151,23,49,243,163,229,188,240,200,242,155, + 215,137,147,192,91,182,244,195,136,209,67,156,142,185,72,84,181,122,153,1,160,127,175,192,181,131,7,247,230,188,54,106,96,170,64,224,18,178,97,227, + 66,47,47,239,113,127,52,224,56,193,221,195,9,33,193,66,178,255,216,125,175,217,115,62,215,239,218,241,237,227,61,63,198,245,19,242,227,251,0,120, + 167,38,237,148,71,37,71,53,122,113,51,85,225,93,226,230,221,25,173,90,134,195,203,179,8,155,182,254,132,134,141,218,66,175,215,195,201,201,73,106, + 54,155,141,92,46,119,151,45,70,22,0,156,61,91,194,70,68,148,24,184,106,150,121,119,218,178,151,123,247,31,220,188,103,207,94,236,233,248,211,198, + 206,173,141,57,253,251,182,82,156,140,95,155,154,35,127,210,52,34,170,11,146,18,207,247,3,72,2,96,253,132,77,72,165,39,27,55,38,231,247,238, + 157,200,106,217,91,146,47,190,188,215,63,54,246,173,200,151,186,190,196,198,159,57,103,16,162,224,190,83,151,78,79,223,29,223,255,208,15,187,86,245, + 57,121,98,107,19,165,42,35,110,235,214,154,67,16,94,0,60,56,60,30,167,240,242,101,115,227,57,115,244,0,144,119,243,166,99,219,143,62,146,251, + 180,104,161,7,0,142,72,68,213,247,238,137,209,165,139,86,224,233,201,48,197,197,90,89,84,148,3,88,214,199,154,160,153,97,188,121,34,17,39,255, + 252,121,38,106,220,56,61,80,254,255,40,149,74,113,228,200,17,8,133,194,202,135,64,32,168,124,238,237,237,109,89,124,101,147,38,0,228,228,228,32, + 55,55,23,206,206,206,240,244,244,68,110,110,46,174,92,185,130,148,148,20,240,249,124,244,235,215,15,156,26,98,155,171,107,142,152,57,179,119,179,168, + 168,160,234,70,22,0,24,141,70,20,21,21,97,200,144,33,156,19,39,78,248,156,204,204,28,252,41,240,167,96,243,170,154,173,99,99,11,21,251,247, + 91,253,236,54,109,218,144,95,127,253,85,212,175,111,223,233,31,126,249,229,218,53,59,118,100,153,25,198,230,227,9,148,207,58,16,66,16,24,24,136, + 162,162,34,148,150,150,207,96,59,56,56,192,213,213,21,38,147,9,44,165,124,107,154,127,23,53,217,34,47,10,213,147,150,62,19,12,95,49,40,0, + 232,94,101,7,176,44,107,147,145,197,231,243,235,140,185,170,11,107,23,87,91,12,45,75,95,197,98,113,229,63,90,85,3,203,210,79,14,135,131,170, + 23,206,218,96,89,150,171,86,171,113,224,192,1,116,235,214,173,114,90,74,169,84,162,164,164,4,74,165,18,58,157,14,105,105,105,56,123,246,44,154, + 52,105,2,216,152,252,245,241,227,199,55,26,54,108,24,109,233,75,143,30,61,2,182,109,219,38,31,48,96,128,31,165,20,243,230,205,43,232,208,161, + 131,135,173,125,5,202,23,18,92,185,114,5,77,154,52,1,165,20,2,129,0,201,201,201,240,242,242,2,203,178,224,241,120,200,207,207,135,163,99,237, + 57,18,19,18,18,198,190,253,246,219,114,103,103,231,22,133,133,133,57,34,145,168,235,165,75,151,2,141,70,35,156,156,156,224,228,228,132,227,199,143, + 195,197,197,5,31,124,240,65,166,86,171,189,34,147,201,188,181,90,237,221,220,220,92,155,166,125,44,48,12,131,178,178,50,20,23,23,163,168,168,8, + 42,149,10,58,157,174,206,62,90,163,107,215,174,136,139,139,227,46,94,188,248,135,199,143,203,111,12,67,66,66,240,193,7,31,112,253,253,253,145,150, + 150,134,27,55,110,192,104,52,130,82,90,235,63,47,159,207,239,241,225,135,31,118,9,10,10,34,70,163,17,44,203,66,175,215,195,242,60,51,51,19, + 205,154,53,227,4,7,7,119,36,132,244,176,101,97,133,157,114,20,153,135,225,207,247,2,56,78,160,218,195,40,44,120,190,178,145,121,121,121,95,206, + 250,244,215,113,107,150,24,189,179,115,128,176,200,161,104,218,60,6,99,223,48,99,241,210,3,8,12,10,69,70,70,6,122,244,232,33,144,203,229,111, + 3,152,105,171,118,124,252,111,230,211,199,79,12,31,241,234,91,209,189,122,13,96,78,157,58,142,132,187,167,18,223,126,245,149,60,202,150,18,55,23, + 201,173,228,7,215,155,182,104,213,29,6,198,220,21,248,108,9,128,26,239,12,30,61,162,134,133,11,23,114,142,29,222,250,198,107,163,199,180,140,137, + 233,99,58,21,255,51,110,92,141,191,179,124,201,132,139,139,87,253,212,163,119,191,97,17,158,222,87,142,71,134,234,199,7,186,59,215,43,101,202,191, + 13,66,8,5,0,129,84,202,162,226,55,76,230,232,200,112,249,252,202,99,36,16,10,89,137,139,11,3,148,223,116,177,18,9,107,54,153,204,117,93, + 85,121,98,113,165,38,135,16,80,74,159,49,178,170,27,90,28,14,167,78,7,64,85,77,11,148,210,202,27,234,13,27,54,64,36,18,65,40,20,130, + 207,231,215,25,126,81,85,51,49,45,173,231,246,93,187,68,214,140,172,194,194,66,20,22,22,162,180,180,20,163,70,141,18,44,188,126,189,77,13,114, + 149,154,65,190,190,122,153,68,162,72,74,74,242,107,222,188,249,51,253,85,169,84,144,72,36,216,181,123,183,96,96,108,236,148,152,227,199,151,3,168, + 53,255,149,181,177,19,66,224,229,229,5,87,87,87,16,66,192,48,12,114,115,115,145,152,152,136,235,215,175,131,75,72,189,211,25,213,7,107,182,200, + 139,68,93,30,45,171,103,99,125,12,45,46,151,251,220,94,173,154,176,101,234,80,42,149,222,203,201,201,233,236,239,239,15,134,97,42,13,173,234,83, + 135,64,185,247,227,246,237,219,144,74,165,86,221,253,85,53,41,165,29,219,181,107,135,131,7,15,226,252,249,243,120,242,228,9,52,26,13,244,122,61, + 180,90,45,18,19,19,193,178,44,34,35,35,33,147,201,234,212,4,128,178,178,178,28,62,159,31,38,145,72,42,183,249,250,250,162,176,176,144,53,153, + 76,216,190,125,187,202,199,199,71,38,145,72,108,54,92,9,33,200,203,203,67,64,64,64,101,140,150,90,173,134,151,151,151,197,176,128,94,175,135,163, + 163,99,157,83,135,148,82,29,128,15,171,104,183,29,49,98,196,158,189,123,247,54,58,115,230,12,174,93,187,6,79,79,79,124,245,213,87,79,210,211, + 211,95,163,148,94,183,169,147,245,192,150,115,168,176,176,240,192,189,123,247,58,182,107,215,174,242,87,162,71,143,30,164,71,143,30,30,150,215,26,141, + 6,249,249,249,248,253,247,223,113,230,204,25,16,66,144,154,154,106,214,106,181,53,46,35,39,132,8,130,131,131,183,205,157,59,215,129,97,152,202,115, + 91,34,145,64,44,22,67,32,16,128,203,229,34,61,61,29,67,134,12,113,254,238,187,239,182,18,66,26,83,74,235,62,81,95,16,74,180,48,222,78, + 80,57,71,54,243,78,220,184,97,113,231,137,147,96,153,58,100,34,155,121,37,222,78,80,56,71,123,193,232,34,172,93,231,196,153,172,119,13,166,19, + 131,78,156,188,48,242,163,233,31,240,67,66,154,229,157,57,119,51,40,134,249,156,184,123,56,161,176,64,133,244,76,5,30,103,24,104,72,72,179,188, + 27,191,223,19,45,93,177,178,105,153,70,247,211,185,139,57,63,215,166,77,41,213,17,66,134,46,95,45,186,248,214,219,109,133,18,169,31,138,10,238, + 33,40,200,19,67,6,182,192,150,29,87,224,236,236,6,111,111,111,112,56,28,153,173,99,47,40,40,32,7,126,252,101,220,155,99,38,116,232,219,39, + 150,57,121,234,24,239,252,233,163,87,182,110,252,228,16,229,150,73,9,85,75,26,52,244,185,251,232,225,237,215,122,246,26,5,137,192,177,9,16,110, + 245,132,173,92,96,64,145,201,225,64,252,230,152,137,157,250,246,29,204,156,58,117,24,167,142,239,248,109,193,130,6,199,159,60,221,45,184,122,61,91, + 60,116,248,59,197,113,39,238,27,94,25,212,48,197,79,214,234,95,145,67,239,121,161,148,230,179,12,227,27,208,167,15,81,63,121,34,144,184,186,234, + 26,244,234,85,146,23,31,239,40,224,243,85,92,0,218,71,143,132,206,173,91,235,0,128,49,26,9,215,199,135,155,115,247,46,37,28,142,194,154,38, + 151,199,83,48,122,125,96,64,223,190,92,77,70,6,223,193,219,155,1,0,147,201,84,167,161,5,192,234,20,116,117,77,91,199,167,209,104,192,2,86, + 141,141,234,154,185,121,121,13,42,110,194,43,49,153,76,149,70,86,97,97,33,74,74,74,32,147,201,144,175,215,91,157,226,172,174,217,167,125,251,237, + 11,63,251,108,230,254,3,7,4,192,31,70,150,229,193,231,243,241,205,146,37,130,105,31,125,244,206,20,30,239,253,250,28,79,160,252,166,157,203,229, + 130,199,227,33,35,35,3,153,153,153,200,200,200,64,70,70,6,36,18,9,104,13,199,243,239,226,69,142,207,170,201,200,2,234,72,239,80,159,96,120, + 91,13,3,179,185,198,68,202,127,194,22,67,171,172,172,236,76,124,124,124,251,151,95,126,153,247,219,111,191,193,199,199,167,210,208,178,252,181,76,71, + 73,165,82,28,58,116,200,88,86,86,86,107,125,38,141,70,115,246,248,241,227,209,243,231,207,231,143,29,59,22,73,73,73,152,52,105,18,74,74,74, + 160,82,169,80,88,88,8,141,70,131,246,237,219,67,44,22,227,238,221,187,38,141,70,83,107,138,3,74,41,205,203,203,43,245,244,244,244,173,254,222, + 240,225,195,189,191,255,254,123,205,131,7,15,76,157,59,119,118,2,108,51,56,44,252,248,227,143,149,30,193,148,148,20,124,255,253,247,149,49,89,55, + 111,222,196,178,101,203,42,115,159,213,7,74,233,245,136,136,8,198,100,50,161,73,147,38,240,247,247,135,78,167,195,202,149,43,153,127,194,200,178,21, + 157,78,183,255,173,183,222,250,248,214,173,91,190,60,30,175,220,165,93,49,62,163,209,136,135,15,31,34,49,49,17,15,30,60,64,81,81,81,229,141, + 192,237,219,183,139,77,38,211,79,53,233,122,122,122,206,219,178,101,139,143,84,42,125,230,124,182,120,67,45,94,210,252,252,124,184,184,184,32,38,38, + 198,235,236,217,179,243,0,204,255,79,140,251,159,134,16,66,122,118,227,182,157,246,238,80,12,27,40,205,58,24,247,244,215,101,75,63,172,8,134,247, + 74,28,54,208,63,235,78,178,11,134,191,124,184,237,185,139,36,187,182,88,186,138,24,171,35,237,219,187,157,63,120,244,232,214,57,179,166,223,156,249, + 225,4,79,141,246,145,56,36,88,72,0,224,113,134,129,222,77,98,117,203,150,79,191,185,120,201,119,28,69,97,201,164,107,215,106,78,111,80,213,120, + 137,8,133,56,36,188,155,188,105,104,151,134,191,253,186,11,14,82,45,194,194,219,162,111,159,142,56,119,225,22,20,249,58,228,228,228,64,175,215,215, + 154,46,225,193,221,67,111,80,66,131,8,37,153,132,67,197,111,188,53,190,107,108,236,96,26,23,119,148,57,124,104,215,229,159,118,174,222,207,17,240, + 121,90,131,179,129,16,157,18,156,132,164,210,178,242,27,26,190,72,80,179,251,181,34,177,107,243,136,112,159,55,222,154,228,60,160,255,16,122,252,248, + 97,246,167,189,219,207,255,180,57,106,23,203,81,9,210,82,53,34,101,137,73,73,137,208,165,84,197,106,20,143,27,235,252,98,135,191,208,70,187,217, + 104,204,46,149,203,189,188,250,246,21,167,45,93,42,241,142,142,214,53,124,249,101,181,226,242,101,73,241,141,27,18,169,171,43,227,220,186,181,78,226, + 231,87,126,113,55,155,33,112,117,229,63,185,112,129,99,212,233,158,90,211,52,234,245,217,165,89,89,190,110,221,186,137,30,126,246,153,212,187,125,123, + 29,169,136,33,174,205,208,226,114,185,0,135,99,245,71,175,186,166,173,227,211,106,181,96,1,171,139,148,234,210,100,24,230,25,35,203,98,104,85,96, + 83,63,55,46,88,240,91,80,223,190,69,23,46,92,240,238,222,189,59,81,171,213,80,171,213,207,24,91,126,126,126,164,121,100,164,244,199,243,231,67, + 172,253,48,89,59,158,182,140,157,195,225,252,227,134,214,139,76,245,105,67,192,134,60,90,192,31,30,45,91,12,45,27,61,90,38,147,201,4,47,47, + 47,20,20,20,212,120,225,231,112,56,144,72,36,150,57,226,90,87,222,233,245,250,149,31,125,244,209,212,1,3,6,120,132,133,133,33,63,63,31,222, + 222,222,16,139,197,149,177,99,22,189,155,55,111,98,203,150,45,42,189,94,191,178,14,205,21,75,150,44,121,119,216,176,97,110,62,62,62,112,117,117, + 197,221,187,119,225,234,234,10,149,74,133,228,228,100,56,58,58,130,16,130,178,178,50,28,61,122,84,173,215,235,107,141,251,209,104,52,244,210,165,75, + 70,71,71,199,187,249,249,249,220,162,162,34,94,113,113,49,79,165,82,241,149,74,37,255,228,201,147,30,206,206,206,154,115,231,206,229,7,5,5,113, + 159,60,121,194,53,153,76,117,90,175,132,16,188,255,254,251,16,8,4,208,235,245,88,185,114,37,102,206,156,89,25,147,181,100,201,18,204,157,59,183, + 210,112,222,180,105,83,93,146,207,64,41,133,209,104,132,201,100,130,201,100,178,201,248,253,43,216,98,176,83,74,115,9,33,3,219,181,107,119,122,223, + 190,125,238,21,57,201,160,80,40,160,80,40,144,159,159,143,210,210,82,48,12,3,127,127,127,40,20,10,28,62,124,88,169,86,171,251,214,182,226,144, + 203,229,190,213,181,107,87,94,245,62,88,238,242,44,198,187,72,36,130,92,46,71,143,30,61,132,23,46,92,120,11,47,184,161,101,49,96,154,53,133, + 160,79,223,113,130,102,17,157,12,119,18,227,178,194,27,42,178,70,15,113,58,6,0,183,19,20,206,119,146,93,208,44,98,32,237,211,215,53,90,145, + 187,49,170,121,40,49,214,86,174,7,0,156,165,162,17,189,123,181,151,59,202,100,156,101,203,55,157,88,183,110,69,155,253,199,254,72,239,176,108,121, + 121,122,135,222,189,218,179,15,238,63,24,1,160,230,244,14,213,140,151,129,3,7,221,218,178,109,11,30,36,158,243,251,248,253,22,194,34,133,9,18, + 135,64,180,109,229,131,141,219,238,225,206,157,59,185,6,131,161,71,109,99,167,132,6,37,38,37,132,70,69,52,247,121,227,173,137,78,3,7,14,65, + 92,220,17,236,220,190,249,210,43,163,134,253,240,180,88,197,245,226,75,5,82,202,10,185,2,103,158,64,36,201,51,24,202,215,64,240,249,98,39,96, + 4,91,203,204,33,38,79,28,237,220,179,215,16,28,59,126,4,59,183,111,188,248,105,196,240,205,13,91,55,35,29,218,44,159,220,160,81,112,3,141, + 70,161,4,17,26,117,58,214,113,233,214,244,111,31,207,125,235,241,173,132,17,203,95,212,85,135,58,134,185,183,119,200,144,214,19,110,221,18,57,183, + 104,33,81,92,190,172,243,238,210,69,235,221,165,139,22,192,51,222,58,179,82,201,17,6,4,8,85,121,121,194,155,91,182,136,181,192,253,26,100,239, + 238,28,48,160,221,180,71,143,4,158,93,186,72,228,231,207,75,73,121,37,146,90,13,45,30,143,7,90,243,84,215,51,154,100,199,14,14,128,90,23, + 97,9,4,2,104,52,26,152,128,154,126,4,159,209,244,61,117,42,235,209,163,71,77,221,220,220,158,49,178,138,138,138,42,159,235,116,58,104,52,26, + 72,36,146,68,91,52,21,151,46,233,190,126,255,253,249,175,141,26,181,250,204,217,179,98,119,119,119,40,149,202,103,12,45,131,193,128,158,49,49,130, + 37,183,110,189,1,96,129,45,199,211,187,71,143,58,227,129,185,92,46,216,127,120,234,240,69,166,54,143,86,141,87,53,139,209,100,235,170,67,107,23, + 72,66,72,175,106,155,230,70,71,71,235,82,82,82,16,20,20,84,105,172,84,253,76,39,39,39,184,184,184,224,230,205,155,248,242,203,47,181,0,230, + 214,166,73,41,85,107,52,154,87,123,247,238,173,229,241,120,8,15,15,175,204,159,197,178,44,132,66,33,100,50,25,110,221,186,133,65,131,6,105,52, + 26,205,171,213,115,104,89,209,84,106,52,154,215,251,246,237,171,73,76,76,68,215,174,93,113,231,206,29,148,150,150,162,180,180,20,105,105,105,136,136, + 136,176,4,159,107,53,26,205,235,148,82,101,109,154,106,181,122,208,204,153,51,185,123,246,236,105,232,239,239,31,209,182,109,219,176,152,152,152,198,47, + 191,252,114,240,128,1,3,124,155,54,109,170,235,219,183,175,103,255,254,253,61,53,26,13,255,215,95,127,205,49,153,76,253,235,56,158,0,202,141,147, + 148,148,148,202,169,66,30,143,135,130,130,130,202,204,253,150,31,37,107,134,112,77,154,22,88,150,173,52,176,44,6,87,93,215,128,26,52,235,188,112, + 8,133,66,139,199,243,79,109,173,124,71,183,239,223,191,223,187,91,183,110,183,199,141,27,167,206,205,205,133,163,163,35,66,66,66,16,26,26,10,15, + 15,15,24,141,70,28,58,116,168,236,240,225,195,247,148,74,101,143,234,57,180,170,107,114,56,156,52,107,63,178,22,111,150,197,208,18,139,197,240,247, + 247,183,28,219,52,27,198,254,151,248,199,53,43,12,152,152,158,125,27,13,136,29,234,124,232,200,21,225,234,181,135,239,69,247,194,38,247,6,170,163, + 238,13,84,71,163,123,97,211,234,181,135,239,29,58,114,69,56,32,118,168,115,76,207,190,141,146,18,31,132,61,83,247,208,74,63,197,98,113,167,174, + 93,162,139,47,92,190,200,46,94,242,29,167,103,143,87,110,109,254,225,208,161,205,63,28,58,212,179,199,43,183,22,47,249,142,115,225,242,69,182,107, + 151,232,98,177,88,220,201,150,177,79,158,56,218,57,118,192,16,196,197,29,98,246,255,248,253,146,189,7,82,187,141,159,122,73,145,146,114,135,230,101, + 159,2,159,147,129,164,164,36,165,193,96,232,97,45,16,222,154,230,164,9,163,171,26,89,191,184,251,116,221,116,255,62,204,241,241,63,155,206,158,189, + 165,253,229,118,158,242,70,82,65,145,60,191,232,137,74,85,104,96,89,51,204,102,51,119,225,194,242,128,221,154,190,163,206,157,187,227,220,153,221,216, + 190,109,131,146,101,161,27,190,111,159,121,196,136,207,104,80,80,80,131,93,123,118,147,254,131,135,184,80,128,29,52,108,136,203,158,125,123,72,163,38, + 141,26,132,132,148,167,180,121,17,207,165,47,41,205,43,72,74,250,237,238,230,205,58,159,177,99,221,121,174,174,78,57,241,241,50,173,92,206,51,27, + 141,196,108,52,18,115,89,25,199,80,80,192,229,122,123,11,225,228,228,240,211,232,209,14,102,157,238,212,55,148,150,90,211,92,64,105,177,42,35,227, + 226,205,239,190,211,123,191,250,170,155,208,219,219,9,102,51,177,252,190,215,244,224,241,120,207,120,96,106,211,244,247,240,120,122,244,232,81,132,134,134, + 194,223,223,255,153,120,94,75,66,110,119,119,119,28,56,112,0,20,184,97,139,102,235,134,13,111,126,243,245,215,6,150,101,81,92,92,252,39,111,86, + 113,113,49,88,150,197,241,99,199,12,170,210,210,237,182,142,189,7,151,91,250,218,75,47,45,142,141,141,53,62,122,244,8,44,203,162,170,103,43,47, + 47,15,14,14,14,208,233,245,129,132,16,169,45,154,121,39,79,202,106,88,211,81,73,117,143,214,63,113,46,253,175,82,171,71,139,97,24,4,6,6, + 62,83,210,133,195,225,60,243,168,207,138,67,74,233,14,66,200,169,190,125,251,206,239,208,161,195,228,249,243,231,115,195,194,194,160,84,42,225,234,234, + 10,47,47,47,36,39,39,227,232,209,163,230,130,130,130,245,0,22,217,178,132,158,82,122,158,16,50,176,69,139,22,123,103,207,158,237,220,167,79,31, + 126,96,96,32,40,165,184,117,235,22,14,30,60,104,220,188,121,179,170,194,200,178,41,120,153,82,122,154,16,242,202,128,1,3,118,189,245,214,91,142, + 102,179,153,159,150,150,6,189,94,15,147,201,132,204,204,76,227,207,63,255,92,170,209,104,70,83,74,79,219,160,119,147,16,210,60,62,62,254,173,95, + 127,253,245,203,113,227,198,185,199,196,196,8,24,134,193,229,203,151,243,91,183,110,237,149,151,151,103,60,112,224,64,161,78,167,155,107,54,155,109,42, + 193,67,8,129,74,165,130,135,135,7,244,122,61,88,150,133,193,96,128,131,131,67,101,217,36,74,169,205,11,1,170,195,48,12,215,104,52,98,212,168, + 81,96,89,22,43,87,174,4,195,48,245,22,115,118,118,190,113,251,246,237,129,173,90,149,39,124,231,114,185,149,231,144,72,36,130,135,135,7,220,221, + 221,17,23,23,7,62,159,95,107,150,125,11,21,153,222,91,19,66,58,221,187,119,239,77,0,173,140,70,163,191,217,108,38,28,14,39,135,82,122,87, + 165,82,253,96,107,9,158,188,188,188,47,199,140,25,211,122,247,238,221,14,60,222,31,255,26,60,30,15,34,145,8,94,94,94,112,118,118,6,165,20, + 6,131,1,243,230,205,83,149,149,149,125,89,223,99,241,111,37,186,109,123,108,252,126,149,195,217,115,167,242,239,167,226,96,213,20,14,46,66,224,220, + 69,146,173,200,221,24,37,207,202,114,136,110,219,222,38,77,147,193,88,248,250,232,25,65,21,37,120,230,165,165,165,111,216,181,227,219,199,0,176,116, + 197,202,166,138,194,146,73,15,238,63,24,177,97,195,143,157,76,6,99,161,45,154,127,24,47,187,148,160,208,81,74,175,17,66,26,14,122,245,228,220, + 38,141,156,6,231,21,106,159,150,149,105,222,163,148,90,93,50,111,141,46,157,187,225,220,233,61,216,185,125,151,138,178,92,157,135,135,7,5,128,251, + 247,61,232,253,251,37,244,143,184,98,151,50,62,189,179,104,198,123,49,51,148,170,162,21,43,214,214,158,184,182,69,203,14,104,209,178,3,166,190,247, + 137,115,243,136,240,32,0,216,183,143,154,35,155,146,159,231,207,255,108,240,162,69,159,65,165,214,195,82,174,39,57,33,233,216,163,71,212,182,85,64, + 255,82,204,12,243,203,137,169,83,27,48,106,181,123,155,169,83,61,205,133,133,98,99,86,86,89,89,70,134,86,224,236,204,10,188,189,249,194,224,96, + 190,170,160,64,120,240,245,215,101,5,15,31,102,125,74,105,173,49,174,243,25,230,26,102,204,104,170,41,42,242,236,242,241,199,30,188,143,62,226,212, + 22,12,95,245,255,215,22,205,235,119,239,30,155,52,126,252,211,5,243,231,247,93,191,97,131,36,42,42,10,185,185,185,8,15,15,135,191,191,63,226, + 227,227,113,224,167,159,202,74,212,234,185,0,214,217,162,185,227,248,241,228,176,136,136,130,13,27,54,248,197,198,198,146,178,178,50,40,149,74,40,149, + 74,232,245,122,84,36,132,166,41,169,169,247,77,38,211,122,91,52,187,124,252,177,135,57,63,95,188,168,125,251,108,1,203,126,243,202,176,97,51,23, + 125,254,185,168,81,163,70,68,175,215,87,122,181,140,70,35,28,28,28,140,6,131,193,29,192,159,188,85,214,52,69,155,55,51,249,249,249,240,244,244, + 172,76,215,84,53,47,161,90,173,6,173,98,12,219,177,29,82,211,181,220,205,205,237,6,143,199,11,0,106,175,157,87,117,155,201,100,202,206,207,207, + 143,174,210,166,23,165,212,106,60,20,33,36,4,192,87,61,123,246,124,229,195,15,63,36,23,46,92,192,225,195,135,233,227,199,143,247,3,152,91,211, + 143,100,29,154,142,34,145,232,3,153,76,214,203,146,194,65,42,149,222,43,43,43,59,163,215,235,87,214,148,13,190,14,77,39,145,72,244,190,76,38, + 235,173,86,171,91,1,128,163,163,227,237,178,178,178,120,189,94,191,138,214,80,168,186,14,77,137,179,179,243,151,30,30,30,175,127,244,209,71,238,151, + 46,93,202,57,119,238,156,160,164,164,100,183,193,96,168,177,168,180,53,77,119,119,247,27,92,46,55,224,159,248,142,0,160,101,203,150,113,131,6,13, + 138,29,61,122,52,76,38,19,214,173,91,135,248,248,248,99,169,169,169,3,107,218,199,154,38,33,196,35,32,32,224,194,228,201,147,131,71,141,26,37, + 117,117,117,5,143,199,67,89,89,25,30,62,124,136,91,183,110,209,35,71,142,148,222,188,121,51,91,163,209,116,167,148,22,212,165,249,87,177,166,201, + 231,243,187,5,6,6,254,184,96,193,2,199,222,189,123,75,220,221,221,193,229,114,97,50,153,144,147,147,131,132,132,4,156,58,117,170,108,255,254,253, + 101,133,133,133,163,40,165,23,255,27,253,252,59,53,155,135,146,79,171,21,138,174,49,219,123,109,109,109,233,103,76,119,191,33,35,94,233,223,15,0, + 246,29,56,113,242,236,5,121,173,69,165,107,235,103,93,125,181,69,179,89,83,238,130,196,164,132,103,18,90,70,52,143,76,105,22,53,236,11,91,180, + 44,153,225,171,143,189,74,182,253,63,168,54,205,106,41,60,253,201,220,57,248,234,203,197,56,178,239,208,177,164,71,180,178,76,208,139,120,46,85,217, + 70,22,241,120,29,29,252,253,187,14,92,181,202,232,22,26,74,165,238,238,148,49,24,204,249,247,239,179,89,23,46,144,43,171,86,73,76,26,77,252, + 167,86,74,99,213,164,249,5,143,215,65,234,235,251,210,74,150,157,115,39,33,193,161,234,13,155,197,243,92,245,166,210,207,207,47,79,46,151,123,219, + 162,57,112,205,26,163,70,38,19,205,249,230,155,110,165,58,93,183,69,139,22,241,174,95,191,142,239,191,251,142,209,101,103,239,202,7,222,183,54,27, + 82,155,102,240,251,239,139,103,125,255,253,216,144,38,77,188,222,124,243,77,62,159,207,71,89,89,25,178,178,178,112,250,212,41,67,210,253,251,73,42, + 149,106,48,165,84,110,171,230,192,53,107,140,46,33,33,144,122,122,210,179,231,207,59,79,250,224,131,201,13,26,54,116,238,219,175,31,223,201,201,9, + 197,197,197,72,75,75,195,161,67,135,242,74,75,75,253,40,165,102,91,52,119,253,250,107,139,227,23,47,14,255,226,139,47,132,145,145,145,112,118,118, + 134,90,173,70,66,66,2,46,94,188,168,95,191,126,189,82,169,84,78,102,24,230,104,77,253,252,255,76,149,24,173,99,180,188,28,207,31,239,253,147, + 161,0,182,124,17,132,144,104,0,159,86,188,252,156,214,93,51,240,133,253,241,177,210,38,200,205,205,109,163,78,167,163,90,173,118,18,165,52,243,223, + 214,79,66,8,47,58,58,250,251,188,188,188,78,148,82,56,59,59,95,73,76,76,156,66,41,173,113,174,190,38,77,66,8,23,64,39,7,7,135,246, + 142,142,142,221,244,122,125,179,138,233,183,251,101,101,101,23,141,70,227,53,0,87,40,165,127,90,49,241,159,28,123,69,63,123,251,249,249,141,103,89, + 182,9,33,196,197,108,54,195,100,50,149,176,44,251,80,169,84,110,6,16,255,223,238,231,223,165,25,209,132,188,76,57,104,86,249,102,45,113,87,213, + 13,8,194,226,126,226,67,122,200,214,126,18,66,56,253,123,5,174,5,202,87,38,210,58,74,25,61,99,104,217,96,188,216,194,51,154,77,120,99,40, + 161,207,104,18,74,50,195,215,14,138,250,0,0,32,0,73,68,65,84,91,188,188,211,22,173,154,12,45,91,137,8,35,221,64,209,137,165,184,118,63, + 149,158,171,169,159,127,23,255,105,205,133,132,184,115,128,102,92,145,40,128,101,24,31,112,185,44,225,112,114,24,157,46,27,64,194,130,231,184,249,93, + 76,136,219,119,174,174,87,56,60,158,15,0,78,133,247,133,101,9,49,83,66,152,170,211,91,85,111,44,235,210,52,2,81,124,145,40,208,204,48,222, + 185,128,195,113,179,185,141,142,210,210,0,224,211,91,148,38,63,79,63,141,64,20,87,36,10,58,78,233,144,124,153,172,69,158,86,235,9,128,58,200, + 100,247,85,101,101,219,117,58,221,218,234,51,23,182,104,10,68,162,0,51,195,120,3,0,135,199,203,219,171,215,7,102,59,57,189,169,211,235,131,29, + 28,28,76,6,131,65,165,211,233,70,155,76,166,179,245,25,251,67,134,105,254,43,135,211,213,40,147,185,27,9,145,25,24,198,104,48,26,179,116,58, + 221,61,0,223,82,74,43,211,143,216,13,45,235,84,49,184,254,136,219,178,172,78,251,39,30,0,122,217,53,237,154,118,77,187,166,93,211,174,105,215, + 252,231,53,1,72,1,4,1,224,254,155,251,249,191,248,0,48,177,226,225,91,253,189,186,39,178,237,216,177,99,199,142,29,59,255,122,40,165,26,88, + 137,201,178,243,207,67,107,89,117,72,0,88,93,57,64,235,225,18,124,158,213,7,117,233,219,53,237,154,118,77,187,166,93,211,174,105,215,252,223,211, + 172,75,187,62,246,199,191,5,82,75,30,173,127,218,149,246,66,184,43,237,154,118,77,187,166,93,211,174,105,215,180,107,254,119,53,255,23,30,0,38, + 86,223,246,215,10,20,254,15,67,8,241,38,132,88,45,139,240,87,218,218,121,241,176,127,191,118,236,216,177,99,167,46,8,33,19,169,149,41,196,255, + 120,140,150,229,130,69,41,181,90,215,170,190,237,254,238,125,43,246,95,76,8,102,85,60,95,66,41,157,243,119,180,181,225,115,253,60,60,60,134,121, + 121,121,181,45,44,44,188,166,80,40,246,83,74,243,234,177,127,83,169,84,58,133,16,18,9,0,148,210,4,141,70,243,61,165,52,245,121,251,84,69, + 155,0,152,40,18,137,70,186,186,186,54,41,42,42,122,104,48,24,246,1,216,64,43,204,248,122,234,133,1,24,133,242,233,235,131,148,210,187,182,238, + 235,29,57,244,39,10,52,5,192,97,9,59,156,67,57,251,1,176,4,72,85,36,28,30,89,223,190,212,209,207,191,237,251,253,155,250,211,140,16,172, + 35,132,52,99,89,186,138,82,186,168,142,246,45,8,193,26,66,72,88,69,251,122,165,66,176,99,199,142,29,59,117,99,153,58,180,182,234,176,94,134, + 150,191,191,255,43,148,210,73,0,40,33,100,227,211,167,79,15,212,179,35,54,93,180,254,202,197,173,218,190,43,40,165,51,235,217,71,111,66,48,139, + 101,41,7,0,56,28,242,177,183,183,183,148,203,229,254,41,192,208,108,54,75,9,193,84,150,165,164,162,237,44,66,200,170,231,53,14,223,120,227,141, + 21,171,86,173,18,75,165,82,100,100,100,244,153,60,121,114,103,66,200,12,90,45,39,135,53,36,18,201,107,237,218,119,154,241,205,210,229,14,222,94, + 94,50,198,204,26,211,210,211,101,243,230,204,108,47,145,72,86,213,86,76,185,90,63,8,128,137,60,30,111,164,88,44,110,172,211,233,30,49,12,179, + 159,203,229,246,253,242,203,47,35,7,12,24,32,86,169,84,66,134,97,154,236,220,185,115,198,150,45,91,250,19,66,134,208,90,150,233,19,66,252,1, + 128,82,90,181,150,217,240,140,140,140,104,129,64,64,66,66,66,56,0,238,214,209,190,18,10,52,77,188,188,47,10,0,34,186,140,72,73,188,188,15, + 21,207,109,25,162,205,88,59,23,196,98,241,122,157,78,151,105,121,191,162,159,207,101,208,63,95,159,176,118,221,218,53,157,219,69,183,32,99,39,188, + 183,144,16,114,145,82,250,11,33,132,15,96,56,0,1,128,219,148,210,132,138,62,111,219,188,113,125,100,203,168,112,242,250,91,147,22,17,66,206,81, + 74,175,254,167,250,107,199,142,29,59,255,31,176,230,201,178,80,95,143,214,187,169,169,169,14,0,16,26,26,58,5,128,205,134,150,181,139,86,76,76, + 76,107,137,68,242,76,22,100,173,86,43,36,4,49,207,99,188,88,62,195,96,208,115,248,124,33,56,28,50,163,69,139,22,13,10,10,10,46,113,56, + 156,93,217,217,217,197,245,26,109,185,38,54,109,218,20,234,235,235,251,167,108,205,57,57,57,194,33,67,6,215,75,111,44,33,34,189,72,212,94,64, + 136,175,153,97,92,0,128,199,227,21,135,57,59,71,127,245,197,23,82,66,8,91,88,88,8,173,86,139,233,211,167,75,146,146,146,134,2,88,91,71, + 31,67,59,116,236,60,253,212,169,147,205,84,69,197,186,77,43,54,222,210,242,248,101,141,154,55,19,126,191,113,187,203,196,177,163,223,35,132,220,166, + 86,202,145,84,211,225,0,56,244,193,7,31,68,12,28,56,80,168,86,171,197,90,173,182,193,174,93,187,230,69,71,71,59,180,106,213,74,248,227,143, + 63,18,165,82,9,74,169,52,60,60,156,142,28,57,82,183,119,239,222,169,0,86,215,160,89,105,248,114,185,220,149,97,97,97,11,42,198,44,168,210, + 134,223,188,121,115,25,0,36,39,39,47,36,4,31,84,108,183,106,100,19,32,53,162,203,8,128,160,73,226,229,125,226,136,174,35,116,160,120,72,128, + 84,0,240,247,247,95,4,84,201,11,245,44,247,159,62,125,250,92,181,9,7,14,28,68,0,236,247,243,243,59,144,151,151,215,144,16,76,168,173,159, + 214,240,241,241,9,246,244,244,92,195,178,172,49,49,49,113,152,101,123,116,116,116,39,71,71,199,24,181,90,125,233,198,141,27,23,107,218,159,67,72, + 211,118,209,45,73,139,54,157,224,236,236,12,169,84,250,46,128,95,0,140,154,53,107,214,180,208,208,80,44,93,186,212,8,160,99,197,13,66,120,187, + 182,173,72,120,68,27,56,58,58,2,64,35,0,118,67,203,142,29,59,118,254,70,8,33,190,0,98,171,110,123,46,143,22,0,33,0,92,186,116,9, + 0,68,207,211,151,42,157,194,251,239,191,15,95,95,223,103,26,228,228,228,224,194,5,155,170,228,216,244,25,159,127,254,185,67,73,73,73,175,31,126, + 248,225,37,127,127,255,101,79,159,62,253,173,182,157,41,165,10,66,200,18,14,135,124,76,8,129,72,36,78,153,60,121,242,173,138,183,27,252,252,243, + 207,210,65,131,6,105,0,164,3,128,72,36,246,231,114,57,161,229,65,111,88,82,155,65,56,130,144,16,161,80,216,115,210,154,53,76,155,65,131,120, + 50,79,79,2,0,233,15,30,184,47,89,186,180,115,241,227,199,66,173,187,123,97,97,89,153,54,37,37,5,34,145,136,112,185,220,54,117,13,88,38, + 147,77,251,226,171,37,50,85,81,137,86,175,42,53,112,205,38,189,163,68,98,206,205,85,20,56,72,165,154,57,159,46,20,188,51,225,205,105,0,166, + 212,33,53,117,198,140,25,205,218,181,107,231,255,211,79,63,17,165,82,9,30,143,231,208,170,85,43,68,71,71,155,207,157,59,71,26,54,108,136,200, + 200,72,92,190,124,25,87,174,92,33,173,91,183,150,30,60,120,240,13,88,49,180,170,27,215,92,46,103,122,120,120,120,43,153,76,102,8,13,13,197, + 132,9,19,64,41,69,175,94,189,34,29,28,28,14,148,149,149,9,147,147,31,188,84,151,145,109,153,30,244,138,28,122,23,64,20,40,30,230,37,28, + 110,81,165,73,179,228,228,228,14,197,197,197,149,193,136,150,2,230,47,189,244,82,93,135,179,18,203,185,48,120,240,160,143,1,66,98,98,98,74,166, + 78,157,202,121,240,224,193,235,47,191,60,52,50,53,245,33,106,235,103,117,124,124,124,130,251,245,235,183,123,243,230,205,109,187,116,233,114,161,234,123, + 174,174,174,125,215,173,91,55,109,219,182,109,225,237,218,181,43,249,253,247,223,173,150,36,49,179,244,251,177,19,166,46,114,118,118,70,70,122,154,121, + 220,184,113,77,253,253,253,95,1,32,138,140,140,68,251,246,237,177,97,195,6,1,0,8,4,130,25,61,122,244,44,122,99,204,36,111,71,71,71,164, + 166,38,43,1,28,179,249,0,216,177,99,199,142,29,91,137,165,148,110,180,22,167,197,3,128,99,199,142,85,198,216,196,198,198,214,88,184,144,82,170, + 184,115,231,78,160,70,163,177,105,186,132,86,89,162,73,41,85,112,185,220,239,57,28,50,133,16,130,200,200,168,39,43,87,174,180,86,211,203,16,25, + 25,245,132,203,229,52,162,148,130,16,206,58,150,53,43,172,105,90,235,31,33,100,137,80,40,154,5,0,62,62,190,143,79,156,56,97,24,62,124,56, + 150,46,93,42,152,61,123,246,204,224,224,224,169,25,25,25,185,53,245,179,226,245,28,111,111,111,233,166,77,155,66,39,79,158,124,75,46,151,207,1, + 0,63,63,191,197,0,154,3,72,175,178,13,235,215,239,125,58,97,194,132,20,133,66,49,167,38,205,87,8,105,28,28,30,222,115,209,165,75,148,163, + 215,147,130,95,126,81,229,43,20,166,71,249,249,210,109,55,110,12,156,183,120,49,63,48,40,8,23,142,30,245,40,208,104,242,149,122,189,78,161,80, + 80,134,97,174,212,164,89,133,8,47,79,79,233,134,111,215,93,119,228,115,89,111,127,127,194,115,115,225,115,164,206,66,14,143,167,107,20,220,68,0, + 32,162,134,99,86,169,41,16,8,222,232,211,167,143,116,239,222,189,36,50,50,18,46,46,46,248,229,151,95,112,251,246,109,152,76,38,78,113,113,49, + 218,182,109,139,111,190,249,6,65,65,65,40,41,41,65,102,102,166,135,80,40,244,172,229,120,62,115,62,205,154,53,11,190,190,190,96,24,6,69,69, + 69,96,24,6,14,14,14,0,128,236,236,108,28,61,106,189,34,75,109,223,123,13,237,209,177,99,71,53,33,228,126,181,183,238,87,105,83,167,166,191, + 191,255,143,121,121,249,253,123,246,236,137,226,226,98,211,103,159,125,134,22,45,90,32,44,44,204,106,251,170,154,173,91,183,126,217,108,54,79,0,0, + 163,209,24,231,235,235,59,120,249,242,229,193,28,14,167,242,6,199,226,201,82,42,149,197,9,9,9,201,175,189,246,90,247,219,183,111,103,181,108,217, + 50,243,206,157,59,202,234,154,148,210,207,249,124,254,111,206,206,206,95,238,222,189,91,216,162,69,11,38,47,47,111,214,229,203,151,115,151,45,91,70, + 101,50,25,201,201,201,209,54,106,212,104,103,108,108,108,216,180,105,211,228,203,151,47,87,239,217,179,231,154,86,171,157,78,41,45,177,117,236,245,197, + 174,105,215,180,107,218,53,255,10,182,218,34,255,82,142,85,143,211,122,198,163,21,27,27,75,142,29,59,70,109,24,88,97,64,64,64,160,68,34,1, + 0,155,10,192,86,197,108,54,79,245,240,240,200,155,51,103,78,151,208,208,80,195,212,169,83,19,210,210,210,230,86,109,211,176,97,195,47,191,251,238, + 59,164,164,164,164,47,94,188,248,114,65,65,65,189,130,119,41,165,179,9,33,43,1,32,39,39,167,224,232,209,163,45,46,93,186,52,101,197,138,21, + 158,239,190,251,174,96,218,180,105,163,1,44,173,75,135,203,229,106,172,77,23,90,195,215,215,215,96,45,134,203,194,32,66,36,78,66,97,143,69,151, + 46,81,67,122,186,102,203,242,229,142,27,126,255,125,129,137,82,111,47,47,47,116,237,220,185,84,204,229,22,228,229,230,178,94,141,27,115,211,78,156, + 240,208,10,133,242,189,123,247,42,11,11,11,15,215,245,249,132,16,149,153,101,141,142,254,129,204,240,151,251,68,92,191,118,251,129,163,167,7,39,186, + 117,100,84,82,74,250,77,106,54,155,8,33,86,107,50,86,197,217,217,57,180,176,176,16,42,149,10,158,158,158,88,185,114,37,124,124,124,160,209,104, + 112,245,234,85,26,16,16,64,46,93,186,132,128,128,0,228,231,231,195,96,48,64,173,86,231,233,245,122,171,181,25,41,165,10,30,143,183,149,195,33, + 99,9,33,104,212,40,36,99,237,218,181,6,150,101,209,172,89,51,188,252,242,203,56,120,240,32,18,19,19,45,158,39,67,112,112,131,12,14,135,4, + 151,239,94,187,135,176,54,44,165,125,158,62,125,58,172,238,214,127,134,16,194,241,243,243,27,221,180,105,211,41,175,189,246,154,73,40,20,162,172,172, + 12,26,141,6,137,137,137,166,254,253,7,148,12,30,60,200,57,46,46,174,198,126,154,76,166,9,183,110,221,234,162,211,233,138,135,15,31,238,186,104, + 209,34,46,143,199,51,2,128,217,92,94,189,199,226,201,218,186,117,235,169,111,191,253,246,252,234,213,171,253,222,121,231,157,238,159,126,250,233,121,0, + 39,173,245,205,100,50,157,13,8,8,184,253,213,87,95,237,218,180,105,147,231,242,229,203,57,102,179,217,143,101,89,152,205,102,176,44,43,49,155,205, + 97,148,82,228,231,231,227,202,149,43,215,181,90,237,216,218,226,232,236,216,177,99,231,191,77,61,108,145,127,29,21,177,212,86,227,180,254,227,171,14, + 185,92,238,134,211,167,79,183,122,233,165,151,120,49,49,49,145,1,1,1,145,217,217,217,9,0,16,16,16,16,217,175,95,191,72,47,47,47,172,90, + 181,74,195,229,114,55,60,207,103,84,187,232,221,242,245,245,93,118,240,224,193,37,147,38,77,130,143,143,79,243,191,101,32,245,192,73,36,106,61,110, + 229,74,134,111,50,113,214,44,91,230,180,252,252,249,37,63,237,219,199,235,216,177,35,161,148,226,222,221,187,146,111,86,175,150,142,26,58,52,61,249, + 241,99,230,200,169,83,38,197,211,167,69,79,243,243,231,83,74,139,234,210,55,153,76,87,83,31,166,250,119,233,209,201,239,151,223,19,111,15,27,58, + 160,39,159,199,33,15,211,159,222,240,245,241,112,190,112,62,94,103,50,153,234,140,203,41,43,43,75,99,24,198,141,82,234,121,225,194,5,120,122,122, + 162,184,184,24,38,147,9,6,131,193,160,209,104,196,133,133,133,208,233,116,208,235,245,112,114,114,194,189,123,247,20,12,195,156,171,73,147,97,152,113, + 98,177,248,115,62,159,47,20,8,4,242,27,55,110,64,165,82,53,112,113,113,89,202,48,12,228,114,57,46,93,186,244,145,147,147,83,58,0,136,197, + 98,8,133,34,119,189,94,207,212,20,12,111,11,207,177,16,178,18,95,95,223,160,70,141,26,45,250,248,227,89,205,90,182,108,133,252,252,124,176,44, + 11,153,76,6,141,70,3,39,39,39,116,234,212,41,109,225,194,133,57,148,98,98,45,198,32,23,0,207,100,50,9,6,15,30,236,44,149,74,75,51, + 51,51,139,194,195,195,3,45,134,86,113,113,241,189,123,247,238,61,24,53,106,84,183,51,103,206,220,191,118,237,218,253,174,93,187,182,228,112,56,13, + 106,235,99,118,118,118,113,64,64,192,180,233,211,167,175,27,60,120,176,11,33,4,60,30,15,157,58,117,66,118,118,54,146,147,147,193,48,12,142,28, + 57,82,92,92,92,188,192,110,100,217,177,99,199,206,63,71,149,24,173,63,21,149,254,143,27,90,10,133,34,63,32,32,224,228,205,155,55,7,142,28, + 57,18,23,46,92,24,3,96,6,0,136,68,162,49,35,71,142,196,205,155,55,241,224,193,131,147,10,133,34,255,239,248,76,161,80,168,51,24,202,157, + 83,98,177,88,92,207,221,27,84,76,25,2,64,131,90,182,213,8,135,199,243,141,234,215,143,87,124,251,182,106,211,181,107,159,239,218,181,139,215,165, + 75,23,98,50,26,97,102,89,132,132,132,144,152,94,189,100,91,119,237,114,51,151,149,93,250,226,227,143,127,217,56,110,92,105,10,165,233,182,116,80, + 175,215,175,126,111,202,196,222,103,207,95,242,11,15,15,113,63,25,127,254,150,187,155,179,52,180,105,83,89,81,113,177,121,238,236,89,60,189,94,191, + 166,46,29,173,86,123,232,204,153,51,67,3,3,3,61,19,18,18,96,48,24,96,54,155,17,19,19,3,74,169,8,0,203,227,241,240,224,193,3,24, + 141,198,188,212,212,84,249,195,135,15,69,0,190,174,77,87,167,211,101,84,125,29,24,24,216,59,54,54,22,12,195,160,95,191,126,56,114,228,72,239, + 164,164,164,229,85,154,148,217,50,238,218,168,240,144,53,243,247,247,63,88,177,201,166,32,248,128,128,128,200,166,77,155,174,255,250,235,175,5,1,1, + 1,160,148,194,213,213,5,26,141,6,5,5,133,136,136,136,64,64,64,0,190,254,250,107,0,216,83,155,199,141,101,89,40,20,138,226,71,143,30,229, + 60,121,242,196,53,52,52,20,132,16,148,149,149,105,45,134,150,76,38,59,118,224,192,129,30,95,125,245,85,68,120,120,120,80,98,98,98,94,191,126, + 253,164,65,65,65,161,11,23,46,228,44,88,176,160,70,3,41,59,59,251,113,243,230,205,7,44,90,180,168,133,217,108,22,122,120,120,204,111,215,174, + 157,203,141,27,55,176,106,213,170,205,148,210,20,55,55,183,171,28,14,199,199,215,215,247,101,46,151,123,241,121,22,132,216,177,99,199,142,157,58,169, + 140,209,66,53,207,150,205,134,86,243,230,205,101,74,165,242,205,6,13,26,8,1,64,34,145,52,111,220,184,241,204,71,143,30,89,173,190,94,27,26, + 141,230,167,93,187,118,245,249,246,219,111,5,3,6,12,104,28,16,16,208,14,0,134,13,27,214,216,209,209,17,187,118,237,50,106,52,154,159,234,171, + 91,19,38,147,233,165,182,109,219,162,168,168,8,233,233,233,9,245,217,247,231,159,127,150,162,60,46,171,214,109,181,193,24,12,174,46,254,254,156,167, + 231,207,27,139,84,42,223,151,186,117,35,38,163,17,28,14,7,133,133,133,200,204,204,132,179,139,11,121,144,154,234,176,121,214,172,159,27,180,108,41, + 52,27,12,238,182,234,83,74,203,8,33,99,222,155,250,238,161,221,187,247,120,148,148,168,30,139,37,18,131,72,200,247,158,54,245,93,115,81,81,209, + 91,148,210,82,27,164,190,222,189,123,119,191,126,253,250,221,13,10,10,242,202,207,207,247,41,41,41,49,23,21,21,113,81,30,107,69,0,224,252,249, + 243,80,169,84,140,217,108,190,4,96,17,165,212,166,41,86,0,104,208,160,129,115,251,246,237,187,123,122,122,66,169,84,194,221,221,29,173,90,181,234, + 222,160,65,131,31,210,211,211,149,182,234,216,66,124,124,188,35,165,180,3,165,20,253,250,245,179,105,31,179,217,252,118,108,108,172,128,16,2,173,86, + 3,177,88,2,153,204,1,142,142,78,8,13,13,131,92,46,71,223,190,125,13,143,30,61,250,62,39,39,167,214,115,148,101,89,228,228,228,232,10,10, + 10,144,153,153,201,47,40,40,0,0,20,23,23,107,45,193,249,127,149,164,164,36,99,64,64,192,99,169,84,250,205,196,137,19,93,24,134,65,227,198, + 141,225,235,235,219,53,47,47,239,74,73,73,201,248,14,29,58,188,213,165,75,23,238,182,109,219,134,0,120,243,111,249,96,59,118,236,216,177,243,12, + 181,198,104,1,181,7,158,249,250,250,118,117,115,115,155,167,213,106,133,150,41,25,66,136,208,211,211,243,136,159,159,223,98,185,92,94,175,160,184,226, + 226,98,149,175,175,239,145,171,87,175,142,24,54,108,24,226,227,227,223,2,128,97,195,134,225,234,213,171,120,242,228,201,145,226,226,226,58,99,138,108, + 33,32,32,160,127,247,238,221,135,181,109,219,22,113,113,113,48,155,205,87,234,222,235,15,170,174,48,132,149,85,135,150,109,54,137,113,185,32,132,128, + 97,24,0,64,65,126,62,82,146,147,81,84,92,12,189,78,135,50,141,198,28,218,176,161,86,105,48,240,9,80,175,185,47,74,105,134,131,131,67,166, + 70,83,230,229,230,225,170,149,137,197,40,81,41,5,55,174,255,166,166,148,62,178,81,195,64,8,233,118,226,196,137,249,92,46,119,164,131,131,3,166, + 76,153,194,237,222,189,59,4,2,1,244,122,61,74,74,74,176,107,215,174,124,134,97,26,1,0,33,196,65,38,147,109,231,114,185,217,42,149,106,94, + 93,159,97,48,24,6,12,28,56,144,103,48,24,240,197,23,95,96,193,130,5,232,215,175,31,239,250,245,235,3,0,236,174,207,152,107,131,101,89,244, + 238,221,187,106,48,124,245,160,120,171,240,249,252,200,38,77,154,32,63,63,31,249,249,249,240,244,244,132,159,159,31,124,124,124,176,124,249,114,186,106, + 213,170,147,70,163,241,251,252,252,252,58,99,199,204,102,51,30,61,122,164,213,235,245,92,14,135,35,49,153,76,2,149,74,101,204,206,206,214,90,206, + 1,181,90,221,111,218,180,105,45,53,26,141,230,193,131,7,153,99,198,140,233,168,209,104,52,153,153,153,41,7,15,30,172,211,26,243,243,243,11,244, + 243,243,219,56,127,254,124,247,192,192,64,200,229,114,4,7,7,99,217,178,101,77,246,236,217,179,181,121,243,230,104,213,170,21,180,90,45,120,60,158, + 204,150,99,96,199,142,29,59,255,45,94,196,248,44,224,47,228,209,10,10,10,114,49,155,205,31,13,26,52,168,247,208,161,67,209,183,111,223,103,222, + 223,189,123,183,227,129,3,7,22,7,6,6,246,51,26,141,95,215,103,170,143,101,217,67,187,119,239,30,208,177,99,71,105,143,30,61,66,0,64,36, + 18,25,118,239,222,173,97,89,246,144,173,58,22,170,39,143,244,247,247,111,193,227,241,134,13,28,56,176,197,216,177,99,145,152,152,136,93,187,118,61, + 12,13,13,189,92,79,233,244,58,86,29,90,182,213,8,87,40,44,44,201,205,117,113,8,10,226,187,58,58,230,196,197,197,5,246,234,213,139,100,101, + 101,161,184,184,24,58,157,14,215,175,95,103,121,64,6,207,213,149,100,92,189,74,184,66,97,189,23,27,4,250,186,54,253,116,246,228,6,58,157,46, + 66,169,84,50,124,62,159,31,224,227,146,85,31,13,74,169,94,38,147,69,3,224,177,44,171,113,115,115,147,158,62,125,26,66,161,16,132,16,68,69, + 69,65,44,22,11,100,50,89,38,0,248,248,248,8,55,108,216,224,60,122,244,232,95,234,210,110,211,166,13,191,97,195,134,131,67,67,67,113,245,234, + 85,36,36,36,100,92,189,122,53,184,117,235,214,8,10,10,26,220,166,77,155,125,55,111,222,52,213,119,220,53,140,227,185,130,225,205,102,51,75,8, + 1,135,195,1,203,178,200,207,207,71,163,70,141,176,118,237,90,172,92,185,242,11,185,92,126,180,30,90,230,210,210,82,142,131,131,131,52,35,35,67, + 37,147,201,28,117,58,157,38,53,53,85,103,241,104,185,185,185,53,143,138,138,10,223,186,117,235,41,129,64,32,106,223,190,125,179,244,244,244,108,150, + 101,109,154,54,22,137,68,147,151,45,91,230,238,228,228,132,221,187,119,99,207,158,61,41,29,58,116,8,157,48,97,2,198,142,29,11,134,97,112,243, + 230,77,108,221,186,53,167,176,176,240,191,154,213,222,142,29,59,118,254,87,169,173,168,116,141,134,86,80,80,208,8,129,64,240,225,171,175,190,202,13, + 11,11,131,66,161,128,147,147,147,169,34,3,53,92,92,92,76,18,137,4,147,39,79,70,203,150,45,187,206,154,53,171,179,191,191,255,218,167,79,159, + 110,183,165,83,10,133,66,227,235,235,187,127,202,148,41,95,223,190,125,171,17,0,252,254,251,239,79,228,114,249,108,133,66,81,227,10,190,26,6,104, + 73,138,73,36,18,201,181,166,77,155,166,245,239,223,223,105,232,208,161,240,244,244,196,205,155,55,241,205,55,223,164,26,12,134,249,23,46,92,96,234, + 163,253,119,192,232,245,185,55,14,31,118,236,254,250,235,78,239,199,198,46,123,119,202,148,111,63,253,244,83,94,88,88,24,209,104,52,184,118,237,26, + 61,112,224,128,105,235,231,159,175,132,76,198,191,122,224,128,208,96,48,100,212,231,51,2,2,2,186,13,232,215,45,108,217,183,171,161,211,150,226,218, + 149,99,40,46,206,199,134,141,7,195,2,2,2,186,101,103,103,95,180,85,139,16,18,26,31,31,239,69,41,133,80,40,196,162,69,139,224,231,231,7, + 39,39,39,168,213,106,204,152,49,195,249,131,15,62,112,6,128,196,196,196,202,244,12,117,33,151,203,59,77,158,60,217,145,97,24,156,60,121,210,64, + 8,153,119,230,204,153,31,162,162,162,132,93,187,118,117,220,177,99,71,103,0,23,234,20,178,129,231,13,134,167,148,62,60,125,250,116,219,145,35,71, + 82,62,159,79,74,74,74,224,226,226,130,181,107,215,150,229,228,228,212,43,7,21,165,116,211,210,165,75,39,0,0,203,178,113,203,150,45,27,62,103, + 206,156,38,89,89,89,101,149,94,205,130,130,115,227,199,143,55,171,213,106,195,188,121,243,134,139,68,34,225,186,117,235,46,80,74,107,205,247,102,65, + 42,149,134,56,57,57,33,62,62,30,59,119,238,220,152,147,147,179,49,40,40,168,117,114,114,242,220,30,61,122,4,102,101,101,177,215,175,95,223,225, + 226,226,178,81,46,151,27,235,125,64,236,216,177,99,199,78,157,212,148,67,11,168,197,208,50,155,205,147,79,157,58,197,101,89,22,27,55,110,196,141, + 27,55,168,84,42,157,39,149,74,191,147,72,36,102,173,86,59,105,194,132,9,163,23,44,88,192,233,218,181,43,174,94,189,202,105,212,168,209,91,0, + 42,13,45,66,72,175,218,114,109,40,149,202,235,10,69,110,163,42,9,42,27,137,68,226,235,181,13,166,186,166,149,164,152,237,23,45,90,84,230,235, + 235,107,72,72,72,192,250,245,235,217,27,55,110,156,23,10,133,27,228,114,185,222,22,205,191,131,170,154,66,134,185,185,115,230,204,102,109,134,12,97, + 199,127,248,97,169,64,34,153,182,108,245,234,89,37,106,181,31,8,161,238,206,206,25,27,23,45,90,220,111,240,224,210,196,139,23,197,183,227,227,249, + 158,38,211,157,250,244,51,59,59,251,98,211,198,65,216,182,233,91,24,141,122,228,60,205,0,0,20,20,42,81,155,145,101,77,147,97,24,229,43,175, + 188,34,0,32,121,227,141,55,132,121,121,121,104,220,184,49,0,64,165,82,225,216,177,99,8,15,15,7,0,220,187,119,175,242,121,93,253,148,201,100, + 131,59,119,238,140,140,140,12,36,38,38,158,149,203,229,133,126,126,126,103,179,178,178,6,180,109,219,22,135,14,29,26,132,26,12,173,250,126,71,182, + 24,90,214,52,37,18,201,236,131,7,15,190,125,229,202,149,145,51,103,206,228,199,196,196,0,0,212,106,181,134,82,106,174,143,230,147,39,79,14,1, + 168,244,206,250,248,248,156,88,180,104,209,150,113,227,198,53,180,244,239,206,157,59,87,1,92,237,221,187,247,167,81,81,81,97,91,183,110,61,85,80, + 80,176,203,146,67,171,166,126,86,133,97,24,24,12,6,16,66,146,0,32,51,51,243,86,155,54,109,70,238,217,179,199,67,34,145,232,228,114,121,137, + 45,99,255,171,216,53,237,154,118,77,187,230,255,103,106,77,88,90,195,14,12,203,178,184,112,225,2,14,30,60,104,54,26,141,19,229,114,121,213,108, + 213,171,253,252,252,226,95,121,229,149,237,201,201,201,220,164,164,36,216,114,33,170,138,78,167,51,17,242,231,109,245,209,176,198,182,109,219,144,155,155, + 107,204,202,202,58,195,48,204,161,191,184,122,241,47,175,58,220,74,169,254,117,66,206,44,232,210,165,247,252,248,120,209,248,79,62,209,143,25,59,246, + 35,179,193,96,226,10,4,172,80,38,227,152,69,34,126,226,197,139,226,85,239,188,227,166,213,235,79,238,172,71,128,57,80,233,209,194,152,241,211,161, + 173,226,209,186,122,61,5,245,245,104,233,116,186,8,0,144,72,36,153,0,124,222,124,243,77,176,44,11,173,86,11,181,90,13,185,92,174,28,59,118, + 172,25,0,100,50,25,111,216,176,97,78,182,232,134,132,132,248,241,249,124,156,60,121,18,124,62,255,24,0,240,249,252,99,241,241,241,3,70,141,26, + 5,127,127,255,16,66,8,161,117,88,73,149,69,165,9,154,0,0,8,154,120,69,14,189,91,165,168,244,253,214,173,91,3,54,198,101,85,165,98,113, + 199,74,15,15,143,125,179,102,205,154,210,190,125,251,62,11,22,44,32,40,79,213,240,151,200,205,205,205,240,241,241,121,251,243,207,63,95,3,224,25, + 239,82,133,103,139,170,213,234,219,55,110,220,176,154,21,190,38,204,102,115,101,94,46,11,21,83,176,117,214,200,180,99,199,142,29,59,127,15,245,246, + 104,17,66,54,118,235,214,109,34,0,46,33,100,253,211,167,79,255,244,227,47,151,203,83,252,253,253,151,54,108,216,176,178,208,116,125,58,85,145,201, + 253,27,14,135,204,42,127,93,255,4,149,244,143,146,57,179,0,16,14,135,187,253,214,173,91,159,100,102,102,230,215,215,240,179,198,223,177,234,16,0, + 118,83,154,54,138,144,83,31,70,70,246,234,247,206,59,104,209,175,159,147,95,112,176,89,107,52,178,247,46,95,38,87,246,239,23,220,142,143,231,107, + 245,250,147,7,41,205,172,111,63,179,179,179,47,54,14,9,56,61,124,216,128,62,33,13,253,0,0,143,211,228,40,40,82,158,174,143,145,85,21,157, + 78,55,100,237,218,181,71,5,2,1,143,86,41,101,99,52,26,139,44,198,24,33,196,111,227,198,141,63,114,56,156,140,186,244,146,146,146,142,204,159, + 63,127,88,122,122,250,233,204,204,204,116,0,200,200,200,72,247,243,243,219,158,147,147,51,44,35,35,227,64,93,70,22,240,167,162,210,72,188,188,79, + 12,32,202,82,84,250,121,107,25,86,165,160,160,32,7,192,60,95,95,223,221,125,250,244,153,0,224,185,115,122,85,37,55,55,55,3,192,192,234,219, + 45,158,173,231,144,100,42,146,148,130,16,242,252,201,195,236,216,177,99,231,223,79,91,0,150,74,36,22,7,138,103,181,231,6,84,148,11,172,192,242, + 58,31,192,245,42,26,85,183,215,181,47,0,20,0,184,91,177,237,79,84,95,113,8,216,16,163,245,244,233,211,3,176,161,104,180,173,237,106,130,82, + 58,135,16,178,170,226,249,115,101,1,175,170,193,48,204,115,105,84,135,195,225,164,13,26,52,168,94,237,235,106,243,35,165,25,211,8,217,17,183,102, + 77,171,147,235,215,251,155,25,198,157,0,148,43,20,22,26,12,134,116,79,147,233,78,125,61,89,85,121,244,56,187,47,0,132,134,134,210,212,212,84, + 80,74,255,210,234,13,74,233,29,0,129,117,180,145,3,232,106,139,94,118,118,246,30,0,123,170,111,151,203,229,63,2,248,209,214,126,85,22,149,6, + 56,44,97,135,71,116,25,177,31,0,107,41,42,253,119,146,147,147,147,140,138,60,111,255,70,138,138,138,206,237,217,179,167,73,66,66,130,210,108,54, + 63,254,111,247,199,142,29,59,118,254,33,218,2,240,36,132,196,1,0,165,116,32,0,16,66,226,170,63,183,180,177,180,171,218,198,162,81,125,123,109, + 251,2,192,236,217,179,63,89,188,120,177,20,128,213,98,204,207,189,234,240,63,197,243,26,88,127,183,70,85,178,179,179,55,253,157,122,22,86,151,27, + 82,54,5,58,63,47,41,41,41,47,228,242,88,91,177,20,149,174,66,228,127,165,35,255,2,114,114,114,182,30,58,116,232,10,128,194,220,220,220,122, + 175,84,181,99,199,142,157,23,4,79,107,134,145,181,134,86,140,171,26,177,214,206,218,107,66,72,220,226,197,139,107,213,179,230,205,2,254,37,134,150, + 29,59,118,158,143,138,210,58,41,255,237,126,216,177,99,199,206,139,72,117,47,22,240,103,227,139,16,18,55,123,246,236,79,80,195,180,97,69,155,103, + 226,179,170,190,38,0,122,213,240,225,54,175,38,32,132,88,213,168,141,186,244,237,154,118,77,187,166,93,211,174,105,215,180,107,254,239,105,214,165,93, + 195,254,177,53,77,245,213,54,141,88,253,121,93,251,218,208,214,106,154,159,218,12,45,75,77,184,127,228,1,160,151,93,211,174,105,215,180,107,218,53, + 237,154,118,77,187,230,95,124,180,165,148,198,162,188,106,10,165,148,198,82,74,251,205,158,61,123,142,101,219,236,217,179,231,80,74,99,44,237,42,218, + 84,238,99,217,86,253,111,245,109,117,180,173,237,152,76,180,60,170,110,183,79,29,218,177,99,199,142,29,59,118,254,237,92,7,208,150,254,225,109,202, + 7,112,111,241,226,197,197,85,98,167,242,1,220,1,208,178,162,93,62,240,167,152,43,67,197,107,131,149,54,6,91,218,214,4,173,33,32,222,110,104, + 213,64,43,95,238,231,65,1,94,209,64,133,215,175,162,100,10,91,110,181,130,86,152,175,96,89,80,74,33,207,43,185,121,87,65,63,125,222,207,11, + 243,39,110,94,98,241,74,150,210,46,21,155,46,42,11,245,211,19,148,244,79,201,38,107,162,153,15,105,38,230,224,35,150,162,5,0,112,8,238,234, + 88,44,189,159,75,235,157,79,170,58,132,16,18,225,137,137,66,137,244,85,103,23,215,38,197,197,5,169,70,157,126,95,82,62,54,84,30,139,122,208, + 216,141,116,96,41,62,1,192,225,115,176,60,165,144,90,93,201,97,199,142,29,59,118,236,84,96,45,161,249,239,54,182,251,71,169,109,234,176,94,134, + 86,132,23,121,7,4,159,1,160,160,88,152,152,71,215,213,107,127,63,210,75,204,229,110,6,192,213,25,205,31,82,22,151,172,118,152,131,151,196,2, + 238,114,0,172,206,108,30,151,40,183,61,94,44,50,128,244,227,177,156,157,44,165,124,51,75,183,131,34,206,65,128,95,175,102,83,93,125,250,26,20, + 224,21,125,248,247,156,62,231,215,189,143,246,45,26,131,154,25,128,53,65,218,245,35,156,93,241,38,218,55,11,2,101,77,0,203,192,161,255,50,244, + 143,116,126,238,28,70,97,254,196,45,216,195,43,97,211,166,205,62,126,33,205,9,203,24,145,252,251,233,209,31,204,154,223,51,210,153,68,218,98,108, + 181,244,35,227,27,55,10,251,104,250,103,223,114,253,252,2,101,102,70,207,228,62,185,223,122,245,146,249,7,90,250,145,229,119,228,116,179,45,125,33, + 132,144,230,158,152,196,19,9,71,72,196,178,38,26,141,250,161,217,104,218,23,233,199,235,183,116,217,202,86,221,123,15,112,48,171,115,57,38,22,205, + 127,218,251,99,240,154,181,223,15,32,132,12,166,229,65,217,54,195,82,204,74,217,49,113,0,159,199,37,205,222,222,196,69,13,75,102,235,162,185,55, + 121,141,208,186,211,75,80,130,95,146,20,244,79,169,37,108,161,153,55,249,129,80,132,130,96,63,161,248,49,49,143,230,61,143,142,29,59,118,254,189, + 16,66,182,1,88,65,41,173,87,194,224,58,52,91,0,72,163,148,170,255,46,77,59,47,30,245,243,104,17,124,145,248,40,203,21,102,35,34,66,67, + 62,7,80,47,67,75,204,229,110,191,158,170,240,1,99,196,166,47,167,236,53,152,0,198,100,132,153,49,193,204,152,192,48,70,152,77,38,80,147,30, + 243,183,156,7,12,106,68,71,54,221,14,192,215,214,207,224,83,206,206,155,151,79,187,17,131,18,123,214,45,126,47,43,191,244,189,51,119,229,5,17, + 222,100,78,82,30,182,214,199,32,56,191,254,125,236,58,116,44,123,213,15,101,15,88,74,225,230,36,9,27,61,48,49,112,199,145,243,89,43,183,235, + 30,0,128,179,76,24,246,214,221,212,160,250,28,135,234,120,137,197,43,55,124,191,198,199,215,93,66,152,43,95,131,49,155,17,24,28,203,157,51,117, + 180,239,23,43,54,175,0,48,166,182,253,195,189,73,243,208,198,205,62,220,126,236,74,144,70,157,103,56,189,235,147,71,84,15,147,143,127,51,254,231, + 139,191,229,206,253,248,253,25,225,222,228,180,173,209,230,0,0,32,0,73,68,65,84,218,3,5,77,170,77,135,252,31,123,231,29,30,69,245,189,241, + 247,206,204,182,108,202,166,55,66,66,2,36,132,16,8,189,247,38,4,190,244,174,136,32,69,81,192,2,72,199,66,81,105,74,145,34,82,148,46,136, + 132,26,149,222,36,212,96,8,132,154,222,235,102,235,204,220,223,31,41,134,144,182,1,177,252,230,243,60,251,108,102,118,231,157,59,187,155,157,119,207, + 61,231,12,33,76,125,87,252,180,120,201,151,141,186,244,234,99,35,230,165,178,122,109,94,192,198,205,155,22,4,54,106,161,110,31,236,37,79,217,51, + 145,232,114,51,96,98,84,202,46,13,186,217,233,94,29,110,222,184,229,251,201,0,190,178,228,152,133,18,211,214,162,88,253,174,235,132,162,253,181,139, + 191,77,16,18,126,7,21,204,128,96,42,190,135,96,6,21,11,238,91,78,220,12,148,209,195,171,42,48,20,61,194,207,254,238,145,156,148,216,124,197, + 151,139,62,10,114,37,71,32,96,251,31,25,56,101,169,193,12,118,35,190,53,221,29,247,240,130,168,59,118,43,179,216,32,190,217,132,116,182,178,177, + 237,173,207,203,61,177,225,42,61,94,157,113,74,72,72,84,31,134,97,250,16,66,58,18,66,94,161,148,222,121,17,154,28,199,185,2,112,36,132,92, + 166,148,106,171,171,67,8,249,16,192,184,194,197,77,148,210,47,158,119,108,132,16,47,0,238,133,139,73,148,210,184,231,213,252,127,78,88,169,11,75, + 23,39,205,91,58,117,168,2,21,129,189,253,1,192,202,210,81,80,64,5,194,2,102,45,250,245,234,14,103,87,119,192,156,15,152,242,1,179,14,48, + 107,1,179,14,105,137,143,1,147,22,184,127,4,60,165,74,75,247,3,67,54,16,189,7,93,155,120,195,69,163,194,148,126,65,206,27,142,70,111,218, + 116,252,78,55,0,195,170,52,86,74,209,178,97,93,172,218,164,141,58,24,145,210,19,0,66,27,59,31,109,25,228,83,115,229,86,125,84,216,141,140, + 87,0,160,87,176,230,72,139,122,30,222,34,170,223,148,91,164,180,189,103,173,186,68,184,182,30,98,78,28,114,114,116,136,123,184,13,14,53,154,50, + 130,136,142,149,109,111,197,98,230,187,115,150,202,242,115,146,141,130,41,85,112,102,50,57,78,41,18,36,156,50,104,197,44,97,234,155,175,10,31,204, + 91,52,19,192,168,138,116,130,92,49,121,217,178,149,13,219,54,11,116,77,218,55,133,228,101,38,131,103,213,202,126,173,219,194,222,63,72,76,62,185, + 140,40,106,119,131,189,83,109,196,159,255,1,143,46,254,72,218,53,25,168,252,110,135,252,85,148,99,180,252,93,72,187,158,29,90,236,170,237,237,233, + 65,169,8,81,164,160,162,128,55,6,247,192,71,187,239,67,16,4,12,234,217,174,235,210,9,93,168,40,138,160,84,68,108,82,122,254,175,151,162,186, + 198,100,208,75,149,29,59,37,56,19,210,170,115,187,27,17,23,3,205,209,63,163,217,168,197,81,4,56,91,252,56,208,238,234,177,239,2,129,205,149, + 73,149,9,33,132,212,119,133,240,232,232,18,120,119,24,207,174,223,113,212,37,59,53,126,244,190,109,107,7,175,91,191,254,123,0,19,171,170,21,236, + 70,124,95,233,217,253,151,197,27,246,215,122,189,123,224,131,146,143,217,105,28,250,46,249,241,198,91,7,214,205,13,30,31,66,50,55,92,167,87,170, + 53,96,9,9,137,106,161,82,169,204,27,55,110,180,30,61,122,244,145,194,235,248,61,119,3,96,133,66,33,126,251,237,183,236,168,81,163,154,23,154, + 173,124,75,53,188,188,188,58,0,248,188,40,67,131,16,242,185,175,175,239,60,0,16,197,103,126,231,101,11,130,48,42,46,46,174,204,217,162,34,250, + 244,233,227,9,192,183,132,166,47,33,196,183,172,231,218,219,219,11,109,218,180,121,116,232,208,161,4,75,199,254,255,9,74,105,34,128,23,146,163,21, + 245,100,207,148,38,134,196,60,0,136,170,194,142,159,154,242,211,155,133,37,91,22,188,182,164,65,45,71,228,106,141,56,126,229,17,4,193,12,129,231, + 11,35,91,60,4,222,140,158,33,206,104,163,159,136,175,14,221,1,47,136,139,43,210,44,141,137,138,35,26,119,27,186,91,20,169,66,41,99,178,3, + 106,58,185,190,63,40,132,153,210,175,1,116,38,126,104,144,27,249,245,118,50,125,170,25,105,185,154,34,255,236,49,149,181,78,40,99,93,21,203,91, + 3,221,72,203,225,125,186,219,81,67,54,204,105,247,145,155,111,198,253,116,51,146,244,89,80,146,167,47,85,87,158,166,72,209,168,134,135,135,245,185, + 93,51,30,58,113,57,156,43,199,203,20,148,151,9,34,101,145,117,219,224,20,216,157,43,202,219,170,104,156,86,106,219,215,58,244,8,213,60,249,97, + 60,177,10,232,9,215,38,53,241,240,244,22,164,92,57,132,188,188,28,162,204,206,130,155,83,29,244,26,53,12,95,12,107,142,220,156,92,176,137,49, + 26,133,76,105,95,158,38,21,48,106,217,210,207,60,56,150,41,120,61,139,110,130,25,58,131,1,16,120,168,56,17,132,22,61,102,134,96,54,169,27, + 13,156,241,22,128,75,101,105,150,228,118,50,221,209,192,149,180,135,104,14,164,102,29,8,112,54,50,133,22,155,159,32,55,50,162,105,207,49,237,41, + 193,153,138,142,189,60,130,157,208,167,153,175,141,181,117,78,20,226,246,190,131,24,168,168,91,219,113,24,241,198,100,245,134,13,27,250,18,66,38,149, + 204,81,43,169,249,74,67,135,225,10,153,108,22,0,100,229,229,111,169,235,227,54,110,246,135,83,106,49,114,117,177,126,81,36,43,63,47,215,124,235, + 196,214,187,93,58,117,104,124,237,244,241,55,222,10,38,247,215,222,42,152,50,174,234,103,201,18,36,77,73,243,101,104,106,52,26,191,90,181,106,205, + 51,155,205,29,228,114,185,155,201,100,130,40,138,73,10,133,226,204,163,71,143,62,206,206,206,126,80,214,118,127,199,177,219,216,216,144,222,189,123,59, + 174,92,185,146,159,58,117,234,9,66,72,103,74,233,227,231,209,180,179,179,67,175,94,189,228,171,87,175,166,147,39,79,110,65,8,185,68,41,213,89, + 162,41,147,201,182,159,61,123,22,187,119,239,6,0,68,71,71,195,223,223,223,186,172,109,31,62,124,104,221,169,83,167,237,40,117,69,143,210,154,55, + 111,222,244,251,249,231,159,177,119,239,94,0,192,157,59,119,16,16,16,80,230,120,206,158,61,203,142,28,57,210,15,192,83,70,235,175,120,143,254,205, + 84,154,163,21,22,22,70,67,67,67,73,233,191,203,224,190,183,131,162,9,244,2,0,88,236,246,111,39,209,165,33,30,178,87,126,217,187,166,131,74, + 206,96,254,198,247,99,83,51,114,91,113,4,34,0,240,20,140,131,141,226,194,226,209,33,222,153,121,122,28,188,28,127,58,50,217,178,16,105,100,2, + 61,1,160,248,196,31,236,68,2,70,127,113,98,231,206,153,175,52,154,214,175,17,126,58,255,104,26,128,74,187,190,83,81,4,21,249,226,228,119,0, + 128,40,2,34,143,18,231,85,136,160,5,235,68,203,34,90,157,8,225,50,93,209,203,81,173,88,61,97,194,155,118,230,212,187,200,48,202,17,155,169, + 71,146,78,134,60,206,21,241,81,55,5,134,224,68,101,90,132,32,7,130,222,222,81,97,195,4,119,127,171,70,206,177,89,153,10,202,179,118,253,63, + 181,79,251,101,249,35,94,151,170,37,4,149,94,172,91,163,177,247,215,167,63,98,179,51,211,96,239,222,0,175,12,237,131,133,161,65,200,205,209,34, + 245,124,24,173,235,97,71,30,159,249,30,179,123,213,71,122,114,34,12,102,128,104,13,25,122,163,62,175,60,77,202,96,253,212,15,166,143,240,241,112, + 177,46,42,42,160,162,128,144,250,181,209,189,67,75,156,56,123,14,191,223,140,134,88,88,84,64,69,17,113,41,153,201,122,147,176,197,162,23,84,224, + 65,205,207,166,225,21,230,101,89,60,101,216,208,141,168,5,96,110,171,186,182,99,103,246,241,177,181,86,18,232,205,2,244,70,51,114,207,173,134,83, + 173,134,80,171,84,164,9,116,28,80,246,107,171,224,200,172,253,191,92,14,18,19,34,240,197,188,169,243,71,244,235,108,99,45,22,164,219,81,190,192, + 156,219,217,59,244,253,236,187,35,19,126,220,188,252,220,230,175,62,187,58,103,193,167,142,67,70,142,104,243,205,170,229,29,0,252,100,233,184,37,36, + 254,9,12,25,50,68,149,156,156,124,50,52,52,52,168,123,247,238,234,246,237,219,67,171,213,226,248,241,227,208,106,181,62,53,107,214,244,57,126,252, + 248,192,86,173,90,221,246,242,242,234,180,103,207,30,75,114,104,57,252,121,145,119,17,0,79,8,65,225,58,2,64,164,213,188,206,45,195,48,232,220, + 185,179,235,218,181,107,83,223,126,251,237,112,66,72,71,90,112,153,177,231,162,67,135,14,138,117,235,214,25,39,77,154,212,130,16,114,145,82,106,168, + 234,182,121,121,121,242,26,53,106,192,197,197,5,130,32,64,171,213,226,192,129,3,200,206,206,134,40,138,176,178,178,194,167,203,54,34,234,234,73,92, + 186,116,9,217,217,217,242,202,52,227,226,226,72,72,72,8,180,218,130,217,76,189,94,143,240,240,112,24,12,6,240,60,15,142,227,48,253,147,21,136, + 190,114,18,215,174,93,67,92,92,220,75,185,218,136,5,94,228,95,197,75,175,58,20,4,254,163,13,91,119,94,248,104,226,48,76,30,222,173,230,199, + 107,126,236,118,59,149,110,5,128,32,23,50,250,213,206,117,189,237,213,50,44,252,225,10,64,233,71,207,187,191,91,233,52,186,129,59,153,182,255,210, + 227,147,179,134,53,65,109,15,59,255,58,117,136,34,38,166,10,215,20,20,121,56,216,40,235,133,54,118,62,10,81,132,189,173,50,16,2,15,123,27, + 101,189,94,193,154,35,0,96,175,150,7,150,21,249,42,143,230,222,242,241,106,37,55,222,186,169,135,247,235,125,187,91,245,238,59,208,202,70,198,35, + 253,210,113,228,200,188,96,118,244,129,193,156,129,184,7,49,194,47,23,255,136,79,203,53,188,95,233,48,41,78,199,63,184,227,226,215,168,187,67,218, + 161,217,41,126,99,126,240,101,32,50,185,223,15,72,182,118,109,97,117,249,222,131,60,145,62,27,209,41,77,78,118,246,35,179,0,15,157,192,217,198, + 252,246,29,102,246,106,136,204,140,20,232,77,60,178,117,188,201,221,94,165,52,60,184,5,131,137,135,209,44,66,102,95,3,199,47,220,76,19,205,230, + 35,229,105,198,164,209,107,0,108,74,174,171,227,66,66,102,216,89,93,131,89,135,199,113,9,216,26,118,161,73,225,243,170,13,21,249,130,233,231,66, + 138,146,228,171,147,4,95,223,141,180,176,82,201,191,254,124,218,200,160,214,1,142,74,49,238,2,136,104,130,181,192,65,167,16,160,169,89,27,162,49, + 151,230,235,245,89,145,64,185,111,62,11,202,17,153,10,12,39,195,43,141,221,108,60,172,204,16,238,133,129,169,55,16,16,11,188,89,118,78,230,213, + 63,206,255,124,191,71,135,214,33,167,143,236,123,112,237,210,249,152,22,45,155,215,23,41,234,84,247,181,144,144,248,59,9,12,12,116,215,104,52,145, + 31,124,240,129,227,128,1,3,176,127,255,126,228,228,228,96,203,150,45,88,185,114,37,22,44,88,0,179,217,140,13,27,54,168,247,237,219,215,98,237, + 218,181,113,62,62,62,13,30,63,126,156,84,137,52,1,160,4,32,67,193,185,139,0,16,15,31,62,140,222,189,123,227,240,225,195,98,225,58,129,16, + 98,182,196,204,20,193,48,12,20,10,5,66,67,67,93,100,50,25,198,143,31,255,27,33,164,61,165,213,47,128,97,89,22,114,185,28,125,250,244,81, + 40,149,74,140,25,51,166,21,33,228,2,173,226,117,109,121,158,103,227,226,226,144,157,157,141,238,125,251,98,197,226,197,232,220,185,51,186,119,239,14, + 74,41,194,195,195,209,173,109,48,134,253,175,19,254,248,227,15,240,60,95,165,243,122,82,82,18,146,147,147,241,74,223,190,216,184,118,45,90,182,108, + 137,122,245,234,129,231,121,156,60,121,18,131,123,182,133,170,127,55,68,71,75,23,158,168,34,47,44,71,235,185,185,149,66,47,6,185,144,67,195,123, + 182,232,211,183,93,16,54,238,250,229,179,160,32,178,19,0,156,108,149,159,190,214,185,54,110,63,201,196,47,215,18,14,221,78,165,47,228,154,128,162, + 0,103,39,59,53,192,42,160,51,137,188,221,125,84,154,192,44,82,10,117,135,25,120,181,239,237,154,45,131,106,214,44,170,58,180,233,189,28,163,111, + 222,243,110,94,207,221,27,130,25,16,204,176,27,246,3,240,73,153,145,220,167,104,231,167,60,49,227,253,105,109,122,245,31,106,165,80,107,32,228,196, + 194,156,116,19,233,119,79,67,171,246,71,210,227,251,216,125,236,82,246,221,184,244,28,134,193,241,228,108,195,135,49,25,180,220,104,81,17,122,51,22, + 207,155,253,126,232,238,157,187,108,149,181,219,145,152,213,189,179,21,28,175,116,241,107,202,228,171,156,233,162,45,187,236,180,70,44,169,76,39,95,155, + 243,99,248,241,163,195,234,250,181,179,125,248,123,24,116,122,3,12,102,160,65,139,78,16,4,170,32,12,17,237,88,150,164,164,103,130,152,133,228,51, + 215,31,38,158,189,126,159,53,216,86,174,93,18,142,176,239,246,237,212,24,48,235,240,191,14,13,177,226,251,95,222,1,48,198,18,141,103,16,11,34, + 90,20,104,215,192,149,124,3,160,221,149,3,43,3,155,245,159,10,88,16,209,10,118,33,189,130,235,120,126,183,226,211,25,142,78,94,254,44,17,205, + 160,238,141,128,156,56,74,226,46,64,83,163,21,4,207,54,216,240,213,151,121,162,72,119,86,212,218,130,10,60,132,7,191,130,191,241,29,242,243,114, + 32,228,167,3,32,96,51,239,67,20,10,140,150,96,141,189,135,119,111,235,254,193,251,83,124,125,189,125,28,163,239,68,101,118,106,223,92,229,238,230, + 18,184,144,16,102,190,133,201,246,18,18,127,55,122,189,254,199,165,75,151,58,246,233,83,208,142,40,47,47,15,23,46,92,192,166,77,155,96,109,253, + 244,247,100,239,222,189,65,41,117,156,63,127,254,143,0,90,151,167,217,170,85,171,190,107,214,172,73,104,220,184,241,125,20,152,45,57,0,230,214,173, + 91,76,108,108,44,113,112,112,160,158,158,158,230,132,132,4,17,128,240,198,27,111,176,54,54,54,117,243,242,242,78,89,50,118,66,8,20,10,5,20, + 10,5,134,14,29,234,194,178,44,25,55,110,220,201,66,179,85,237,107,137,42,20,10,200,229,114,12,30,60,88,65,8,33,227,198,141,43,50,91,166, + 202,182,21,4,129,59,124,248,48,174,92,185,130,5,141,27,99,90,141,26,112,116,116,196,201,147,39,65,41,133,181,181,53,50,50,50,176,115,231,78, + 116,233,210,5,60,207,87,26,209,2,128,189,123,247,34,34,34,2,159,52,107,134,105,26,13,108,108,108,16,30,94,48,27,168,84,42,241,248,241,99, + 132,135,135,163,83,167,78,213,61,236,255,87,188,144,28,173,78,132,112,196,13,238,38,163,14,148,167,0,129,103,80,16,145,223,190,93,249,7,165,52, + 12,131,217,95,109,61,20,186,124,106,95,50,190,95,19,207,143,191,251,109,18,0,140,29,20,80,67,173,228,176,234,167,219,148,97,48,219,82,221,178, + 8,10,34,114,134,193,164,238,45,235,33,33,203,136,152,132,172,95,111,83,90,233,52,26,0,252,178,252,85,108,59,120,50,118,229,54,125,20,165,20, + 246,54,202,122,163,111,196,120,127,119,56,226,201,178,221,250,40,42,82,216,171,101,129,99,254,104,91,105,213,97,115,111,249,248,143,102,124,216,182,223, + 152,15,84,124,212,30,24,99,142,65,52,233,144,99,146,35,139,117,71,220,147,39,88,180,225,80,108,142,214,56,236,86,138,101,6,51,58,141,230,5, + 185,144,1,139,22,206,58,177,248,211,249,54,249,247,79,230,177,132,215,177,62,29,185,79,23,44,39,185,6,227,208,152,140,202,203,139,13,182,88,178, + 116,217,87,161,111,142,26,24,21,224,223,209,73,72,120,224,164,207,201,73,249,225,104,132,59,10,126,41,18,0,136,137,75,71,106,182,150,23,120,243, + 41,91,25,62,142,172,74,116,176,144,218,110,196,101,64,251,70,35,93,108,229,208,229,101,193,213,86,134,158,45,235,140,172,237,70,102,220,79,166,21, + 54,131,171,16,209,12,106,214,225,226,146,46,129,84,48,7,66,48,195,116,99,187,197,50,148,96,218,228,14,54,118,14,198,135,12,180,214,128,149,51, + 136,157,15,160,241,37,178,250,67,145,112,63,146,127,103,228,168,244,7,143,226,190,117,182,66,197,211,218,212,12,33,233,26,132,252,116,228,107,181,16, + 242,51,10,126,130,167,220,126,58,255,79,20,0,67,14,64,121,128,146,130,226,144,231,40,174,144,144,248,59,121,252,248,241,107,31,125,244,209,217,150, + 45,91,186,57,59,59,163,97,195,134,56,120,240,32,62,248,224,131,226,231,52,110,220,24,148,82,100,100,100,96,233,210,165,73,9,9,9,175,85,164, + 25,21,21,117,103,219,182,109,237,131,130,130,76,114,185,60,11,128,50,43,43,75,149,145,145,65,244,122,61,68,81,20,53,26,141,144,144,144,96,30, + 54,108,152,225,252,249,243,117,180,90,237,19,75,198,77,8,41,142,104,41,20,10,204,157,59,55,41,60,60,60,135,101,89,119,0,95,3,24,94,157, + 215,131,101,217,98,205,217,179,103,27,127,253,245,87,51,203,178,10,0,65,0,44,138,228,243,60,143,102,205,154,225,216,233,171,56,252,203,121,228,36, + 220,193,164,55,95,67,195,134,13,113,236,216,177,234,12,15,0,16,18,18,130,163,225,103,113,246,202,117,60,142,190,129,119,38,189,137,6,13,26,224, + 232,209,163,213,214,252,255,6,33,196,3,64,104,201,117,165,251,104,117,10,11,11,43,250,102,127,198,190,214,119,33,33,158,117,21,219,231,247,170,83, + 95,214,125,62,136,204,10,123,252,143,182,157,189,104,117,84,67,55,50,234,102,114,229,213,97,37,185,149,76,35,27,184,146,29,215,255,8,28,249,191, + 150,53,177,241,160,122,46,0,12,109,239,135,203,119,83,113,41,58,101,71,100,10,141,180,248,72,75,209,208,141,168,65,177,99,233,187,253,58,249,120, + 185,99,211,254,179,32,4,63,86,101,91,74,41,109,25,228,131,149,219,74,87,24,186,123,47,219,173,143,58,118,43,167,23,0,244,168,111,125,164,121, + 29,7,239,202,154,118,90,41,184,9,189,6,190,170,226,163,15,2,143,194,65,120,3,116,38,17,137,105,185,200,215,212,196,201,11,215,117,217,122,227, + 212,72,11,77,86,17,183,83,233,253,198,30,228,137,86,171,243,80,187,212,209,115,68,164,121,122,17,151,111,63,202,142,76,172,90,169,114,76,12,53, + 182,246,34,237,191,217,186,123,158,76,174,24,202,18,16,87,141,181,203,55,43,62,129,173,173,13,68,99,30,160,77,197,128,183,23,165,222,140,55,249, + 1,64,128,51,177,233,80,91,190,149,99,72,220,175,247,140,115,42,219,7,49,99,226,168,158,141,101,162,81,139,119,151,238,194,250,25,253,240,106,215, + 250,178,176,115,209,19,1,124,92,157,99,7,10,162,71,212,172,67,235,89,167,163,8,112,150,2,237,174,236,254,52,16,184,90,101,141,166,132,200,56, + 15,82,191,145,183,181,92,140,59,7,49,238,28,101,107,182,5,241,238,64,136,123,51,250,245,231,11,180,27,55,110,58,46,50,88,88,89,171,12,0, + 16,69,1,124,236,37,80,222,12,29,231,0,176,10,8,121,137,224,19,175,22,244,96,3,192,230,97,64,247,208,198,65,186,236,84,253,195,199,241,25, + 255,235,209,182,158,46,55,67,159,148,156,22,181,81,138,102,73,252,11,161,148,222,183,183,183,127,165,119,239,222,191,28,59,118,204,49,56,56,24,0, + 112,229,74,65,33,109,179,102,205,16,16,16,128,228,228,100,12,31,62,60,45,49,49,241,149,202,42,252,114,115,115,239,239,221,187,215,53,47,47,175, + 201,220,185,115,147,125,124,124,114,244,122,61,201,202,202,18,121,158,135,131,131,131,162,113,227,198,104,211,166,77,222,249,243,231,125,99,99,99,115,0, + 60,180,100,220,122,189,30,89,89,89,250,208,208,208,148,149,43,87,250,36,38,38,218,71,69,69,253,104,54,155,191,5,80,173,169,195,252,252,124,100, + 101,101,9,189,123,247,54,174,90,181,202,42,41,41,73,22,21,21,149,100,50,153,98,81,193,5,138,75,83,242,244,114,253,250,117,156,186,26,7,206, + 168,131,34,53,1,23,247,239,69,223,9,111,129,231,171,158,194,82,154,235,215,175,227,64,248,69,88,43,57,220,185,19,137,189,123,247,98,210,164,73, + 207,165,89,77,42,244,34,255,112,66,41,165,27,74,39,197,3,133,70,43,52,52,244,20,10,163,21,37,169,83,135,40,148,121,152,223,179,89,141,233, + 67,219,213,97,205,57,9,16,5,17,172,12,112,117,182,195,246,237,59,252,118,236,218,117,33,164,134,236,43,145,231,103,223,76,182,168,116,117,254,242, + 93,103,135,110,127,191,19,55,169,87,160,35,0,200,57,6,171,14,70,242,0,230,87,255,88,129,214,94,68,149,103,198,120,119,39,205,220,143,198,133, + 58,118,106,22,128,83,151,110,225,171,189,23,78,43,82,176,173,170,58,84,52,163,180,127,42,171,234,16,98,229,121,151,130,64,221,229,214,14,48,61, + 250,13,48,233,161,55,152,16,155,46,32,54,67,15,78,45,199,149,232,56,157,83,18,14,85,42,84,14,132,16,210,174,182,202,115,238,103,203,188,244, + 186,60,62,39,51,141,151,43,46,202,212,86,202,196,202,183,254,147,11,113,84,223,209,79,222,148,66,100,229,10,154,63,243,189,215,173,227,34,143,193, + 159,77,0,161,20,86,245,67,97,107,197,202,219,251,202,159,0,128,175,187,70,177,116,225,7,154,169,51,22,86,154,3,22,68,136,188,97,115,247,169, + 193,62,14,56,29,17,133,211,55,31,71,158,190,114,167,65,231,134,158,8,240,178,159,18,68,200,146,219,85,8,165,151,9,229,1,179,190,184,234,48, + 200,141,140,104,62,116,78,153,213,134,229,225,11,136,209,2,5,97,89,128,48,5,21,144,177,231,192,217,215,166,59,118,31,200,223,180,105,219,39,183, + 83,171,94,156,33,240,60,111,50,27,193,216,250,32,226,193,85,125,139,54,157,84,214,148,194,252,228,66,113,142,150,141,90,21,82,223,91,83,123,247, + 177,223,206,202,100,156,178,113,128,87,157,216,39,143,19,25,130,152,106,188,10,18,18,255,8,178,178,178,110,168,213,234,158,141,26,53,218,242,238,187, + 239,218,142,26,53,202,243,205,55,223,100,0,32,57,57,89,92,185,114,101,194,215,95,127,157,157,150,150,54,198,100,50,85,218,32,148,82,74,9,33, + 231,55,111,222,156,122,234,212,169,6,173,90,181,82,53,107,214,76,112,112,112,224,148,74,165,96,52,26,245,209,209,209,226,253,251,247,61,179,178,178, + 238,2,136,177,244,138,21,90,173,22,126,126,126,15,141,70,227,185,25,51,102,188,254,195,15,63,40,15,29,58,52,220,108,54,207,168,172,82,176,60, + 242,243,243,81,171,86,45,157,40,138,153,51,103,206,244,218,182,109,27,115,248,240,97,15,147,201,116,167,58,9,251,28,199,33,51,51,19,249,73,145, + 80,197,221,69,35,107,6,65,14,54,176,179,179,123,46,83,148,157,157,13,104,227,113,246,236,117,128,231,161,209,104,160,209,104,94,186,209,42,207,139, + 252,75,40,206,209,42,186,175,180,51,124,3,87,50,201,65,129,149,19,66,235,200,125,189,189,96,136,187,130,235,177,121,152,221,170,197,109,86,105,171, + 159,240,90,191,102,3,7,215,66,167,54,205,137,175,135,102,202,146,229,235,222,110,224,70,62,136,76,166,171,170,50,162,200,20,250,160,190,43,217,244, + 219,141,184,137,94,106,29,68,145,226,183,155,137,184,249,40,115,211,31,41,180,204,146,223,114,199,234,73,186,113,96,118,81,74,85,26,107,235,220,198, + 33,129,206,221,90,135,48,175,116,108,6,57,11,156,189,124,29,211,150,255,120,81,20,105,104,68,21,167,13,11,42,12,159,254,63,40,168,48,52,63, + 85,97,72,41,165,5,85,135,21,7,31,88,150,36,229,63,254,221,93,230,228,15,93,204,111,120,148,41,226,113,74,46,114,56,119,24,226,227,1,42, + 62,57,73,105,181,63,213,206,206,206,174,126,65,1,117,86,111,221,11,83,126,54,30,156,220,130,188,204,68,124,250,205,193,58,94,94,94,29,227,226, + 226,78,85,85,139,16,18,240,235,161,29,174,160,0,43,83,226,224,234,221,176,119,182,130,139,181,28,162,46,21,19,166,142,210,244,234,62,74,3,0, + 143,239,92,131,143,186,106,223,65,38,39,12,28,218,185,158,61,204,58,108,61,122,77,207,0,175,108,59,30,25,211,57,208,94,53,180,157,143,195,199, + 9,89,131,80,205,166,162,69,17,173,34,170,83,109,184,135,82,161,190,11,137,217,117,62,197,122,112,247,166,106,57,71,8,205,139,7,181,114,198,186, + 173,123,242,20,230,178,231,223,203,195,104,162,139,94,251,42,98,22,0,100,27,176,37,97,245,254,9,75,103,140,173,163,74,185,8,8,5,159,23,173, + 78,127,120,246,202,31,121,189,222,160,24,55,168,67,39,57,49,41,246,132,157,61,207,154,202,190,106,130,132,196,191,133,252,252,252,8,66,72,195,15, + 63,252,112,196,172,89,179,58,88,91,91,251,1,128,86,171,125,96,54,155,79,3,216,97,137,217,40,52,78,247,8,33,15,30,62,124,232,254,195,15, + 63,104,240,103,63,71,29,128,108,20,52,222,172,86,197,33,207,243,57,60,207,47,167,148,110,246,241,241,233,242,248,241,227,218,131,7,15,102,182,108, + 217,242,46,96,89,30,106,9,77,158,231,249,135,148,210,56,31,31,31,167,216,216,88,245,128,1,3,200,119,223,125,87,11,85,172,220,103,24,70,32, + 132,128,16,2,165,82,137,51,103,206,96,72,104,119,252,17,150,133,96,123,27,180,24,51,1,187,78,156,0,203,178,32,132,128,101,89,139,206,35,28, + 199,225,236,217,179,120,117,248,96,40,57,64,163,209,224,195,15,63,196,79,63,253,4,142,147,174,210,87,85,170,151,163,69,240,241,137,45,139,228,16, + 204,248,121,203,151,56,116,43,207,120,39,21,179,235,165,98,229,94,228,138,169,203,183,77,60,113,246,214,23,111,12,235,163,238,210,185,59,186,116,234, + 204,53,104,222,113,46,128,98,163,85,216,244,173,220,94,27,130,136,79,54,28,141,154,176,235,100,52,129,41,23,195,122,52,167,130,136,79,42,58,152, + 178,52,53,86,54,187,206,94,184,224,0,83,30,30,93,251,85,85,203,175,14,32,152,112,239,222,93,124,189,117,191,120,242,242,157,237,70,30,239,198, + 100,148,221,153,183,220,113,138,60,52,214,138,122,189,130,53,71,68,80,216,171,229,129,84,20,96,175,150,5,246,168,111,125,132,82,74,109,173,100,129, + 84,120,214,187,149,214,212,25,249,245,91,55,111,90,54,118,236,88,235,180,184,36,36,228,220,66,158,162,6,204,234,154,136,185,118,90,151,111,224,43, + 61,137,87,244,122,166,165,165,165,68,92,202,192,174,111,22,195,108,52,32,37,174,192,171,38,164,229,192,206,185,198,5,75,52,77,188,152,221,127,212, + 120,185,194,10,86,163,7,245,81,68,167,26,208,220,203,22,0,64,243,82,241,71,248,89,116,210,158,2,0,220,143,101,224,19,226,89,165,113,218,170, + 228,239,246,106,90,3,15,158,36,226,76,100,252,214,251,233,52,161,182,19,217,26,147,144,53,177,95,43,111,172,248,233,246,59,40,199,28,149,167,25, + 228,70,70,0,104,87,144,12,175,3,5,218,5,185,145,17,85,169,52,44,75,147,147,99,228,178,35,143,231,236,249,61,173,223,244,145,237,237,218,180, + 233,173,0,111,68,174,206,96,190,157,73,115,44,209,60,241,128,238,4,176,179,232,177,96,55,114,96,250,226,13,199,22,189,213,167,78,97,57,58,54, + 94,161,167,0,156,154,214,94,249,69,160,143,166,246,190,19,17,167,51,50,181,155,55,220,250,243,178,75,149,253,31,85,7,73,83,210,124,25,154,133, + 166,103,123,225,237,69,106,198,23,222,94,136,102,33,254,69,81,48,147,201,52,121,206,156,57,135,246,237,219,103,191,115,231,206,247,9,33,223,80,74, + 179,45,213,164,148,158,44,250,219,104,52,222,158,61,123,118,243,253,251,247,203,118,236,216,225,75,8,121,66,203,248,225,95,90,83,20,197,132,102,205, + 154,57,246,237,219,23,130,32,224,238,221,187,120,28,27,139,110,19,223,129,189,189,61,78,223,184,129,59,119,238,96,222,188,121,48,155,205,56,112,224, + 192,51,29,222,75,107,114,28,103,170,83,167,142,188,127,255,254,224,121,30,247,239,223,71,124,124,60,166,77,155,6,141,70,131,136,136,136,98,205,180, + 180,52,112,28,247,204,76,195,95,241,89,250,175,82,145,93,21,32,152,145,125,98,62,86,157,129,201,100,70,96,100,10,45,57,231,189,174,145,19,249, + 249,198,173,168,7,17,231,186,40,144,114,179,96,27,11,136,78,163,137,205,107,114,185,48,229,218,225,254,17,60,76,206,205,139,78,163,22,77,117,1, + 0,21,5,2,83,62,144,120,5,231,79,159,194,201,139,215,241,251,205,40,225,124,68,244,46,70,196,39,183,211,232,93,139,53,41,133,77,232,10,188, + 126,243,158,119,243,0,55,111,8,60,168,104,134,102,216,14,140,185,221,198,187,121,109,123,239,130,72,150,25,14,227,126,5,150,169,42,212,251,253,137, + 105,67,59,63,229,160,220,172,244,86,93,59,182,182,214,212,239,133,180,123,209,184,123,253,172,46,226,86,204,249,223,159,152,44,138,150,148,166,70,141, + 26,29,186,118,172,135,97,19,62,130,41,63,27,247,79,110,70,94,70,18,206,92,176,65,84,78,78,107,0,167,170,170,117,254,177,185,1,0,180,245, + 149,63,177,37,6,247,177,253,251,66,69,244,16,13,57,32,249,105,136,137,55,102,15,250,38,86,0,0,181,146,112,214,52,219,174,42,186,65,62,78, + 254,106,214,140,109,39,34,33,138,5,151,111,18,69,172,219,246,107,204,196,79,94,109,130,32,111,135,16,66,8,177,36,228,79,40,218,255,190,107,97, + 160,254,151,185,128,104,194,217,41,142,129,237,87,101,180,71,53,35,99,55,227,105,60,128,137,245,61,201,250,41,171,142,206,109,118,226,118,187,247,199, + 245,179,3,125,254,10,221,91,201,244,97,176,27,233,57,110,193,183,123,204,2,158,10,3,106,243,140,135,231,174,62,42,106,13,166,203,27,165,174,240, + 18,18,47,157,146,223,59,137,137,137,199,253,252,252,226,15,28,56,224,163,84,42,25,189,94,223,14,168,126,106,7,0,36,37,37,165,213,174,93,91, + 191,111,223,62,43,181,90,77,140,70,163,3,170,144,251,149,151,151,55,97,204,152,49,235,101,50,153,75,225,56,33,8,2,247,197,23,95,200,4,65, + 96,25,134,17,88,150,53,31,62,124,152,23,4,33,85,175,215,79,168,76,147,231,249,152,183,222,122,171,78,101,21,138,59,119,238,4,199,113,38,158, + 231,165,84,134,231,160,252,147,7,197,194,182,175,206,159,15,128,128,98,65,41,147,5,0,184,145,78,19,26,184,146,105,13,154,119,156,95,180,141,165, + 3,208,11,194,224,230,13,3,118,2,128,129,10,175,90,186,61,0,228,24,116,67,27,55,111,189,75,164,148,227,41,221,196,136,216,167,231,241,71,85, + 42,237,202,35,33,37,43,162,232,66,209,34,232,159,211,133,133,109,28,40,165,180,120,186,240,75,21,210,178,13,149,86,143,156,125,96,232,222,220,91, + 62,254,248,185,107,19,4,129,186,179,44,73,210,25,249,245,207,107,178,0,32,46,46,238,84,144,43,57,126,35,196,173,135,115,97,227,241,180,124,32, + 45,31,199,227,82,114,79,85,71,51,75,107,238,55,247,171,159,14,42,100,44,7,74,11,26,138,82,10,189,73,200,40,50,99,141,156,136,231,135,7, + 248,157,44,75,30,87,166,119,233,78,226,138,97,75,194,63,136,124,148,185,233,97,38,189,5,0,15,51,233,173,186,78,100,110,76,82,238,7,183,30, + 103,126,105,105,94,5,37,56,211,124,216,252,103,214,89,162,81,22,127,36,208,235,0,6,52,112,37,221,135,189,255,245,251,132,224,133,92,126,226,86, + 50,125,8,160,105,233,245,27,175,23,68,182,94,196,62,36,36,36,158,31,43,43,171,137,51,103,206,92,145,155,155,59,135,82,250,92,38,171,8,91, + 91,219,200,57,115,230,4,102,103,103,223,173,106,111,46,74,233,37,0,13,95,196,254,75,104,166,3,168,118,187,10,137,103,41,213,67,11,192,159,57, + 90,197,39,207,191,226,6,160,155,164,249,242,53,253,253,253,41,10,127,160,253,147,199,41,105,74,154,146,166,164,41,105,74,154,255,165,27,128,241,165, + 215,73,153,110,255,65,162,163,163,255,173,85,27,18,18,18,18,18,18,255,58,74,70,180,170,92,117,40,33,33,33,33,33,33,33,33,81,57,180,84, + 239,172,146,16,0,221,202,217,168,202,213,4,132,144,50,53,42,25,84,133,250,146,166,164,41,105,74,154,146,166,164,41,105,254,247,52,43,211,182,196, + 127,252,83,40,221,168,244,169,229,191,120,174,242,95,49,47,44,105,74,154,146,166,164,41,105,74,154,146,230,223,171,249,111,190,161,84,110,86,201,101, + 105,234,80,66,66,66,66,66,66,66,226,249,8,43,85,121,24,86,244,135,100,180,36,36,36,36,36,36,36,36,158,3,90,173,206,240,18,18,18,18, + 18,18,18,18,18,149,82,81,31,45,201,104,73,72,72,72,72,72,72,72,60,7,180,130,170,67,201,104,73,72,72,72,72,72,72,72,60,7,21,69, + 180,72,97,118,188,132,132,132,132,132,132,132,132,196,115,80,186,205,3,0,48,0,16,22,22,70,75,222,75,72,72,72,72,72,72,72,188,76,254,205, + 94,132,16,50,190,40,170,85,242,111,64,154,58,148,144,144,144,144,144,144,144,120,46,164,28,45,9,9,9,9,9,9,9,137,191,136,210,61,180,10, + 219,61,0,248,211,104,117,42,12,213,117,122,169,35,147,144,144,144,144,144,144,144,40,224,95,235,69,104,169,203,239,16,66,158,77,134,15,11,11,163, + 161,161,161,228,111,26,163,132,132,132,132,132,132,196,255,115,254,205,94,164,68,84,235,169,136,150,84,117,40,33,33,33,33,33,33,33,241,130,40,50, + 92,82,195,82,9,9,9,9,9,9,9,137,23,64,69,57,90,204,95,188,227,110,146,166,164,41,105,74,154,146,166,164,41,105,74,154,255,101,40,165, + 27,74,220,18,75,62,246,151,26,45,9,9,9,9,9,9,9,137,255,207,72,70,75,66,66,66,66,66,66,66,226,47,66,50,90,18,18,18,18,18, + 18,18,18,47,144,146,57,91,146,209,146,144,144,144,144,144,144,144,120,177,132,21,153,45,169,234,80,66,66,66,66,66,66,66,226,5,82,152,16,95, + 208,176,20,64,153,149,3,148,210,240,170,10,86,167,250,160,50,125,73,83,210,148,52,37,77,73,83,210,148,52,255,123,154,149,105,91,226,63,254,41, + 16,66,198,151,238,14,95,188,76,41,253,203,110,0,186,73,154,146,166,164,41,105,74,154,146,166,164,41,105,254,151,111,0,198,151,117,79,41,125,241, + 57,90,77,9,177,122,209,154,18,127,63,132,16,55,66,136,219,223,61,14,9,137,255,42,132,16,23,34,87,79,248,187,199,33,33,33,81,61,138,114, + 178,74,53,47,125,177,57,90,65,132,140,27,23,236,242,175,84,6,41,0,0,32,0,73,68,65,84,77,67,66,236,110,82,154,95,209,115,93,93,93, + 215,171,213,234,81,249,249,249,90,66,136,88,180,190,208,9,150,188,46,208,253,148,148,148,246,149,237,91,169,84,174,116,115,115,27,151,151,151,151,79, + 8,161,132,16,16,82,112,185,164,210,247,130,32,196,165,165,165,53,179,244,248,254,73,16,128,117,118,115,187,44,99,217,26,150,110,43,136,226,195,228, + 164,164,214,85,222,23,33,139,9,193,244,194,191,63,167,148,126,100,233,62,255,241,16,194,86,229,105,193,128,109,52,48,76,96,152,119,100,192,26,131, + 40,126,3,0,160,84,168,238,174,141,151,73,29,66,17,66,8,52,148,34,155,18,92,87,180,160,49,213,213,123,30,8,33,3,101,50,89,63,59,59, + 59,155,244,244,244,83,0,118,2,24,238,228,228,212,49,39,39,39,207,108,54,255,68,41,253,177,58,218,141,3,200,12,43,133,236,13,157,209,188,244, + 90,52,221,220,212,159,56,129,96,137,66,193,181,215,25,248,207,175,223,165,155,44,28,43,65,65,250,3,0,80,90,248,229,97,9,123,171,248,190,3, + 192,1,7,135,0,165,139,221,47,50,5,251,48,43,57,111,212,224,148,148,216,193,207,241,190,151,132,16,210,26,214,94,63,181,12,125,7,0,214,191, + 8,205,234,224,226,226,242,58,195,48,159,81,74,33,8,194,236,244,244,244,45,47,66,151,16,50,27,128,125,225,98,22,165,244,179,231,212,123,12,192, + 187,112,241,9,165,212,231,121,244,254,63,67,8,89,183,127,255,254,137,157,59,119,198,138,21,43,176,110,221,186,71,169,169,169,75,0,108,165,148,26, + 95,182,206,191,21,90,98,218,176,52,47,204,104,53,32,164,247,235,61,91,174,159,60,180,55,153,250,250,156,10,77,150,139,139,203,183,175,188,242,202, + 171,91,183,110,149,69,71,71,91,249,250,250,130,97,152,98,35,84,242,251,178,86,173,90,98,121,58,69,176,44,187,106,192,128,1,99,246,238,221,171, + 142,136,136,80,215,175,95,191,88,79,20,69,148,254,254,245,245,245,173,80,79,163,209,92,97,89,214,11,120,214,164,149,247,183,32,8,113,233,233,233, + 149,154,55,66,72,79,0,51,43,123,30,128,37,148,210,99,21,61,65,198,178,53,18,18,18,92,171,160,245,20,53,107,214,52,85,245,185,5,145,44, + 76,23,69,202,0,0,195,144,25,42,149,234,27,189,94,255,164,232,113,0,160,148,38,91,50,134,26,53,106,12,162,148,78,0,64,9,33,27,226,227, + 227,247,89,178,189,157,157,221,21,133,66,225,197,113,92,241,155,81,242,125,41,189,44,8,2,53,153,76,113,25,25,25,22,27,236,83,0,121,5,232, + 192,179,236,84,39,103,231,246,17,199,143,91,7,7,7,51,44,203,126,4,224,27,75,245,74,98,188,76,234,8,102,12,209,153,149,125,148,62,11,2, + 12,143,23,68,91,201,12,135,140,151,201,158,151,109,182,8,33,163,71,143,30,61,117,233,210,165,206,10,133,130,217,189,123,119,192,180,105,211,6,174, + 88,177,194,121,232,208,161,182,70,163,81,156,49,99,70,16,33,196,149,82,186,214,18,237,22,245,72,171,192,58,30,243,62,24,219,5,111,205,223,57, + 185,73,61,146,102,173,150,175,27,208,181,142,125,72,29,7,76,255,234,252,187,0,170,108,180,8,33,132,227,184,214,158,158,158,254,122,189,158,7,0, + 87,87,215,226,127,116,150,45,240,79,70,163,209,152,145,145,177,199,146,177,150,197,7,42,85,203,150,246,54,39,230,143,24,109,149,147,153,225,182,42, + 236,224,141,189,112,109,52,24,120,244,188,218,132,144,169,170,154,237,63,91,244,233,66,149,206,200,243,207,171,247,60,48,12,243,89,124,124,188,7,165, + 20,30,30,30,159,1,216,242,130,164,237,139,190,135,9,33,246,149,60,183,42,120,151,208,243,174,228,185,149,66,8,81,113,12,243,150,66,38,235,33, + 8,66,67,0,96,89,246,166,209,108,62,193,139,226,26,74,169,254,121,247,241,15,102,250,196,137,19,187,207,154,53,203,119,250,244,233,152,62,125,122, + 173,141,27,55,174,95,180,104,209,12,66,72,35,74,105,222,75,214,249,87,82,81,142,214,11,49,90,65,132,52,235,26,82,119,223,148,215,135,65,220, + 187,146,224,245,57,229,62,215,197,197,229,219,214,205,154,189,177,117,235,86,0,192,168,126,253,208,163,69,11,216,218,88,67,161,40,24,14,161,4,114, + 153,28,253,167,189,87,233,190,9,33,159,15,28,56,112,228,222,189,123,109,0,96,221,186,117,24,56,112,32,28,29,29,161,86,171,33,151,203,33,147, + 201,158,186,175,12,150,101,189,226,227,227,93,85,42,21,128,2,227,39,138,226,83,183,18,243,178,224,121,30,254,254,254,149,234,22,50,51,59,59,187, + 131,86,171,173,112,190,215,207,207,15,0,42,52,90,69,124,246,233,39,16,121,45,56,14,224,121,192,96,98,32,150,241,219,222,211,211,19,111,189,245, + 214,51,198,211,18,250,244,233,75,0,236,245,244,244,220,151,146,146,226,75,8,222,4,170,21,233,122,251,238,221,187,54,0,16,16,16,240,22,0,139, + 140,22,199,113,94,55,110,220,112,85,42,149,229,70,46,75,152,96,152,76,38,52,105,210,196,162,147,152,27,224,157,193,48,111,54,110,218,116,252,188, + 126,253,172,174,92,185,162,100,24,6,60,207,227,139,47,190,224,41,165,246,65,128,221,109,32,167,60,13,66,200,44,0,175,163,32,74,187,137,82,250, + 197,83,143,83,132,232,204,202,62,247,243,250,183,104,89,107,6,110,71,222,108,81,219,230,0,108,57,67,12,128,151,106,180,236,236,236,250,173,88,177, + 194,101,211,166,77,57,119,238,220,49,125,249,229,151,117,7,13,26,228,11,192,252,222,123,239,197,212,171,87,79,190,98,197,10,151,31,127,252,177,11, + 0,139,140,22,207,224,147,209,131,123,64,103,98,96,48,241,46,30,46,182,219,63,26,215,73,6,106,196,134,61,17,48,155,197,205,85,213,42,140,100, + 181,30,60,120,112,237,29,59,118,112,81,81,81,92,96,96,32,68,81,132,32,8,48,155,205,0,0,81,20,81,183,110,93,75,134,89,38,111,0,1, + 206,110,142,39,90,247,238,101,229,161,82,194,49,51,21,99,229,156,237,22,181,225,123,0,109,170,171,75,8,177,1,167,218,90,167,243,148,110,139,166, + 191,106,21,159,170,197,147,52,94,70,134,236,101,233,158,193,47,36,82,102,41,148,82,112,28,135,216,216,88,184,186,186,90,57,58,58,38,2,88,144, + 145,145,81,238,175,245,127,59,132,144,22,10,142,219,183,109,243,42,247,150,109,218,176,110,30,174,136,190,251,4,28,17,186,221,248,61,162,211,27,147, + 222,159,66,8,25,68,41,189,252,119,143,245,69,227,209,246,237,1,30,237,222,89,71,168,136,133,171,15,230,46,254,124,165,122,226,155,163,217,105,211, + 166,161,102,205,154,190,3,6,12,248,28,192,164,74,117,90,189,61,192,189,205,228,117,160,20,243,191,62,152,187,232,243,149,234,73,213,208,249,175,242, + 220,70,43,136,144,218,13,106,186,30,95,60,125,146,140,30,249,142,201,79,79,65,121,86,198,213,213,117,125,175,94,189,70,109,217,178,165,120,93,235, + 224,96,12,232,210,14,174,78,26,168,173,21,5,167,35,145,224,250,157,135,85,50,4,53,107,214,156,184,111,223,62,155,162,101,79,79,79,200,229,242, + 226,91,73,147,85,116,43,29,249,40,11,149,74,133,240,240,112,112,28,7,150,101,193,113,92,241,173,228,50,203,178,112,115,179,40,117,105,137,70,163, + 105,148,155,155,107,151,149,149,5,111,111,239,28,0,55,74,60,222,40,53,53,213,206,18,65,145,215,98,218,216,250,144,25,47,194,40,107,1,29,215, + 22,231,127,255,3,135,142,157,66,124,66,18,218,181,106,140,215,70,12,198,137,19,39,32,8,150,125,127,83,74,147,9,33,159,255,239,127,125,103,0, + 132,116,237,218,53,107,242,228,201,76,84,84,212,200,1,3,250,7,223,189,123,15,0,192,48,100,58,33,100,149,5,145,45,5,0,156,62,125,26,0, + 148,22,13,170,16,165,82,137,11,23,46,160,104,154,152,97,24,48,12,3,150,101,241,243,61,103,104,141,12,242,147,111,225,157,62,222,240,243,243,3, + 195,84,158,146,216,9,80,157,7,6,16,153,108,154,135,167,167,111,199,218,181,213,225,225,225,44,0,248,248,248,208,196,196,196,172,3,7,14,228,114, + 192,58,31,74,183,86,100,178,188,189,189,219,50,12,243,89,209,107,78,8,249,220,215,215,119,94,209,227,162,40,98,68,119,71,217,148,41,83,229,45, + 59,21,252,56,105,217,119,7,114,238,47,174,79,50,102,105,170,243,154,60,15,57,57,57,187,234,214,173,203,166,167,167,159,7,240,216,222,222,126,222, + 204,153,51,125,23,44,88,240,240,187,239,190,91,12,192,115,233,210,165,157,180,90,237,110,75,116,67,2,73,239,182,77,131,91,213,242,169,137,95,78, + 95,134,74,33,179,127,255,205,62,176,181,229,240,233,234,48,241,94,92,198,228,235,209,116,107,85,180,10,77,86,139,193,131,7,251,238,216,177,67,1, + 0,55,110,220,64,82,82,18,92,92,92,96,101,101,5,153,76,6,150,101,33,147,201,44,126,13,74,243,6,16,160,169,233,116,233,192,129,159,172,28, + 29,237,177,250,189,41,24,157,154,2,123,91,27,152,243,180,21,135,198,43,62,142,250,176,114,15,235,255,230,66,215,113,253,91,168,126,143,74,70,74, + 46,69,154,78,142,86,53,106,216,1,200,124,238,193,91,62,166,128,65,131,6,169,4,65,128,86,171,197,201,147,39,53,86,86,86,26,47,47,175,249, + 40,44,83,175,10,86,86,86,201,122,189,222,21,0,84,42,85,138,78,167,115,3,144,163,84,42,139,190,167,243,10,247,87,165,233,196,114,166,9,159, + 148,136,100,61,177,224,48,75,107,55,111,209,188,81,248,143,123,127,176,201,206,77,130,189,67,10,24,100,99,195,134,53,176,178,178,195,252,249,179,184, + 135,221,186,212,232,217,123,80,56,33,164,219,127,206,108,81,178,161,91,223,81,142,86,106,91,0,128,200,155,177,101,227,20,48,12,131,121,243,230,161, + 65,131,6,227,9,33,115,40,165,25,21,203,96,67,195,14,67,29,21,170,130,183,88,20,204,248,102,231,7,5,58,31,77,192,240,190,126,227,175,127, + 79,142,54,168,141,92,0,160,20,58,25,131,39,104,65,83,138,52,194,194,194,58,134,134,134,158,42,111,249,95,64,113,223,172,162,229,162,63,184,176, + 176,48,26,26,26,90,236,60,74,47,87,68,99,66,156,221,52,234,240,117,11,166,216,112,23,195,88,221,147,123,72,208,11,197,255,57,180,84,137,166, + 90,173,30,181,101,203,150,167,124,152,183,155,43,228,114,25,100,114,2,251,246,125,0,0,89,103,14,129,144,178,77,86,105,77,173,86,171,191,118,237, + 154,205,166,77,155,224,234,234,10,95,95,95,168,213,106,168,84,170,167,204,85,73,195,85,218,104,149,214,44,122,156,227,56,48,12,131,19,39,78,128, + 231,121,12,30,60,248,25,147,197,113,92,153,198,173,180,102,137,245,199,8,33,55,40,165,29,10,79,192,55,40,165,29,75,236,187,167,139,139,203,76, + 0,75,170,170,201,178,20,172,254,60,68,175,149,224,98,167,192,40,11,193,111,103,35,176,101,253,10,0,128,111,96,115,12,25,208,167,56,26,87,21, + 205,146,212,168,81,99,103,74,74,106,175,46,93,186,32,51,51,211,188,96,193,2,52,106,212,8,245,234,213,43,243,249,85,209,164,148,38,223,184,113, + 163,166,78,167,171,210,180,99,89,154,132,16,108,223,190,29,122,253,179,81,125,135,142,139,240,193,64,31,140,121,103,43,62,191,179,27,107,215,174,173, + 240,216,213,64,35,189,166,238,42,5,203,55,90,58,123,178,242,213,87,95,101,199,140,25,131,39,79,158,96,236,216,177,250,19,39,78,24,147,18,19, + 127,82,136,226,106,211,211,198,184,92,77,165,82,185,237,216,177,99,216,189,187,192,151,68,71,71,195,223,223,223,186,228,243,197,140,61,200,125,188,26, + 151,126,142,66,203,190,59,112,233,231,17,16,178,194,100,205,252,145,93,209,177,63,47,101,105,82,74,119,3,40,54,81,132,16,171,229,203,151,247,7, + 112,176,240,49,0,88,110,137,38,0,48,20,99,70,14,233,15,78,110,139,200,232,56,116,109,223,4,30,110,174,184,122,43,6,247,227,51,146,25,130, + 49,29,27,43,151,228,234,140,115,174,69,211,111,43,209,36,94,94,94,1,123,246,236,41,254,30,41,50,85,69,6,171,104,185,200,120,87,117,156,165, + 121,3,8,176,245,178,185,244,201,154,182,214,151,110,126,15,127,159,222,112,232,221,7,155,78,156,192,221,91,145,122,99,62,223,213,82,77,0,32,132, + 140,148,185,55,91,191,96,225,103,170,122,181,156,152,223,174,198,33,203,192,66,199,171,160,39,214,208,61,58,86,27,104,245,251,203,122,223,11,199,20, + 48,112,224,192,243,63,252,240,131,125,108,108,44,78,159,62,13,95,95,95,228,231,231,87,250,131,183,180,166,94,175,119,45,49,173,87,148,218,240,153, + 209,104,44,122,51,138,254,17,203,157,78,44,165,249,204,52,97,117,114,178,202,248,158,87,168,228,242,61,7,126,220,105,115,59,234,52,26,135,180,130, + 141,38,8,162,144,132,244,140,60,100,222,75,192,167,159,126,142,249,11,102,227,224,254,189,54,245,234,135,236,35,132,212,45,57,141,248,50,223,163,191, + 68,147,208,241,225,63,127,191,142,80,17,186,228,40,165,76,251,64,61,106,196,32,118,216,176,97,56,120,240,32,34,35,35,215,149,103,178,74,106,18, + 138,241,183,78,239,94,7,74,161,75,137,82,202,117,15,212,163,71,14,97,95,27,222,3,23,127,93,133,30,141,31,220,242,116,197,128,204,194,201,67, + 142,69,186,82,133,115,86,151,201,197,18,102,235,36,0,82,194,96,157,196,159,57,152,255,120,104,137,190,89,165,41,142,104,89,98,176,0,32,128,16, + 27,181,66,126,105,203,252,183,61,213,79,34,57,195,173,11,72,48,136,244,155,71,188,120,137,16,171,8,74,117,165,183,201,207,207,215,198,196,196,88, + 189,62,96,0,218,4,7,195,195,201,9,117,189,188,96,165,84,64,33,255,243,215,167,37,175,44,33,132,214,171,87,15,125,251,246,133,76,38,131,90, + 173,134,141,141,13,20,10,69,153,209,172,170,254,202,165,148,130,101,89,220,186,117,11,143,31,63,134,189,189,61,206,157,59,135,174,93,187,62,19,213, + 42,28,135,5,163,254,115,58,178,140,245,199,80,197,41,195,34,4,129,32,143,134,64,245,104,50,242,73,19,24,12,60,12,6,3,190,61,107,194,229, + 24,45,76,38,35,12,6,67,185,251,44,15,66,8,227,233,233,57,202,223,223,255,173,17,35,70,152,21,10,5,180,90,45,242,243,243,17,25,25,105, + 238,213,171,119,214,255,254,215,87,115,232,208,33,74,41,62,183,48,79,43,189,70,141,26,53,11,167,103,211,45,57,222,18,227,43,54,49,165,121,125, + 249,109,112,108,193,123,178,110,221,58,8,130,0,74,105,185,111,146,158,144,95,22,44,90,166,89,186,114,51,52,142,110,56,117,234,148,112,244,232,209, + 92,2,68,223,141,140,92,254,63,224,240,30,160,202,185,109,0,144,153,153,105,229,235,235,11,47,47,47,136,162,8,179,217,92,28,125,73,79,79,135, + 78,167,131,163,117,22,234,56,121,129,207,61,137,196,91,11,225,97,19,133,173,199,140,230,166,1,184,110,201,190,254,10,40,165,223,1,248,238,185,133, + 8,106,184,123,214,4,67,205,136,75,78,199,144,126,61,192,202,109,16,243,56,13,205,131,107,123,140,25,220,214,131,3,143,183,23,238,120,11,192,183, + 149,201,229,229,229,9,81,81,81,184,113,163,192,239,218,217,217,193,218,218,250,169,255,113,134,97,158,43,162,85,100,178,22,173,235,106,205,200,180,200, + 17,194,177,105,123,4,26,7,246,197,55,23,47,235,133,228,140,110,95,234,245,209,150,104,18,66,228,96,21,95,123,182,24,51,242,235,79,223,81,103, + 230,232,113,242,106,60,114,140,28,242,69,21,140,140,29,226,174,124,175,255,227,216,178,28,96,118,181,199,94,85,60,60,60,38,136,162,56,159,82,154, + 53,112,224,64,183,29,59,118,56,196,199,199,35,34,34,2,243,230,205,75,21,4,129,167,148,18,74,233,194,231,221,23,165,84,196,159,6,235,133,65, + 8,145,169,85,120,199,217,142,244,227,24,59,95,62,39,239,97,154,145,254,148,207,139,95,83,74,205,21,109,203,48,204,184,189,187,214,121,58,187,136, + 232,228,210,5,137,201,38,44,122,111,52,210,211,115,241,237,198,197,0,20,48,241,44,58,116,26,4,87,215,26,24,255,230,120,247,117,235,191,121,27, + 192,151,47,250,56,254,46,18,207,173,217,79,8,9,119,113,113,137,124,123,252,120,23,95,223,87,161,82,169,176,115,231,78,236,88,189,90,88,9,12, + 89,79,200,111,19,40,221,95,161,206,197,63,117,166,76,156,232,82,191,254,68,40,149,74,252,122,244,59,232,147,182,231,134,182,129,41,95,143,208,90, + 125,169,227,163,159,73,134,76,134,123,0,32,83,33,81,6,164,148,146,251,87,25,172,34,74,87,26,2,127,38,200,87,123,234,144,202,20,55,55,78, + 29,238,227,6,3,49,158,253,25,241,6,81,88,122,215,196,94,205,166,31,220,46,195,100,1,0,195,48,162,183,183,55,186,52,107,134,1,237,219,131, + 227,56,168,20,114,216,170,172,64,133,130,72,86,209,212,97,5,231,196,210,7,7,0,112,114,114,130,92,46,47,54,88,85,141,102,149,167,41,138,34, + 56,142,195,141,27,55,208,174,93,59,212,172,89,19,187,119,239,70,207,158,61,159,153,74,180,212,100,1,5,70,171,228,52,94,137,36,249,74,147,224, + 75,163,55,18,164,25,67,64,72,48,120,30,16,40,96,208,235,65,41,64,41,96,54,25,161,215,235,139,247,89,149,41,89,15,15,15,111,63,63,191, + 143,103,204,152,94,63,36,164,49,82,83,83,33,138,34,172,173,173,145,159,159,15,59,59,59,180,105,211,230,225,194,133,11,19,41,197,120,75,147,225, + 159,151,162,215,252,248,241,227,79,77,27,22,221,180,137,113,24,243,238,247,80,112,5,83,75,69,57,60,21,192,116,238,208,22,231,175,70,243,99,63, + 92,105,144,165,71,44,113,23,197,45,113,64,181,143,139,82,138,180,180,52,36,39,39,163,95,255,254,216,241,195,15,120,244,232,17,130,130,130,208,185, + 115,103,184,186,186,226,209,163,71,184,124,198,0,67,102,6,50,140,17,80,219,182,196,129,83,49,134,185,107,141,127,75,213,33,0,16,66,250,1,24, + 109,103,103,231,151,159,159,159,200,243,252,30,0,123,0,12,225,56,110,136,90,173,246,200,201,201,121,128,130,106,162,159,42,211,83,41,84,78,74,149, + 29,68,222,0,150,229,224,227,227,11,42,24,145,145,173,195,248,87,251,226,242,181,63,112,240,248,69,222,96,22,191,170,194,240,40,203,178,52,32,32, + 0,41,41,41,144,201,100,176,178,178,130,141,141,13,14,31,62,140,193,131,7,23,155,172,234,26,173,55,128,0,59,111,155,139,159,173,41,48,89,73, + 9,137,72,142,147,193,213,217,29,171,190,94,161,205,124,148,212,114,51,96,145,201,2,0,40,29,79,119,25,49,183,209,172,113,221,148,215,239,165,224, + 94,92,46,114,77,50,228,11,42,152,57,13,98,207,111,209,69,157,88,217,153,82,122,183,90,3,183,16,81,20,23,198,199,199,187,114,28,231,206,243, + 60,98,99,99,113,229,202,21,76,158,60,57,57,61,61,189,19,165,212,242,99,68,193,116,97,81,36,75,165,82,165,0,229,78,39,102,149,136,100,101, + 85,32,89,230,52,33,33,164,182,175,151,237,137,141,43,166,121,55,111,217,134,81,115,118,153,121,247,146,218,157,61,125,170,205,228,21,223,190,77,8, + 233,65,41,189,95,158,168,82,38,235,213,170,109,91,14,52,25,156,162,29,62,95,58,12,169,105,57,200,204,200,133,92,110,13,163,153,133,32,18,180, + 105,215,30,223,109,221,133,6,111,142,101,21,50,89,119,252,135,140,86,33,139,191,254,250,107,239,122,245,234,97,203,150,45,248,109,219,54,188,150,157, + 141,83,12,195,154,101,50,231,195,102,243,6,0,21,26,173,146,58,13,26,52,192,230,205,155,177,125,251,246,39,163,186,166,236,155,54,10,174,38,19, + 94,137,184,3,199,90,125,129,136,59,112,108,90,15,117,121,14,247,8,193,83,237,160,194,194,194,58,150,188,255,55,81,100,170,74,39,197,3,5,70, + 171,83,88,88,24,45,121,95,153,160,218,53,96,226,246,97,93,124,130,235,120,19,243,238,85,136,213,242,198,57,119,76,138,187,121,116,218,109,74,87, + 150,183,29,195,48,148,101,89,216,90,89,193,197,222,190,32,204,207,48,128,8,136,102,128,8,5,6,128,138,4,150,20,77,139,162,8,133,66,81,102, + 226,187,165,185,89,37,53,115,115,115,241,240,225,67,140,31,63,30,106,181,26,0,144,148,148,4,31,31,31,112,28,135,248,248,120,252,250,235,175,240, + 243,243,131,82,169,180,200,109,149,136,46,53,34,132,156,2,208,40,49,49,209,206,195,195,3,176,52,162,37,82,228,27,8,140,70,1,119,239,222,69, + 66,66,2,30,62,184,135,230,218,28,80,176,160,148,90,20,209,242,242,242,10,246,247,247,255,102,201,146,37,114,47,47,47,80,74,225,224,96,143,252, + 252,124,164,165,165,163,65,131,6,240,242,242,194,146,37,75,0,96,199,203,54,89,37,41,170,46,45,121,207,48,12,222,253,159,55,50,50,108,192,178, + 127,86,159,86,146,163,37,7,128,78,61,6,114,39,142,30,182,230,129,143,147,88,246,227,202,126,137,80,74,205,130,40,170,203,123,60,54,54,22,50, + 153,12,123,247,236,65,70,114,50,66,66,66,208,162,69,11,220,187,119,15,87,175,94,133,147,147,19,92,188,90,227,212,3,19,110,39,232,160,209,104, + 16,19,199,252,45,137,208,0,64,8,121,179,91,183,110,243,150,47,95,238,234,238,238,46,75,77,77,173,183,102,205,154,144,53,107,214,76,121,251,237, + 183,221,222,126,251,109,7,23,23,23,46,41,41,41,224,189,247,222,107,74,8,241,163,148,46,171,72,211,214,206,214,145,149,91,131,16,14,142,246,14, + 224,20,214,16,121,14,188,8,104,236,93,112,246,242,94,68,68,230,78,72,207,69,165,213,129,148,82,234,228,228,4,134,97,224,228,228,244,212,255,247, + 185,115,231,160,211,233,48,110,220,184,226,105,68,75,41,50,89,139,214,116,181,33,133,38,43,41,150,3,99,172,141,159,247,95,200,202,124,148,212,174, + 58,38,139,16,162,118,116,245,240,24,218,163,161,242,215,136,199,72,204,52,34,199,40,131,129,90,129,151,57,32,254,252,6,221,157,95,215,116,126,153, + 57,64,69,69,61,15,30,60,64,126,126,62,206,156,57,131,133,11,23,166,150,54,89,110,110,110,111,218,217,217,45,200,203,203,251,60,49,49,113,85, + 101,186,133,38,234,41,202,154,78,172,106,139,135,178,166,9,9,33,178,154,30,170,99,87,207,124,239,163,161,215,9,30,143,7,238,230,68,218,94,114, + 237,208,187,121,40,211,100,237,39,181,90,76,248,232,24,33,164,94,121,145,45,81,16,154,88,219,216,2,72,65,196,149,147,197,38,43,61,35,27,6, + 19,11,131,145,64,111,98,208,165,219,43,88,253,205,118,196,167,100,160,168,34,241,191,2,33,196,49,56,56,120,226,144,33,67,240,241,199,31,35,124, + 249,114,227,36,66,114,56,128,134,9,2,68,74,9,83,133,36,246,210,58,95,126,249,229,126,0,195,151,76,70,235,204,60,188,238,217,151,58,214,234, + 91,240,220,193,51,40,0,56,166,134,63,125,202,12,13,13,37,69,51,107,150,206,176,253,83,40,203,100,1,0,23,26,26,122,42,44,44,12,37,239, + 43,18,178,115,15,236,253,209,135,147,151,54,239,217,158,36,190,223,29,25,57,122,126,214,109,147,34,78,87,177,201,42,201,135,107,214,224,106,116,193, + 255,177,151,171,43,166,143,28,9,202,3,231,34,111,99,87,120,56,134,117,235,6,235,194,138,191,42,28,24,68,81,44,51,138,85,50,154,101,105,212, + 41,43,43,11,123,246,236,65,139,22,45,160,86,171,193,113,28,26,53,106,132,63,254,248,3,181,107,215,6,33,4,7,14,28,192,128,1,3,112,255, + 254,125,180,110,221,218,166,114,213,63,41,50,61,183,111,223,182,163,148,118,40,138,126,84,23,131,193,128,168,168,40,244,237,219,23,14,14,14,168,81, + 99,7,194,143,125,15,117,240,107,32,4,22,25,45,65,16,222,8,13,13,149,19,66,160,211,229,67,165,178,130,181,181,13,108,109,237,16,16,80,15, + 9,9,9,232,217,179,167,49,38,38,102,109,98,98,162,69,137,209,0,16,20,20,100,157,157,157,253,90,173,90,181,20,0,96,101,101,21,84,167,78, + 157,15,98,98,98,114,45,209,41,105,176,8,33,96,89,182,216,104,113,12,3,15,119,215,226,229,194,252,180,114,63,4,132,144,156,248,116,131,18,0, + 188,189,189,177,122,253,65,38,52,52,20,83,166,76,129,217,108,198,218,181,5,69,118,35,70,140,128,201,100,194,190,125,5,69,146,28,199,85,24,54, + 185,114,229,10,34,34,34,96,54,155,145,157,157,141,35,71,142,224,212,233,211,216,121,224,23,60,122,112,15,141,234,249,96,236,216,55,32,147,201,176, + 117,235,86,180,107,215,206,146,151,224,133,35,147,201,70,109,220,184,209,99,203,150,45,89,7,14,28,208,182,106,213,74,185,98,197,10,151,213,171,87, + 187,152,76,38,76,153,50,37,229,226,197,139,134,254,253,251,91,111,216,176,193,163,78,157,58,221,1,60,99,180,8,33,214,0,134,1,120,181,85,67, + 13,151,145,163,3,229,141,136,121,240,16,89,185,70,136,130,9,143,158,36,32,87,39,32,37,35,23,77,90,245,248,250,228,201,147,179,9,33,179,40, + 165,135,42,27,103,100,100,36,46,94,188,136,71,143,30,225,193,131,7,197,235,175,93,187,134,149,43,87,98,234,212,169,112,112,112,176,232,216,203,55, + 89,117,240,243,254,139,89,201,119,19,170,107,178,124,90,180,104,17,254,197,23,95,120,188,253,225,39,176,15,30,14,59,123,103,24,96,3,40,29,105, + 236,217,53,250,187,39,191,121,169,38,11,0,40,165,243,61,60,60,230,123,120,120,168,142,31,63,174,169,85,171,22,120,158,55,150,142,100,117,234,212, + 105,206,198,141,27,61,106,215,174,61,25,64,165,70,235,101,192,48,120,243,243,117,19,157,109,21,79,18,112,119,89,97,47,65,22,200,207,1,78,254, + 0,174,237,220,135,147,251,207,112,152,185,229,227,55,81,65,133,108,204,253,88,172,91,183,26,211,166,190,142,239,190,253,28,162,200,193,96,102,225,237, + 219,10,6,147,8,194,112,8,105,210,12,191,157,60,3,25,3,236,217,178,238,37,29,225,203,129,82,154,65,8,89,123,224,192,129,119,166,76,153,2, + 81,20,21,11,214,173,211,165,166,166,46,134,5,253,175,202,208,25,176,110,221,186,232,153,171,83,247,79,27,5,246,209,207,36,35,226,14,28,7,207, + 160,216,187,148,160,105,61,100,168,203,62,197,159,46,117,255,175,129,148,209,172,244,169,169,195,34,231,88,145,131,108,26,80,251,19,141,163,195,27,45, + 26,5,56,79,159,50,137,187,159,164,199,190,90,35,243,126,221,246,149,117,18,175,252,250,30,213,85,201,100,21,177,235,215,95,139,255,254,98,199,142, + 50,31,75,28,60,184,74,90,162,40,150,27,197,178,52,146,5,0,106,181,218,190,123,247,238,232,218,181,43,6,13,26,84,156,147,213,184,113,99,236, + 220,185,19,3,7,14,196,181,107,215,224,225,225,129,192,192,64,4,6,6,226,240,225,195,22,237,163,104,26,47,56,56,184,168,234,176,81,92,92,156, + 69,213,134,37,49,24,12,72,79,79,135,163,163,35,20,10,5,90,182,108,129,119,222,109,9,103,143,205,8,174,95,15,90,173,182,184,252,189,50,100, + 50,89,112,221,186,117,145,154,154,138,212,212,84,184,184,184,192,211,211,19,238,238,238,88,182,108,25,93,181,106,213,81,147,201,180,54,53,53,213,226, + 72,150,135,135,71,123,71,71,199,57,58,157,78,81,226,23,174,194,197,197,229,39,79,79,207,197,9,9,9,150,36,21,195,100,50,129,16,130,176,7, + 158,208,26,9,114,226,34,48,229,127,62,79,25,47,153,76,86,149,132,94,237,240,225,195,93,107,214,244,66,108,76,36,246,238,165,88,190,124,121,81, + 85,36,162,11,127,24,20,45,119,238,220,25,190,190,190,160,22,244,202,16,69,17,55,110,220,192,142,159,78,193,195,167,62,158,220,141,194,213,195,63, + 163,150,139,35,26,52,105,6,179,217,252,92,173,55,94,4,102,179,121,147,191,191,63,53,26,141,167,0,172,190,121,243,230,235,137,137,137,83,183,109, + 219,230,62,122,244,232,164,131,7,15,174,4,176,229,230,205,155,19,63,253,244,211,174,60,207,151,89,45,200,178,236,119,239,189,247,94,167,33,67,134, + 16,142,152,141,71,142,108,229,4,222,76,230,124,188,73,8,63,125,138,17,120,51,25,57,250,61,241,224,137,155,204,148,247,190,16,154,182,13,197,173, + 91,183,220,251,244,233,243,41,128,10,141,86,81,164,170,188,8,229,131,7,15,176,105,211,38,204,156,89,149,118,117,5,140,5,106,219,249,216,92,92, + 180,166,155,13,225,242,10,77,22,251,34,76,86,171,193,131,7,255,60,103,206,28,39,142,227,240,254,164,145,152,255,197,183,112,108,57,69,116,246,242, + 37,143,78,174,208,221,59,189,169,203,223,81,205,150,150,150,182,30,192,122,71,71,199,100,107,107,107,228,230,230,62,243,249,35,132,168,234,213,171,167, + 82,40,20,232,209,163,135,163,135,135,71,52,195,48,171,226,227,227,203,117,28,101,77,19,150,53,157,248,60,85,135,14,46,232,211,178,125,19,219,59, + 154,143,109,85,156,254,90,173,104,149,29,1,144,109,112,123,112,254,241,176,28,146,162,108,220,172,115,83,216,113,214,125,80,142,209,98,88,246,106,118, + 102,86,175,156,92,35,206,158,187,133,225,195,234,194,96,34,16,69,6,121,90,3,192,202,192,0,24,49,114,52,40,225,144,145,156,0,150,101,111,86, + 237,213,253,87,241,209,196,137,19,123,205,154,53,203,175,176,255,149,79,97,255,171,233,132,144,134,180,146,230,227,21,232,212,250,121,231,220,247,127,58, + 243,77,118,104,27,221,221,166,5,181,83,142,77,235,33,67,38,195,61,142,69,58,165,120,42,205,40,52,52,180,99,201,251,127,19,101,69,178,138,168, + 82,142,150,127,109,175,87,58,54,111,246,238,236,89,179,109,255,56,127,18,51,63,89,77,253,155,117,207,93,127,230,170,49,207,218,183,87,110,234,221, + 115,85,29,11,0,244,236,60,16,141,130,90,60,243,96,187,206,5,189,36,207,254,118,5,201,169,241,85,18,44,50,81,229,229,100,85,165,164,191,52, + 58,157,46,235,214,173,91,174,113,113,113,79,37,190,251,250,250,130,16,130,75,151,46,225,226,197,139,24,62,124,56,56,142,131,76,38,195,169,83,167, + 44,138,198,148,136,46,221,160,148,118,36,132,244,244,242,242,42,179,218,176,42,90,58,157,14,217,217,217,56,118,236,24,234,214,173,139,69,139,22,193, + 211,195,13,179,103,191,15,81,20,145,147,147,3,65,16,170,26,209,18,139,162,69,162,40,34,53,53,21,126,126,126,88,179,102,13,86,174,92,249,105, + 66,66,194,65,75,199,232,237,237,109,47,8,194,135,125,251,246,237,222,191,127,127,244,236,217,243,169,199,127,248,225,7,219,125,251,246,45,174,89,179, + 230,43,38,147,105,73,114,114,114,106,85,116,55,111,46,104,191,164,110,53,31,51,135,212,194,171,111,109,197,178,101,63,66,169,252,179,99,4,203,178, + 248,248,227,143,43,52,49,34,165,254,242,180,243,9,239,207,248,210,117,241,226,112,132,135,167,128,97,24,120,120,120,128,97,24,60,124,248,16,12,195, + 192,199,199,7,12,195,32,62,62,190,40,39,48,19,101,84,61,150,5,195,48,208,235,245,136,125,242,8,113,49,209,176,201,73,130,139,157,26,153,145, + 55,208,104,236,155,197,253,159,254,78,40,165,219,1,108,47,177,234,75,66,136,81,163,209,12,2,176,159,82,90,20,209,248,180,240,86,38,173,90,181, + 106,60,107,214,44,89,81,187,13,47,159,207,120,147,201,36,2,64,80,72,135,98,183,223,165,55,112,239,222,61,44,91,182,12,90,173,22,242,170,52, + 186,67,129,105,45,170,48,44,9,203,178,240,243,243,195,164,73,150,181,236,113,242,241,250,250,82,196,41,225,122,204,55,186,155,119,142,88,21,152,172, + 186,207,107,178,234,190,254,250,235,135,62,250,232,35,199,156,156,28,220,189,123,23,89,89,89,120,109,64,71,126,205,250,169,230,84,247,134,52,254,230, + 225,191,197,100,149,132,82,58,223,203,203,107,190,40,138,148,82,58,183,196,248,149,222,222,222,103,142,31,63,238,196,243,60,190,250,234,43,251,164,164, + 36,251,14,29,58,204,4,80,174,209,42,107,154,176,172,233,68,148,168,58,84,42,149,142,21,12,241,153,170,67,65,64,128,157,173,61,50,17,7,131, + 179,185,113,150,19,159,113,34,241,205,107,158,143,155,4,89,11,102,63,38,199,136,26,106,123,136,148,6,148,39,106,48,155,143,92,139,184,218,195,187, + 102,93,246,224,161,211,232,55,96,8,12,6,6,122,51,1,97,101,32,172,28,13,27,53,65,96,131,70,160,0,174,92,62,207,27,205,230,19,21,140, + 243,95,135,103,187,119,135,123,182,123,103,21,168,72,203,232,163,229,55,96,192,128,197,0,222,173,76,199,173,245,187,195,221,219,20,232,148,236,163,245, + 222,59,19,17,121,89,166,57,29,177,84,222,179,21,194,82,195,9,212,170,63,171,14,101,76,245,91,115,252,211,120,174,134,165,222,222,222,246,174,54, + 234,205,111,143,125,195,246,241,245,11,72,186,125,9,231,78,71,103,238,218,247,99,134,54,61,101,172,5,38,171,120,154,207,217,163,22,252,202,48,90, + 86,182,46,0,0,191,160,22,224,158,88,214,70,168,172,104,86,117,76,86,17,69,230,170,116,226,251,132,9,19,176,113,227,70,180,109,219,22,254,254, + 254,197,95,246,150,70,205,74,71,151,170,83,109,88,146,220,220,92,248,248,248,96,195,134,13,184,121,243,38,108,109,109,49,124,248,112,228,230,230,22, + 27,172,170,38,195,83,74,239,29,63,126,188,249,208,161,67,169,76,38,35,89,89,89,176,183,183,199,154,53,107,180,137,137,137,97,21,110,92,6,222, + 222,222,67,228,114,249,251,195,134,13,99,235,213,171,135,228,228,100,216,217,217,153,9,33,50,0,176,183,183,55,91,89,89,97,226,196,137,8,9,9, + 105,63,125,250,244,182,53,106,212,88,19,31,31,95,110,111,165,162,233,194,157,59,119,2,0,198,174,138,130,209,88,96,84,214,174,93,139,194,92,183, + 98,98,98,98,128,42,84,178,216,216,216,192,223,223,191,204,247,190,125,251,246,184,114,229,74,193,212,36,199,193,213,213,21,231,206,157,171,82,37,21, + 45,108,4,121,235,214,45,212,247,117,198,205,240,227,112,86,203,16,226,233,14,175,246,29,17,29,29,253,183,69,179,10,123,83,77,2,208,21,5,159, + 193,111,1,76,40,177,188,134,82,250,181,37,154,60,207,83,134,97,72,108,108,172,73,173,86,19,71,71,71,78,169,84,194,96,48,20,27,174,123,247, + 238,225,208,161,67,136,139,139,131,163,163,35,163,209,104,96,50,153,170,146,227,204,28,0,0,32,0,73,68,65,84,212,63,42,32,32,0,238,238,238, + 79,37,190,143,29,59,22,141,27,55,198,212,169,83,45,74,132,127,29,8,222,248,217,146,90,74,134,213,212,119,126,5,15,162,30,234,137,1,170,159, + 15,60,151,201,226,66,66,66,126,154,57,115,166,227,141,27,55,48,111,222,60,188,246,218,107,0,96,62,114,228,72,108,102,106,124,155,204,212,120,80, + 74,75,87,92,189,116,50,51,51,215,163,196,101,127,92,92,92,198,176,44,59,91,163,209,104,78,157,58,101,239,226,226,66,182,110,221,106,158,59,119, + 110,22,203,178,153,132,144,21,127,227,112,1,0,148,226,118,90,118,140,143,204,193,83,188,174,167,231,167,198,206,12,204,148,213,117,33,13,130,49,32, + 229,143,179,99,248,152,54,201,137,73,12,133,120,187,60,13,81,20,55,205,156,245,241,135,209,81,87,189,85,118,42,76,152,56,11,97,71,127,3,97, + 100,56,115,254,18,140,38,1,105,25,217,24,54,98,20,188,60,156,113,251,226,177,84,94,20,215,188,204,227,252,171,161,84,92,221,163,223,24,7,165, + 85,65,154,169,40,10,216,254,237,251,96,152,85,152,55,111,30,130,131,131,223,34,132,44,44,175,197,67,17,132,136,171,27,118,28,225,32,87,22,232, + 80,81,192,134,61,51,11,251,104,77,195,154,245,251,26,54,240,125,176,160,162,62,90,255,21,202,75,134,47,147,90,181,106,41,173,101,24,239,104,37, + 159,254,246,200,254,46,41,49,145,136,251,227,42,0,192,108,210,153,18,163,111,87,218,10,189,176,193,91,201,169,32,90,209,212,149,94,95,249,47,250, + 210,154,69,39,220,210,209,44,75,76,86,89,154,0,158,57,209,178,44,139,154,53,107,98,241,226,197,149,246,209,42,227,216,139,214,247,196,255,177,119, + 221,97,81,156,123,247,188,219,41,75,47,75,87,80,65,177,247,168,24,123,47,137,88,19,141,61,118,197,174,81,99,137,53,106,236,198,168,49,246,222, + 98,69,99,87,236,34,160,8,42,189,215,165,44,219,103,230,253,254,160,92,68,22,22,82,238,189,223,245,60,207,62,192,148,179,191,153,93,102,206,252, + 42,208,24,64,233,100,248,30,198,84,26,26,226,116,112,112,64,86,86,97,135,132,142,29,59,162,99,199,127,213,51,232,116,186,18,47,150,133,133,197, + 71,30,173,242,56,77,77,77,23,156,57,115,102,76,80,80,208,144,57,115,230,8,187,116,41,108,23,148,159,159,175,164,70,204,118,43,203,201,178,236, + 196,192,192,64,62,199,113,216,189,123,55,158,61,123,70,205,204,204,22,155,153,153,109,55,53,53,101,85,42,213,132,241,227,199,15,95,182,108,25,175, + 125,251,246,120,248,240,33,207,203,203,107,36,128,3,134,56,139,241,248,241,99,240,120,60,48,217,241,152,188,224,56,204,77,5,120,243,230,13,178,179, + 179,63,106,98,106,204,249,44,237,41,41,126,181,111,223,190,36,12,217,186,117,107,240,249,124,4,7,7,151,27,134,45,195,73,237,236,236,74,190,31, + 34,145,8,183,110,221,194,15,63,252,0,15,91,107,200,195,67,225,212,177,51,186,141,25,143,97,195,134,129,207,231,195,214,214,22,248,112,214,167,193, + 99,255,51,40,195,57,166,77,155,54,227,126,254,249,231,90,211,166,77,171,121,239,222,189,78,237,219,183,247,222,190,125,187,215,212,169,83,107,222,187, + 119,207,4,70,228,230,148,230,124,250,244,233,169,237,219,183,79,28,53,106,148,136,227,56,54,46,46,78,15,128,56,57,57,241,159,62,125,202,253,254, + 251,239,80,169,84,112,115,115,227,185,186,186,146,235,215,175,115,225,225,225,143,41,165,223,25,115,236,44,203,126,208,198,65,40,20,162,71,143,30,24, + 49,98,68,165,255,251,101,57,107,214,243,89,221,229,243,186,238,153,201,193,72,73,122,15,46,215,81,119,241,220,239,154,170,136,172,178,156,18,137,100, + 254,182,109,219,106,133,134,134,98,233,210,165,24,58,116,40,120,60,158,246,196,137,19,113,33,33,33,109,40,165,149,10,202,127,224,115,55,132,21,111, + 223,190,117,213,104,52,16,139,197,216,185,115,167,110,205,154,53,175,51,51,51,253,104,57,21,229,101,57,171,89,117,152,93,1,231,71,85,135,185,89, + 184,116,238,252,211,150,210,1,123,49,57,57,163,36,177,145,18,98,123,70,86,223,207,172,85,163,36,222,229,165,188,124,86,121,201,0,39,40,165,90, + 66,200,224,1,254,95,221,56,118,236,168,116,201,210,165,120,240,56,20,89,57,10,112,148,15,142,16,44,90,180,4,78,246,182,200,75,126,171,212,232, + 116,3,104,153,81,60,255,198,207,232,47,225,36,132,55,245,250,239,7,182,240,8,184,130,180,8,9,63,255,189,217,136,97,3,4,131,7,15,198,153, + 51,103,16,22,22,182,203,144,200,42,205,73,41,111,106,232,157,227,91,8,192,169,50,34,36,2,69,180,217,200,175,7,8,134,13,27,134,179,23,131, + 112,236,66,244,207,71,127,167,23,254,202,99,250,79,68,121,121,90,64,5,66,203,66,128,48,191,250,181,92,219,55,107,96,34,96,85,72,12,127,143, + 236,2,53,174,191,138,203,225,81,94,181,123,235,20,94,32,69,136,143,255,184,130,57,39,167,48,59,46,63,191,106,99,165,120,60,222,7,222,172,63, + 227,201,42,109,167,76,38,43,185,73,22,11,186,226,27,119,113,14,80,53,90,59,44,136,143,143,183,140,143,143,7,165,20,143,31,63,182,108,221,186, + 245,2,252,9,111,214,236,217,179,75,188,86,101,127,150,183,172,50,20,37,165,111,182,183,183,63,57,111,222,188,201,173,91,183,238,190,116,233,82,2, + 160,234,101,92,0,40,165,12,199,113,184,125,251,54,206,156,57,195,234,116,186,111,147,147,147,75,231,58,108,117,113,113,185,238,239,239,127,32,34,34, + 130,255,250,245,107,24,35,232,84,42,21,188,189,189,193,48,12,214,77,118,71,126,126,35,48,12,3,150,101,97,110,110,254,193,156,75,99,62,39,30, + 143,7,150,101,63,18,90,143,31,63,6,159,207,135,159,159,31,94,188,120,81,226,209,170,204,3,165,211,233,226,101,50,153,108,197,138,21,37,118,101, + 100,100,224,218,181,107,248,172,77,91,212,255,118,2,146,147,147,177,105,211,38,184,184,184,96,245,234,213,200,206,206,6,195,48,255,180,59,189,87,207, + 158,61,173,246,239,223,159,118,228,200,17,159,141,27,55,154,205,158,61,219,109,227,198,141,137,29,59,118,180,184,119,239,94,91,84,49,9,154,101,217, + 133,132,144,171,171,87,175,94,48,125,250,244,214,163,70,141,18,10,133,66,46,41,41,137,57,122,244,40,241,246,246,230,137,68,34,18,24,24,200,61, + 121,242,228,17,195,48,235,40,165,247,140,229,47,157,127,87,92,97,56,114,228,200,42,31,120,128,163,100,164,5,47,195,111,251,206,53,188,186,158,110, + 186,131,71,175,37,220,123,248,54,138,175,97,2,246,1,6,91,3,84,4,66,136,221,164,73,147,230,5,7,7,11,239,222,189,139,177,99,199,34,37, + 37,37,251,200,145,35,225,81,81,81,125,41,165,85,74,51,248,167,193,231,243,79,248,250,250,142,158,58,117,170,105,143,30,61,36,203,150,45,203,205, + 207,207,47,87,100,149,135,127,162,234,16,192,175,11,231,92,12,152,213,104,116,173,113,78,53,241,71,65,58,228,2,62,207,210,154,135,102,53,248,200, + 207,124,231,112,225,198,254,24,84,210,151,141,82,250,148,16,210,181,65,163,166,167,215,173,94,231,184,120,254,60,225,233,139,87,64,25,29,30,223,185, + 3,169,136,165,225,207,255,72,211,232,180,95,254,187,67,188,127,7,146,239,111,61,70,8,57,111,107,107,251,114,204,168,81,222,190,190,95,193,204,204, + 12,167,78,157,194,161,173,91,217,205,192,144,95,8,121,49,161,176,167,158,65,164,61,44,225,9,30,63,102,140,79,179,102,227,96,102,102,134,147,39, + 79,226,192,230,205,70,243,252,55,163,122,57,90,60,146,255,232,109,156,226,241,219,56,5,56,74,57,74,53,60,30,18,10,116,186,213,145,81,137,213, + 18,5,197,161,195,149,171,166,86,103,119,131,156,197,226,167,186,37,221,101,193,178,108,98,233,25,105,165,111,210,134,126,215,235,245,137,70,210,175,245, + 240,248,104,6,106,149,243,178,138,81,28,14,52,86,100,25,219,71,11,0,50,51,51,83,0,44,118,118,118,62,210,189,123,247,241,0,140,75,156,43, + 3,66,200,238,14,29,58,124,11,128,79,8,217,149,148,148,244,81,66,105,114,114,114,164,171,171,235,122,79,79,207,146,65,211,21,113,114,28,23,221, + 168,81,163,146,6,162,101,133,84,121,127,115,28,87,233,103,148,147,147,131,86,173,90,125,52,211,146,82,138,184,184,184,98,143,19,128,194,115,95,145, + 128,83,40,20,19,166,77,155,246,139,80,40,244,0,64,138,69,46,203,178,252,109,219,182,153,176,44,203,7,64,120,60,30,35,20,10,213,103,206,156, + 97,24,134,137,215,104,52,19,42,179,243,47,198,137,37,75,150,80,0,138,23,47,94,52,222,190,125,187,215,215,95,127,29,121,239,222,189,71,0,28, + 1,28,175,14,105,145,112,186,71,8,105,191,115,231,206,133,19,38,76,104,53,108,216,48,65,199,142,29,113,233,210,37,246,246,237,219,143,85,42,213, + 218,170,8,44,0,32,132,228,186,187,187,3,64,165,255,239,44,203,86,152,200,107,87,67,178,125,248,36,23,147,221,107,175,41,50,147,181,65,122,133, + 246,187,253,64,88,85,236,41,139,26,53,106,236,16,8,4,230,33,33,33,240,242,242,202,62,122,244,168,226,229,203,151,147,41,165,87,255,12,239,63, + 133,212,212,212,57,132,144,37,155,54,109,74,110,210,164,137,68,36,18,105,141,21,89,255,20,40,165,12,33,164,247,79,221,6,157,239,176,104,154,103, + 183,78,126,102,238,53,29,93,195,223,167,225,221,195,75,5,47,47,172,138,165,26,249,23,148,210,74,231,155,82,74,159,16,66,234,204,158,55,187,120, + 168,116,227,46,215,207,209,255,161,161,210,43,215,175,95,239,237,235,235,139,83,167,78,225,250,225,195,24,154,153,137,91,124,62,159,39,18,217,93,208, + 233,54,192,184,198,197,43,55,110,220,232,211,176,97,67,156,56,113,2,129,7,14,96,72,245,120,12,161,37,0,135,162,223,51,1,68,0,104,14,192, + 20,128,6,133,163,157,236,75,109,159,85,180,174,120,253,93,0,127,91,34,108,181,114,180,66,223,198,52,255,171,13,81,169,84,217,222,222,222,85,234, + 34,168,215,235,43,140,225,50,12,147,88,171,86,45,0,198,119,103,175,76,20,101,101,101,181,48,214,190,170,226,207,230,98,149,6,203,113,177,206,206, + 206,92,17,111,121,239,85,238,50,10,196,84,229,125,82,82,82,34,0,84,62,225,219,0,146,146,146,78,195,136,161,209,198,110,7,0,217,217,217,213, + 30,230,107,8,132,210,164,101,203,150,253,235,111,35,4,54,40,53,40,62,41,165,161,0,90,255,165,70,254,13,160,148,158,4,112,146,16,194,187,119, + 239,222,184,134,13,27,246,0,112,3,192,46,90,216,209,251,207,242,151,8,174,221,187,119,7,80,74,145,151,151,183,185,170,2,171,24,105,105,105,85, + 206,19,52,132,236,52,237,205,163,187,18,59,171,114,116,1,123,20,90,163,230,45,86,4,66,72,179,230,205,155,15,136,143,143,215,134,133,133,61,139, + 139,139,219,8,224,178,49,30,218,255,36,80,74,213,142,142,142,191,141,24,49,226,51,0,251,255,44,95,121,225,196,63,11,74,105,12,33,164,201,173, + 217,63,140,185,101,109,209,7,172,160,46,180,188,11,208,102,93,2,176,175,42,231,188,72,72,109,68,57,173,74,254,63,131,20,246,191,10,24,61,122, + 52,150,44,89,130,192,13,27,116,147,8,201,21,2,244,106,225,131,38,143,0,243,141,229,25,57,114,36,150,44,89,130,203,235,214,85,139,167,18,56, + 16,66,46,2,192,130,5,11,190,91,179,102,141,205,194,133,11,27,175,93,187,118,117,209,223,175,138,215,3,0,165,180,239,194,133,11,27,148,90,159, + 15,224,233,159,180,161,122,40,253,196,254,87,191,0,116,253,196,249,137,243,19,231,39,206,255,37,78,30,143,55,27,64,211,255,116,59,63,113,126,226, + 252,79,227,172,228,213,167,80,178,24,254,105,232,247,82,203,254,54,251,0,56,3,248,182,212,203,185,120,93,181,71,240,124,194,39,124,194,39,124,194, + 199,96,89,246,127,202,43,242,9,159,240,239,68,105,47,86,117,214,255,85,160,21,12,149,38,0,186,26,216,169,42,141,35,203,229,168,196,168,10,249, + 63,113,126,226,252,196,249,137,243,19,231,39,206,79,156,255,255,56,43,227,54,176,127,31,66,200,69,74,105,95,67,63,139,56,63,250,189,212,178,191, + 44,237,160,156,99,49,56,84,250,111,117,245,225,191,196,93,249,137,243,19,231,39,206,79,156,159,56,63,113,126,226,252,247,114,86,242,234,131,194,214, + 55,116,193,130,5,11,233,127,88,232,176,162,87,5,161,195,83,252,164,36,88,138,197,102,34,0,208,106,149,58,87,87,228,1,131,254,171,146,58,63, + 225,223,15,66,136,12,0,168,17,195,167,171,178,237,39,124,194,39,124,194,39,252,207,32,131,22,121,170,0,100,0,32,69,127,107,139,126,102,0,133, + 73,240,101,126,255,96,253,63,5,35,170,14,79,241,51,51,205,236,5,2,185,15,203,170,235,1,128,64,192,123,147,153,105,19,105,111,127,42,179,58, + 98,203,65,38,123,46,228,243,93,141,217,86,207,178,73,153,105,105,31,180,142,167,192,127,189,192,51,86,68,252,25,177,241,79,8,21,7,7,7,153, + 76,38,235,111,105,105,217,38,39,39,231,73,70,70,198,89,67,115,15,9,33,107,8,193,188,162,223,127,164,148,46,52,196,91,149,109,203,217,215,219, + 204,204,108,50,33,164,33,0,80,74,195,148,74,229,78,74,233,199,13,219,254,159,131,16,98,10,224,75,129,64,48,210,222,222,190,85,106,106,234,50, + 74,105,181,186,121,19,66,4,0,102,91,91,91,15,181,182,182,174,149,157,157,29,149,151,151,119,2,192,70,74,105,165,165,210,203,103,184,180,233,216, + 163,227,226,219,129,183,87,46,221,146,252,240,163,245,115,92,236,186,119,107,183,228,246,133,160,21,11,183,39,85,216,125,186,28,219,120,0,138,155,230, + 113,40,124,106,253,75,219,235,147,194,233,5,253,0,116,4,112,27,192,5,99,142,219,0,215,103,0,190,67,161,205,27,41,165,183,254,50,67,255,6, + 16,66,204,101,50,217,58,0,253,4,2,193,235,164,164,164,111,41,165,198,182,177,249,187,108,18,160,176,204,191,33,10,219,112,60,165,70,180,112,48, + 6,246,246,246,125,5,2,193,228,162,214,46,59,51,51,51,255,145,220,158,234,64,34,145,108,118,114,114,26,167,82,169,148,132,16,90,186,223,35,195, + 48,137,25,25,25,127,91,229,252,191,17,255,158,138,193,191,0,229,10,173,164,36,88,10,4,114,159,244,212,208,161,201,41,33,67,0,192,197,185,241, + 9,71,167,70,199,147,146,196,186,150,221,252,165,66,51,193,78,62,95,216,84,173,213,216,11,5,194,76,29,163,15,230,105,233,228,148,55,103,202,109, + 182,40,228,243,93,99,35,111,57,50,186,108,8,77,92,32,52,253,168,151,84,9,92,92,92,170,117,48,182,182,181,45,116,18,147,0,161,144,223,141, + 163,76,67,202,1,60,34,12,99,88,253,13,145,70,243,83,118,246,251,106,55,10,172,103,79,156,40,48,12,4,221,64,113,157,0,199,222,100,210,84, + 99,247,55,86,68,252,73,177,81,122,223,77,148,210,57,198,238,107,44,220,220,220,108,6,14,28,184,249,135,31,126,48,149,74,165,36,62,62,190,199, + 252,249,243,63,119,115,115,155,149,152,152,152,92,198,30,25,33,152,199,113,148,7,0,60,30,153,47,147,201,204,248,124,254,71,189,141,88,150,53,35, + 4,83,57,142,146,162,109,231,17,66,182,24,35,24,77,77,77,191,106,213,186,237,172,117,235,55,74,101,142,142,230,12,203,233,98,98,99,205,23,47, + 156,211,218,212,212,116,139,74,165,58,90,25,71,89,16,66,8,159,207,31,42,145,72,250,2,240,45,90,28,174,209,104,46,178,44,123,220,216,27,186, + 147,147,211,93,62,159,95,179,42,239,205,178,108,124,106,106,170,95,229,91,126,12,66,200,96,15,15,143,125,29,58,116,48,107,213,170,21,196,98,49, + 150,44,89,50,27,64,133,66,171,88,80,153,153,153,13,53,55,55,175,165,80,40,222,171,84,170,211,98,177,184,235,150,45,91,220,219,181,107,103,145, + 150,150,70,248,124,190,236,242,229,203,223,108,222,188,185,7,33,164,75,101,55,185,220,247,116,177,164,159,111,251,220,247,183,22,3,232,85,118,61,163, + 54,25,73,249,238,125,85,244,69,2,170,80,90,79,8,225,9,133,194,45,78,78,78,163,213,106,181,26,133,189,215,168,76,38,43,94,15,0,208,106, + 181,114,185,92,94,215,88,222,82,252,117,1,140,181,182,182,30,61,119,238,92,155,94,189,122,225,240,225,195,83,246,236,217,35,39,132,252,6,224,87, + 74,105,68,21,105,231,165,166,166,246,22,10,133,196,221,221,157,15,192,104,161,69,8,241,1,176,8,133,55,155,157,148,82,150,16,210,9,40,252,127, + 7,240,99,177,112,227,243,249,59,235,214,173,219,63,60,60,252,103,74,169,193,121,148,149,193,201,201,233,151,29,59,118,12,249,226,139,47,248,25,25, + 25,174,77,154,52,57,2,160,125,117,249,74,29,203,24,137,68,50,179,113,227,198,245,35,34,34,34,243,242,242,54,162,240,124,26,252,159,34,132,184, + 1,232,106,109,109,221,101,209,162,69,210,190,125,251,98,247,238,221,189,247,236,217,163,32,132,220,0,240,199,159,21,129,2,129,96,114,98,98,162,61, + 165,20,206,206,206,147,81,201,112,115,3,118,126,7,96,20,10,67,92,123,41,165,235,255,140,77,229,129,207,231,111,25,58,116,232,232,35,71,142,152, + 197,198,198,154,185,186,186,150,52,207,38,132,84,251,254,249,9,127,14,229,229,104,21,163,92,161,37,22,155,137,88,86,93,47,57,37,100,200,231,29, + 182,89,1,192,221,59,211,134,56,58,53,8,19,139,205,34,37,150,38,103,252,251,117,109,58,168,111,7,226,230,236,136,196,148,116,217,175,199,2,123, + 94,12,188,117,6,133,13,196,202,5,163,203,134,169,238,15,68,220,223,10,251,142,201,216,126,57,17,15,95,198,64,153,155,137,154,78,166,88,31,208, + 29,78,54,102,213,58,72,169,204,167,19,207,196,236,248,215,95,141,176,234,255,165,175,176,134,147,19,40,149,32,242,189,162,237,149,107,183,90,158,62, + 121,116,178,84,230,51,84,145,22,105,244,197,173,185,11,49,45,208,225,75,1,159,124,211,190,117,131,46,95,245,110,207,171,239,91,7,175,95,133,119, + 63,127,243,241,250,250,50,222,13,134,165,7,205,69,56,247,60,217,112,67,191,242,4,71,183,110,221,218,75,36,18,93,233,237,52,26,141,136,16,124, + 86,29,177,81,252,30,90,173,134,39,20,138,193,227,145,89,141,27,55,246,205,204,204,188,69,8,217,151,148,84,53,111,193,116,66,196,114,129,160,57, + 79,34,113,102,181,90,59,0,32,98,177,220,205,198,166,209,162,239,190,147,242,249,124,46,43,43,11,74,165,146,140,31,63,222,228,253,251,247,254,0, + 182,86,98,35,246,236,217,227,227,236,236,172,45,187,46,37,37,69,252,197,23,253,171,98,98,49,167,207,103,109,218,205,12,12,188,234,155,151,45,87, + 239,217,180,251,133,222,196,84,237,89,207,71,180,115,247,1,203,111,71,15,159,70,8,9,166,148,26,61,175,142,16,226,97,106,106,122,102,195,134,13, + 13,59,117,234,36,116,116,116,68,90,90,26,194,195,195,27,222,188,121,243,203,3,7,14,204,38,132,248,83,74,141,233,224,238,125,227,224,62,71,115, + 91,59,176,122,61,92,26,55,43,206,111,192,187,155,215,192,232,116,224,244,122,248,246,253,18,64,97,206,164,175,175,111,181,186,238,18,66,92,26,52, + 104,112,104,245,234,213,34,141,70,131,199,143,31,227,214,173,91,92,74,74,74,133,13,113,9,33,2,66,200,181,165,75,151,186,249,249,249,89,100,102, + 102,130,101,89,251,115,231,206,77,110,218,180,169,165,187,187,187,248,224,193,131,80,40,20,96,24,198,182,86,173,90,182,95,125,245,149,246,224,193,131, + 179,1,172,43,143,115,249,12,151,54,121,239,233,226,84,82,171,103,221,230,35,145,74,174,246,156,213,203,249,138,101,109,82,226,217,234,85,187,182,69, + 173,122,230,243,165,150,141,108,243,146,254,152,223,171,118,237,61,87,222,87,254,48,68,8,225,241,120,188,45,254,254,254,95,31,59,118,204,44,60,60, + 220,204,215,215,23,28,199,149,116,224,47,110,56,235,237,93,233,164,176,242,248,215,78,156,56,113,254,144,33,67,208,184,113,227,146,166,168,223,127,255, + 61,230,207,159,111,115,247,238,221,217,71,143,30,157,77,8,89,71,41,93,80,5,234,210,215,219,170,126,198,203,163,163,163,7,159,57,115,102,248,188, + 121,243,188,1,76,5,176,36,43,43,171,3,0,216,217,217,137,1,220,34,132,140,153,59,119,238,164,5,11,22,160,119,239,222,75,8,33,171,170,227, + 229,35,132,240,237,237,237,123,127,241,197,23,124,189,94,15,115,115,115,232,245,250,218,85,229,41,195,73,0,236,152,48,97,194,164,137,19,39,194,198, + 198,6,122,189,222,231,216,177,99,123,150,44,89,210,134,16,50,182,60,91,9,33,35,39,77,154,52,112,196,136,17,104,209,162,5,4,130,194,211,184, + 97,195,6,172,88,177,66,122,237,218,181,47,15,30,60,248,37,33,228,52,165,180,218,189,208,56,142,131,64,32,64,66,66,2,28,29,29,37,182,182, + 182,129,132,144,221,89,89,89,103,141,217,223,214,214,246,51,66,200,170,226,198,196,132,144,31,61,61,61,191,47,251,30,165,65,41,133,64,32,72,203, + 207,207,31,154,153,153,249,162,178,247,32,132,252,56,116,232,208,175,143,28,57,34,5,128,245,235,215,99,230,204,153,144,201,100,144,74,165,198,30,234, + 39,252,13,160,213,234,12,95,1,148,74,101,179,133,211,191,1,143,87,248,212,88,199,203,3,107,190,251,150,156,191,24,216,172,162,253,132,38,46,136, + 184,191,21,18,247,0,104,244,12,30,189,140,198,245,245,61,0,0,62,189,22,65,163,235,82,108,176,173,216,212,244,71,45,203,62,128,147,211,99,196, + 197,85,24,91,149,202,124,58,57,56,201,46,238,218,181,206,180,97,237,186,208,49,122,36,165,39,129,16,9,220,92,45,48,102,100,47,97,135,14,46, + 246,203,151,255,114,201,220,193,103,64,65,70,100,165,13,67,235,58,144,253,237,155,121,15,249,170,143,159,164,81,195,6,16,73,76,75,214,53,111,209, + 2,205,91,180,224,45,80,228,119,123,242,244,121,183,83,215,30,105,234,58,144,19,17,25,116,84,5,148,37,93,46,9,33,152,49,99,6,138,159,190, + 139,145,150,150,134,155,55,111,148,187,143,145,248,224,61,86,173,90,101,33,151,203,123,237,221,187,183,179,179,179,243,170,148,148,148,251,198,144,124,67, + 72,77,72,36,93,70,111,220,200,53,237,223,159,111,237,228,196,227,88,150,36,71,69,217,109,218,186,181,99,246,187,119,166,5,182,182,217,114,149,74, + 25,25,25,9,19,19,19,34,16,8,90,150,229,161,148,166,17,66,126,228,241,200,124,66,8,36,18,147,200,137,19,39,22,95,76,106,94,184,112,193, + 172,95,191,126,74,0,177,0,32,145,152,184,242,249,60,159,194,4,66,252,104,140,192,52,55,55,159,190,114,245,143,230,121,217,57,42,93,65,129,222, + 209,82,74,32,149,242,243,243,20,121,201,169,25,234,69,203,86,8,38,140,25,49,29,192,100,163,78,32,33,30,77,154,52,121,114,230,204,25,71,59, + 59,59,228,228,228,32,43,43,11,79,158,60,1,165,20,254,254,254,146,182,173,91,53,251,110,209,226,135,132,144,54,198,136,45,115,91,123,172,247,107, + 10,0,248,62,54,171,248,125,176,123,112,223,146,109,86,36,230,2,0,76,76,76,254,204,8,169,54,93,186,116,17,1,192,216,177,99,243,242,243,243, + 215,0,56,66,43,104,170,90,132,217,139,23,47,118,245,242,242,170,113,228,200,17,40,20,10,0,112,244,242,242,130,143,143,15,123,251,246,109,248,248, + 248,192,194,194,2,119,239,222,197,195,135,15,209,162,69,11,11,145,72,52,4,6,132,86,199,30,29,23,75,250,249,182,175,219,124,36,164,150,206,216, + 115,244,56,34,158,31,104,175,209,133,47,94,51,213,117,132,138,74,70,185,121,91,44,168,217,162,131,93,157,6,253,81,163,249,11,123,53,123,47,122, + 201,148,90,107,5,38,234,3,75,55,36,103,149,199,91,20,46,92,239,239,239,63,248,216,177,99,214,0,16,26,26,138,180,180,52,56,56,56,192,196, + 196,4,66,161,176,100,62,105,53,49,106,231,206,157,37,162,141,97,24,80,90,56,5,192,204,204,12,159,127,254,57,154,54,109,138,179,103,207,142,2, + 240,145,208,34,132,248,181,110,221,250,112,141,26,53,220,75,47,239,211,167,15,134,13,27,6,0,232,208,161,67,151,65,131,6,209,98,65,152,146,146, + 162,120,250,244,105,55,74,233,227,242,12,226,241,120,170,164,164,36,204,157,59,23,49,49,49,83,8,33,113,0,76,196,98,113,241,38,98,66,136,79, + 131,6,13,182,204,156,57,19,239,223,191,199,235,215,175,159,84,55,148,74,41,101,61,61,61,223,233,245,250,22,12,195,64,165,82,97,192,128,1,38, + 182,182,182,105,124,62,255,77,102,102,230,112,90,88,206,110,20,8,33,38,0,54,78,156,56,113,210,188,121,243,112,227,198,13,156,63,127,30,35,70, + 140,64,64,64,0,164,82,233,232,128,128,128,135,0,246,150,179,123,151,157,59,119,130,101,217,143,254,55,76,76,76,224,231,231,135,250,245,235,227,252, + 249,243,93,80,106,62,106,85,64,8,169,225,239,239,47,230,56,14,5,5,5,184,125,251,182,212,212,212,84,234,230,230,54,30,128,81,66,203,218,218, + 250,192,241,227,199,113,226,196,9,0,64,100,100,36,188,189,189,205,43,219,47,44,44,172,86,255,254,253,143,1,168,83,217,182,53,106,212,152,120,236, + 216,177,18,69,229,226,226,2,137,68,130,82,223,131,79,248,15,68,185,87,34,173,86,169,19,8,120,111,92,156,27,159,184,123,103,90,73,232,16,224, + 189,209,106,149,58,0,96,57,138,60,37,3,83,9,15,177,169,249,120,21,149,249,17,15,45,83,162,41,52,245,128,164,85,44,40,165,208,234,88,104, + 114,83,177,230,146,18,225,137,106,104,11,228,208,234,10,211,176,236,237,237,5,129,129,87,102,254,241,199,205,73,191,253,246,27,63,209,202,234,53,114, + 115,155,149,199,105,107,91,219,66,96,110,122,226,231,93,75,76,41,63,10,145,241,5,168,227,214,10,246,214,238,72,205,44,192,131,215,151,241,230,237, + 69,120,57,215,64,192,244,158,38,43,87,31,57,110,99,227,229,33,151,71,231,25,178,179,8,35,127,185,26,9,38,59,10,108,214,123,176,249,201,31, + 109,32,117,240,64,243,78,174,112,112,175,45,25,21,176,98,36,10,93,198,31,113,82,74,211,248,124,254,207,60,30,153,68,8,65,227,198,77,18,55, + 110,220,168,251,136,16,208,53,110,220,36,145,207,231,185,21,94,216,121,59,57,142,77,43,143,179,156,115,157,70,8,249,81,44,150,204,3,0,39,39, + 231,132,75,151,46,233,6,15,30,140,13,27,54,136,231,207,159,191,200,205,205,109,108,217,240,94,89,78,127,66,60,92,107,215,238,190,234,193,3,42, + 212,235,73,246,147,39,121,57,41,41,76,106,126,190,248,228,155,55,189,199,205,153,35,118,119,119,199,253,139,23,237,50,10,10,104,142,70,163,202,201, + 201,161,12,195,60,41,143,147,82,186,80,38,147,153,237,217,179,199,103,226,196,137,47,146,147,147,23,2,128,139,139,203,26,0,245,1,196,150,90,134, + 93,187,142,39,141,31,63,62,50,45,45,237,131,144,105,5,199,222,192,209,193,193,236,232,47,7,67,108,45,76,121,246,110,206,60,161,149,149,144,145, + 152,137,40,133,218,203,171,182,25,128,6,6,206,217,7,156,132,16,98,106,106,122,230,247,223,127,119,20,10,133,96,89,22,14,14,14,136,137,137,65, + 78,78,14,242,243,243,17,21,254,26,158,238,238,88,190,96,190,243,212,249,11,206,16,66,90,148,190,153,149,103,39,171,255,240,163,46,118,241,151,69, + 233,60,11,35,143,189,44,98,226,227,227,33,149,74,209,176,97,67,233,131,7,15,238,25,18,89,165,57,77,76,76,134,180,107,215,206,226,200,145,35, + 104,209,162,5,172,172,172,112,251,246,109,132,134,134,66,167,211,241,20,10,5,164,82,41,214,174,93,11,15,15,15,228,231,231,35,54,54,214,78,40, + 20,218,27,226,188,29,120,123,101,238,251,91,139,83,201,213,158,123,142,30,199,248,175,134,194,137,70,221,179,170,77,86,118,239,215,238,123,202,119,239, + 107,110,209,216,198,187,97,63,136,196,82,76,157,183,2,145,97,23,108,148,249,33,83,8,155,224,14,96,70,89,206,34,143,8,207,221,221,125,220,201, + 147,39,45,138,151,243,249,252,146,153,135,165,135,192,27,26,248,110,204,249,36,132,32,38,38,6,142,142,142,144,74,165,37,3,196,195,195,195,241,232, + 209,35,20,79,163,48,192,57,252,143,63,254,112,55,55,55,47,187,13,50,51,51,193,48,12,204,204,204,192,178,44,116,58,29,244,122,61,212,106,181, + 180,126,253,250,147,1,60,46,143,147,227,184,89,67,134,12,105,247,248,241,227,90,91,183,110,133,86,171,93,159,154,154,138,129,3,7,130,227,56,116, + 233,210,229,51,74,105,196,162,69,139,0,0,51,103,206,212,23,20,20,76,172,206,177,23,29,127,253,65,131,6,213,186,113,227,6,218,183,111,15,141, + 70,131,13,27,54,88,238,218,181,203,242,224,193,131,14,243,230,205,219,7,160,71,69,156,69,159,215,122,39,39,167,73,95,125,245,149,105,209,12,83, + 28,56,112,0,203,151,47,63,6,96,209,149,43,87,150,158,63,127,126,228,184,113,227,176,124,249,242,0,20,9,173,242,56,163,163,163,225,224,224,0, + 75,75,75,0,128,78,167,67,112,112,48,174,95,191,142,122,245,234,85,122,76,21,216,89,195,223,223,127,223,209,163,71,45,18,18,18,112,247,238,93, + 120,122,122,66,169,84,86,58,27,182,52,103,94,94,158,212,203,203,11,30,30,30,37,227,206,94,191,126,109,112,68,218,254,211,55,193,228,197,97,228, + 55,223,32,43,43,75,90,30,103,89,168,84,42,117,124,124,188,116,221,186,117,112,118,118,70,141,26,53,96,98,98,2,66,8,244,122,61,168,1,93, + 109,204,231,222,177,35,17,100,38,217,124,97,101,109,51,133,82,42,200,205,149,255,162,67,206,169,247,239,233,71,17,8,99,57,63,161,16,2,0,184, + 116,233,18,237,211,167,15,41,254,233,234,138,188,204,76,155,72,71,167,70,199,29,157,26,20,205,253,226,189,225,243,109,34,101,50,101,30,0,232,24, + 138,160,55,57,8,121,151,138,208,119,169,48,151,24,231,124,209,232,152,194,250,76,74,161,86,252,235,161,85,167,148,67,163,43,76,247,208,106,148,200, + 205,120,77,6,15,232,102,50,105,210,4,56,59,187,58,24,160,131,78,98,18,48,117,102,111,107,91,107,33,46,62,184,138,207,234,13,128,137,68,136, + 172,92,53,64,128,183,81,215,1,206,2,97,145,241,104,221,192,12,61,186,251,74,207,158,138,152,3,96,137,49,246,50,137,79,32,242,238,5,33,171, + 135,62,51,2,92,78,28,96,238,4,21,145,34,43,37,14,111,238,157,46,140,198,87,2,150,101,167,56,56,56,228,44,90,180,168,99,157,58,117,116, + 147,39,79,126,25,27,27,251,193,88,155,154,53,107,254,180,115,231,78,188,123,247,46,105,213,170,85,183,51,50,50,22,27,99,99,49,40,165,11,8, + 33,155,1,32,37,37,37,243,220,185,115,205,239,220,185,19,176,121,243,102,217,180,105,211,196,211,166,77,27,3,224,7,67,251,79,39,68,108,46,145, + 116,93,117,247,46,101,18,19,53,135,182,109,19,239,8,10,90,164,227,56,23,123,71,71,210,182,117,235,2,51,30,47,51,43,45,141,113,168,85,139, + 31,115,253,186,29,53,53,77,190,114,229,74,158,66,161,48,56,58,135,207,231,43,203,11,23,150,7,103,103,103,109,121,57,92,134,64,8,201,227,40, + 213,217,120,121,162,123,151,182,117,222,69,68,69,73,172,172,249,222,222,53,235,190,126,19,251,152,99,24,13,33,36,175,114,38,128,207,231,15,221,188, + 121,115,35,75,75,75,112,28,7,43,43,43,100,100,100,64,171,213,34,47,47,15,218,252,92,232,114,115,17,26,31,131,118,29,58,98,112,207,238,190, + 7,207,253,62,20,192,177,138,120,93,26,55,43,241,100,173,168,105,87,178,124,121,66,78,137,232,90,215,204,27,34,169,20,221,102,85,37,18,245,33, + 40,165,47,196,98,241,101,127,127,255,222,115,230,204,225,165,164,164,92,37,132,180,163,148,190,174,104,63,169,84,90,59,51,51,19,10,133,2,86,86, + 86,216,188,121,51,100,50,25,148,74,37,158,62,125,74,221,220,220,200,237,219,183,225,230,230,134,172,172,44,232,116,58,168,84,170,84,173,86,107,48, + 92,94,20,30,236,53,171,151,243,149,136,231,7,218,187,146,232,167,67,102,119,120,23,17,250,38,254,218,245,7,63,48,106,147,132,156,196,63,230,123, + 181,124,97,63,101,238,114,108,95,191,20,17,143,239,102,203,60,242,118,152,18,205,254,214,221,12,219,91,80,80,160,14,15,15,183,8,9,9,1,33, + 4,86,86,86,48,51,51,43,87,108,85,21,69,30,179,226,247,65,65,65,1,68,34,17,236,236,236,176,119,239,222,146,27,175,167,167,103,69,52,191, + 116,235,214,109,168,135,135,135,69,233,133,45,91,182,196,132,9,19,240,243,207,63,35,40,40,232,131,121,154,169,169,169,41,122,189,126,191,33,66,74, + 105,14,33,164,231,128,1,3,158,223,187,119,207,114,239,222,189,96,24,166,220,215,158,61,123,240,232,209,163,37,148,210,55,85,62,1,133,231,160,222, + 192,129,3,239,30,62,124,216,58,35,35,3,197,223,141,130,130,2,176,44,139,186,117,235,18,134,97,42,204,123,35,132,240,248,124,254,185,109,219,182, + 245,27,63,126,60,4,2,1,180,90,45,182,109,219,134,249,243,231,167,1,24,69,41,213,17,66,22,237,223,191,127,100,255,254,253,209,164,73,19,223, + 138,56,21,10,5,20,10,5,132,66,33,156,156,156,176,114,229,74,104,181,133,151,21,31,31,159,226,247,229,3,248,197,199,199,167,95,100,100,228,6, + 74,233,143,229,113,57,59,59,15,160,148,126,203,178,108,190,191,191,191,221,209,163,71,45,146,146,146,240,252,249,115,44,89,178,68,206,113,28,203,113, + 28,81,169,84,209,50,153,236,185,68,34,49,85,42,149,217,89,89,89,171,169,225,153,149,68,46,151,35,61,61,29,189,251,244,193,169,147,39,193,48, + 12,244,122,253,71,47,134,97,112,253,226,73,36,68,135,163,109,155,54,128,145,209,11,66,8,17,10,133,24,59,118,44,4,2,1,76,77,77,161,86, + 171,161,215,23,214,103,20,9,173,42,133,165,189,189,45,236,4,16,141,247,241,249,60,96,240,140,190,14,206,46,174,176,182,148,32,60,252,117,187,155, + 55,174,111,171,95,215,97,23,167,213,239,122,19,147,243,183,15,187,47,171,69,254,238,209,73,55,113,0,0,32,0,73,68,65,84,247,251,59,97,68, + 213,225,32,214,222,254,84,102,82,146,88,39,22,155,69,2,133,94,174,66,145,53,136,5,142,130,209,233,139,46,20,180,232,101,164,208,210,179,120,23, + 17,134,123,215,126,135,189,50,9,153,209,77,1,81,35,104,85,185,80,107,11,159,252,57,142,197,203,231,55,144,151,155,141,134,45,250,2,60,222,35, + 67,124,86,118,164,111,219,230,141,249,239,226,195,208,210,103,16,106,185,181,71,92,74,30,114,20,26,200,243,212,104,218,112,1,50,228,42,228,41,213, + 120,253,238,32,92,93,106,241,136,32,170,11,140,20,90,154,215,103,160,121,115,30,162,26,237,32,174,219,31,252,26,126,136,15,185,133,151,87,54,33, + 241,213,125,80,142,133,179,79,171,202,137,0,16,66,182,93,189,122,181,85,187,118,237,4,93,187,118,109,226,226,226,210,36,57,57,249,37,0,184,184, + 184,52,233,221,187,119,19,7,7,7,108,217,178,69,69,8,217,102,20,105,25,148,9,183,61,145,201,100,171,206,156,57,179,109,194,132,9,112,116,116, + 108,84,209,190,25,66,97,147,81,171,87,83,33,159,79,143,109,223,46,90,126,245,234,198,223,246,239,23,117,238,212,137,80,74,17,28,28,108,182,110, + 251,118,179,175,191,248,34,54,46,61,157,185,19,20,164,75,73,76,204,79,47,40,88,158,156,156,108,116,97,192,95,9,189,94,255,48,38,58,202,173, + 89,171,166,14,47,94,71,191,238,209,165,109,27,30,143,199,123,19,21,247,208,193,193,210,236,198,181,63,116,122,189,254,163,106,183,242,32,145,72,250, + 118,238,220,89,32,151,203,225,226,226,130,140,140,12,36,37,37,21,122,28,114,229,208,229,230,66,151,159,11,78,145,143,232,167,79,208,180,150,151,228, + 100,97,178,124,133,66,171,248,41,179,172,119,165,180,103,75,108,97,1,177,84,10,82,197,176,33,33,228,11,107,107,235,249,57,57,57,151,41,165,43, + 117,58,221,212,249,243,231,183,220,186,117,171,253,170,85,171,44,191,253,246,219,147,132,144,166,148,82,141,33,14,133,66,241,158,97,24,59,0,178,27, + 55,110,192,209,209,17,185,185,185,197,158,22,173,82,169,52,201,202,202,130,70,163,129,86,171,133,165,165,37,158,61,123,150,205,48,204,133,202,236,179, + 172,77,86,106,116,225,139,237,124,205,147,117,140,77,135,244,108,78,190,116,67,242,10,0,27,123,213,174,189,71,199,221,141,126,27,118,193,38,230,233, + 237,236,228,183,5,181,246,92,138,50,152,163,69,41,165,132,16,142,16,66,235,214,173,139,204,204,76,240,249,124,152,153,153,65,42,149,226,202,149,43, + 24,52,104,80,149,133,22,33,196,196,220,220,124,53,143,199,27,106,101,101,229,192,178,44,22,44,88,128,126,253,250,65,44,22,67,167,211,149,120,52, + 139,189,84,21,121,58,40,165,193,0,44,203,188,71,39,123,123,251,155,26,141,6,81,81,81,56,119,238,92,71,74,233,29,163,12,252,23,111,20,33, + 164,167,159,159,223,129,230,205,155,215,166,148,162,81,163,70,24,54,108,24,14,30,60,136,224,224,96,228,229,229,113,215,175,95,255,13,192,134,170,112, + 19,66,72,209,249,173,59,112,224,192,251,71,142,28,177,201,202,202,130,74,165,66,65,65,1,78,158,60,137,118,237,218,193,222,222,30,135,15,31,102, + 40,165,6,63,251,162,28,186,189,187,118,237,234,55,110,220,56,236,216,177,3,199,142,29,67,255,254,253,49,116,232,80,100,100,100,200,214,175,95,63, + 146,16,178,23,192,210,97,195,134,65,161,80,224,233,211,167,225,198,216,170,215,235,145,147,147,131,156,156,28,152,154,154,22,159,27,160,80,172,28,220, + 180,105,211,87,1,1,1,168,85,171,214,210,162,162,160,143,170,68,57,142,155,152,148,148,100,35,16,8,236,24,134,65,66,66,2,158,61,123,134,41, + 83,166,100,103,103,103,79,160,148,198,17,66,22,141,29,59,118,229,172,89,179,74,190,75,179,102,205,186,72,8,233,105,200,155,147,144,144,0,177,88, + 140,227,199,142,65,93,36,76,139,206,73,137,237,197,194,104,212,215,254,32,100,32,82,83,43,191,116,214,173,107,211,64,204,151,204,16,137,132,118,114, + 185,188,228,218,161,213,106,161,209,104,62,240,100,137,68,66,187,86,205,106,92,82,41,243,191,123,21,41,55,56,32,189,126,29,235,198,102,230,86,1, + 125,122,14,30,222,189,231,151,124,70,175,71,96,224,5,252,250,235,78,116,242,243,65,173,58,141,48,109,250,12,43,141,150,89,112,253,250,213,249,109, + 91,121,93,205,207,203,89,88,17,231,39,148,15,1,0,148,175,32,7,177,174,174,144,3,0,33,196,222,198,198,102,59,203,178,157,128,241,16,74,157, + 240,250,217,99,100,203,133,208,168,88,112,180,80,108,25,3,141,70,139,187,129,231,177,121,211,70,100,101,101,193,239,243,142,80,8,220,225,225,238,1, + 181,170,208,145,65,41,160,211,234,225,32,171,129,23,47,94,234,243,10,10,238,24,226,19,153,232,124,61,100,62,208,232,218,192,68,44,70,110,190,22, + 242,34,145,117,248,212,16,104,148,42,48,90,29,24,173,30,14,30,3,81,79,214,25,28,123,161,220,80,146,65,112,44,116,49,119,161,139,185,11,211, + 54,211,241,251,154,175,62,88,109,236,220,221,244,244,244,116,23,23,151,11,193,193,193,3,134,12,25,130,91,183,110,125,11,96,18,0,152,152,152,124, + 59,100,200,16,4,7,7,227,213,171,87,23,210,211,211,255,146,193,171,98,177,88,165,209,20,222,99,205,204,204,76,42,217,214,181,165,191,63,47,247, + 197,139,188,77,15,30,44,221,179,119,175,168,107,151,46,68,207,48,224,88,22,117,188,189,73,247,238,221,205,15,158,56,97,199,215,235,31,205,157,58, + 245,198,207,35,70,228,63,86,40,140,77,52,175,89,20,50,4,128,154,21,44,51,26,26,141,102,235,196,9,227,186,221,186,125,199,189,102,13,87,139, + 107,55,238,190,20,75,68,188,90,158,181,248,57,57,57,130,101,75,23,154,106,52,26,99,69,171,175,189,189,61,82,83,83,241,238,221,59,104,52,26, + 232,245,122,112,202,2,104,229,114,104,243,114,65,84,5,144,176,44,212,153,105,168,89,203,11,248,87,69,98,133,40,47,92,88,58,84,104,98,105,9, + 145,185,20,60,161,176,220,112,151,1,206,230,173,90,181,58,113,250,244,105,209,152,49,99,90,19,66,182,23,221,32,186,44,89,178,228,201,246,237,219, + 37,19,38,76,168,187,97,195,134,145,0,126,49,196,163,86,171,79,92,186,116,233,235,26,53,106,200,66,67,67,161,86,171,193,113,28,122,245,234,5, + 0,37,223,153,136,136,8,149,90,173,78,15,11,11,203,139,139,139,211,193,136,42,193,165,91,146,31,206,26,236,230,47,115,114,125,100,98,90,211,147, + 42,94,12,152,53,216,109,253,79,39,19,213,87,222,191,207,95,50,165,214,218,130,252,144,41,214,110,138,29,87,46,24,22,89,165,64,73,81,57,187, + 157,157,29,4,2,1,132,66,33,68,34,17,30,60,120,128,130,130,2,20,123,80,12,133,14,203,156,67,19,11,11,139,87,203,151,47,119,155,48,97, + 130,200,196,196,4,114,185,28,135,15,31,198,216,177,99,241,235,175,191,150,155,255,82,89,72,169,44,248,124,126,192,136,17,35,160,213,106,49,108,216, + 48,236,217,179,39,0,192,157,42,145,0,160,148,62,34,132,120,191,124,249,210,18,64,255,161,67,135,238,31,56,112,32,238,220,185,131,11,23,46,116, + 4,16,9,64,5,96,13,41,28,226,188,166,162,66,16,82,216,194,97,167,131,131,67,255,6,13,26,188,28,56,112,96,195,35,71,142,88,167,167,167, + 23,23,63,32,38,38,6,251,246,237,75,217,187,119,111,30,203,178,118,60,30,239,82,78,78,142,161,170,105,2,96,239,166,77,155,70,23,133,3,113, + 250,244,105,186,113,227,70,178,100,201,18,200,229,114,116,234,212,9,187,118,237,154,161,80,40,154,108,220,184,113,252,224,193,131,177,98,197,10,20,20, + 20,24,172,140,173,44,213,76,175,215,19,0,109,55,109,218,84,35,32,32,0,167,79,159,70,243,230,205,77,163,163,163,127,6,48,174,236,246,197,158, + 196,232,232,104,40,149,74,220,191,127,31,75,151,46,149,151,18,89,51,38,77,154,180,114,198,140,25,88,189,122,53,13,13,13,77,31,56,112,160,108, + 247,238,221,252,58,117,234,204,0,80,174,208,186,126,253,58,194,195,195,49,101,202,20,116,239,222,29,90,173,22,251,246,237,195,209,163,71,193,178,44, + 38,79,158,140,97,195,134,65,40,20,226,248,241,227,216,180,105,19,234,215,175,95,225,177,213,243,182,91,219,170,101,135,249,206,174,117,112,248,200,81, + 100,103,103,151,156,147,226,243,66,41,69,126,126,62,82,83,83,97,101,105,129,245,27,86,246,158,252,237,104,119,20,182,193,248,8,190,181,109,55,12, + 26,54,110,246,176,175,71,35,244,229,115,28,220,255,11,194,66,131,75,248,24,189,14,145,225,207,16,25,254,12,50,167,26,232,222,181,35,249,234,171, + 175,122,141,248,122,168,3,128,191,173,117,196,127,179,55,171,210,170,195,138,220,117,69,34,235,213,241,227,199,237,252,252,252,248,12,195,224,106,96,32, + 166,76,250,6,35,71,44,128,14,54,96,180,34,112,162,10,239,225,37,80,169,148,160,160,40,40,40,64,80,80,16,40,199,224,224,238,141,160,148,43, + 17,90,0,133,86,167,131,171,71,93,236,220,179,138,129,80,248,196,16,95,94,22,159,213,51,20,73,233,241,136,79,9,131,149,133,7,4,66,15,100, + 229,40,33,224,57,65,175,142,0,91,228,86,85,22,36,66,165,251,115,159,31,155,251,177,247,148,86,225,162,171,82,169,14,29,58,116,168,247,79,63, + 253,36,238,211,167,143,143,139,139,75,91,0,24,52,104,144,143,165,165,37,14,29,58,164,85,169,84,135,254,148,145,165,160,215,235,59,183,106,213,10, + 114,185,28,49,49,49,47,43,218,150,213,106,237,164,142,142,252,244,91,183,244,25,114,185,123,231,206,157,137,158,97,192,35,4,217,185,185,136,139,141, + 133,181,181,53,121,21,17,33,221,54,109,218,89,159,134,13,5,197,21,137,198,224,194,133,11,102,40,204,203,170,112,89,85,64,41,45,32,132,140,154, + 54,109,218,217,67,135,14,91,165,166,165,189,149,136,37,140,84,106,234,60,98,248,80,65,78,78,206,215,148,82,133,177,124,114,185,28,209,209,209,48, + 53,53,133,72,40,4,167,82,130,45,80,64,157,157,5,190,78,3,49,203,194,214,84,2,55,39,71,120,56,216,87,78,136,194,234,194,226,196,247,210, + 225,194,245,173,124,33,54,151,66,108,33,197,228,139,183,1,0,34,145,8,88,98,48,186,91,2,66,136,189,171,171,235,239,71,142,28,17,101,100,100, + 32,56,56,248,37,165,52,151,16,98,1,128,11,15,15,255,35,44,44,172,111,81,213,93,101,213,98,27,207,156,57,211,205,207,207,143,241,244,244,52, + 79,79,79,119,151,203,229,92,74,74,202,7,46,161,107,215,174,73,242,243,243,11,56,142,59,139,194,62,80,149,246,47,154,53,216,205,36,232,5,166, + 119,232,81,179,145,165,125,99,100,51,47,26,61,122,153,50,125,214,96,183,173,63,157,76,84,155,18,205,126,194,38,184,11,76,212,70,37,49,83,74, + 169,189,189,61,194,195,195,17,20,20,132,184,184,56,68,71,71,151,8,170,144,144,16,108,218,180,9,179,102,205,130,149,149,85,165,124,230,230,230,171, + 151,45,91,230,22,16,16,32,42,94,198,231,243,49,117,234,84,228,230,230,98,207,158,61,152,58,117,106,121,118,24,99,46,0,128,16,226,213,173,91, + 183,62,206,206,206,200,202,202,130,147,147,19,252,252,252,250,17,66,60,41,165,49,70,19,125,136,201,61,122,244,88,185,124,249,114,232,245,122,140,29, + 59,22,111,223,190,61,241,246,237,219,205,30,30,30,211,231,205,155,39,147,201,100,24,50,100,136,57,0,127,67,36,182,182,182,107,126,249,229,151,175, + 251,244,233,195,211,233,116,159,223,188,121,19,177,177,177,208,106,181,96,24,6,239,223,191,199,212,169,83,83,178,178,178,58,80,74,223,27,97,215,152, + 69,139,22,141,158,62,125,58,214,173,91,135,101,203,150,253,102,101,101,213,176,105,211,166,205,150,45,91,134,185,115,231,162,70,141,26,176,179,179,171, + 183,100,201,18,223,89,179,102,97,235,214,173,88,186,116,233,111,0,246,85,231,68,112,28,71,214,174,93,219,100,211,166,77,206,197,34,139,199,227,225, + 248,241,227,120,241,226,69,63,3,251,236,114,114,114,250,214,217,217,89,124,253,250,117,105,141,26,53,192,48,140,190,72,100,109,243,240,240,152,242,254, + 253,123,244,233,211,7,81,81,81,135,40,165,35,59,116,232,80,48,107,214,44,51,83,83,83,131,95,44,134,97,48,113,226,68,56,57,57,225,238,189, + 251,224,243,8,154,55,111,142,71,143,30,161,78,157,58,248,252,243,207,241,226,197,11,232,117,58,248,248,248,160,123,247,238,72,72,72,168,240,248,248, + 60,50,106,245,138,185,120,250,34,2,103,206,136,240,244,233,83,200,100,50,72,36,18,80,74,161,209,104,144,145,145,1,189,78,131,70,13,188,112,96, + 239,90,164,167,103,0,60,98,48,229,134,240,200,240,209,223,12,192,189,251,129,248,249,231,95,160,80,20,148,187,157,88,108,130,58,62,190,112,117,113, + 68,66,98,2,8,15,198,93,244,170,137,255,230,208,225,159,170,58,180,182,182,222,124,236,216,49,187,78,157,58,241,11,10,10,192,113,28,218,251,249, + 97,122,64,0,46,28,57,2,239,214,195,64,180,82,48,102,198,85,61,168,85,74,212,111,214,22,131,135,12,69,124,92,28,122,244,29,8,181,90,89, + 242,132,81,104,48,160,213,234,96,239,232,142,107,215,174,241,49,118,172,193,28,19,86,39,14,137,124,175,110,151,163,122,129,160,167,7,161,211,232,208, + 168,209,18,232,56,59,56,186,125,11,189,254,28,242,50,110,2,0,44,237,58,33,49,62,30,60,190,232,149,81,198,150,3,174,224,227,2,200,170,92, + 116,115,114,114,114,93,92,92,78,5,5,5,13,247,247,247,199,181,107,215,198,3,128,191,191,63,130,130,130,16,29,29,125,42,39,39,39,183,186,246, + 149,134,139,139,75,255,78,157,58,13,107,217,178,37,46,94,188,8,74,233,61,99,246,227,11,133,148,199,227,129,227,56,16,0,89,57,57,120,251,246, + 45,178,50,51,161,215,235,81,160,80,112,190,62,62,10,202,113,22,149,146,149,66,233,10,67,148,83,117,88,188,172,42,156,0,64,41,141,147,74,165, + 241,249,10,133,131,165,141,109,190,137,88,204,230,230,228,230,190,126,21,170,53,242,230,80,140,240,176,176,176,134,201,201,201,136,143,139,3,163,84,128, + 175,209,130,167,81,162,75,219,207,96,10,10,19,112,16,114,122,8,249,66,228,23,86,231,85,26,238,40,22,250,192,191,60,91,132,144,194,112,161,185, + 57,196,82,139,146,117,69,199,83,169,161,18,137,228,200,201,147,39,157,93,93,93,177,98,197,10,184,185,185,213,107,212,168,145,178,125,251,246,166,50, + 153,12,245,235,215,71,219,182,109,113,229,202,21,0,168,240,28,80,74,25,66,72,247,123,247,238,205,126,240,224,193,96,115,115,115,50,109,218,52,65, + 175,94,189,32,145,72,160,84,42,33,151,203,113,244,232,209,76,150,101,155,21,217,106,103,110,110,190,143,16,18,163,80,40,2,202,114,30,220,212,216, + 37,61,155,27,43,115,114,29,208,161,71,205,70,157,123,116,133,151,119,103,116,238,17,15,0,107,109,5,177,195,214,47,110,120,214,222,221,118,223,181, + 171,215,151,250,117,232,188,104,193,4,155,149,107,127,145,87,154,79,71,8,1,199,113,31,244,14,42,141,232,232,104,236,222,189,27,11,23,86,222,130, + 142,199,227,13,157,48,97,130,168,244,178,226,144,113,223,190,125,225,239,239,255,129,208,178,183,183,135,147,147,19,98,99,99,1,160,220,202,200,114,48, + 125,204,152,49,68,165,82,97,220,184,113,216,179,103,15,134,13,27,70,238,220,185,51,29,192,71,231,206,8,155,215,207,155,55,111,246,212,169,83,145, + 157,157,141,203,151,47,163,87,175,94,56,126,252,184,195,229,203,151,87,119,234,212,9,124,62,31,23,47,94,4,195,48,21,246,250,18,137,68,253,251, + 244,233,195,75,72,72,128,72,36,66,139,22,45,144,152,152,8,165,82,137,164,164,36,204,152,49,35,53,43,43,171,163,177,255,71,34,145,40,96,250, + 244,233,56,118,236,24,22,44,88,176,31,192,184,220,220,220,193,15,30,60,56,246,197,23,95,32,41,41,9,103,207,158,197,210,165,75,201,200,145,35, + 177,99,199,14,204,152,49,227,55,0,227,42,168,144,204,79,79,79,183,170,93,187,54,210,210,210,160,80,40,112,246,236,89,199,43,87,174,120,186,186, + 186,90,70,71,71,179,63,252,240,131,56,32,32,0,155,55,111,70,112,112,48,14,30,60,136,206,157,59,51,81,81,81,229,122,201,138,90,54,156,181, + 181,181,189,110,110,110,142,252,252,252,226,202,210,57,11,22,44,152,186,102,77,161,147,61,57,57,25,163,70,141,26,65,8,225,150,47,95,110,38,18, + 137,160,86,171,203,87,37,0,88,150,69,141,26,53,176,251,204,45,68,88,91,34,82,157,129,0,239,218,240,241,241,65,231,206,157,17,120,243,49,242, + 130,94,64,244,248,58,236,219,127,134,250,237,218,21,127,151,12,130,99,57,0,28,60,221,165,8,188,176,23,207,95,70,225,249,203,48,136,37,133,73, + 240,42,149,18,205,26,213,65,235,22,173,144,156,146,132,67,7,247,194,214,222,181,194,235,8,165,20,34,1,11,95,31,39,28,57,248,11,46,94,190, + 129,131,135,142,150,228,188,9,4,66,52,109,214,26,45,90,248,33,42,250,61,246,238,253,25,14,142,238,6,249,62,1,32,132,56,3,232,3,224,82, + 217,138,220,146,208,97,233,159,165,193,113,92,103,63,63,63,190,66,161,128,90,173,70,106,106,42,98,99,99,97,109,99,141,168,228,24,116,52,211,33, + 149,203,67,248,203,87,44,225,11,131,43,51,166,79,135,166,64,135,166,152,50,102,152,193,109,40,40,204,45,237,11,67,55,12,243,14,91,183,26,124, + 114,102,88,253,31,129,215,111,182,26,51,178,191,240,218,205,61,208,107,57,168,244,86,40,80,107,81,160,19,130,103,213,11,200,188,3,190,64,130,207, + 154,212,193,217,51,87,116,148,209,223,48,196,87,22,2,89,67,48,105,255,10,73,115,5,31,70,244,76,44,108,141,14,29,22,131,101,217,227,135,15, + 31,254,178,77,155,54,102,157,58,117,170,13,0,18,137,68,119,248,240,97,37,203,178,199,171,68,134,143,187,193,59,59,59,55,19,137,68,195,250,247, + 239,223,108,244,232,209,120,253,250,53,14,29,58,20,89,167,78,157,10,123,136,241,197,226,44,69,122,186,181,212,211,83,96,99,97,145,124,229,242,229, + 26,93,187,117,35,241,241,241,200,202,202,130,90,173,70,240,203,151,84,200,231,39,18,75,75,94,196,139,23,60,190,88,108,236,205,6,248,176,194,176, + 188,170,195,226,101,85,134,187,179,77,237,165,11,39,122,169,213,234,134,121,121,121,140,64,40,20,186,57,89,199,85,133,67,163,209,92,252,227,143,63, + 190,236,214,181,171,228,109,72,48,244,185,185,208,230,202,33,226,88,216,54,109,2,158,78,3,162,213,195,181,62,133,58,199,28,119,30,191,209,107,52, + 154,74,155,26,22,11,45,94,25,97,32,150,74,33,177,176,132,68,42,45,43,24,42,124,146,35,132,152,245,239,223,191,203,103,159,125,6,74,41,118, + 239,222,13,157,78,39,214,233,116,208,106,181,208,233,116,200,203,203,195,193,131,7,177,115,231,206,7,0,126,171,204,70,74,41,99,102,102,246,5,33, + 196,81,32,16,40,29,28,28,204,143,31,63,94,210,110,162,105,211,166,176,176,176,16,73,165,210,68,0,240,242,242,18,254,250,235,175,214,253,250,245, + 187,91,30,95,221,70,245,230,122,49,54,29,76,76,107,122,90,218,55,134,151,119,103,0,64,183,190,99,224,85,199,3,121,153,33,158,106,85,236,0, + 145,64,110,243,106,107,210,107,211,62,13,71,23,164,223,126,139,242,203,251,203,179,23,60,30,175,220,112,108,173,90,181,48,101,202,148,74,57,8,33, + 60,43,43,43,135,226,60,31,0,200,202,202,66,74,74,10,194,195,195,81,183,110,93,100,103,103,195,213,213,21,90,173,22,45,91,182,132,74,165,194, + 166,77,155,112,255,254,253,7,40,170,140,172,228,61,76,189,189,189,71,53,107,214,12,151,47,95,198,211,167,79,147,2,3,3,93,253,252,252,224,233, + 233,57,154,16,242,29,165,134,123,240,149,195,103,254,249,231,159,79,155,58,117,42,194,194,194,48,113,226,196,172,132,132,132,179,39,78,156,24,183,116, + 233,82,94,143,30,61,144,146,146,130,245,235,215,179,247,239,223,223,0,96,69,69,124,148,210,55,9,9,9,110,106,181,26,217,217,217,96,24,6,74, + 165,18,87,174,92,193,193,131,7,211,138,68,214,59,99,237,107,210,164,73,125,30,143,135,99,199,142,1,192,98,74,41,71,8,57,59,96,192,128,164, + 31,126,248,193,117,225,194,133,24,63,126,60,116,58,29,214,173,91,135,133,11,23,94,66,161,200,170,232,34,250,147,147,147,211,183,19,39,78,172,55, + 107,214,44,4,5,5,57,62,123,246,172,69,112,112,48,220,221,221,145,149,149,37,176,179,179,195,230,205,155,49,115,230,204,211,0,50,31,62,124,56, + 52,58,58,122,13,173,164,97,40,33,100,151,171,171,235,183,148,82,170,84,42,99,23,44,88,176,126,213,170,85,152,57,115,38,94,189,122,133,220,220, + 92,88,88,88,144,121,243,230,141,90,188,120,49,198,142,29,75,11,10,10,118,86,196,249,230,205,27,132,199,196,33,215,195,30,5,38,192,57,181,26, + 83,27,52,64,72,72,8,30,191,136,134,123,106,60,204,242,229,48,187,115,7,158,147,38,97,255,254,253,149,158,87,74,89,40,229,97,96,53,54,104, + 218,168,46,154,54,172,137,192,155,207,1,0,93,6,250,65,89,144,143,253,251,119,227,221,187,183,16,8,133,176,182,117,170,148,147,227,56,104,243,222, + 32,71,151,130,174,157,90,160,87,143,142,248,237,192,113,48,122,29,198,141,249,26,242,156,28,28,56,176,23,81,209,239,33,16,10,97,103,255,247,55, + 66,173,72,139,252,23,160,15,165,116,119,81,8,241,3,239,150,81,217,162,122,125,97,226,123,82,82,18,158,61,123,134,152,152,24,152,153,153,65,197, + 176,220,207,127,220,231,8,17,37,114,148,62,160,76,73,151,226,143,57,88,54,169,84,199,90,43,27,27,27,177,70,163,2,195,232,75,221,85,8,64, + 0,145,0,112,118,241,66,66,124,2,85,171,213,183,43,178,77,164,81,111,62,127,246,228,212,182,237,252,236,123,117,89,142,179,231,190,135,60,47,15, + 106,157,16,5,106,29,148,106,192,218,214,7,45,27,53,65,114,114,22,66,158,222,81,8,52,74,99,18,69,223,110,91,52,198,123,204,148,185,48,173, + 209,14,154,240,179,224,20,105,37,30,45,19,169,13,108,61,124,145,83,160,193,201,27,207,1,192,232,81,47,105,105,105,74,23,23,151,195,83,167,78, + 93,247,252,249,51,55,0,120,254,252,121,98,74,74,202,252,180,180,52,163,43,238,128,15,186,193,19,51,51,179,231,117,234,212,73,238,211,167,143,213, + 128,1,3,96,111,111,143,224,224,96,172,89,179,230,141,78,167,155,123,251,246,237,10,67,61,90,173,54,233,249,185,115,150,29,191,249,198,122,110,191, + 126,235,167,78,157,186,121,197,138,21,66,111,111,111,162,215,233,16,26,26,74,143,28,62,172,223,185,112,225,38,177,185,185,224,201,249,243,66,70,163, + 169,172,71,211,223,14,55,55,183,14,189,123,118,240,221,240,211,86,168,85,10,60,14,186,4,185,60,3,191,236,62,227,235,230,230,214,33,49,49,241, + 142,49,60,44,203,30,223,183,111,223,236,214,205,154,53,243,114,119,71,104,92,12,196,28,11,17,163,7,79,167,1,159,81,195,173,17,192,227,73,145, + 146,154,139,85,199,78,133,25,35,140,235,245,238,143,21,137,185,32,132,96,99,155,134,16,91,72,33,50,151,98,242,239,55,75,132,194,197,21,11,33, + 150,74,81,187,117,229,13,225,41,165,74,11,11,139,103,161,161,161,45,27,54,108,136,217,179,103,35,54,54,22,28,199,33,45,45,77,157,146,146,146, + 148,145,145,17,139,194,254,63,123,42,185,137,149,128,199,227,185,222,185,115,167,36,220,112,227,198,13,184,184,184,192,202,202,10,121,121,121,152,48,97, + 130,245,247,223,23,246,95,124,246,236,25,74,11,148,178,8,125,30,190,33,39,159,202,169,226,197,128,108,230,69,163,206,61,18,208,173,239,104,92,191, + 248,27,110,6,254,1,91,65,108,12,204,243,175,100,198,100,230,37,22,120,239,242,109,62,142,159,82,16,184,107,250,23,54,124,103,103,238,228,130,157, + 185,57,21,217,234,237,237,13,153,76,86,146,163,37,16,8,48,118,236,88,52,105,210,4,1,1,1,133,33,216,202,207,35,103,105,105,153,161,86,171, + 101,38,38,38,72,77,77,197,251,247,239,17,21,21,85,210,58,128,227,56,253,156,57,115,132,211,166,77,195,207,63,255,140,219,183,111,63,0,176,156, + 82,106,236,195,218,215,67,134,12,177,208,106,181,56,122,244,40,3,160,239,201,147,39,159,181,108,217,82,208,179,103,79,139,29,59,118,124,13,96,143, + 145,92,0,96,110,105,105,41,210,233,116,216,177,99,7,18,18,18,58,80,74,195,9,33,187,134,12,25,178,179,97,195,134,117,194,194,194,222,42,20, + 138,201,148,210,144,202,200,210,210,210,198,180,104,209,226,36,199,113,53,186,118,237,106,254,211,79,63,89,70,68,68,192,205,205,13,28,199,133,209,42, + 142,176,122,251,246,109,120,74,74,138,111,199,142,29,113,229,202,149,181,132,144,213,0,214,77,154,52,201,53,46,46,14,205,154,53,131,173,173,45,34, + 34,34,242,83,82,82,118,2,248,174,2,79,22,0,128,82,26,13,96,62,33,164,241,174,93,187,134,217,218,218,126,22,28,28,140,123,247,238,97,195, + 134,13,248,254,251,239,209,190,125,123,204,158,61,59,19,192,176,162,144,182,81,125,243,138,61,91,0,208,162,69,139,228,53,107,214,96,220,184,113,244, + 215,95,127,221,114,248,240,225,128,175,191,254,26,64,225,61,112,212,168,81,244,208,161,67,163,42,42,4,224,243,249,136,136,136,128,169,38,21,161,145, + 73,144,180,108,137,207,108,109,145,26,30,142,144,144,16,56,217,218,32,242,250,19,52,229,17,8,235,213,67,94,94,30,242,242,42,117,226,234,117,58, + 45,44,109,189,160,200,137,71,70,66,16,204,44,156,208,163,115,19,40,85,90,92,56,127,26,33,161,47,193,227,241,32,115,114,135,181,141,61,34,35, + 223,2,64,69,213,198,122,157,78,7,11,155,154,80,228,38,64,155,254,28,166,82,71,140,254,102,0,148,42,29,206,156,61,141,176,176,16,240,249,124, + 56,57,187,195,202,186,144,147,208,10,57,255,231,81,156,167,85,252,179,146,170,195,127,129,207,231,223,186,122,245,234,160,214,173,91,11,222,189,123,135, + 119,239,10,31,110,228,114,57,67,192,158,74,11,57,247,149,161,125,9,33,93,139,171,51,74,207,46,148,90,88,36,69,188,9,151,201,179,211,240,242, + 197,125,188,139,12,69,76,84,56,116,58,53,248,60,30,120,124,30,106,122,53,192,253,7,65,90,53,195,4,25,226,4,128,236,236,247,249,82,153,207, + 208,149,43,190,187,56,115,238,50,211,193,131,118,34,36,226,53,20,140,19,40,5,156,236,204,209,180,214,60,36,37,103,224,216,111,59,148,156,78,55, + 188,116,15,173,242,56,1,64,150,137,250,59,119,255,54,118,207,193,35,203,230,78,155,32,251,194,127,56,196,217,175,161,79,126,14,175,150,189,64,36, + 214,184,124,237,38,238,60,123,157,198,177,116,153,44,11,191,86,198,89,26,57,57,57,15,83,83,83,220,74,117,129,119,147,72,76,42,172,142,43,203, + 73,202,116,156,231,243,121,205,87,174,92,169,151,201,100,186,176,176,48,252,252,243,207,220,243,231,207,175,241,120,188,109,201,201,201,234,202,56,29,244, + 250,151,71,22,44,168,223,202,223,159,126,53,109,154,18,18,201,244,245,27,55,46,200,144,203,93,40,199,193,193,214,54,113,253,194,133,107,6,13,25, + 34,127,117,255,190,105,208,185,115,166,98,134,121,94,153,157,127,5,42,226,76,76,76,188,227,93,219,3,251,247,252,4,157,78,131,148,164,56,0,64, + 102,86,46,42,18,89,101,57,139,170,174,252,23,127,255,253,163,197,51,3,156,62,239,210,21,241,47,95,64,151,157,9,62,195,64,72,4,80,166,155, + 35,45,45,31,243,15,157,72,87,40,149,254,101,111,18,134,236,44,246,88,73,44,45,32,50,151,66,44,181,248,192,139,101,98,105,9,177,185,20,2, + 177,184,60,47,205,71,156,10,133,98,224,160,65,131,66,158,60,121,98,51,110,220,56,180,109,219,246,133,74,165,234,68,41,53,106,204,84,121,156,28, + 199,37,125,254,249,231,60,66,136,116,248,240,225,146,140,140,140,146,206,234,10,133,2,87,174,92,65,221,186,133,85,253,175,94,189,66,131,6,13,12, + 114,142,155,23,154,4,96,197,172,193,110,235,31,189,76,153,14,96,173,87,29,119,220,12,252,3,247,110,6,45,248,172,33,183,181,247,240,150,63,152, + 117,26,50,215,183,249,56,190,212,210,25,7,206,156,230,135,63,223,187,74,169,12,173,13,96,142,33,59,9,33,160,148,126,212,202,161,123,247,238,248, + 230,155,111,42,109,248,90,134,243,196,158,61,123,38,77,156,56,81,148,146,146,130,55,111,222,160,160,160,0,38,38,38,8,12,12,100,0,236,56,124, + 248,112,224,225,195,135,123,162,48,36,80,174,192,50,244,185,155,155,155,79,237,209,163,7,222,188,121,131,167,79,159,158,166,148,134,16,66,78,191,123, + 247,110,104,251,246,237,241,219,111,191,77,133,1,161,101,136,147,227,184,210,61,147,178,1,128,82,250,18,192,103,21,30,120,57,156,69,33,142,118,0, + 96,103,103,151,32,147,201,44,95,190,124,9,15,15,15,232,116,58,163,202,169,75,115,230,230,230,254,180,109,219,182,95,199,140,25,131,31,126,248,97, + 248,137,19,39,134,247,238,221,27,125,250,244,193,190,125,251,16,18,18,178,150,26,49,86,172,188,99,47,18,142,33,245,235,215,159,226,238,238,142,13, + 27,54,32,52,52,116,205,138,21,43,22,134,132,132,160,110,221,186,146,215,175,95,27,124,152,172,236,186,100,105,105,105,169,215,235,113,238,220,185,199, + 148,210,153,132,16,199,205,155,55,15,51,55,55,135,92,46,87,133,133,133,125,77,41,61,111,136,147,82,74,93,92,92,16,24,24,136,128,128,0,180, + 77,74,130,125,141,26,232,215,164,9,58,206,154,5,134,97,176,106,213,42,52,241,174,13,169,74,133,118,195,135,99,252,132,9,168,83,167,14,158,60, + 121,66,203,227,4,0,74,200,162,113,227,167,239,26,63,238,107,147,22,205,155,66,153,151,8,149,34,13,202,252,84,108,219,115,13,132,240,224,224,224, + 12,71,39,55,196,197,197,227,193,165,203,218,2,165,106,179,88,207,173,173,152,115,90,33,103,179,66,78,101,65,58,84,138,244,18,78,71,71,151,34, + 206,56,220,15,186,172,86,21,20,252,164,165,228,71,67,156,255,235,248,83,57,90,114,185,124,198,132,9,19,58,205,159,63,223,142,97,24,190,173,173, + 45,226,226,226,152,83,167,78,101,43,20,138,74,93,231,229,190,169,80,24,226,237,83,183,211,23,95,124,193,244,239,223,79,52,98,76,79,129,131,163, + 35,114,115,178,16,249,38,24,17,175,159,195,187,110,19,44,93,177,9,176,182,174,116,144,164,34,45,242,150,84,230,211,119,249,226,57,199,219,117,232, + 110,89,183,65,19,81,211,218,86,208,233,25,36,38,38,226,252,185,151,186,176,103,247,242,56,70,59,180,32,195,184,17,60,183,11,159,138,126,105,36, + 35,135,87,175,223,54,123,199,47,251,231,206,159,62,206,188,189,95,55,132,254,241,27,78,95,60,94,160,214,104,215,139,248,216,24,154,73,171,228,133, + 2,0,181,90,173,43,91,16,165,86,171,203,107,98,90,37,236,219,183,15,105,105,105,218,216,216,216,171,12,195,156,48,52,236,185,60,108,165,84,235, + 79,200,31,139,253,252,122,46,14,12,52,25,53,111,158,118,248,136,17,115,160,209,232,32,22,83,129,185,57,15,18,137,240,213,253,251,166,91,38,77, + 178,37,90,237,245,223,42,104,27,80,14,254,242,170,67,160,196,163,133,81,227,102,66,85,202,163,245,240,105,36,170,226,209,2,0,74,105,60,33,228, + 179,233,139,22,159,25,218,163,139,111,195,26,53,37,14,158,158,48,119,114,66,86,70,6,238,63,125,163,95,113,252,76,88,145,200,50,170,175,12,199, + 113,37,30,150,46,51,230,131,240,249,64,145,24,40,174,28,242,108,217,22,68,32,0,75,57,104,52,154,74,147,180,40,165,137,132,144,129,195,135,15, + 191,113,241,226,69,94,143,30,61,154,158,61,123,182,106,49,236,50,80,42,149,159,1,128,169,169,105,140,181,181,181,235,152,49,99,160,215,235,161,84, + 42,145,155,155,139,196,196,196,156,49,99,198,232,138,182,17,15,26,52,200,178,98,70,224,167,147,137,234,89,131,221,182,218,10,98,135,229,101,134,120, + 218,10,98,99,62,107,200,109,253,233,100,162,122,249,76,235,149,242,216,59,145,137,5,129,187,14,156,57,205,31,57,96,32,235,38,125,187,192,196,145, + 158,234,92,110,10,243,191,64,8,249,168,57,233,168,81,163,170,124,204,249,249,249,11,151,44,89,210,71,46,151,187,245,236,217,83,228,235,235,139,71, + 143,30,225,226,197,139,204,195,135,15,19,10,10,10,190,163,148,170,1,92,171,50,57,0,31,31,31,79,129,64,80,28,74,219,94,180,120,251,217,179, + 103,135,142,27,55,14,53,107,214,172,79,8,145,208,42,252,31,81,74,75,162,12,127,37,8,33,81,91,182,108,113,117,114,114,34,87,175,94,213,243, + 249,252,74,219,119,148,99,219,62,66,72,107,189,94,63,254,219,111,191,69,135,14,29,192,48,12,14,29,58,132,189,123,247,26,37,178,42,67,100,100, + 228,243,132,132,132,207,231,204,153,131,13,27,54,44,156,51,103,14,18,18,18,16,25,25,89,105,234,74,69,200,203,203,83,197,199,199,155,181,105,211, + 166,133,135,135,71,216,168,81,163,26,140,27,55,14,107,215,174,165,119,238,220,25,68,41,189,82,209,254,58,157,46,190,78,157,58,178,206,157,59,99, + 223,190,125,112,117,117,133,60,52,20,147,118,239,198,160,65,131,208,161,67,7,156,63,127,30,166,166,166,112,112,112,192,196,201,147,97,103,103,7,31, + 31,31,4,5,5,25,188,150,188,121,155,117,176,81,45,89,224,138,149,63,125,95,187,150,231,196,177,163,135,240,125,188,27,160,32,55,17,118,246,50, + 184,185,123,33,35,61,19,87,175,94,97,51,51,115,246,177,60,178,252,237,219,172,143,59,108,87,129,211,213,205,11,233,233,233,184,124,249,50,155,35, + 207,219,13,61,111,197,235,88,185,209,247,146,255,69,144,162,190,89,165,114,181,74,196,23,49,38,241,182,168,242,112,75,97,123,135,66,47,151,92,46, + 159,65,41,253,184,29,252,135,251,149,40,94,82,182,137,218,224,193,34,92,186,212,24,122,253,103,214,231,203,144,98,0,0,32,0,73,68,65,84,22, + 22,93,40,199,181,108,210,164,137,116,200,144,33,156,159,95,91,177,165,165,37,169,95,191,97,94,110,78,142,45,0,80,128,45,203,89,22,197,67,165, + 5,124,97,87,150,213,53,42,180,181,242,161,210,198,40,243,90,50,226,32,224,176,148,71,200,104,142,210,223,24,30,150,71,165,81,131,163,129,140,225, + 44,21,246,43,30,57,83,225,69,200,192,211,125,73,232,144,199,227,31,116,118,118,254,46,49,49,49,157,82,202,86,196,85,17,103,241,8,158,190,1, + 1,250,230,221,187,51,182,238,238,28,165,148,141,121,254,156,60,60,127,94,248,240,252,121,19,189,70,115,235,36,165,81,198,112,186,184,184,172,185,112, + 225,130,209,185,87,253,250,245,123,93,156,183,85,145,157,165,81,187,150,91,96,45,79,215,238,181,60,11,195,211,81,49,201,136,138,73,186,246,62,42, + 177,135,161,125,42,226,36,228,95,67,165,73,81,11,7,106,196,80,233,178,156,246,246,246,207,4,2,129,91,133,7,92,6,44,203,38,103,100,100,148, + 140,179,170,196,206,175,60,61,61,215,198,197,197,157,97,89,118,166,177,239,81,9,167,183,169,169,233,101,30,143,247,65,133,11,199,113,73,197,98,140, + 16,98,103,102,102,246,65,50,124,69,156,235,23,55,252,190,77,251,246,3,30,222,187,119,118,238,202,176,15,242,134,166,15,176,29,243,213,148,25,63, + 30,221,177,101,222,214,179,217,31,84,158,149,235,109,150,201,110,3,240,46,90,95,225,113,22,157,203,15,202,209,203,241,12,155,88,88,88,172,1,48, + 148,227,56,123,66,72,38,165,244,88,41,145,85,41,12,29,59,159,207,95,91,175,94,189,25,17,17,17,71,25,134,25,91,106,251,13,181,107,215,158, + 18,27,27,187,93,175,215,207,53,150,147,16,98,217,190,125,123,249,150,45,91,120,51,103,206,196,157,59,119,108,41,165,114,99,108,172,200,206,162,117, + 78,54,54,54,191,178,44,235,75,41,189,144,159,159,191,144,82,106,48,241,219,16,39,41,252,80,134,186,186,186,206,245,246,246,246,126,251,246,109,72, + 82,82,210,250,178,222,160,63,97,103,159,47,191,252,242,194,230,205,155,137,187,187,59,18,18,18,16,16,16,64,207,157,59,215,143,82,122,169,58,156, + 69,235,23,77,154,52,105,229,136,17,35,0,20,10,218,53,107,214,208,75,151,46,141,162,148,30,172,140,147,16,210,72,42,149,254,34,20,10,61,0, + 16,142,227,8,203,178,124,62,159,207,208,82,109,24,138,214,241,9,33,44,165,148,99,24,38,94,163,209,76,160,148,134,86,102,103,253,90,14,181,40, + 159,93,213,164,161,239,160,111,134,15,32,15,159,190,197,163,135,65,72,76,78,62,203,241,120,223,69,70,102,150,27,234,173,10,103,208,211,72,60,10, + 10,162,41,201,41,39,65,249,139,95,71,101,24,117,157,255,95,7,41,213,160,180,236,223,70,9,173,63,241,198,134,133,86,121,112,113,113,65,86,86, + 107,19,129,192,79,34,145,116,226,241,249,183,178,51,50,2,0,227,132,214,95,97,103,101,168,93,155,136,13,141,36,168,14,103,217,68,246,234,112,86, + 133,195,88,78,67,67,165,57,141,38,217,142,97,158,109,165,134,207,65,89,78,55,55,183,241,28,199,85,216,74,187,52,120,60,94,76,98,98,226,7, + 225,20,99,207,167,143,143,15,125,251,246,45,40,165,149,38,83,254,187,191,75,255,75,156,7,55,53,118,169,219,168,222,220,208,231,225,27,138,194,138, + 37,88,62,221,214,194,175,115,199,37,247,111,222,254,97,233,214,236,15,30,134,254,105,59,9,33,60,90,213,234,150,106,114,18,82,216,36,180,170,156, + 34,145,104,87,171,86,173,198,63,122,244,232,87,134,97,12,246,238,169,170,157,213,197,191,131,147,16,210,135,207,231,207,241,241,241,105,26,25,25,25, + 204,178,236,134,138,68,150,177,118,18,66,190,243,244,244,156,44,18,137,36,10,133,66,158,156,156,188,132,82,122,226,207,112,86,21,198,112,214,247,182, + 107,65,105,73,211,237,85,225,239,178,12,182,64,170,50,39,229,88,142,242,87,70,68,85,60,228,250,147,208,250,16,165,61,89,69,40,169,62,172,246, + 212,213,170,162,88,40,85,136,228,228,4,0,9,0,78,254,237,6,85,19,198,136,172,170,160,58,226,232,239,224,40,139,34,33,21,84,233,134,70,160, + 172,104,250,59,17,25,25,249,223,88,173,242,255,30,223,204,12,73,6,16,208,162,211,199,235,138,196,213,220,78,253,255,105,171,62,70,117,68,86,117, + 57,43,18,89,21,65,167,211,77,36,132,204,162,85,168,86,252,255,134,34,81,85,161,176,170,38,239,106,224,255,216,59,239,176,40,174,238,143,127,239, + 204,246,93,144,38,32,168,96,69,138,29,27,86,176,43,26,53,106,162,70,212,152,104,172,24,91,80,147,104,76,20,162,137,189,39,49,138,111,52,118, + 163,24,163,130,193,222,11,22,4,11,2,2,34,210,219,246,185,191,63,150,197,5,118,151,69,125,127,111,219,207,243,204,179,59,237,59,103,102,182,156, + 57,247,220,115,177,252,93,235,190,107,238,39,102,95,7,80,77,3,251,191,94,243,127,137,50,167,202,104,158,86,205,198,251,176,98,197,138,21,43,255, + 114,254,151,157,44,43,86,254,211,32,0,122,27,91,81,147,144,32,33,196,168,134,57,44,8,225,90,53,173,154,86,77,171,166,85,211,170,105,213,252, + 47,211,252,95,227,255,45,71,203,170,105,213,180,106,90,53,173,154,86,77,171,166,85,243,191,17,82,117,172,195,255,255,28,45,43,255,187,172,127,159, + 212,5,128,25,7,169,69,197,77,107,186,189,21,43,86,172,88,177,242,175,132,86,170,163,69,12,42,196,255,203,29,45,66,136,59,116,133,246,154,0, + 120,8,224,92,77,186,43,27,209,171,13,224,3,66,200,72,0,160,148,238,3,176,151,86,83,138,66,143,68,34,201,148,203,229,46,0,32,22,139,95, + 202,229,114,195,177,12,136,193,4,0,84,63,153,75,108,109,212,168,81,166,66,161,112,177,224,240,249,148,210,59,12,195,196,217,216,216,196,60,124,248, + 176,218,225,93,12,233,217,179,231,120,150,101,151,1,128,86,171,93,20,19,19,179,163,38,251,215,4,66,72,199,250,238,117,126,85,169,85,154,204,172, + 156,175,76,117,221,222,52,152,132,243,8,230,149,189,95,57,245,168,249,18,22,53,221,222,140,125,237,248,124,254,116,87,87,215,1,207,159,63,191,14, + 96,62,165,180,218,170,198,30,30,30,33,60,30,239,35,173,86,219,152,101,217,39,26,141,230,31,41,41,41,70,187,118,91,177,98,197,138,21,43,213, + 81,35,71,203,167,54,169,67,129,81,32,232,3,138,83,4,216,19,255,138,190,176,116,255,96,31,162,86,107,116,199,20,48,208,254,249,152,217,22,28, + 28,92,111,198,140,25,232,220,185,51,46,95,190,28,176,125,251,246,143,89,150,189,195,113,220,25,0,151,169,153,50,2,122,8,33,50,0,67,0,140, + 25,48,96,64,239,101,203,150,177,205,155,55,71,105,105,41,254,254,251,239,174,43,87,174,92,67,8,57,13,224,55,0,71,168,153,218,48,114,185,220, + 69,239,51,17,66,92,134,15,31,126,205,160,86,15,33,132,128,97,24,80,74,47,1,184,196,113,220,165,125,251,246,165,250,16,210,113,114,67,193,254, + 208,167,202,42,53,147,20,10,133,203,225,21,203,193,19,137,160,40,44,64,192,132,215,17,198,83,95,207,3,225,52,96,65,115,131,190,91,115,7,64, + 92,122,122,250,157,30,61,122,36,89,120,89,203,97,89,118,217,137,19,39,220,40,165,232,215,175,223,50,0,59,106,170,97,9,132,16,81,167,118,173, + 207,28,61,176,91,92,148,147,137,254,67,62,252,7,33,100,60,165,244,128,225,118,155,6,18,87,194,195,188,41,203,127,99,1,96,211,194,49,243,215, + 244,35,235,102,253,69,95,16,66,130,128,242,33,155,86,80,74,207,108,26,72,92,193,226,139,41,203,127,35,0,176,121,225,152,121,155,6,146,181,83, + 143,215,172,87,37,33,100,234,248,241,227,215,45,91,182,140,117,115,115,67,90,90,90,127,63,63,191,102,132,16,63,115,73,196,13,27,54,252,61,176, + 207,144,198,195,63,24,45,169,237,228,128,180,140,44,187,189,187,183,79,110,216,176,225,128,164,164,164,15,107,118,149,172,88,177,98,197,202,255,10,198, + 154,14,245,111,170,117,180,252,221,137,164,88,133,161,60,150,132,116,235,216,188,215,232,129,221,24,63,223,166,184,127,239,65,223,35,49,87,86,250,185, + 50,209,26,45,141,148,9,112,248,70,186,249,158,48,106,13,120,39,15,255,6,0,152,250,241,24,246,234,213,171,77,253,253,253,203,11,2,246,234,213, + 11,189,122,245,34,155,54,109,106,125,242,228,201,214,63,255,252,179,138,16,242,171,185,250,40,132,144,233,77,154,52,89,185,110,221,58,81,143,30,61, + 32,18,137,202,215,217,216,216,96,240,224,193,24,60,120,48,155,158,158,222,239,232,209,163,253,86,172,88,161,36,132,204,165,148,110,48,165,105,200,215, + 95,127,237,111,100,241,9,66,200,99,141,70,115,179,85,171,86,169,222,132,52,253,108,96,231,83,83,187,120,201,76,233,240,132,66,236,28,175,251,175, + 54,116,180,146,98,254,132,77,45,219,108,169,173,237,29,0,113,0,238,80,74,227,30,63,126,252,192,151,144,214,157,28,152,95,127,206,209,182,178,196, + 86,64,55,214,86,106,106,42,236,236,236,36,129,129,129,25,132,144,37,103,206,156,49,57,52,192,27,210,113,201,188,169,130,220,103,119,240,34,254,18, + 102,143,236,42,157,181,254,143,111,1,28,48,183,19,33,12,179,226,34,23,54,75,55,24,239,87,217,217,217,61,0,192,201,201,73,8,224,204,234,43, + 24,248,121,151,106,42,80,154,213,39,2,150,101,55,238,220,185,243,147,144,144,16,221,208,17,231,207,195,198,198,6,75,151,46,109,48,103,206,156,112, + 152,24,8,216,195,195,35,36,176,207,208,70,107,127,248,214,183,48,39,95,177,117,227,222,107,117,91,120,179,159,77,159,99,187,65,173,172,227,225,225, + 17,98,141,108,89,177,98,197,138,21,99,84,110,58,52,196,172,163,229,237,76,118,116,107,235,245,193,232,224,174,162,150,45,154,67,32,122,61,136,172, + 127,187,118,240,111,215,142,9,43,42,236,115,245,218,141,62,251,79,94,86,120,59,147,189,15,179,232,120,75,13,211,15,74,187,108,136,107,207,226,188, + 151,98,0,144,217,187,200,23,30,126,17,211,165,75,23,212,171,87,79,16,29,29,61,17,230,235,165,44,124,248,240,161,136,101,205,215,67,117,119,119, + 199,136,17,35,224,237,237,45,12,12,12,92,136,215,195,97,84,64,44,22,191,36,132,184,0,128,163,163,163,118,201,146,37,183,105,25,0,192,113,220, + 37,150,101,47,113,28,119,229,200,145,35,207,155,19,226,50,200,223,251,220,212,177,35,164,116,255,26,147,78,130,220,196,192,161,82,27,89,150,68,38, + 187,35,146,138,227,0,220,1,16,87,183,110,221,7,205,9,169,215,201,187,225,201,77,159,143,177,53,123,98,101,248,251,251,55,11,10,10,18,107,181, + 90,20,23,23,99,243,230,205,118,18,137,196,110,192,128,1,139,97,80,219,195,143,144,150,195,221,217,73,75,210,52,211,44,209,53,132,16,98,223,45, + 160,221,179,245,17,139,107,181,235,212,13,137,103,118,33,39,167,16,249,121,69,224,56,174,202,8,195,83,143,211,204,77,131,201,202,77,11,198,124,65, + 24,134,180,30,54,31,239,213,201,159,73,8,185,7,128,47,20,150,23,30,231,17,66,220,91,180,104,177,178,105,223,110,216,188,104,44,40,199,81,0, + 43,45,141,102,17,66,92,108,109,109,143,156,60,121,178,99,251,246,237,113,249,242,101,60,125,250,20,83,167,78,85,78,155,54,77,48,110,220,56,50, + 123,246,236,25,132,144,253,148,210,11,149,247,231,241,120,31,13,121,255,67,97,81,94,129,92,165,84,41,157,156,236,168,188,88,94,152,157,91,80,250, + 193,168,79,84,113,55,46,127,4,160,138,163,245,54,215,211,138,21,43,86,172,88,76,123,0,206,0,178,0,92,171,52,143,178,247,48,50,255,10,186, + 116,31,39,3,173,87,208,165,253,56,67,87,227,243,42,128,55,78,89,2,140,70,180,94,59,95,148,82,28,59,118,140,26,190,234,167,102,181,117,185, + 71,234,236,199,84,145,240,39,45,185,246,83,149,169,244,222,1,154,113,117,47,189,242,219,215,180,108,123,152,154,6,122,67,61,166,21,232,148,246,160, + 161,129,246,242,171,87,175,70,115,28,119,44,172,27,40,189,255,27,165,247,127,163,159,7,128,238,223,191,255,68,120,120,248,177,200,200,200,99,0,142, + 153,211,4,144,89,120,237,34,189,226,2,106,138,135,15,31,210,45,91,182,208,5,11,22,208,95,126,249,133,2,200,52,167,217,175,95,191,216,187,119, + 239,210,113,227,198,221,6,32,53,181,157,47,32,251,168,65,157,120,197,239,107,84,202,144,150,52,183,187,216,232,249,187,185,185,85,176,39,194,171,14, + 221,208,193,139,238,232,227,255,130,82,122,130,82,26,65,41,253,144,82,234,77,41,69,91,160,214,16,55,167,71,242,189,107,75,149,147,58,153,189,166, + 148,82,180,109,219,182,217,220,185,115,115,148,74,37,77,74,74,162,91,183,110,165,167,78,157,162,135,15,31,166,93,187,118,77,55,176,215,245,99,111, + 207,76,229,207,223,40,170,211,52,54,241,89,118,195,181,83,251,233,163,115,251,232,213,61,225,244,31,95,142,166,51,134,116,84,213,146,136,228,0,122, + 154,218,111,90,23,52,245,110,224,156,144,156,156,76,85,42,21,157,48,97,2,237,215,175,31,237,219,183,47,237,221,187,55,237,213,171,23,237,217,179, + 39,141,137,137,161,233,233,233,180,119,55,255,226,65,190,104,103,169,93,0,90,120,122,122,190,72,74,74,162,42,149,138,70,71,71,211,93,187,118,209, + 232,232,104,26,22,22,70,1,236,152,50,101,74,105,110,110,46,237,215,175,223,115,148,245,182,53,156,60,61,61,31,220,77,72,77,93,181,124,219,153, + 29,27,118,159,57,120,224,228,153,35,167,174,71,29,57,121,125,223,149,219,143,143,120,122,122,62,48,114,255,223,234,122,90,39,235,100,157,172,147,117, + 122,61,153,242,69,202,166,96,157,203,66,131,41,165,189,43,205,7,227,117,190,116,133,249,176,176,176,5,134,243,250,109,194,194,194,22,0,160,1,1, + 1,187,41,165,77,223,213,57,0,152,84,121,153,69,57,90,154,231,87,33,240,26,0,190,86,13,245,171,135,224,242,146,1,89,29,148,18,27,100,103, + 36,35,254,220,1,157,249,213,16,21,79,249,132,144,232,7,15,30,32,62,62,30,169,169,169,144,74,165,85,182,59,127,254,60,36,18,9,220,220,220, + 44,49,15,84,89,113,60,214,59,254,158,176,9,232,129,87,163,63,67,116,116,52,94,190,124,9,129,64,0,161,80,8,141,198,228,224,238,229,48,12, + 67,128,242,202,205,70,171,58,7,18,194,171,231,104,115,116,211,226,208,134,204,165,99,252,210,148,71,72,151,107,97,111,129,189,18,27,25,164,50,105, + 134,68,34,45,111,46,44,123,77,244,39,132,47,179,17,31,253,245,187,217,117,216,155,209,226,210,71,119,32,48,162,209,167,79,159,201,0,22,83,74, + 243,2,3,3,93,151,45,91,230,144,150,150,134,251,247,239,99,239,222,189,89,26,221,137,18,74,233,55,0,16,64,136,216,195,217,254,175,13,95,135, + 218,226,204,239,66,76,252,218,2,75,43,98,231,59,56,106,248,184,41,211,214,133,14,70,113,97,41,126,59,117,19,39,110,60,126,15,192,121,106,38, + 239,109,195,121,250,136,16,210,235,253,247,223,191,117,246,236,217,218,63,255,252,51,52,26,141,209,233,231,159,127,198,233,115,55,102,82,74,175,91,98, + 19,33,196,189,97,195,134,167,175,92,185,226,44,149,74,113,234,212,41,228,229,229,149,71,178,198,143,31,79,242,242,242,70,109,222,188,121,248,179,103, + 207,126,56,119,238,92,54,116,195,65,85,248,32,176,44,251,88,163,81,249,184,251,122,177,35,7,119,235,86,148,125,7,54,78,173,112,249,214,227,99, + 249,121,57,165,44,203,62,54,220,254,93,92,79,43,86,172,88,177,82,51,8,33,199,40,165,131,8,33,199,42,47,171,252,94,191,93,120,120,120,249, + 188,126,159,136,136,136,229,6,243,37,239,200,182,10,227,29,234,209,59,90,129,81,81,81,20,64,160,177,157,21,247,15,66,17,127,4,2,207,46,16, + 122,191,7,214,179,43,82,238,156,193,237,63,87,227,249,189,243,160,156,22,110,205,58,88,106,139,220,199,199,7,114,185,46,53,75,161,80,64,32,115, + 144,207,158,52,70,12,0,28,79,92,238,53,149,121,135,213,98,219,37,8,29,50,41,174,186,234,90,238,58,100,234,246,251,110,194,4,8,4,2,8, + 4,130,242,193,103,45,113,180,72,217,198,28,199,1,70,92,72,66,8,105,39,226,255,182,103,241,244,14,162,103,113,66,197,221,75,72,87,112,244,104, + 166,54,202,146,145,147,165,50,105,154,68,42,141,147,216,200,12,29,173,199,0,64,249,252,200,93,223,76,111,37,203,124,34,147,95,139,70,134,156,83, + 213,50,46,243,205,159,127,254,233,194,227,241,234,104,181,90,164,164,164,224,222,189,123,88,187,118,109,102,97,97,97,224,141,27,55,18,12,236,101,218, + 75,132,123,35,151,134,54,226,221,137,21,43,30,223,53,234,188,153,195,185,229,176,126,239,5,182,142,154,60,118,17,134,14,236,139,113,129,126,52,41, + 61,71,14,224,20,181,96,0,107,74,105,26,33,164,79,247,238,221,255,209,166,77,27,95,74,41,90,182,108,137,81,163,70,33,50,50,18,183,110,221, + 66,97,97,161,234,228,201,147,107,40,165,219,171,211,43,59,47,169,131,131,195,137,152,152,24,103,169,84,138,147,39,79,162,180,180,20,110,110,110,152, + 54,109,154,48,34,34,98,103,65,65,193,200,240,240,112,113,82,82,210,134,191,254,250,171,1,0,134,82,90,229,67,160,84,42,183,253,22,185,99,221, + 180,233,51,234,198,92,190,31,173,40,46,180,171,239,145,90,88,219,209,198,102,245,138,111,234,43,149,202,201,6,199,53,184,158,127,191,209,245,180,98, + 197,138,21,43,85,48,235,139,0,175,157,167,202,206,150,37,24,56,97,165,97,97,97,11,9,33,199,194,194,194,22,134,135,135,151,2,72,127,27,195, + 245,77,135,134,77,136,122,167,139,7,0,193,193,193,177,81,81,81,8,14,14,142,53,169,194,105,161,74,58,11,85,210,89,72,2,102,226,143,240,209, + 21,86,191,205,16,97,131,151,158,138,81,40,20,188,29,59,118,148,231,109,1,128,86,91,253,240,136,53,197,18,71,11,101,67,19,149,57,90,85,140, + 104,40,178,137,221,246,249,200,78,78,218,18,190,242,252,81,164,41,56,205,15,143,84,37,215,242,232,138,133,38,4,15,207,154,140,212,115,167,33,181, + 177,73,253,228,108,156,97,20,235,14,128,167,0,208,80,92,43,122,239,236,209,93,235,8,32,80,70,237,67,186,130,83,108,121,166,222,190,214,136,158, + 62,36,249,244,233,83,148,148,148,224,226,197,139,56,112,224,64,86,101,39,171,204,222,191,127,153,255,81,199,90,133,47,4,202,107,167,145,174,224,20, + 205,44,184,8,206,173,134,117,17,48,228,36,97,88,201,192,110,126,152,245,233,48,172,254,229,15,141,210,165,219,160,117,71,142,143,44,82,168,22,89, + 226,100,25,216,124,7,128,31,33,68,4,32,104,212,168,81,199,135,15,31,142,216,216,88,28,61,122,212,11,64,6,0,16,66,150,2,112,133,174,55, + 162,169,145,227,25,129,64,176,231,244,233,211,205,221,221,221,113,250,244,105,148,150,150,98,202,148,41,202,233,211,167,11,198,143,31,79,242,243,243,203, + 35,89,23,47,94,204,134,9,39,11,0,158,63,127,254,103,131,6,13,186,116,239,222,125,104,35,47,239,90,79,10,11,94,218,72,197,146,115,177,103, + 4,55,174,93,218,240,252,249,243,242,65,91,43,94,207,104,139,175,167,21,43,86,172,88,49,141,69,190,8,42,70,166,106,130,193,126,252,240,240,240, + 123,225,225,225,21,34,94,111,131,177,72,150,158,55,170,163,165,205,79,169,122,16,206,114,71,203,88,164,202,193,193,65,35,145,72,42,56,90,156,133, + 154,57,135,118,227,201,212,49,229,145,44,125,100,11,253,199,87,217,182,38,17,45,170,75,154,174,96,132,204,213,123,244,158,177,125,186,248,53,170,203, + 168,247,174,197,243,18,141,124,241,67,149,60,190,144,190,119,223,72,146,117,185,166,70,13,177,76,146,44,177,145,85,118,178,158,1,128,77,157,102,195, + 119,142,14,10,108,237,221,132,209,252,190,10,105,37,234,162,176,7,42,213,147,98,122,208,152,30,165,116,113,223,190,125,23,59,57,57,137,215,173,91, + 103,231,233,233,9,141,70,163,172,236,100,201,92,189,71,255,62,190,127,151,102,117,28,24,245,254,245,72,45,213,150,172,125,162,222,185,165,154,107,224, + 220,106,88,151,218,118,54,127,109,89,62,85,34,21,241,33,151,203,17,177,105,63,78,94,184,59,40,43,238,208,95,0,254,170,70,194,28,159,12,26, + 52,104,245,210,165,75,161,86,171,49,113,226,68,60,126,252,248,228,195,135,15,215,122,120,120,204,157,63,127,190,123,157,58,117,240,193,7,31,8,0, + 140,55,161,241,253,111,191,253,54,168,117,235,214,136,141,141,69,94,94,30,220,220,220,48,125,250,116,97,120,120,248,206,130,130,130,145,203,151,47,23, + 63,125,250,212,108,36,203,16,141,70,243,237,214,213,83,231,180,239,212,149,121,244,40,65,147,210,161,7,115,230,244,209,179,14,14,14,59,245,219,200, + 92,189,71,255,62,97,64,141,175,167,21,43,86,172,88,121,103,68,1,8,214,207,24,70,183,12,157,48,125,196,202,112,190,242,246,101,235,43,230,31, + 189,1,250,102,67,66,136,155,222,182,10,17,45,0,8,14,14,182,184,91,61,87,156,85,101,153,37,205,124,193,62,68,61,185,61,120,11,123,48,16, + 200,28,228,131,151,158,138,49,181,173,76,38,179,56,162,197,41,228,102,215,27,212,193,178,200,209,98,89,150,0,56,193,113,220,37,24,56,90,246,117, + 188,123,124,249,69,232,154,174,195,251,51,153,159,6,32,175,72,161,152,127,95,195,61,47,49,239,100,1,0,180,234,36,169,204,38,78,44,171,144,151, + 149,2,0,18,215,166,29,194,62,159,177,169,231,232,193,36,107,74,87,228,230,149,42,230,222,211,144,180,82,58,242,62,165,103,140,201,69,71,71,111, + 5,176,53,48,48,48,83,38,147,161,168,168,168,202,61,208,219,219,101,120,127,38,243,147,142,200,41,86,41,230,223,211,32,189,148,219,99,206,84,231, + 86,195,186,56,219,219,254,181,101,217,84,105,250,243,103,16,8,4,176,177,177,193,169,243,113,200,186,123,248,109,28,44,176,44,187,100,225,194,133,139, + 167,77,155,134,236,236,108,28,61,122,20,3,7,14,196,238,221,187,61,143,31,63,190,58,40,40,8,44,203,226,216,177,99,80,171,213,137,198,52,8, + 33,195,38,77,154,52,119,248,240,225,184,122,245,42,50,50,50,42,68,178,242,242,242,70,109,218,180,105,120,82,82,82,181,145,172,74,116,104,216,164, + 173,96,193,87,63,66,81,242,146,151,149,118,57,54,250,20,115,41,39,39,71,10,32,255,77,175,167,21,43,86,172,88,177,12,51,190,72,86,153,19, + 149,101,108,222,192,193,50,54,79,42,69,193,148,149,214,223,126,87,246,83,221,176,59,219,12,155,16,45,138,104,241,92,91,64,147,121,183,124,158,43, + 126,89,97,189,216,214,209,162,166,67,181,6,188,45,219,203,235,104,137,179,179,179,197,181,107,215,150,27,58,8,82,169,20,238,238,238,200,205,205,197, + 182,109,219,0,160,186,164,104,77,173,225,99,209,97,244,68,92,171,39,4,85,171,202,35,91,91,38,76,40,223,136,16,2,129,64,160,207,13,171,238, + 79,247,10,33,228,25,199,113,151,40,165,212,191,89,227,111,197,50,217,132,118,173,154,212,158,53,245,19,126,210,75,5,98,186,46,200,219,255,253,23, + 54,169,212,102,90,50,205,51,239,100,1,79,134,108,222,85,57,146,245,188,109,179,198,139,196,82,241,167,157,90,52,171,19,54,123,42,63,41,83,65, + 98,58,204,47,56,176,98,190,244,41,108,231,166,210,92,163,78,86,37,22,15,28,56,112,49,165,148,114,28,247,21,0,24,218,59,123,250,167,252,39, + 47,228,136,238,186,40,247,192,247,95,216,166,194,188,189,206,173,134,117,113,117,168,245,215,150,229,211,164,25,105,201,16,137,68,176,181,181,69,106,102, + 62,248,60,214,108,157,180,234,32,132,136,122,244,232,241,197,212,169,83,17,23,23,135,41,83,166,100,164,164,164,28,252,253,247,223,167,124,253,245,215, + 188,126,253,250,33,35,35,3,43,87,174,84,159,63,127,126,57,128,149,198,116,120,60,222,39,223,126,251,45,77,79,79,39,79,159,62,133,155,155,27, + 102,204,152,33,92,190,124,121,121,78,86,77,34,89,122,158,63,127,30,235,213,196,3,239,253,185,6,26,181,34,54,47,59,229,108,252,147,220,88,71, + 161,112,78,87,255,86,111,116,61,173,88,177,98,197,202,59,225,90,53,243,255,106,162,42,149,120,176,184,96,105,226,250,69,31,123,125,60,109,30,36, + 158,93,160,120,112,8,92,81,102,121,68,75,108,227,0,71,15,95,228,21,43,176,47,250,6,0,24,141,64,152,162,176,176,16,254,254,254,216,56,190, + 89,79,121,97,182,88,2,64,33,170,37,63,44,236,22,115,252,248,241,18,142,227,246,0,56,94,141,204,146,230,205,155,111,248,241,199,31,133,190,163, + 63,70,209,229,115,21,86,50,12,3,137,68,2,145,72,132,59,119,238,32,38,38,70,9,96,137,57,65,66,200,21,141,70,115,123,223,190,125,169,94, + 141,235,245,15,108,223,97,230,194,5,97,182,247,207,157,196,87,203,55,112,77,219,245,203,143,216,125,184,48,223,198,163,87,73,122,252,45,11,78,245, + 54,42,58,89,233,190,141,60,122,6,180,109,51,239,171,175,22,213,186,119,238,20,190,94,177,133,122,181,238,157,191,226,192,145,130,87,210,6,125,75, + 51,31,92,53,47,169,227,239,191,255,222,10,96,171,126,222,171,113,189,254,61,218,183,155,185,104,193,66,219,251,231,78,34,108,233,90,174,89,251,254, + 185,17,187,15,20,23,216,122,244,54,103,175,139,223,251,157,235,187,57,254,181,254,187,207,164,47,210,82,32,18,137,96,99,99,131,148,140,60,44,94, + 179,183,88,197,113,253,45,177,201,12,34,91,91,91,145,74,165,194,198,141,27,145,146,146,18,64,41,77,33,132,108,249,240,195,15,215,181,108,217,210, + 231,222,189,123,137,69,69,69,211,40,165,241,166,68,236,237,237,3,156,157,157,201,165,75,151,240,217,103,159,41,103,204,152,33,24,55,110,28,201,205, + 205,125,211,72,22,0,160,94,189,122,61,134,4,119,70,151,62,83,98,149,242,188,179,73,241,59,99,25,122,65,220,182,77,139,55,186,158,86,172,88, + 177,98,229,127,3,125,36,203,212,74,147,83,15,128,215,204,9,147,155,215,21,188,136,252,126,6,45,124,114,145,150,94,221,74,11,14,125,74,163,86, + 142,163,199,215,207,162,83,130,155,83,31,23,242,162,153,19,38,247,0,120,149,234,73,244,54,156,31,232,13,117,159,38,160,125,154,128,6,55,131,26, + 192,194,182,109,219,30,158,222,1,229,117,180,166,119,0,5,240,25,0,27,19,53,42,122,27,89,230,6,96,155,191,191,191,230,204,153,51,244,225,200, + 222,244,166,79,109,58,109,218,52,250,245,215,95,211,49,99,198,80,103,103,103,77,217,69,112,171,78,243,189,247,222,171,71,41,69,253,250,245,237,219, + 249,54,125,113,39,250,40,61,27,185,142,254,50,253,125,218,177,165,239,171,58,62,221,111,75,220,188,219,84,83,75,163,92,179,78,157,58,11,40,165, + 253,41,165,110,148,82,120,121,57,217,180,245,105,154,126,251,244,81,122,110,215,6,250,203,244,247,105,167,86,126,217,245,124,131,226,197,46,62,29,44, + 209,52,54,233,236,245,122,17,23,125,236,181,189,45,124,94,185,54,237,124,203,148,189,134,154,141,58,124,112,228,121,122,38,189,114,229,10,61,126,252, + 56,61,119,238,28,141,252,253,8,245,104,63,178,168,118,203,161,93,204,29,219,18,59,1,216,5,7,7,211,196,196,68,58,96,192,0,10,192,238,77, + 52,1,28,78,74,74,162,119,239,222,165,11,23,46,164,0,118,76,157,58,181,52,63,63,159,246,238,221,59,5,186,206,12,188,55,177,179,113,195,186, + 17,195,6,119,91,50,253,179,225,61,222,246,122,190,171,201,170,105,213,180,106,90,53,255,23,52,255,91,39,179,17,173,191,117,209,128,173,45,93,201, + 63,150,175,92,63,103,227,214,29,243,190,152,249,137,172,91,215,62,136,59,253,43,14,28,251,189,88,174,80,174,20,176,248,49,238,21,173,182,14,69, + 84,60,229,87,94,70,8,145,58,54,65,121,13,166,71,185,0,165,180,70,185,197,84,231,73,78,34,132,252,24,20,20,180,236,211,46,29,222,159,222, + 185,39,212,106,53,34,35,35,145,156,156,124,16,192,34,74,169,69,17,183,184,184,184,87,205,155,54,8,117,148,8,230,77,27,51,204,57,235,241,125, + 60,127,112,19,0,160,80,148,170,51,18,98,91,215,196,62,137,68,114,197,217,217,249,161,179,179,115,174,86,81,52,73,204,171,245,213,148,81,67,92, + 178,147,226,145,122,79,215,50,170,144,151,168,82,19,98,124,106,162,171,167,65,131,6,34,25,31,147,117,246,14,117,126,249,248,222,107,123,149,114,245, + 139,196,7,109,44,209,41,81,40,151,127,179,58,178,239,119,243,38,136,106,213,170,133,27,119,31,225,171,85,187,139,75,149,234,254,89,119,14,189,147, + 230,49,74,41,212,106,181,197,29,29,76,240,69,235,214,173,189,151,45,91,230,53,126,252,120,188,109,36,203,144,199,79,159,135,5,6,6,250,61,122, + 120,35,200,81,34,248,199,219,92,79,43,86,172,88,177,98,197,162,28,173,184,76,90,2,96,105,99,87,178,101,193,178,213,139,25,178,102,2,71,233, + 175,26,6,223,60,121,69,171,102,198,215,0,74,105,73,176,15,209,244,29,58,134,7,0,124,94,181,249,83,230,180,18,1,12,39,132,180,255,233,194, + 213,47,203,22,127,71,41,173,81,91,174,45,15,119,187,250,53,174,219,173,109,115,49,171,45,197,243,7,143,145,83,44,199,169,123,201,121,12,101,126, + 173,169,93,79,158,60,249,27,0,90,52,109,240,160,155,95,19,143,238,254,205,165,124,162,196,243,251,55,144,95,170,196,201,123,201,249,32,228,141,19, + 170,13,237,229,189,133,189,47,238,28,190,230,220,106,88,111,66,200,233,133,211,71,139,22,175,218,243,78,157,44,0,37,105,105,105,217,37,37,37,78, + 233,233,233,74,188,97,145,56,74,233,35,66,72,203,89,179,102,45,157,59,119,238,188,239,191,255,94,240,38,57,89,166,200,77,75,62,212,189,249,219, + 95,79,43,86,172,88,177,242,191,65,229,98,165,134,243,53,42,239,240,36,147,102,1,152,214,164,9,153,253,248,49,85,190,43,3,141,69,186,222,134, + 50,199,106,240,27,11,48,164,240,114,98,114,209,149,196,228,34,112,148,114,148,42,24,6,169,197,42,213,242,132,39,207,223,188,215,29,33,218,107,143, + 82,74,175,63,78,149,83,142,163,28,165,74,66,240,66,173,230,150,223,125,242,236,200,191,131,189,89,119,14,93,168,227,247,126,183,11,87,238,206,46, + 46,86,109,200,186,127,232,226,27,219,85,9,74,169,154,16,242,81,64,64,192,199,90,173,118,11,165,84,253,22,90,74,0,95,16,66,14,198,197,197, + 237,189,120,241,98,6,222,129,147,5,224,159,119,255,173,88,177,98,197,202,127,53,198,170,195,191,81,29,173,119,233,100,253,59,18,151,152,228,255,207, + 208,189,155,152,212,226,159,161,251,174,237,125,113,255,224,117,0,163,222,165,166,30,74,233,73,0,39,223,161,222,53,66,72,67,0,236,59,113,178,240, + 207,187,255,86,172,88,177,98,229,191,23,99,213,225,129,55,116,180,172,88,249,119,130,234,50,51,223,137,147,101,197,138,21,43,86,172,212,148,202,81, + 44,67,8,128,222,38,118,58,109,233,1,8,33,70,53,170,49,202,172,190,85,211,170,105,213,180,106,90,53,173,154,86,205,255,62,205,255,70,42,71, + 177,0,3,231,235,159,217,165,17,255,33,93,74,173,154,86,77,171,166,85,211,170,105,213,180,106,254,107,53,255,27,38,0,147,42,47,179,54,29,90, + 177,98,197,138,21,43,86,172,188,5,134,17,45,253,123,250,38,189,14,203,4,154,150,9,60,122,87,6,26,57,198,116,55,55,183,73,173,90,181,242, + 21,8,4,76,97,97,225,55,49,49,49,75,42,111,215,189,57,255,58,203,160,158,193,158,0,97,1,134,129,150,226,249,217,219,37,237,254,89,54,90, + 121,123,8,33,158,146,90,206,127,16,134,21,106,53,42,104,213,42,0,175,135,99,226,56,77,178,70,41,239,103,106,127,183,54,239,123,104,180,220,247, + 0,221,8,48,83,1,110,19,1,111,10,133,102,51,1,251,25,88,186,2,90,50,159,199,103,23,164,223,216,151,250,255,113,78,255,108,246,239,223,207, + 190,205,254,35,70,140,48,58,128,104,221,186,117,143,73,165,210,38,166,246,43,46,46,206,72,79,79,15,122,155,99,255,187,67,8,233,14,96,61,128, + 230,149,86,197,3,8,165,148,70,191,237,49,2,9,225,185,2,147,5,192,124,0,80,1,43,50,129,173,127,191,163,142,28,239,2,23,23,151,179,60, + 30,207,171,184,184,184,184,160,160,160,113,173,90,181,158,200,100,50,153,70,163,73,124,249,242,101,119,179,59,19,98,209,231,179,5,96,155,0,124,168, + 101,152,25,124,96,163,130,227,116,181,19,41,173,118,128,91,66,200,167,0,22,3,200,0,48,133,82,122,179,38,235,173,88,249,103,64,205,228,104,85, + 235,104,17,66,154,1,232,81,54,117,111,223,190,189,107,113,113,49,8,33,153,0,206,2,136,5,16,75,41,77,120,23,198,178,44,251,195,218,181,107, + 231,204,152,49,163,124,48,232,59,119,238,24,223,150,65,189,51,199,162,93,174,221,121,136,246,189,71,64,231,104,49,64,201,11,4,245,110,255,70,199, + 39,132,216,58,56,56,124,67,8,25,201,48,76,181,63,26,28,199,105,41,165,251,114,115,115,23,83,74,11,107,114,44,27,153,88,173,209,106,141,30, + 131,199,178,218,162,98,185,201,178,23,78,78,78,23,25,134,105,100,56,96,118,153,253,70,223,27,206,107,52,154,231,89,89,89,213,58,161,132,16,49, + 195,19,132,18,34,232,3,134,107,6,16,16,48,9,156,86,121,138,211,168,214,82,74,205,143,230,109,94,219,211,173,126,227,115,159,47,138,168,119,247, + 65,60,22,78,31,131,239,215,239,192,130,208,143,177,118,219,110,132,78,26,13,63,191,202,255,119,21,225,32,88,190,104,230,200,222,225,27,247,118,93, + 48,109,164,40,124,227,190,110,11,167,127,40,92,190,97,111,183,133,211,63,16,133,111,216,219,117,193,204,145,146,229,155,246,115,0,198,190,137,157,31, + 53,171,91,12,141,70,100,116,37,143,167,248,71,66,154,236,77,116,223,150,144,144,144,0,150,112,235,250,117,244,62,211,209,207,227,153,177,109,178,51, + 82,26,60,123,250,48,72,192,48,51,7,135,69,94,50,167,39,18,137,26,197,199,199,123,113,28,7,173,86,11,141,253,173,187,182,0,0,32,0,73, + 68,65,84,70,83,254,170,84,42,209,189,123,247,119,18,253,38,132,12,6,240,13,116,249,161,225,148,210,189,111,161,101,195,227,241,62,23,10,133,61, + 52,26,141,47,0,240,249,252,7,10,133,34,86,163,209,172,166,148,22,213,80,114,77,90,90,154,159,141,141,13,84,42,85,249,0,244,44,203,250,120, + 120,120,108,4,224,245,166,182,234,113,5,38,119,238,218,117,237,184,57,115,216,210,179,103,177,118,251,246,53,40,40,0,128,141,213,237,43,18,137,254, + 98,24,198,179,38,199,227,56,46,89,161,80,152,124,88,49,6,143,199,243,74,79,79,119,113,119,119,7,0,200,100,50,153,225,252,155,18,11,144,254, + 64,119,13,203,206,114,170,93,187,219,141,147,39,101,45,90,180,96,88,150,93,0,192,162,34,213,132,144,58,13,26,52,216,114,226,196,9,38,41,41, + 201,125,200,144,33,127,248,251,251,111,131,238,9,141,42,20,10,89,131,6,13,230,159,56,113,130,60,123,246,204,173,127,255,254,155,1,188,217,159,129, + 21,43,53,192,88,89,7,61,38,127,60,9,33,199,1,244,104,223,190,189,100,212,168,81,232,209,163,7,188,188,188,32,22,139,1,0,217,217,217,174, + 183,110,221,250,224,236,217,179,31,28,61,122,20,132,144,82,0,231,41,165,70,191,212,189,7,119,155,33,182,17,173,3,128,172,231,217,25,207,159,190, + 92,151,145,145,177,146,26,140,70,77,8,105,60,110,220,184,217,51,103,206,196,177,99,199,176,123,247,110,40,20,10,20,22,22,34,38,38,198,184,161, + 197,47,145,27,19,1,200,158,1,41,127,3,82,23,64,230,106,225,165,169,138,131,131,195,55,161,161,161,179,252,252,252,64,169,174,138,185,90,173,134, + 70,163,129,90,173,70,110,110,46,102,207,158,13,64,151,223,198,113,28,254,252,243,207,25,147,38,77,2,128,207,141,105,6,180,243,184,206,16,166,158, + 62,86,67,181,218,231,151,110,166,182,211,104,181,172,92,174,50,58,82,185,88,44,48,235,228,241,249,252,122,247,255,248,195,133,17,10,65,181,90,128, + 227,64,57,14,128,193,68,117,203,168,150,3,85,107,193,105,56,104,74,21,232,48,117,106,181,215,129,16,210,153,47,148,236,254,232,211,57,117,58,118, + 234,196,111,80,223,29,26,45,135,199,73,207,235,220,184,126,185,203,190,157,27,167,16,66,70,83,74,223,168,206,150,80,90,235,228,134,205,63,213,187, + 118,235,46,162,207,156,197,233,152,88,0,192,95,103,116,114,12,195,84,103,159,131,75,243,129,45,67,39,14,21,69,108,216,195,15,157,56,140,253,126, + 195,239,252,153,31,15,97,35,214,237,22,204,252,120,8,27,177,126,183,96,230,196,161,108,248,218,95,90,17,66,28,40,165,185,166,244,76,221,35,104, + 52,162,127,60,201,100,1,32,107,203,22,168,95,190,132,251,226,197,0,128,143,26,187,26,119,192,140,224,236,236,124,157,207,231,215,171,110,59,181,90, + 93,173,19,28,18,18,210,185,101,203,150,135,162,162,142,218,140,120,127,120,179,250,13,26,157,30,217,47,32,211,112,155,203,151,46,185,158,206,124,212, + 251,151,3,49,76,248,156,144,195,71,194,67,134,13,89,16,105,242,94,113,28,199,40,20,10,36,38,38,234,243,12,42,83,109,164,193,24,132,16,6, + 192,90,39,39,167,142,217,217,217,31,1,88,88,80,80,208,138,101,89,56,58,58,46,36,132,60,182,179,179,251,57,63,63,255,34,116,81,35,139,134, + 12,32,132,116,175,85,171,86,228,161,67,135,28,218,182,109,203,100,101,101,161,81,163,70,200,201,201,233,112,246,236,89,255,137,19,39,78,36,132,132, + 80,74,207,214,192,92,111,169,84,74,199,141,27,71,180,218,215,167,251,203,47,191,160,95,11,77,147,207,250,203,74,228,74,154,31,157,104,247,153,64, + 32,56,255,236,217,179,252,26,93,12,0,2,96,254,184,57,115,88,155,103,207,96,115,251,54,62,42,40,224,125,175,139,110,85,235,104,49,12,227,25, + 185,231,87,47,161,80,88,254,187,100,106,210,106,181,80,41,85,136,248,206,232,184,236,22,33,149,74,165,238,238,238,153,82,169,84,250,198,34,0,92, + 1,143,28,134,249,180,141,191,255,164,175,135,12,145,92,191,126,93,196,48,12,52,26,13,86,174,92,169,161,148,218,251,1,181,238,3,5,22,200,57, + 9,133,66,198,203,75,231,243,218,217,217,185,69,70,70,46,210,175,76,76,76,36,11,23,46,36,101,235,9,116,195,179,89,177,242,255,66,229,132,120, + 75,154,14,7,20,20,20,64,171,213,194,214,214,22,44,91,241,127,223,201,201,9,125,250,244,65,247,238,221,49,106,212,40,220,191,127,95,50,106,212, + 168,62,166,196,198,204,25,132,250,94,58,7,72,173,230,220,46,68,221,138,248,229,219,253,206,0,230,24,108,54,113,242,228,201,36,59,59,27,35,71, + 142,60,171,80,40,222,163,148,154,252,242,105,57,60,15,26,53,6,28,37,146,213,87,182,17,165,188,148,50,12,83,170,111,58,52,115,110,38,33,132, + 140,116,119,119,199,158,61,123,160,84,86,45,23,86,171,86,45,220,187,119,175,124,158,101,89,116,234,212,137,37,132,140,132,9,71,139,16,166,222,133, + 107,207,92,244,243,131,250,52,23,4,180,243,204,116,118,178,165,0,200,162,69,186,223,9,253,31,220,55,223,124,99,137,157,96,248,124,100,197,198,150, + 47,99,120,12,24,1,1,225,3,12,79,215,138,10,10,80,45,192,105,0,78,13,136,221,234,91,162,221,161,174,135,215,177,229,171,54,217,43,212,20, + 123,142,68,35,41,233,41,88,134,65,227,38,94,232,27,216,141,239,223,62,160,254,138,37,115,142,18,66,6,80,74,45,26,0,187,2,28,21,55,241, + 168,141,159,127,185,1,103,7,27,140,28,58,16,18,177,8,223,175,255,21,223,45,152,14,175,198,158,216,186,102,153,201,221,237,236,236,150,250,122,53, + 241,220,180,51,10,190,62,62,236,166,200,40,248,250,149,189,54,247,101,55,69,70,193,175,185,31,187,41,50,10,173,154,123,55,184,158,113,101,41,128, + 233,166,207,185,210,61,234,171,187,71,94,60,65,185,35,252,108,202,20,0,40,119,180,106,2,159,207,175,151,158,158,238,82,221,118,213,69,13,66,66, + 66,2,218,180,105,115,56,38,38,198,54,47,47,143,183,111,255,126,237,192,1,3,122,19,224,244,136,50,103,235,202,165,75,174,167,79,158,232,189,112, + 211,49,161,50,225,24,249,106,249,26,201,151,179,62,57,120,52,34,100,216,136,17,35,206,27,211,85,40,20,73,109,218,180,161,101,239,235,138,68,34, + 129,225,122,66,136,187,151,151,87,149,168,181,5,77,138,107,47,93,186,52,221,207,207,15,62,62,62,23,59,118,236,88,75,38,147,225,196,137,19,240, + 245,245,109,94,171,86,173,43,251,246,237,227,127,241,197,23,173,183,111,223,14,0,51,204,95,33,93,47,168,160,160,160,61,199,142,29,19,11,4,2, + 148,150,150,226,222,189,123,176,183,183,135,80,40,196,144,33,67,216,46,93,186,56,5,6,6,30,40,123,24,176,184,7,148,92,46,167,11,23,46,132, + 84,42,133,84,42,133,76,38,131,76,38,131,141,24,100,75,168,135,100,230,182,60,201,231,139,183,68,68,110,90,114,198,195,195,227,235,148,148,148,60, + 75,181,245,148,158,61,11,155,219,183,1,131,239,174,165,216,73,29,17,22,22,102,118,27,30,143,7,129,64,128,206,157,59,87,171,231,228,228,116,144, + 199,227,85,120,50,165,148,138,195,194,194,180,9,9,9,50,134,97,100,28,199,33,44,44,76,171,209,104,196,174,174,174,23,57,142,203,204,202,202,122, + 223,156,110,32,32,190,8,12,35,124,254,231,110,238,238,13,123,52,110,44,61,125,250,52,11,0,158,158,158,52,35,35,35,239,240,225,195,133,60,96, + 179,39,165,59,45,116,178,64,41,189,39,22,139,79,122,123,123,247,85,171,213,104,220,184,113,198,166,77,155,210,0,16,74,41,1,64,180,90,173,175, + 183,183,183,88,169,84,82,232,162,167,86,254,59,240,7,96,248,89,85,2,16,150,189,207,134,46,170,89,187,210,114,0,120,5,221,131,162,171,137,249, + 108,0,247,1,120,3,112,41,91,119,13,64,78,77,13,52,27,209,138,138,138,42,127,132,13,14,14,46,255,99,177,181,181,197,181,107,215,64,8,129, + 173,173,45,106,213,170,5,59,59,59,20,20,20,224,254,253,251,136,143,143,199,179,103,207,64,8,65,227,198,141,1,221,19,132,225,65,203,127,224,126, + 251,241,24,196,54,34,16,2,180,237,217,10,173,186,183,64,251,171,79,66,221,221,221,183,165,167,167,39,18,66,120,45,90,180,152,216,169,83,39,172, + 90,181,10,10,133,98,149,49,39,203,80,243,236,61,117,59,0,112,119,119,159,187,235,196,99,233,216,254,77,74,210,211,211,127,120,131,139,83,225,135, + 248,213,171,87,22,143,197,199,113,28,114,115,171,6,74,12,53,43,71,8,86,175,221,96,95,152,159,137,111,191,223,5,181,90,141,57,115,230,128,227, + 184,242,41,47,207,248,111,119,101,59,169,182,82,144,129,209,77,132,1,8,15,240,248,80,231,87,164,236,217,0,66,1,162,5,80,233,188,42,107,18, + 66,196,172,64,242,251,146,239,215,217,223,140,127,142,35,209,55,161,42,72,67,198,237,67,0,128,198,157,71,99,175,130,69,199,86,77,48,107,209,10, + 135,47,103,133,252,78,8,241,49,108,70,180,228,143,141,82,45,190,93,186,20,219,214,173,194,138,85,235,80,144,159,7,62,191,54,0,64,163,209,66, + 91,233,220,170,156,59,165,253,195,66,39,144,239,55,31,68,7,63,55,28,56,113,21,93,219,120,226,208,201,235,232,238,223,16,71,78,223,68,207,142, + 77,112,60,246,46,102,77,30,77,70,255,181,189,191,185,235,89,249,30,173,89,179,193,190,176,32,19,199,150,237,196,203,141,27,145,60,125,58,58,148, + 109,115,149,16,8,234,213,3,4,168,66,117,231,254,224,193,3,40,20,138,42,203,69,34,17,124,125,125,141,238,99,168,169,84,42,191,140,138,138,18, + 231,229,229,241,50,50,50,32,147,201,216,53,171,127,148,79,155,52,190,245,136,126,1,39,0,224,208,145,67,173,191,217,176,151,167,124,112,136,148,156, + 255,17,130,198,189,197,161,99,122,229,205,249,241,247,47,1,244,53,102,103,70,70,198,0,253,251,198,141,27,199,39,36,36,120,235,155,154,203,154,16, + 5,26,141,198,75,223,156,168,209,104,160,80,40,208,187,119,239,242,39,48,99,231,238,224,224,208,201,215,215,23,55,111,222,196,186,117,235,28,131,130, + 130,240,232,209,35,16,66,176,124,249,114,226,231,231,199,127,245,234,21,250,245,235,135,131,7,15,86,241,12,140,124,62,109,101,50,217,246,163,71,143, + 138,25,134,65,97,97,33,56,142,67,215,174,93,193,48,12,238,222,189,139,69,139,22,225,224,193,131,56,124,248,176,196,223,223,127,59,33,196,215,176, + 89,223,204,61,162,114,185,156,138,68,34,136,68,34,136,197,98,136,197,98,8,133,66,20,201,129,73,171,147,21,172,184,54,215,188,77,215,38,19,102, + 46,103,126,248,234,227,24,0,71,170,209,172,128,10,88,177,246,215,95,215,125,148,159,207,0,192,207,132,112,42,74,87,24,53,198,136,102,161,60,15, + 158,77,234,225,192,158,195,24,62,106,104,149,125,120,60,30,248,124,1,4,124,62,108,29,171,6,162,42,107,10,4,2,215,248,248,120,39,62,159,15, + 74,169,46,18,166,82,101,126,249,229,151,206,193,193,193,182,127,254,249,39,19,28,28,204,57,56,56,20,95,189,122,245,165,70,163,113,234,214,173,155, + 73,77,41,208,74,110,215,116,173,152,79,91,125,191,96,138,104,236,216,177,236,132,9,19,144,146,146,130,137,19,39,202,79,157,58,165,124,145,145,113, + 68,200,113,27,84,128,241,156,16,19,231,174,71,46,151,247,235,221,187,247,237,176,176,48,159,157,59,119,238,159,48,97,194,214,74,215,96,119,215,174, + 93,125,23,47,94,188,138,82,250,147,37,154,111,138,85,243,221,98,202,23,41,195,149,16,114,204,224,248,131,244,243,97,97,97,11,195,195,195,239,17, + 66,142,25,46,215,111,7,0,250,101,149,231,203,246,117,92,176,96,65,139,136,136,136,229,1,1,1,123,46,94,188,248,20,53,116,180,170,205,209,210, + 159,144,225,73,86,18,64,65,65,1,10,10,10,144,154,154,138,45,91,182,148,125,161,249,224,241,120,224,241,120,229,249,12,166,56,125,244,220,122,0, + 235,253,253,253,249,113,151,246,253,57,127,219,204,94,237,122,183,101,111,68,199,141,0,240,29,128,1,227,198,141,171,13,0,59,119,238,124,5,224,207, + 154,156,228,187,130,82,186,47,49,49,113,150,155,155,91,121,142,138,97,243,161,70,163,129,88,44,134,62,151,69,46,151,99,203,150,45,26,74,233,62, + 51,154,72,184,23,131,196,123,103,116,251,113,28,56,237,235,253,151,44,89,98,216,53,20,83,202,34,39,213,193,25,187,230,180,210,107,165,229,85,156, + 179,74,48,140,96,230,136,144,233,110,28,225,225,143,152,91,224,243,249,224,12,162,153,124,86,247,180,124,239,81,58,220,93,155,227,189,209,147,235,28, + 138,220,48,19,192,247,22,25,109,128,79,235,0,132,206,154,133,159,182,109,195,162,197,75,203,189,116,141,86,11,77,181,118,50,76,239,46,45,160,41, + 74,7,203,178,232,217,161,9,88,150,69,159,128,102,96,89,22,253,186,248,128,199,227,161,127,87,63,52,109,218,20,60,30,207,108,91,164,238,30,69, + 35,241,222,223,6,78,175,238,158,168,50,50,170,108,175,206,200,0,245,112,170,209,249,82,74,49,113,226,196,188,212,212,84,85,229,117,245,235,215,23, + 156,61,123,214,222,68,179,93,57,66,161,240,187,129,3,7,30,62,124,248,48,149,74,165,18,149,178,68,241,241,196,79,217,111,167,12,187,173,223,102, + 216,144,97,183,127,152,63,161,247,220,133,139,33,104,20,200,211,82,228,173,248,249,8,95,200,23,126,103,137,157,250,102,196,135,15,31,154,106,70,52, + 60,39,163,77,223,122,114,115,115,199,249,250,250,158,93,191,126,189,35,33,4,231,206,157,3,203,178,229,211,147,39,79,192,48,12,230,207,159,175,42, + 40,40,248,164,58,219,120,60,222,172,3,7,14,216,9,133,66,20,22,22,150,127,111,88,150,69,124,124,60,126,248,225,7,140,27,55,14,41,41,41, + 112,119,119,199,156,57,115,108,34,34,34,102,1,88,106,193,169,223,81,42,149,237,164,82,41,196,98,49,244,14,23,0,156,188,199,191,91,82,82,210, + 178,118,237,218,117,156,99,143,253,209,57,232,189,214,78,206,110,1,40,115,180,44,229,49,176,237,169,70,243,229,128,67,135,92,46,28,58,196,93,250, + 227,143,231,226,162,162,173,213,239,89,134,154,69,242,227,231,240,247,247,199,141,27,55,224,239,255,122,16,3,129,64,0,161,80,8,129,64,0,129,64, + 128,218,246,22,165,80,80,134,97,112,225,194,5,104,181,90,40,149,74,40,149,74,248,249,249,229,156,57,115,198,6,0,158,60,121,66,199,142,29,155, + 119,229,202,21,180,105,99,126,60,117,57,33,209,75,150,255,104,247,227,134,72,216,57,186,34,54,54,86,123,226,196,137,66,2,36,36,222,187,183,234, + 61,224,248,62,160,202,231,223,20,132,16,190,179,179,243,113,30,143,87,225,203,38,145,72,154,44,89,178,132,159,145,145,49,250,252,249,243,125,1,192, + 209,209,49,118,235,214,173,235,0,160,105,211,166,84,36,18,213,52,71,207,202,191,152,234,124,17,224,181,163,100,56,79,8,57,22,30,30,62,168,242, + 50,67,167,202,216,123,195,125,35,34,34,150,27,104,151,190,203,243,42,111,58,140,138,138,162,70,60,72,139,169,206,209,210,115,227,198,13,117,221,186, + 117,127,74,188,245,172,87,147,86,141,33,145,137,250,18,66,214,139,68,162,217,33,33,33,184,124,249,50,238,222,189,251,11,125,203,94,56,45,91,182, + 252,75,36,18,121,26,91,167,80,40,146,227,226,226,140,230,146,229,230,230,46,46,203,57,51,153,12,111,152,47,102,152,12,111,202,22,202,81,168,85, + 106,20,151,148,190,254,19,47,115,180,138,139,139,241,225,135,31,86,136,104,189,124,249,178,218,243,35,132,224,135,35,71,112,106,223,62,12,108,221,26, + 7,175,94,69,68,200,24,248,120,214,5,213,18,80,2,164,236,222,128,236,130,34,252,22,125,1,57,133,37,248,168,91,55,120,213,170,109,94,151,47, + 232,211,161,83,128,224,244,197,251,224,243,121,96,192,129,170,75,224,238,27,8,150,97,96,231,218,16,2,62,31,124,62,15,79,82,95,193,183,69,123, + 225,49,161,184,15,222,192,209,242,240,108,4,78,171,197,184,113,227,176,103,207,30,56,213,241,132,93,253,22,248,110,213,54,12,236,221,205,236,190,250, + 104,139,222,209,103,89,182,202,171,254,189,37,209,73,202,81,168,42,223,35,142,130,2,168,183,108,25,234,45,91,134,171,101,199,244,43,46,70,105,105, + 41,208,209,124,178,126,5,125,74,161,84,42,145,154,154,170,202,200,200,168,242,15,88,167,78,157,76,165,82,89,173,99,19,25,25,121,41,36,36,100, + 88,96,96,224,193,117,107,86,43,166,79,159,46,94,58,101,80,244,8,131,28,173,142,1,1,153,20,56,253,221,162,185,189,63,30,220,182,120,117,228, + 73,77,94,41,134,15,89,96,62,33,94,143,66,161,72,106,213,170,149,121,67,202,40,41,41,121,97,106,157,62,241,189,109,219,182,181,130,130,130,112, + 246,236,89,12,31,62,92,161,82,169,18,1,32,56,56,184,217,111,191,253,38,188,127,255,62,156,157,157,249,201,201,201,219,9,33,102,19,228,133,66, + 97,96,251,246,237,25,133,66,81,197,201,138,136,136,192,232,209,163,209,172,89,51,112,28,135,162,162,34,4,5,5,241,215,173,91,23,8,203,28,173, + 80,31,31,159,31,160,235,117,104,248,91,248,0,192,60,0,120,245,234,213,139,65,195,199,221,235,214,251,253,118,13,154,182,168,54,255,199,213,213,117, + 1,195,48,31,112,28,199,22,20,20,164,42,9,105,234,215,160,129,107,151,161,67,145,207,231,179,107,163,163,153,204,162,34,27,0,22,53,65,150,170, + 139,224,217,68,151,234,55,124,212,80,220,184,113,3,35,70,15,131,64,32,0,143,199,215,125,55,5,186,136,150,125,109,91,75,36,161,86,235,134,28, + 213,63,84,170,84,42,168,84,42,232,83,179,164,82,105,249,58,133,66,1,66,136,185,207,6,19,212,189,11,46,222,76,208,76,156,183,86,193,207,190, + 30,81,135,227,118,60,7,50,205,236,99,14,105,35,151,218,237,86,132,78,183,99,249,2,240,196,98,52,8,212,213,207,84,20,22,32,225,143,131,206, + 0,117,206,127,145,129,217,191,31,22,0,88,247,134,199,177,242,111,66,117,190,136,161,163,244,182,16,66,142,133,133,133,45,4,64,195,194,194,22,234, + 231,195,195,195,75,1,164,189,139,99,0,6,77,135,111,227,100,1,168,210,212,83,153,158,61,123,206,176,181,181,93,7,0,237,218,181,67,234,229,52, + 164,94,78,131,175,119,243,46,109,91,183,203,31,61,122,52,156,156,156,48,119,238,92,10,224,151,154,30,255,73,194,61,27,0,212,221,221,125,46,0, + 184,187,187,183,190,122,245,170,243,181,107,215,208,190,253,235,78,39,42,149,10,93,187,118,53,169,83,214,196,240,57,76,228,91,189,9,148,114,80,169, + 84,40,41,41,133,82,169,130,70,205,65,163,209,192,191,185,45,34,183,133,233,150,105,244,209,51,93,212,172,94,29,91,248,183,172,163,102,24,82,122, + 237,118,70,45,99,186,74,165,18,119,146,147,113,251,153,174,211,217,123,225,70,91,32,202,137,140,62,11,63,63,191,234,172,109,82,207,189,14,210,79, + 221,209,253,120,151,166,226,218,249,189,176,181,181,1,0,52,239,241,17,4,2,157,163,85,92,170,66,109,239,250,32,148,154,44,11,32,115,116,251,139, + 39,16,123,82,45,7,74,57,80,78,11,74,57,136,108,157,164,211,63,155,0,142,211,162,67,135,14,32,44,11,173,90,129,145,131,251,32,55,191,16, + 78,246,70,79,185,10,2,129,0,61,122,244,144,152,90,255,232,209,163,82,160,106,15,204,42,103,77,57,157,163,85,92,10,133,66,1,149,82,3,149, + 90,3,174,145,0,223,126,57,6,26,149,6,37,163,2,116,203,102,13,131,74,169,70,138,148,97,90,251,57,171,25,144,210,155,247,95,154,53,152,82, + 10,189,115,96,10,99,57,129,198,136,140,140,188,24,18,18,50,108,232,144,193,235,123,183,111,118,54,233,73,98,114,196,134,196,202,155,61,84,9,28, + 158,45,218,124,162,59,159,97,102,88,234,100,1,21,155,17,223,146,133,133,133,133,173,108,108,108,144,144,144,0,150,101,65,8,121,68,41,109,5,0, + 147,39,79,126,204,227,241,26,179,44,139,141,27,55,18,30,143,215,50,32,32,96,33,0,147,142,150,70,163,241,181,181,181,173,16,205,18,8,4,8, + 11,11,195,216,177,99,203,157,44,129,64,128,29,59,118,160,93,187,118,80,42,149,198,219,100,43,65,117,131,209,155,247,240,1,112,28,71,0,128,114, + 213,120,197,58,123,199,103,127,240,65,83,196,198,162,75,227,198,126,254,254,254,80,169,94,7,116,26,53,106,84,191,176,176,240,5,33,228,31,0,54, + 81,74,111,153,213,147,83,36,63,214,165,159,222,184,113,3,29,58,116,40,143,96,25,70,179,4,2,1,36,2,155,234,204,3,240,218,209,226,56,221, + 239,82,97,97,33,19,27,27,91,219,199,199,135,0,128,143,143,15,185,117,235,150,163,84,42,125,213,164,73,147,234,30,128,5,0,16,216,247,125,222, + 169,19,199,101,26,96,233,11,150,93,90,93,151,85,74,169,90,203,113,70,147,238,29,237,236,193,169,213,56,25,177,20,246,245,61,209,184,151,238,25, + 89,89,88,128,75,91,215,193,198,209,9,173,134,127,104,209,185,90,249,247,198,18,95,228,93,57,89,122,45,125,68,43,60,60,252,94,120,120,120,149, + 232,88,77,48,76,134,55,108,74,172,16,209,2,140,182,139,90,132,254,203,106,138,85,171,86,161,101,203,150,38,215,83,74,177,110,221,58,236,218,181, + 107,21,165,244,73,77,143,63,168,87,219,230,88,125,232,94,227,102,205,9,0,44,157,53,152,41,46,46,198,133,11,23,96,103,103,135,71,143,44,43, + 251,69,8,177,181,179,179,251,134,97,152,145,108,229,30,0,70,208,106,181,90,142,227,246,229,231,231,155,44,239,64,41,160,82,107,80,92,34,135,82, + 169,196,172,249,27,170,181,35,28,32,42,101,33,175,71,247,0,163,78,4,33,4,29,90,244,192,180,177,178,42,127,222,172,174,148,24,218,116,208,141, + 97,125,243,202,93,80,10,104,181,64,109,23,71,252,178,231,71,115,135,38,26,45,87,246,116,172,69,145,66,11,223,78,131,240,252,65,44,0,93,4, + 73,40,208,53,25,11,248,124,112,148,232,170,62,152,64,32,148,120,230,102,60,241,218,118,44,14,147,6,181,196,254,211,119,48,162,119,43,156,185,114, + 31,65,29,253,112,47,241,25,154,123,53,192,198,237,251,64,41,10,55,175,254,174,60,66,194,113,154,100,147,70,26,68,180,46,95,190,92,90,57,138, + 101,248,90,93,148,8,208,125,254,244,17,173,82,185,2,115,23,108,170,118,31,232,239,81,183,78,38,29,61,67,204,69,172,44,113,196,12,137,140,140, + 188,4,160,173,185,109,26,225,95,223,175,93,171,213,34,42,42,170,252,126,84,134,16,82,33,2,89,29,28,199,33,57,57,25,119,239,222,69,64,64, + 0,242,243,243,193,103,24,204,137,139,131,95,72,8,148,2,1,56,142,131,80,40,196,228,201,147,45,190,158,53,162,172,185,148,82,173,89,113,66,200, + 143,131,6,13,106,154,80,92,140,123,241,241,232,189,100,9,0,32,42,42,170,124,27,165,82,137,217,179,103,11,239,223,191,63,241,250,245,235,19,9, + 33,171,40,165,115,76,72,66,69,229,229,57,90,31,124,52,28,77,125,27,97,215,246,221,229,235,103,207,15,5,159,47,0,159,207,135,189,189,189,69, + 103,163,86,171,203,157,214,146,146,18,230,248,241,227,245,250,244,233,35,8,13,13,37,0,176,107,215,46,102,253,250,245,178,83,167,78,9,234,214,173, + 91,181,29,189,226,57,23,164,101,43,68,0,224,225,225,129,13,91,255,96,130,131,131,17,26,26,10,181,90,141,77,155,116,223,171,209,163,71,67,165, + 82,225,192,129,3,0,0,30,143,103,178,148,13,5,133,90,33,71,97,230,11,240,37,82,112,28,7,66,8,168,86,11,85,97,1,52,18,49,192,113, + 96,24,198,126,237,218,181,147,147,147,147,93,123,245,234,37,40,40,40,152,66,8,57,105,173,163,245,159,69,117,190,136,177,92,171,178,168,148,41,178, + 12,243,182,76,57,106,134,57,91,0,170,38,210,86,67,229,242,14,134,243,21,114,180,140,193,178,108,181,209,42,125,87,93,115,204,158,61,27,182,182, + 198,67,217,74,165,146,198,197,197,221,207,200,200,216,70,41,173,222,11,49,194,177,232,155,247,190,249,124,88,33,202,218,86,237,237,237,95,245,236,217, + 179,8,128,106,239,222,138,15,200,10,133,34,217,148,142,157,157,221,55,63,255,252,243,204,161,67,135,50,149,75,12,24,54,239,233,39,181,90,141,189, + 123,247,206,252,226,139,47,0,19,81,48,253,159,120,73,113,41,74,203,18,161,31,223,221,111,217,137,153,249,163,176,113,112,71,189,198,90,147,127,38, + 140,64,151,214,80,199,179,117,249,50,91,91,49,180,102,52,9,97,158,60,75,73,175,91,191,142,35,30,167,102,193,181,65,75,228,166,189,190,14,60, + 30,11,126,89,211,161,125,45,25,178,94,190,4,195,176,102,29,227,239,126,187,137,43,119,159,225,192,233,91,80,201,139,177,122,231,9,168,20,69,80, + 201,139,161,146,235,94,151,127,241,41,8,193,11,149,188,168,153,57,173,202,240,120,60,116,236,216,209,164,163,147,150,150,102,97,68,139,150,71,180,74, + 229,53,188,71,22,160,111,58,172,110,253,155,58,6,33,33,33,157,29,29,29,183,228,228,228,124,22,25,105,186,140,131,49,220,220,220,254,180,177,177, + 105,104,233,246,53,40,94,186,220,222,222,254,27,31,31,31,223,213,171,87,243,89,150,69,175,94,189,154,125,250,233,167,201,0,208,178,101,75,119,64, + 247,27,51,117,234,84,122,249,242,229,187,0,194,205,9,10,133,194,120,59,59,187,118,61,123,246,68,126,126,62,82,83,83,33,147,201,224,247,227,143, + 136,155,58,21,173,183,108,1,211,179,39,8,33,16,10,133,136,139,139,131,68,34,137,55,165,71,8,233,8,96,5,128,46,120,221,92,72,1,92,0, + 48,159,82,122,165,242,62,250,31,6,45,199,85,119,179,198,204,157,59,23,121,124,62,16,28,12,193,147,39,80,169,84,8,8,8,64,187,118,186,10, + 30,1,1,1,224,241,120,104,213,170,21,220,221,221,177,113,227,198,49,168,216,19,187,2,138,34,53,146,31,63,71,64,64,64,121,228,42,56,56,184, + 60,162,197,231,243,203,35,91,196,120,137,190,202,231,79,13,31,146,181,90,45,225,241,120,188,207,63,255,156,12,31,62,156,42,149,74,78,40,20,50, + 7,14,28,32,103,206,156,225,21,23,23,87,23,109,40,30,53,106,148,75,253,250,245,144,250,248,30,246,239,167,88,181,106,21,206,158,213,85,217,72, + 72,208,117,92,213,207,7,5,5,161,97,195,134,160,102,62,248,114,134,167,109,53,114,12,234,6,116,67,81,230,11,108,238,21,0,129,128,15,251,186, + 245,240,241,241,88,240,4,2,8,164,50,56,239,61,98,63,110,220,184,169,147,39,79,22,156,63,127,30,73,73,73,117,7,12,24,96,173,163,245,31, + 68,53,129,158,172,74,78,146,210,96,62,11,186,158,167,131,202,222,195,224,253,53,0,237,43,109,171,95,175,172,244,170,95,95,158,243,250,46,48,23, + 209,77,188,116,233,146,151,191,191,63,82,82,82,170,244,132,211,255,113,201,100,50,72,36,18,92,188,120,17,0,170,180,95,232,137,137,137,89,15,93, + 213,101,0,128,187,187,123,64,208,7,129,23,59,244,111,143,223,194,119,231,103,100,100,180,162,101,53,116,8,33,196,221,221,125,44,95,200,251,176,113, + 11,143,30,224,184,21,167,255,56,191,196,220,137,52,110,214,188,8,64,169,65,175,195,26,247,62,4,0,134,97,70,14,29,58,148,185,127,255,62,62, + 252,240,67,236,218,181,203,228,182,99,199,142,197,158,61,123,48,116,232,80,102,193,130,5,38,203,59,84,140,150,88,214,60,100,9,9,137,183,17,185, + 251,39,147,57,72,46,46,206,0,128,151,47,179,202,151,181,107,103,190,176,51,167,81,158,186,121,253,106,64,231,238,189,4,169,153,121,224,52,10,200, + 11,95,149,175,47,201,203,4,213,200,33,144,58,162,78,109,59,220,184,116,82,169,82,202,79,153,211,156,57,180,57,166,14,246,5,40,135,97,115,126, + 193,177,13,51,202,159,160,187,14,15,69,244,222,181,22,231,248,85,134,207,231,35,46,46,174,212,84,52,139,101,217,106,107,114,1,250,168,163,26,37, + 37,165,40,41,125,227,58,172,85,32,132,56,187,186,186,110,118,116,116,20,27,115,164,8,33,206,206,206,206,155,157,156,156,196,150,54,29,86,38,36, + 36,164,243,164,73,147,162,126,248,225,7,217,220,185,115,163,66,66,66,130,107,226,108,137,68,162,134,137,137,137,229,197,74,205,189,42,149,74,4,5, + 5,89,84,188,148,82,122,148,16,242,212,205,205,237,130,159,159,159,221,227,199,143,177,123,247,110,1,159,207,247,208,255,126,20,22,22,130,101,89,188, + 124,249,82,13,224,227,234,154,206,20,10,69,108,108,108,108,155,193,131,7,179,241,241,241,96,89,86,103,87,64,0,90,111,217,130,187,159,127,142,30, + 207,158,65,174,82,65,44,22,227,175,191,254,82,149,148,148,196,154,210,147,72,36,219,146,146,146,154,139,197,98,168,84,42,112,186,200,8,225,241,120, + 93,237,237,237,215,161,210,159,180,139,139,139,203,228,217,223,123,107,53,26,109,70,202,227,44,19,178,229,100,103,103,227,232,209,163,232,212,169,19,122, + 244,232,129,180,180,52,60,121,242,4,193,193,193,229,219,220,190,125,27,55,111,222,68,147,38,38,91,224,203,225,88,53,154,248,52,132,128,47,0,95, + 192,215,189,242,249,101,147,238,189,126,153,190,230,97,53,80,181,90,173,43,23,195,48,32,132,64,34,209,61,183,176,44,203,213,171,87,47,35,39,39, + 199,13,0,43,145,72,160,213,106,205,62,180,112,148,122,9,94,93,76,159,243,197,15,46,225,225,167,113,250,244,75,48,12,3,55,55,55,48,12,131, + 164,164,36,48,12,3,79,79,79,48,12,131,180,180,52,189,147,152,11,185,241,239,157,22,128,196,222,1,78,66,17,8,33,40,76,75,129,80,32,128, + 88,34,134,99,195,198,229,15,250,175,94,189,146,71,68,68,36,240,249,252,54,250,58,91,176,214,209,250,111,226,218,191,104,95,139,160,148,110,171,182, + 233,208,8,3,59,119,238,188,101,244,232,209,189,214,172,89,3,27,27,27,100,100,100,148,255,33,10,133,66,212,175,95,31,57,57,57,216,186,117,43, + 158,63,127,30,3,96,178,165,70,101,100,100,92,126,116,43,49,59,104,68,103,167,230,157,189,237,83,19,159,119,2,112,177,204,201,250,101,244,236,129, + 19,130,222,239,0,129,144,143,212,71,38,243,109,223,57,44,203,178,132,16,124,248,161,101,109,254,163,70,141,66,108,108,44,204,53,51,114,250,136,86, + 137,28,197,165,53,142,72,154,100,218,204,177,152,54,115,108,185,51,97,73,211,11,0,184,187,255,110,114,29,167,81,173,57,246,251,214,73,109,59,4, + 120,182,107,222,16,87,174,223,194,111,91,94,7,25,182,175,95,138,239,183,199,160,190,171,3,84,138,98,252,185,255,167,23,42,69,201,26,115,199,171, + 46,72,195,16,2,11,235,84,190,222,167,204,121,226,243,249,104,209,162,133,201,136,86,78,78,78,105,117,209,44,160,236,30,41,213,40,42,46,69,105, + 201,187,113,180,8,33,173,187,118,237,122,106,223,190,125,78,46,46,46,72,79,79,175,224,104,17,66,90,119,233,210,229,212,190,125,251,156,92,93,93, + 145,154,154,106,113,89,17,61,6,78,150,77,102,102,38,22,47,94,44,77,79,79,63,26,18,18,50,216,82,103,139,97,24,40,20,10,60,120,240,192, + 210,195,90,92,188,212,206,206,110,199,158,61,123,236,94,189,122,5,150,101,241,224,193,131,10,189,14,245,211,47,191,252,34,24,54,108,216,207,0,204, + 118,107,211,104,52,171,198,142,29,59,49,45,45,205,193,197,197,5,25,25,25,16,10,133,160,148,130,4,5,161,219,211,167,80,105,181,144,72,36,72, + 72,72,192,182,109,219,138,21,10,197,42,99,90,132,16,161,84,42,245,18,8,4,248,232,163,143,42,172,219,185,115,39,222,107,199,182,155,212,71,84, + 164,129,88,145,41,25,240,39,203,178,100,242,220,21,205,58,118,15,110,241,240,238,149,199,89,153,207,47,84,115,250,106,165,82,9,31,31,31,92,187, + 118,13,167,79,159,70,207,158,61,209,163,71,15,220,185,115,7,39,79,158,196,205,155,55,65,8,129,147,147,147,62,253,194,108,14,134,178,88,131,151, + 105,217,85,162,87,149,231,5,2,1,20,66,203,58,247,197,199,199,227,218,181,107,229,165,101,88,150,213,132,132,132,128,82,74,147,146,146,96,107,107, + 75,199,143,31,175,229,241,120,154,180,52,203,242,131,109,108,108,224,229,229,85,225,193,71,63,117,235,214,13,215,175,95,7,195,48,224,241,120,112,113, + 113,193,133,11,23,204,126,240,41,165,229,206,160,80,32,128,64,168,115,52,13,191,219,10,133,34,229,244,233,211,109,197,98,241,95,222,222,222,125,149, + 74,37,7,107,29,45,43,255,143,152,42,241,96,210,209,162,148,62,5,208,155,16,50,230,240,225,195,171,214,173,91,231,60,104,208,32,228,230,230,194, + 211,211,19,110,110,110,56,118,236,24,142,31,63,254,74,171,213,206,161,148,86,9,253,16,66,122,155,170,181,65,41,165,238,238,238,251,20,69,69,83, + 253,123,248,34,102,239,185,112,55,55,183,201,117,235,214,157,53,126,225,144,9,129,67,219,35,225,102,18,46,159,140,67,102,202,43,140,239,54,223,172, + 102,229,100,120,123,123,251,137,82,169,84,8,35,93,137,43,247,58,52,212,212,106,181,90,165,82,137,223,127,255,221,34,103,107,247,238,221,144,203,229, + 208,86,106,95,53,212,164,28,37,60,190,8,238,245,125,160,82,21,131,227,222,44,122,99,168,169,255,209,121,44,20,194,229,213,43,92,185,82,165,133, + 195,40,134,79,210,149,53,1,128,82,42,39,132,124,180,118,217,220,99,211,195,86,216,247,236,220,6,95,255,184,19,42,213,118,48,44,3,137,72,0, + 255,14,93,192,66,129,205,17,243,242,74,10,114,63,162,149,134,226,169,162,105,174,133,133,2,90,142,195,233,179,230,107,158,26,187,239,90,173,22,60, + 30,15,143,30,61,42,53,214,219,144,101,117,205,156,250,39,117,115,154,148,227,8,95,32,70,125,79,63,40,21,69,239,228,30,185,184,184,204,59,116, + 232,144,147,190,84,194,157,59,119,64,8,41,247,102,244,235,75,75,75,113,247,238,93,253,80,83,85,188,29,115,223,35,71,71,199,45,63,252,240,131, + 44,51,51,19,89,89,89,144,72,36,204,151,95,126,41,138,137,137,217,12,160,133,37,118,202,229,242,103,166,242,39,229,114,121,93,98,51,59,186,0, + 0,32,0,73,68,65,84,177,88,204,175,180,175,187,151,151,87,66,229,38,68,99,118,230,231,231,95,249,226,139,47,252,251,247,239,143,121,243,230,229, + 56,56,56,216,110,222,188,153,199,178,44,153,62,125,186,246,229,203,151,69,63,253,244,147,221,225,195,135,145,151,151,87,197,49,52,242,249,44,36,132, + 76,234,220,185,243,206,19,39,78,72,189,188,188,80,80,80,0,74,41,118,236,216,129,233,211,167,67,44,22,35,33,33,1,239,189,247,94,73,73,73, + 201,164,202,185,147,6,154,132,16,66,57,142,195,87,95,125,85,94,156,84,95,172,212,86,66,176,109,118,35,89,232,79,249,178,49,95,255,20,2,0, + 90,141,70,251,240,238,149,199,59,54,124,125,70,32,16,156,53,101,103,25,139,66,67,67,55,7,7,7,75,108,108,108,144,147,147,131,11,23,46,224, + 210,165,75,184,124,249,50,148,74,37,156,156,156,224,224,224,128,140,140,12,196,199,199,151,2,88,100,78,83,40,227,163,177,183,190,231,239,235,104,86, + 249,188,128,15,62,239,117,207,195,234,174,39,0,116,239,222,29,29,59,118,4,160,235,69,157,156,156,156,161,80,40,136,129,211,159,6,232,28,114,15, + 15,15,205,174,93,187,104,117,154,28,199,85,113,166,187,117,235,86,254,80,216,177,99,71,176,44,139,91,183,110,25,77,77,49,212,20,105,213,236,229, + 159,54,226,230,238,157,176,175,91,15,19,162,254,6,195,48,144,231,188,194,225,241,195,32,181,179,67,253,46,175,91,178,229,114,121,63,66,72,115,0, + 217,148,210,23,198,52,223,21,86,205,119,95,75,235,63,149,202,57,90,134,84,219,4,64,41,253,141,16,242,231,167,159,126,26,209,186,117,235,79,87, + 175,94,77,4,2,1,150,44,89,66,211,211,211,127,5,48,143,154,25,218,164,26,237,95,255,62,120,113,202,184,176,161,100,246,154,241,93,175,71,223, + 141,111,217,217,11,45,59,123,225,122,204,125,108,88,184,123,151,86,173,253,42,35,35,35,165,26,41,69,239,46,222,149,147,225,157,98,207,68,59,213, + 180,215,33,199,113,251,118,239,222,61,243,253,247,223,103,174,94,189,90,37,39,139,150,13,187,195,113,28,78,157,58,5,149,74,133,95,127,253,149,227, + 56,206,116,29,45,208,35,107,215,68,140,251,53,242,136,80,40,32,184,116,246,0,242,115,205,71,233,4,2,62,126,217,113,80,37,16,240,31,26,91, + 175,82,169,82,163,163,163,93,251,105,181,124,134,97,170,56,80,166,216,183,111,159,154,227,184,100,115,219,80,74,47,18,194,31,252,221,188,143,119,7, + 127,240,169,107,231,206,93,249,181,93,92,65,8,193,203,204,151,72,184,123,85,253,231,129,159,51,139,75,10,45,26,130,231,227,31,254,46,207,201,2, + 128,65,211,215,149,231,103,1,192,224,241,95,32,168,83,115,16,75,66,79,101,104,181,90,78,163,209,64,38,147,65,163,209,24,45,241,96,103,103,39, + 145,203,229,165,84,87,136,209,252,19,51,240,206,239,145,86,171,245,205,205,205,69,113,113,49,46,93,186,68,151,45,91,150,149,149,149,85,158,180,169, + 86,171,125,115,114,114,80,84,84,132,139,23,47,210,136,136,136,172,236,236,108,115,73,157,85,200,201,201,249,108,238,220,185,81,139,23,47,150,74,36, + 18,70,173,86,107,66,67,67,75,21,10,133,101,197,216,0,164,167,167,87,41,230,170,167,73,147,38,137,137,137,137,77,181,90,173,225,24,136,2,185, + 92,238,213,185,115,103,75,154,16,67,183,111,223,142,131,7,15,118,40,40,40,24,155,156,156,188,19,64,7,30,143,135,91,183,110,61,144,203,229,163, + 223,127,255,253,29,185,185,185,87,0,132,90,98,47,165,244,4,33,228,35,95,95,223,237,223,124,243,141,77,143,30,61,120,238,238,238,104,223,190,61, + 18,18,18,16,21,21,165,222,180,105,83,113,73,73,201,199,148,82,115,205,218,20,0,209,104,52,16,10,133,229,147,72,36,130,64,32,64,97,41,197, + 39,63,62,41,213,64,82,186,106,201,164,40,10,144,23,169,79,94,189,124,145,122,133,16,114,54,61,61,221,232,16,60,77,154,52,17,202,229,242,54, + 110,110,110,60,66,200,26,149,74,53,97,198,140,25,117,150,47,95,14,111,111,111,188,122,245,10,50,153,12,94,94,94,200,202,202,194,213,171,87,181, + 37,37,37,91,0,44,165,148,154,109,142,204,203,42,64,61,87,143,10,145,79,74,41,168,6,80,107,181,208,170,40,148,68,13,62,95,13,129,192,72, + 69,221,74,232,29,205,92,55,55,112,119,239,226,242,229,203,160,148,154,140,170,249,248,248,84,171,201,48,12,180,90,109,21,71,235,202,149,43,96,89, + 22,93,187,118,197,205,155,55,203,35,90,213,229,37,242,0,200,115,179,81,148,241,28,98,169,4,142,13,27,235,154,16,249,60,40,178,50,193,106,84, + 80,23,84,76,109,161,148,222,51,174,102,197,202,63,15,242,6,67,240,24,110,156,7,96,50,33,100,103,96,96,224,49,74,41,31,64,48,165,244,220, + 219,24,149,145,145,113,195,221,221,125,129,107,61,135,136,1,99,187,194,187,141,39,180,26,45,46,28,191,133,95,151,31,222,147,150,154,54,158,90,208, + 166,196,113,220,153,46,237,188,25,24,212,234,118,119,119,231,222,164,215,97,126,126,254,226,57,115,230,96,222,188,121,53,238,117,104,106,155,59,15,94, + 78,110,237,235,92,111,240,128,110,253,64,24,170,84,154,110,62,36,4,229,149,75,5,2,254,195,171,183,211,91,25,219,46,43,43,171,223,132,9,19, + 78,241,120,60,139,147,152,1,221,32,179,153,153,153,189,170,219,142,82,245,5,66,136,215,209,61,91,63,63,113,112,123,63,142,211,54,33,0,88,158, + 224,177,90,165,250,75,81,90,176,186,114,36,203,20,43,39,7,32,116,237,73,108,156,55,24,51,34,246,226,231,175,62,193,130,31,119,99,197,188,80, + 44,91,247,15,124,29,250,17,70,140,153,192,81,194,24,29,30,198,24,44,203,158,216,186,117,235,184,79,62,249,164,188,211,130,190,121,65,63,169,213, + 234,82,142,227,176,101,203,22,14,192,9,115,122,21,239,17,161,230,242,165,44,189,71,5,5,5,31,7,4,4,236,0,32,162,148,62,202,205,205,253, + 140,82,90,62,52,84,81,81,209,199,157,59,119,222,65,41,21,17,66,170,172,183,132,178,82,15,193,233,233,233,71,191,252,242,75,81,104,104,104,233, + 181,107,215,134,212,52,33,222,12,172,153,102,197,106,155,16,203,190,191,229,195,234,16,66,150,119,232,208,193,112,80,233,7,0,170,29,224,220,136,238, + 41,66,72,243,175,190,250,234,115,177,88,28,84,82,82,210,12,0,100,50,89,130,66,161,56,83,90,90,186,186,236,119,203,156,134,82,42,149,38,104, + 52,154,22,206,206,206,186,30,181,101,206,22,0,252,113,93,123,157,82,77,141,19,169,143,31,63,222,192,193,193,161,47,33,100,4,165,212,167,176,176, + 80,241,229,151,95,94,58,120,240,96,158,167,167,231,128,224,224,96,226,232,232,136,107,215,174,209,236,236,236,3,0,22,90,210,211,154,227,184,228,149, + 43,107,54,118,97,117,15,85,42,149,234,197,241,227,199,107,247,127,249,146,199,113,28,6,15,30,92,190,206,152,3,244,240,225,67,40,20,138,106,139, + 57,230,229,229,161,67,135,14,21,30,80,245,83,114,114,50,28,29,29,43,28,199,220,51,150,74,165,164,98,169,12,1,19,38,65,98,239,160,75,244, + 39,4,146,90,118,104,210,179,175,46,141,128,123,163,161,56,173,88,121,167,152,138,104,145,127,74,247,103,189,184,133,161,69,119,119,247,15,197,50,209, + 52,207,102,110,173,210,159,188,188,95,152,95,178,43,35,35,99,43,165,180,202,183,199,82,205,154,20,44,253,79,9,171,254,39,106,190,174,163,165,5, + 165,90,80,142,130,82,14,28,167,213,13,120,77,57,80,173,150,16,130,243,138,146,124,147,149,193,43,219,73,8,113,168,93,187,246,82,74,105,127,150, + 101,25,195,31,106,195,247,101,145,172,19,89,89,89,95,87,142,188,254,39,94,207,253,251,247,27,117,254,67,66,66,58,139,68,162,205,10,133,98,138, + 57,39,107,196,136,17,218,154,216,233,238,238,126,70,38,147,25,77,40,46,46,46,78,73,79,79,239,107,204,206,119,133,165,154,250,104,168,185,222,107, + 198,52,223,164,215,97,117,154,13,26,52,16,169,84,170,182,0,154,1,176,7,144,163,86,171,79,100,101,101,101,18,66,218,1,248,170,108,183,111,41, + 165,215,45,209,124,87,24,249,30,73,106,215,174,189,157,97,152,106,7,60,7,0,141,70,163,204,201,201,25,103,248,64,80,65,147,16,86,44,16,92, + 5,195,212,53,88,143,234,222,131,210,180,226,210,255,99,239,188,227,162,56,183,62,254,123,102,123,163,45,125,105,10,136,130,98,33,54,236,189,247,40, + 198,216,99,98,114,53,106,212,68,52,26,107,212,196,94,146,168,177,27,187,24,21,187,162,38,209,88,177,160,216,104,130,128,176,212,5,182,239,206,243, + 254,65,9,34,101,49,201,123,239,205,221,239,231,179,238,204,236,204,111,206,204,226,238,217,243,156,231,28,77,75,148,124,230,151,106,18,66,36,182,82, + 105,90,203,160,6,148,207,231,131,50,12,213,113,249,44,33,4,12,165,16,153,13,12,64,160,214,106,241,32,241,197,35,165,82,89,101,29,180,255,198, + 255,239,255,107,154,255,84,44,138,104,253,221,164,165,165,29,0,80,117,134,246,91,80,85,229,119,43,255,191,20,229,164,255,45,239,67,137,211,84,101, + 147,232,127,42,165,142,82,37,219,127,5,96,81,97,206,218,96,97,25,135,127,59,150,56,88,85,28,119,3,22,20,41,173,13,73,73,73,58,0,215, + 74,30,21,207,119,27,64,255,55,14,250,55,65,41,213,0,248,235,170,125,82,106,214,22,55,255,253,139,228,168,154,16,162,56,127,243,118,149,117,182, + 202,241,151,182,77,177,98,229,175,226,63,194,209,178,98,197,138,21,43,86,42,131,82,170,254,119,219,96,197,202,159,129,0,232,86,217,11,181,9,9, + 18,66,42,213,168,142,154,244,173,154,86,77,171,166,85,211,170,105,213,180,106,254,243,52,255,137,84,55,235,240,63,34,71,203,170,105,213,180,106,90, + 53,173,154,86,77,171,230,255,182,230,127,51,21,103,28,2,181,156,117,104,197,138,21,43,86,172,88,177,98,165,106,170,138,104,213,220,155,164,4,153, + 91,80,144,115,157,166,59,229,94,77,238,203,189,154,220,119,174,211,116,167,204,45,232,47,79,190,253,111,128,16,34,38,132,188,207,227,241,206,187,187, + 187,171,8,33,149,182,222,249,111,135,16,98,75,8,25,74,8,89,68,8,25,76,8,145,252,149,250,157,8,225,190,71,200,164,49,132,36,143,33,36, + 249,61,66,38,117,34,228,31,231,252,47,156,170,8,253,245,204,200,211,11,167,42,66,43,125,125,166,194,241,198,249,176,117,203,38,123,200,43,123,189, + 182,16,66,108,92,93,93,183,184,185,185,37,185,186,186,190,112,117,117,221,78,8,177,251,43,180,173,88,177,98,197,202,155,84,229,100,1,37,17,173, + 147,39,79,118,4,112,25,64,167,190,125,251,94,169,184,147,220,167,241,132,160,192,6,159,47,89,240,37,113,118,114,16,27,141,102,67,202,203,244,134, + 243,151,44,59,44,247,105,188,58,231,197,131,173,181,53,138,16,66,56,28,206,112,161,80,216,15,127,204,150,138,213,233,116,145,102,179,249,128,165,179, + 136,220,220,220,126,225,112,56,117,106,115,110,179,217,156,252,234,213,171,170,171,150,86,3,33,100,152,183,183,247,246,142,29,59,74,90,182,108,9,129, + 64,128,121,243,230,205,0,176,198,82,13,185,220,223,198,32,20,77,227,10,4,221,169,81,31,76,65,1,70,24,195,154,116,23,249,58,221,234,156,156, + 184,130,154,85,0,66,200,28,0,99,81,60,29,125,43,165,180,118,69,118,42,48,54,132,24,141,230,226,191,9,62,23,102,59,59,187,203,95,126,249, + 37,183,95,191,126,216,186,117,107,187,45,91,182,124,68,8,185,8,224,56,165,52,238,207,156,11,0,92,129,137,109,218,181,91,55,102,198,12,142,230, + 151,95,176,110,251,246,181,80,169,0,224,187,218,232,16,66,8,159,143,161,78,78,188,126,148,34,132,0,132,0,119,149,217,236,41,131,193,124,192,146, + 90,108,213,104,191,143,215,167,227,239,173,173,70,126,28,157,43,236,31,212,62,63,238,210,92,0,189,43,190,110,210,138,198,80,142,87,63,13,141,78, + 1,176,234,109,109,45,177,87,226,236,236,124,255,216,177,99,158,45,91,182,228,2,192,237,219,183,71,247,235,215,175,11,33,36,152,82,170,250,51,250, + 127,194,46,17,151,97,38,9,120,188,238,102,179,185,49,0,112,56,156,7,122,163,241,188,137,101,191,179,180,38,155,21,43,86,254,185,212,228,139,252, + 39,83,49,71,171,252,122,105,244,224,114,223,190,125,201,201,147,39,41,254,168,37,3,0,144,185,6,54,108,212,40,104,198,153,163,187,188,242,115,242, + 180,27,86,237,142,46,228,240,139,234,7,5,8,54,172,89,97,63,105,234,244,105,50,215,192,27,133,25,143,31,213,194,32,111,177,88,28,177,114,229, + 202,224,206,157,59,243,92,92,92,144,145,145,129,216,216,216,224,168,168,168,65,187,118,237,154,65,8,25,66,41,173,169,34,60,0,4,92,220,189,221, + 69,42,119,132,217,104,132,162,73,72,89,161,189,231,81,231,96,50,24,192,26,141,8,234,55,8,64,113,113,188,160,160,32,203,154,2,190,105,183,162, + 81,163,70,123,150,46,93,202,215,233,116,184,113,227,6,46,93,186,196,166,167,167,47,183,84,67,230,90,191,51,35,150,30,24,62,242,67,187,129,253, + 124,121,222,174,206,0,36,120,146,104,106,115,250,92,84,139,163,7,118,252,75,230,90,127,120,97,198,211,75,213,233,200,229,242,214,132,144,175,75,43, + 68,19,66,190,173,91,183,238,87,229,247,169,216,55,143,82,10,46,151,155,81,80,80,48,60,43,43,43,186,162,166,209,12,238,222,189,197,126,196,220, + 73,239,115,126,251,237,55,105,195,134,13,117,0,176,98,197,10,44,90,180,72,112,246,236,217,62,187,119,239,238,67,8,89,75,41,61,110,233,117,87, + 6,31,248,98,204,140,25,28,89,82,18,100,247,238,97,164,74,197,253,6,248,2,181,112,180,8,33,190,110,110,188,195,51,166,143,11,242,243,111,205, + 231,243,157,138,155,120,235,179,234,39,39,71,15,93,254,205,150,112,66,200,187,148,82,139,42,214,146,226,136,218,66,0,34,0,115,1,204,83,42,149, + 1,102,179,25,110,110,110,243,8,33,63,3,88,226,236,236,76,149,74,229,44,74,105,149,189,122,22,78,85,132,170,226,232,220,87,196,175,87,131,119, + 198,224,21,57,211,107,122,111,247,211,182,254,100,201,252,117,105,191,3,64,111,127,127,27,191,64,233,44,153,109,99,185,42,245,194,172,222,254,254,63, + 158,142,179,204,209,174,96,55,1,0,133,66,177,98,247,238,221,94,173,90,181,42,251,27,111,214,172,25,103,197,138,21,30,159,125,246,217,90,0,227, + 44,212,171,239,236,236,124,214,108,54,235,178,179,179,235,151,110,119,105,58,164,141,163,141,180,171,50,183,224,151,172,135,63,95,177,80,171,165,136,207, + 63,114,124,207,58,247,102,173,66,25,153,147,11,180,169,105,40,52,26,186,93,186,122,189,211,71,147,190,152,90,242,30,85,223,135,201,138,21,43,255, + 116,170,244,69,254,155,41,27,166,41,185,176,55,16,10,5,225,243,191,156,69,242,178,243,52,186,130,66,189,73,171,213,48,60,86,123,63,54,33,147, + 225,114,242,166,79,153,98,51,107,206,151,225,0,70,86,118,124,69,8,33,222,77,155,54,189,25,17,17,225,34,151,203,145,159,159,143,236,236,108,220, + 188,121,19,148,82,12,25,50,68,216,170,69,139,144,185,243,230,253,78,8,9,181,196,217,146,202,157,176,162,93,113,47,218,175,146,178,75,207,131,45, + 195,250,149,237,179,232,101,113,183,12,145,72,84,214,144,248,45,8,237,218,181,43,31,0,62,248,224,3,85,65,65,193,50,0,123,41,165,22,117,90, + 149,185,214,239,236,228,174,136,252,97,211,10,113,99,255,0,24,140,38,188,120,149,6,46,207,30,158,158,124,140,27,217,157,215,161,141,220,233,235,197, + 91,78,74,157,235,15,46,82,62,61,91,149,150,189,189,253,174,3,7,14,224,224,193,131,0,128,167,79,159,34,32,32,64,90,147,13,49,49,49,126, + 3,6,12,216,15,160,94,77,251,86,44,140,47,20,10,209,182,109,91,52,108,216,16,199,142,29,235,4,224,79,57,90,0,160,249,229,23,200,238,221, + 3,174,92,169,245,177,132,16,223,119,222,241,185,126,234,228,30,167,147,167,98,177,106,213,118,196,197,21,7,218,252,252,252,240,254,136,97,188,7,15, + 174,53,26,58,244,253,107,132,144,118,148,210,167,22,200,46,252,241,199,31,231,212,173,91,23,67,135,14,29,214,168,81,35,55,91,91,91,108,222,188, + 25,238,238,238,126,122,189,254,249,177,99,199,20,175,94,189,194,148,41,83,0,96,70,85,66,157,122,118,154,43,236,31,212,190,193,59,99,32,179,117, + 199,143,251,14,224,201,157,93,237,117,134,216,185,203,38,123,140,210,80,225,88,207,0,155,240,58,205,59,58,214,107,52,0,62,239,68,59,105,205,191, + 38,204,155,228,183,156,43,210,238,154,191,50,45,251,141,107,30,118,152,19,172,122,44,143,57,143,108,74,231,179,37,14,86,217,7,146,153,98,64,135, + 14,29,202,222,184,164,164,36,232,116,58,4,5,5,49,122,189,222,162,154,88,132,144,250,61,122,244,248,237,212,169,83,142,245,235,215,127,173,37,140, + 155,163,125,207,43,17,107,167,124,189,238,167,64,151,134,131,243,50,31,29,125,80,131,86,203,182,173,223,185,112,58,98,143,140,20,166,64,96,159,5, + 176,217,136,223,191,13,68,34,199,240,79,166,115,59,119,237,226,209,189,247,187,23,8,33,93,41,165,183,44,177,209,138,21,43,255,76,170,242,69,254, + 11,56,89,33,33,254,100,233,66,153,163,85,206,139,124,13,150,178,77,220,92,28,197,107,87,238,188,197,49,232,245,18,123,91,131,157,173,29,133,141, + 45,199,96,52,20,122,7,212,229,179,148,173,180,5,73,197,25,9,132,16,34,22,139,35,142,31,63,238,194,227,241,192,178,44,156,157,157,145,152,152, + 136,188,188,60,20,20,20,32,46,54,22,117,189,189,176,32,124,150,251,148,89,225,17,132,144,230,229,135,17,43,155,229,96,54,190,222,55,154,148,180, + 96,169,72,233,182,138,175,213,98,230,68,98,114,114,50,100,50,25,130,131,131,101,87,175,94,253,181,42,39,171,162,166,92,238,111,195,149,137,15,126, + 255,195,60,177,193,24,131,71,241,57,104,80,183,61,92,29,189,145,150,163,199,245,155,199,17,115,127,47,252,61,188,49,249,147,46,162,229,43,14,31, + 112,112,240,245,206,205,77,80,85,166,169,82,169,100,190,190,190,240,246,46,238,123,102,54,155,241,232,209,35,152,205,230,178,245,242,207,59,143,68,193, + 164,122,129,49,163,71,35,59,59,91,86,153,38,143,3,211,244,143,222,231,138,121,128,64,42,215,23,22,22,150,69,7,13,6,3,238,222,189,139,94, + 189,122,181,236,219,183,111,10,128,42,191,96,45,189,159,6,224,219,117,59,118,172,31,153,159,207,0,192,86,66,88,3,165,223,90,162,73,8,33,46, + 46,188,35,103,78,239,118,226,48,143,33,183,251,6,55,111,190,128,193,80,108,111,118,118,38,62,157,164,2,159,103,131,99,199,126,114,12,10,106,119, + 164,100,232,140,173,74,179,4,209,233,211,167,241,233,167,159,226,209,163,71,138,210,30,109,98,177,24,43,87,174,228,4,5,5,41,164,82,41,206,156, + 57,131,140,140,140,55,254,200,202,107,94,62,123,121,73,126,220,165,185,175,200,153,94,63,238,59,128,15,71,12,135,27,141,255,213,206,159,44,233,209, + 191,237,87,148,227,213,79,106,211,196,33,32,184,63,248,2,25,38,127,177,8,79,99,78,56,168,11,238,79,34,230,20,47,148,244,254,43,175,73,15, + 13,53,175,223,119,237,157,243,222,183,124,20,239,76,188,1,224,62,202,28,45,63,46,97,204,118,37,199,224,249,243,231,136,139,139,3,151,203,133,70, + 163,129,201,100,170,212,78,15,15,143,137,38,147,233,43,0,48,24,12,59,221,221,221,199,239,217,179,199,177,188,163,93,26,201,202,201,83,229,94,187, + 245,240,201,244,137,67,59,253,114,61,38,197,190,233,160,228,188,123,63,231,87,241,30,137,196,2,193,145,51,71,127,146,25,19,162,32,13,234,4,158, + 44,0,102,99,42,212,185,69,40,136,75,135,238,135,141,104,54,233,51,156,248,249,176,172,81,227,230,135,8,33,1,148,210,178,254,71,127,199,172,38, + 171,166,85,211,170,249,159,169,9,84,237,139,160,184,16,174,107,201,114,54,138,83,102,156,0,100,161,184,29,152,43,0,61,0,65,185,99,42,174,151, + 223,183,226,122,249,229,236,146,101,151,146,231,91,0,114,170,179,155,82,154,14,224,237,154,74,19,194,168,76,44,43,20,56,59,235,198,135,117,11,62, + 119,225,246,93,169,163,29,183,71,231,119,58,222,124,16,247,59,3,198,72,8,99,81,222,7,135,195,25,190,118,237,218,198,182,182,182,96,89,22,118, + 118,118,80,42,149,208,235,245,200,207,207,135,174,64,5,67,129,10,247,82,146,208,182,99,39,188,219,171,71,208,79,63,31,31,14,96,127,117,186,138, + 38,33,101,145,172,69,117,28,203,182,47,76,201,43,115,186,190,9,9,0,95,38,67,247,233,225,150,152,90,41,148,210,104,129,64,112,122,200,144,33, + 189,103,206,156,201,164,167,167,159,33,132,180,165,148,214,56,108,106,16,138,166,253,107,90,63,7,7,25,197,161,243,199,209,33,100,4,36,2,14,178, + 85,6,16,2,196,62,140,0,33,114,220,127,154,142,246,205,108,209,163,103,144,236,231,195,177,51,241,71,126,80,69,72,110,110,46,50,51,51,97,52, + 26,97,52,26,49,116,216,48,236,222,181,11,69,69,69,208,104,52,208,235,245,48,155,205,96,24,6,231,35,15,33,37,33,22,109,66,67,129,42,66, + 178,59,163,41,143,16,114,253,201,147,39,136,141,141,197,203,151,47,33,18,137,224,230,230,134,69,139,22,65,167,211,65,175,215,243,46,95,190,236,141, + 226,246,34,127,138,56,96,75,130,201,52,183,247,209,163,46,87,143,30,101,127,63,126,252,165,168,176,112,179,37,199,242,249,24,186,226,219,79,26,72, + 165,82,188,76,94,139,192,64,62,102,124,230,136,101,223,100,1,0,166,124,234,137,22,205,157,160,202,59,12,39,151,57,88,191,126,170,255,216,177,171, + 71,3,216,89,131,244,220,227,199,143,191,27,16,16,224,17,29,29,77,4,2,1,196,98,49,196,98,49,68,34,17,50,51,51,145,152,152,72,87,172, + 88,145,138,226,161,197,42,41,25,30,236,61,189,183,251,233,39,119,118,181,247,224,36,220,123,119,114,187,164,251,215,163,11,206,157,191,186,216,164,21, + 165,228,189,188,48,203,183,69,180,211,164,207,23,98,227,138,249,120,114,227,151,28,87,111,213,119,98,162,219,217,170,251,155,154,157,58,45,228,78,154, + 23,102,154,56,246,93,251,19,174,215,38,158,226,18,229,171,172,59,43,145,24,173,17,214,11,25,85,223,143,209,71,69,69,137,59,116,232,0,173,182, + 56,237,137,195,225,96,207,158,61,172,201,100,170,116,56,218,96,48,124,149,154,154,234,174,209,104,208,171,87,175,41,43,87,174,148,150,246,251,51,155, + 139,11,209,151,70,178,150,172,217,125,118,218,87,223,93,58,187,255,27,197,146,240,241,157,70,78,254,250,18,170,232,35,201,101,152,73,39,142,110,119, + 19,57,24,33,150,247,128,54,67,131,39,91,62,132,90,165,69,139,37,11,1,8,160,55,50,216,220,127,40,120,142,10,204,159,48,94,241,229,230,31, + 63,1,176,182,134,247,200,138,21,43,255,123,184,18,66,34,1,32,60,60,124,206,178,101,203,30,18,66,34,41,165,253,0,160,116,185,116,31,0,168, + 108,189,116,223,138,235,21,151,103,207,158,221,104,249,242,229,75,67,67,67,247,95,187,118,45,1,53,56,90,213,229,104,49,64,177,7,89,254,185,60, + 44,203,254,242,60,62,73,221,179,123,107,143,19,151,31,220,30,55,174,111,215,176,1,237,123,36,164,100,62,246,247,113,115,138,121,120,207,150,101,217, + 95,44,185,75,66,161,176,95,151,46,93,184,185,185,185,144,72,36,80,42,149,72,77,77,133,193,96,128,54,63,15,186,252,60,104,243,114,97,200,207, + 69,220,237,155,104,226,239,39,44,73,150,175,150,210,168,75,197,72,85,249,200,150,192,198,6,66,27,27,144,90,14,27,18,66,6,58,56,56,92,39, + 132,204,5,0,131,193,48,105,214,172,89,89,44,203,226,235,175,191,182,149,201,100,135,8,33,194,154,116,108,156,57,253,66,155,5,51,143,19,239,163, + 93,211,49,168,239,219,7,137,25,26,100,21,24,144,153,103,64,139,14,27,80,167,233,66,120,53,91,134,216,23,57,80,120,4,48,224,10,171,109,254, + 156,146,146,242,218,250,254,125,251,160,86,171,225,239,239,143,17,35,70,96,214,172,89,24,49,98,4,20,10,5,70,134,13,192,252,249,243,241,234,213, + 171,154,76,213,213,175,95,95,231,227,227,163,243,241,241,209,25,12,6,20,22,22,34,47,175,184,63,47,143,199,163,145,145,145,2,137,68,18,74,8, + 121,183,38,177,242,184,186,186,206,118,119,119,191,239,234,234,250,80,36,18,157,186,75,200,99,93,157,58,174,109,7,13,34,13,195,194,56,201,18,9, + 185,2,200,106,20,2,224,36,231,245,237,220,165,183,32,47,119,59,128,226,32,213,248,113,206,248,237,74,35,92,253,181,57,62,157,228,15,194,136,64, + 24,1,212,69,81,104,213,50,148,111,111,79,170,253,91,42,73,124,191,219,182,109,91,197,228,201,147,137,80,40,196,148,41,83,12,19,38,76,120,54, + 98,196,136,103,23,47,94,52,251,248,248,192,203,203,139,120,121,121,185,3,184,91,114,76,181,216,250,147,37,58,67,236,175,246,1,210,4,51,156,218, + 20,26,133,67,231,175,76,203,94,252,93,252,170,196,39,106,191,39,55,126,201,126,22,115,130,77,188,117,57,43,237,89,129,223,226,239,226,87,205,222, + 152,90,233,127,234,43,87,192,70,68,94,49,168,139,212,220,65,253,59,171,39,126,48,188,190,92,214,104,15,60,122,52,173,227,237,57,114,254,210,245, + 134,9,159,76,51,108,221,182,157,22,20,20,64,165,82,97,253,250,245,166,19,39,78,164,154,205,230,105,85,152,200,1,0,163,209,136,137,19,39,74, + 109,109,109,145,146,146,82,22,17,5,128,116,101,246,131,171,183,98,30,79,255,120,88,199,34,157,78,119,246,242,237,216,134,1,62,158,132,208,42,39, + 162,8,120,188,238,205,91,181,226,80,154,7,194,245,70,220,174,21,80,189,202,129,42,51,7,28,158,20,38,8,97,100,5,176,111,210,18,79,111,69, + 195,195,217,149,43,228,241,172,173,179,172,88,249,31,165,58,95,164,20,74,105,191,229,203,151,47,173,238,245,114,207,250,10,235,101,142,84,69,39,172, + 252,50,0,44,95,190,124,41,165,180,223,181,107,215,246,161,22,237,157,42,171,167,85,163,215,193,209,234,151,205,156,53,23,118,182,98,187,86,33,1, + 110,63,159,185,124,231,151,107,183,99,235,120,58,57,83,163,222,225,219,213,27,61,137,90,99,105,50,120,144,147,147,19,12,6,3,158,63,127,142,151, + 47,95,194,96,48,192,84,84,4,93,94,30,180,185,185,48,23,21,128,111,54,67,163,204,132,163,68,4,88,216,191,173,178,225,194,242,67,133,34,91, + 91,8,109,108,193,240,120,149,14,43,86,161,249,78,203,150,45,15,198,196,196,180,234,214,173,219,98,66,136,29,165,244,69,106,106,106,215,121,243,230, + 233,92,93,93,49,113,226,196,6,0,198,212,164,37,20,232,131,124,220,26,160,190,223,24,212,241,234,130,188,34,35,148,42,35,50,243,12,216,188,33, + 20,71,182,182,196,111,71,218,35,230,108,119,228,25,221,32,83,12,4,53,235,27,85,167,121,254,252,121,44,90,180,8,139,23,47,198,215,95,127,141, + 197,139,23,35,53,53,21,193,193,193,72,78,78,198,233,211,167,145,158,158,14,39,39,39,220,188,121,19,107,214,172,193,111,191,253,86,227,117,87,55, + 225,147,203,229,18,127,127,127,18,17,17,33,145,72,36,107,9,169,222,121,41,143,201,100,26,155,62,104,80,227,12,185,188,97,72,72,72,239,41,83, + 166,248,181,109,219,182,236,117,95,95,95,111,177,88,252,138,16,178,149,16,210,172,58,45,22,8,113,118,14,134,94,247,24,0,64,8,15,132,136,208, + 165,123,44,218,182,191,13,131,145,15,134,8,193,48,34,152,76,217,112,112,80,128,82,18,92,131,137,243,148,74,101,192,133,11,23,152,196,196,68,136, + 68,34,0,72,90,176,96,193,198,85,171,86,61,114,116,116,52,71,70,70,226,231,159,127,70,191,126,253,56,19,38,76,8,240,242,242,218,84,211,117, + 207,95,151,246,251,222,213,167,223,227,25,29,154,137,196,117,234,162,72,54,112,82,39,103,41,0,156,142,139,43,112,241,86,45,47,42,184,159,108,239, + 89,248,77,77,137,240,148,206,103,239,60,123,124,125,239,209,51,249,153,25,185,188,144,198,141,52,203,22,125,206,175,83,183,222,183,243,103,125,236,150, + 170,18,229,117,159,114,250,113,196,153,155,133,163,198,125,104,250,224,163,201,218,211,103,206,31,101,89,182,113,85,51,14,89,150,69,122,122,58,30,62, + 124,136,248,248,120,40,149,74,100,101,101,161,160,160,160,108,184,81,82,160,58,185,113,199,137,123,82,177,88,210,170,113,128,247,141,232,71,153,82,177, + 88,18,80,215,187,62,33,11,43,253,28,49,155,205,141,69,18,49,0,130,188,152,95,80,152,91,136,194,188,66,20,228,20,66,103,224,64,171,99,160, + 209,51,240,233,216,3,133,69,90,20,102,231,131,53,155,155,214,116,63,173,88,177,242,191,11,33,36,50,60,60,124,142,133,187,91,60,188,89,209,241, + 10,15,15,159,67,8,137,156,61,123,118,35,88,144,211,92,98,219,71,229,159,75,169,177,188,67,86,214,211,66,91,231,134,67,62,251,226,171,211,251, + 182,125,231,172,215,107,146,157,28,100,102,27,137,208,97,194,196,175,81,80,152,59,184,208,194,114,4,0,144,155,155,139,132,132,4,136,197,98,240,121, + 60,152,53,26,152,53,69,208,228,102,131,49,232,192,55,155,33,151,136,225,163,112,67,29,87,55,139,52,159,71,157,43,75,124,47,63,92,184,162,101, + 16,4,82,25,4,54,50,252,43,242,50,0,128,207,231,3,243,22,215,168,73,8,113,242,240,240,56,190,119,239,94,190,82,169,196,221,187,119,239,81, + 74,243,9,33,54,0,216,216,216,216,11,49,49,49,253,2,2,2,0,192,191,38,61,85,22,99,54,154,40,82,94,37,33,241,101,52,228,118,190,224, + 73,234,35,51,207,0,161,216,23,70,221,31,163,143,90,213,11,104,12,150,77,140,212,235,245,48,153,76,48,153,76,208,235,245,248,232,163,143,112,245, + 218,53,236,255,249,34,18,226,158,162,65,93,55,140,30,61,10,45,91,182,196,181,107,111,244,184,125,141,177,33,196,248,101,7,112,87,247,102,32,144, + 57,234,90,207,58,123,163,138,123,131,58,117,234,48,231,207,159,119,238,222,189,251,38,66,136,158,82,122,190,58,109,66,200,170,126,253,250,213,123,90, + 84,132,135,143,31,163,219,130,5,0,128,147,39,203,242,5,161,215,235,49,125,250,116,193,163,71,143,62,184,125,251,246,7,132,144,213,148,210,202,147, + 205,41,112,242,228,239,248,248,227,71,80,42,139,243,181,15,236,251,195,47,77,76,48,160,87,223,226,17,45,123,123,123,172,94,93,147,143,85,140,217, + 108,198,150,45,91,202,134,11,1,128,203,229,182,157,62,125,250,144,202,246,175,87,175,30,191,38,205,233,195,60,69,119,95,136,39,217,213,171,211,200, + 214,169,9,178,141,209,193,209,169,233,159,78,31,230,185,118,245,161,151,90,49,209,237,36,230,20,47,174,72,187,203,18,27,227,78,175,215,219,215,25, + 183,235,149,82,245,229,228,15,223,119,180,181,119,41,218,186,113,153,3,195,97,232,241,219,134,188,70,126,142,246,3,91,175,43,252,248,179,121,209,122, + 83,202,100,164,28,127,90,93,137,11,179,217,140,180,180,52,40,149,74,36,39,39,35,43,171,120,248,53,43,43,235,141,153,171,181,129,16,2,77,114, + 50,94,28,221,138,58,163,70,161,197,226,69,48,179,92,104,212,102,172,110,211,21,185,249,26,232,88,2,197,59,109,240,225,169,95,193,80,51,176,185, + 86,149,61,172,88,177,242,15,194,146,242,14,165,14,209,178,101,203,44,254,145,111,41,229,157,173,101,203,150,61,92,182,108,153,197,231,170,177,142,22, + 106,152,82,169,82,62,138,119,244,105,146,86,164,41,148,184,184,58,233,101,34,33,155,175,42,226,68,63,184,103,40,76,127,254,164,22,215,17,27,19, + 19,19,156,150,150,134,228,23,47,96,210,20,129,209,233,65,181,106,116,107,215,6,34,0,34,134,128,207,26,192,229,8,80,80,168,2,128,216,154,68, + 205,70,99,217,114,169,147,69,8,129,192,198,6,2,169,20,2,153,77,217,107,64,245,17,155,82,132,66,225,222,67,135,14,185,123,120,120,96,209,162, + 69,240,244,244,12,108,220,184,177,186,125,251,246,98,87,87,87,52,108,216,16,109,218,180,193,233,211,167,1,160,198,154,82,70,147,232,254,147,36,180, + 205,202,185,134,95,47,255,0,189,70,135,144,142,63,192,192,173,3,231,70,11,193,62,223,3,245,171,99,0,0,137,91,127,188,76,78,2,225,8,30, + 86,167,89,254,58,74,151,239,221,187,135,125,199,174,192,221,39,8,201,207,30,227,241,165,11,184,234,236,8,159,160,134,101,195,64,85,218,104,6,119, + 201,119,101,229,29,132,57,57,57,66,185,92,174,3,138,239,157,187,187,59,56,28,14,24,134,129,64,32,128,159,159,31,239,234,213,171,78,237,218,181, + 219,69,8,121,143,82,122,165,26,249,247,103,206,156,137,60,30,15,232,219,23,252,248,120,24,12,6,132,134,134,162,121,243,230,0,128,208,208,80,112, + 185,92,52,105,210,4,10,133,2,223,125,247,221,251,168,98,86,31,67,112,215,100,202,14,244,243,243,43,115,180,118,237,86,34,250,118,119,16,8,176, + 126,227,31,213,28,188,189,189,241,42,61,30,132,208,152,106,111,0,176,216,205,205,109,158,187,187,187,223,170,85,171,56,34,145,8,159,124,242,137,111, + 97,97,97,29,0,88,190,124,57,102,207,158,13,0,152,63,127,62,22,44,88,0,157,78,87,101,195,219,221,107,154,40,50,115,216,15,92,221,60,6, + 119,118,170,211,184,75,207,110,240,13,232,130,46,61,147,1,96,169,156,155,20,182,98,110,240,81,39,47,249,246,115,103,206,207,111,215,177,203,151,225, + 19,29,150,44,223,156,91,99,206,99,254,139,157,5,79,4,195,215,108,216,180,123,205,87,179,167,138,146,149,250,220,212,92,90,40,19,114,101,254,174, + 68,246,233,23,139,19,210,210,226,103,32,229,76,141,51,45,89,150,69,124,124,124,89,78,159,86,171,69,81,81,17,82,82,82,202,254,102,52,82,219, + 94,147,199,245,111,90,164,209,168,111,60,120,150,60,119,202,200,208,34,141,70,253,44,49,249,41,165,235,42,245,198,24,134,121,160,46,80,119,83,192, + 215,133,179,0,0,32,0,73,68,65,84,231,105,161,188,251,4,158,93,125,96,52,17,232,77,102,40,179,11,160,51,1,102,134,135,70,97,163,97,38, + 92,100,165,165,130,225,112,238,213,100,175,21,43,86,254,177,212,88,222,129,16,18,25,26,26,186,31,248,35,234,84,186,12,64,7,160,186,84,30,101, + 121,103,170,116,56,177,170,243,84,208,173,150,74,134,12,79,150,36,200,215,92,222,161,68,128,52,109,236,163,88,49,255,125,79,214,100,106,144,153,149, + 97,226,114,133,60,47,59,77,122,77,39,47,143,78,167,139,188,112,225,194,160,238,221,187,11,159,61,184,7,125,126,62,244,249,121,224,177,38,200,197, + 205,193,24,116,32,122,61,60,2,89,104,11,196,184,114,53,198,168,211,233,34,107,210,45,117,180,24,14,231,245,188,44,153,12,66,27,91,8,101,178, + 138,67,139,213,142,29,18,66,36,3,6,12,232,218,186,117,107,80,74,177,101,203,22,24,12,6,129,193,96,128,94,175,135,193,96,128,74,165,194,238, + 221,187,241,253,247,223,95,5,176,163,38,27,89,147,254,194,217,243,81,45,199,143,236,199,59,21,185,26,38,189,25,26,226,137,162,34,35,10,245,18, + 152,29,71,1,25,39,193,225,138,16,218,196,23,199,14,71,24,96,210,93,172,73,23,120,221,225,210,235,245,72,73,78,194,203,184,167,144,169,94,193, + 217,86,2,117,252,83,132,140,30,243,86,209,9,47,47,47,176,44,139,206,157,59,67,171,213,194,104,52,150,57,90,2,129,0,129,129,129,188,155,55, + 111,202,91,180,104,177,191,164,246,217,239,85,105,101,103,103,227,196,137,19,104,221,186,53,58,118,236,136,212,212,84,196,199,199,163,111,223,190,101,251, + 220,187,119,15,209,209,209,240,247,175,62,72,152,149,99,60,245,50,229,238,176,129,3,7,242,175,95,191,14,74,41,2,2,108,97,107,35,5,97,132, + 8,10,114,1,80,252,27,160,83,167,78,80,169,226,77,185,185,244,84,117,154,148,210,189,132,144,159,245,122,253,243,14,29,58,40,226,226,226,240,217, + 103,159,113,15,28,56,0,0,8,15,15,71,120,248,235,147,41,52,154,170,135,238,27,52,14,252,220,215,228,208,81,36,174,83,215,214,169,9,124,3, + 186,0,0,186,247,27,15,223,122,222,80,101,221,175,171,213,36,13,230,115,115,29,238,175,79,125,36,238,27,60,78,155,121,249,25,0,75,10,0,83, + 205,179,3,25,201,188,81,7,127,62,126,122,98,159,126,3,120,70,179,201,20,236,195,179,63,116,244,100,102,234,139,228,117,72,62,83,234,88,86,251, + 203,194,108,54,155,85,42,21,164,82,41,98,98,98,116,125,251,246,21,50,12,131,231,207,159,151,57,90,46,78,242,134,109,91,4,7,46,89,179,251, + 172,84,40,20,246,236,212,60,232,209,179,23,47,41,37,73,85,233,234,141,198,243,15,238,222,235,236,172,168,199,137,191,124,29,142,237,251,64,167,99, + 160,209,179,208,153,0,19,135,15,247,102,173,96,239,31,4,10,224,214,245,171,70,157,209,88,101,73,19,43,86,172,252,243,169,198,23,81,150,115,140, + 114,0,36,45,91,182,44,171,92,180,73,9,224,30,128,166,37,251,41,43,28,167,68,241,236,193,22,229,116,148,64,153,195,85,126,89,95,97,159,26, + 127,0,86,140,104,149,56,94,175,247,58,172,102,74,37,156,156,156,92,66,66,154,251,255,184,237,32,40,165,120,18,189,18,185,153,143,49,111,233,239, + 254,158,158,158,29,95,190,124,121,165,38,35,0,192,108,54,31,216,190,125,251,140,86,239,132,132,212,245,244,196,189,164,68,240,169,25,124,179,25,140, + 65,7,174,89,15,207,70,102,48,140,12,105,105,249,88,190,247,96,140,217,108,62,80,147,110,96,159,1,88,244,50,31,132,16,172,10,13,134,192,70, + 6,190,84,134,127,29,143,42,115,174,34,23,205,134,64,38,131,127,171,154,11,194,83,74,213,54,54,54,183,31,60,120,208,34,56,56,24,51,102,204, + 64,82,82,18,88,150,69,70,70,134,54,61,61,61,85,169,84,38,1,56,10,224,71,75,42,143,243,117,218,181,145,71,118,77,14,109,215,209,105,224, + 224,239,241,243,225,25,200,203,87,65,109,18,163,72,107,66,145,142,3,185,99,99,180,108,210,4,105,169,153,120,120,253,108,33,87,167,94,89,243,93, + 253,3,66,8,162,163,163,225,167,176,193,211,95,175,192,73,194,67,83,133,27,20,109,219,149,213,151,170,14,30,7,166,247,223,127,191,172,50,124,143, + 30,61,18,71,141,26,229,62,125,250,116,108,219,182,13,87,175,94,205,145,201,100,122,134,97,184,92,46,23,2,129,0,3,6,12,200,141,138,138,98, + 88,150,149,162,56,250,84,149,163,101,212,235,245,8,12,12,196,173,91,183,112,225,194,5,116,233,210,5,29,59,118,196,253,251,247,113,238,220,57,68, + 71,71,131,16,2,71,71,71,24,139,157,103,99,21,90,48,24,112,232,155,111,183,207,89,179,230,251,70,35,71,142,196,145,35,251,49,126,92,3,16, + 70,8,66,132,24,208,191,1,22,45,190,133,86,173,58,193,201,137,135,53,171,143,37,104,52,230,221,22,220,198,37,231,206,157,83,104,181,90,228,229, + 229,81,153,76,70,178,179,139,103,180,86,22,209,82,171,213,162,170,132,30,220,137,93,153,87,64,115,105,97,244,224,28,83,116,227,46,61,83,208,189, + 223,56,156,143,220,129,168,179,23,32,231,38,37,66,90,112,58,43,49,75,149,94,20,176,41,232,157,9,156,151,69,103,55,77,25,232,192,113,119,103, + 15,133,127,159,159,87,149,54,165,148,18,66,72,206,163,61,199,143,82,12,104,19,218,170,94,176,183,187,32,55,43,147,30,62,118,58,198,144,120,228, + 4,74,28,172,154,186,44,80,74,23,133,135,135,127,85,178,188,115,238,220,185,19,150,47,95,238,252,234,213,171,178,28,173,204,172,156,168,54,125,63, + 53,103,231,229,235,183,175,249,98,168,88,36,20,204,93,190,253,178,145,131,235,85,233,154,88,246,187,176,207,230,77,125,246,36,218,163,142,88,128,99, + 95,204,199,189,115,151,96,100,248,248,248,194,13,232,12,102,228,101,101,227,226,7,147,32,115,117,192,247,151,143,100,176,44,251,67,117,182,90,177,98, + 229,159,77,53,190,72,101,53,246,50,44,216,175,166,245,191,156,18,39,171,44,47,198,162,41,120,89,89,89,153,191,252,114,3,151,35,151,224,74,228, + 18,60,140,190,135,180,84,61,82,51,180,176,181,181,173,50,130,65,8,233,86,126,157,82,74,213,106,245,144,185,243,190,122,37,18,75,208,161,107,87, + 184,57,187,64,194,231,129,99,98,193,33,60,20,102,217,227,233,125,53,102,109,223,147,89,168,86,15,169,248,37,81,81,179,220,118,16,66,32,180,181, + 129,64,102,3,161,141,237,107,195,136,34,91,91,136,108,108,193,21,8,42,75,154,127,67,179,176,176,240,221,161,67,135,230,230,231,231,99,194,132,9, + 184,114,229,74,244,217,179,103,109,239,221,187,39,206,204,204,172,71,41,237,65,41,221,92,149,147,85,81,51,39,39,174,128,154,116,195,151,125,53,77, + 163,53,57,98,216,152,253,144,50,41,48,153,89,80,0,10,185,0,109,187,45,134,82,223,6,7,54,125,173,102,13,218,145,229,107,104,85,212,164,148, + 82,87,87,87,84,120,29,23,46,92,192,176,161,239,162,231,224,65,112,174,235,7,151,110,125,208,115,194,199,216,180,105,19,24,134,129,147,147,19,80, + 46,194,81,94,115,103,52,229,237,189,79,201,222,251,148,236,184,67,185,0,70,239,217,179,231,155,166,77,155,94,186,122,245,234,74,0,195,141,70,163, + 254,206,157,59,169,10,133,162,232,167,159,126,66,199,142,29,237,221,221,221,143,152,76,38,25,165,116,72,53,239,209,151,83,167,78,213,60,123,246,12, + 82,169,20,38,147,9,87,175,94,197,247,223,127,143,85,171,86,33,58,58,26,142,142,142,240,247,247,135,78,167,195,173,91,183,52,0,190,172,234,126, + 82,74,89,165,210,244,238,250,245,203,179,251,245,107,143,237,219,55,194,205,173,13,120,92,55,112,121,206,144,202,2,177,245,199,111,208,187,119,8,142, + 31,59,152,147,149,109,122,183,98,21,247,42,236,212,222,184,113,3,155,54,109,194,208,161,67,83,135,13,27,102,206,207,47,46,118,27,30,30,14,74, + 41,40,165,88,80,146,99,166,211,233,94,11,83,151,215,156,240,197,131,212,207,151,196,44,202,120,149,218,250,202,165,223,223,143,58,123,1,9,207,162, + 16,117,246,2,126,141,186,22,158,241,42,181,117,72,203,250,252,33,19,38,127,190,43,226,8,71,102,235,142,93,17,71,56,35,62,157,246,117,243,158, + 93,170,188,246,242,183,1,0,45,204,204,152,189,116,229,134,66,147,65,203,172,88,247,93,154,70,153,254,37,74,167,98,86,17,205,42,175,169,86,171, + 55,107,52,26,133,70,163,81,104,181,218,47,147,146,146,58,204,152,49,67,105,54,155,203,162,165,153,15,143,253,30,251,235,142,165,46,78,14,226,54, + 45,26,53,88,189,249,240,229,228,148,140,159,74,107,104,85,241,30,105,11,53,218,119,7,13,25,85,148,151,171,67,232,180,112,176,34,25,116,102,192, + 72,57,48,17,46,30,44,89,13,177,220,6,123,19,239,168,243,141,134,119,203,215,208,170,225,218,223,26,171,166,85,211,170,249,159,169,249,79,129,82, + 186,165,116,216,16,40,137,104,213,52,165,210,195,195,163,195,192,1,221,208,169,223,92,80,74,241,248,206,183,200,85,62,129,135,155,16,241,201,170,80, + 0,87,106,97,64,50,33,164,245,212,47,231,70,12,235,209,53,40,184,110,93,97,157,58,62,144,186,184,32,43,75,137,223,174,63,50,126,189,239,80, + 76,137,147,101,73,11,30,176,44,91,156,228,14,160,235,212,89,32,28,14,80,82,198,161,244,139,177,110,139,54,32,92,46,204,148,133,78,167,171,49, + 73,139,82,250,146,16,242,238,200,145,35,47,70,70,70,50,61,123,246,108,118,244,232,209,183,207,12,6,80,152,241,244,146,204,181,126,191,175,103,79, + 60,208,186,203,32,219,128,70,205,249,205,235,112,96,48,18,164,165,190,64,100,196,77,195,163,27,103,85,212,164,29,94,164,172,190,5,143,193,96,72, + 174,87,175,158,235,166,77,155,202,146,225,205,102,51,178,178,178,240,251,239,191,163,113,139,86,8,26,247,1,148,74,37,214,175,95,15,111,111,111,244, + 239,223,31,57,57,57,48,153,76,22,221,87,74,169,25,192,217,146,7,0,128,97,24,210,174,93,59,51,203,178,147,230,207,159,255,221,147,39,79,164, + 107,214,172,25,78,8,249,138,82,250,70,237,8,127,127,127,129,86,171,109,230,238,238,206,37,132,172,213,235,245,227,102,207,158,237,182,116,233,82,52, + 104,208,0,89,89,89,144,74,165,8,8,8,128,82,169,196,205,155,55,205,106,181,122,19,128,69,148,82,101,69,189,10,246,61,39,132,180,158,50,229, + 95,17,223,44,159,24,160,213,117,18,200,229,237,64,169,9,74,101,18,10,84,87,13,139,23,237,136,203,200,52,14,161,148,62,179,228,154,1,204,159, + 60,121,50,80,210,130,39,62,62,254,110,80,80,80,0,80,121,68,203,18,86,31,122,169,5,176,111,197,103,109,62,83,101,221,15,144,115,147,18,91, + 7,179,235,87,31,122,169,93,248,153,253,146,220,164,43,79,95,22,157,221,180,43,226,8,103,204,224,119,205,158,178,103,225,34,23,122,184,75,255,234, + 117,41,165,180,89,179,102,94,132,228,248,102,102,63,185,61,126,194,196,48,59,190,230,84,83,207,108,127,198,59,68,20,29,29,157,88,83,52,171,10, + 221,167,132,144,14,179,103,207,62,75,41,125,45,55,33,51,43,39,42,180,223,100,154,151,151,127,55,243,209,177,106,171,194,151,104,221,36,132,116,13, + 110,28,114,228,155,165,203,93,59,77,157,193,125,122,233,50,96,54,226,197,149,203,48,11,245,236,234,107,231,51,242,13,134,193,212,90,21,222,138,149, + 255,105,44,41,239,240,159,10,33,196,29,64,95,20,71,178,250,2,136,166,148,70,3,22,20,44,5,128,151,47,95,94,241,247,243,60,247,244,105,135, + 30,222,158,206,0,128,248,196,52,164,102,232,206,89,58,108,88,158,18,103,171,249,158,19,167,134,11,133,194,126,164,164,132,3,125,139,166,210,38,147, + 233,101,221,186,117,171,120,117,106,165,91,205,102,115,101,225,198,202,236,188,76,8,25,229,239,239,191,252,197,139,23,17,148,210,34,75,142,171,142,194, + 140,167,151,228,114,127,191,107,23,142,76,187,126,57,178,27,53,233,27,3,0,225,10,106,213,84,186,176,176,112,226,39,159,124,178,153,199,227,121,163, + 36,231,172,52,7,203,108,54,115,12,6,131,200,108,54,115,0,16,134,97,76,60,30,79,27,17,17,97,50,153,76,201,58,157,110,226,219,218,79,41, + 61,65,41,253,129,82,122,211,201,201,41,236,248,241,227,61,123,245,234,37,58,113,226,196,12,0,51,43,238,127,234,212,169,58,14,14,14,61,8,33, + 67,41,165,129,5,5,5,186,185,115,231,254,30,17,17,145,239,227,227,211,171,111,223,190,68,46,151,227,214,173,91,52,59,59,251,48,128,47,41,165, + 241,181,176,39,158,16,210,116,226,199,63,188,39,151,111,238,75,41,154,130,130,16,6,15,242,243,217,83,106,181,249,167,18,135,209,82,61,19,94,143, + 164,45,142,137,137,217,1,128,87,89,142,86,173,144,20,30,215,106,146,222,37,50,245,209,213,235,94,106,1,96,254,154,188,124,0,91,167,12,150,179, + 177,119,182,126,235,97,251,236,139,117,71,115,182,91,34,23,18,18,226,199,48,204,112,0,193,46,194,188,122,206,130,124,51,33,180,51,33,140,19,128, + 251,13,27,54,140,4,240,242,109,76,165,197,237,138,124,42,110,207,124,120,236,119,84,61,60,92,149,214,77,66,72,189,207,102,78,159,36,224,241,186, + 195,108,110,178,248,231,67,212,218,84,218,138,21,43,255,32,250,82,74,183,148,22,42,45,25,62,180,220,209,2,128,184,248,151,61,1,160,126,253,250, + 244,217,179,103,160,148,254,41,143,179,196,145,218,143,26,170,190,215,68,86,86,86,243,63,115,124,77,80,74,247,1,216,247,87,106,150,56,82,139,74, + 30,111,5,165,244,1,128,86,127,153,81,150,159,119,108,233,114,118,118,246,172,113,227,198,245,176,177,177,249,53,47,47,111,99,101,251,247,232,209,227, + 133,193,96,184,128,226,47,124,123,0,57,70,163,241,140,94,175,207,32,132,52,95,189,122,117,105,229,251,197,148,210,219,111,105,19,11,96,111,201,227, + 47,133,82,186,87,161,80,76,119,116,116,244,215,106,181,2,173,86,203,47,255,27,64,44,22,87,27,117,43,143,189,13,217,201,231,230,58,218,219,144, + 55,28,41,185,7,142,104,138,98,26,200,61,112,196,82,189,232,232,232,248,102,205,154,237,97,24,166,46,165,212,21,160,118,148,66,73,41,205,226,114, + 185,169,143,30,61,178,168,7,231,255,7,37,142,212,202,146,135,21,43,86,172,252,227,168,182,142,86,109,120,250,244,233,127,93,72,207,202,223,3,165, + 244,17,33,68,158,155,91,117,57,130,164,164,36,29,128,107,37,143,138,199,223,6,80,195,0,217,191,159,180,180,180,144,191,66,103,194,23,15,82,1, + 76,107,94,73,107,231,249,235,115,10,0,124,222,121,64,237,52,239,222,189,155,12,192,162,161,96,43,86,172,88,177,242,247,96,73,29,45,43,86,222, + 138,170,170,141,91,177,98,197,138,21,43,255,43,84,87,71,139,0,168,116,230,0,173,69,103,238,183,153,125,80,147,190,85,211,170,105,213,180,106,90, + 53,173,154,86,205,127,158,230,255,2,164,124,147,233,210,89,121,127,199,3,64,55,171,166,85,211,170,105,213,180,106,90,53,173,154,86,205,255,165,7, + 128,143,74,151,173,67,135,86,172,88,249,159,229,240,225,195,22,53,21,125,239,139,173,253,100,50,135,121,133,170,252,229,251,87,142,63,90,186,125,232, + 208,161,22,207,104,181,98,197,202,63,151,202,134,14,75,23,170,116,180,252,252,188,26,50,102,182,45,165,12,135,50,212,72,84,154,3,113,57,57,175, + 149,29,240,246,246,182,231,49,232,79,40,149,18,194,154,89,14,115,53,62,62,229,81,85,154,149,24,38,112,112,112,152,204,231,243,187,233,245,122,79, + 134,97,94,234,116,186,11,106,181,122,35,173,80,184,240,223,73,131,6,13,70,92,190,124,217,190,93,187,118,58,177,88,108,210,104,52,220,51,103,206, + 8,123,247,238,157,247,252,249,243,183,154,145,232,225,225,209,229,240,225,195,190,49,49,49,198,85,171,86,233,135,15,31,206,15,13,13,229,79,152,48, + 33,33,53,53,53,170,54,90,132,144,134,132,144,221,132,16,14,203,178,163,105,241,140,196,191,28,66,8,195,48,204,68,66,200,96,74,169,31,33,36, + 158,82,122,148,101,217,42,11,183,214,160,247,46,128,62,12,195,132,0,0,203,178,209,0,78,81,74,45,158,121,247,255,169,41,145,72,154,1,128,90, + 173,190,251,87,105,18,66,154,1,0,165,244,173,52,9,33,227,196,98,241,135,0,160,209,104,126,164,148,214,216,14,234,13,54,7,209,144,133,143,1, + 0,209,243,3,1,0,181,90,159,24,107,249,4,153,205,65,180,50,189,90,105,84,128,16,210,103,228,200,145,75,127,250,233,167,249,148,210,99,111,171, + 83,29,110,110,94,27,87,173,219,162,152,54,249,131,229,40,238,8,81,45,141,8,233,46,224,112,6,232,205,230,95,31,1,135,0,112,229,114,249,8, + 129,64,208,65,175,215,187,115,185,220,116,189,94,255,75,126,126,254,62,74,105,149,29,16,44,230,49,113,48,168,225,70,216,63,250,188,81,6,58,190, + 4,175,16,72,115,255,180,254,159,132,16,194,160,184,222,142,17,192,54,250,22,229,60,56,28,206,52,133,66,49,88,165,82,169,57,28,14,45,150,37, + 197,255,160,184,198,31,203,178,153,217,217,217,163,107,210,146,249,144,6,2,41,217,109,54,66,99,210,209,79,10,147,233,99,27,111,210,134,2,163,41, + 80,151,225,48,206,44,203,166,3,136,98,76,56,81,144,74,159,215,164,249,239,128,16,226,131,226,251,90,167,100,19,15,128,43,128,251,0,166,81,74, + 11,255,61,150,253,239,65,107,74,134,47,87,238,190,83,223,190,125,175,248,249,121,53,28,58,104,200,210,143,39,126,66,56,28,6,49,15,31,114,223, + 31,61,174,135,92,46,247,144,233,116,65,32,132,85,139,68,49,70,163,33,245,208,190,159,108,2,27,52,48,155,205,44,54,109,254,161,183,159,159,215, + 28,75,156,45,66,72,125,55,55,183,221,225,225,225,110,3,6,12,224,184,185,185,33,41,41,201,126,255,254,253,13,54,108,216,16,70,8,25,77,139, + 107,249,212,10,66,72,123,55,57,211,195,70,76,186,162,192,140,2,35,46,190,210,224,28,165,244,215,218,106,149,162,86,171,63,77,75,75,107,213,162, + 69,11,186,109,219,54,50,118,236,88,250,244,233,83,162,209,104,118,226,45,75,63,72,165,210,239,154,52,105,18,48,118,236,216,248,184,184,184,62,7, + 15,30,60,53,102,204,24,63,169,84,250,12,64,253,90,202,237,200,206,206,110,170,209,104,224,233,233,185,13,192,59,111,99,83,117,16,66,8,135,195, + 57,234,225,225,65,191,253,246,219,99,77,155,54,117,205,201,201,49,125,254,249,231,221,174,95,191,222,155,16,50,192,82,103,139,16,226,64,8,217,236, + 230,230,230,180,124,249,242,231,205,155,55,191,47,20,10,5,207,158,61,147,76,159,62,253,51,134,97,194,40,165,19,41,181,252,11,162,84,211,195,195, + 195,105,233,210,165,73,33,33,33,49,124,62,159,255,236,217,51,233,172,89,179,166,189,173,38,195,48,155,66,67,67,29,230,207,159,31,219,160,65,131, + 107,28,14,71,240,242,229,75,102,193,130,5,147,57,28,206,48,150,101,63,126,27,59,93,93,93,29,22,44,88,16,27,26,26,122,157,207,231,243,159, + 60,121,194,132,135,135,79,174,141,157,142,142,142,157,29,29,29,183,188,122,245,138,11,0,238,238,238,45,253,253,253,55,148,239,105,89,18,194,134,209, + 104,44,208,106,181,35,179,179,179,43,45,132,59,118,246,250,254,0,176,193,80,186,94,252,92,211,58,176,233,132,37,215,29,226,78,40,0,140,152,177, + 114,80,241,115,241,246,85,69,0,151,203,101,119,187,19,26,157,110,121,201,24,66,200,192,46,93,186,44,136,138,138,250,161,83,167,78,179,246,236,217, + 227,146,146,146,242,13,33,196,235,189,247,222,27,123,241,226,197,101,74,165,242,176,165,122,53,33,224,11,133,132,33,16,139,36,182,150,236,207,99,152, + 126,215,6,14,252,240,199,39,79,66,54,60,126,236,91,228,238,222,106,202,148,41,174,67,134,12,97,188,188,188,240,252,249,115,199,61,123,246,4,253, + 248,227,143,131,9,33,83,41,165,47,222,218,184,199,196,161,40,15,141,117,122,132,80,10,251,210,205,132,32,79,104,64,180,244,49,121,240,31,224,108, + 125,181,99,199,142,249,207,159,63,199,178,101,203,0,160,210,114,48,85,65,8,153,62,120,240,224,190,17,17,17,226,67,135,14,137,91,180,104,1,55, + 55,55,0,197,245,3,75,135,104,124,125,125,45,210,163,44,86,173,61,53,254,157,152,156,211,248,110,200,171,101,18,47,98,106,63,40,96,112,191,177, + 33,176,115,150,64,36,227,34,47,91,21,252,36,58,165,231,165,131,207,191,145,249,144,229,69,201,248,138,214,162,38,223,255,7,142,142,142,219,18,18, + 18,58,75,165,210,215,182,199,199,199,55,11,8,8,200,71,113,91,52,139,33,132,248,56,59,59,239,101,89,86,151,157,157,253,1,0,216,216,216,252, + 36,149,74,29,210,211,211,231,252,93,63,100,74,169,232,139,252,157,231,250,171,33,132,132,80,74,163,203,23,46,165,21,155,74,151,239,152,205,152,217, + 182,31,79,252,132,12,31,241,222,171,231,241,9,44,151,39,24,113,230,236,89,73,195,134,13,25,221,198,141,48,41,149,48,126,246,89,155,11,23,46, + 24,135,141,24,165,225,113,200,14,63,223,186,146,3,251,246,187,69,28,57,220,22,64,181,142,22,33,68,224,230,230,182,251,242,229,203,30,190,190,190, + 200,203,203,67,82,82,18,138,138,138,16,22,22,198,107,219,182,173,199,208,161,67,119,19,66,218,89,26,217,34,132,184,214,243,228,70,174,250,42,172, + 126,239,30,109,165,30,94,254,160,175,180,72,137,123,220,34,242,242,245,41,1,246,204,211,231,249,180,31,165,212,162,98,165,229,201,202,202,250,98,252, + 248,241,71,58,119,238,236,44,20,10,161,80,40,72,120,120,120,102,90,90,218,194,218,106,149,179,23,34,145,8,12,195,152,1,148,61,87,108,15,100, + 33,158,14,14,14,112,112,112,0,0,143,183,181,169,228,252,140,189,189,253,70,27,27,155,161,42,149,74,195,48,12,37,132,80,169,84,42,118,112,112, + 184,23,251,248,169,66,167,211,213,91,185,246,199,117,93,218,55,181,61,127,254,60,134,12,25,66,207,157,59,55,17,128,69,125,234,8,33,155,7,15, + 30,172,158,55,111,158,246,121,124,146,71,236,211,120,34,21,9,88,39,39,39,222,205,155,55,185,107,214,172,17,45,88,176,96,51,128,161,181,176,123, + 243,123,239,189,103,152,57,115,102,250,147,231,9,46,15,98,159,83,153,136,103,114,114,114,228,92,191,126,157,125,27,77,134,97,54,125,241,197,23,170, + 137,19,39,230,102,231,228,187,229,170,10,169,144,199,49,186,185,185,113,143,29,59,166,219,187,119,47,243,225,135,31,110,2,48,204,82,77,0,155,6, + 12,24,80,16,30,30,158,247,44,62,209,237,193,163,167,144,8,121,70,87,87,23,206,173,91,183,12,43,87,174,100,150,44,89,98,145,157,82,169,116, + 215,193,131,7,185,199,142,21,127,246,253,254,251,239,140,159,159,159,164,252,62,26,173,14,12,1,178,178,178,36,161,161,161,187,0,120,86,212,9,89, + 248,24,99,103,3,159,126,250,105,173,154,196,3,64,136,251,20,68,215,80,254,150,221,20,68,71,204,88,57,136,203,229,178,31,126,248,225,27,221,3, + 180,90,45,1,48,32,164,22,206,86,159,62,125,190,60,121,242,164,255,158,61,123,86,239,221,187,87,15,0,34,145,200,105,255,254,253,203,194,194,194, + 16,22,22,54,15,192,95,230,104,153,169,217,0,0,66,145,80,248,248,241,99,18,24,24,88,109,65,101,3,203,222,254,241,201,147,230,255,10,12,108, + 145,195,178,245,248,189,123,23,78,159,62,61,75,165,82,33,41,41,9,6,131,1,99,199,142,229,116,234,212,73,17,22,22,182,158,16,242,46,165,212, + 80,147,29,28,14,103,165,135,135,199,71,249,249,249,133,165,81,157,160,186,54,220,14,205,76,194,38,245,140,2,62,199,196,239,255,25,75,206,109,36, + 69,129,190,248,13,0,248,106,40,249,192,159,118,180,236,188,136,175,153,135,37,206,158,226,46,202,23,154,69,133,47,104,149,206,18,33,228,93,169,84, + 58,168,168,168,232,112,201,151,115,253,126,253,250,225,250,245,235,0,208,22,192,70,66,72,23,134,97,222,103,89,118,43,173,166,25,61,33,100,202,192, + 129,3,187,71,68,68,216,0,192,225,195,135,97,52,26,225,231,231,7,62,159,15,129,64,0,30,143,87,214,29,196,66,220,157,157,157,224,100,199,131, + 131,92,218,123,214,247,3,185,222,13,109,145,105,126,136,28,154,7,19,213,129,239,40,69,131,158,246,8,233,209,133,57,177,41,102,206,137,239,98,155, + 147,58,164,63,77,122,189,91,194,191,19,134,97,132,247,239,223,135,66,161,120,109,59,135,195,1,128,14,111,33,57,47,62,62,62,244,206,157,59,232, + 220,185,243,188,198,141,27,247,186,114,229,138,91,118,118,54,58,119,238,188,30,192,223,234,104,1,175,251,34,127,247,185,254,98,66,80,92,160,180,172, + 112,41,74,154,74,151,245,58,44,185,176,78,0,64,41,195,225,112,24,36,196,39,25,59,119,238,58,38,57,57,89,214,170,85,43,134,199,227,161,40, + 42,10,218,91,183,32,147,201,48,120,240,96,222,47,191,252,98,107,43,179,157,144,152,144,88,192,225,48,160,148,169,49,231,193,193,193,97,242,156,57, + 115,220,2,2,2,96,50,153,202,42,154,155,76,38,164,164,164,64,38,147,97,244,232,209,46,18,137,100,178,37,87,71,8,169,83,223,207,37,250,242, + 169,205,239,76,255,184,143,180,190,228,60,164,41,83,33,59,252,47,4,165,157,65,248,160,86,210,115,223,205,11,241,87,200,163,9,33,117,106,86,124, + 29,173,86,251,91,76,76,204,132,43,87,174,176,0,112,233,210,37,26,27,27,59,241,207,252,10,101,89,22,233,233,233,96,89,150,83,178,94,250,252, + 182,146,127,26,66,8,99,107,107,187,169,87,175,94,239,189,120,241,66,124,250,244,105,199,228,228,100,167,196,196,68,231,250,245,235,115,151,45,91,118, + 82,171,51,112,140,102,170,55,153,141,5,233,15,31,198,231,102,100,68,111,223,190,93,67,8,25,108,225,57,222,117,119,119,119,156,61,123,54,8,79, + 210,50,176,97,227,0,14,79,108,199,240,4,118,26,141,214,156,144,144,144,50,123,246,236,186,77,155,54,85,148,12,175,89,164,169,80,40,156,102,206, + 156,9,174,208,166,89,147,166,33,254,2,161,212,230,216,241,72,223,86,173,90,117,138,143,143,79,11,15,15,119,111,209,162,69,173,52,91,180,104,225, + 240,225,135,31,154,68,18,219,208,186,126,190,13,59,182,107,211,189,85,171,86,125,184,92,174,73,169,84,190,24,61,122,180,123,255,254,253,93,107,163, + 233,226,226,226,16,30,30,110,242,242,241,235,217,179,123,143,214,124,177,141,29,87,32,181,87,171,181,230,39,79,158,188,152,59,119,174,123,179,102,205, + 92,44,209,84,171,213,60,39,39,39,4,7,7,163,161,159,31,242,243,243,17,17,17,129,29,59,118,96,235,214,173,216,183,111,31,154,183,235,1,27, + 27,27,164,165,165,65,165,82,241,44,177,179,20,163,209,248,167,63,232,216,77,65,116,131,254,163,1,159,124,242,73,218,135,31,126,248,74,44,22,179, + 21,31,114,185,220,60,114,228,200,140,209,179,214,14,40,29,90,172,10,66,200,192,174,93,187,222,63,117,234,84,220,158,61,123,208,176,97,67,244,236, + 217,83,0,0,147,39,79,22,132,133,133,225,224,193,131,56,124,248,240,163,250,245,235,95,37,132,12,180,196,206,209,163,71,183,27,54,108,216,175,195, + 134,13,187,59,124,248,240,45,19,39,78,124,237,155,43,61,237,229,109,189,94,143,166,33,45,36,139,183,221,24,89,147,94,44,176,103,203,227,199,59, + 150,63,124,248,98,94,195,134,246,62,137,137,242,157,43,87,58,149,54,233,54,26,141,72,73,73,129,131,131,3,70,142,28,233,36,20,10,107,28,238, + 34,132,172,25,56,112,224,184,228,228,100,217,143,63,254,232,126,247,238,93,69,122,122,186,251,197,11,103,157,63,159,49,217,198,78,38,16,164,41,139, + 29,213,196,52,72,31,39,160,29,165,176,47,63,156,248,54,16,5,17,75,188,200,6,255,118,246,79,103,30,108,54,60,60,50,196,201,193,93,56,187, + 202,253,9,105,242,237,183,223,30,58,113,226,196,136,118,237,218,29,33,132,136,43,217,71,212,188,121,243,136,131,7,15,142,107,223,190,253,111,132,144, + 224,170,244,60,61,61,7,255,252,243,207,142,165,235,78,78,78,16,137,68,111,56,89,124,62,31,12,99,81,251,222,215,248,122,255,8,174,60,72,135, + 152,220,83,56,248,237,125,124,219,251,9,187,180,77,162,110,227,232,199,56,119,240,62,50,113,31,125,254,229,143,17,115,155,118,147,152,177,164,214,39, + 248,27,81,42,149,239,119,232,208,225,80,159,62,125,116,119,238,220,129,82,169,132,135,71,217,111,237,90,255,112,2,32,151,72,36,240,242,242,66,64, + 64,192,136,95,126,249,197,205,104,52,34,49,49,17,153,153,153,209,127,161,233,85,82,222,23,249,47,227,36,169,208,76,186,148,178,191,202,146,222,66, + 151,1,128,18,82,116,63,38,134,199,17,8,70,253,180,119,175,144,207,231,227,197,139,23,120,244,232,17,212,23,47,66,115,237,26,50,50,50,80,88, + 88,8,87,87,87,108,222,182,77,170,55,211,241,79,158,62,229,80,230,143,124,3,90,197,20,79,161,80,216,109,200,144,33,85,58,100,105,105,105,232, + 211,167,15,143,195,225,188,49,173,180,162,38,33,132,40,156,201,137,139,71,22,187,187,11,30,1,207,167,3,5,209,0,213,1,38,61,144,250,0,56, + 185,16,62,133,143,201,217,197,99,220,60,36,220,19,165,99,250,53,217,89,238,28,126,129,129,129,91,71,141,26,197,0,64,151,46,93,72,96,96,224, + 22,66,136,95,85,199,212,164,169,86,171,175,223,190,125,27,97,97,97,142,254,254,254,23,194,194,194,28,31,61,122,4,181,90,125,253,109,53,75,112, + 108,212,168,81,182,88,44,222,71,8,169,241,3,182,188,166,189,189,253,198,62,125,250,12,221,187,119,47,31,0,46,95,190,140,19,39,78,224,225,195, + 135,120,246,236,25,27,18,18,226,188,118,235,161,77,27,127,216,181,102,80,219,166,138,78,45,67,130,100,133,185,133,174,174,174,109,41,165,126,149,105, + 86,66,159,133,11,23,62,138,141,123,97,199,225,241,185,60,46,87,104,107,43,117,117,176,145,122,202,37,34,15,33,67,100,106,181,250,213,190,125,251, + 88,0,125,44,213,92,188,120,113,66,236,243,23,246,12,135,199,229,243,248,252,196,196,56,183,93,59,183,249,0,0,31,148,175,82,169,50,118,236,216, + 97,168,141,230,252,249,243,99,114,242,10,29,184,92,46,143,207,225,10,242,243,243,249,249,249,249,124,169,88,236,44,17,10,5,58,157,46,117,221,186, + 117,154,218,104,46,92,184,240,209,147,184,100,57,67,8,135,16,134,107,107,35,117,116,180,147,56,59,203,196,78,18,46,71,160,82,169,82,119,239,222, + 109,145,166,193,96,224,103,100,100,32,54,54,22,94,45,90,224,252,249,243,240,246,246,70,88,88,24,222,123,239,61,136,197,98,116,9,109,140,217,179, + 103,35,46,46,14,6,131,65,88,153,102,89,158,84,5,100,50,89,100,231,206,157,123,87,115,61,175,29,91,209,206,16,119,66,55,232,63,26,80,222, + 193,42,255,186,92,46,223,48,96,192,128,142,37,203,230,202,162,93,21,53,251,244,233,243,229,197,139,23,253,119,239,222,61,96,244,232,209,191,237,222, + 189,27,173,91,183,70,108,108,44,234,214,173,139,157,59,119,226,189,247,222,251,109,253,250,245,3,238,220,185,211,212,215,215,119,78,77,154,195,135,15, + 159,212,172,89,179,168,87,175,94,133,230,228,228,4,71,68,68,140,31,60,120,112,194,136,17,35,186,150,238,99,54,26,247,158,60,126,4,125,7,12, + 65,131,70,193,155,198,206,217,211,184,58,77,74,41,125,8,108,217,145,158,174,220,171,213,170,195,120,60,137,228,198,13,249,225,31,126,112,42,29,206, + 5,128,212,212,84,244,239,223,159,199,231,243,219,87,103,39,33,228,219,65,131,6,133,69,68,68,56,0,197,81,157,107,215,174,225,193,131,7,72,74, + 74,66,94,94,30,186,78,44,196,39,203,138,181,63,89,70,209,99,50,149,86,167,105,9,18,31,226,230,104,203,189,58,126,93,131,201,31,109,106,200, + 149,201,121,248,105,214,51,100,37,234,202,162,133,21,236,36,161,161,161,123,134,13,27,70,244,122,61,244,122,189,158,82,170,169,76,91,161,80,136,154, + 54,109,138,137,19,39,50,182,182,182,235,171,178,179,168,168,72,119,234,212,41,140,30,61,26,83,167,78,69,189,122,245,224,224,224,0,30,143,135,93, + 123,14,56,189,55,254,227,250,239,180,235,208,180,225,59,173,155,20,232,56,45,248,18,249,135,21,63,227,171,187,246,66,151,59,136,73,252,29,27,6, + 188,100,111,238,84,23,126,254,254,138,199,79,174,100,60,156,51,108,75,12,253,189,77,214,158,105,201,200,48,198,162,125,152,15,124,155,57,124,38,243, + 38,129,53,105,254,25,106,171,217,184,113,227,118,55,111,222,20,118,232,208,1,47,94,188,0,143,87,246,123,170,236,255,219,219,216,185,112,225,66,161, + 86,171,197,189,123,247,48,102,204,152,84,131,193,240,217,159,177,211,82,202,251,34,255,77,80,74,211,105,185,102,210,229,115,182,42,70,180,22,2,128, + 145,197,137,81,99,198,171,35,35,35,37,2,129,0,47,94,188,64,122,122,58,118,237,216,97,238,226,226,82,208,211,195,67,181,107,199,14,170,215,235, + 65,41,69,96,96,32,134,14,29,42,126,55,108,68,38,81,105,14,212,100,16,33,196,189,116,124,125,252,248,241,111,188,254,249,231,159,195,214,214,22, + 132,16,55,11,174,111,216,148,133,131,60,29,124,237,51,232,171,93,57,224,136,0,174,13,192,181,5,68,118,128,208,6,16,72,160,187,19,149,195,208, + 158,73,67,218,127,224,129,218,13,245,64,161,80,204,59,118,236,152,243,157,59,119,168,74,165,66,122,122,58,93,186,116,169,179,66,161,152,87,243,209, + 149,147,150,150,182,56,60,60,60,35,40,40,200,246,228,201,147,94,65,65,65,182,225,225,225,25,105,105,105,139,223,86,19,0,248,124,62,231,225,195, + 135,242,37,75,150,188,7,224,118,112,112,112,182,167,167,231,237,146,164,201,106,177,177,177,41,115,178,128,226,232,26,151,203,5,143,199,131,66,161,208, + 231,228,228,152,219,191,227,39,14,180,99,140,10,33,95,44,23,139,60,109,108,237,90,101,103,103,223,39,132,88,212,159,144,16,210,172,101,203,150,60, + 51,229,177,69,56,31,4,0,0,32,0,73,68,65,84,159,140,233,170,152,60,174,179,203,247,75,62,244,94,183,248,35,143,111,23,76,8,92,58,103, + 76,39,134,101,181,117,235,214,117,43,77,104,175,9,134,97,66,154,55,111,206,101,193,195,163,39,137,25,73,41,47,11,150,47,154,231,98,50,153,8, + 0,52,108,22,210,211,217,217,185,67,96,96,96,115,75,107,194,136,197,226,102,13,26,52,224,50,28,30,9,109,221,194,65,38,19,187,150,190,102,107, + 111,223,166,77,187,118,61,24,74,243,221,221,221,93,196,98,113,179,90,92,59,151,5,31,77,155,53,225,57,59,217,203,122,118,110,91,47,180,77,104, + 253,198,173,90,135,246,31,60,164,7,49,153,84,126,126,126,46,165,73,242,213,161,211,233,68,123,247,238,197,146,37,75,208,196,199,7,30,30,30,112, + 113,113,193,181,107,215,112,243,230,77,56,56,56,32,51,51,19,43,87,174,196,209,163,71,97,48,24,108,44,177,179,20,74,169,205,253,251,247,255,213, + 187,119,239,174,53,239,93,57,38,147,137,169,232,96,149,82,84,84,212,32,42,42,106,250,208,161,67,67,1,64,44,22,179,165,73,242,85,113,234,212, + 169,61,165,145,172,105,211,166,181,91,187,118,237,111,143,31,63,134,76,38,195,205,155,55,49,126,252,248,223,214,175,95,223,238,227,143,63,198,142,29, + 59,144,144,144,176,173,58,189,225,195,135,47,152,48,97,194,186,43,87,174,48,174,174,174,112,112,112,192,160,65,131,176,109,219,54,174,201,100,218,62, + 108,216,176,187,195,134,13,187,107,78,57,247,229,161,173,75,175,197,220,191,139,73,83,102,10,244,38,99,141,77,47,41,165,84,35,147,21,152,58,116, + 200,57,104,52,170,135,243,249,18,187,187,119,229,39,182,111,47,115,182,102,207,158,13,59,59,59,160,56,129,185,74,60,61,61,63,58,122,244,104,217, + 231,161,163,163,35,4,2,1,248,124,62,120,60,30,56,28,14,46,108,146,226,135,217,197,254,197,15,179,9,206,109,36,127,170,55,171,212,147,4,59, + 184,10,238,254,107,103,163,166,193,93,29,113,109,255,43,44,237,123,231,229,205,131,202,233,218,76,172,170,226,176,119,62,255,252,243,134,153,153,153,184, + 117,235,22,110,221,186,85,105,4,136,82,170,61,113,226,196,55,5,5,5,240,245,245,197,192,129,3,59,16,66,90,84,182,47,33,4,205,155,55,71, + 255,254,253,209,185,115,103,52,105,210,4,122,131,137,55,108,212,71,13,30,37,42,61,150,174,248,90,18,21,21,193,252,246,219,21,206,238,35,231,236, + 90,119,238,177,142,111,227,126,157,72,156,220,45,185,78,181,57,27,205,220,123,99,203,197,41,204,134,203,99,100,187,78,108,240,179,177,177,33,209,183, + 238,26,119,125,119,48,57,88,58,48,243,250,254,108,168,201,43,116,29,231,203,176,181,72,63,248,187,17,137,68,107,175,92,185,226,102,48,24,16,19, + 19,131,169,83,167,254,217,158,161,101,1,16,47,47,47,92,190,124,25,35,71,142,212,102,100,100,212,170,191,233,159,161,188,47,242,79,129,11,188,217, + 41,59,57,57,57,79,46,151,123,52,104,208,128,209,235,245,197,67,18,135,15,155,183,110,223,126,82,171,213,78,1,192,223,248,253,247,155,60,60,61, + 59,143,26,61,154,24,141,70,244,237,219,87,16,25,25,233,24,151,145,81,99,67,228,138,191,54,198,142,29,139,181,107,215,2,0,62,253,244,83,0, + 197,161,245,202,126,149,84,68,102,135,62,61,251,53,183,77,145,110,176,53,180,49,22,214,137,179,185,46,45,20,55,7,35,224,66,196,1,107,48,154, + 158,101,14,190,29,247,44,168,161,56,39,187,110,183,70,29,177,245,252,238,62,0,14,90,122,147,36,18,73,75,133,66,129,219,183,111,231,52,111,222, + 60,143,82,106,183,120,241,98,39,137,68,210,210,82,141,138,80,74,19,9,33,29,166,77,155,54,153,97,152,110,44,203,94,200,200,200,216,72,41,77, + 180,228,120,66,200,39,0,230,163,92,30,138,94,175,7,195,48,160,148,98,248,240,225,152,61,123,118,195,7,15,30,32,42,42,74,222,173,91,183,235, + 132,144,60,0,31,80,74,43,141,154,169,84,42,205,205,155,55,197,81,81,81,96,89,22,114,185,28,182,182,182,16,10,133,24,52,104,144,44,60,60, + 188,235,217,179,103,51,85,117,188,57,162,244,212,34,161,76,102,3,55,143,246,31,143,120,255,49,165,180,198,153,88,165,136,68,34,129,152,107,210,194, + 160,97,190,93,180,158,145,240,249,68,196,231,66,200,170,241,229,55,95,51,124,106,230,162,150,227,243,124,62,159,111,35,132,158,35,224,24,37,4,244, + 237,82,221,94,135,195,225,8,68,124,232,64,241,198,112,22,33,0,143,97,24,134,97,248,0,76,150,106,10,133,66,190,141,144,234,8,232,27,154,12, + 0,49,135,112,8,33,2,20,207,206,122,131,16,119,66,203,69,145,202,114,69,88,150,69,251,246,237,113,50,234,54,14,159,184,128,172,23,247,49,119, + 214,52,180,104,209,2,145,145,145,213,218,84,154,163,85,17,177,88,108,62,127,254,188,83,183,110,221,166,15,28,56,208,112,236,216,177,55,38,148,132, + 44,124,92,105,142,22,187,41,136,142,158,181,118,64,101,81,170,82,4,2,1,115,248,240,97,225,144,33,67,230,68,125,230,227,250,197,193,100,84,151, + 163,69,8,25,216,190,125,251,73,123,247,238,213,245,234,213,75,56,124,248,112,4,7,7,183,27,55,110,28,0,160,91,183,110,88,187,118,109,187,113, + 227,198,225,192,129,3,56,122,244,168,182,83,167,78,179,8,33,169,148,210,83,149,105,178,44,219,127,243,230,205,175,109,51,24,12,48,153,76,48,26, + 141,238,38,147,201,189,228,179,8,235,214,173,207,58,119,54,18,179,230,44,132,139,179,155,69,206,53,135,195,33,99,103,206,204,218,185,114,37,86,30, + 56,128,153,117,235,74,118,63,122,132,115,90,45,14,70,69,101,149,156,167,198,220,204,162,162,34,205,169,83,167,108,15,30,60,8,123,123,123,212,171, + 87,15,114,185,28,60,30,15,12,71,12,14,223,1,13,26,181,4,112,19,0,80,87,129,162,64,95,252,70,8,242,40,131,90,231,20,137,124,72,29, + 87,31,209,149,73,59,130,237,109,93,248,56,179,49,25,103,55,164,28,213,102,97,53,76,120,82,205,100,141,230,190,190,190,200,204,204,196,169,83,167, + 138,128,42,29,50,176,44,251,205,247,223,127,255,249,156,57,115,132,129,129,129,0,208,12,192,173,202,246,149,74,165,240,240,240,40,115,44,135,143,249, + 216,111,226,244,137,226,193,61,186,128,203,117,66,94,145,17,217,5,70,200,157,100,152,53,125,152,232,98,115,143,22,155,215,255,116,156,16,210,130,210, + 55,255,175,17,130,91,55,238,255,214,88,20,8,16,6,72,97,46,129,128,160,144,24,65,56,28,106,54,155,145,156,156,12,74,41,70,14,30,159,242, + 209,210,8,151,118,35,85,240,106,160,0,161,232,136,255,16,71,192,209,209,177,89,118,118,54,18,19,19,49,102,204,152,212,172,172,172,243,69,69,69, + 227,211,210,210,0,32,231,45,36,203,156,249,102,205,154,161,101,203,150,8,11,11,19,169,213,234,97,126,126,126,30,0,218,252,85,182,87,70,69,95, + 228,159,66,149,229,29,132,70,99,3,221,166,77,40,186,112,1,130,115,231,112,80,161,40,212,106,181,51,40,165,41,0,64,8,153,182,99,231,206,171, + 3,126,255,221,86,255,248,49,252,30,60,0,207,222,222,162,15,159,242,108,223,190,29,42,149,10,249,249,249,0,128,13,27,54,64,165,82,161,52,151, + 161,198,11,224,163,157,155,75,93,188,194,51,176,92,70,150,212,64,221,90,166,181,73,243,72,118,45,202,103,60,240,248,69,43,169,38,91,223,154,112, + 244,208,102,169,225,209,182,30,184,224,182,171,141,141,165,227,254,92,46,55,231,233,211,167,253,235,215,175,127,2,128,211,219,228,3,148,135,82,250,28, + 192,148,183,57,150,195,225,204,79,72,72,112,217,182,109,219,228,197,139,23,83,224,15,71,171,116,153,203,229,130,82,10,59,59,59,240,120,60,215,107, + 215,174,185,182,106,213,234,59,20,127,160,189,1,195,48,52,56,56,24,9,9,9,224,114,185,176,179,179,3,107,50,96,225,244,143,97,230,8,185,95, + 124,241,69,179,33,67,134,196,108,219,182,205,104,27,218,182,77,118,118,246,195,73,35,71,197,28,59,118,76,207,178,236,230,202,52,43,185,230,187,207, + 158,61,227,120,42,92,57,212,164,102,165,124,64,116,127,29,21,200,220,32,226,114,40,159,48,16,138,196,118,137,47,95,102,179,44,27,107,137,38,203, + 178,209,9,9,9,98,87,23,71,174,90,163,47,20,243,168,96,195,178,175,211,71,255,107,178,194,104,50,17,109,244,205,203,194,6,65,226,164,12,165, + 180,110,221,186,22,105,106,52,154,187,169,169,169,28,87,87,87,238,249,139,23,46,217,203,164,206,182,246,246,173,1,192,80,144,127,147,209,233,148,28, + 30,215,85,153,157,157,163,209,104,18,44,189,246,184,184,56,174,187,187,11,103,219,246,157,151,92,37,66,23,27,1,215,86,72,8,145,112,136,138,111, + 98,179,68,18,137,75,226,203,151,57,148,210,42,35,132,203,243,70,13,6,0,134,89,120,160,156,54,238,223,191,143,211,191,197,66,74,245,32,218,124, + 156,219,241,35,70,126,49,231,173,243,254,132,66,33,252,253,253,57,7,14,28,176,15,11,11,11,31,62,124,184,241,192,129,3,85,14,109,87,164,186, + 104,22,54,7,221,145,72,36,133,173,91,183,118,216,189,123,119,86,175,225,195,83,140,70,188,95,157,222,200,145,35,23,238,217,179,167,44,1,37,54, + 54,22,93,186,116,1,0,44,88,176,0,189,122,245,66,171,86,173,16,27,27,139,128,128,0,92,188,120,81,196,225,112,68,163,70,141,90,10,160,82, + 71,171,60,91,182,108,193,248,241,227,43,75,172,142,3,160,37,14,129,133,179,151,239,114,202,201,206,66,166,242,213,221,154,239,64,49,132,16,140,157, + 57,51,107,179,94,143,189,55,110,96,180,84,42,217,249,252,57,250,182,106,133,198,93,186,100,89,242,89,87,26,213,209,106,181,224,241,120,176,181,181, + 133,163,163,35,248,124,62,56,60,5,184,130,166,96,248,124,132,180,111,138,149,51,164,234,49,189,177,158,16,228,9,5,136,230,75,80,169,179,75,8, + 33,82,111,12,162,20,42,117,10,46,253,31,123,215,25,30,69,217,69,207,59,179,125,55,187,217,244,10,73,8,36,132,4,8,32,32,189,11,82,68, + 144,242,97,161,40,2,34,32,8,72,9,69,122,81,65,164,11,8,168,168,84,41,82,164,133,142,16,138,161,132,208,66,58,41,155,182,155,108,157,121, + 191,31,201,198,16,82,54,1,84,190,111,207,243,204,179,153,118,230,206,102,103,230,206,125,239,61,215,234,144,168,253,137,163,131,74,120,228,131,85,33, + 106,149,187,8,7,87,60,194,145,85,137,59,245,169,136,0,112,175,162,234,98,137,68,210,64,173,86,35,33,33,1,241,241,241,55,43,74,240,167,148, + 230,183,104,209,226,190,68,34,9,117,115,115,3,128,50,75,6,9,33,132,231,249,226,60,172,173,63,110,119,109,212,54,80,218,165,117,24,182,236,157, + 135,143,6,124,3,33,75,192,113,38,124,181,188,39,44,122,45,6,244,30,78,218,117,174,19,126,116,159,241,3,0,223,150,230,228,4,152,183,244,63, + 231,212,18,7,166,1,120,162,118,117,117,87,136,68,34,184,168,188,140,211,70,140,79,161,148,22,95,55,66,86,100,102,242,156,11,50,83,181,50,181, + 176,0,160,76,149,243,124,95,20,18,19,19,199,182,109,219,118,65,94,94,94,150,78,167,123,7,0,106,213,170,229,199,48,140,4,64,185,163,35,21, + 200,66,136,254,252,243,79,40,149,74,36,37,253,213,147,62,33,33,1,60,207,255,107,138,0,254,141,168,168,234,144,1,128,3,7,14,180,59,112,224, + 0,61,112,224,64,59,235,78,60,165,188,69,163,1,53,20,126,183,66,161,144,2,40,89,209,36,87,171,213,68,232,235,11,34,41,76,253,160,192,115, + 43,125,53,155,109,147,150,225,57,176,32,166,39,130,14,58,41,193,124,215,78,24,43,158,129,84,177,250,175,141,41,5,44,20,28,120,155,68,10,75, + 128,106,52,26,88,44,22,167,218,181,107,31,176,88,44,78,133,116,79,191,41,253,93,224,56,238,62,203,178,248,248,227,143,129,162,232,143,209,104,68, + 106,106,42,12,6,3,140,70,35,30,60,120,128,156,156,28,24,141,70,220,184,113,3,181,106,213,2,203,178,229,134,211,9,33,148,82,138,26,53,106, + 192,223,223,31,44,161,216,176,100,54,166,127,50,18,255,169,197,99,211,202,175,208,190,125,251,122,1,1,1,45,4,2,1,231,233,233,41,218,181,107, + 215,94,142,227,222,172,130,142,214,111,83,167,78,245,15,11,11,115,87,171,148,102,137,152,133,216,172,163,18,67,38,21,228,103,160,70,13,63,11,100, + 242,160,247,222,123,143,131,13,15,71,43,231,167,159,126,234,21,18,18,226,232,164,86,234,196,66,54,173,77,227,70,137,211,63,26,25,7,0,98,55, + 119,61,164,242,208,193,131,7,91,170,194,57,99,198,140,90,110,110,110,106,6,52,143,51,153,82,212,142,142,70,181,163,163,137,49,24,51,137,80,88, + 0,145,248,149,49,99,198,144,170,112,78,154,52,41,32,52,52,84,173,86,41,180,2,33,155,34,226,249,20,41,248,84,161,209,148,37,117,115,205,135, + 220,161,241,123,239,189,87,46,167,53,154,53,101,202,148,132,146,203,89,150,133,70,163,129,62,53,26,162,164,219,8,119,16,162,169,155,19,36,18,73, + 105,181,226,114,57,75,131,16,2,134,97,224,239,239,47,220,191,127,191,250,240,225,195,179,6,15,30,220,196,150,125,95,153,83,193,16,224,186,122,81, + 24,113,139,112,28,199,49,12,131,144,144,16,215,189,123,247,10,132,66,225,182,242,134,143,0,224,135,31,126,152,214,161,67,135,180,174,93,187,26,15, + 28,56,0,66,8,142,31,63,142,164,164,36,116,235,214,13,148,82,107,85,27,174,94,189,138,206,157,59,27,219,180,105,147,244,195,15,63,204,42,223, + 152,191,48,108,216,48,152,205,102,104,181,90,104,52,26,236,223,191,31,225,225,225,84,46,151,247,101,107,188,54,191,255,7,211,90,214,111,216,8,171, + 86,124,97,20,11,132,139,108,225,180,130,16,130,193,159,126,154,145,211,184,177,102,171,78,151,63,68,165,146,215,78,72,112,190,124,248,176,171,201,84, + 105,177,33,128,191,162,58,190,190,190,197,78,150,72,36,130,64,236,6,86,209,0,98,151,174,144,123,246,197,137,43,18,131,163,2,187,149,14,56,164, + 80,163,92,105,7,121,13,204,111,57,208,107,87,171,255,120,29,147,215,196,70,66,8,67,8,97,168,128,236,26,250,85,112,109,55,127,25,206,111,79, + 197,145,85,137,123,244,169,152,13,224,110,101,215,185,201,100,210,115,28,7,134,97,32,16,8,74,230,136,158,221,179,103,15,46,95,190,12,0,197,178, + 61,121,121,121,28,203,178,144,74,165,0,224,80,30,47,199,113,16,10,133,16,10,133,56,121,225,148,203,127,222,234,73,206,93,251,29,173,26,189,141, + 76,173,9,143,115,76,200,206,7,194,154,70,160,65,151,221,184,254,64,139,70,13,235,179,172,88,49,184,44,190,130,7,52,65,251,136,246,203,184,193, + 213,49,38,202,14,158,255,245,214,205,83,59,174,223,248,105,245,190,187,45,155,182,213,1,128,78,167,131,86,171,165,132,16,58,126,248,180,251,91,135, + 101,113,43,222,185,206,11,12,210,123,21,125,7,207,19,132,16,63,119,119,247,115,174,174,174,199,9,33,126,132,16,63,149,74,117,214,219,219,251,54, + 33,164,55,165,244,215,228,228,228,16,173,86,219,138,82,250,136,82,250,40,35,35,163,99,90,90,90,203,138,138,181,92,92,92,54,230,230,230,126,194, + 113,220,27,69,211,235,28,199,53,138,141,141,13,109,212,168,209,205,192,192,192,171,129,129,129,7,3,3,3,247,6,6,6,238,237,208,161,195,114,171, + 220,195,139,68,89,190,200,75,4,107,170,75,143,162,252,172,30,214,21,214,144,204,201,210,9,104,22,137,228,134,101,244,104,168,247,238,133,48,54,22, + 67,7,15,86,201,229,242,21,132,144,38,132,144,86,14,14,14,171,102,207,158,173,116,93,184,16,222,167,78,33,110,255,126,152,133,194,50,195,190,149, + 161,160,160,0,2,65,97,112,205,104,52,66,161,80,128,227,56,0,79,15,217,148,6,103,193,249,164,199,183,33,134,63,120,80,237,161,220,182,23,7, + 221,143,112,223,159,91,43,232,174,78,20,52,199,237,85,247,21,126,173,47,234,136,64,43,86,75,17,31,159,0,14,124,149,198,155,245,122,125,78,86, + 86,22,26,53,106,228,114,249,242,229,218,225,225,225,206,177,177,177,208,235,245,127,84,231,124,173,32,132,180,240,241,241,217,238,235,235,251,208,199,199, + 103,59,33,164,69,21,118,223,120,250,244,105,176,44,139,217,179,103,35,47,47,15,38,147,9,153,153,153,136,143,143,135,209,104,68,98,98,34,98,98, + 98,96,52,26,17,23,23,7,131,161,242,23,18,158,231,161,82,169,160,47,208,98,205,252,233,152,57,117,34,114,238,70,33,49,249,49,212,142,10,140, + 29,59,150,117,114,114,226,57,142,243,183,88,44,157,57,142,91,107,171,195,89,36,90,120,166,70,141,26,245,151,44,89,18,58,125,254,90,145,74,160, + 165,18,165,148,23,43,37,84,92,239,85,12,139,88,33,250,122,217,151,119,206,159,63,159,100,139,120,167,149,179,113,227,198,193,73,73,73,225,33,33, + 33,117,93,253,2,36,18,47,159,236,201,17,51,238,82,131,254,34,241,169,217,102,237,218,181,209,103,207,158,77,174,10,167,66,161,168,183,101,203,150, + 250,30,30,30,245,133,50,153,52,233,209,163,95,51,146,147,126,101,213,78,82,70,165,126,125,247,238,221,81,59,119,238,76,173,10,103,80,80,80,200, + 252,249,243,195,26,52,104,16,230,89,171,182,68,230,83,35,83,234,235,151,41,107,16,46,129,175,127,183,85,171,86,93,61,127,254,188,77,156,44,203, + 90,24,134,129,80,40,132,92,46,199,161,67,135,48,250,131,65,168,225,227,130,186,33,33,232,244,209,39,216,185,115,103,113,14,15,203,178,229,62,209, + 55,47,28,187,175,177,23,137,194,186,122,81,88,87,47,170,177,23,137,162,188,197,129,97,24,136,197,98,4,5,5,9,15,29,58,232,114,230,200,158, + 181,231,39,251,71,53,246,34,81,141,189,72,84,101,54,150,5,107,30,150,213,145,19,139,197,8,15,15,247,58,116,232,144,64,40,20,238,36,132,52, + 44,107,63,74,233,111,39,79,158,92,60,100,200,16,113,247,238,221,113,241,226,69,12,27,54,236,204,174,93,187,0,0,23,47,94,196,248,241,227,207, + 28,59,118,12,35,71,142,68,199,142,29,197,103,206,156,89,101,139,246,143,197,98,193,166,77,155,96,177,88,224,224,224,0,103,103,103,244,236,217,19, + 209,209,209,35,191,251,238,187,219,172,80,248,118,143,55,222,194,129,189,187,16,115,35,122,228,230,5,239,86,89,20,152,97,24,116,31,60,56,35,35, + 44,76,179,57,55,55,255,125,39,39,121,72,106,170,243,137,237,219,93,43,219,151,16,66,56,142,43,118,174,172,78,135,117,18,136,221,32,80,212,135, + 64,217,20,215,239,138,204,194,102,244,138,232,21,122,171,34,253,44,161,152,25,214,119,122,45,244,157,94,11,189,39,7,12,149,215,196,6,69,77,140, + 234,62,206,191,67,96,83,71,228,166,153,176,255,171,184,71,250,76,44,4,16,99,203,117,206,243,252,205,164,164,36,136,197,98,212,172,89,51,152,16, + 98,205,11,220,56,124,248,240,49,115,230,204,153,0,96,78,209,57,57,116,232,208,33,76,171,213,34,54,54,22,0,46,151,199,75,41,45,174,50,212, + 228,198,73,2,188,27,160,97,189,17,112,114,110,136,100,141,17,201,26,35,54,172,121,19,81,167,231,225,242,145,247,16,159,154,10,153,103,95,112,22, + 67,185,213,140,86,152,205,102,239,107,215,174,145,211,167,79,19,158,231,97,54,155,105,94,110,46,189,114,230,12,10,34,35,137,74,165,34,173,155,181, + 213,110,158,119,224,143,221,43,207,92,54,229,87,249,69,253,89,48,227,254,253,251,45,182,111,223,222,1,192,140,6,13,26,156,143,143,143,111,121,234, + 212,169,186,190,190,190,43,42,221,187,28,88,101,33,226,226,226,158,152,138,100,33,140,148,210,198,148,210,238,148,210,222,69,211,248,103,210,122,179,29, + 79,249,34,47,17,42,175,58,44,33,20,134,218,206,206,74,179,217,148,248,251,239,191,155,24,134,129,92,46,199,144,97,195,152,53,171,87,183,25,212, + 162,197,241,15,187,116,57,120,252,216,177,198,205,155,55,7,165,20,12,195,224,231,159,127,46,208,235,11,50,107,214,172,169,46,125,144,210,40,153,123, + 69,41,69,110,110,110,177,163,149,147,147,3,15,15,15,155,135,14,117,185,56,122,236,80,84,22,229,62,138,239,126,119,153,105,81,234,155,205,179,121, + 78,144,195,153,145,83,64,145,167,135,224,34,227,220,124,72,80,31,211,131,206,205,99,34,111,159,203,212,115,250,42,85,75,164,165,165,77,31,54,108, + 88,166,151,151,23,81,169,84,240,241,241,97,62,251,236,179,140,132,132,132,57,85,225,41,9,87,87,215,255,116,232,208,97,95,100,100,100,191,200,200, + 72,255,13,27,54,244,235,208,161,195,62,87,87,215,255,216,72,241,203,180,105,211,116,98,177,24,175,190,250,42,242,242,242,80,84,229,83,225,84,17, + 172,195,142,34,145,8,235,150,204,194,204,169,19,145,121,235,60,174,159,249,29,39,83,9,34,230,127,9,145,72,84,45,173,175,32,119,69,131,6,222, + 202,91,227,135,13,76,158,58,101,138,242,234,213,171,194,49,227,198,211,184,20,13,196,221,191,96,209,110,58,115,77,231,134,30,175,119,194,236,25,19, + 27,80,74,43,81,103,2,66,221,21,13,234,123,43,111,78,252,112,208,253,113,227,198,201,22,45,90,164,111,209,162,69,193,227,199,143,101,10,39,231, + 16,129,163,186,126,92,74,170,67,139,22,45,30,124,244,209,71,217,85,229,140,136,136,144,31,62,124,88,208,191,127,127,75,86,86,150,131,80,38,107, + 68,36,210,102,233,89,89,142,253,250,247,191,219,175,95,191,124,158,231,71,86,133,115,230,204,153,242,152,152,24,65,139,22,45,204,169,169,169,74,133, + 139,107,56,171,118,110,250,48,229,177,170,89,243,230,247,198,140,25,163,171,200,206,146,201,226,74,165,50,169,85,171,86,248,234,171,175,240,245,215,95, + 163,91,183,110,136,190,17,141,30,99,38,32,116,212,120,236,61,119,1,73,73,73,152,59,119,46,194,195,195,33,18,137,98,202,36,29,113,139,92,73, + 161,228,74,10,37,24,113,139,88,231,121,74,114,172,142,144,88,44,70,227,198,77,176,231,200,25,83,231,85,233,143,175,166,226,149,226,237,203,192,229, + 153,101,71,186,26,123,145,168,146,121,88,132,144,98,254,150,45,91,122,30,63,126,92,40,20,10,247,17,66,234,149,181,127,191,126,253,70,91,37,28, + 222,127,255,253,51,43,86,172,104,253,254,251,133,47,218,175,190,250,42,230,205,155,215,58,34,34,226,204,252,249,243,209,169,83,39,4,6,6,86,90, + 248,194,113,28,44,22,11,6,13,26,4,139,197,130,244,244,116,220,185,115,7,235,215,175,7,165,84,10,0,94,222,190,175,136,197,98,92,187,114,41, + 127,198,251,205,127,168,140,179,196,249,21,159,43,207,243,208,106,181,232,55,106,84,70,98,157,58,154,181,25,25,249,31,56,57,201,3,30,61,114,86, + 26,141,62,21,229,164,18,66,192,243,124,177,99,101,117,184,74,79,69,15,74,155,96,202,231,127,59,245,125,50,0,160,237,187,222,232,61,57,96,168, + 87,144,252,155,54,239,20,6,189,119,206,187,79,243,146,185,69,48,227,102,21,34,214,23,47,94,188,8,181,90,141,254,253,251,75,24,134,89,8,20, + 38,191,83,74,87,82,74,151,89,185,36,18,201,23,239,189,247,30,147,157,157,141,235,215,175,3,192,177,178,8,173,121,167,214,115,215,106,8,56,94, + 140,243,87,15,225,72,228,14,220,79,76,199,163,52,61,32,112,132,94,151,8,83,65,18,244,89,81,200,53,200,203,162,123,10,34,145,40,189,65,131, + 6,180,105,211,194,116,174,123,247,238,89,226,30,61,178,92,90,190,156,254,57,98,4,81,222,185,35,146,201,100,164,86,173,90,144,74,165,188,84,42, + 205,180,241,187,120,30,120,33,114,11,47,64,22,226,185,161,164,47,242,50,161,162,170,195,178,4,75,65,85,178,129,59,86,173,113,236,63,232,93,93, + 120,120,184,147,143,143,15,8,33,120,179,79,31,210,33,50,82,41,244,246,134,75,147,38,197,195,17,71,127,255,29,135,14,29,210,29,216,179,219,103, + 216,7,31,244,2,176,165,60,99,8,33,130,218,181,107,23,31,55,37,37,5,18,137,164,56,39,34,55,55,23,110,110,110,72,73,73,41,119,168,163, + 20,182,78,157,114,97,74,90,243,233,181,154,43,133,228,144,238,49,56,74,33,36,28,80,64,97,230,0,131,153,226,149,0,214,249,72,129,197,105,255, + 197,93,15,0,108,173,202,23,168,215,235,79,16,66,70,240,60,191,3,0,19,25,25,201,223,188,121,115,180,173,137,235,101,65,46,151,79,62,116,232, + 144,115,68,68,68,214,254,253,251,115,122,246,236,233,184,114,229,74,231,110,221,186,77,6,240,83,101,251,83,74,11,8,33,91,18,18,18,70,55,109, + 218,20,26,141,6,38,147,9,81,81,81,8,10,10,194,229,203,151,17,28,28,140,75,151,46,161,110,221,186,224,56,14,122,189,30,60,207,151,59,188, + 107,189,153,107,50,210,129,204,120,36,95,252,13,49,215,47,227,120,50,193,202,159,246,161,166,127,173,106,233,212,212,245,80,132,249,184,187,28,89,244, + 249,76,247,184,19,63,99,215,166,149,252,201,131,7,67,197,74,140,104,55,232,147,183,140,102,248,1,16,183,108,222,20,221,157,98,56,185,63,82,143, + 221,168,88,201,186,174,135,34,204,219,205,229,240,210,69,115,149,247,14,126,135,95,214,125,69,119,126,191,45,92,15,52,15,11,11,235,206,48,140,26, + 128,190,40,207,203,166,214,54,101,113,30,221,183,175,177,30,104,254,235,175,191,118,151,203,229,158,0,204,249,249,249,247,159,133,243,216,254,253,141,173, + 118,18,66,220,1,152,40,165,247,108,229,180,98,192,128,1,243,198,143,31,63,133,227,56,55,235,50,179,217,204,126,241,197,23,2,158,231,89,74,169, + 137,97,24,211,225,195,135,57,139,197,146,172,215,235,71,217,202,109,69,209,16,16,196,98,49,186,116,233,146,117,225,194,5,134,227,56,7,0,227,129, + 138,115,170,0,160,160,160,224,137,60,173,210,67,141,37,29,185,17,35,70,100,30,62,124,88,72,8,81,161,48,137,186,107,105,190,200,200,200,185,111, + 191,253,246,212,159,126,250,233,206,138,21,43,222,24,57,114,36,126,254,249,103,212,169,83,7,215,174,93,195,244,233,211,1,160,117,68,68,196,222,141, + 27,55,6,198,197,197,125,81,153,141,102,179,25,22,139,5,219,182,109,195,155,111,190,9,55,55,55,120,123,123,131,16,114,226,131,15,62,88,13,0, + 44,97,69,0,96,208,27,12,33,33,77,109,142,224,6,6,6,22,223,235,82,83,83,139,43,5,95,123,251,237,140,13,139,22,225,135,130,2,124,224, + 228,36,79,244,245,245,218,123,239,222,135,132,144,245,229,69,142,172,81,157,202,156,44,91,35,204,5,41,152,182,103,193,67,79,0,221,218,190,235,141, + 182,239,122,163,105,111,119,194,176,4,127,30,201,68,244,81,205,78,115,46,78,208,42,180,203,161,148,222,116,113,113,217,219,174,93,187,55,234,213,171, + 135,225,195,135,127,36,18,137,68,102,179,121,156,85,230,129,16,226,200,48,204,156,77,155,54,125,232,236,236,140,211,167,79,227,212,169,83,39,40,165, + 241,229,124,143,0,80,172,153,85,179,70,176,62,38,78,43,127,156,120,22,103,78,239,65,157,240,79,32,243,236,5,231,144,249,48,221,254,26,198,204, + 35,112,169,217,11,137,113,247,192,10,36,209,54,216,124,35,49,49,49,48,48,48,144,60,124,248,208,2,128,114,28,71,77,109,218,152,67,23,45,18, + 70,127,244,17,105,25,19,195,82,66,248,75,151,46,1,128,77,121,158,207,27,86,185,133,232,232,232,50,229,22,170,138,6,13,26,180,62,117,234,148, + 68,175,215,227,228,201,147,104,214,172,184,182,235,159,19,115,196,147,190,200,203,4,242,116,175,195,98,103,171,204,167,38,225,137,176,110,112,48,39,98, + 240,221,155,189,122,229,95,189,122,181,248,173,79,255,199,31,208,29,58,4,142,227,64,41,197,169,200,72,188,247,238,187,90,33,75,54,4,4,248,83, + 66,255,210,110,41,171,148,94,36,18,245,239,223,191,127,241,205,39,33,33,1,10,133,2,98,177,24,60,207,195,98,177,128,101,89,56,58,58,194,98, + 177,60,21,130,41,205,73,41,53,115,26,93,191,141,61,222,73,241,214,154,232,135,106,127,248,137,100,197,23,167,167,138,224,141,112,33,92,5,105,244, + 216,23,93,146,121,67,102,63,90,170,183,88,101,37,255,132,144,224,134,13,27,174,238,211,167,15,3,0,157,59,119,102,26,54,108,248,13,33,164,220, + 86,57,149,113,74,165,82,137,72,36,194,190,125,251,52,119,238,220,233,182,111,223,62,141,72,36,130,84,42,45,87,251,170,12,206,245,75,150,44,129, + 92,46,135,197,98,129,209,104,44,206,207,42,249,105,50,153,224,234,234,138,3,7,14,128,227,184,3,149,112,162,134,159,63,136,91,109,108,222,123,12, + 167,50,68,85,118,178,74,114,214,241,114,168,235,233,234,242,251,210,5,115,221,178,238,70,33,49,49,145,30,62,116,224,124,1,165,73,217,185,116,70, + 150,150,214,205,55,80,105,179,64,196,255,190,238,51,26,209,22,102,144,178,170,252,254,226,12,243,114,168,235,227,230,114,248,171,47,22,41,179,99,47, + 35,37,53,21,191,29,216,119,181,128,210,36,74,233,78,74,233,80,142,227,234,115,28,87,159,82,58,180,60,231,165,170,156,58,157,174,129,78,167,107, + 240,60,57,121,158,111,192,243,188,205,156,37,29,149,101,203,150,221,78,73,73,121,47,45,45,173,171,117,202,202,202,234,172,213,106,219,231,231,231,183, + 41,88,230,239,168,211,233,220,243,242,242,188,10,10,10,94,161,148,70,149,197,89,30,116,58,29,189,116,233,82,188,151,151,87,254,206,157,59,209,174, + 93,59,71,15,15,143,173,22,139,69,65,41,125,202,201,42,201,201,140,188,69,126,252,114,226,158,117,235,214,149,155,19,104,48,24,144,150,150,102,8, + 15,15,207,60,112,224,0,252,252,252,20,5,5,5,63,155,76,38,47,0,189,203,178,51,61,61,125,199,182,109,219,26,213,170,85,43,112,232,208,161, + 88,187,118,45,86,172,88,97,0,128,141,27,55,26,74,68,178,106,60,124,248,176,105,89,195,134,79,216,201,48,91,95,123,237,53,122,234,212,41,188, + 249,230,155,197,66,162,223,126,251,45,44,22,75,110,167,78,157,120,0,40,208,231,231,82,158,194,104,42,123,252,189,172,239,83,44,22,191,94,82,47, + 208,42,198,44,22,139,65,41,69,221,214,173,51,178,195,195,53,155,114,114,242,103,55,104,160,250,48,36,100,104,61,224,221,178,56,9,33,79,68,117, + 74,79,182,70,178,74,114,82,74,211,10,146,49,124,207,130,135,135,172,145,45,169,131,0,250,60,11,118,47,122,152,174,79,199,183,0,202,116,126,42, + 58,119,141,70,51,102,209,162,69,6,39,39,39,188,245,214,91,152,63,127,254,7,173,91,183,206,241,240,240,184,16,20,20,244,231,192,129,3,83,162, + 162,162,198,116,236,216,17,177,177,177,248,242,203,47,179,179,178,178,222,169,136,147,16,82,28,201,235,221,163,179,102,205,55,95,241,157,218,143,134,92, + 166,132,89,88,3,26,173,25,89,58,10,163,164,57,196,34,9,186,182,8,195,133,195,155,243,57,163,110,75,121,156,86,104,181,218,157,67,134,12,201, + 21,137,68,48,26,141,84,40,20,66,82,152,119,204,11,187,117,51,181,188,121,211,194,81,202,19,66,48,105,210,36,93,86,86,214,79,149,113,62,11, + 74,113,62,23,185,133,210,118,62,15,89,136,23,113,238,47,51,138,162,89,79,76,214,117,79,200,59,88,63,9,225,57,142,227,17,80,43,64,25,247, + 48,126,229,128,1,253,223,239,222,189,135,188,71,143,30,210,176,219,133,67,23,251,246,237,195,174,93,187,242,143,28,57,146,43,17,178,27,107,212,172, + 225,193,113,60,8,41,63,98,2,0,74,165,114,220,180,105,211,100,57,57,57,88,177,98,5,223,168,81,35,70,161,80,192,100,50,97,227,198,141,230, + 176,176,48,33,195,48,200,201,201,1,195,48,101,15,117,60,125,130,215,9,33,93,87,119,232,187,171,233,199,195,92,66,59,180,116,106,95,195,7,230, + 38,20,201,9,15,113,231,216,145,172,27,135,151,103,66,255,184,47,165,212,230,166,215,86,120,123,123,207,218,181,107,151,251,212,169,83,169,94,175,39, + 241,241,241,116,193,130,5,238,195,135,15,159,5,192,214,161,190,210,32,233,233,233,32,132,240,0,138,63,81,5,89,3,74,105,52,33,228,215,62,125, + 250,244,238,212,169,19,110,223,190,93,60,68,88,210,209,178,86,31,46,92,184,48,27,64,185,138,206,86,8,133,66,172,216,178,3,217,89,25,240,240, + 240,134,84,38,171,86,36,11,0,196,12,51,123,241,220,153,238,25,183,46,144,232,243,199,249,237,215,31,167,89,56,90,182,226,127,94,50,5,0,166, + 178,220,60,134,157,189,100,225,92,71,235,176,230,79,87,82,114,9,71,199,84,203,192,151,141,243,111,132,94,175,23,182,109,219,22,148,210,143,35,34, + 34,190,249,243,207,63,21,171,87,175,30,74,8,153,71,41,205,168,108,127,2,128,231,249,226,223,115,233,97,195,252,252,124,174,78,157,58,169,102,179, + 121,115,68,68,196,212,168,168,40,201,202,149,43,223,6,48,155,210,138,219,156,60,120,240,96,65,147,38,77,38,198,198,198,110,15,13,13,29,9,160, + 166,193,96,200,142,136,136,88,186,113,227,198,247,109,137,100,1,192,207,63,255,188,124,216,176,97,135,122,245,234,245,25,207,243,197,185,97,132,144,7, + 238,238,238,197,67,184,233,143,83,167,140,120,127,208,20,173,54,203,102,157,59,7,7,135,15,35,34,34,164,58,157,14,171,86,173,226,195,194,194,24, + 235,75,209,247,223,127,111,9,14,14,22,244,31,61,58,99,89,106,42,230,157,62,173,155,82,191,126,163,77,119,238,188,130,50,34,238,214,23,199,178, + 34,89,214,180,139,234,128,82,154,76,8,25,190,103,193,195,111,1,116,107,57,192,19,191,46,121,136,172,56,227,82,88,112,175,162,170,193,10,56,19, + 9,33,93,31,63,126,252,235,204,153,51,29,95,121,229,21,212,175,95,95,232,224,224,208,92,169,84,66,42,149,34,59,59,27,71,143,30,197,218,181, + 107,141,55,110,220,232,67,41,45,87,6,132,227,184,180,224,224,194,119,90,66,8,37,132,100,230,26,136,227,47,123,154,59,12,27,177,147,156,185,116, + 22,73,38,30,6,51,143,128,90,141,209,190,219,50,236,253,237,26,151,28,119,243,166,185,32,107,131,13,246,222,147,203,229,187,231,206,157,59,224,179, + 207,62,147,101,100,100,112,49,10,152,205,0,0,32,0,73,68,65,84,6,131,129,223,177,99,7,59,116,232,80,142,10,4,188,72,32,192,184,113,227, + 10,178,179,179,247,20,85,139,255,93,120,33,114,11,47,64,22,226,185,160,180,47,242,191,130,50,175,80,158,101,206,174,93,183,230,245,159,183,253,228, + 201,178,140,231,189,251,247,47,189,209,183,95,210,239,191,255,238,44,114,116,108,6,128,55,142,28,121,222,100,40,208,236,255,245,87,191,128,0,255,240, + 162,166,210,148,103,153,179,21,29,80,171,213,234,78,159,62,157,63,117,234,84,146,144,144,240,163,135,135,199,192,131,7,15,58,244,237,219,183,224,246, + 237,219,59,61,61,61,123,119,232,208,65,57,113,226,68,131,86,171,181,185,241,40,165,244,38,33,164,222,31,51,191,120,251,143,37,107,186,64,192,182, + 130,65,8,240,230,179,48,229,253,14,224,71,74,169,205,122,71,37,161,80,40,194,61,60,60,112,245,234,213,172,230,205,155,27,245,122,189,104,254,252, + 249,46,10,133,34,188,58,124,69,246,82,173,86,11,158,231,5,0,72,209,39,248,170,215,226,255,231,141,55,222,248,245,151,95,126,121,173,71,143,30, + 8,12,12,132,217,108,70,112,112,48,140,70,35,130,130,130,96,48,24,240,249,231,159,35,39,39,103,2,173,160,89,49,33,4,22,139,165,56,217,214, + 199,215,175,80,167,231,25,100,44,20,66,38,48,102,255,38,164,101,102,240,191,92,123,252,56,223,196,117,141,77,211,221,40,189,93,62,7,93,135,161, + 99,147,0,192,192,163,194,142,243,10,49,2,99,246,175,199,227,180,12,252,124,37,37,91,103,226,187,197,148,193,89,37,59,95,18,206,198,159,223,70, + 63,27,5,65,202,211,184,178,21,148,210,125,0,190,164,148,94,117,117,117,29,124,244,232,209,182,29,59,118,148,30,62,124,120,12,128,153,149,237,127, + 37,133,18,126,109,61,138,117,155,10,109,41,165,145,197,113,92,20,199,113,27,40,165,59,253,252,252,94,59,118,236,88,139,247,222,123,79,182,101,203, + 150,137,0,42,20,4,45,138,84,253,10,0,132,144,132,65,131,6,77,121,248,240,225,92,90,168,151,101,147,212,136,21,155,54,109,138,5,240,180,114, + 114,9,252,244,197,176,221,0,108,214,138,3,128,188,188,60,125,84,84,148,126,226,196,137,36,33,33,225,160,167,167,231,107,135,14,29,146,247,237,219, + 215,16,29,29,125,204,219,219,187,109,231,206,157,29,126,187,120,49,41,255,222,189,253,251,31,62,244,53,243,124,185,162,103,132,144,231,234,100,89,97, + 117,182,118,207,123,184,248,215,197,15,59,243,6,236,52,102,225,60,128,196,103,224,60,69,8,9,125,247,221,119,127,233,217,179,103,203,208,208,80,212, + 172,89,19,119,238,220,65,122,122,58,174,95,191,142,125,251,246,237,211,235,245,149,54,212,206,204,204,124,170,61,17,145,185,120,111,94,53,123,223,165, + 51,205,130,219,246,24,34,171,239,205,195,104,162,72,120,116,15,159,207,216,152,159,242,232,206,77,147,197,212,199,230,97,212,130,130,245,95,127,253,181, + 112,255,254,253,61,86,174,92,169,244,243,243,99,69,34,17,3,128,94,190,124,153,142,29,59,86,151,145,145,113,32,55,55,119,125,165,100,207,23,167, + 238,223,191,223,152,101,217,231,42,183,80,93,89,8,59,170,7,82,222,239,48,48,176,70,40,195,241,173,40,101,88,74,136,206,204,99,95,124,124,124, + 118,201,109,106,59,59,43,169,74,54,144,240,68,72,8,207,241,44,115,246,254,253,132,226,136,17,33,164,51,125,186,101,78,160,74,165,90,33,151,203, + 35,146,147,147,175,170,213,234,222,132,144,185,148,210,25,217,217,217,191,42,149,202,222,0,230,251,249,249,45,143,142,142,126,74,255,164,44,206,103,69, + 101,156,117,235,214,29,116,229,202,21,199,198,141,27,231,196,196,196,108,171,91,183,238,160,253,251,247,59,246,236,217,51,39,38,38,102,91,117,56,107, + 214,172,217,105,215,174,93,174,167,78,157,50,175,95,191,222,50,100,200,16,65,221,186,117,133,99,199,142,189,159,144,144,80,102,245,77,121,156,164,176, + 213,206,6,161,80,216,137,97,24,194,243,124,241,63,213,154,71,199,113,220,94,0,35,75,223,120,74,114,186,186,186,158,17,8,4,62,69,203,81,242, + 179,36,204,102,115,82,122,122,122,185,90,100,37,57,235,121,41,91,43,69,100,161,222,76,169,133,167,35,110,166,106,43,150,254,182,145,211,65,196,46, + 52,152,121,222,194,243,35,255,159,56,75,10,150,90,19,227,43,154,47,79,0,180,170,215,17,33,164,49,195,48,127,168,84,170,99,217,217,217,195,41, + 165,79,61,132,159,229,218,36,132,52,84,40,20,127,72,36,146,244,252,252,252,190,5,5,5,151,158,149,179,130,99,253,45,156,132,144,64,165,82,57, + 87,173,86,47,125,244,232,209,85,181,90,221,139,82,250,9,207,243,203,243,242,242,246,41,149,202,94,148,210,9,254,254,254,155,163,163,163,55,87,196, + 233,226,226,114,217,122,109,2,160,214,235,210,122,61,151,188,174,205,102,115,98,86,86,214,171,182,218,89,98,157,59,128,0,20,10,240,222,165,148,230, + 86,247,220,75,173,175,5,160,19,10,245,251,178,1,60,0,112,153,82,122,189,186,156,69,219,16,161,204,121,36,43,150,191,109,173,46,100,89,113,52, + 103,202,223,98,46,200,218,80,209,189,174,2,206,186,206,206,206,239,88,44,150,16,74,169,51,128,44,177,88,124,59,35,35,227,123,74,233,83,35,44, + 47,250,183,68,8,113,0,176,28,64,67,0,143,241,151,144,113,28,128,175,43,115,82,255,46,59,237,40,204,209,42,57,92,248,196,58,27,29,254,234, + 30,248,165,248,231,218,57,237,156,118,78,155,246,81,85,244,240,125,86,59,9,33,33,0,98,41,165,92,137,101,255,138,115,183,115,254,255,113,18,66, + 24,90,73,181,229,191,193,206,255,37,206,151,25,21,37,195,63,123,220,217,14,59,236,248,191,128,173,17,142,103,224,175,86,196,207,14,59,94,4,42, + 115,178,236,176,163,52,202,141,104,1,40,179,114,160,138,158,127,149,171,15,108,8,225,218,57,237,156,118,78,59,167,157,211,206,105,231,252,31,227,252, + 127,131,125,232,208,206,105,231,180,115,218,57,237,156,118,78,59,231,63,206,249,50,195,62,116,104,135,29,118,216,97,135,29,118,216,241,130,96,117,170, + 202,74,138,183,59,90,85,4,41,236,89,247,17,128,126,0,106,3,184,7,96,7,128,213,213,25,211,39,133,42,216,83,0,180,66,97,247,250,7,0, + 78,3,88,68,41,173,80,230,224,255,25,110,110,110,211,132,66,161,26,40,108,109,98,253,44,249,55,199,113,217,57,57,57,11,94,196,241,157,157,157, + 149,26,141,38,175,42,182,150,180,173,228,167,217,108,126,97,118,218,241,239,4,33,36,216,217,217,249,7,141,70,243,14,165,244,78,229,123,216,97,199, + 203,3,119,119,247,145,38,147,41,66,36,18,205,79,75,75,91,243,79,219,243,119,161,188,202,195,98,71,235,192,129,3,145,0,208,163,71,143,118,0, + 224,228,228,116,142,97,152,90,85,57,8,207,243,15,178,178,178,202,21,80,115,114,114,58,199,178,236,83,156,102,179,89,41,16,8,202,124,104,89,44, + 150,196,156,156,156,87,170,98,199,139,2,41,172,169,222,239,228,228,164,159,59,119,238,234,246,237,219,215,72,78,78,182,76,158,60,185,237,181,107,215, + 122,16,66,94,175,138,179,69,8,105,65,8,217,220,168,81,163,221,131,7,15,254,165,121,243,230,226,204,204,76,229,142,29,59,124,182,108,217,18,69, + 8,121,135,82,90,110,163,213,255,103,8,133,66,117,98,98,162,18,40,148,176,40,114,172,96,54,155,97,54,155,161,211,233,16,30,94,109,153,179,114, + 225,235,235,219,142,231,249,181,126,126,126,129,222,222,222,119,120,158,31,154,154,154,90,225,255,168,180,173,22,139,5,148,210,98,59,67,67,67,159,187, + 157,255,171,32,132,188,230,236,236,252,65,205,154,53,95,201,207,207,23,197,198,198,94,7,48,131,82,90,237,190,111,229,28,199,5,192,124,71,71,199, + 215,67,67,67,189,238,221,187,167,73,75,75,187,8,96,18,165,52,246,25,185,131,219,181,107,119,102,213,170,85,46,163,70,141,58,67,8,105,109,119, + 182,236,248,167,80,179,102,77,181,78,167,219,0,160,177,80,40,244,148,74,165,144,201,100,169,18,137,228,170,76,38,123,255,204,153,51,217,149,146,148, + 2,199,113,51,227,226,226,60,95,125,245,213,37,245,235,215,255,60,35,35,67,111,50,153,142,101,101,101,77,168,172,168,166,180,47,242,178,192,58,116, + 88,114,8,241,137,161,195,162,190,66,237,75,238,36,16,8,124,31,61,122,228,46,149,74,193,243,124,241,195,172,244,100,93,110,52,26,81,191,126,253, + 10,85,132,133,66,97,141,132,132,4,119,177,88,92,188,204,104,52,194,199,199,135,79,76,76,116,47,106,123,80,12,131,193,0,95,95,223,127,83,207, + 163,143,156,157,157,115,226,227,19,194,245,6,211,156,225,99,166,78,123,167,95,23,167,115,231,206,241,175,191,254,186,33,50,50,242,35,0,54,137,172, + 18,66,28,9,33,91,38,79,158,252,185,84,174,114,57,126,238,166,97,203,142,3,73,141,130,3,200,132,9,19,216,177,99,199,158,106,220,184,241,15, + 132,144,38,85,137,108,57,59,59,31,146,72,36,254,0,96,48,24,226,53,26,205,107,213,60,215,151,2,153,153,153,40,40,40,120,106,10,13,13,181, + 181,87,166,205,240,245,245,149,138,68,162,221,223,124,243,141,250,234,149,43,88,179,118,109,61,134,97,150,161,48,26,89,41,210,210,210,158,178,51,36, + 164,236,230,203,118,60,13,66,136,75,199,142,29,119,44,95,190,220,129,231,121,24,12,6,196,196,196,120,174,95,191,190,11,33,164,19,165,52,242,57, + 29,71,30,28,28,124,127,230,204,153,170,134,13,27,194,108,54,67,175,215,187,70,71,71,247,252,246,219,111,187,21,93,147,127,86,151,223,217,217,249, + 135,111,191,253,214,69,46,151,99,239,222,189,46,157,58,117,58,77,8,105,83,93,103,139,16,194,184,184,184,140,5,208,145,231,121,49,128,139,89,89, + 89,243,104,53,84,221,29,29,29,47,57,57,57,249,201,100,50,66,139,52,248,172,19,207,243,148,231,121,232,245,122,98,48,24,174,104,52,154,167,122, + 81,218,241,114,193,213,213,245,131,188,188,188,85,18,137,68,228,228,228,4,185,92,14,129,64,0,129,64,80,83,34,145,212,148,72,36,221,59,118,236, + 56,250,248,241,227,21,42,236,183,108,236,57,20,12,153,195,18,134,5,128,122,117,92,84,142,142,142,152,51,103,142,162,119,239,222,10,0,56,115,230, + 204,224,33,67,134,116,34,132,212,47,207,217,42,203,23,121,89,80,94,197,33,240,100,83,233,200,146,43,172,205,94,47,92,184,0,91,196,202,173,45, + 18,42,130,85,97,252,218,181,107,197,203,172,15,26,177,88,140,179,103,159,20,149,111,209,162,69,153,130,153,47,18,253,195,8,5,128,237,31,23,218, + 213,127,101,97,197,249,246,143,67,208,166,182,12,253,198,206,30,152,175,55,53,5,160,203,206,202,202,186,180,107,87,114,163,224,96,209,15,63,252,208, + 204,199,199,167,31,108,116,180,0,76,105,210,164,201,78,86,230,232,58,120,200,208,193,239,11,24,211,123,35,38,206,79,72,201,208,125,248,225,135,187, + 246,238,221,59,120,241,226,197,183,38,77,154,52,5,192,116,91,237,151,74,165,254,49,49,49,65,28,199,33,52,52,244,95,215,198,128,16,210,200,193, + 193,225,123,173,86,251,46,165,244,170,117,153,82,169,252,62,47,47,175,120,153,173,176,70,176,202,154,158,23,252,253,253,37,0,36,148,210,198,163,70, + 141,146,221,136,142,198,154,181,107,173,171,155,86,182,191,245,250,49,26,141,120,235,173,183,222,229,56,78,96,117,2,13,6,131,49,39,39,71,95,162, + 178,39,157,82,218,165,50,78,66,72,45,133,66,177,20,64,227,130,130,2,31,0,80,40,20,73,60,207,239,214,233,116,211,105,81,3,223,170,130,16, + 82,3,64,24,80,110,43,40,186,112,225,194,216,41,83,166,220,255,7,56,187,186,187,187,43,238,223,191,143,213,171,87,91,156,156,156,204,189,123,247, + 150,142,27,55,142,61,127,254,124,111,0,145,182,218,84,9,58,79,156,56,81,85,191,126,125,108,220,184,209,18,21,21,149,234,239,239,239,250,250,235, + 175,75,70,143,30,45,24,50,100,72,111,0,213,118,180,52,26,205,188,137,19,39,110,217,182,109,155,242,193,131,7,88,185,114,165,235,192,129,3,35, + 9,33,237,108,117,182,72,161,72,241,88,0,29,88,150,109,51,100,200,16,203,152,49,99,132,12,195,152,151,45,91,230,182,113,227,198,129,174,174,174, + 141,51,50,50,108,122,73,35,132,12,119,116,116,252,15,203,178,1,177,177,177,206,214,190,179,214,201,108,54,23,71,140,141,70,35,94,125,245,213,218, + 213,61,255,127,19,88,150,53,241,60,47,4,32,165,148,26,42,155,255,135,205,125,174,112,113,113,25,149,149,149,181,218,211,211,19,30,30,30,79,61, + 107,13,6,3,164,82,169,200,211,211,243,219,55,223,124,83,184,103,207,158,114,135,0,9,75,102,238,253,105,174,143,179,147,18,0,176,124,237,225,124, + 0,216,179,103,15,146,147,147,225,228,228,132,250,245,235,179,115,231,206,245,154,48,97,194,87,0,222,47,143,171,180,47,242,178,160,244,176,97,201,249, + 10,115,180,40,165,197,125,242,108,65,233,86,45,165,43,18,40,165,196,104,52,162,116,68,11,0,44,22,11,132,66,225,19,251,115,28,7,66,8,45, + 197,81,89,41,234,16,133,66,17,174,211,233,190,161,148,218,244,48,40,201,185,253,227,16,108,145,76,30,100,237,68,218,125,98,225,231,22,0,231,30, + 190,191,114,85,187,118,62,99,103,172,152,93,144,153,156,49,237,221,94,254,65,158,46,50,69,118,90,142,115,221,186,93,81,168,168,108,147,157,0,218, + 14,30,60,120,235,145,11,113,68,42,21,137,4,44,43,108,221,32,216,165,134,35,235,168,4,28,19,238,199,158,27,58,116,104,131,73,147,38,181,169, + 2,39,0,64,161,80,224,251,239,191,183,230,147,217,124,238,207,11,229,113,18,66,26,5,5,5,157,136,136,136,80,141,25,51,230,24,33,164,19,0, + 4,7,7,159,152,55,111,158,106,248,240,225,199,138,34,19,79,57,91,165,57,173,209,84,171,83,53,100,200,144,119,45,22,75,241,239,185,12,7,6, + 40,229,196,216,122,238,38,147,233,24,128,87,197,98,177,57,33,62,30,187,118,63,209,137,229,184,45,231,110,181,149,227,56,193,149,43,87,132,37,126, + 235,66,0,10,0,174,148,82,48,12,243,212,3,188,52,39,33,36,68,46,151,159,219,183,111,159,234,149,87,94,33,98,177,24,22,139,5,209,209,209, + 53,22,47,94,60,226,232,209,163,175,19,66,66,105,169,230,233,182,216,9,32,236,244,233,211,186,192,192,192,50,123,150,230,230,230,10,130,131,131,219, + 1,120,234,218,122,209,156,148,210,31,8,33,15,183,111,223,254,133,197,98,121,11,128,73,171,213,166,127,242,201,39,164,118,237,218,54,71,87,42,251, + 191,171,84,170,94,29,59,118,196,182,109,219,240,229,151,95,246,163,148,254,74,8,241,203,206,206,142,27,61,122,52,234,212,169,211,15,192,231,85,225, + 180,130,16,18,220,182,109,219,111,231,204,153,163,60,112,224,0,130,130,130,144,151,151,135,79,63,253,212,125,214,172,89,39,9,33,237,173,206,86,5, + 215,81,168,68,34,217,188,109,219,54,135,192,192,192,64,145,72,196,4,6,6,66,163,209,64,175,215,75,230,207,159,223,64,38,147,93,251,250,235,175, + 55,3,232,91,153,157,132,144,79,150,46,93,186,108,220,184,113,112,115,115,51,177,44,139,115,231,206,149,123,14,190,190,190,32,132,20,55,59,174,232, + 220,5,2,193,99,0,46,0,118,113,28,55,131,218,216,39,176,60,206,34,62,119,235,60,203,178,144,72,36,16,139,197,16,139,197,24,49,98,132,54, + 34,34,66,105,43,39,249,203,187,8,39,132,252,193,178,108,133,243,165,83,67,254,206,251,167,21,132,16,95,66,200,114,0,29,0,48,12,195,68,186, + 186,186,142,75,77,77,125,100,43,167,183,183,183,139,86,171,253,218,203,203,11,30,30,30,64,33,17,124,124,124,96,54,155,241,248,241,99,80,74,145, + 157,157,13,185,92,14,111,111,239,175,71,140,24,177,99,221,186,117,153,101,114,242,88,252,198,192,136,153,44,203,50,0,192,10,20,14,159,76,5,252, + 253,253,209,186,117,107,232,245,122,228,228,228,32,44,44,76,64,8,25,204,48,140,138,82,186,134,82,250,196,253,243,127,1,21,37,195,127,94,122,92, + 148,20,117,139,23,137,68,54,57,90,69,219,87,22,65,97,204,102,51,68,34,81,241,2,179,217,12,66,8,56,142,123,98,57,80,232,104,85,3,206, + 163,71,143,230,191,253,246,219,145,132,144,181,182,58,91,165,49,120,240,224,167,154,156,78,152,48,33,49,45,45,141,190,213,53,92,113,251,96,114,74, + 109,39,7,153,155,82,25,32,117,114,86,103,102,102,158,7,160,174,194,33,234,52,105,210,68,182,101,215,233,196,225,227,23,206,125,37,208,69,213,208, + 215,213,201,211,81,38,118,96,136,78,106,49,39,58,59,59,7,85,213,110,235,125,67,46,151,131,97,152,127,85,68,203,193,193,225,251,136,136,8,85, + 151,46,93,176,121,243,102,245,144,33,67,142,121,120,120,48,81,81,81,42,158,231,49,103,206,28,245,140,25,51,190,7,80,207,22,62,158,231,97,50, + 153,96,50,153,138,29,152,18,191,161,98,7,198,186,45,203,178,213,138,66,24,12,134,111,188,189,189,91,180,105,211,70,92,228,100,233,0,176,0,226, + 1,124,98,11,135,53,42,0,20,54,237,142,143,143,135,80,40,44,238,89,39,20,10,33,149,74,109,178,71,34,145,76,252,249,231,159,85,205,154,53, + 35,153,153,153,224,121,190,248,38,185,122,245,106,105,191,126,253,124,162,162,162,166,161,148,51,96,35,72,121,14,17,0,168,84,42,11,128,170,54,191, + 44,147,211,98,177,144,86,173,90,77,202,200,200,104,80,80,80,48,223,22,34,74,233,121,0,45,172,243,117,234,212,121,4,192,223,221,221,189,78,21, + 109,42,23,190,190,190,205,100,50,25,46,95,190,12,0,71,139,142,251,168,78,157,58,9,0,106,184,187,187,219,52,222,75,8,9,14,9,9,249,221, + 221,221,93,102,189,135,246,239,223,95,184,126,253,122,101,82,82,18,76,38,19,166,76,153,130,158,61,123,194,213,213,21,19,38,76,240,88,178,100,201, + 15,0,154,84,192,41,21,139,197,91,239,222,189,27,228,229,229,37,187,112,225,2,26,54,108,136,140,140,12,164,166,166,66,171,213,34,53,53,21,239, + 191,255,190,251,87,95,125,229,109,131,141,159,44,89,178,100,217,132,9,19,176,108,217,50,176,44,107,160,148,138,74,190,12,151,179,159,45,95,1,240, + 151,83,212,71,32,16,244,84,40,20,199,229,114,249,244,180,180,180,104,91,9,74,193,197,250,135,64,32,128,84,42,133,68,34,129,68,34,129,66,161, + 128,187,187,187,162,154,188,47,5,8,33,62,132,144,155,34,145,72,34,151,203,69,12,195,64,34,145,116,117,118,118,190,241,218,107,175,213,63,114,228, + 72,156,45,60,122,189,126,171,68,34,17,186,187,23,254,123,130,130,130,208,176,97,67,232,116,58,62,39,39,7,106,181,154,121,244,232,17,10,10,10, + 144,146,146,2,63,63,63,33,195,48,91,1,188,94,22,223,217,168,148,181,0,138,195,252,110,110,110,143,1,200,172,243,82,169,20,62,62,62,72,74, + 74,130,82,169,100,103,205,154,213,247,151,95,126,233,67,8,25,76,41,253,190,4,213,83,190,200,203,132,178,242,180,128,34,71,171,71,143,30,179,15, + 28,56,208,174,244,78,148,82,8,133,194,231,150,235,98,117,168,84,42,85,241,178,162,168,21,120,158,47,47,162,85,229,227,72,165,82,217,168,81,163, + 242,214,172,89,83,101,103,171,255,202,219,197,81,172,210,8,13,13,61,55,109,218,180,222,39,78,156,72,122,37,48,64,160,72,126,164,149,170,212,106, + 248,214,236,49,228,205,190,215,81,88,125,104,43,238,230,229,229,201,106,251,202,141,12,163,39,53,37,2,165,151,66,36,241,116,114,242,17,25,13,105, + 42,39,39,177,193,96,200,6,80,110,19,104,0,240,244,244,60,44,147,201,252,172,243,30,30,30,142,148,82,200,229,114,120,121,121,57,4,4,4,20, + 15,69,232,245,250,71,169,169,169,149,190,249,59,57,57,29,150,72,36,126,12,195,128,16,2,150,101,193,48,12,24,134,41,254,155,101,89,16,66,144, + 159,159,255,232,225,195,135,54,69,19,180,90,237,187,99,198,140,57,182,101,203,22,117,131,6,13,176,119,239,94,181,179,179,51,120,158,71,84,84,20, + 102,206,156,153,157,147,147,243,174,45,92,0,158,72,126,183,190,20,196,196,196,20,59,46,37,39,165,178,204,151,220,74,65,8,9,105,211,166,205,242, + 1,3,6,144,133,11,23,82,20,14,127,73,1,4,164,164,164,36,82,27,47,14,74,41,76,166,191,82,102,4,2,1,132,66,161,53,31,162,74,205, + 129,89,150,237,218,164,73,19,146,147,147,99,117,32,33,16,8,192,178,44,88,150,197,170,85,171,100,205,154,53,139,144,74,165,147,68,34,81,174,217, + 108,254,73,175,215,207,167,148,86,57,169,245,69,162,77,155,54,227,19,18,18,122,250,249,249,237,171,46,7,165,212,8,60,17,153,120,102,88,35,193, + 69,81,211,252,18,199,178,14,199,218,116,44,87,87,215,31,126,251,237,55,95,63,63,63,152,205,102,88,44,22,104,181,90,68,70,70,194,96,48,192, + 98,177,32,40,40,8,51,103,206,212,143,27,55,78,186,110,221,186,52,173,86,251,78,37,180,227,118,236,216,161,240,242,242,146,21,20,20,224,254,253, + 251,104,210,164,9,242,242,242,160,211,233,144,159,159,15,147,201,132,220,220,92,53,199,113,198,74,206,115,240,168,81,163,150,141,28,57,18,155,55,111, + 198,134,13,27,52,110,110,110,142,221,186,117,43,254,173,90,44,22,188,253,246,219,104,214,172,89,241,126,69,247,130,42,61,20,4,2,129,64,34,145, + 8,164,82,105,55,137,68,210,33,56,56,248,130,68,34,153,118,253,250,245,75,85,225,1,176,11,133,78,155,64,38,147,65,42,149,66,42,149,66,44, + 22,163,85,171,86,92,126,126,254,181,74,25,74,160,244,245,91,217,252,63,13,66,200,114,145,72,36,113,118,118,46,126,163,228,121,94,228,224,224,0, + 119,119,247,149,0,186,219,194,67,41,109,228,236,236,92,124,127,15,15,15,71,66,66,194,238,156,156,156,247,210,210,210,192,48,204,86,134,97,250,20, + 241,35,43,43,11,53,106,212,104,84,30,95,171,38,94,35,65,104,113,68,43,180,142,147,67,201,245,42,149,10,42,149,10,15,31,62,132,78,167,163, + 177,177,177,100,212,168,81,196,104,52,126,71,8,57,79,41,125,0,148,239,139,188,12,168,86,142,150,53,162,101,235,3,128,16,242,212,208,97,105,152, + 205,102,135,176,176,176,178,18,190,72,89,142,22,165,244,169,161,67,91,33,20,10,149,213,117,182,74,99,223,206,109,30,139,103,78,153,233,236,29,80, + 123,210,164,25,130,94,189,122,93,216,178,101,11,231,92,175,123,167,227,135,191,247,248,250,211,201,7,127,251,237,55,0,88,93,5,218,51,251,247,239, + 247,156,48,118,52,102,78,28,119,72,21,228,42,118,32,206,10,169,65,151,238,0,90,32,169,19,210,115,215,190,125,41,0,162,42,34,145,203,229,126, + 55,111,222,12,42,89,72,96,52,26,33,151,203,113,252,248,113,55,153,76,230,6,0,5,5,5,168,95,191,190,77,134,73,36,18,191,59,119,238,4, + 41,149,74,228,231,231,195,96,48,192,108,54,131,231,121,16,66,32,20,10,33,22,139,161,80,40,170,84,217,71,41,189,74,8,233,52,120,240,224,99, + 251,246,237,83,215,174,93,27,44,203,34,54,54,22,125,251,246,205,206,206,206,46,115,216,176,60,88,163,68,37,243,177,4,2,1,126,8,12,196,240, + 228,228,98,7,102,185,163,35,102,218,144,103,88,26,132,144,144,46,93,186,156,248,241,199,31,221,79,156,56,129,215,94,123,141,28,58,116,136,7,64, + 147,147,147,19,108,229,177,230,187,88,29,66,171,157,165,39,91,97,177,88,148,98,177,24,122,189,30,66,161,176,216,193,178,78,181,106,213,130,70,163, + 17,228,230,230,10,146,147,147,229,243,230,205,27,115,242,228,73,47,0,131,170,250,29,60,79,172,89,179,198,111,248,240,225,241,2,129,128,118,235,214, + 237,221,71,143,30,189,233,229,229,117,236,196,137,19,95,2,168,60,201,179,20,220,220,220,46,187,184,184,248,30,60,120,208,204,48,12,223,164,73,147, + 172,146,69,59,28,199,81,163,209,136,228,228,100,90,80,80,224,82,57,99,33,167,187,187,187,207,242,229,203,77,249,249,249,79,112,42,20,10,209,47, + 191,252,98,202,203,203,227,100,50,89,102,101,156,25,25,25,239,12,30,60,248,244,177,99,199,92,89,150,197,163,71,143,144,153,153,9,181,90,141,173, + 91,183,194,207,207,15,59,118,236,208,104,52,154,15,150,46,93,26,161,213,106,109,145,122,104,219,188,121,115,191,236,236,108,168,213,106,232,116,58,92, + 190,124,25,161,161,161,72,78,78,6,195,48,80,171,213,88,189,122,117,62,33,68,83,9,215,232,89,179,102,193,104,52,162,87,175,94,232,213,171,151, + 115,233,13,76,38,19,222,123,239,61,180,105,83,156,193,0,66,72,149,94,128,5,2,1,74,56,69,172,68,34,145,137,197,226,246,82,169,244,228,142, + 29,59,146,251,245,235,103,115,52,146,227,184,25,2,129,160,103,145,211,6,153,76,6,137,68,2,165,82,137,246,237,219,211,7,15,30,76,176,217,176, + 66,62,17,33,164,17,138,156,231,202,230,255,5,104,39,147,201,68,165,23,230,231,231,139,188,188,188,218,148,181,67,89,16,8,4,46,50,89,97,192, + 201,207,207,15,57,57,57,156,209,104,28,184,117,235,86,51,0,52,105,210,100,32,199,113,122,139,197,194,138,197,98,232,116,58,184,187,187,151,255,123, + 103,240,217,222,159,230,121,150,206,209,242,242,242,66,227,198,141,97,48,24,144,146,146,130,200,200,72,51,199,113,63,174,89,179,134,119,115,115,27,246, + 214,91,111,177,81,81,81,31,3,24,111,165,250,95,201,209,42,9,107,213,97,59,0,39,1,180,47,125,146,165,157,159,10,14,82,233,208,161,88,44, + 206,142,143,143,87,148,124,168,88,44,22,120,123,123,243,148,82,82,150,163,85,153,243,86,17,132,66,161,114,234,212,169,217,107,214,172,121,7,192,108, + 91,246,217,254,113,8,182,148,152,223,183,115,155,199,218,197,115,86,126,179,100,158,243,189,131,223,97,195,138,47,56,142,67,84,131,6,13,218,104,181, + 90,129,163,194,140,140,108,28,68,161,142,150,77,78,97,209,27,243,166,63,254,248,35,170,123,247,238,103,55,253,188,203,57,249,254,253,243,146,220,140, + 20,85,157,32,129,200,199,175,79,158,94,47,26,56,112,160,27,128,183,42,226,98,89,22,217,217,217,72,77,125,114,164,83,46,151,35,38,38,230,169, + 109,109,1,195,48,224,56,14,59,119,238,132,92,46,135,66,161,120,98,178,58,89,213,13,34,120,120,120,48,78,78,78,79,68,97,170,202,101,205,209, + 50,26,141,48,26,141,48,153,76,28,0,161,64,32,192,251,137,137,197,81,158,170,56,48,37,65,8,169,215,179,103,207,19,91,183,110,117,187,124,249, + 50,226,226,226,176,119,239,222,123,132,144,113,2,129,224,237,170,242,149,72,210,231,114,115,115,133,185,185,185,197,209,65,161,80,88,28,49,180,5,28, + 199,137,4,2,65,241,219,168,117,42,249,125,178,44,11,15,15,15,120,122,122,98,237,218,181,162,128,128,128,158,85,254,18,158,35,150,44,89,82,103, + 249,242,229,27,183,108,217,114,240,157,119,222,249,37,58,58,122,168,163,163,227,159,199,143,31,159,39,145,72,170,219,83,206,227,246,237,219,114,179,217, + 98,173,140,19,91,157,90,107,180,147,227,57,52,111,214,172,194,168,112,105,206,27,55,110,40,74,112,74,202,225,212,87,70,68,41,189,67,8,105,211, + 185,115,231,115,191,255,254,187,147,159,159,31,146,146,146,144,148,148,132,58,117,234,96,193,130,5,186,220,220,220,86,69,206,213,175,54,218,231,237,228, + 228,36,140,143,143,135,197,98,65,163,70,141,176,122,245,106,12,28,56,16,245,235,215,71,110,110,46,110,222,188,137,205,155,55,59,137,68,162,10,239, + 29,0,214,206,153,51,231,149,207,63,255,28,203,151,47,199,206,157,59,179,8,33,42,79,79,79,214,42,65,2,0,67,134,12,121,34,175,214,214,251, + 136,117,91,107,212,201,234,108,73,36,18,72,165,82,198,193,193,65,22,22,22,86,165,164,122,74,233,93,133,66,113,92,42,149,118,147,74,165,172,149, + 187,101,203,150,188,94,175,191,59,117,234,212,51,85,225,43,226,188,90,149,249,127,18,214,156,180,210,16,139,197,240,244,244,180,153,71,34,145,16,235, + 189,209,98,177,32,39,39,135,243,242,242,42,30,222,191,114,229,10,231,239,239,207,177,44,203,138,197,98,16,66,32,151,203,203,189,73,83,142,206,233, + 53,112,70,113,213,33,17,40,84,159,76,45,116,212,175,92,185,2,147,201,132,200,200,72,243,210,165,75,147,179,179,179,63,1,32,56,124,248,240,224, + 201,147,39,179,238,238,238,197,121,180,21,249,34,47,3,74,15,25,150,78,134,63,217,163,71,15,82,84,90,73,138,118,0,96,187,163,85,244,144,168, + 244,105,73,8,65,74,74,74,241,188,187,187,123,149,143,101,43,92,92,92,116,45,90,180,80,102,100,100,216,122,19,123,2,86,39,107,209,188,217,206, + 153,183,206,35,49,57,5,154,52,115,212,153,63,31,238,6,80,152,17,189,174,222,73,140,184,181,202,86,206,122,110,242,240,6,222,202,221,93,186,247, + 172,49,224,195,241,204,71,31,125,212,122,240,224,193,57,239,188,243,206,88,7,7,135,96,147,201,148,181,235,192,129,184,1,3,6,4,112,28,55,184, + 188,50,88,43,10,10,10,30,181,111,255,87,53,172,187,187,187,234,232,209,163,30,113,113,113,24,61,122,116,122,82,82,82,118,201,109,109,177,209,100, + 50,61,10,15,15,47,119,184,208,58,164,8,0,121,121,121,54,113,2,133,201,240,193,193,193,39,162,162,162,84,148,82,220,185,115,7,44,203,162,78, + 157,58,248,237,183,223,212,221,187,119,47,55,25,190,44,232,245,122,248,249,249,65,175,215,67,167,211,229,3,144,108,13,8,0,0,124,156,153,137,203, + 75,151,226,194,194,133,214,99,219,106,38,196,98,113,216,91,111,189,117,108,211,166,77,110,177,177,177,136,139,139,195,87,95,125,117,47,51,51,179,53, + 165,52,13,192,161,42,156,115,160,167,167,103,183,238,221,187,123,3,128,78,167,35,127,252,241,7,164,82,105,241,181,176,111,223,62,36,37,37,129,16, + 2,39,39,39,95,66,72,0,165,244,97,121,156,148,82,242,240,225,67,44,90,180,8,60,207,99,242,228,201,8,10,10,42,118,176,30,61,122,132,121, + 243,230,129,227,56,204,154,53,11,117,234,212,129,217,108,150,18,66,4,148,82,75,121,188,47,18,19,38,76,184,183,123,247,238,131,9,9,9,175,47, + 94,188,184,29,33,132,159,52,105,210,34,149,74,85,173,68,76,43,180,186,2,196,222,143,135,133,227,96,177,88,144,152,24,15,119,119,119,24,141,133, + 67,117,142,42,229,83,185,159,127,51,103,190,217,108,214,245,233,211,71,189,115,231,78,82,167,78,29,60,120,240,0,66,161,16,132,144,124,91,171,12, + 75,32,73,163,209,4,177,44,43,186,123,247,46,252,253,253,209,188,121,115,204,159,63,31,25,25,25,176,88,44,112,119,119,231,205,102,243,21,163,209, + 120,170,34,34,74,233,38,66,136,146,227,184,101,243,230,205,67,102,102,166,211,238,221,187,181,215,175,95,119,72,79,79,47,119,191,162,251,128,77,47, + 149,214,252,169,18,14,22,148,74,37,90,180,104,65,187,116,233,194,39,39,39,199,219,82,177,94,18,114,185,124,186,68,34,233,32,145,72,100,214,104, + 86,167,78,157,248,248,248,248,114,146,62,254,94,188,200,74,70,47,47,175,72,165,82,217,51,43,43,235,137,31,96,171,86,173,76,30,30,30,167,109, + 229,113,112,112,200,98,89,214,5,0,146,146,146,160,80,40,68,247,239,223,95,72,8,153,2,0,1,1,1,11,53,26,141,40,160,232,126,234,233,233, + 9,163,209,88,238,11,203,185,43,169,223,1,248,206,58,239,226,226,146,146,147,147,35,251,226,139,47,180,11,23,46,44,224,56,206,0,224,120,118,118, + 118,177,142,150,191,191,127,142,80,40,116,86,171,213,62,37,168,158,242,69,94,38,84,24,209,2,138,245,43,138,97,13,15,219,122,67,177,229,109,220, + 154,163,85,50,202,96,77,120,47,235,88,69,15,245,106,13,29,22,57,89,210,93,187,118,109,93,188,120,241,69,91,247,43,153,163,181,238,203,185,139, + 173,78,214,245,51,191,227,215,219,57,25,147,23,46,91,94,29,123,0,32,212,77,209,208,211,195,245,228,210,133,115,85,247,14,126,135,95,214,125,69, + 175,95,186,212,236,210,165,75,239,141,30,61,186,38,10,127,88,26,0,215,0,12,160,148,230,84,198,153,152,152,248,68,126,84,80,80,208,29,145,72, + 228,33,151,203,145,148,148,164,189,115,231,78,149,135,100,210,211,211,95,136,62,142,163,163,227,247,243,230,205,83,1,64,84,84,20,250,246,237,155,13, + 0,191,253,246,155,58,48,48,16,235,215,175,87,15,31,62,220,166,100,120,179,217,156,93,175,94,225,102,60,207,35,39,39,135,7,128,15,83,82,176, + 222,203,11,2,129,0,23,22,46,196,116,179,25,243,171,232,192,123,123,123,239,220,176,97,131,91,70,70,6,226,226,226,48,123,246,236,187,233,233,233, + 173,41,165,229,63,125,202,0,33,164,126,72,72,200,209,227,199,143,187,41,149,74,104,181,90,104,181,90,12,25,50,4,3,7,14,132,193,96,192,246, + 237,219,177,119,239,94,168,84,42,104,181,90,232,116,58,167,30,61,122,156,35,132,180,45,175,66,139,82,74,187,118,237,138,211,167,79,131,101,89,52, + 107,214,12,153,153,197,197,64,240,240,240,40,107,29,139,194,235,253,31,113,180,4,2,1,141,140,140,92,220,174,93,59,36,36,36,188,222,164,73,147, + 111,134,14,29,154,244,172,188,14,10,25,66,234,248,193,104,52,194,96,48,160,103,215,246,184,125,251,54,52,154,44,228,231,231,195,217,197,177,202,82, + 31,207,139,147,16,82,163,107,215,174,39,126,252,241,71,151,205,155,55,27,219,183,111,47,254,230,155,111,136,74,165,66,90,90,90,117,79,57,242,204, + 153,51,126,157,59,119,174,123,235,214,45,68,70,70,194,104,52,162,113,227,198,136,141,141,69,139,22,45,160,213,106,47,94,186,116,105,175,45,100,148, + 210,229,69,47,33,203,102,205,154,133,61,123,246,136,9,33,176,33,25,222,166,40,164,88,44,46,174,10,84,42,149,104,217,178,37,223,169,83,39,222, + 104,52,38,198,199,199,127,54,104,208,160,170,228,181,2,0,210,210,210,162,131,131,131,47,20,13,63,50,45,90,180,160,70,163,49,113,248,240,225,54, + 191,0,189,72,60,107,37,99,69,240,244,160,62,97,127,0,0,32,0,73,68,65,84,244,252,196,213,213,181,115,173,90,181,240,248,241,99,81,81,110, + 154,169,105,211,166,38,79,79,207,143,109,229,145,72,36,183,68,34,81,91,107,164,54,62,62,30,148,210,201,245,235,215,31,151,151,151,135,204,204,76, + 177,74,165,42,126,169,174,91,183,46,12,6,195,45,91,249,89,150,157,227,239,239,31,33,18,137,230,167,167,167,63,37,11,65,8,17,135,135,135,171, + 68,34,17,76,38,211,19,206,102,105,95,228,101,129,173,57,90,164,44,103,171,42,17,45,91,162,6,214,4,251,146,243,86,167,174,244,177,170,59,52, + 229,232,232,104,176,58,89,243,230,205,179,217,201,42,137,29,63,126,239,229,200,231,215,72,190,248,27,98,174,95,198,238,155,217,25,147,23,46,27,219, + 235,173,65,143,75,110,215,127,229,109,108,31,81,57,95,176,187,162,190,143,135,203,201,175,150,46,82,101,222,58,143,148,212,84,252,118,241,82,148,145, + 210,155,0,38,87,199,198,178,96,13,235,203,229,114,176,44,251,175,250,193,230,228,228,188,59,124,248,240,99,243,230,205,83,207,152,49,35,59,43,43, + 171,19,0,116,239,222,253,216,250,245,235,213,211,166,77,203,205,206,206,182,41,25,62,43,43,235,137,150,53,69,50,14,174,214,243,23,8,4,104,21, + 17,81,101,39,75,44,22,215,111,214,172,153,3,207,243,120,248,240,33,29,63,126,252,189,212,212,212,42,59,89,0,224,233,233,57,241,248,241,227,110, + 155,54,109,202,221,178,101,75,38,207,243,194,240,240,112,223,87,94,121,133,108,221,186,21,0,48,96,192,0,76,158,60,25,55,110,220,128,66,161,64, + 235,214,173,185,217,179,103,187,127,242,201,39,31,163,80,39,233,41,112,28,39,10,8,8,56,6,160,227,173,91,183,0,224,28,165,180,88,52,181,162, + 117,54,128,207,203,203,19,42,149,202,50,61,9,81,225,219,80,85,135,250,138,57,207,158,61,187,232,203,47,191,220,253,233,167,159,22,59,145,213,228, + 4,240,116,244,105,208,219,239,128,163,4,143,53,121,208,235,13,208,25,184,42,23,243,60,15,78,66,136,188,75,151,46,135,127,250,233,39,207,243,231, + 207,131,227,56,62,54,54,246,97,159,62,125,84,147,38,77,114,121,134,34,163,21,131,6,13,234,119,246,236,89,77,221,186,117,157,47,94,188,136,180, + 180,52,88,44,22,116,236,216,17,98,177,56,126,225,194,133,34,0,43,108,37,44,114,182,52,63,254,248,227,48,149,74,21,74,8,113,201,31,57,18, + 78,223,125,135,149,43,159,150,5,252,240,195,15,193,48,140,77,14,187,53,205,160,85,171,86,92,251,246,237,169,94,175,191,27,31,31,63,241,89,157, + 34,137,68,50,77,42,149,158,116,112,112,144,117,233,210,133,143,143,143,255,236,89,248,94,22,92,188,120,49,105,244,232,209,161,42,149,106,121,155,54, + 109,58,184,184,184,48,78,78,78,145,62,62,62,227,26,54,108,248,200,86,30,161,80,56,84,161,80,220,179,88,44,108,209,11,30,0,192,98,177,136, + 25,134,65,64,64,64,241,179,164,89,179,102,240,244,244,228,110,223,190,61,212,86,254,180,180,180,39,170,16,203,192,136,86,173,90,9,12,6,3,226, + 226,226,158,24,238,45,203,23,121,25,80,122,216,16,40,225,124,81,74,177,127,255,126,90,242,147,82,10,31,31,159,4,179,217,76,111,2,244,218,181, + 107,244,195,15,63,172,112,210,235,245,212,221,221,61,197,186,127,209,77,164,115,201,121,31,31,159,4,131,193,240,196,126,6,131,129,122,120,120,112,5, + 5,5,79,113,22,20,20,80,95,95,223,164,138,56,75,79,0,134,92,189,122,117,205,244,233,211,155,87,180,93,185,156,107,67,232,230,205,155,255,67, + 41,109,215,38,212,239,207,254,225,30,180,85,144,123,242,222,29,63,14,164,148,182,43,61,245,11,5,173,140,51,196,67,81,175,83,88,205,172,63,15, + 255,68,143,127,57,134,126,217,59,136,54,241,85,102,135,184,202,194,109,181,209,150,115,167,148,34,44,44,236,14,207,243,212,104,52,210,176,176,176,216, + 231,193,89,213,169,34,78,0,141,28,29,29,111,1,104,84,114,153,90,173,126,98,89,85,237,4,112,157,82,74,53,26,13,213,106,181,212,96,48,80, + 142,227,104,73,20,109,83,33,103,64,64,64,236,241,227,199,249,160,160,160,132,26,53,106,156,69,145,190,85,117,206,221,203,203,235,225,253,251,247,105, + 237,218,181,19,138,184,63,209,233,116,180,52,116,58,29,237,208,161,3,141,141,141,165,254,254,254,250,216,216,88,234,229,229,21,83,145,157,0,106,249, + 248,248,28,115,117,117,141,4,16,100,235,186,202,190,207,237,219,183,7,82,74,63,160,148,126,88,206,244,1,165,52,228,159,230,164,148,194,213,213,53, + 145,82,74,11,10,244,52,59,59,135,166,166,62,166,121,121,121,52,47,47,143,222,186,117,155,94,186,116,153,70,223,184,65,125,125,125,51,255,110,78, + 23,23,151,117,169,169,169,218,115,231,206,229,175,93,187,54,223,211,211,243,22,0,63,0,193,78,78,78,169,99,198,140,161,14,14,14,143,108,253,45, + 149,90,30,42,20,10,175,46,94,188,248,143,253,251,247,63,222,187,119,175,113,227,198,141,137,163,71,143,62,37,16,8,174,2,8,173,42,167,117,170, + 81,163,198,173,212,212,84,106,177,88,168,217,108,166,38,147,137,154,76,38,106,52,26,169,209,104,164,6,131,129,30,57,114,196,226,233,233,121,210,22, + 206,185,115,231,230,173,95,191,158,95,182,108,217,229,5,11,22,180,174,232,216,85,177,147,82,138,95,126,249,37,54,38,38,134,30,59,118,236,193,243, + 226,172,234,84,22,39,195,48,38,0,20,192,171,40,212,185,170,112,254,159,178,179,83,167,78,179,6,14,28,72,187,117,235,70,27,55,110,252,212,212, + 164,73,19,58,106,212,40,186,127,255,126,186,116,233,210,89,207,106,39,10,3,59,193,0,22,116,234,212,201,124,250,244,105,58,96,192,0,10,160,171, + 117,155,178,124,145,151,109,2,240,97,233,101,86,121,7,82,242,19,0,76,38,83,194,157,59,119,188,234,90,44,44,0,172,90,245,100,26,82,17,97, + 49,78,159,62,109,33,132,220,67,5,48,153,76,9,199,143,31,247,88,185,114,101,113,152,33,33,33,1,22,139,133,79,78,78,102,190,249,230,155,39, + 182,63,121,242,164,197,98,177,196,87,196,89,26,148,210,205,0,54,63,143,62,119,167,110,196,141,59,252,219,30,215,87,155,183,201,86,57,59,151,249, + 6,103,85,144,175,8,68,192,204,95,178,112,174,218,58,4,249,243,149,212,108,189,129,235,112,43,61,255,250,51,27,89,10,90,173,54,206,122,238,58, + 157,174,74,223,221,223,1,90,152,127,85,175,178,101,213,1,207,243,112,116,116,4,80,245,202,168,18,182,196,126,240,193,7,25,113,113,113,111,82,74, + 51,158,197,30,74,233,217,232,232,104,255,33,67,134,40,131,130,130,238,19,66,132,239,191,255,190,201,211,211,83,116,230,204,25,51,0,210,174,93,59, + 65,106,106,42,77,74,74,210,188,241,198,27,121,195,135,15,119,185,118,237,154,152,231,249,10,69,11,105,97,57,116,167,170,174,171,12,253,250,245,187, + 143,50,132,67,159,5,47,130,211,10,173,174,0,247,30,38,130,167,20,28,199,129,43,138,66,89,171,60,249,156,124,88,44,85,27,45,125,86,78,161, + 80,216,122,249,242,229,221,25,134,97,46,92,184,96,88,178,100,73,66,122,122,122,111,74,105,60,0,16,66,218,111,222,188,249,7,27,164,28,202,4, + 165,244,38,33,164,197,103,159,125,54,22,64,107,0,53,81,168,233,118,6,192,10,250,12,10,230,9,9,9,221,26,52,104,176,135,16,226,88,222,54, + 12,195,164,164,166,166,246,45,111,125,73,148,39,30,250,60,208,191,127,255,32,192,182,174,36,127,39,94,150,74,198,163,71,143,126,254,230,155,111,10, + 252,252,252,166,249,249,249,49,89,89,89,208,106,181,96,24,6,158,158,158,8,11,11,131,167,167,39,127,235,214,173,5,159,125,246,89,165,154,124,161, + 161,161,129,102,179,185,54,195,48,129,0,2,41,165,129,132,144,64,0,206,0,208,172,89,51,149,191,191,191,224,213,87,95,69,243,230,205,113,242,228, + 73,236,216,177,227,59,74,233,97,43,71,89,190,200,63,13,66,72,59,20,22,211,205,70,81,162,62,45,167,221,87,121,149,135,229,150,100,165,167,167, + 119,237,216,177,227,239,44,203,6,216,98,12,165,52,238,241,227,199,101,138,153,149,228,28,58,116,232,19,156,28,199,25,50,51,51,63,106,217,178,229, + 106,150,101,159,40,167,224,121,254,81,90,90,218,223,218,171,175,180,142,86,215,238,111,62,211,195,22,0,28,68,76,237,152,253,235,241,56,45,3,63, + 95,73,205,202,51,114,237,239,164,235,170,43,216,87,33,226,226,226,186,189,8,222,151,0,233,54,8,146,86,58,252,247,240,225,195,94,207,201,30,164, + 166,166,126,17,17,17,241,218,130,5,11,220,14,30,60,168,2,10,95,80,250,246,237,155,22,29,29,221,6,128,68,175,215,31,93,176,96,129,219,156, + 57,115,92,80,36,198,216,163,71,143,199,143,31,63,182,181,149,211,255,45,196,98,241,233,90,1,126,109,128,191,94,252,74,188,85,22,127,242,60,255, + 184,28,138,23,194,201,178,236,167,205,155,55,103,63,253,244,211,199,7,15,30,180,54,210,45,169,199,117,7,21,136,146,218,130,34,103,106,73,209,244, + 220,64,41,77,0,208,248,121,114,254,63,130,190,36,149,140,123,246,236,153,49,112,224,192,205,206,206,206,223,7,6,6,214,245,240,240,80,201,100,50, + 24,12,134,60,163,209,24,115,231,206,157,119,34,34,34,30,216,194,181,121,243,102,22,128,136,231,121,41,195,48,10,0,42,66,136,19,138,28,45,66, + 8,76,38,19,226,226,226,48,125,250,116,238,216,177,99,75,1,204,170,130,185,77,1,184,225,175,251,184,27,0,35,0,113,209,178,170,106,178,217,138, + 147,148,82,66,8,161,214,79,148,225,36,151,37,86,74,43,107,193,67,41,213,161,132,2,243,243,64,37,156,126,207,243,88,207,130,193,134,37,219,176, + 110,201,19,125,14,1,148,63,95,73,142,86,78,129,101,244,138,195,55,190,48,88,40,111,178,240,195,238,164,233,110,190,32,211,255,111,65,109,232,15, + 248,119,131,82,26,77,8,105,57,122,244,232,25,114,185,188,25,0,228,231,231,95,72,78,78,158,75,139,170,10,43,91,111,71,249,72,76,76,172,178, + 204,198,223,193,105,52,26,199,181,108,217,242,107,142,227,190,52,155,205,85,150,27,176,195,142,191,19,63,255,252,243,3,20,61,151,251,247,239,207,2, + 192,246,237,219,171,92,13,60,100,200,16,142,22,54,50,215,163,176,123,70,46,10,5,183,9,0,232,116,186,172,228,228,228,91,28,199,221,2,240,3, + 173,122,197,173,27,33,100,63,165,180,39,0,88,255,46,185,236,5,161,61,33,36,178,232,179,220,166,215,101,69,178,172,168,158,200,208,255,48,182,223, + 248,75,11,172,180,3,85,217,124,121,136,73,213,70,226,25,223,96,237,120,57,65,11,133,114,7,87,119,189,29,47,31,138,134,8,123,255,211,118,216, + 97,71,85,81,29,7,203,138,155,55,111,190,176,20,129,127,18,69,195,132,237,138,102,43,28,210,44,43,154,5,84,189,103,153,29,118,216,97,135,29, + 118,216,97,199,255,5,8,33,237,8,33,180,196,212,174,156,237,62,164,148,174,183,78,37,157,46,2,160,115,89,59,209,42,116,37,47,42,173,175,18, + 42,227,183,115,218,57,237,156,118,78,59,167,157,211,206,249,191,199,89,77,244,168,100,232,240,192,11,56,38,74,228,102,205,166,148,206,182,206,151,177, + 221,19,137,240,79,204,191,224,50,199,191,85,58,192,206,105,231,180,115,218,57,237,156,118,78,59,231,203,201,89,201,212,97,202,148,41,83,81,40,141, + 65,167,76,153,50,149,82,218,163,208,141,161,61,94,212,113,81,56,108,72,75,76,237,42,216,246,67,235,84,114,185,61,71,203,14,59,236,176,195,14, + 59,236,248,183,227,220,194,133,11,243,23,46,92,104,77,124,79,7,64,104,97,52,171,202,130,210,182,130,22,230,104,217,36,55,65,43,107,193,243,119, + 131,16,226,205,8,68,239,10,69,146,14,160,124,24,0,128,97,111,112,70,253,9,139,197,244,61,165,52,185,186,220,245,8,169,87,71,45,219,107,224, + 56,81,66,158,177,223,45,74,255,168,14,79,127,66,90,73,196,226,35,18,181,90,86,214,122,67,118,118,129,193,104,124,109,59,165,103,171,107,171,29, + 118,216,97,135,29,118,252,157,32,132,40,156,156,156,142,49,12,227,87,98,25,202,250,27,0,56,142,75,209,104,52,175,209,10,180,5,95,4,103,41, + 24,1,84,235,89,254,60,81,157,161,67,1,240,68,111,161,191,165,99,182,64,36,29,174,118,245,156,255,159,161,227,92,130,130,235,146,26,53,124,0, + 10,196,39,36,122,220,187,27,219,233,151,45,43,38,136,164,210,233,38,189,254,219,170,114,135,18,162,240,115,144,156,249,118,202,219,106,1,44,24,52, + 239,199,67,161,132,212,184,89,40,45,97,51,250,19,210,74,237,226,114,120,225,209,163,50,167,134,13,159,88,71,41,45,236,175,119,253,186,108,218,107, + 175,29,238,79,72,87,187,179,245,191,7,66,136,167,74,165,250,68,40,20,182,55,153,76,126,98,177,56,129,227,184,200,172,172,172,229,148,210,103,238, + 211,103,199,191,27,33,94,14,109,234,6,250,253,152,156,250,248,74,174,222,248,126,76,82,158,230,159,182,201,142,231,7,165,82,121,153,97,24,95,224, + 47,39,192,218,179,215,58,95,250,147,231,249,7,153,153,153,45,203,227,36,132,4,58,59,59,175,6,208,180,50,193,228,162,161,166,75,26,141,230,35, + 90,88,125,92,22,159,210,201,201,233,115,66,72,127,134,97,216,202,206,137,231,121,142,82,186,61,43,43,107,22,165,52,175,188,237,156,156,156,142,222, + 190,125,187,169,187,187,123,165,145,26,139,197,130,248,248,120,183,102,205,154,157,2,80,174,66,247,243,224,252,187,125,145,234,160,44,39,171,50,148,213, + 235,240,133,42,178,138,101,202,189,173,59,246,236,48,106,236,167,138,171,209,49,56,114,242,60,114,117,6,176,12,3,181,82,142,224,224,218,100,217,250, + 157,174,223,173,93,246,165,204,65,221,163,64,155,253,70,85,248,21,114,193,244,201,125,154,41,92,156,57,128,231,48,177,123,184,98,218,254,43,211,1, + 76,181,149,163,216,201,58,118,76,158,246,248,49,230,120,123,67,96,177,64,202,48,144,18,2,41,195,64,33,149,162,219,198,141,152,123,240,160,124,198, + 235,175,219,157,173,255,49,40,149,202,161,193,193,193,75,54,108,216,224,82,171,86,45,40,20,10,104,52,26,215,59,119,238,52,26,63,126,252,96,71, + 71,199,136,156,156,156,117,255,180,157,118,188,56,240,60,222,221,52,255,35,159,148,71,119,125,70,44,216,22,28,226,42,111,127,59,35,63,245,159,182, + 235,121,194,197,197,165,147,171,171,235,26,216,88,129,78,41,229,50,50,50,222,211,104,52,149,246,144,37,132,52,114,112,112,248,94,171,213,190,75,75, + 9,116,18,66,26,57,254,183,189,239,14,143,162,218,223,127,207,204,206,214,108,54,155,178,9,9,1,34,72,8,23,41,134,162,136,20,133,32,245,75, + 199,2,161,36,38,20,191,94,192,43,92,21,185,33,128,21,47,168,8,38,134,162,161,8,6,148,72,53,40,130,23,126,84,81,64,8,69,122,72,207, + 110,178,201,102,251,249,254,145,157,205,18,178,45,217,112,241,247,228,125,158,121,118,118,231,204,187,103,102,206,156,121,231,243,249,156,207,9,8,200,212, + 104,52,247,109,115,5,169,84,90,80,93,93,29,234,170,140,72,36,42,212,235,245,97,238,184,24,134,137,188,115,231,78,168,76,38,131,197,98,129,213, + 106,133,213,106,181,191,72,219,132,16,128,26,81,100,177,88,208,177,99,71,163,43,78,127,127,255,207,10,11,11,7,241,243,4,242,251,58,195,157,59, + 119,6,117,234,212,233,51,0,245,38,230,14,12,12,92,252,234,171,175,206,233,220,185,51,0,216,235,201,127,22,23,23,99,246,236,217,246,255,176,90, + 173,248,225,135,31,94,157,54,109,26,0,204,117,113,236,109,66,67,67,73,114,178,235,28,69,41,41,41,72,73,73,193,39,159,124,66,56,142,83,186, + 42,235,43,206,7,165,69,60,133,67,48,124,127,184,206,12,191,171,206,124,135,246,224,252,7,234,58,20,8,37,211,159,236,55,116,192,236,57,243,253, + 54,127,251,35,114,255,248,13,23,126,217,114,79,153,30,131,167,33,191,184,2,211,102,254,67,78,88,193,0,161,68,54,221,88,93,181,206,19,254,78, + 132,132,117,10,146,253,239,147,189,30,227,238,72,115,209,34,80,138,167,187,183,231,90,237,251,253,127,59,17,242,241,121,74,221,102,136,174,43,178,50, + 94,122,9,125,77,38,132,178,44,88,66,192,2,96,8,65,181,94,143,19,147,39,163,215,87,95,225,95,217,217,178,197,35,71,122,37,182,228,114,249, + 175,132,144,64,173,86,59,156,214,76,44,253,208,131,16,210,73,46,151,239,162,148,150,105,181,218,199,255,219,245,225,65,8,9,7,80,68,41,53,215, + 249,93,8,64,73,41,45,244,134,79,34,145,188,252,226,139,47,174,88,181,106,149,172,160,160,0,121,121,121,176,88,44,144,72,36,136,142,142,38,57, + 57,57,193,243,231,207,95,174,80,40,196,229,229,229,31,123,81,79,1,199,113,233,65,65,65,67,195,194,194,252,10,11,11,171,212,106,245,15,122,189, + 254,101,218,192,105,83,8,33,12,199,113,147,162,162,162,70,71,68,68,132,221,185,115,167,248,246,237,219,59,245,122,253,122,74,105,131,38,106,182,241, + 134,3,232,10,91,182,122,0,119,163,162,162,206,93,187,118,205,171,115,233,134,51,47,42,42,234,188,183,156,132,16,63,0,91,1,68,184,41,154,7, + 96,34,245,210,154,205,131,161,214,221,75,87,102,36,164,78,125,154,172,155,59,40,122,198,39,57,71,59,69,72,251,157,207,211,221,106,8,223,195,8, + 66,72,240,180,105,211,90,38,36,36,136,221,151,6,150,45,91,86,177,113,227,70,167,211,243,56,240,62,30,29,29,253,211,230,205,155,21,207,62,251, + 236,1,66,200,64,94,80,17,66,30,239,208,161,195,79,203,150,45,83,36,38,38,222,179,205,29,244,122,189,202,104,52,130,115,50,89,124,101,101,37, + 252,253,253,85,158,112,1,128,84,42,197,150,45,91,192,113,28,56,142,67,89,89,25,34,35,35,237,223,133,66,161,125,189,117,235,214,110,249,44,22, + 75,47,150,101,161,213,106,237,211,55,89,44,22,168,213,106,80,74,33,22,139,237,83,58,57,108,239,229,140,143,16,50,33,34,34,2,155,55,111,134, + 193,96,184,111,187,66,161,192,217,179,181,147,140,176,44,139,39,158,120,130,33,132,76,128,11,161,101,75,188,137,164,164,36,176,44,11,150,101,193,48, + 140,125,157,95,44,22,11,82,82,82,64,41,117,59,165,89,83,112,62,100,56,72,93,100,134,167,148,222,5,240,224,99,180,168,195,16,79,66,72,132, + 191,50,244,189,89,127,255,135,124,215,161,223,113,243,214,205,251,68,22,0,156,220,191,30,131,94,252,39,78,95,8,199,164,233,175,200,127,63,113,232, + 61,66,200,126,62,102,139,186,24,54,26,224,47,252,240,159,19,159,150,104,77,121,168,8,4,90,182,19,129,189,94,137,249,35,186,138,255,190,243,215, + 15,0,196,187,171,167,88,36,218,255,110,78,142,148,23,89,125,244,122,136,0,152,1,8,5,2,48,132,192,96,54,67,103,177,32,220,106,197,149,105, + 211,240,232,250,245,88,184,99,135,236,173,184,184,253,0,100,238,234,9,0,66,161,48,60,43,43,43,116,238,220,185,7,9,33,67,40,165,167,92,158, + 76,15,56,27,2,79,57,9,33,221,187,117,235,182,111,209,162,69,65,238,58,101,79,57,165,82,233,56,150,101,87,91,44,150,89,58,157,46,203,91, + 78,66,8,3,32,53,33,33,97,250,225,195,135,175,16,66,6,209,154,204,196,32,132,8,30,125,244,209,156,190,125,251,182,35,132,124,1,32,181,174, + 240,112,194,217,178,109,219,182,203,86,173,90,37,187,116,233,18,180,90,45,56,142,195,164,73,147,144,149,149,5,157,78,7,177,88,140,247,223,127,223, + 239,216,177,99,111,17,66,118,82,74,111,184,59,118,66,136,48,32,32,224,226,234,213,171,85,163,70,141,98,170,171,171,97,181,90,253,182,110,221,58, + 42,37,37,229,105,66,72,7,103,98,203,5,39,19,30,30,190,238,139,47,190,232,240,236,179,207,10,116,58,29,172,86,107,248,174,93,187,18,223,124, + 243,205,1,132,144,41,148,210,122,19,16,186,186,70,132,144,199,101,50,89,167,89,179,102,21,141,26,53,234,14,0,156,56,113,130,249,237,183,223,250, + 44,89,178,228,198,219,111,191,125,186,1,156,221,253,253,253,99,146,147,147,139,71,140,24,145,39,20,10,173,255,249,207,127,4,185,185,185,79,191,243, + 206,59,87,223,124,243,205,122,231,253,116,194,185,245,200,145,35,253,35,35,35,173,182,78,143,218,254,131,50,12,67,109,159,184,120,241,226,35,253,251, + 247,223,4,224,127,220,113,118,108,33,159,245,220,51,79,126,40,21,11,165,86,179,9,22,179,17,67,251,117,1,75,44,56,118,254,38,122,183,149,97, + 253,236,158,109,146,211,142,159,237,28,236,255,196,217,146,138,92,119,156,141,197,131,226,204,206,206,54,230,230,230,86,213,87,190,46,206,158,61,123,159, + 194,169,143,83,46,151,103,110,218,180,73,17,30,30,142,117,235,214,41,167,79,159,126,128,16,50,16,0,58,116,232,240,211,169,83,167,20,0,176,100, + 201,18,229,194,133,11,51,113,255,252,167,245,30,187,66,161,56,144,145,145,49,112,234,212,169,196,96,48,192,113,81,42,149,184,126,253,58,100,50,217, + 1,79,142,157,16,2,139,197,98,23,82,63,252,240,3,214,172,89,131,45,91,182,216,197,150,64,32,176,111,231,247,113,199,9,192,46,162,142,29,59, + 134,140,140,12,132,134,134,34,36,36,4,42,149,10,189,122,245,130,159,159,159,93,108,185,227,44,46,46,134,213,234,217,59,19,165,20,26,141,198,237, + 177,243,168,43,130,234,19,70,142,214,185,166,230,124,88,193,139,200,134,194,46,180,108,166,186,122,83,203,251,2,140,64,56,105,194,212,87,131,111,23, + 150,227,78,129,6,44,83,107,169,142,29,52,21,2,150,193,241,125,53,134,43,134,101,161,169,212,67,173,53,98,252,212,57,65,95,172,88,52,9,192, + 251,174,248,187,16,18,221,59,34,104,76,167,78,173,153,63,196,23,16,59,244,23,88,172,0,61,60,18,143,151,133,178,29,247,139,198,116,33,100,217, + 239,148,94,114,197,35,86,42,165,129,93,187,34,53,34,2,253,76,38,8,41,69,92,65,1,126,155,51,7,250,172,44,48,0,132,227,198,225,153,149, + 43,113,40,34,2,45,116,58,168,231,205,131,106,239,94,8,21,138,122,131,230,235,3,33,4,3,6,12,64,78,78,78,240,144,33,67,246,113,28,55, + 214,100,50,29,242,116,127,71,40,149,202,147,2,129,32,210,93,57,179,217,124,91,173,86,247,240,150,159,227,184,126,125,250,244,217,177,125,251,246,64, + 163,209,232,147,183,16,177,88,60,100,204,152,49,25,107,214,172,81,36,38,38,102,136,197,226,42,189,94,191,215,211,253,109,34,107,105,90,90,218,140, + 164,164,36,101,98,98,34,189,114,229,138,18,0,111,29,81,245,237,219,247,209,140,140,140,22,61,123,246,124,53,57,57,89,72,8,89,232,206,202,35, + 151,203,103,102,100,100,132,20,23,23,219,69,22,199,113,184,125,251,54,164,82,41,24,134,1,195,48,224,56,14,239,189,247,94,240,204,153,51,231,0, + 152,227,193,241,166,175,94,189,90,53,120,240,96,230,218,181,107,96,24,6,18,137,4,47,189,244,18,163,211,233,2,83,83,83,55,0,120,222,211,227, + 7,0,142,227,38,165,167,167,119,232,211,167,143,224,194,133,11,232,221,187,55,142,31,63,142,113,227,198,113,21,21,21,143,204,159,63,63,1,78,222, + 176,156,129,16,18,46,147,201,58,255,244,211,79,183,90,181,106,101,239,92,30,121,228,17,203,240,225,195,75,47,92,184,16,115,244,232,209,146,222,189, + 123,123,60,97,57,33,164,165,76,38,235,184,123,247,238,187,169,169,169,3,211,210,210,70,1,64,175,94,189,118,46,89,178,228,199,210,210,210,199,14, + 31,62,92,218,183,111,223,219,30,82,70,132,135,135,91,102,207,158,45,119,85,104,237,218,181,106,0,173,9,33,109,105,205,68,219,78,17,19,213,226, + 173,15,230,76,144,194,98,4,53,233,0,99,21,96,212,194,106,168,2,17,74,1,147,14,42,113,41,182,206,140,81,44,216,124,245,143,191,169,20,195, + 255,40,42,247,184,189,62,172,48,155,205,251,46,95,190,220,239,242,229,203,30,239,227,238,92,2,128,86,171,157,60,112,224,192,3,235,214,173,83,118, + 238,220,25,153,153,153,202,248,248,248,3,161,161,161,12,47,178,78,158,60,137,69,139,22,169,53,26,205,100,79,255,91,163,209,252,51,37,37,229,240, + 164,73,147,100,142,191,51,12,3,165,82,137,97,195,134,85,87,86,86,254,211,83,62,139,197,2,129,64,128,219,183,111,99,237,218,181,120,231,157,119, + 16,29,29,13,147,201,100,191,247,121,177,101,235,247,60,234,252,204,102,51,78,156,56,129,204,175,190,194,194,183,222,130,191,127,205,220,218,70,163,17, + 165,101,101,144,72,36,118,49,230,10,148,210,109,151,47,95,158,19,25,25,121,143,203,144,255,4,0,185,92,14,171,213,10,179,217,140,234,234,106,172, + 88,177,194,76,41,221,230,138,151,239,195,89,150,197,156,57,115,160,215,215,190,227,117,181,197,36,71,69,69,161,91,183,110,246,239,12,195,184,20,27, + 142,156,95,60,213,25,58,135,210,49,41,203,1,0,145,145,145,136,137,137,65,120,120,184,83,206,166,214,34,222,162,110,76,86,131,99,180,30,196,76, + 217,156,80,242,76,187,246,29,200,205,187,165,16,8,4,240,11,8,193,83,163,231,130,101,25,200,149,33,32,22,157,189,44,203,176,16,176,2,148,86, + 232,16,213,182,61,35,150,72,159,129,27,161,165,8,224,86,191,254,252,83,146,18,243,109,72,91,75,96,225,31,167,17,34,48,193,21,120,109,72,180, + 52,105,231,239,171,1,60,235,73,125,89,179,25,161,44,11,35,165,248,109,206,28,196,166,167,131,127,141,143,77,79,199,233,164,36,4,113,28,196,12, + 3,106,50,221,231,211,119,7,190,81,222,186,117,11,89,89,89,65,19,38,76,216,33,22,139,39,121,35,54,28,184,66,142,29,59,22,218,182,109,91, + 167,101,254,252,243,79,244,232,209,195,107,247,148,88,44,30,18,23,23,183,57,43,43,43,224,252,249,243,8,13,13,109,180,208,146,72,36,253,226,226, + 226,54,127,249,229,151,138,162,162,34,164,167,167,43,70,142,28,185,73,34,145,140,174,174,174,118,43,54,235,138,172,244,244,116,245,218,181,107,191,112, + 116,17,82,74,239,18,66,214,245,236,217,115,86,82,82,146,18,192,140,228,228,100,184,19,91,98,177,120,64,187,118,237,80,90,90,106,239,104,197,226, + 26,3,158,159,159,31,2,2,2,32,20,10,161,215,235,17,27,27,75,68,34,209,211,158,28,179,191,191,255,160,49,99,198,48,191,252,242,11,242,243, + 243,161,84,42,33,151,203,97,177,88,144,152,152,200,174,88,177,194,235,142,165,85,171,86,163,6,14,28,40,56,119,238,28,174,93,187,6,189,94,143, + 220,220,92,40,20,10,196,199,199,11,63,248,224,131,145,240,82,104,1,232,156,148,148,84,224,40,178,120,248,249,249,145,14,29,58,148,6,7,7,119, + 7,224,177,208,2,208,249,149,87,94,41,124,247,221,119,251,229,228,228,44,224,127,204,201,201,153,15,0,31,127,252,241,97,149,74,213,29,128,167,66, + 11,148,82,235,11,47,188,112,67,36,18,129,227,56,136,68,162,123,22,161,80,8,134,97,252,109,197,221,190,62,255,113,45,255,253,196,249,203,151,251, + 73,88,238,239,163,187,160,181,82,8,72,131,32,236,183,0,68,217,166,230,63,75,255,4,246,47,192,71,99,74,153,164,141,213,223,62,26,20,164,186, + 82,90,90,111,192,49,33,196,229,11,157,139,227,138,246,166,60,33,164,39,128,127,163,102,68,214,91,148,82,183,177,83,142,16,10,133,173,21,10,69, + 54,223,198,221,193,108,54,179,37,37,37,243,80,227,186,117,10,74,233,175,132,144,129,211,167,79,63,144,153,153,169,236,210,165,11,190,255,254,123,165, + 82,89,19,146,115,242,228,73,140,29,59,86,93,86,86,230,177,219,144,231,13,12,12,60,179,101,203,150,167,38,76,152,96,239,136,252,253,253,113,254, + 252,121,92,188,120,241,180,167,124,12,195,192,106,181,130,227,56,44,95,190,28,70,163,17,27,55,110,196,55,223,124,3,134,97,64,8,1,33,4,10, + 133,2,159,124,242,137,87,253,158,197,98,193,134,13,27,176,96,254,124,187,200,2,0,161,80,136,22,97,97,8,14,9,193,213,171,87,221,10,173,178, + 178,178,127,101,103,103,195,85,48,124,118,118,182,125,221,49,24,222,147,122,178,44,11,189,94,143,184,184,218,169,98,95,121,229,21,251,122,105,105,41, + 88,150,229,207,133,71,39,128,101,89,232,40,48,90,82,251,219,176,215,94,179,175,23,23,23,59,229,124,16,90,164,177,112,49,234,48,150,82,122,218, + 22,34,49,28,192,46,155,59,241,193,197,104,81,106,237,24,217,50,2,103,174,156,133,128,101,33,10,8,65,64,80,24,172,102,3,52,133,215,112,112, + 251,103,0,128,180,13,219,192,48,12,4,2,22,122,131,5,209,173,35,96,181,90,157,142,116,0,128,78,132,60,53,182,67,248,19,173,218,40,201,185, + 192,107,232,16,26,124,111,129,199,197,136,206,147,147,222,114,105,175,78,132,60,117,158,210,35,238,234,43,102,24,48,132,64,38,20,66,159,149,133,211, + 168,17,88,0,112,58,41,9,204,183,223,194,95,44,6,75,8,4,54,19,116,67,80,94,94,14,66,8,50,51,51,3,227,227,227,55,73,165,210,36, + 119,110,180,186,80,171,213,195,251,244,233,243,227,134,13,27,84,45,90,180,184,111,123,126,126,62,166,78,157,90,164,86,171,135,123,195,43,149,74,199, + 141,25,51,38,99,253,250,245,138,203,151,47,67,171,213,66,165,242,56,252,161,94,16,66,186,15,24,48,96,71,86,86,86,64,126,126,62,52,26,13, + 244,122,61,50,51,51,149,195,134,13,203,242,208,141,250,182,163,200,74,78,78,254,29,64,40,33,100,117,221,191,179,109,235,226,32,182,52,0,62,112, + 70,108,54,155,219,248,249,249,161,176,176,16,83,167,78,197,165,75,181,207,203,136,136,154,144,160,168,168,40,92,189,122,21,42,149,10,132,16,151,129, + 185,60,84,42,149,220,96,48,32,33,33,1,183,110,213,134,248,68,68,68,224,246,237,219,32,132,200,92,236,94,47,194,194,194,194,116,58,29,250,246, + 237,139,234,234,106,0,192,196,137,19,193,113,28,10,11,11,193,113,92,136,183,156,0,66,134,15,31,238,52,181,138,66,161,48,6,6,6,254,205,217, + 118,39,8,30,57,114,228,157,244,244,244,251,6,182,28,63,126,252,127,130,130,130,114,130,130,130,58,120,201,105,117,20,85,66,161,240,30,161,197,113, + 28,24,134,241,56,70,237,82,97,229,42,1,185,219,237,221,217,131,167,182,14,13,0,213,22,64,248,236,191,112,166,72,138,229,43,118,3,0,254,241, + 82,15,116,29,180,20,134,245,131,49,167,55,43,154,124,91,255,58,128,183,235,227,59,118,204,43,189,211,24,124,8,128,31,5,183,6,64,55,111,118, + 54,155,205,146,62,125,250,72,63,252,240,195,32,79,202,127,253,245,215,72,73,73,113,25,20,205,131,23,91,241,241,241,7,190,255,254,123,101,187,118, + 237,32,16,8,144,155,155,219,32,145,197,67,173,86,47,88,188,120,241,254,177,99,199,250,1,53,47,173,82,169,20,243,230,205,211,105,181,218,5,238, + 246,119,132,213,106,133,64,32,176,191,36,75,36,18,196,198,198,218,69,22,33,4,85,85,85,16,8,4,252,136,68,143,132,128,90,173,70,120,139,22, + 240,247,247,71,251,232,104,92,182,245,35,252,186,88,44,6,33,4,102,179,217,37,143,109,228,224,92,184,136,183,106,32,40,0,183,46,188,136,136,8, + 88,173,86,94,100,186,179,36,120,196,25,18,18,2,173,86,235,41,231,67,7,23,22,173,88,0,167,1,12,167,181,83,240,220,147,222,161,63,108,209, + 244,77,53,164,146,128,18,43,165,16,176,53,254,90,129,128,5,203,50,40,45,186,139,149,255,154,1,0,72,219,240,13,118,29,190,128,200,118,143,213, + 250,113,9,1,168,235,198,173,10,16,166,207,28,251,164,180,128,220,133,50,66,6,137,164,142,126,12,20,130,68,49,152,61,32,82,118,34,187,58,29, + 117,226,1,234,131,132,97,106,130,223,9,169,119,56,14,99,219,198,18,82,147,253,213,67,31,58,15,94,200,75,165,82,24,141,70,176,44,139,79,63, + 253,84,57,104,208,160,213,0,188,18,90,148,210,243,132,144,97,137,137,137,123,182,109,219,22,18,18,82,251,124,45,46,46,70,98,98,98,113,65,65, + 193,48,111,131,238,57,142,91,189,102,205,26,197,245,235,215,81,85,85,5,169,84,106,239,124,26,2,66,72,167,94,189,122,237,219,187,119,111,160,70, + 163,129,209,104,132,84,42,5,165,20,44,203,226,235,175,191,14,30,49,98,196,110,66,200,179,174,234,42,149,74,71,219,132,19,146,146,146,148,73,73, + 73,253,81,59,233,167,83,36,37,37,41,231,206,157,59,18,46,132,22,199,113,183,74,75,75,91,72,165,82,108,223,190,29,114,185,28,50,153,12,17, + 17,17,40,45,45,133,76,38,3,165,20,38,147,137,239,44,74,60,57,246,162,162,34,173,217,108,14,216,179,103,15,74,74,106,119,105,221,186,53,212, + 106,53,172,86,171,71,49,50,142,200,203,203,43,32,132,180,58,115,230,12,174,95,191,142,33,67,134,224,219,111,191,69,143,30,53,222,97,131,193,208, + 144,36,126,22,150,101,157,118,126,182,55,208,64,95,114,162,230,225,229,21,167,213,106,181,242,34,203,241,211,81,124,185,249,207,218,63,39,132,249,91, + 152,124,237,187,51,7,78,29,252,88,8,116,69,215,32,241,15,1,81,70,97,249,138,221,56,247,103,205,245,90,190,233,36,54,167,14,3,164,65,136, + 9,40,70,11,127,193,24,56,17,90,189,122,245,242,202,50,213,8,56,6,166,187,126,106,59,193,145,35,71,4,211,167,79,119,59,80,8,0,10,10, + 10,60,14,143,224,17,26,26,202,40,149,74,8,4,2,159,196,231,80,74,143,42,149,202,220,239,190,251,174,251,240,225,195,33,18,137,144,155,155,139, + 83,167,78,93,160,148,30,245,134,139,183,104,45,94,188,24,51,102,204,64,88,88,24,22,44,88,0,129,64,96,95,8,33,118,11,151,55,8,13,115, + 61,240,145,143,209,114,5,66,136,127,64,64,192,98,134,97,38,176,30,156,56,139,197,98,177,90,173,219,52,26,141,203,244,14,124,204,145,39,215,194, + 241,28,184,169,107,163,57,31,132,22,241,22,117,71,27,58,179,104,161,118,212,225,125,83,1,241,138,228,96,83,15,169,36,12,123,241,246,157,188,136, + 224,64,57,170,141,26,219,13,199,128,101,24,116,125,172,231,169,106,13,0,0,15,223,73,68,65,84,230,101,118,215,225,11,136,108,91,43,178,228,82, + 49,10,242,239,66,32,96,46,58,227,237,34,32,99,147,122,180,139,10,12,230,240,135,202,128,191,133,57,121,137,239,238,143,200,75,26,60,23,44,105, + 211,69,64,198,254,110,166,219,157,113,82,74,237,66,203,104,54,67,56,110,156,221,93,8,212,88,182,126,5,80,153,157,13,133,72,4,0,94,91,180, + 28,133,22,80,99,217,74,72,72,40,53,153,76,179,188,34,170,173,243,41,137,68,50,126,242,228,201,89,217,217,217,193,1,1,1,208,104,52,152,60, + 121,114,73,73,73,201,120,79,130,237,235,194,100,50,205,234,209,163,199,231,107,215,174,13,82,40,20,0,208,160,14,135,71,80,80,208,174,181,107,215, + 6,233,245,122,152,205,102,251,177,243,80,169,84,216,188,121,179,106,228,200,145,187,0,180,113,198,163,211,233,190,75,79,79,111,85,199,162,149,139,251, + 223,142,8,128,14,105,105,105,93,248,178,58,157,110,135,171,58,26,12,134,159,47,92,184,208,179,75,151,46,68,167,211,193,104,52,34,56,184,198,66, + 202,178,44,202,203,203,237,49,27,167,78,157,130,201,100,250,197,147,99,175,168,168,56,176,97,195,134,49,73,73,73,76,139,22,45,236,86,24,161,80, + 136,185,115,231,90,42,43,43,15,122,194,227,136,188,188,188,93,91,183,110,125,57,62,62,158,11,10,10,130,88,44,70,215,174,93,17,17,17,129,215, + 95,127,221,160,209,104,246,120,203,9,224,230,217,179,103,37,209,209,209,245,54,104,169,84,170,0,224,209,67,217,1,183,78,156,56,33,122,242,201,39, + 119,238,217,179,231,49,199,13,189,122,245,218,41,151,203,3,0,220,245,146,147,214,21,87,142,214,44,145,72,4,129,64,224,246,237,135,23,89,239,205, + 120,102,106,220,99,129,216,121,224,24,134,197,112,128,65,228,124,39,139,9,68,232,135,176,0,139,211,184,200,7,229,58,68,77,124,224,191,1,248,1, + 240,202,154,3,0,129,129,129,103,42,42,42,186,158,56,113,194,155,221,60,202,39,198,143,46,228,99,178,114,115,115,193,178,44,218,183,111,143,61,123, + 246,40,135,14,29,234,213,136,67,71,104,52,154,5,169,169,169,59,135,13,27,230,39,145,72,240,214,91,111,233,42,42,42,188,58,126,98,123,73,230, + 56,14,49,49,49,152,59,119,46,222,127,255,125,204,154,53,11,209,209,209,246,50,252,200,67,111,44,90,66,161,16,97,97,97,48,153,76,118,107,22, + 0,92,190,116,9,2,129,0,86,171,21,6,131,193,173,69,43,32,32,96,113,70,70,198,171,163,71,143,102,234,138,18,62,29,133,227,98,50,153,176, + 117,235,214,87,23,44,88,0,120,96,5,99,89,22,93,187,118,189,199,93,184,106,213,42,251,122,108,108,44,226,226,226,188,18,199,44,203,34,38,101, + 249,61,238,194,221,170,218,211,214,42,62,9,209,239,124,234,140,179,201,181,72,3,224,114,180,33,143,186,163,14,29,147,151,214,13,134,111,50,152,13, + 213,63,254,121,229,210,51,49,157,123,50,249,197,218,123,70,36,196,14,24,15,66,8,90,182,125,12,172,64,0,150,101,32,96,89,40,21,18,92,56, + 115,198,170,215,233,126,172,143,115,0,33,130,22,114,209,170,151,158,235,42,201,19,21,66,21,238,7,33,87,211,24,233,159,227,239,45,44,21,0,157, + 253,49,237,78,176,244,199,130,234,85,3,8,217,121,176,78,58,0,30,86,171,21,114,177,24,213,122,61,116,102,51,6,172,92,105,119,23,50,132,224, + 87,0,93,86,174,196,145,172,172,26,161,37,22,123,60,42,132,135,163,208,42,46,46,198,148,41,83,74,238,222,189,27,223,144,24,45,30,213,213,213, + 135,100,50,89,252,248,241,227,51,183,111,223,30,52,126,252,248,210,252,252,252,120,79,226,158,234,131,78,167,203,18,139,197,85,83,166,76,249,106,211, + 166,77,193,33,33,33,246,55,145,134,128,16,82,60,112,224,64,183,193,32,132,16,119,153,130,83,147,147,147,133,0,102,216,44,91,93,146,147,147,143, + 80,74,23,214,225,73,73,75,75,155,232,32,200,62,7,176,210,21,113,121,121,249,154,185,115,231,78,63,116,232,80,136,68,34,177,119,180,237,219,183, + 183,89,98,107,68,22,165,20,175,189,246,90,113,97,97,161,71,233,29,244,122,125,114,106,106,106,191,234,234,234,192,41,83,166,176,18,137,4,5,5, + 5,88,177,98,133,101,253,250,245,234,202,202,202,169,158,240,56,194,100,50,109,88,180,104,209,0,173,86,219,54,49,49,81,168,209,104,160,211,233,240, + 250,235,175,27,214,173,91,119,91,167,211,121,157,240,183,119,239,222,87,110,220,184,241,116,85,85,85,153,76,118,175,55,147,227,56,226,231,231,215,19, + 192,87,222,112,198,198,198,94,189,121,243,230,147,75,151,46,253,217,100,50,113,199,143,31,183,7,195,127,250,233,167,7,37,18,201,64,120,31,180,111, + 21,139,197,247,88,176,234,174,11,4,2,183,125,90,199,22,178,165,239,189,220,111,106,220,223,2,240,221,129,147,72,221,241,231,197,232,169,170,152,71, + 3,139,96,45,186,128,127,188,212,3,203,55,157,4,80,227,58,180,22,158,3,45,187,10,234,223,10,215,74,139,157,186,88,31,148,235,144,82,122,16, + 94,186,11,29,81,90,90,26,42,151,203,127,13,10,10,186,63,119,64,61,48,24,12,156,78,167,251,20,192,98,87,229,234,138,172,83,167,78,97,204, + 152,49,106,0,216,179,103,143,178,123,247,238,200,201,201,81,198,197,197,53,72,108,81,74,127,10,8,8,184,113,240,224,193,78,173,90,181,194,209,163, + 71,175,81,74,127,242,134,195,198,99,15,120,127,241,197,23,49,104,208,32,180,110,221,250,158,209,134,252,186,55,98,195,108,54,163,115,231,206,208,27, + 12,16,10,133,118,215,164,64,32,128,42,52,20,87,174,92,241,200,162,197,48,204,132,209,163,71,51,231,207,159,199,243,207,63,143,204,204,76,167,101, + 39,79,158,140,45,91,182,96,244,232,209,204,27,111,188,225,50,189,3,31,132,238,201,49,241,207,105,119,253,190,175,56,155,90,139,52,20,14,98,171, + 94,144,123,115,104,241,251,212,186,14,129,123,146,132,53,9,204,102,99,230,183,27,63,155,251,228,234,167,85,225,161,1,40,213,232,236,98,235,244,193, + 111,0,0,99,147,151,65,96,179,116,41,228,18,72,133,44,178,190,252,184,216,104,172,174,183,117,85,112,204,140,55,158,106,31,32,242,51,161,188,5, + 197,99,170,90,11,9,105,91,195,121,143,224,122,60,16,33,231,202,240,210,163,114,197,199,231,213,51,0,172,170,67,9,189,90,173,83,159,57,35,29, + 146,145,129,227,241,241,104,105,177,224,231,136,8,4,113,28,2,196,98,48,132,64,247,253,247,56,178,125,59,194,196,98,192,223,31,230,37,75,160,191, + 112,1,166,138,10,93,93,62,119,208,104,52,152,56,113,98,113,113,113,241,120,189,94,223,32,65,228,136,170,170,170,189,114,185,124,70,239,222,189,87, + 155,76,166,89,85,85,85,141,26,25,165,215,235,247,74,36,146,113,19,39,78,252,102,199,142,29,33,124,48,107,67,80,92,92,236,245,136,199,250,64, + 41,181,18,66,22,218,18,227,205,72,74,74,82,158,56,113,98,58,33,100,53,31,124,72,8,9,77,72,72,120,185,142,200,114,59,234,144,82,122,83, + 46,151,47,153,55,111,222,178,143,62,250,72,206,7,190,255,246,219,111,48,155,205,224,56,14,22,139,5,9,9,9,218,146,146,146,229,212,73,70,231, + 122,120,245,132,144,246,75,151,46,93,187,114,229,202,65,44,203,250,89,44,150,202,170,170,170,159,171,171,171,167,54,36,143,150,237,60,76,121,251,237, + 183,167,172,88,177,98,52,195,48,161,102,179,185,184,162,162,34,91,167,211,173,171,155,87,204,19,28,57,114,164,104,245,234,213,127,22,21,21,117,140, + 140,140,212,200,229,114,131,193,96,96,165,82,169,194,207,207,47,22,192,81,0,127,120,195,121,234,212,169,252,207,63,255,252,186,94,175,143,249,252,243, + 207,15,43,20,138,3,132,16,34,20,10,3,165,82,233,51,0,126,6,224,249,176,55,0,12,195,88,197,98,241,125,46,67,71,139,150,39,49,90,109, + 85,178,105,131,218,11,240,221,143,39,145,250,221,205,13,22,74,183,111,63,93,246,253,130,62,128,113,219,75,232,58,254,171,26,119,33,0,107,225,57, + 24,183,77,6,145,133,224,240,29,14,26,157,241,62,23,1,143,7,232,58,108,20,68,34,17,211,177,99,71,211,198,141,27,221,38,248,4,128,95,126, + 249,5,11,22,44,112,57,218,19,0,2,2,2,50,151,45,91,166,32,132,216,69,86,89,89,217,64,0,24,58,116,232,129,156,156,28,101,155,54,109, + 144,150,150,166,124,249,229,151,239,75,239,224,9,202,203,203,231,77,154,52,105,47,0,88,173,214,121,222,238,239,104,209,226,5,85,235,214,173,237,223, + 29,23,135,24,45,143,96,177,88,32,20,10,33,16,8,16,30,17,97,255,47,74,41,174,92,185,130,210,210,82,143,132,22,203,178,44,33,4,207,63, + 239,217,128,228,23,94,120,1,63,255,252,51,60,113,51,218,248,17,21,21,229,182,140,13,30,233,3,150,101,17,25,233,122,16,188,43,206,166,214,34, + 222,194,209,77,232,106,196,33,117,50,207,33,240,64,131,225,105,158,80,34,91,248,101,198,167,31,37,204,124,77,126,238,106,1,52,90,61,88,182,182, + 241,242,65,240,10,63,9,90,181,8,192,166,47,254,93,81,81,174,126,155,58,153,247,176,181,191,48,121,96,207,71,197,194,240,74,196,116,153,8,86, + 82,43,2,104,254,216,250,43,210,103,63,134,222,172,148,124,123,179,50,25,245,9,45,131,97,240,91,207,61,183,47,117,247,110,89,175,13,27,112,53, + 33,1,17,58,29,196,54,87,34,67,8,228,66,33,228,66,97,141,200,90,177,2,58,179,25,43,227,227,171,244,6,195,115,158,158,15,66,8,74,74, + 74,48,106,212,168,162,188,188,188,97,13,113,237,57,131,86,171,205,130,151,113,94,174,80,93,93,125,136,16,50,116,212,168,81,187,247,238,221,171,242, + 69,122,135,198,194,65,108,25,79,156,56,241,242,225,195,135,175,226,222,137,69,213,135,15,31,190,154,152,152,72,214,174,93,187,14,192,34,79,19,120, + 106,181,218,79,149,74,37,250,245,235,183,232,221,119,223,13,238,209,163,7,66,67,67,81,81,81,129,83,167,78,97,206,156,57,165,229,229,229,239,150, + 149,149,125,228,101,157,141,0,60,30,202,238,33,167,21,192,122,219,226,19,204,154,53,235,183,171,87,175,150,168,84,170,39,132,66,97,23,212,196,1, + 229,3,88,7,47,5,17,143,25,51,102,156,185,122,245,106,113,203,150,45,159,180,113,42,1,220,1,144,209,0,206,188,147,39,79,70,246,236,217,147, + 225,56,142,178,44,11,142,227,168,64,32,160,182,184,26,10,0,217,217,217,98,184,113,115,93,45,212,45,157,252,239,255,188,241,71,126,245,246,11,5, + 85,115,1,208,109,231,100,251,187,170,216,193,131,59,220,134,62,253,105,16,69,77,162,74,170,189,11,226,23,134,219,214,150,72,217,121,49,223,12,226, + 52,214,239,175,132,115,231,206,249,141,24,49,194,163,164,177,85,85,85,66,163,209,104,114,87,78,163,209,76,78,76,76,60,176,108,217,50,229,194,133, + 11,239,9,124,39,132,12,140,139,139,59,144,150,150,166,124,243,205,55,203,213,106,117,131,238,9,91,30,167,70,61,195,40,165,72,77,77,69,90,90, + 26,220,101,52,183,141,238,115,217,249,241,150,43,94,68,25,141,70,156,59,119,206,158,179,139,119,23,242,169,29,204,102,179,203,209,234,22,139,197,98, + 48,24,240,245,215,95,123,36,182,54,111,222,140,234,234,106,88,220,40,56,199,84,12,221,186,117,67,105,105,169,125,176,79,108,108,172,189,156,209,232, + 50,17,190,83,206,152,152,24,20,23,23,131,143,23,110,21,95,107,236,49,87,54,40,127,240,67,15,87,22,45,226,77,74,2,95,64,226,23,176,183, + 199,83,131,250,196,191,60,199,79,171,183,224,250,245,27,40,42,188,11,134,48,8,111,25,137,54,109,162,32,21,49,200,76,255,168,242,244,145,3,255, + 169,40,47,29,226,140,107,132,82,116,100,197,184,62,79,182,107,231,79,96,54,1,22,19,96,54,1,86,219,39,255,155,245,222,54,119,254,188,154,190, + 241,107,233,255,251,94,109,168,119,206,170,9,132,244,81,6,5,237,75,201,206,150,89,141,70,148,204,155,7,153,217,12,137,237,173,4,0,32,22,195, + 188,100,73,141,200,154,60,185,74,163,86,123,53,5,143,74,165,58,73,8,9,41,42,42,250,75,101,134,87,169,84,187,40,165,197,69,69,69,62,177, + 78,249,2,182,145,127,106,62,89,169,195,239,2,0,42,222,202,213,0,222,40,149,74,245,6,195,48,189,41,165,193,12,195,148,89,173,214,163,133,133, + 133,239,83,74,175,248,162,238,205,240,30,164,54,51,252,35,110,138,22,2,248,59,128,10,74,233,117,79,249,187,41,149,1,122,145,105,199,255,60,38, + 30,48,33,54,0,109,91,248,131,19,74,144,87,110,70,206,31,229,200,56,152,127,75,103,178,140,200,45,172,60,235,158,237,225,6,33,132,180,105,211, + 198,69,64,218,253,184,113,227,134,217,19,107,41,113,49,205,14,33,228,113,165,82,153,169,86,171,189,154,130,199,151,8,14,14,62,182,111,223,190,30, + 109,219,182,101,28,3,222,249,92,121,188,123,75,32,168,209,114,135,14,29,50,63,255,252,243,71,243,243,243,251,57,227,84,40,20,251,127,255,253,247, + 56,141,70,115,159,160,114,204,20,207,127,175,172,172,196,204,153,51,127,40,47,47,175,119,10,30,165,82,185,226,163,143,62,122,117,236,216,177,12,159, + 142,194,113,161,182,233,130,248,197,104,52,226,171,175,190,178,126,252,241,199,159,168,213,106,167,174,195,136,136,136,91,121,121,121,145,124,170,5,103,139, + 35,162,162,162,238,94,191,126,221,233,108,12,77,193,249,87,4,169,51,185,52,240,95,16,90,0,32,148,201,102,251,203,3,255,53,118,210,43,193,81, + 237,162,73,88,120,75,16,48,40,200,191,131,27,127,94,162,59,54,126,86,82,89,94,186,184,170,74,251,153,43,158,78,132,180,123,68,33,220,38,178, + 160,3,248,227,168,51,63,85,93,80,0,70,142,201,189,94,97,154,112,222,133,219,135,23,91,11,119,236,144,137,58,116,184,47,81,156,213,106,133,254, + 194,5,172,140,143,247,90,100,53,163,25,205,104,60,8,33,109,225,62,71,150,9,192,109,111,221,168,132,16,18,19,234,55,145,2,19,24,88,59,51, + 132,136,204,20,185,160,216,47,19,84,173,62,149,71,189,14,19,104,198,195,5,66,136,95,80,80,208,1,150,101,219,216,190,223,19,51,196,175,243,159, + 86,171,245,122,65,65,193,64,74,169,211,17,194,132,144,118,254,254,254,159,89,44,150,94,174,226,121,128,26,55,20,203,178,199,43,42,42,102,59,11, + 65,104,170,81,135,33,33,33,87,110,220,184,209,142,31,69,237,248,172,172,111,100,249,229,203,151,209,191,127,255,27,119,239,222,117,234,103,108,10,206, + 135,17,46,242,104,61,60,22,45,30,132,144,8,161,88,62,69,36,149,60,107,53,153,99,64,0,1,199,93,52,84,235,126,212,235,180,95,58,115,23, + 62,72,76,32,164,143,88,36,218,47,84,40,164,245,157,39,83,69,133,78,111,48,12,110,22,89,205,104,70,51,154,209,140,191,10,8,33,29,130,130, + 130,246,113,28,39,182,125,119,220,118,95,121,179,217,92,93,84,84,52,132,82,154,123,223,198,38,228,252,255,6,188,242,108,138,5,192,160,102,206,102, + 206,102,206,102,206,102,206,102,206,102,206,102,206,191,242,130,26,135,24,5,208,223,201,246,36,103,251,62,176,96,248,102,52,163,25,205,104,70,51,154, + 209,140,191,34,168,205,93,232,42,159,86,93,247,33,173,155,222,193,83,236,218,181,139,250,122,62,34,135,161,156,62,203,6,219,84,156,77,120,236,62, + 155,231,201,33,187,238,226,225,195,135,167,248,136,179,41,235,233,203,107,228,83,78,254,154,251,146,215,177,29,249,170,77,57,212,211,103,237,190,169,57, + 125,216,142,234,214,179,209,109,180,158,235,222,232,123,233,1,213,211,151,215,200,39,156,117,219,143,47,120,235,107,147,141,109,83,245,212,179,209,237,254, + 65,113,250,162,29,57,169,103,163,218,168,139,107,239,179,103,211,131,130,67,204,157,211,121,105,169,147,20,15,94,9,173,166,202,109,225,248,208,129,143, + 178,193,54,5,39,15,95,11,174,38,152,72,243,160,175,57,235,156,79,95,33,197,214,161,255,12,15,166,208,241,16,62,203,44,92,231,88,125,194,235, + 200,233,171,115,89,95,167,232,203,122,54,5,167,227,111,62,234,200,1,248,230,94,170,239,186,251,146,211,87,247,82,157,253,125,114,47,53,69,155,175, + 167,253,52,154,183,46,167,47,238,165,186,156,190,104,247,15,130,147,255,189,49,247,82,125,156,190,104,247,206,174,125,99,121,255,27,160,46,114,104,217, + 182,59,205,163,229,121,6,54,52,237,204,218,182,11,225,84,41,54,148,179,41,45,80,190,228,180,41,253,135,158,19,190,189,70,41,54,206,20,31,114, + 14,240,213,53,106,138,246,238,200,233,43,254,186,60,190,184,78,245,113,54,182,190,78,234,217,40,212,199,217,216,118,255,160,56,225,219,107,228,147,123, + 169,14,167,207,238,165,186,199,187,107,215,174,20,95,114,250,210,58,138,123,235,217,232,235,84,31,167,143,44,80,117,235,217,40,212,199,233,139,103,72, + 83,241,254,149,240,127,22,93,33,203,89,128,128,45,0,0,0,0,73,69,78,68,174,66,96,130,0,0}; +const char* blendish_resources::blender_icons16_png = (const char*) temp1; + +static const unsigned char temp2[] = {0,1,0,0,0,19,1,0,0,4,0,48,70,70,84,77,102,9,29,176,0,0,1,60,0,0,0,28,71,68,69,70,144,48,138,184,0,0,1,88, + 0,0,2,148,71,80,79,83,63,137,191,2,0,0,3,236,0,0,157,8,71,83,85,66,151,65,114,65,0,0,160,244,0,0,21,114,79,83,47,50, + 89,45,118,45,0,0,182,104,0,0,0,86,99,109,97,112,228,111,14,235,0,0,182,192,0,0,22,6,99,118,116,32,0,105,29,57,0,0,204,200, + 0,0,1,254,102,112,103,109,113,52,118,106,0,0,206,200,0,0,0,171,103,97,115,112,0,7,0,7,0,0,207,116,0,0,0,12,103,108,121,102, + 214,36,202,71,0,0,207,128,0,8,83,136,104,101,97,100,0,250,81,111,0,9,35,8,0,0,0,54,104,104,101,97,12,184,30,45,0,9,35,64, + 0,0,0,36,104,109,116,120,218,186,166,211,0,9,35,100,0,0,95,112,107,101,114,110,4,246,0,37,0,9,130,212,0,0,63,252,108,111,99,97, + 92,176,35,188,0,9,194,208,0,0,95,116,109,97,120,112,28,73,6,113,0,10,34,68,0,0,0,32,110,97,109,101,31,108,77,160,0,10,34,100, + 0,0,61,8,112,111,115,116,187,194,210,49,0,10,95,108,0,0,235,201,112,114,101,112,59,7,241,0,0,11,75,56,0,0,5,104,0,0,0,1, + 0,0,0,0,201,137,111,49,0,0,0,0,206,63,215,63,0,0,0,0,206,63,215,63,0,1,0,0,0,14,0,0,2,40,2,48,0,0,0,2, + 0,89,0,3,2,176,0,1,2,177,2,197,0,3,2,198,2,198,0,1,2,199,2,202,0,3,2,203,2,204,0,1,2,205,2,209,0,3,2,210, + 2,211,0,1,2,212,2,228,0,3,2,229,2,233,0,1,2,234,2,243,0,3,2,244,2,244,0,1,2,245,2,245,0,3,2,246,2,246,0,1, + 2,247,2,255,0,3,3,0,3,0,0,1,3,1,3,4,0,3,3,5,3,5,0,1,3,6,3,6,0,3,3,7,3,7,0,1,3,8,3,9, + 0,3,3,10,3,10,0,1,3,11,3,12,0,3,3,13,4,22,0,1,4,23,4,27,0,3,4,28,5,12,0,1,5,13,5,13,0,2,5,14, + 5,15,0,1,5,16,5,24,0,3,5,25,5,26,0,1,5,27,5,29,0,3,5,30,5,30,0,1,5,31,5,31,0,3,5,32,5,36,0,1, + 5,37,5,37,0,3,5,38,5,74,0,1,5,75,5,75,0,3,5,76,5,78,0,1,5,79,5,83,0,2,5,84,5,114,0,1,5,115,5,127, + 0,3,5,128,5,143,0,1,5,144,5,144,0,3,5,145,6,14,0,1,6,15,6,23,0,3,6,24,6,58,0,1,6,59,6,59,0,3,6,60, + 6,61,0,1,6,62,6,69,0,3,6,70,6,76,0,1,6,77,6,82,0,3,6,83,8,242,0,1,8,243,8,248,0,3,8,249,11,25,0,1, + 11,26,11,26,0,2,11,27,11,36,0,1,11,37,11,39,0,2,11,40,11,122,0,1,11,123,11,123,0,2,11,124,11,139,0,1,11,140,11,146, + 0,3,11,147,11,147,0,2,11,148,11,151,0,1,11,152,11,153,0,2,11,154,11,177,0,1,11,178,11,179,0,2,11,180,11,204,0,1,11,205, + 11,205,0,2,11,206,19,164,0,1,19,165,19,177,0,2,19,178,19,178,0,3,19,179,19,179,0,2,19,180,19,221,0,1,19,222,19,222,0,2, + 19,223,20,81,0,1,20,82,20,82,0,3,20,83,20,83,0,1,20,84,20,84,0,3,20,85,20,87,0,2,20,88,20,88,0,1,20,89,20,99, + 0,2,20,100,20,216,0,1,20,217,20,224,0,2,20,225,22,184,0,1,22,185,22,195,0,3,22,196,23,23,0,1,23,24,23,31,0,3,23,32, + 23,121,0,1,23,122,23,122,0,3,23,123,23,219,0,1,0,4,0,0,0,2,0,0,0,2,0,16,2,177,2,198,0,1,2,199,2,202,0,2, + 2,205,2,215,0,2,2,216,2,216,0,3,2,217,2,217,0,4,2,218,2,228,0,2,2,234,2,237,0,2,2,238,2,245,0,1,2,246,2,246, + 0,2,2,247,2,247,0,1,2,248,2,250,0,2,2,251,2,253,0,1,2,254,2,255,0,2,3,1,3,2,0,1,3,3,3,3,0,2,3,4, + 3,4,0,1,0,1,0,0,0,10,1,220,2,92,0,20,68,70,76,84,0,122,97,114,97,98,0,134,97,114,109,110,0,168,98,114,97,105,0,180, + 99,97,110,115,0,192,99,104,101,114,0,204,99,121,114,108,0,216,103,101,111,114,0,244,103,114,101,107,1,0,104,97,110,105,1,16,104,101,98,114, + 1,28,107,97,110,97,1,42,108,97,111,32,1,54,108,97,116,110,1,70,109,97,116,104,1,134,110,107,111,32,1,146,111,103,97,109,1,160,114,117, + 110,114,1,172,116,102,110,103,1,184,116,104,97,105,1,198,0,4,0,0,0,0,255,255,0,1,0,0,0,22,0,3,75,85,82,32,0,22,83,78, + 68,32,0,22,85,82,68,32,0,22,0,0,255,255,0,3,0,0,0,2,0,6,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0,0,0, + 255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,1,0,0,0,16,0,2,77,75,68,32,0,16, + 83,82,66,32,0,16,0,0,255,255,0,3,0,0,0,3,0,7,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,3, + 0,0,0,3,0,7,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,2,0,0,0,2,0,4,0,0,0,0,255,255, + 0,1,0,0,0,4,0,0,0,0,255,255,0,3,0,0,0,4,0,8,0,52,0,8,73,83,77,32,0,52,75,83,77,32,0,52,76,83,77,32, + 0,52,77,79,76,32,0,52,78,83,77,32,0,52,82,79,77,32,0,52,83,75,83,32,0,52,83,83,77,32,0,52,0,0,255,255,0,3,0,1, + 0,3,0,7,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,2,0,0,0,2,0,4,0,0,0,0,255,255,0,1, + 0,0,0,4,0,0,0,0,255,255,0,1,0,0,0,4,0,0,0,0,255,255,0,2,0,0,0,5,0,4,0,0,0,0,255,255,0,1,0,0, + 0,9,107,101,114,110,0,56,107,101,114,110,0,62,109,97,114,107,0,70,109,97,114,107,0,84,109,97,114,107,0,92,109,97,114,107,0,100,109,107, + 109,107,0,106,109,107,109,107,0,114,109,107,109,107,0,120,0,0,0,1,0,15,0,0,0,2,0,14,0,15,0,0,0,5,0,5,0,6,0,7, + 0,8,0,9,0,0,0,2,0,12,0,13,0,0,0,2,0,10,0,11,0,0,0,1,0,13,0,0,0,2,0,0,0,1,0,0,0,1,0,4, + 0,0,0,2,0,2,0,3,0,16,0,34,0,42,0,50,0,58,0,66,0,76,0,84,0,92,0,100,0,108,0,116,0,124,0,132,0,140,0,158, + 0,166,0,6,0,1,0,1,0,140,0,6,0,1,0,1,0,222,0,6,0,0,0,1,2,166,0,6,0,0,0,1,2,216,0,6,0,4,0,2, + 3,102,6,70,0,5,0,1,0,1,10,252,0,4,0,1,0,1,12,102,0,4,0,1,0,1,32,204,0,5,0,1,0,1,33,202,0,4,0,1, + 0,1,35,136,0,4,0,0,0,1,55,202,0,4,0,0,0,1,56,242,0,5,0,0,0,1,58,162,0,4,0,4,0,6,60,84,65,254,66,126, + 70,28,87,126,112,158,0,2,0,0,0,1,113,220,0,2,0,0,0,1,153,138,0,1,0,48,0,38,0,1,0,58,0,12,0,3,0,8,0,14, + 0,20,0,1,2,0,254,12,0,1,2,0,254,212,0,1,2,0,253,243,0,1,0,3,5,117,5,120,5,125,0,1,0,3,5,117,5,120,5,125, + 0,3,0,0,0,14,0,0,0,20,0,0,0,26,0,1,2,0,0,0,0,1,2,0,0,0,0,1,2,0,0,0,0,1,0,218,0,174,0,1, + 1,6,0,12,0,20,0,42,0,48,0,54,0,60,0,66,0,72,0,78,0,84,0,90,0,96,0,102,0,108,0,114,0,120,0,126,0,132,0,138, + 0,144,0,150,0,156,0,1,2,0,7,58,0,1,2,0,6,164,0,1,2,0,7,58,0,1,2,0,5,220,0,1,2,0,7,58,0,1,2,0, + 7,8,0,1,2,0,7,58,0,1,2,0,5,220,0,1,2,0,6,164,0,1,2,0,7,58,0,1,1,254,6,114,0,1,2,0,7,58,0,1, + 2,0,8,252,0,1,2,0,9,196,0,1,2,0,8,252,0,1,2,0,8,52,0,1,2,0,9,196,0,1,2,0,8,52,0,1,2,0,7,208, + 0,1,2,0,9,96,0,1,0,20,5,75,5,115,5,116,5,118,5,119,5,121,5,122,5,123,5,124,5,126,5,127,5,144,23,24,23,25,23,26, + 23,27,23,28,23,29,23,30,23,31,0,1,0,20,5,75,5,115,5,116,5,118,5,119,5,121,5,122,5,123,5,124,5,126,5,127,5,144,23,24, + 23,25,23,26,23,27,23,28,23,29,23,30,23,31,0,20,0,0,0,82,0,0,0,88,0,0,0,94,0,0,0,100,0,0,0,106,0,0,0,112, + 0,0,0,118,0,0,0,124,0,0,0,130,0,0,0,136,0,0,0,142,0,0,0,148,0,0,0,154,0,0,0,160,0,0,0,166,0,0,0,172, + 0,0,0,178,0,0,0,184,0,0,0,190,0,0,0,196,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176, + 0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0, + 4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1, + 2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,0,28,0,22,0,1,0,36,0,12,0,1,0,4,0,1,253,108,253,224,0,1, + 0,1,6,69,0,1,0,2,6,66,6,67,0,2,0,0,0,10,0,0,0,16,0,1,253,168,0,0,0,1,253,168,0,0,0,1,0,78,0,62, + 0,1,0,88,0,12,0,6,0,14,0,20,0,26,0,32,0,38,0,44,0,1,253,132,6,246,0,1,253,108,7,119,0,1,253,108,7,119,0,1, + 253,108,7,119,0,1,253,102,7,110,0,1,253,132,6,246,0,1,0,6,6,59,6,62,6,63,6,64,6,65,6,68,0,2,0,1,6,77,6,82, + 0,0,0,6,0,0,0,26,0,0,0,32,0,0,0,38,0,0,0,44,0,0,0,50,0,0,0,56,0,1,253,108,4,96,0,1,253,108,4,126, + 0,1,253,108,4,126,0,1,253,108,4,96,0,1,253,108,4,126,0,1,253,108,4,96,0,1,1,90,1,38,0,1,1,148,0,12,0,35,0,72, + 0,78,0,84,0,90,0,96,0,102,0,108,0,114,0,120,0,126,0,132,0,138,0,144,0,150,0,156,0,162,0,168,0,174,0,180,0,186,0,192, + 0,198,0,204,0,210,0,216,0,222,0,228,0,234,0,240,0,246,0,252,1,2,1,8,1,14,1,20,0,1,254,0,253,222,0,1,254,0,253,222, + 0,1,254,0,254,21,0,1,254,0,254,21,0,1,254,0,253,218,0,1,254,0,254,21,0,1,254,0,254,21,0,1,254,0,254,21,0,1,254,0, + 254,137,0,1,254,0,254,137,0,1,254,0,254,137,0,1,254,0,253,218,0,1,254,0,254,20,0,1,254,0,254,116,0,1,254,0,254,116,0,1, + 254,0,254,21,0,1,254,0,254,31,0,1,254,0,254,59,0,1,254,0,254,24,0,1,254,0,254,21,0,1,254,0,254,56,0,1,254,0,254,56, + 0,1,254,0,254,56,0,1,254,0,254,191,0,1,254,0,253,218,0,1,254,0,254,31,0,1,254,2,254,19,0,1,254,0,254,11,0,1,254,0, + 254,14,0,1,254,0,254,14,0,1,254,0,254,14,0,1,254,0,254,14,0,1,254,0,254,14,0,1,254,0,254,19,0,1,254,0,253,218,0,2, + 0,8,2,199,2,202,0,0,2,205,2,209,0,4,2,212,2,226,0,9,2,234,2,237,0,24,2,248,2,250,0,28,2,254,2,255,0,31,3,3, + 3,3,0,33,3,6,3,6,0,34,0,2,0,9,2,199,2,202,0,0,2,205,2,209,0,4,2,212,2,215,0,9,2,218,2,226,0,13,2,234, + 2,237,0,22,2,248,2,250,0,26,2,254,2,255,0,29,3,3,3,3,0,31,3,6,3,6,0,32,0,33,0,0,0,134,0,0,0,140,0,0, + 0,146,0,0,0,152,0,0,0,158,0,0,0,164,0,0,0,170,0,0,0,176,0,0,0,182,0,0,0,188,0,0,0,194,0,0,0,200,0,0, + 0,206,0,0,0,212,0,0,0,218,0,0,0,224,0,0,0,230,0,0,0,236,0,0,0,242,0,0,0,248,0,0,0,254,0,0,1,4,0,0, + 1,10,0,0,1,16,0,0,1,22,0,0,1,28,0,0,1,34,0,0,1,40,0,0,1,46,0,0,1,52,0,0,1,58,0,0,1,64,0,0, + 1,70,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1, + 254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0, + 0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0, + 0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,2,0,0,0,1,254,0,0,0,0,1, + 254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0,0,1,254,0,0,0, + 0,1,2,66,1,222,0,1,2,142,0,12,0,58,0,118,0,124,0,130,0,136,0,142,0,148,0,154,0,160,0,166,0,172,0,178,0,184,0,190, + 0,196,0,202,0,208,0,214,0,220,0,226,0,232,0,238,0,244,0,250,1,0,1,6,1,12,1,18,1,24,1,30,1,36,1,42,1,48,1,54, + 1,60,1,66,1,72,1,78,1,84,1,90,1,96,1,102,1,108,1,114,1,120,1,126,1,132,1,138,1,144,1,150,1,156,1,162,1,168,1,174, + 1,180,1,186,1,192,1,198,1,204,0,1,254,0,6,104,0,1,254,0,6,104,0,1,254,0,6,104,0,1,254,0,6,61,0,1,254,0,6,20, + 0,1,254,0,6,20,0,1,254,0,6,68,0,1,254,0,6,20,0,1,254,0,6,20,0,1,254,0,6,197,0,1,254,0,7,4,0,1,254,0, + 6,104,0,1,254,0,6,104,0,1,254,0,6,168,0,1,254,0,6,168,0,1,254,0,6,104,0,1,254,0,7,86,0,1,254,0,6,68,0,1, + 254,0,6,147,0,1,254,0,6,20,0,1,254,0,6,104,0,1,254,0,6,104,0,1,254,0,6,61,0,1,254,0,7,208,0,1,254,0,6,68, + 0,1,254,0,6,68,0,1,254,0,7,4,0,1,254,0,7,4,0,1,254,0,7,4,0,1,254,0,6,218,0,1,254,0,7,4,0,1,0,0, + 7,110,0,1,0,0,7,110,0,1,0,0,7,110,0,1,0,0,7,110,0,1,254,0,6,20,0,1,254,0,6,20,0,1,254,0,6,20,0,1, + 254,0,6,20,0,1,254,0,6,104,0,1,254,0,6,104,0,1,254,0,6,20,0,1,254,0,6,20,0,1,254,0,6,20,0,1,254,0,6,20, + 0,1,254,0,6,20,0,1,254,0,6,20,0,1,254,0,6,20,0,1,254,0,5,248,0,1,254,0,5,248,0,1,254,0,5,248,0,1,254,0, + 5,248,0,1,254,0,5,248,0,1,254,0,5,248,0,1,254,0,5,219,0,1,254,0,5,248,0,1,254,0,5,248,0,1,254,0,6,30,0,2, + 0,16,2,177,2,194,0,0,2,238,2,238,0,18,2,240,2,243,0,19,2,245,2,245,0,23,2,247,2,247,0,24,2,251,2,253,0,25,3,1, + 3,2,0,28,3,4,3,4,0,30,3,8,3,9,0,31,3,11,3,12,0,33,8,243,8,248,0,35,11,140,11,146,0,41,22,185,22,185,0,48, + 22,187,22,187,0,49,22,189,22,195,0,50,23,122,23,122,0,57,0,2,0,12,2,177,2,194,0,0,2,238,2,238,0,18,2,240,2,243,0,19, + 2,245,2,245,0,23,2,247,2,247,0,24,2,251,2,253,0,25,3,1,3,2,0,28,3,4,3,4,0,30,8,243,8,248,0,31,11,140,11,146, + 0,37,22,185,22,195,0,44,23,122,23,122,0,55,0,56,0,0,0,226,0,0,0,232,0,0,0,238,0,0,0,244,0,0,0,250,0,0,1,0, + 0,0,1,6,0,0,1,12,0,0,1,18,0,0,1,24,0,0,1,30,0,0,1,36,0,0,1,42,0,0,1,48,0,0,1,54,0,0,1,60, + 0,0,1,66,0,0,1,72,0,0,1,78,0,0,1,84,0,0,1,90,0,0,1,96,0,0,1,102,0,0,1,108,0,0,1,114,0,0,1,120, + 0,0,1,126,0,0,1,132,0,0,1,138,0,0,1,144,0,0,1,150,0,0,1,156,0,0,1,162,0,0,1,168,0,0,1,174,0,0,1,180, + 0,0,1,186,0,0,1,192,0,0,1,198,0,0,1,204,0,0,1,210,0,0,1,216,0,0,1,222,0,0,1,228,0,0,1,234,0,0,1,240, + 0,0,1,246,0,0,1,252,0,0,2,2,0,0,2,8,0,0,2,14,0,0,2,20,0,0,2,26,0,0,2,32,0,0,2,38,0,0,2,44, + 0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,176,0,1,254,0,5,2,0,1,254,0,5,2,0,1,254,0, + 5,2,0,1,254,0,5,2,0,1,254,0,5,2,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1, + 254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,5,2,0,1,254,0,5,2,0,1,254,0,5,2,0,1,254,0,5,2, + 0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,176,0,1,254,0,5,2,0,1,254,0,5,2,0,1,254,0,5,2,0,1,254,0, + 4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,5,2,0,1,254,0,4,123,0,1,254,0,5,2,0,1,254,0,5,2,0,1, + 254,0,5,2,0,1,254,0,5,2,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,5,2,0,1,254,0,5,2,0,1,254,0,5,2, + 0,1,254,0,5,2,0,1,254,0,5,2,0,1,254,0,5,2,0,1,254,0,5,2,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0, + 4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1, + 254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,0,184,0,174,0,1,0,218,0,12,0,8,0,18,0,36,0,54,0,72,0,90, + 0,108,0,126,0,144,0,2,0,6,0,12,0,1,3,99,255,156,0,1,0,200,255,106,0,2,0,6,0,12,0,1,3,99,255,156,0,1,0,200, + 255,106,0,2,0,6,0,12,0,1,3,99,255,156,0,1,0,200,255,106,0,2,0,6,0,12,0,1,3,99,255,156,0,1,0,200,255,106,0,2, + 0,6,0,12,0,1,3,99,255,156,0,1,0,200,253,218,0,2,0,6,0,12,0,1,3,99,255,156,0,1,0,200,253,218,0,2,0,6,0,12, + 0,1,3,99,255,156,0,1,0,200,255,106,0,2,0,6,0,12,0,1,3,99,255,156,0,1,0,200,255,106,0,2,0,1,20,217,20,224,0,0, + 0,1,0,15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24,5,27,5,29,5,37,5,117,5,120,5,125,0,15,0,0,0,62, + 0,0,0,68,0,0,0,74,0,0,0,80,0,0,0,86,0,0,0,92,0,0,0,98,0,0,0,104,0,0,0,110,0,0,0,116,0,0,0,122, + 0,0,0,128,0,0,0,134,0,0,0,140,0,0,0,146,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0, + 0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143, + 0,0,0,1,2,143,0,0,0,1,2,0,0,0,0,1,2,0,0,0,0,1,2,0,0,0,0,1,19,168,19,86,0,1,19,204,0,12,2,105, + 4,212,4,218,4,224,4,230,4,236,4,242,4,248,4,254,5,4,5,10,5,16,5,22,5,28,5,34,5,40,5,46,5,52,5,58,5,64,5,70, + 5,76,5,82,5,88,5,94,5,100,5,106,5,112,5,118,5,124,5,130,5,136,5,142,5,148,5,154,5,160,5,166,5,172,5,178,5,184,5,190, + 5,196,5,202,5,208,5,214,5,220,5,226,5,232,5,238,5,244,5,250,6,0,6,6,6,12,6,18,6,24,6,30,6,36,6,42,6,48,6,54, + 6,60,6,66,6,72,6,78,6,84,6,90,6,96,6,102,6,108,6,114,6,120,6,126,6,132,6,138,6,144,6,150,6,156,6,162,6,168,6,174, + 6,180,6,186,6,192,6,198,6,204,6,210,6,216,6,222,6,228,6,234,6,240,6,246,6,252,7,2,7,8,7,14,7,20,7,26,7,32,7,38, + 7,44,7,50,7,56,7,62,7,68,7,74,7,80,7,86,7,92,7,98,7,104,7,110,7,116,7,122,7,128,7,134,7,140,7,146,7,152,7,158, + 7,164,7,170,7,176,7,182,7,188,7,194,7,200,7,206,7,212,7,218,7,224,7,230,7,236,7,242,7,248,7,254,8,4,8,10,8,16,8,22, + 8,28,8,34,8,40,8,46,8,52,8,58,8,64,8,70,8,76,8,82,8,88,8,94,8,100,8,106,8,112,8,118,8,124,8,130,8,136,8,142, + 8,148,8,154,8,160,8,166,8,172,8,178,8,184,8,190,8,196,8,202,8,208,8,214,8,220,8,226,8,232,8,238,8,244,8,250,9,0,9,6, + 9,12,9,18,9,24,9,30,9,36,9,42,9,48,9,54,9,60,9,66,9,72,9,78,9,84,9,90,9,96,9,102,9,108,9,114,9,120,9,126, + 9,132,9,138,9,144,9,150,9,156,9,162,9,168,9,174,9,180,9,186,9,192,9,198,9,204,9,210,9,216,9,222,9,228,9,234,9,240,9,246, + 9,252,10,2,10,8,10,14,10,20,10,26,10,32,10,38,10,44,10,50,10,56,10,62,10,68,10,74,10,80,10,86,10,92,10,98,10,104,10,110, + 10,116,10,122,10,128,10,134,10,140,10,146,10,152,10,158,10,164,10,170,10,176,10,182,10,188,10,194,10,200,10,206,10,212,10,218,10,224,10,230, + 10,236,10,242,10,248,10,254,11,4,11,10,11,16,11,22,11,28,11,34,11,40,11,46,11,52,11,58,11,64,11,70,11,76,11,82,11,88,11,94, + 11,100,11,106,11,112,11,118,11,124,11,130,11,136,11,142,11,148,11,154,11,160,11,166,11,172,11,178,11,184,11,190,11,196,11,202,11,208,11,214, + 11,220,11,226,11,232,11,238,11,244,11,250,12,0,12,6,12,12,12,18,12,24,12,30,12,36,12,42,12,48,12,54,12,60,12,66,12,72,12,78, + 12,84,12,90,12,96,12,102,12,108,12,114,12,120,12,126,12,132,12,138,12,144,12,150,12,156,12,162,12,168,12,174,12,180,12,186,12,192,12,198, + 12,204,12,210,12,216,12,222,12,228,12,234,12,240,12,246,12,252,13,2,13,8,13,14,13,20,13,26,13,32,13,38,13,44,13,50,13,56,13,62, + 13,68,13,74,13,80,13,86,13,92,13,98,13,104,13,110,13,116,13,122,13,128,13,134,13,140,13,146,13,152,13,158,13,164,13,170,13,176,13,182, + 13,188,13,194,13,200,13,206,13,212,13,218,13,224,13,230,13,236,13,242,13,248,13,254,14,4,14,10,14,16,14,22,14,28,14,34,14,40,14,46, + 14,52,14,58,14,64,14,70,14,76,14,82,14,88,14,94,14,100,14,106,14,112,14,118,14,124,14,130,14,136,14,142,14,148,14,154,14,160,14,166, + 14,172,14,178,14,184,14,190,14,196,14,202,14,208,14,214,14,220,14,226,14,232,14,238,14,244,14,250,15,0,15,6,15,12,15,18,15,24,15,30, + 15,36,15,42,15,48,15,54,15,60,15,66,15,72,15,78,15,84,15,90,15,96,15,102,15,108,15,114,15,120,15,126,15,132,15,138,15,144,15,150, + 15,156,15,162,15,168,15,174,15,180,15,186,15,192,15,198,15,204,15,210,15,216,15,222,15,228,15,234,15,240,15,246,15,252,16,2,16,8,16,14, + 16,20,16,26,16,32,16,38,16,44,16,50,16,56,16,62,16,68,16,74,16,80,16,86,16,92,16,98,16,104,16,110,16,116,16,122,16,128,16,134, + 16,140,16,146,16,152,16,158,16,164,16,170,16,176,16,182,16,188,16,194,16,200,16,206,16,212,16,218,16,224,16,230,16,236,16,242,16,248,16,254, + 17,4,17,10,17,16,17,22,17,28,17,34,17,40,17,46,17,52,17,58,17,64,17,70,17,76,17,82,17,88,17,94,17,100,17,106,17,112,17,118, + 17,124,17,130,17,136,17,142,17,148,17,154,17,160,17,166,17,172,17,178,17,184,17,190,17,196,17,202,17,208,17,214,17,220,17,226,17,232,17,238, + 17,244,17,250,18,0,18,6,18,12,18,18,18,24,18,30,18,36,18,42,18,48,18,54,18,60,18,66,18,72,18,78,18,84,18,90,18,96,18,102, + 18,108,18,114,18,120,18,126,18,132,18,138,18,144,18,150,18,156,18,162,18,168,18,174,18,180,18,186,18,192,18,198,18,204,18,210,18,216,18,222, + 18,228,18,234,18,240,18,246,18,252,19,2,19,8,19,14,19,20,19,26,19,32,19,38,19,44,19,50,19,56,19,62,19,68,0,1,2,222,0,0, + 0,1,2,85,0,0,0,1,1,219,0,0,0,1,2,248,0,0,0,1,2,171,0,0,0,1,1,15,0,0,0,1,1,44,0,0,0,1,2,171, + 0,0,0,1,2,193,0,0,0,1,0,229,0,0,0,1,1,163,0,0,0,1,2,33,0,0,0,1,1,236,0,0,0,1,2,184,0,0,0,1, + 2,254,0,0,0,1,0,56,0,0,0,1,1,169,0,0,0,1,3,16,0,0,0,1,3,124,255,250,0,1,2,154,0,0,0,1,2,81,0,0, + 0,1,0,254,0,0,0,1,2,39,0,0,0,1,2,196,0,0,0,1,2,2,0,0,0,1,3,14,0,0,0,1,2,110,0,0,0,1,1,226, + 0,0,0,1,1,226,0,0,0,1,1,226,0,0,0,1,1,29,255,156,0,1,1,29,255,156,0,1,1,244,254,12,0,1,1,29,253,218,0,1, + 2,188,254,112,0,1,1,29,255,156,0,1,3,132,254,112,0,1,1,244,255,106,0,1,3,132,255,106,0,1,3,132,255,106,0,1,3,44,253,118, + 0,1,3,44,253,168,0,1,3,44,253,118,0,1,1,194,255,106,0,1,1,194,255,106,0,1,1,244,254,12,0,1,1,244,254,12,0,1,2,88, + 253,168,0,1,2,88,253,168,0,1,2,88,253,168,0,1,2,88,253,68,0,1,2,91,255,106,0,1,2,91,255,106,0,1,2,215,253,168,0,1, + 2,215,253,168,0,1,1,44,255,156,0,1,3,32,255,56,0,1,2,188,253,218,0,1,3,32,255,56,0,1,2,188,254,62,0,1,0,240,253,168, + 0,1,2,238,254,62,0,1,1,244,255,106,0,1,1,244,254,12,0,1,2,188,254,112,0,1,2,188,253,218,0,1,3,132,255,106,0,1,2,188, + 253,218,0,1,3,132,255,106,0,1,3,132,255,106,0,1,3,132,253,168,0,1,3,132,254,94,0,1,3,132,255,106,0,1,3,132,253,168,0,1, + 3,132,255,106,0,1,3,132,253,168,0,1,3,44,253,168,0,1,3,44,253,168,0,1,3,44,253,168,0,1,3,44,253,168,0,1,3,44,253,168, + 0,1,3,44,253,168,0,1,3,44,253,168,0,1,1,194,255,106,0,1,1,244,254,94,0,1,1,244,254,112,0,1,1,244,254,112,0,1,1,194, + 255,106,0,1,1,243,254,162,0,1,1,194,255,106,0,1,1,194,255,106,0,1,1,194,255,106,0,1,1,244,254,12,0,1,1,244,254,12,0,1, + 1,244,254,12,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,244,254,12, + 0,1,2,88,253,168,0,1,2,88,253,168,0,1,2,88,253,168,0,1,2,88,253,168,0,1,2,88,253,168,0,1,2,91,255,106,0,1,2,215, + 253,168,0,1,3,32,255,56,0,1,3,182,254,112,0,1,3,182,254,112,0,1,3,32,255,56,0,1,3,182,253,118,0,1,3,32,255,56,0,1, + 2,188,253,218,0,1,2,188,253,218,0,1,3,32,255,106,0,1,3,32,255,106,0,1,3,32,255,106,0,1,3,32,255,56,0,1,3,32,255,56, + 0,1,3,32,253,118,0,1,3,32,255,106,0,1,3,32,255,106,0,1,3,32,255,106,0,1,3,32,254,112,0,1,3,32,253,68,0,1,3,32, + 255,106,0,1,2,188,254,62,0,1,2,188,254,62,0,1,2,188,254,62,0,1,2,238,252,174,0,1,3,7,253,68,0,1,2,238,254,62,0,1, + 2,238,254,62,0,1,3,7,253,18,0,1,2,238,254,62,0,1,3,32,255,106,0,1,3,44,253,168,0,1,1,244,254,12,0,1,2,188,254,112, + 0,1,2,188,254,112,0,1,1,244,255,106,0,1,1,22,0,0,0,1,2,73,0,0,0,1,1,171,0,0,0,1,2,94,0,0,0,1,2,157, + 0,0,0,1,2,157,0,0,0,1,2,96,0,0,0,1,2,157,0,0,0,1,3,146,0,0,0,1,1,22,0,0,0,1,2,107,0,0,0,1, + 2,47,0,0,0,1,3,5,0,0,0,1,1,169,0,0,0,1,3,213,0,0,0,1,1,221,0,0,0,1,3,35,0,0,0,1,2,157,0,0, + 0,1,2,128,0,0,0,1,3,2,0,0,0,1,3,26,0,0,0,1,3,101,0,0,0,1,1,221,0,0,0,1,2,128,0,0,0,1,2,89, + 0,0,0,1,3,26,0,0,0,1,3,26,0,0,0,1,2,27,0,0,0,1,2,89,0,0,0,1,2,89,0,0,0,1,3,132,253,168,0,1, + 3,132,253,168,0,1,1,43,253,218,0,1,1,43,253,218,0,1,3,132,253,168,0,1,3,132,253,168,0,1,1,43,253,218,0,1,1,43,253,218, + 0,1,3,132,253,168,0,1,3,132,253,168,0,1,1,43,253,218,0,1,1,43,253,218,0,1,3,132,255,106,0,1,3,132,255,106,0,1,1,43, + 255,156,0,1,1,43,255,156,0,1,3,132,255,106,0,1,3,132,255,106,0,1,1,43,255,156,0,1,1,43,255,156,0,1,3,132,255,106,0,1, + 3,132,255,106,0,1,1,43,255,156,0,1,1,43,255,156,0,1,3,32,255,56,0,1,3,32,255,56,0,1,1,244,255,106,0,1,2,6,255,106, + 0,1,3,32,255,56,0,1,3,32,255,56,0,1,1,244,255,106,0,1,2,6,255,106,0,1,3,44,253,168,0,1,3,44,253,168,0,1,2,88, + 254,12,0,1,2,88,254,12,0,1,3,44,253,168,0,1,3,44,253,168,0,1,2,88,255,6,0,1,2,88,255,6,0,1,3,44,253,168,0,1, + 3,44,253,168,0,1,2,88,254,12,0,1,2,88,254,12,0,1,3,44,253,168,0,1,3,44,253,168,0,1,2,88,254,12,0,1,2,88,254,12, + 0,1,1,243,254,162,0,1,1,243,254,162,0,1,1,194,255,106,0,1,1,194,255,106,0,1,1,194,255,106,0,1,1,194,255,106,0,1,1,194, + 255,106,0,1,1,194,255,106,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,244,254,12,0,1,3,32,255,106,0,1, + 3,32,255,106,0,1,1,44,255,106,0,1,1,44,255,106,0,1,3,32,255,106,0,1,3,32,255,106,0,1,1,44,255,106,0,1,1,44,255,106, + 0,1,3,32,253,68,0,1,3,32,253,68,0,1,1,144,253,118,0,1,1,144,253,118,0,1,3,32,255,106,0,1,3,32,255,106,0,1,1,44, + 255,106,0,1,1,44,255,106,0,1,2,238,254,62,0,1,2,238,253,168,0,1,2,238,254,62,0,1,2,238,253,168,0,1,1,43,255,156,0,1, + 1,43,255,156,0,1,3,32,255,106,0,1,3,82,253,168,0,1,1,194,255,106,0,1,1,244,253,168,0,1,3,32,255,56,0,1,3,32,255,56, + 0,1,1,44,255,106,0,1,1,44,255,106,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,43,255,156,0,1,1,43,255,156,0,1,2,188, + 254,112,0,1,2,188,254,112,0,1,1,43,254,162,0,1,1,43,254,162,0,1,1,44,255,156,0,1,1,44,255,156,0,1,1,44,255,156,0,1, + 0,197,255,156,0,1,1,44,254,12,0,1,1,44,255,156,0,1,1,44,255,156,0,1,1,44,255,156,0,1,1,44,255,156,0,1,1,44,254,212, + 0,1,1,44,254,212,0,1,1,44,255,156,0,1,1,44,255,156,0,1,1,44,255,156,0,1,1,44,255,156,0,1,1,244,0,50,0,1,1,29, + 255,156,0,1,1,29,255,156,0,1,1,29,255,156,0,1,1,29,255,156,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,29,253,168,0,1, + 1,29,253,168,0,1,2,188,254,112,0,1,2,188,254,112,0,1,1,43,255,156,0,1,1,43,255,156,0,1,1,29,255,156,0,1,1,29,255,156, + 0,1,3,132,254,112,0,1,3,132,254,112,0,1,1,43,254,162,0,1,1,43,254,162,0,1,1,244,255,106,0,1,1,244,255,106,0,1,3,132, + 255,106,0,1,3,132,255,106,0,1,1,43,255,156,0,1,1,43,255,156,0,1,3,132,255,106,0,1,3,132,255,106,0,1,1,43,255,156,0,1, + 1,43,255,156,0,1,3,44,253,168,0,1,3,44,253,168,0,1,2,88,254,162,0,1,2,88,254,162,0,1,3,44,253,168,0,1,3,44,253,168, + 0,1,2,88,255,156,0,1,2,88,255,156,0,1,3,44,253,168,0,1,3,44,253,168,0,1,2,88,255,156,0,1,2,88,255,156,0,1,1,194, + 255,106,0,1,1,194,255,106,0,1,1,194,255,106,0,1,1,194,255,106,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,244,254,12,0,1, + 1,244,254,12,0,1,2,88,253,168,0,1,2,88,253,168,0,1,2,138,255,106,0,1,2,138,255,106,0,1,2,88,253,168,0,1,2,88,253,168, + 0,1,2,138,255,106,0,1,2,138,255,106,0,1,2,88,253,168,0,1,2,88,253,168,0,1,2,38,255,106,0,1,2,38,255,106,0,1,2,88, + 253,168,0,1,2,88,253,168,0,1,2,38,255,106,0,1,2,38,255,106,0,1,2,91,255,106,0,1,2,91,255,106,0,1,1,83,255,106,0,1, + 1,83,255,106,0,1,2,91,255,106,0,1,2,91,255,106,0,1,1,83,255,106,0,1,1,83,255,106,0,1,2,138,253,168,0,1,2,215,253,168, + 0,1,2,88,255,156,0,1,1,238,255,156,0,1,2,138,253,168,0,1,2,215,253,168,0,1,2,88,255,156,0,1,1,238,255,156,0,1,3,32, + 255,56,0,1,3,32,255,56,0,1,1,244,255,106,0,1,2,6,255,106,0,1,2,188,253,218,0,1,2,188,253,168,0,1,1,244,255,106,0,1, + 2,6,255,106,0,1,3,32,255,56,0,1,3,32,255,56,0,1,1,44,255,106,0,1,1,44,255,106,0,1,2,188,254,62,0,1,2,188,254,62, + 0,1,1,83,255,156,0,1,1,83,255,156,0,1,0,240,253,168,0,1,0,240,253,168,0,1,2,38,255,106,0,1,2,38,255,106,0,1,2,238, + 254,62,0,1,2,238,253,168,0,1,1,43,255,156,0,1,1,43,255,156,0,1,1,244,255,106,0,1,1,244,255,106,0,1,1,194,255,106,0,1, + 1,244,253,168,0,1,1,244,254,12,0,1,1,244,254,12,0,1,2,188,254,112,0,1,2,188,254,112,0,1,2,188,253,218,0,1,2,188,253,218, + 0,1,1,43,254,162,0,1,1,43,254,162,0,1,3,132,255,106,0,1,1,43,255,156,0,1,1,43,255,156,0,1,3,32,255,56,0,1,1,244, + 255,106,0,1,2,6,255,106,0,1,2,188,253,153,0,1,1,244,255,106,0,1,2,6,255,106,0,1,1,43,255,156,0,1,1,43,255,156,0,1, + 3,132,254,94,0,1,1,43,254,194,0,1,1,43,254,194,0,1,3,132,255,106,0,1,1,43,255,156,0,1,1,43,255,156,0,1,3,44,253,168, + 0,1,2,88,255,156,0,1,2,88,255,156,0,1,3,44,253,168,0,1,2,88,255,156,0,1,2,88,255,156,0,1,3,44,253,168,0,1,2,88, + 255,156,0,1,2,88,255,156,0,1,3,44,253,168,0,1,2,88,254,12,0,1,2,88,254,12,0,1,1,244,254,12,0,1,1,244,254,12,0,1, + 2,188,254,62,0,1,1,83,255,156,0,1,1,83,255,156,0,1,2,188,254,112,0,1,1,43,254,162,0,1,1,43,254,162,0,1,1,244,254,12, + 0,1,1,244,255,106,0,1,1,29,0,0,0,1,1,29,0,0,0,1,1,29,0,0,0,1,2,73,0,0,0,1,2,73,0,0,0,1,2,73, + 0,0,0,1,1,171,0,0,0,1,1,171,0,0,0,1,1,171,0,0,0,1,2,94,0,0,0,1,2,94,0,0,0,1,2,94,0,0,0,1, + 2,157,0,0,0,1,2,157,0,0,0,1,2,157,0,0,0,1,2,157,0,0,0,1,2,157,0,0,0,1,2,157,0,0,0,1,2,96,0,0, + 0,1,2,96,0,0,0,1,2,96,0,0,0,1,2,157,0,0,0,1,2,157,0,0,0,1,2,157,0,0,0,1,3,146,0,0,0,1,3,146, + 0,0,0,1,3,146,0,0,0,1,1,22,0,0,0,1,1,22,0,0,0,1,1,22,0,0,0,1,2,107,0,0,0,1,2,107,0,0,0,1, + 2,107,0,0,0,1,2,47,0,0,0,1,2,47,0,0,0,1,2,47,0,0,0,1,3,5,0,0,0,1,3,5,0,0,0,1,3,5,0,0, + 0,1,1,169,0,0,0,1,1,169,0,0,0,1,1,169,0,0,0,1,3,213,0,0,0,1,3,213,0,0,0,1,3,213,0,0,0,1,1,221, + 0,0,0,1,1,221,0,0,0,1,1,221,0,0,0,1,3,35,0,0,0,1,3,35,0,0,0,1,3,35,0,0,0,1,2,157,0,0,0,1, + 2,157,0,0,0,1,2,157,0,0,0,1,2,128,0,0,0,1,2,128,0,0,0,1,2,128,0,0,0,1,3,2,0,0,0,1,3,2,0,0, + 0,1,3,2,0,0,0,1,3,26,0,0,0,1,3,26,0,0,0,1,3,26,0,0,0,1,3,101,0,0,0,1,3,101,0,0,0,1,3,101, + 0,0,0,1,1,221,0,0,0,1,1,221,0,0,0,1,1,221,0,0,0,1,2,128,0,0,0,1,2,128,0,0,0,1,2,128,0,0,0,1, + 2,89,0,0,0,1,2,89,0,0,0,1,2,89,0,0,0,1,3,26,0,0,0,1,3,26,0,0,0,1,3,26,0,0,0,1,3,26,0,0, + 0,1,3,26,0,0,0,1,3,26,0,0,0,1,2,27,0,0,0,1,2,27,0,0,0,1,2,27,0,0,0,1,2,89,0,0,0,1,2,89, + 0,0,0,1,2,89,0,0,0,1,2,89,0,0,0,1,2,89,0,0,0,1,2,89,0,0,0,1,1,244,254,94,0,1,1,244,254,112,0,1, + 1,244,254,112,0,1,1,194,255,106,0,1,1,194,255,106,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,244,254,12,0,1,1,244,254,12, + 0,1,1,244,254,12,0,1,2,88,253,168,0,1,3,232,254,112,0,1,3,232,254,112,0,1,2,88,253,168,0,1,3,232,253,218,0,1,3,232, + 253,218,0,1,2,88,253,168,0,1,3,232,253,218,0,1,3,232,253,218,0,1,2,88,253,168,0,1,3,32,254,112,0,1,3,32,254,112,0,1, + 2,88,253,168,0,1,2,38,255,106,0,1,2,38,255,106,0,1,2,91,255,106,0,1,1,83,255,106,0,1,1,83,255,106,0,1,2,215,253,168, + 0,1,2,88,255,156,0,1,1,238,255,156,0,1,3,182,254,112,0,1,1,243,254,162,0,1,1,243,254,162,0,1,3,182,254,112,0,1,1,243, + 254,162,0,1,1,243,254,162,0,1,3,182,253,118,0,1,1,244,253,168,0,1,1,244,253,168,0,1,2,188,253,153,0,1,1,244,255,106,0,1, + 2,6,255,106,0,1,2,188,253,153,0,1,1,244,255,106,0,1,2,6,255,106,0,1,3,32,255,106,0,1,1,164,255,106,0,1,1,164,255,106, + 0,1,3,32,255,106,0,1,1,44,255,106,0,1,1,44,255,106,0,1,3,32,255,56,0,1,1,44,255,106,0,1,1,44,255,106,0,1,3,32, + 253,118,0,1,1,144,253,168,0,1,1,144,253,168,0,1,3,32,255,106,0,1,1,44,255,106,0,1,1,44,255,106,0,1,3,32,254,112,0,1, + 1,144,254,162,0,1,1,144,254,162,0,1,3,32,255,106,0,1,1,44,255,106,0,1,1,44,255,106,0,1,2,188,254,62,0,1,1,83,255,156, + 0,1,1,83,255,156,0,1,2,188,254,62,0,1,1,83,255,156,0,1,1,83,255,156,0,1,2,238,252,174,0,1,1,43,253,218,0,1,1,73, + 253,218,0,1,3,7,252,149,0,1,1,43,254,162,0,1,1,43,254,162,0,1,3,7,252,99,0,1,1,43,254,194,0,1,1,43,254,194,0,1, + 2,238,253,168,0,1,1,43,255,156,0,1,1,43,255,156,0,2,0,13,5,38,5,67,0,0,5,79,5,114,0,30,5,142,5,143,0,66,5,146, + 5,220,0,68,5,241,6,14,0,143,19,223,20,64,0,173,20,85,20,216,1,15,22,202,22,212,1,147,22,214,22,231,1,158,23,3,23,11,1,176, + 23,13,23,13,1,185,23,32,23,121,1,186,23,135,23,219,2,20,0,1,0,16,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24, + 5,27,5,29,5,37,5,117,5,120,5,125,6,22,0,16,0,0,0,66,0,0,0,72,0,0,0,78,0,0,0,84,0,0,0,90,0,0,0,96, + 0,0,0,102,0,0,0,108,0,0,0,114,0,0,0,120,0,0,0,126,0,0,0,132,0,0,0,138,0,0,0,144,0,0,0,150,0,0,0,156, + 0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143, + 0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,143,0,0,0,1,2,0,0,0,0,1, + 2,0,0,0,0,1,2,0,0,0,0,1,2,0,255,255,0,1,0,244,0,198,0,1,0,250,0,12,0,23,0,48,0,54,0,60,0,66,0,72, + 0,78,0,84,0,90,0,96,0,102,0,108,0,114,0,120,0,126,0,132,0,138,0,144,0,150,0,156,0,162,0,168,0,174,0,180,0,1,2,99, + 0,140,0,1,1,209,2,48,0,1,0,242,2,48,0,1,1,172,2,48,0,1,2,153,2,48,0,1,0,56,3,27,0,1,0,20,2,48,0,1, + 2,181,2,48,0,1,0,6,3,27,0,1,1,127,2,48,0,1,1,113,2,61,0,1,1,105,2,48,0,1,2,213,2,48,0,1,0,232,2,48, + 0,1,2,171,2,48,0,1,2,216,1,49,0,1,3,20,2,48,0,1,1,18,1,205,0,1,2,102,2,48,0,1,1,228,2,48,0,1,3,106, + 2,61,0,1,2,198,2,48,0,1,0,80,3,27,0,2,0,7,5,38,5,44,0,0,5,46,5,50,0,7,5,52,5,52,0,12,5,54,5,55, + 0,13,5,57,5,58,0,15,5,60,5,64,0,17,19,177,19,177,0,22,0,1,0,1,5,28,0,1,0,0,0,6,0,1,2,153,2,48,0,1, + 0,184,0,174,0,1,0,232,0,12,0,8,0,18,0,36,0,54,0,72,0,90,0,108,0,126,0,144,0,2,0,6,0,12,0,1,3,99,6,114, + 0,1,0,150,7,8,0,2,0,6,0,12,0,1,3,99,6,114,0,1,0,150,7,8,0,2,0,6,0,12,0,1,3,99,6,114,0,1,0,150, + 7,228,0,2,0,6,0,12,0,1,3,99,6,114,0,1,0,150,7,228,0,2,0,6,0,12,0,1,3,99,6,114,0,1,0,150,5,220,0,2, + 0,6,0,12,0,1,3,99,6,114,0,1,0,150,5,220,0,2,0,6,0,12,0,1,3,99,6,114,0,1,0,150,5,220,0,2,0,6,0,12, + 0,1,3,99,6,114,0,1,0,150,5,220,0,2,0,1,20,217,20,224,0,0,0,1,0,22,5,31,5,75,5,115,5,116,5,118,5,119,5,121, + 5,122,5,123,5,124,5,126,5,127,5,144,19,178,23,24,23,25,23,26,23,27,23,28,23,29,23,30,23,31,0,22,0,0,0,90,0,0,0,96, + 0,0,0,102,0,0,0,108,0,0,0,114,0,0,0,120,0,0,0,126,0,0,0,132,0,0,0,138,0,0,0,144,0,0,0,150,0,0,0,156, + 0,0,0,162,0,0,0,168,0,0,0,174,0,0,0,180,0,0,0,186,0,0,0,192,0,0,0,198,0,0,0,204,0,0,0,210,0,0,0,216, + 0,1,2,143,4,96,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0, + 4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1, + 2,143,4,96,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176, + 0,1,2,0,4,176,0,1,2,0,4,176,0,1,18,220,18,126,0,1,19,28,0,12,2,78,4,158,4,164,4,170,4,176,4,182,4,188,4,194, + 4,200,4,206,4,212,4,218,4,224,4,230,4,236,4,242,4,248,4,254,5,4,5,10,5,16,5,22,5,28,5,34,5,40,5,46,5,52,5,58, + 5,64,5,70,5,76,5,82,5,88,5,94,5,100,5,106,5,112,5,118,5,124,5,130,5,136,5,142,5,148,5,154,5,160,5,166,5,172,5,178, + 5,184,5,190,5,196,5,202,5,208,5,214,5,220,5,226,5,232,5,238,5,244,5,250,6,0,6,6,6,12,6,18,6,24,6,30,6,36,6,42, + 6,48,6,54,6,60,6,66,6,72,6,78,6,84,6,90,6,96,6,102,6,108,6,114,6,120,6,126,6,132,6,138,6,144,6,150,6,156,6,162, + 6,168,6,174,6,180,6,186,6,192,6,198,6,204,6,210,6,216,6,222,6,228,6,234,6,240,6,246,6,252,7,2,7,8,7,14,7,20,7,26, + 7,32,7,38,7,44,7,50,7,56,7,62,7,68,7,74,7,80,7,86,7,92,7,98,7,104,7,110,7,116,7,122,7,128,7,134,7,140,7,146, + 7,152,7,158,7,164,7,170,7,176,7,182,7,188,7,194,7,200,7,206,7,212,7,218,7,224,7,230,7,236,7,242,7,248,7,254,8,4,8,10, + 8,16,8,22,8,28,8,34,8,40,8,46,8,52,8,58,8,64,8,70,8,76,8,82,8,88,8,94,8,100,8,106,8,112,8,118,8,124,8,130, + 8,136,8,142,8,148,8,154,8,160,8,166,8,172,8,178,8,184,8,190,8,196,8,202,8,208,8,214,8,220,8,226,8,232,8,238,8,244,8,250, + 9,0,9,6,9,12,9,18,9,24,9,30,9,36,9,42,9,48,9,54,9,60,9,66,9,72,9,78,9,84,9,90,9,96,9,102,9,108,9,114, + 9,120,9,126,9,132,9,138,9,144,9,150,9,156,9,162,9,168,9,174,9,180,9,186,9,192,9,198,9,204,9,210,9,216,9,222,9,228,9,234, + 9,240,9,246,9,252,10,2,10,8,10,14,10,20,10,26,10,32,10,38,10,44,10,50,10,56,10,62,10,68,10,74,10,80,10,86,10,92,10,98, + 10,104,10,110,10,116,10,122,10,128,10,134,10,140,10,146,10,152,10,158,10,164,10,170,10,176,10,182,10,188,10,194,10,200,10,206,10,212,10,218, + 10,224,10,230,10,236,10,242,10,248,10,254,11,4,11,10,11,16,11,22,11,28,11,34,11,40,11,46,11,52,11,58,11,64,11,70,11,76,11,82, + 11,88,11,94,11,100,11,106,11,112,11,118,11,124,11,130,11,136,11,142,11,148,11,154,11,160,11,166,11,172,11,178,11,184,11,190,11,196,11,202, + 11,208,11,214,11,220,11,226,11,232,11,238,11,244,11,250,12,0,12,6,12,12,12,18,12,24,12,30,12,36,12,42,12,48,12,54,12,60,12,66, + 12,72,12,78,12,84,12,90,12,96,12,102,12,108,12,114,12,120,12,126,12,132,12,138,12,144,12,150,12,156,12,162,12,168,12,174,12,180,12,186, + 12,192,12,198,12,204,12,210,12,216,12,222,12,228,12,234,12,240,12,246,12,252,13,2,13,8,13,14,13,20,13,26,13,32,13,38,13,44,13,50, + 13,56,13,62,13,68,13,74,13,80,13,86,13,92,13,98,13,104,13,110,13,116,13,122,13,128,13,134,13,140,13,146,13,152,13,158,13,164,13,170, + 13,176,13,182,13,188,13,194,13,200,13,206,13,212,13,218,13,224,13,230,13,236,13,242,13,248,13,254,14,4,14,10,14,16,14,22,14,28,14,34, + 14,40,14,46,14,52,14,58,14,64,14,70,14,76,14,82,14,88,14,94,14,100,14,106,14,112,14,118,14,124,14,130,14,136,14,142,14,148,14,154, + 14,160,14,166,14,172,14,178,14,184,14,190,14,196,14,202,14,208,14,214,14,220,14,226,14,232,14,238,14,244,14,250,15,0,15,6,15,12,15,18, + 15,24,15,30,15,36,15,42,15,48,15,54,15,60,15,66,15,72,15,78,15,84,15,90,15,96,15,102,15,108,15,114,15,120,15,126,15,132,15,138, + 15,144,15,150,15,156,15,162,15,168,15,174,15,180,15,186,15,192,15,198,15,204,15,210,15,216,15,222,15,228,15,234,15,240,15,246,15,252,16,2, + 16,8,16,14,16,20,16,26,16,32,16,38,16,44,16,50,16,56,16,62,16,68,16,74,16,80,16,86,16,92,16,98,16,104,16,110,16,116,16,122, + 16,128,16,134,16,140,16,146,16,152,16,158,16,164,16,170,16,176,16,182,16,188,16,194,16,200,16,206,16,212,16,218,16,224,16,230,16,236,16,242, + 16,248,16,254,17,4,17,10,17,16,17,22,17,28,17,34,17,40,17,46,17,52,17,58,17,64,17,70,17,76,17,82,17,88,17,94,17,100,17,106, + 17,112,17,118,17,124,17,130,17,136,17,142,17,148,17,154,17,160,17,166,17,172,17,178,17,184,17,190,17,196,17,202,17,208,17,214,17,220,17,226, + 17,232,17,238,17,244,17,250,18,0,18,6,18,12,18,18,18,24,18,30,18,36,18,42,18,48,18,54,18,60,18,66,18,72,18,78,18,84,18,90, + 18,96,18,102,18,108,0,1,2,82,4,96,0,1,2,25,4,96,0,1,2,83,4,96,0,1,1,29,7,158,0,1,1,29,8,52,0,1,1,194, + 4,226,0,1,1,29,6,114,0,1,1,244,5,20,0,1,1,29,6,114,0,1,3,132,3,232,0,1,1,194,4,76,0,1,3,132,3,82,0,1, + 3,132,4,76,0,1,2,138,3,232,0,1,2,138,3,232,0,1,2,138,4,226,0,1,1,144,3,232,0,1,1,144,4,226,0,1,2,188,2,238, + 0,1,2,188,3,232,0,1,2,88,3,32,0,1,2,88,3,32,0,1,2,88,3,32,0,1,2,88,3,32,0,1,2,91,6,114,0,1,2,91, + 6,114,0,1,1,194,4,126,0,1,1,194,5,120,0,1,1,44,4,176,0,1,2,188,4,76,0,1,1,244,4,76,0,1,2,188,5,220,0,1, + 2,138,5,20,0,1,2,138,3,182,0,1,2,138,3,232,0,1,1,194,3,82,0,1,1,244,2,238,0,1,1,244,2,238,0,1,1,244,2,238, + 0,1,3,132,3,232,0,1,1,244,4,76,0,1,3,132,4,226,0,1,3,132,4,76,0,1,3,132,3,232,0,1,3,132,3,82,0,1,3,132, + 3,232,0,1,3,132,3,232,0,1,3,132,4,76,0,1,3,132,3,232,0,1,2,138,6,14,0,1,2,138,5,220,0,1,2,138,3,232,0,1, + 2,138,3,232,0,1,2,138,5,220,0,1,2,138,3,232,0,1,2,138,3,232,0,1,1,194,6,64,0,1,1,144,3,232,0,1,1,144,3,232, + 0,1,1,194,6,64,0,1,1,194,4,226,0,1,1,144,3,232,0,1,1,194,5,220,0,1,1,194,5,170,0,1,1,194,5,220,0,1,2,188, + 5,120,0,1,2,188,4,176,0,1,2,188,2,238,0,1,2,188,2,238,0,1,2,188,2,238,0,1,2,188,2,238,0,1,2,188,3,232,0,1, + 2,188,4,226,0,1,2,188,4,226,0,1,2,88,3,32,0,1,2,88,3,32,0,1,2,88,3,32,0,1,2,88,3,32,0,1,2,88,3,32, + 0,1,2,91,6,114,0,1,1,244,6,114,0,1,2,188,4,76,0,1,2,188,4,76,0,1,2,188,4,76,0,1,2,188,4,76,0,1,2,188, + 4,76,0,1,2,188,4,76,0,1,1,244,4,76,0,1,1,244,4,76,0,1,1,244,5,120,0,1,1,244,5,120,0,1,1,244,5,120,0,1, + 3,57,6,14,0,1,3,57,7,8,0,1,2,188,5,220,0,1,1,244,5,120,0,1,1,244,5,120,0,1,1,244,5,120,0,1,1,244,5,120, + 0,1,1,244,5,120,0,1,1,244,5,120,0,1,4,188,8,52,0,1,4,188,8,52,0,1,4,188,8,102,0,1,2,138,5,20,0,1,2,138, + 3,232,0,1,2,138,2,238,0,1,2,188,5,95,0,1,2,138,3,232,0,1,2,188,4,226,0,1,3,82,4,76,0,1,2,138,4,226,0,1, + 1,244,4,226,0,1,1,244,2,238,0,1,1,244,4,226,0,1,1,194,3,82,0,1,1,22,5,240,0,1,2,73,5,240,0,1,1,171,5,240, + 0,1,2,94,5,240,0,1,2,157,5,240,0,1,2,157,5,240,0,1,2,96,5,240,0,1,2,157,5,240,0,1,1,224,5,240,0,1,2,19, + 5,240,0,1,1,110,5,240,0,1,1,22,5,240,0,1,2,167,5,240,0,1,1,169,5,240,0,1,3,203,5,240,0,1,1,221,5,240,0,1, + 3,35,5,240,0,1,2,157,5,242,0,1,2,128,5,242,0,1,3,2,5,240,0,1,3,26,5,240,0,1,2,148,5,240,0,1,1,221,5,240, + 0,1,2,128,5,242,0,1,2,89,5,240,0,1,3,26,5,240,0,1,3,26,5,240,0,1,2,27,5,240,0,1,2,89,5,240,0,1,2,89, + 5,240,0,1,3,132,3,232,0,1,3,132,3,232,0,1,1,43,3,232,0,1,1,43,3,232,0,1,3,132,3,232,0,1,3,132,3,232,0,1, + 1,43,3,232,0,1,1,43,3,232,0,1,3,132,3,232,0,1,3,132,3,232,0,1,1,43,3,232,0,1,1,43,3,232,0,1,3,132,4,76, + 0,1,3,132,4,76,0,1,1,43,5,20,0,1,1,43,5,20,0,1,3,132,4,76,0,1,3,132,4,76,0,1,1,43,5,20,0,1,1,43, + 5,20,0,1,3,132,4,226,0,1,3,132,4,226,0,1,1,43,5,170,0,1,1,43,5,170,0,1,2,188,4,76,0,1,2,188,4,76,0,1, + 1,244,6,64,0,1,2,6,5,170,0,1,2,188,4,76,0,1,2,188,4,76,0,1,1,244,6,64,0,1,2,6,5,170,0,1,2,138,3,232, + 0,1,2,138,3,232,0,1,2,88,3,232,0,1,2,88,3,232,0,1,2,138,3,232,0,1,2,138,3,232,0,1,2,88,3,232,0,1,2,88, + 3,232,0,1,2,138,3,232,0,1,2,138,3,232,0,1,2,88,3,232,0,1,2,88,3,232,0,1,2,138,3,232,0,1,2,138,3,232,0,1, + 2,88,3,232,0,1,2,88,3,232,0,1,1,144,3,232,0,1,1,144,3,232,0,1,1,194,4,226,0,1,1,194,4,226,0,1,1,194,5,220, + 0,1,1,194,5,220,0,1,1,194,6,64,0,1,1,194,6,64,0,1,2,188,4,226,0,1,2,188,4,226,0,1,2,188,5,120,0,1,2,188, + 5,120,0,1,1,244,5,120,0,1,1,244,5,120,0,1,0,250,6,14,0,1,0,250,6,14,0,1,1,244,5,120,0,1,1,244,5,120,0,1, + 0,250,6,164,0,1,0,250,6,164,0,1,1,244,5,120,0,1,1,244,5,120,0,1,0,250,6,164,0,1,0,250,6,164,0,1,1,244,5,120, + 0,1,1,244,5,120,0,1,1,19,7,108,0,1,1,19,7,108,0,1,2,138,2,238,0,1,2,138,2,138,0,1,2,188,5,95,0,1,2,188, + 4,101,0,1,1,43,5,170,0,1,1,43,5,170,0,1,3,82,4,76,0,1,3,82,3,32,0,1,1,244,4,76,0,1,1,244,3,32,0,1, + 3,57,7,8,0,1,3,57,7,8,0,1,1,19,7,158,0,1,1,19,7,158,0,1,1,244,4,226,0,1,1,244,4,226,0,1,1,43,3,232, + 0,1,1,43,3,232,0,1,1,244,2,238,0,1,2,88,2,86,0,1,1,43,3,232,0,1,1,43,3,232,0,1,1,44,6,164,0,1,1,44, + 6,164,0,1,1,44,7,58,0,1,0,197,4,176,0,1,1,44,4,176,0,1,1,44,5,220,0,1,1,44,5,220,0,1,1,44,7,58,0,1, + 1,44,7,58,0,1,1,44,4,176,0,1,1,44,4,176,0,1,1,44,7,8,0,1,1,44,7,8,0,1,1,44,7,58,0,1,1,44,7,58, + 0,1,1,194,4,76,0,1,1,29,7,208,0,1,1,29,7,208,0,1,1,29,8,152,0,1,1,29,8,152,0,1,1,194,4,226,0,1,1,194, + 4,226,0,1,1,29,6,114,0,1,1,29,6,114,0,1,1,244,5,20,0,1,2,88,4,26,0,1,1,43,5,70,0,1,1,43,5,70,0,1, + 1,29,6,114,0,1,1,29,6,114,0,1,3,132,3,232,0,1,3,132,3,232,0,1,1,43,3,232,0,1,1,43,3,232,0,1,1,194,4,76, + 0,1,2,38,4,76,0,1,3,132,3,82,0,1,3,132,3,82,0,1,1,43,4,26,0,1,1,43,4,26,0,1,3,132,4,76,0,1,3,132, + 4,76,0,1,1,43,5,20,0,1,1,43,5,20,0,1,2,138,3,232,0,1,2,138,3,232,0,1,2,88,3,232,0,1,2,88,3,232,0,1, + 2,138,3,232,0,1,2,138,3,232,0,1,2,88,3,232,0,1,2,88,3,232,0,1,2,138,4,226,0,1,2,138,4,226,0,1,2,88,4,126, + 0,1,2,88,4,126,0,1,1,144,3,232,0,1,1,144,3,232,0,1,1,144,4,226,0,1,1,144,4,226,0,1,2,188,2,238,0,1,2,188, + 2,238,0,1,2,188,3,232,0,1,2,188,3,232,0,1,2,88,3,32,0,1,2,88,3,32,0,1,2,138,3,132,0,1,2,138,3,132,0,1, + 2,88,3,32,0,1,2,88,3,32,0,1,3,82,4,226,0,1,3,82,4,226,0,1,2,88,3,32,0,1,2,88,3,32,0,1,2,38,3,32, + 0,1,2,38,3,32,0,1,2,88,3,32,0,1,2,88,3,32,0,1,2,38,3,232,0,1,2,38,3,232,0,1,2,91,6,114,0,1,2,91, + 6,114,0,1,1,83,6,114,0,1,1,83,6,114,0,1,2,91,6,114,0,1,2,91,6,114,0,1,1,83,6,114,0,1,1,83,6,114,0,1, + 1,194,4,126,0,1,1,244,3,232,0,1,1,194,4,126,0,1,1,238,3,232,0,1,1,194,5,120,0,1,1,244,4,126,0,1,1,194,5,120, + 0,1,1,238,4,126,0,1,2,188,4,76,0,1,2,188,4,76,0,1,1,244,5,70,0,1,2,6,4,176,0,1,1,244,4,76,0,1,1,244, + 3,82,0,1,1,244,5,70,0,1,2,6,4,176,0,1,2,188,5,220,0,1,2,188,5,220,0,1,0,250,6,14,0,1,0,250,6,14,0,1, + 2,138,5,20,0,1,2,138,5,20,0,1,1,83,6,114,0,1,1,83,6,114,0,1,2,138,3,182,0,1,2,138,3,82,0,1,2,38,3,82, + 0,1,2,38,3,82,0,1,2,138,3,232,0,1,2,138,2,238,0,1,1,43,4,26,0,1,1,43,4,26,0,1,1,194,3,82,0,1,2,38, + 3,82,0,1,1,244,4,76,0,1,1,244,3,32,0,1,1,244,2,238,0,1,1,244,2,238,0,1,1,244,2,238,0,1,2,88,2,86,0,1, + 1,244,2,238,0,1,2,88,2,238,0,1,1,43,3,232,0,1,1,43,3,232,0,1,3,132,3,232,0,1,1,43,3,232,0,1,1,43,3,232, + 0,1,2,188,4,76,0,1,1,244,4,76,0,1,2,6,3,182,0,1,1,244,3,82,0,1,1,244,4,76,0,1,2,6,3,182,0,1,1,43, + 4,26,0,1,1,43,4,26,0,1,3,132,3,82,0,1,1,43,4,26,0,1,1,43,4,26,0,1,3,132,3,232,0,1,1,43,5,20,0,1, + 1,43,5,20,0,1,2,138,6,14,0,1,2,88,5,170,0,1,2,88,5,170,0,1,2,138,5,220,0,1,2,88,5,120,0,1,2,88,5,120, + 0,1,2,138,5,220,0,1,2,88,5,120,0,1,2,88,5,120,0,1,2,138,4,226,0,1,2,88,4,126,0,1,2,88,4,126,0,1,2,188, + 2,238,0,1,2,188,2,238,0,1,4,188,8,52,0,1,1,83,8,52,0,1,1,83,8,52,0,1,2,188,3,182,0,1,1,43,4,176,0,1, + 1,43,4,176,0,1,2,188,4,176,0,1,2,38,3,82,0,1,1,29,5,240,0,1,1,29,5,240,0,1,1,29,5,240,0,1,2,73,5,240, + 0,1,2,73,5,240,0,1,2,73,5,240,0,1,1,171,5,240,0,1,1,171,5,240,0,1,1,171,5,240,0,1,2,94,5,240,0,1,2,94, + 5,240,0,1,2,94,5,240,0,1,2,157,5,240,0,1,2,157,5,240,0,1,2,157,5,240,0,1,2,157,5,240,0,1,2,157,5,240,0,1, + 2,157,5,240,0,1,2,96,5,240,0,1,2,96,5,240,0,1,2,96,5,240,0,1,2,157,5,240,0,1,2,157,5,240,0,1,2,157,5,240, + 0,1,1,224,5,240,0,1,1,224,5,240,0,1,1,224,5,240,0,1,2,19,5,240,0,1,2,19,5,240,0,1,2,19,5,240,0,1,1,110, + 5,240,0,1,1,110,5,240,0,1,1,110,5,240,0,1,1,22,5,240,0,1,1,22,5,240,0,1,1,22,5,240,0,1,2,167,5,240,0,1, + 2,167,5,240,0,1,2,167,5,240,0,1,1,169,5,240,0,1,1,169,5,240,0,1,1,169,5,240,0,1,3,203,5,240,0,1,3,203,5,240, + 0,1,3,203,5,240,0,1,1,221,5,240,0,1,1,221,5,240,0,1,1,221,5,240,0,1,3,35,5,240,0,1,3,35,5,240,0,1,3,35, + 5,240,0,1,2,157,5,242,0,1,2,157,5,242,0,1,2,157,5,242,0,1,2,128,5,242,0,1,2,128,5,242,0,1,2,128,5,242,0,1, + 3,2,5,240,0,1,3,2,5,240,0,1,3,2,5,240,0,1,3,26,5,240,0,1,3,26,5,240,0,1,3,26,5,240,0,1,2,148,5,240, + 0,1,2,148,5,240,0,1,2,148,5,240,0,1,1,221,5,240,0,1,1,221,5,240,0,1,1,221,5,240,0,1,2,128,5,242,0,1,2,128, + 5,242,0,1,2,128,5,242,0,1,2,89,5,240,0,1,2,89,5,240,0,1,2,89,5,240,0,1,3,26,5,240,0,1,3,26,5,240,0,1, + 3,26,5,240,0,1,3,26,5,240,0,1,3,26,5,240,0,1,3,26,5,240,0,1,2,27,5,240,0,1,2,27,5,240,0,1,2,27,5,240, + 0,1,2,89,5,240,0,1,2,89,5,240,0,1,2,89,5,240,0,1,2,89,5,240,0,1,2,89,5,240,0,1,2,89,5,240,0,1,1,144, + 3,232,0,1,1,144,3,232,0,1,1,194,6,64,0,1,1,194,5,170,0,1,1,194,5,220,0,1,2,188,2,238,0,1,2,188,2,238,0,1, + 2,188,2,238,0,1,2,188,3,232,0,1,2,188,4,226,0,1,2,88,3,32,0,1,3,82,4,26,0,1,3,82,4,26,0,1,2,88,3,32, + 0,1,2,138,3,132,0,1,2,138,3,132,0,1,2,88,3,32,0,1,3,82,4,226,0,1,3,82,4,226,0,1,2,88,3,32,0,1,2,38, + 3,32,0,1,2,38,3,32,0,1,2,88,3,32,0,1,2,88,4,226,0,1,2,88,4,226,0,1,2,91,6,114,0,1,1,83,6,114,0,1, + 1,83,6,114,0,1,1,244,5,120,0,1,1,244,6,114,0,1,1,238,5,120,0,1,2,188,4,76,0,1,1,244,4,76,0,1,2,6,3,182, + 0,1,2,188,4,76,0,1,1,244,5,70,0,1,2,6,4,176,0,1,2,188,4,76,0,1,1,244,4,76,0,1,2,6,3,182,0,1,1,244, + 3,82,0,1,1,244,5,70,0,1,2,6,4,176,0,1,1,244,3,82,0,1,1,244,6,64,0,1,2,6,5,170,0,1,1,244,5,120,0,1, + 0,120,5,120,0,1,0,120,5,120,0,1,1,244,5,120,0,1,0,250,6,14,0,1,0,250,6,14,0,1,3,57,6,14,0,1,1,19,6,164, + 0,1,1,19,6,164,0,1,2,188,5,220,0,1,0,250,6,14,0,1,0,250,6,14,0,1,1,244,5,120,0,1,0,250,6,164,0,1,0,250, + 6,164,0,1,1,244,5,120,0,1,0,250,6,164,0,1,0,250,6,164,0,1,1,244,5,120,0,1,1,19,8,102,0,1,1,19,8,102,0,1, + 4,188,8,52,0,1,1,83,8,52,0,1,1,83,8,52,0,1,4,188,8,102,0,1,1,83,8,102,0,1,1,83,8,102,0,1,2,138,5,20, + 0,1,1,83,6,114,0,1,1,83,6,114,0,1,2,138,2,238,0,1,1,43,4,26,0,1,1,43,4,26,0,1,2,138,2,238,0,1,1,43, + 4,26,0,1,1,43,4,26,0,1,2,188,3,232,0,1,1,43,5,20,0,1,1,43,5,20,0,2,0,15,5,39,5,39,0,0,5,49,5,49, + 0,1,5,58,5,58,0,2,5,79,5,114,0,3,5,142,5,143,0,39,5,146,5,220,0,41,5,241,6,14,0,116,19,223,20,64,0,146,20,85, + 20,216,0,244,22,202,22,212,1,120,22,214,22,231,1,131,23,3,23,11,1,149,23,13,23,13,1,158,23,32,23,121,1,159,23,135,23,219,1,249, + 0,1,0,30,5,31,5,75,5,115,5,116,5,118,5,119,5,121,5,122,5,123,5,124,5,126,5,127,5,144,6,15,6,16,6,17,6,18,6,19, + 6,20,6,21,6,23,19,178,23,24,23,25,23,26,23,27,23,28,23,29,23,30,23,31,0,30,0,0,0,122,0,0,0,128,0,0,0,134,0,0, + 0,140,0,0,0,146,0,0,0,152,0,0,0,158,0,0,0,164,0,0,0,170,0,0,0,176,0,0,0,182,0,0,0,188,0,0,0,194,0,0, + 0,200,0,0,0,206,0,0,0,212,0,0,0,218,0,0,0,224,0,0,0,230,0,0,0,236,0,0,0,242,0,0,0,248,0,0,0,254,0,0, + 1,4,0,0,1,10,0,0,1,16,0,0,1,22,0,0,1,28,0,0,1,34,0,0,1,40,0,1,2,143,4,96,0,1,2,0,4,176,0,1, + 2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176, + 0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,123,0,1,2,0,4,123,0,1,2,0, + 4,123,0,1,2,0,4,123,0,1,2,0,4,123,0,1,2,0,4,123,0,1,2,0,4,123,0,1,2,0,4,123,0,1,2,143,4,96,0,1, + 2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176,0,1,2,0,4,176, + 0,1,2,0,4,176,0,1,1,6,0,246,0,1,1,16,0,12,0,29,0,60,0,66,0,72,0,78,0,84,0,90,0,96,0,102,0,108,0,114, + 0,120,0,126,0,132,0,138,0,144,0,150,0,156,0,162,0,168,0,174,0,180,0,186,0,192,0,198,0,204,0,210,0,216,0,222,0,228,0,1, + 5,93,0,0,0,1,5,120,0,0,0,1,5,129,0,0,0,1,3,220,254,29,0,1,5,6,0,0,0,1,5,120,255,64,0,1,5,128,0,0, + 0,1,5,91,0,0,0,1,5,34,0,0,0,1,5,41,255,64,0,1,5,62,0,0,0,1,5,69,0,0,0,1,5,0,0,0,0,1,5,0, + 0,0,0,1,5,246,0,0,0,1,6,34,0,0,0,1,5,126,0,0,0,1,5,126,0,0,0,1,5,157,0,0,0,1,5,128,0,0,0,1, + 5,120,0,0,0,1,5,50,0,0,0,1,5,15,0,0,0,1,5,160,0,0,0,1,6,141,0,0,0,1,5,16,0,0,0,1,5,120,0,0, + 0,1,8,58,0,0,0,1,8,58,0,0,0,2,0,2,6,30,6,56,0,0,6,93,6,94,0,27,0,1,0,3,6,66,6,67,6,69,0,3, + 0,0,0,14,0,0,0,20,0,0,0,26,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,34,1,6,0,1,1,62, + 0,12,0,31,0,64,0,70,0,76,0,82,0,88,0,94,0,100,0,106,0,112,0,118,0,124,0,130,0,136,0,142,0,148,0,154,0,160,0,166, + 0,172,0,178,0,184,0,190,0,196,0,202,0,208,0,214,0,220,0,226,0,232,0,238,0,244,0,1,5,93,4,107,0,1,5,120,4,121,0,1, + 5,129,4,121,0,1,3,220,4,121,0,1,5,6,4,154,0,1,5,120,4,121,0,1,5,128,4,122,0,1,5,91,4,102,0,1,5,34,4,119, + 0,1,5,41,4,104,0,1,5,62,4,121,0,1,5,69,4,121,0,1,5,0,4,96,0,1,5,0,5,80,0,1,5,246,4,91,0,1,6,34, + 5,25,0,1,5,126,4,91,0,1,5,126,5,116,0,1,5,157,4,96,0,1,5,128,4,122,0,1,5,120,4,121,0,1,5,50,4,123,0,1, + 5,15,4,96,0,1,5,160,4,148,0,1,6,141,4,136,0,1,5,16,4,117,0,1,5,120,4,144,0,1,0,0,4,74,0,1,0,0,4,74, + 0,1,8,58,4,136,0,1,8,58,4,136,0,2,0,4,6,30,6,56,0,0,6,76,6,76,0,27,6,91,6,91,0,28,6,93,6,94,0,29, + 0,1,0,12,6,59,6,62,6,63,6,64,6,65,6,68,6,77,6,78,6,79,6,80,6,81,6,82,0,12,0,0,0,50,0,0,0,56,0,0, + 0,62,0,0,0,68,0,0,0,74,0,0,0,80,0,0,0,86,0,0,0,92,0,0,0,98,0,0,0,104,0,0,0,110,0,0,0,116,0,1, + 0,0,4,116,0,1,0,0,4,98,0,1,0,0,4,98,0,1,0,0,4,98,0,1,0,0,4,98,0,1,0,0,4,116,0,1,0,0,4,96, + 0,1,0,0,4,126,0,1,0,0,4,126,0,1,0,0,4,96,0,1,0,0,4,126,0,1,0,0,4,96,0,1,0,32,0,26,0,1,0,90, + 0,12,0,1,0,4,0,1,0,4,0,1,2,166,254,82,0,1,0,1,0,169,0,2,0,9,2,199,2,202,0,0,2,205,2,209,0,4,2,212, + 2,215,0,9,2,218,2,228,0,13,2,234,2,237,0,24,2,248,2,250,0,28,2,254,2,255,0,31,3,3,3,3,0,33,3,6,3,6,0,34, + 0,35,0,0,0,142,0,0,0,148,0,0,0,154,0,0,0,160,0,0,0,166,0,0,0,172,0,0,0,178,0,0,0,184,0,0,0,190,0,0, + 0,196,0,0,0,202,0,0,0,208,0,0,0,214,0,0,0,220,0,0,0,226,0,0,0,232,0,0,0,238,0,0,0,244,0,0,0,250,0,0, + 1,0,0,0,1,6,0,0,1,12,0,0,1,18,0,0,1,24,0,0,1,30,0,0,1,36,0,0,1,42,0,0,1,48,0,0,1,54,0,0, + 1,60,0,0,1,66,0,0,1,72,0,0,1,78,0,0,1,84,0,0,1,90,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,0,0, + 0,1,254,0,0,0,0,1,254,0,255,254,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0, + 255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1, + 254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255, + 0,1,254,0,255,255,0,1,254,0,255,254,0,1,254,0,255,255,0,1,254,2,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0, + 255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,5,140,4,182,0,1, + 5,148,0,12,0,149,1,44,1,50,1,56,1,62,1,68,1,74,1,80,1,86,1,92,1,98,1,104,1,110,1,116,1,122,1,128,1,134,1,140, + 1,146,1,152,1,158,1,164,1,170,1,176,1,182,1,188,1,194,1,200,1,206,1,212,1,218,1,224,1,230,1,236,1,242,1,248,1,254,2,4, + 2,10,2,16,2,22,2,28,2,34,2,40,2,46,2,52,2,58,2,64,2,70,2,76,2,82,2,88,2,94,2,100,2,106,2,112,2,118,2,124, + 2,130,2,136,2,142,2,148,2,154,2,160,2,166,2,172,2,178,2,184,2,190,2,196,2,202,2,208,2,214,2,220,2,226,2,232,2,238,2,244, + 2,250,3,0,3,6,3,12,3,18,3,24,3,30,3,36,3,42,3,48,3,54,3,60,3,66,3,72,3,78,3,84,3,90,3,96,3,102,3,108, + 3,114,3,120,3,126,3,132,3,138,3,144,3,150,3,156,3,162,3,168,3,174,3,180,3,186,3,192,3,198,3,204,3,210,3,216,3,222,3,228, + 3,234,3,240,3,246,3,252,4,2,4,8,4,14,4,20,4,26,4,32,4,38,4,44,4,50,4,56,4,62,4,68,4,74,4,80,4,86,4,92, + 4,98,4,104,4,110,4,116,4,122,4,128,4,134,4,140,4,146,4,152,4,158,4,164,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0, + 5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1, + 0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240, + 0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0, + 5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1, + 0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240, + 0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0, + 5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1, + 0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240, + 0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0, + 5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1, + 0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240, + 0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0, + 5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1, + 0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240, + 0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0, + 5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1, + 0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240, + 0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0, + 5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1, + 0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240, + 0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0, + 5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,1,0,0,5,240,0,2, + 0,35,0,36,0,61,0,0,0,68,0,93,0,26,0,154,0,154,0,52,0,186,0,186,0,53,0,198,0,199,0,54,0,208,0,209,0,56,0,243, + 0,243,0,58,1,40,1,41,0,59,1,65,1,65,0,61,1,72,1,72,0,62,1,81,1,82,0,63,1,89,1,89,0,65,1,97,1,97,0,66, + 1,121,1,123,0,67,2,18,2,18,0,70,2,22,2,22,0,71,2,27,2,27,0,72,2,29,2,29,0,73,2,42,2,42,0,74,2,55,2,55, + 0,75,2,84,2,84,0,76,8,204,8,204,0,77,9,3,9,12,0,78,17,225,17,227,0,88,17,230,17,231,0,91,17,237,17,237,0,93,17,241, + 17,242,0,94,18,254,19,1,0,96,19,7,19,17,0,100,19,20,19,29,0,111,19,31,19,35,0,121,19,40,19,43,0,126,19,50,19,62,0,130, + 19,64,19,68,0,143,22,234,22,234,0,148,0,1,0,2,20,82,20,84,0,2,0,0,0,10,0,0,0,16,0,1,0,0,5,240,0,1,0,0, + 5,240,0,1,0,98,0,78,0,1,0,106,0,12,0,8,0,18,0,24,0,30,0,36,0,42,0,48,0,54,0,60,0,1,2,74,6,20,0,1, + 2,236,7,109,0,1,2,150,6,20,0,1,1,31,6,20,0,1,2,115,6,20,0,1,2,125,6,20,0,1,2,236,7,80,0,1,3,254,7,137, + 0,1,0,8,0,195,0,208,0,213,0,237,1,15,1,45,9,3,9,4,0,1,0,2,2,177,2,178,0,2,0,0,0,10,0,0,0,16,0,1, + 254,0,4,123,0,1,254,0,4,123,0,1,3,140,2,214,0,1,3,146,0,12,0,89,0,180,0,186,0,192,0,198,0,204,0,210,0,216,0,222, + 0,228,0,234,0,240,0,246,0,252,1,2,1,8,1,14,1,20,1,26,1,32,1,38,1,44,1,50,1,56,1,62,1,68,1,74,1,80,1,86, + 1,92,1,98,1,104,1,110,1,116,1,122,1,128,1,134,1,140,1,146,1,152,1,158,1,164,1,170,1,176,1,182,1,188,1,194,1,200,1,206, + 1,212,1,218,1,224,1,230,1,236,1,242,1,248,1,254,2,4,2,10,2,16,2,22,2,28,2,34,2,40,2,46,2,52,2,58,2,64,2,70, + 2,76,2,82,2,88,2,94,2,100,2,106,2,112,2,118,2,124,2,130,2,136,2,142,2,148,2,154,2,160,2,166,2,172,2,178,2,184,2,190, + 2,196,0,1,4,255,0,0,0,1,3,76,0,0,0,1,2,45,0,0,0,1,2,158,0,0,0,1,1,46,0,0,0,1,1,47,0,0,0,1, + 1,43,0,0,0,1,1,43,0,0,0,1,3,39,0,0,0,1,2,162,0,0,0,1,2,238,0,0,0,1,2,190,0,0,0,1,3,209,0,0, + 0,1,2,166,0,0,0,1,2,102,0,0,0,1,2,150,0,0,0,1,1,22,0,0,0,1,1,31,0,0,0,1,1,22,0,0,0,1,1,22, + 0,0,0,1,2,115,0,0,0,1,2,46,0,0,0,1,2,125,0,0,0,1,2,23,0,0,0,1,1,47,0,0,0,1,1,47,0,0,0,1, + 1,47,0,0,0,1,1,47,0,0,0,1,3,39,0,0,0,1,1,31,0,0,0,1,1,31,0,0,0,1,1,31,0,0,0,1,1,31,0,0, + 0,1,2,115,0,0,0,1,3,209,0,0,0,1,4,255,254,128,0,1,3,209,254,128,0,1,2,150,0,0,0,1,1,47,0,0,0,1,1,31, + 0,0,0,1,1,47,0,0,0,1,1,31,0,0,0,1,1,47,0,0,0,1,1,31,0,0,0,1,1,47,0,0,0,1,1,31,0,0,0,1, + 2,115,0,0,0,1,2,125,0,0,0,1,2,92,0,0,0,1,3,39,0,0,0,1,2,196,0,0,0,1,1,47,0,0,0,1,3,39,0,0, + 0,1,2,190,0,0,0,1,2,150,0,0,0,1,2,136,254,82,0,1,1,47,0,0,0,1,1,31,0,0,0,1,1,47,0,0,0,1,1,31, + 0,0,0,1,1,47,0,0,0,1,1,31,0,0,0,1,2,135,0,0,0,1,1,194,0,0,0,1,2,82,0,0,0,1,2,74,0,0,0,1, + 1,30,0,0,0,1,2,115,0,0,0,1,2,23,254,82,0,1,1,47,0,0,0,1,1,31,0,0,0,1,1,47,0,0,0,1,1,31,0,0, + 0,1,3,39,0,0,0,1,2,115,0,0,0,1,6,123,0,0,0,1,5,121,0,0,0,1,6,53,0,0,0,1,5,68,0,0,0,1,3,59, + 0,0,0,1,2,205,0,0,0,1,1,43,0,0,0,1,1,22,0,0,0,1,2,162,0,0,0,1,2,46,0,0,0,1,1,146,0,0,0,1, + 1,47,0,0,0,1,1,30,0,0,0,1,2,125,254,82,0,1,0,89,0,36,0,38,0,39,0,40,0,43,0,44,0,48,0,49,0,50,0,54, + 0,56,0,61,0,68,0,70,0,71,0,72,0,75,0,76,0,80,0,81,0,82,0,86,0,88,0,93,0,142,0,143,0,144,0,145,0,154,0,174, + 0,175,0,176,0,177,0,186,0,195,0,198,0,199,0,213,0,234,0,235,0,236,0,237,0,238,0,239,0,242,0,243,1,15,1,45,1,72,1,81, + 1,82,1,89,1,97,1,121,1,122,1,123,1,145,1,146,1,202,1,203,1,204,1,205,2,18,2,22,2,27,2,29,2,42,2,55,2,84,9,39, + 9,40,9,193,9,194,17,225,17,237,19,8,19,9,19,10,19,11,19,26,19,27,19,56,19,57,19,60,19,61,19,62,19,67,22,234,23,134,0,1, + 0,1,2,216,0,1,0,0,0,6,0,1,254,23,0,0,0,1,15,200,13,150,0,1,16,2,0,12,1,177,3,100,3,106,3,112,3,118,3,124, + 3,130,3,136,3,142,3,148,3,154,3,160,3,166,3,172,3,178,3,184,3,190,3,196,3,202,3,208,3,214,3,220,3,226,3,232,3,238,3,244, + 3,250,4,0,4,6,4,12,4,18,4,24,4,30,4,36,4,42,4,48,4,54,4,60,4,66,4,72,4,78,4,84,4,90,4,96,4,102,4,108, + 4,114,4,120,4,126,4,132,4,138,4,144,4,150,4,156,4,162,4,168,4,174,4,180,4,186,4,192,4,198,4,204,4,210,4,216,4,222,4,228, + 4,234,4,240,4,246,4,252,5,2,5,8,5,14,5,20,5,26,5,32,5,38,5,44,5,50,5,56,5,62,5,68,5,74,5,80,5,86,5,92, + 5,98,5,104,5,110,5,116,5,122,5,128,5,134,5,140,5,146,5,152,5,158,5,164,5,170,5,176,5,182,5,188,5,194,5,200,5,206,5,212, + 5,218,5,224,5,230,5,236,5,242,5,248,5,254,6,4,6,10,6,16,6,22,6,28,6,34,6,40,6,46,6,52,6,58,6,64,6,70,6,76, + 6,82,6,88,6,94,6,100,6,106,6,112,6,118,6,124,6,130,6,136,6,142,6,148,6,154,6,160,6,166,6,172,6,178,6,184,6,190,6,196, + 6,202,6,208,6,214,6,220,6,226,6,232,6,238,6,244,6,250,7,0,7,6,7,12,7,18,7,24,7,30,7,36,7,42,7,48,7,54,7,60, + 7,66,7,72,7,78,7,84,7,90,7,96,7,102,7,108,7,114,7,120,7,126,7,132,7,138,7,144,7,150,7,156,7,162,7,168,7,174,7,180, + 7,186,7,192,7,198,7,204,7,210,7,216,7,222,7,228,7,234,7,240,7,246,7,252,8,2,8,8,8,14,8,20,8,26,8,32,8,38,8,44, + 8,50,8,56,8,62,8,68,8,74,8,80,8,86,8,92,8,98,8,104,8,110,8,116,8,122,8,128,8,134,8,140,8,146,8,152,8,158,8,164, + 8,170,8,176,8,182,8,188,8,194,8,200,8,206,8,212,8,218,8,224,8,230,8,236,8,242,8,248,8,254,9,4,9,10,9,16,9,22,9,28, + 9,34,9,40,9,46,9,52,9,58,9,64,9,70,9,76,9,82,9,88,9,94,9,100,9,106,9,112,9,118,9,124,9,130,9,136,9,142,9,148, + 9,154,9,160,9,166,9,172,9,178,9,184,9,190,9,196,9,202,9,208,9,214,9,220,9,226,9,232,9,238,9,244,9,250,10,0,10,6,10,12, + 10,18,10,24,10,30,10,36,10,42,10,48,10,54,10,60,10,66,10,72,10,78,10,84,10,90,10,96,10,102,10,108,10,114,10,120,10,126,10,132, + 10,138,10,144,10,150,10,156,10,162,10,168,10,174,10,180,10,186,10,192,10,198,10,204,10,210,10,216,10,222,10,228,10,234,10,240,10,246,10,252, + 11,2,11,8,11,14,11,20,11,26,11,32,11,38,11,44,11,50,11,56,11,62,11,68,11,74,11,80,11,86,11,92,11,98,11,104,11,110,11,116, + 11,122,11,128,11,134,11,140,11,146,11,152,11,158,11,164,11,170,11,176,11,182,11,188,11,194,11,200,11,206,11,212,11,218,11,224,11,230,11,236, + 11,242,11,248,11,254,12,4,12,10,12,16,12,22,12,28,12,34,12,40,12,46,12,52,12,58,12,64,12,70,12,76,12,82,12,88,12,94,12,100, + 12,106,12,112,12,118,12,124,12,130,12,136,12,142,12,148,12,154,12,160,12,166,12,172,12,178,12,184,12,190,12,196,12,202,12,208,12,214,12,220, + 12,226,12,232,12,238,12,244,12,250,13,0,13,6,13,12,13,18,13,24,13,30,13,36,13,42,13,48,13,54,13,60,13,66,13,72,13,78,13,84, + 13,90,13,96,13,102,13,108,13,114,13,120,13,126,13,132,0,1,2,139,0,0,0,1,2,139,0,0,0,1,2,139,0,0,0,1,2,139,0,0, + 0,1,2,139,0,0,0,1,2,139,0,0,0,1,2,139,0,0,0,1,2,139,0,0,0,1,2,139,0,0,0,1,2,139,0,0,0,1,2,188, + 0,0,0,1,2,188,0,0,0,1,3,76,0,0,0,1,2,236,0,0,0,1,2,158,0,0,0,1,2,158,0,0,0,1,3,92,0,0,0,1, + 3,2,0,0,0,1,1,47,0,0,0,1,1,46,254,82,0,1,2,158,0,0,0,1,2,153,0,0,0,1,3,115,0,0,0,1,2,245,0,0, + 0,1,3,39,0,0,0,1,2,158,0,0,0,1,3,39,0,0,0,1,2,125,0,0,0,1,2,147,0,0,0,1,2,115,0,0,0,1,2,238, + 0,0,0,1,2,188,0,0,0,1,3,245,0,0,0,1,2,205,0,0,0,1,2,114,0,0,0,1,2,190,0,0,0,1,2,74,0,0,0,1, + 2,183,0,0,0,1,2,164,0,0,0,1,2,102,0,0,0,1,2,150,0,0,0,1,1,59,0,0,0,1,2,166,254,82,0,1,2,166,0,0, + 0,1,1,31,0,0,0,1,1,31,254,82,0,1,2,166,0,0,0,1,1,22,0,0,0,1,3,233,0,0,0,1,2,166,0,0,0,1,2,115, + 0,0,0,1,2,166,254,82,0,1,2,136,254,82,0,1,2,23,0,0,0,1,2,37,0,0,0,1,1,244,0,0,0,1,2,125,0,0,0,1, + 2,94,0,0,0,1,3,71,0,0,0,1,2,98,0,0,0,1,2,96,254,82,0,1,2,23,0,0,0,1,1,47,0,0,0,1,1,47,0,0, + 0,1,1,47,0,0,0,1,1,47,0,0,0,1,3,39,0,0,0,1,3,227,0,0,0,1,1,31,0,0,0,1,1,31,0,0,0,1,1,31, + 0,0,0,1,1,31,0,0,0,1,2,125,0,0,0,1,2,115,0,0,0,1,2,74,0,0,0,1,4,255,254,128,0,1,3,209,254,128,0,1, + 2,236,0,0,0,1,2,102,0,0,0,1,2,150,0,0,0,1,2,208,0,0,0,1,1,47,0,0,0,1,1,31,0,0,0,1,1,47,0,0, + 0,1,1,31,0,0,0,1,1,47,0,0,0,1,1,31,0,0,0,1,1,47,0,0,0,1,1,31,0,0,0,1,2,166,0,0,0,1,2,137, + 254,82,0,1,2,115,0,0,0,1,2,115,0,0,0,1,1,244,0,0,0,1,2,125,0,0,0,1,1,59,0,0,0,1,2,183,0,0,0,1, + 2,92,0,0,0,1,2,102,0,0,0,1,3,39,0,0,0,1,2,196,0,0,0,1,1,55,254,82,0,1,1,47,0,0,0,1,3,39,0,0, + 0,1,1,22,254,122,0,1,2,96,254,82,0,1,2,190,0,0,0,1,2,150,0,0,0,1,2,136,254,82,0,1,1,47,0,0,0,1,1,31, + 0,0,0,1,1,47,0,0,0,1,1,31,0,0,0,1,1,47,0,0,0,1,1,31,0,0,0,1,1,15,0,0,0,1,2,166,0,0,0,1, + 1,244,0,0,0,1,2,188,0,0,0,1,2,238,0,0,0,1,2,188,0,0,0,1,2,158,0,0,0,1,2,148,0,0,0,1,1,46,254,82, + 0,1,1,31,254,82,0,1,3,39,0,0,0,1,2,125,0,0,0,1,2,23,0,0,0,1,2,114,0,0,0,1,2,96,254,82,0,1,2,135, + 0,0,0,1,2,84,0,0,0,1,2,214,0,0,0,1,2,141,0,0,0,1,1,194,0,0,0,1,2,166,0,0,0,1,2,84,254,82,0,1, + 2,84,0,0,0,1,2,99,0,0,0,1,2,82,0,0,0,1,2,82,0,0,0,1,2,74,0,0,0,1,2,64,0,0,0,1,2,64,0,0, + 0,1,2,238,0,0,0,1,1,31,254,82,0,1,2,106,254,82,0,1,2,106,254,82,0,1,2,166,0,0,0,1,2,98,254,82,0,1,2,98, + 0,0,0,1,2,125,254,82,0,1,2,166,0,0,0,1,2,166,254,82,0,1,1,30,0,0,0,1,1,7,0,0,0,1,1,128,0,0,0,1, + 1,153,0,0,0,1,1,254,0,0,0,1,1,22,254,82,0,1,2,238,254,82,0,1,3,233,0,0,0,1,3,233,254,82,0,1,3,233,254,82, + 0,1,2,137,254,82,0,1,2,137,254,82,0,1,2,137,0,0,0,1,2,115,0,0,0,1,4,141,0,0,0,1,2,233,0,0,0,1,2,166, + 254,82,0,1,2,53,0,0,0,1,2,53,0,0,0,1,2,53,254,82,0,1,1,28,254,82,0,1,2,97,254,82,0,1,1,131,0,0,0,1, + 2,116,0,0,0,1,2,59,0,0,0,1,2,81,0,0,0,1,2,39,254,82,0,1,1,22,254,82,0,1,1,22,254,82,0,1,1,241,254,82, + 0,1,1,22,254,82,0,1,2,14,254,82,0,1,1,244,254,82,0,1,2,125,0,0,0,1,2,125,0,0,0,1,2,94,0,0,0,1,3,71, + 0,0,0,1,2,94,0,0,0,1,2,100,0,0,0,1,2,23,254,82,0,1,2,23,0,0,0,1,2,23,254,82,0,1,2,23,254,82,0,1, + 1,176,0,0,0,1,2,58,0,0,0,1,1,176,0,0,0,1,2,58,254,82,0,1,3,39,0,0,0,1,2,97,0,0,0,1,2,72,0,0, + 0,1,2,166,0,0,0,1,2,163,255,246,0,1,1,31,254,82,0,1,2,171,254,82,0,1,2,95,0,0,0,1,2,136,254,82,0,1,1,176, + 0,0,0,1,2,58,0,0,0,1,3,254,0,0,0,1,3,254,254,82,0,1,3,254,0,0,0,1,3,71,254,82,0,1,4,142,0,0,0,1, + 3,32,254,82,0,1,1,22,0,0,0,1,2,126,254,82,0,1,2,74,0,0,0,1,2,125,0,0,0,1,3,39,0,0,0,1,1,47,0,0, + 0,1,1,31,0,0,0,1,1,31,0,0,0,1,3,39,0,0,0,1,2,125,0,0,0,1,2,158,0,0,0,1,2,166,0,0,0,1,3,2, + 0,0,0,1,3,39,0,0,0,1,2,125,0,0,0,1,2,94,0,0,0,1,2,26,0,0,0,1,2,84,0,0,0,1,2,166,0,0,0,1, + 2,84,0,0,0,1,2,84,0,0,0,1,2,25,0,0,0,1,2,64,0,0,0,1,2,166,0,0,0,1,2,88,0,0,0,1,3,5,0,0, + 0,1,2,130,0,0,0,1,2,125,0,0,0,1,1,177,0,0,0,1,2,189,0,0,0,1,2,189,0,0,0,1,2,189,0,0,0,1,2,22, + 0,0,0,1,2,144,0,0,0,1,2,144,0,0,0,1,2,84,0,0,0,1,2,103,0,0,0,1,2,94,0,0,0,1,3,71,0,0,0,1, + 2,23,0,0,0,1,1,254,0,0,0,1,2,88,0,0,0,1,2,94,0,0,0,1,2,166,254,82,0,1,2,236,0,0,0,1,2,102,0,0, + 0,1,2,236,254,137,0,1,2,102,254,137,0,1,2,236,254,191,0,1,2,102,254,191,0,1,2,236,254,116,0,1,2,102,254,116,0,1,2,236, + 254,21,0,1,2,102,254,21,0,1,1,47,0,0,0,1,1,31,0,0,0,1,1,47,0,0,0,1,1,31,0,0,0,1,3,147,0,0,0,1, + 1,232,0,0,0,1,3,76,0,0,0,1,4,66,0,0,0,1,3,82,254,82,0,1,3,102,0,0,0,1,2,14,0,0,0,1,1,214,0,0, + 0,1,2,222,0,0,0,1,3,44,0,0,0,1,3,52,0,0,0,1,3,36,254,82,0,1,3,14,0,0,0,1,3,39,0,0,0,1,3,132, + 0,0,0,1,3,152,0,0,0,1,3,95,0,0,0,1,2,250,0,0,0,1,2,122,254,82,0,1,3,102,0,0,0,1,3,52,0,0,0,1, + 1,247,0,0,0,1,2,198,0,0,0,1,3,142,0,0,0,1,4,76,0,0,0,1,3,22,0,0,0,1,2,198,0,0,0,1,1,243,0,8, + 0,1,2,157,0,7,0,1,1,125,0,0,0,1,2,247,0,0,0,1,3,96,254,82,0,1,2,252,0,0,0,1,3,101,0,0,0,1,2,183, + 0,0,0,1,2,153,0,0,0,1,2,153,0,0,0,1,2,158,0,0,0,1,2,84,0,0,0,1,1,244,0,0,0,1,3,2,0,0,0,1, + 2,166,0,0,0,1,2,158,0,0,0,1,2,166,0,0,0,1,2,190,0,0,0,1,2,23,0,0,0,1,3,39,0,0,0,1,3,115,254,82, + 0,1,2,188,0,0,0,1,2,195,255,228,0,1,2,94,0,0,0,1,3,245,0,0,0,1,3,71,0,0,0,1,2,94,0,0,0,1,3,2, + 0,0,0,1,2,163,0,0,0,1,2,53,0,0,0,1,2,115,0,0,0,1,1,212,0,0,0,1,2,147,254,82,0,1,2,190,254,82,0,1, + 1,47,0,0,0,1,3,2,254,82,0,1,2,137,254,82,0,1,3,119,254,82,0,1,2,158,254,82,0,1,2,74,254,86,0,1,2,25,0,0, + 0,1,5,0,0,0,0,1,3,209,0,0,0,1,4,49,0,0,0,1,3,215,0,0,0,1,4,197,0,0,0,1,3,209,0,0,0,1,3,252, + 0,0,0,1,3,118,0,0,0,1,3,252,0,0,0,1,3,118,255,246,0,1,3,252,0,0,0,1,3,118,254,82,0,1,2,158,0,0,0,1, + 2,174,0,0,0,1,3,149,0,0,0,1,1,146,0,0,0,1,2,203,0,0,0,1,1,174,0,0,0,1,3,59,0,0,0,1,2,205,0,0, + 0,1,5,110,0,0,0,1,4,19,0,0,0,1,2,158,0,0,0,1,2,166,254,82,0,1,3,170,0,0,0,1,3,196,254,82,0,1,3,39, + 0,0,0,1,2,136,254,82,0,1,1,219,0,0,0,1,1,31,254,82,0,1,3,13,254,82,0,1,2,166,254,82,0,1,1,247,254,82,0,1, + 2,245,0,0,0,1,2,166,0,0,0,1,3,92,0,0,0,1,2,166,254,82,0,1,2,158,0,0,0,1,2,166,0,0,0,1,2,245,0,0, + 0,1,2,166,0,0,0,1,2,125,0,0,0,1,2,23,0,0,0,1,2,147,0,0,0,1,2,37,0,0,0,1,3,102,0,0,0,1,3,169, + 0,0,0,1,2,76,0,0,0,1,2,53,0,0,0,1,3,115,0,0,0,1,1,47,0,0,0,1,4,204,0,0,0,1,2,245,0,0,0,1, + 2,238,0,0,0,1,3,60,0,0,0,1,3,7,0,0,0,1,3,7,0,0,0,1,3,92,0,0,0,1,1,146,0,0,0,1,1,145,254,82, + 0,1,3,2,0,0,0,1,2,244,0,0,0,1,4,25,0,0,0,1,3,38,0,0,0,1,2,129,0,0,0,1,2,213,0,0,0,1,3,82, + 0,0,0,1,2,228,0,0,0,1,4,120,0,0,0,1,3,57,0,0,0,1,2,212,0,0,0,1,2,180,0,0,0,1,2,92,0,0,0,1, + 2,139,0,0,0,1,2,139,0,0,0,1,2,119,0,0,0,1,2,139,0,0,0,1,2,139,0,0,0,1,2,139,0,0,0,1,2,139,0,0, + 0,1,2,139,0,0,0,1,2,139,0,0,0,1,2,139,0,0,0,1,1,30,0,0,0,1,1,31,254,82,0,1,1,138,0,1,0,1,1,22, + 0,0,0,1,1,199,0,0,0,1,2,125,254,82,0,2,0,93,0,19,0,28,0,0,0,36,0,61,0,10,0,68,0,93,0,36,0,142,0,145, + 0,62,0,154,0,154,0,66,0,168,0,168,0,67,0,174,0,178,0,68,0,186,0,186,0,73,0,195,0,195,0,74,0,198,0,199,0,75,0,208, + 0,209,0,77,0,213,0,213,0,79,0,233,0,239,0,80,0,242,0,243,0,87,0,250,0,250,0,89,1,13,1,13,0,90,1,15,1,15,0,91, + 1,40,1,41,0,92,1,45,1,45,0,94,1,65,1,65,0,95,1,69,1,69,0,96,1,72,1,72,0,97,1,78,1,78,0,98,1,81,1,82, + 0,99,1,84,1,84,0,101,1,89,1,89,0,102,1,97,1,97,0,103,1,108,1,108,0,104,1,118,1,118,0,105,1,121,1,123,0,106,1,145, + 1,146,0,109,1,202,1,205,0,111,1,246,1,248,0,115,2,5,2,12,0,118,2,14,2,74,0,126,2,76,2,103,0,187,2,105,2,107,0,215, + 2,109,2,109,0,218,3,70,3,70,0,219,3,73,3,73,0,220,3,76,3,76,0,221,3,136,3,136,0,222,3,154,3,154,0,223,3,234,3,235, + 0,224,4,6,4,7,0,226,4,34,4,34,0,228,4,51,4,51,0,229,4,54,4,54,0,230,4,124,4,125,0,231,8,99,8,100,0,233,8,102, + 8,107,0,235,8,110,8,118,0,241,8,122,8,126,0,250,8,130,8,135,0,255,8,204,8,204,1,5,9,3,9,12,1,6,9,39,9,40,1,16, + 9,193,9,194,1,18,9,243,9,244,1,20,11,149,11,149,1,22,11,157,11,160,1,23,11,162,11,164,1,27,11,167,11,167,1,30,11,170,11,175, + 1,31,11,182,11,182,1,37,11,186,11,186,1,38,11,190,11,191,1,39,11,193,11,195,1,41,11,197,11,197,1,44,11,199,11,203,1,45,11,206, + 11,209,1,50,13,198,13,198,1,54,17,212,17,212,1,55,17,214,17,215,1,56,17,217,17,234,1,58,17,236,17,238,1,76,17,241,17,242,1,79, + 18,56,18,56,1,81,18,254,19,1,1,82,19,3,19,4,1,86,19,6,19,17,1,88,19,20,19,35,1,100,19,40,19,43,1,116,19,49,19,68, + 1,120,21,97,21,115,1,140,21,139,21,139,1,159,21,141,21,141,1,160,21,194,21,203,1,161,22,234,22,235,1,171,23,2,23,2,1,173,23,12, + 23,12,1,174,23,22,23,22,1,175,23,134,23,134,1,176,0,2,0,9,2,199,2,202,0,0,2,205,2,209,0,4,2,212,2,215,0,9,2,218, + 2,228,0,13,2,234,2,237,0,24,2,248,2,250,0,28,2,254,2,255,0,31,3,3,3,3,0,33,3,6,3,6,0,34,0,35,0,0,0,142, + 0,0,0,148,0,0,0,154,0,0,0,160,0,0,0,166,0,0,0,172,0,0,0,178,0,0,0,184,0,0,0,190,0,0,0,196,0,0,0,202, + 0,0,0,208,0,0,0,214,0,0,0,220,0,0,0,226,0,0,0,232,0,0,0,238,0,0,0,244,0,0,0,250,0,0,1,0,0,0,1,6, + 0,0,1,12,0,0,1,18,0,0,1,24,0,0,1,30,0,0,1,36,0,0,1,42,0,0,1,48,0,0,1,54,0,0,1,60,0,0,1,66, + 0,0,1,72,0,0,1,78,0,0,1,84,0,0,1,90,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,0,0,0,1,254,0,0,0, + 0,1,254,0,255,254,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0, + 255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1, + 254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255, + 0,1,254,0,255,254,0,1,254,0,255,255,0,1,254,2,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0, + 255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,254,0,255,255,0,1,22,56,19,106,0,1,22,132,0,12,2,103, + 4,208,4,214,4,220,4,226,4,232,4,238,4,244,4,250,5,0,5,6,5,12,5,18,5,24,5,30,5,36,5,42,5,48,5,54,5,60,5,66, + 5,72,5,78,5,84,5,90,5,96,5,102,5,108,5,114,5,120,5,126,5,132,5,138,5,144,5,150,5,156,5,162,5,168,5,176,5,182,5,190, + 5,196,5,204,5,210,5,216,5,222,5,228,5,234,5,240,5,246,5,252,6,2,6,10,6,16,6,22,6,28,6,34,6,40,6,48,6,54,6,60, + 6,66,6,72,6,78,6,84,6,90,6,96,6,102,6,110,6,116,6,122,6,130,6,136,6,142,6,148,6,156,6,162,6,168,6,174,6,180,6,186, + 6,192,6,198,6,204,6,210,6,216,6,222,6,228,6,234,6,240,6,246,6,252,7,2,7,8,7,14,7,20,7,26,7,32,7,38,7,44,7,50, + 7,56,7,62,7,68,7,74,7,80,7,86,7,92,7,98,7,104,7,110,7,116,7,122,7,128,7,134,7,140,7,146,7,152,7,158,7,164,7,170, + 7,176,7,182,7,188,7,194,7,200,7,206,7,212,7,218,7,224,7,230,7,236,7,242,7,248,7,254,8,4,8,10,8,16,8,22,8,30,8,36, + 8,42,8,48,8,54,8,60,8,66,8,74,8,80,8,86,8,92,8,98,8,104,8,110,8,116,8,122,8,128,8,134,8,140,8,146,8,152,8,158, + 8,164,8,170,8,176,8,182,8,188,8,194,8,200,8,206,8,212,8,218,8,224,8,232,8,238,8,244,8,250,9,0,9,6,9,12,9,18,9,24, + 9,30,9,36,9,42,9,48,9,54,9,60,9,66,9,72,9,78,9,84,9,90,9,96,9,102,9,108,9,114,9,120,9,126,9,132,9,138,9,144, + 9,150,9,156,9,162,9,168,9,174,9,180,9,186,9,192,9,198,9,204,9,210,9,216,9,222,9,228,9,234,9,240,9,246,9,252,10,2,10,8, + 10,14,10,20,10,26,10,32,10,38,10,44,10,50,10,58,10,64,10,70,10,76,10,82,10,88,10,94,10,100,10,106,10,112,10,118,10,124,10,130, + 10,136,10,142,10,148,10,154,10,160,10,166,10,172,10,178,10,184,10,190,10,196,10,202,10,208,10,214,10,220,10,226,10,232,10,238,10,244,10,250, + 11,0,11,6,11,12,11,18,11,24,11,30,11,36,11,42,11,48,11,54,11,60,11,66,11,72,11,78,11,84,11,90,11,96,11,102,11,108,11,114, + 11,120,11,126,11,132,11,138,11,144,11,150,11,156,11,162,11,168,11,174,11,180,11,186,11,192,11,198,11,204,11,210,11,216,11,222,11,228,11,234, + 11,240,11,246,11,252,12,2,12,8,12,14,12,20,12,26,12,32,12,38,12,44,12,50,12,56,12,62,12,68,12,74,12,80,12,86,12,92,12,98, + 12,104,12,110,12,116,12,122,12,128,12,134,12,140,12,146,12,152,12,158,12,164,12,170,12,176,12,182,12,188,12,194,12,200,12,206,12,212,12,218, + 12,224,12,230,12,236,12,242,12,248,12,254,13,4,13,10,13,16,13,22,13,28,13,34,13,40,13,46,13,52,13,58,13,64,13,70,13,76,13,82, + 13,88,13,94,13,100,13,106,13,112,13,118,13,124,13,130,13,136,13,142,13,148,13,154,13,160,13,166,13,172,13,178,13,184,13,190,13,196,13,202, + 13,208,13,214,13,220,13,226,13,232,13,238,13,244,13,250,14,0,14,6,14,12,14,18,14,24,14,30,14,36,14,42,14,48,14,54,14,60,14,66, + 14,72,14,78,14,84,14,90,14,96,14,102,14,108,14,114,14,120,14,126,14,132,14,138,14,144,14,150,14,156,14,162,14,168,14,174,14,180,14,186, + 14,192,14,198,14,204,14,210,14,216,14,222,14,228,14,234,14,240,14,246,14,252,15,2,15,10,15,16,15,22,15,28,15,34,15,40,15,46,15,52, + 15,58,15,64,15,70,15,78,15,84,15,90,15,96,15,102,15,108,15,114,15,120,15,126,15,132,15,138,15,144,15,150,15,156,15,162,15,168,15,174, + 15,180,15,186,15,192,15,198,15,204,15,210,15,216,15,222,15,228,15,234,15,240,15,246,15,252,16,2,16,8,16,14,16,20,16,26,16,32,16,38, + 16,44,16,50,16,56,16,62,16,68,16,74,16,80,16,86,16,92,16,98,16,104,16,110,16,116,16,122,16,128,16,134,16,140,16,146,16,152,16,158, + 16,164,16,170,16,176,16,182,16,188,16,194,16,200,16,206,16,212,16,218,16,224,16,230,16,236,16,242,16,248,16,254,17,4,17,10,17,18,17,24, + 17,30,17,36,17,42,17,48,17,54,17,60,17,66,17,72,17,78,17,84,17,90,17,96,17,102,17,108,17,114,17,120,17,126,17,132,17,138,17,146, + 17,152,17,158,17,164,17,170,17,176,17,182,17,188,17,194,17,200,17,206,17,212,17,220,17,226,17,232,17,238,17,244,17,250,18,0,18,6,18,12, + 18,18,18,24,18,30,18,36,18,42,18,48,18,54,18,60,18,66,18,72,18,78,18,84,18,90,18,96,18,102,18,108,18,114,18,120,18,126,18,132, + 18,138,18,144,18,150,18,156,18,162,18,168,18,174,18,180,18,186,18,192,18,198,18,204,18,210,18,216,18,222,18,228,18,234,18,240,18,246,18,252, + 19,2,19,8,19,14,19,20,19,26,19,32,19,38,19,44,19,50,19,56,19,62,19,68,19,74,19,80,19,86,0,1,2,139,5,240,0,1,2,139, + 5,240,0,1,2,139,5,240,0,1,2,139,5,240,0,1,2,139,5,240,0,1,2,139,5,240,0,1,2,139,5,240,0,1,2,139,5,240,0,1, + 2,139,5,240,0,1,2,139,5,240,0,1,2,188,5,240,0,1,2,188,5,240,0,1,3,76,5,240,0,1,2,236,5,240,0,1,2,158,5,240, + 0,1,2,158,5,240,0,1,3,92,5,240,0,1,3,2,5,240,0,1,1,47,5,240,0,1,1,46,5,240,0,1,2,158,5,240,0,1,1,42, + 5,240,0,1,3,115,5,240,0,1,2,245,5,240,0,1,3,39,5,240,0,1,2,158,5,240,0,1,3,39,5,240,0,1,2,125,5,240,0,1, + 2,147,5,240,0,1,2,115,5,240,0,1,2,238,5,240,0,1,2,188,5,240,0,1,3,245,5,240,0,1,2,205,5,240,0,1,2,114,5,240, + 0,1,2,190,5,240,0,2,2,74,4,123,0,35,0,1,1,22,5,240,0,2,2,164,4,123,0,23,0,1,3,254,5,240,0,2,2,150,4,123, + 0,18,0,1,1,224,5,240,0,1,2,106,4,123,0,1,1,22,5,240,0,1,1,31,6,47,0,1,1,31,6,47,0,1,1,22,5,240,0,1, + 1,22,5,240,0,1,3,233,4,123,0,1,2,137,4,123,0,2,2,115,4,123,0,12,0,1,2,166,4,123,0,1,2,111,4,123,0,1,2,23, + 4,123,0,1,2,39,4,123,0,1,1,26,5,240,0,2,2,125,4,123,0,20,0,1,2,94,4,123,0,1,3,71,4,123,0,1,2,98,4,123, + 0,1,2,96,4,123,0,1,2,23,4,123,0,1,3,39,5,240,0,1,3,227,4,123,0,1,2,166,4,123,0,1,2,125,5,240,0,2,2,115, + 4,123,0,26,0,1,1,22,5,240,0,1,2,188,5,240,0,2,2,74,4,123,0,35,0,1,3,254,5,240,0,1,3,170,5,240,0,1,1,81, + 5,240,0,2,1,29,4,123,0,4,0,1,2,166,4,123,0,1,2,137,4,123,0,1,4,20,4,123,0,1,2,115,5,240,0,1,1,26,5,240, + 0,1,2,125,4,123,0,1,1,224,5,240,0,1,1,22,5,240,0,1,1,22,5,240,0,1,2,92,5,240,0,1,3,76,5,240,0,1,3,254, + 5,240,0,1,2,88,5,240,0,1,3,39,5,240,0,1,2,196,5,240,0,1,2,158,5,240,0,1,1,59,5,240,0,1,3,92,5,240,0,1, + 2,191,5,240,0,1,1,47,5,240,0,1,1,47,5,240,0,1,1,23,5,240,0,1,1,22,5,240,0,1,2,130,5,240,0,1,2,245,5,240, + 0,1,3,39,5,240,0,1,3,2,5,240,0,1,2,192,5,240,0,1,2,39,4,123,0,1,1,22,5,240,0,1,1,26,5,240,0,1,2,115, + 5,240,0,1,1,26,5,240,0,1,2,115,5,240,0,1,2,167,5,240,0,1,2,114,5,240,0,1,2,96,4,123,0,1,2,190,5,240,0,1, + 2,23,4,123,0,1,2,190,5,240,0,1,2,150,5,240,0,1,2,136,4,123,0,1,3,39,5,240,0,1,1,15,5,240,0,1,2,137,4,123, + 0,1,1,26,5,240,0,1,1,31,4,123,0,1,2,188,5,240,0,1,2,238,5,240,0,1,2,188,5,240,0,1,2,158,5,240,0,1,2,141, + 4,123,0,1,1,46,5,240,0,1,1,31,6,47,0,1,3,39,5,240,0,1,2,125,5,240,0,1,2,23,4,123,0,1,2,114,5,240,0,1, + 2,96,4,123,0,1,2,135,4,123,0,1,2,84,4,123,0,1,2,214,4,123,0,1,1,22,5,240,0,2,1,206,4,123,0,3,0,1,2,166, + 4,123,0,1,3,254,5,240,0,1,3,254,5,240,0,1,2,99,4,123,0,1,2,82,4,123,0,1,2,82,4,123,0,2,2,74,4,124,0,8, + 0,1,2,64,4,123,0,1,2,64,4,123,0,1,2,238,4,123,0,1,1,31,4,123,0,1,2,106,5,240,0,1,2,106,4,123,0,1,2,166, + 4,123,0,1,2,98,4,123,0,1,2,98,4,123,0,1,2,125,4,123,0,1,1,22,5,240,0,1,1,22,5,240,0,1,1,30,6,47,0,1, + 1,7,4,123,0,1,1,128,4,123,0,1,1,153,5,240,0,1,1,254,5,240,0,1,1,22,5,240,0,1,1,22,5,240,0,1,3,233,4,123, + 0,1,3,233,4,123,0,1,3,233,4,123,0,1,2,137,4,123,0,1,2,137,4,123,0,1,2,137,4,123,0,2,2,115,4,123,0,14,0,1, + 4,141,4,123,0,1,2,233,4,123,0,1,2,166,5,240,0,1,2,51,4,123,0,1,2,51,5,240,0,1,2,51,4,123,0,1,2,94,4,123, + 0,1,2,97,4,123,0,1,2,112,4,123,0,1,1,130,4,123,0,1,2,59,4,123,0,1,2,81,4,123,0,1,2,39,4,123,0,1,1,22, + 5,240,0,1,1,22,5,240,0,1,1,241,4,123,0,1,1,22,5,240,0,1,2,14,4,123,0,1,1,26,5,240,0,1,2,125,4,123,0,1, + 2,125,4,123,0,1,2,94,4,123,0,1,3,71,4,123,0,1,2,94,5,240,0,1,2,100,4,123,0,1,2,23,4,123,0,1,2,23,4,123, + 0,1,2,23,4,123,0,1,2,23,4,123,0,1,1,176,5,240,0,1,2,58,5,240,0,1,1,176,5,240,0,1,2,58,5,240,0,1,3,39, + 5,240,0,1,2,97,4,123,0,1,2,72,4,123,0,1,2,166,5,240,0,1,2,163,4,123,0,1,1,31,6,47,0,1,2,171,4,123,0,1, + 1,31,4,123,0,1,2,106,5,240,0,1,1,176,5,240,0,1,2,58,5,240,0,1,3,254,5,240,0,1,3,254,5,240,0,1,3,254,5,240, + 0,1,3,71,5,240,0,1,4,142,4,123,0,1,3,32,5,240,0,1,1,22,5,240,0,1,2,74,4,123,0,1,2,126,5,240,0,1,2,94, + 4,123,0,1,2,125,5,240,0,2,2,74,4,124,0,8,0,1,2,69,5,240,0,1,2,137,4,123,0,1,2,125,5,240,0,1,1,16,4,123, + 0,1,2,163,4,123,0,1,2,130,5,240,0,1,2,135,4,123,0,1,2,22,4,123,0,1,2,69,5,240,0,1,2,125,4,123,0,1,2,112, + 4,123,0,1,2,166,4,123,0,1,2,116,4,123,0,1,2,125,4,123,0,1,2,106,4,123,0,1,2,26,4,123,0,1,2,170,4,123,0,1, + 2,98,4,123,0,1,2,164,4,123,0,1,3,94,4,123,0,1,2,126,5,240,0,1,2,126,5,240,0,1,2,160,5,240,0,1,2,238,4,123, + 0,1,2,125,4,123,0,1,2,116,4,123,0,1,3,94,4,123,0,1,2,239,4,123,0,1,2,166,4,123,0,1,2,166,4,123,0,1,1,31, + 6,47,0,1,3,39,5,240,0,1,2,166,4,123,0,1,1,242,4,123,0,1,1,22,5,240,0,1,2,166,4,123,0,1,3,72,5,240,0,1, + 2,147,5,240,0,1,1,47,5,240,0,1,4,213,5,240,0,1,4,114,5,240,0,1,3,2,5,240,0,1,2,188,5,240,0,1,2,188,5,240, + 0,1,2,188,5,240,0,1,2,153,5,240,0,1,3,116,5,240,0,1,2,158,5,240,0,1,4,79,5,240,0,1,2,115,5,240,0,1,2,245, + 5,240,0,1,2,238,5,240,0,1,3,125,5,240,0,1,3,115,5,240,0,1,3,2,5,240,0,1,3,39,5,240,0,1,3,2,5,240,0,1, + 2,158,5,240,0,1,3,76,5,240,0,1,2,115,5,240,0,1,2,111,5,240,0,1,3,113,5,240,0,1,2,205,5,240,0,1,3,2,5,240, + 0,1,2,178,5,240,0,1,4,71,5,240,0,1,4,71,5,240,0,1,2,89,5,240,0,1,3,135,5,240,0,1,2,188,5,240,0,1,2,78, + 5,240,0,1,3,115,5,240,0,1,2,224,5,240,0,1,2,84,4,123,0,1,2,155,5,240,0,1,2,97,4,123,0,1,2,69,4,123,0,1, + 2,246,4,123,0,1,2,141,4,123,0,1,3,155,4,123,0,1,2,64,4,123,0,1,2,130,4,123,0,1,2,116,4,123,0,1,2,248,4,123, + 0,1,3,5,4,123,0,1,2,130,4,123,0,1,2,125,4,123,0,1,2,157,4,123,0,1,2,166,4,123,0,1,2,166,4,123,0,1,2,84, + 4,123,0,1,2,96,4,123,0,1,3,107,5,240,0,1,2,98,4,123,0,1,2,157,4,123,0,1,2,75,4,123,0,1,3,169,4,123,0,1, + 3,169,4,123,0,1,2,6,4,123,0,1,3,29,4,123,0,1,1,22,4,123,0,1,1,178,4,123,0,1,2,246,4,123,0,1,2,116,4,123, + 0,1,2,166,4,123,0,1,2,39,4,123,0,1,1,31,6,47,0,1,1,31,6,47,0,1,1,31,6,47,0,1,3,250,4,123,0,1,3,243, + 4,123,0,1,1,52,5,240,0,1,2,157,4,123,0,1,3,188,5,240,0,1,3,94,4,123,0,1,1,243,5,240,0,1,3,99,4,123,0,1, + 3,115,5,240,0,1,2,246,4,123,0,1,3,132,5,240,0,1,3,34,4,123,0,1,4,79,5,240,0,1,3,150,4,123,0,1,3,44,5,240, + 0,1,2,115,4,123,0,1,4,79,5,240,0,1,3,150,4,123,0,1,3,20,5,240,0,1,3,37,5,250,0,1,3,39,5,240,0,1,2,125, + 4,123,0,1,3,31,5,240,0,1,2,149,4,123,0,1,2,158,5,240,0,1,2,166,4,123,0,1,4,79,5,240,0,1,3,155,4,123,0,1, + 2,238,5,240,0,1,2,116,4,123,0,1,2,238,5,240,0,1,2,116,4,123,0,1,2,238,5,240,0,1,1,22,5,240,0,1,4,26,5,240, + 0,1,3,101,4,123,0,1,3,2,5,240,0,1,2,115,5,240,0,1,2,75,4,123,0,1,2,163,4,123,0,1,2,137,4,123,0,1,3,5, + 4,123,0,1,3,39,5,240,0,1,2,125,4,123,0,1,2,69,4,123,0,1,2,205,5,240,0,1,2,98,4,123,0,1,2,248,4,123,0,1, + 2,238,5,240,0,1,2,116,4,123,0,1,2,248,4,123,0,1,2,130,4,123,0,1,2,94,4,123,0,1,2,26,4,123,0,1,4,20,4,123, + 0,1,2,84,4,123,0,1,2,166,4,123,0,1,2,84,4,131,0,1,2,84,4,123,0,1,2,25,4,123,0,1,2,64,4,123,0,1,2,166, + 4,123,0,1,1,24,4,123,0,1,3,5,4,123,0,1,2,130,4,123,0,1,2,125,4,123,0,1,1,177,4,123,0,1,2,189,4,123,0,1, + 2,189,4,123,0,1,2,189,4,123,0,1,4,20,4,123,0,1,2,22,4,123,0,1,2,144,4,123,0,1,2,144,4,123,0,1,2,84,4,123, + 0,1,2,103,4,123,0,1,2,98,4,123,0,1,2,94,4,123,0,1,3,71,4,123,0,1,2,23,4,123,0,1,1,254,4,123,0,1,1,24, + 4,123,0,1,2,94,4,123,0,1,2,248,4,123,0,1,2,166,4,123,0,1,2,236,5,240,0,1,3,254,5,240,0,1,2,236,5,240,0,1, + 3,254,5,240,0,1,2,236,5,240,0,1,3,254,5,240,0,1,2,236,5,240,0,1,3,254,5,240,0,1,3,147,5,240,0,1,1,232,5,240, + 0,2,3,76,5,240,0,22,0,1,4,66,5,240,0,1,3,82,5,240,0,1,3,102,5,240,0,1,1,198,5,240,0,1,1,214,5,240,0,1, + 2,222,5,240,0,1,3,44,5,240,0,1,3,52,5,226,0,1,3,36,4,123,0,1,3,14,5,240,0,2,3,39,5,240,0,12,0,1,3,132, + 5,240,0,1,3,152,5,240,0,1,3,95,5,226,0,1,2,250,5,226,0,1,2,122,5,240,0,1,3,102,5,240,0,1,3,52,5,240,0,1, + 2,202,4,68,0,1,2,198,5,240,0,1,3,142,5,240,0,1,4,76,5,240,0,1,3,22,5,240,0,1,2,198,5,240,0,1,1,243,5,231, + 0,1,2,157,5,231,0,1,1,125,6,49,0,1,2,247,4,123,0,1,3,96,4,123,0,1,2,252,5,240,0,1,3,101,5,240,0,1,1,22, + 5,240,0,1,1,42,5,240,0,1,1,22,5,240,0,1,1,42,5,240,0,1,2,158,5,240,0,1,2,125,5,240,0,1,2,84,4,123,0,1, + 1,26,5,240,0,1,3,2,5,240,0,1,1,22,5,240,0,1,2,158,5,240,0,1,1,22,5,240,0,1,2,190,5,240,0,1,2,23,4,123, + 0,1,3,39,5,240,0,1,3,115,5,240,0,1,2,188,5,240,0,1,2,195,5,211,0,1,2,94,4,123,0,1,3,245,5,240,0,1,3,71, + 4,123,0,1,2,94,4,123,0,1,3,2,5,240,0,1,2,163,4,123,0,1,2,170,4,123,0,1,2,51,5,240,0,1,2,115,4,123,0,1, + 1,212,4,123,0,1,2,147,5,240,0,1,2,190,5,240,0,1,2,136,5,240,0,1,2,158,5,240,0,1,1,47,5,240,0,1,4,179,5,240, + 0,1,4,12,4,123,0,1,5,48,5,240,0,1,3,198,4,123,0,1,2,153,5,240,0,1,2,246,4,123,0,1,4,213,5,240,0,1,4,24, + 4,123,0,1,2,153,5,240,0,1,3,5,4,123,0,1,3,39,5,240,0,1,3,108,5,240,0,1,2,218,4,123,0,1,5,110,5,240,0,1, + 4,19,4,123,0,1,2,84,4,123,0,1,2,84,4,123,0,1,3,2,5,240,0,1,1,22,5,240,0,1,3,119,5,240,0,1,2,158,5,240, + 0,2,2,74,4,123,0,8,0,1,2,25,4,123,0,1,5,0,5,240,0,1,3,209,4,123,0,1,4,49,5,240,0,1,3,215,4,123,0,1, + 4,197,5,240,0,1,3,209,4,123,0,1,3,252,5,240,0,1,3,118,4,123,0,1,3,252,5,240,0,1,3,118,4,113,0,1,3,252,5,240, + 0,1,3,118,4,123,0,1,2,158,5,240,0,1,1,30,5,240,0,1,1,42,5,240,0,1,1,146,5,240,0,1,1,92,5,240,0,1,1,174, + 5,240,0,1,3,59,5,240,0,2,2,205,4,123,0,0,0,1,5,110,5,240,0,1,4,19,4,123,0,1,2,158,5,240,0,1,2,166,4,123, + 0,1,3,170,5,240,0,1,3,196,4,123,0,1,3,39,5,240,0,1,2,111,4,123,0,1,1,22,5,240,0,1,1,22,5,240,0,1,1,219, + 5,240,0,2,1,29,4,123,0,0,0,1,2,240,5,240,0,1,2,137,4,123,0,1,2,178,5,240,0,1,1,247,5,240,0,1,2,245,5,240, + 0,1,2,137,4,123,0,1,3,92,5,240,0,1,2,106,4,123,0,1,2,158,5,240,0,1,1,22,5,240,0,1,2,245,5,240,0,1,2,137, + 4,123,0,1,2,125,5,240,0,1,2,23,4,123,0,1,2,147,5,240,0,1,2,39,4,123,0,1,3,102,5,240,0,1,3,169,4,123,0,1, + 2,76,5,240,0,1,2,53,5,240,0,1,3,115,5,240,0,1,1,47,7,136,0,1,4,204,5,240,0,1,2,245,5,240,0,1,2,238,5,240, + 0,1,3,60,6,4,0,1,3,7,5,240,0,1,3,7,5,240,0,1,3,92,5,240,0,1,1,146,5,240,0,1,1,145,5,240,0,1,3,2, + 5,240,0,1,2,244,5,240,0,1,4,25,5,240,0,1,3,38,5,240,0,1,2,129,5,240,0,1,2,213,5,240,0,1,3,82,5,240,0,1, + 2,228,5,240,0,1,4,120,5,247,0,1,3,57,5,247,0,1,2,212,5,247,0,1,2,180,4,123,0,1,2,92,4,123,0,1,2,139,5,240, + 0,1,2,139,5,240,0,1,2,119,5,240,0,1,2,139,5,240,0,1,2,139,5,240,0,1,2,139,5,240,0,1,2,139,5,240,0,1,2,139, + 5,240,0,1,2,139,5,240,0,1,2,139,5,240,0,1,2,245,5,240,0,1,1,30,4,123,0,1,1,31,4,123,0,1,2,234,5,240,0,1, + 1,22,5,240,0,1,1,31,4,123,0,1,1,31,4,123,0,1,1,31,4,123,0,1,1,199,5,240,0,2,2,125,4,123,0,0,0,2,0,119, + 0,19,0,28,0,0,0,36,0,61,0,10,0,68,0,93,0,36,0,154,0,154,0,62,0,168,0,169,0,63,0,178,0,178,0,65,0,186,0,186, + 0,66,0,192,0,192,0,67,0,198,0,199,0,68,0,209,0,209,0,70,0,232,0,233,0,71,0,243,0,243,0,73,0,250,0,250,0,74,1,13, + 1,13,0,75,1,21,1,21,0,76,1,40,1,41,0,77,1,53,1,53,0,79,1,65,1,66,0,80,1,69,1,69,0,82,1,72,1,73,0,83, + 1,78,1,78,0,85,1,80,1,86,0,86,1,88,1,89,0,93,1,91,1,93,0,95,1,95,1,95,0,98,1,97,1,97,0,99,1,102,1,102, + 0,100,1,105,1,106,0,101,1,108,1,112,0,103,1,116,1,123,0,108,1,172,1,172,0,116,1,246,1,249,0,117,2,5,2,12,0,121,2,14, + 2,74,0,129,2,76,2,103,0,190,2,105,2,107,0,218,2,109,2,109,0,221,3,69,3,93,0,222,3,100,3,101,0,247,3,105,3,105,0,249, + 3,107,3,107,0,250,3,109,3,109,0,251,3,111,3,111,0,252,3,119,3,119,0,253,3,132,3,138,0,254,3,140,3,140,1,5,3,144,3,144, + 1,6,3,152,3,154,1,7,3,157,3,158,1,10,3,163,3,172,1,12,3,174,3,204,1,22,3,206,3,227,1,53,3,232,3,239,1,75,3,243, + 4,1,1,83,4,4,4,9,1,98,4,34,4,35,1,104,4,42,4,43,1,106,4,46,4,54,1,108,4,64,4,64,1,117,4,77,4,77,1,118, + 4,88,4,88,1,119,4,94,4,94,1,120,4,98,4,98,1,121,4,124,4,125,1,122,4,139,4,139,1,124,4,146,4,147,1,125,4,167,4,167, + 1,127,4,178,4,179,1,128,4,181,4,181,1,130,4,183,4,183,1,131,8,99,8,107,1,132,8,110,8,119,1,141,8,122,8,126,1,151,8,129, + 8,135,1,156,8,139,8,139,1,163,8,204,8,204,1,164,9,5,9,12,1,165,9,243,9,244,1,173,11,149,11,149,1,175,11,157,11,160,1,176, + 11,162,11,164,1,180,11,167,11,167,1,183,11,170,11,175,1,184,11,182,11,182,1,190,11,186,11,186,1,191,11,190,11,191,1,192,11,193,11,195, + 1,194,11,197,11,197,1,197,11,199,11,203,1,198,11,206,11,209,1,203,13,198,13,198,1,207,17,212,17,238,1,208,17,241,17,242,1,235,18,30, + 18,30,1,237,18,50,18,50,1,238,18,56,18,56,1,239,18,205,18,208,1,240,18,211,18,217,1,244,18,219,18,222,1,251,18,225,18,225,1,255, + 18,227,18,227,2,0,18,254,19,1,2,1,19,3,19,4,2,5,19,6,19,17,2,7,19,20,19,35,2,19,19,37,19,37,2,35,19,39,19,43, + 2,36,19,48,19,68,2,41,21,97,21,115,2,62,21,139,21,139,2,81,21,141,21,141,2,82,21,194,21,203,2,83,22,233,22,235,2,93,23,2, + 23,2,2,96,23,12,23,12,2,97,23,16,23,16,2,98,23,19,23,20,2,99,23,22,23,22,2,101,23,134,23,134,2,102,0,2,0,12,2,177, + 2,197,0,0,2,238,2,243,0,21,2,245,2,245,0,27,2,247,2,247,0,28,2,251,2,253,0,29,3,1,3,2,0,32,3,4,3,4,0,34, + 4,23,4,27,0,35,8,243,8,248,0,40,11,140,11,146,0,46,22,185,22,195,0,53,23,122,23,122,0,64,0,65,0,0,1,6,0,0,1,14, + 0,0,1,22,0,0,1,30,0,0,1,36,0,0,1,42,0,0,1,48,0,0,1,54,0,0,1,62,0,0,1,70,0,0,1,76,0,0,1,82, + 0,0,1,88,0,0,1,96,0,0,1,102,0,0,1,108,0,0,1,114,0,0,1,120,0,0,1,126,0,0,1,132,0,0,1,138,0,0,1,144, + 0,0,1,150,0,0,1,156,0,0,1,162,0,0,1,168,0,0,1,174,0,0,1,180,0,0,1,186,0,0,1,192,0,0,1,198,0,0,1,204, + 0,0,1,210,0,0,1,216,0,0,1,222,0,0,1,228,0,0,1,234,0,0,1,240,0,0,1,246,0,0,1,252,0,0,2,2,0,0,2,8, + 0,0,2,14,0,0,2,20,0,0,2,26,0,0,2,32,0,0,2,38,0,0,2,44,0,0,2,50,0,0,2,56,0,0,2,62,0,0,2,70, + 0,0,2,78,0,0,2,84,0,0,2,90,0,0,2,96,0,0,2,102,0,0,2,108,0,0,2,114,0,0,2,120,0,0,2,126,0,0,2,132, + 0,0,2,138,0,0,2,144,0,0,2,150,0,2,254,0,4,123,0,4,0,2,254,0,4,123,0,4,0,2,254,0,4,123,0,7,0,1,254,0, + 4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,2,254,0,4,123,0,4,0,2,254,0,4,123,0,8,0,1,254,0, + 4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,2,254,0,4,123,0,7,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123, + 0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,138,3,111,0,1,254,0,4,114,0,1,254,0,4,114,0,1,254,0,4,123,0,1,254,138, + 4,114,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1, + 254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,253,142,4,123, + 0,1,254,127,4,123,0,1,254,65,4,123,0,1,254,23,4,123,0,1,252,234,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0, + 4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1, + 254,0,4,123,0,2,254,0,4,123,0,12,0,2,254,0,4,123,0,16,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1, + 254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123, + 0,1,254,0,4,123,0,1,254,0,4,123,0,1,254,0,4,123,0,1,1,62,0,254,0,1,1,68,0,12,0,30,0,62,0,68,0,74,0,80, + 0,86,0,92,0,98,0,104,0,110,0,116,0,122,0,128,0,134,0,140,0,146,0,152,0,158,0,164,0,170,0,176,0,182,0,188,0,194,0,200, + 0,206,0,212,0,218,0,224,0,230,0,236,0,1,4,216,0,0,0,1,3,192,0,0,0,1,1,88,0,0,0,1,3,40,0,0,0,1,2,238, + 0,0,0,1,2,156,0,0,0,1,2,190,255,254,0,1,3,179,0,0,0,1,3,108,0,0,0,1,1,62,0,0,0,1,2,116,0,0,0,1, + 4,27,0,0,0,1,0,250,254,86,0,1,2,23,0,0,0,1,3,40,0,0,0,1,2,116,0,0,0,1,1,62,0,0,0,1,2,92,0,0, + 0,1,1,88,0,0,0,1,3,40,0,0,0,1,2,190,0,0,0,1,2,150,0,0,0,1,2,136,254,82,0,1,2,135,0,0,0,1,1,194, + 0,0,0,1,1,68,0,0,0,1,2,116,0,0,0,1,2,23,254,82,0,1,5,60,0,0,0,1,1,68,0,0,0,1,0,30,0,36,0,40, + 0,44,0,50,0,56,0,60,0,61,0,68,0,72,0,76,0,82,0,88,0,92,0,93,0,154,0,186,0,243,1,72,1,89,1,97,1,121,1,122, + 1,123,2,18,2,22,2,42,2,55,2,84,17,225,22,234,0,1,0,1,2,217,0,1,0,0,0,6,0,1,253,244,0,0,0,2,38,240,0,4, + 0,0,33,48,35,32,0,53,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,211,255,183,0,0,0,0,0,0,0,75,0,114,0,57,0,75,0,0,255,68, + 0,0,255,136,255,173,255,154,255,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0, + 255,201,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,255,211,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,211,255,220,255,220,0,57,0,0,255,220,0,0,0,0,255,220,0,0,255,220,255,220,0,0,255,97, + 0,0,255,125,255,144,0,0,255,97,0,0,0,0,255,220,255,220,255,220,255,183,0,0,0,0,0,0,0,0,255,220,0,0,0,0,255,220,0,0, + 255,136,255,173,0,0,255,117,255,183,0,0,0,0,255,220,0,0,255,220,0,0,255,220,0,0,0,57,0,0,255,220,255,220,255,220,255,220,255,220, + 255,220,255,220,255,220,0,0,0,0,255,220,255,220,255,97,0,0,0,0,255,144,255,173,255,97,255,117,255,220,255,220,255,97,0,0,255,97,255,117, + 255,173,255,144,254,248,255,3,0,47,0,0,0,0,0,0,0,0,0,0,0,0,255,220,0,0,0,0,255,220,0,0,255,220,0,0,255,220,0,0, + 0,0,255,193,255,183,0,0,255,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,255,193,255,220,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0, + 0,0,0,0,255,220,255,220,0,0,0,0,255,220,0,0,0,0,0,0,255,183,0,0,255,144,0,0,255,220,0,0,0,0,0,0,0,0,0,0, + 0,0,255,183,255,144,255,144,255,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 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,220,0,0,0,0,0,0,0,0,0,0,255,220,0,0, + 0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,255,220,0,0,0,0,255,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,255,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0, + 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,144,0,0,0,0,0,0,0,0,0,0,255,144,0,0, + 0,0,0,0,255,211,255,201,255,68,0,0,0,0,254,183,255,97,255,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,220,255,220, + 0,0,0,0,0,0,0,0,0,0,0,0,255,68,0,0,0,0,255,144,0,0,0,0,255,107,0,0,0,0,255,183,255,107,0,0,0,0,255,144, + 0,0,0,0,0,0,255,68,0,0,0,0,0,0,0,0,255,68,255,144,0,0,255,183,255,144,255,68,255,68,0,0,0,0,0,0,0,0,0,0, + 0,0,255,144,0,0,0,0,255,107,255,183,0,0,255,220,255,220,255,144,0,0,0,0,0,0,255,68,0,0,255,183,255,220,255,183,0,0,255,68, + 0,0,0,0,255,211,0,0,254,136,0,0,0,0,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,183, + 0,0,0,0,0,0,0,0,255,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,211,255,211,255,201,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,183,255,193,255,183,0,0,255,183,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,183,255,193,255,144,0,0,255,41,0,0,0,0,255,220,0,0,255,144,0,0,0,0,0,0,0,0,255,144,0,0,0,0,255,97, + 255,201,0,0,255,183,0,0,255,183,0,0,255,220,0,0,0,0,255,154,0,0,0,0,0,0,0,0,0,0,255,154,0,0,0,0,0,0,255,154, + 0,0,0,0,0,0,255,107,255,125,0,0,0,0,255,144,255,220,255,154,0,0,255,154,255,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,193,255,193,0,0,0,0,255,220,0,0,0,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,255,183,0,0,0,0,254,230, + 255,154,255,31,255,68,0,0,254,240,0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0,255,220, + 0,0,0,0,0,0,255,68,0,0,0,0,0,0,0,0,0,0,255,220,0,0,255,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,254,97,253,230,0,0,0,0,0,57,255,173,255,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,255,220,0,0,255,125,255,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,211,255,220,255,68,0,0,255,211,254,193,0,0,255,125,0,0,0,0,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,211,0,0,255,164,0,0,0,0,255,183,0,0,0,0,255,211,0,0,255,220,255,183,255,220,255,220,0,0,255,220, + 0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0,255,164,255,183,0,0,255,183,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,38,0,38,254,183,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,211,255,220,255,125,0,0,255,173,255,183,255,193,255,173,0,0,255,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,107, + 0,0,255,144,255,173,0,0,255,125,0,0,255,211,0,0,0,0,255,164,0,0,0,0,0,0,0,0,0,0,255,164,0,0,0,0,0,0,255,164, + 0,0,0,0,0,0,255,144,255,144,255,220,0,0,255,154,255,211,255,164,0,0,255,164,255,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,107,255,125,255,220,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,68,255,13,255,31,255,97,0,0,255,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,220, + 0,0,0,0,0,0,0,0,0,0,0,0,254,173,254,164,0,0,254,164,0,0,0,0,255,193,0,0,0,0,254,164,254,211,254,173,0,0,254,201, + 0,0,254,173,0,0,254,193,255,68,255,144,0,0,255,136,255,17,254,224,0,0,254,244,254,231,0,0,0,0,254,164,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,211,254,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,136,254,248,255,89,255,125,0,0,0,0,0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,255,97,0,0,0,0,255,97,0,0,0,0,255,211,0,0,0,0,255,97,0,0,0,0,0,0,255,117, + 0,0,0,0,0,0,255,201,255,78,255,144,0,0,0,0,255,97,255,97,0,0,255,97,255,117,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,254,230,0,0,255,173,255,21,255,136,255,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,255,125,0,0,0,0,255,136,0,0,0,0,255,211,0,0,0,0,255,136,255,164,0,0,0,0,255,183, + 0,0,0,0,0,0,255,220,255,144,255,220,0,0,0,0,255,125,255,136,0,0,255,136,255,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,0,0,254,248,0,0,255,154,0,0,0,0,0,0,0,0,255,107,0,0,0,0,0,0,0,0,255,125,0,0,0,0,255,220, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,164,0,0,0,0,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,144,0,0,0,0,255,107,0,0,255,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,97,255,173,255,211,0,0,255,13,254,97,254,240,255,97,0,0,255,144,0,0,0,0,0,0,0,0,255,144,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,254,230,0,0,0,0,254,240,0,0,0,0,255,183,0,0,0,0,254,240,0,0,0,0,0,0,255,21, + 0,0,0,0,0,0,0,0,255,31,255,107,0,0,255,144,254,230,254,240,0,0,254,240,255,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,144,255,220,254,248,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,255,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,144,255,107,255,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,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,220,0,0, + 0,0,255,220,0,0,255,220,255,183,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,255,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,0,0,0,0,255,183,0,0,0,0,0,0,0,0,0,0,255,183,0,0,0,0,0,0,255,193, + 0,0,0,0,0,0,255,183,0,0,0,0,0,0,0,0,255,220,255,183,0,0,255,183,255,193,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,107,255,144,255,164,0,0,0,38,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,193,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,107,255,183,255,125,0,0,255,125,255,68,255,220,0,0,0,0,0,0,0,0,0,0,0,0,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,211,255,220,255,211,0,0,255,220,0,0,0,0,255,220,255,211,255,220,0,0,0,0,0,0, + 0,0,0,0,255,201,0,0,255,183,0,0,0,0,0,0,0,0,255,211,0,0,255,211,0,0,0,0,0,0,255,211,0,0,0,0,0,0,0,72, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,86,254,201,0,0,255,201,255,97,255,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,254,240,0,0,0,0,255,68,255,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,0,0,255,193,0,0,0,0,0,0,0,0,0,0,255,193,0,0,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,193,0,0,255,193,0,0,0,0,0,0,255,220,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,254,220,255,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,254,211,0,0,0,0,0,0,0,0,0,0,255,220,255,220,255,220,0,0,255,220,255,220,0,0,0,0,0,0,255,144, + 0,0,255,144,255,220,0,0,255,107,0,0,0,0,0,0,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,220,255,220,0,0,255,220,0,0,0,0,0,151,255,220,0,0,0,0,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,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,183,255,183,255,220,255,220,0,0,0,0,255,220,255,220,0,0,0,0,255,68, + 0,0,255,78,255,144,255,144,255,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, + 255,220,255,220,0,0,255,220,0,0,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,211,255,220,255,220,0,57,0,0,255,220,0,0,0,0,255,220,0,0,255,220,255,220,0,0,255,97, + 0,0,255,125,255,144,0,0,255,97,0,0,0,0,255,220,255,220,255,220,255,183,0,0,0,0,0,0,0,0,255,220,0,0,0,0,255,220,0,0, + 255,136,255,173,0,0,255,117,255,183,0,0,0,0,255,220,0,0,255,220,0,0,255,220,0,0,0,57,0,0,255,220,255,220,0,0,255,220,255,220, + 0,0,255,220,255,220,0,0,0,0,255,220,255,220,255,97,0,0,0,0,255,144,255,173,255,97,255,117,0,0,0,0,0,0,255,220,0,0,0,0, + 0,0,0,0,254,248,255,3,0,47,0,0,255,211,255,220,255,220,0,57,0,0,255,220,0,0,0,0,255,220,0,0,255,220,255,220,0,0,255,97, + 0,0,255,125,255,144,0,0,255,97,0,0,0,0,255,220,255,220,255,220,255,183,0,0,0,0,0,0,0,0,255,220,0,0,0,0,255,220,0,0, + 255,136,255,173,0,0,255,117,255,183,0,0,0,0,255,220,0,0,255,220,0,0,255,220,0,0,0,57,0,0,255,220,255,220,0,0,255,220,255,220, + 0,0,255,220,255,220,0,0,0,0,255,220,255,220,255,97,0,0,0,0,255,144,255,173,255,97,255,117,0,0,0,0,0,0,255,220,0,0,0,0, + 0,0,255,144,254,248,255,3,0,47,0,0,255,211,255,220,255,220,0,57,0,0,255,220,0,0,0,0,255,220,0,0,255,220,255,220,0,0,255,97, + 0,0,255,125,255,144,0,0,255,97,0,0,0,0,255,220,255,220,255,220,255,183,0,0,0,0,0,0,0,0,255,220,0,0,0,0,255,220,0,0, + 255,136,255,173,0,0,255,117,255,183,0,0,0,0,255,220,0,0,255,220,0,0,255,220,0,0,0,57,0,0,255,220,255,220,0,0,255,220,255,220, + 0,0,255,220,255,220,0,0,0,0,255,220,255,220,255,97,0,0,0,0,255,144,255,173,255,97,255,117,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,255,144,254,248,255,3,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,173,255,164,255,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,38,0,0,0,0,0,0,255,107,255,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,220,0,0,255,68,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,144,255,144,255,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,164,255,144,255,183,0,0,255,211,255,220,255,220,0,57,0,0,255,220,0,0,0,0,255,220,0,0,255,220,255,220,0,0,255,97, + 0,0,255,125,255,144,0,0,255,97,0,0,0,0,255,220,255,220,255,220,255,183,0,0,0,0,0,0,0,0,255,220,0,0,0,0,255,220,0,0, + 255,136,255,173,0,0,255,117,255,183,0,0,0,0,0,0,0,0,255,220,0,0,255,220,0,0,0,57,0,0,0,0,255,220,0,0,255,220,255,220, + 255,220,255,220,0,0,0,0,0,0,255,220,255,220,255,97,0,0,0,0,255,144,255,173,255,97,255,117,0,0,0,0,0,0,255,220,0,0,0,0, + 0,0,255,144,254,248,255,2,0,47,0,0,255,211,255,220,255,220,0,57,0,0,255,220,0,0,0,0,255,220,0,0,255,220,255,220,0,0,255,97, + 0,0,255,125,255,144,0,0,255,97,0,0,0,0,255,220,255,220,255,220,255,183,0,0,0,0,0,0,0,0,255,220,0,0,0,0,255,220,0,0, + 255,136,255,173,0,0,0,0,255,183,0,0,0,0,0,0,0,0,255,220,0,0,255,220,0,0,0,57,0,0,0,0,255,220,0,0,255,220,255,220, + 255,220,255,220,0,0,0,0,0,0,255,220,0,0,255,97,0,0,0,0,255,144,255,173,255,97,0,0,0,0,0,0,0,0,255,220,0,0,0,0, + 0,0,255,144,254,248,255,2,0,47,0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,255,220,0,0,0,0,255,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,255,220,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,211,255,201,255,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,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,63,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,125,255,68,255,220,0,0,0,0,0,0,0,0,0,0,0,0,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,211,255,220,255,211,0,0,255,220,0,0,0,0,255,220,255,211,255,220,0,0,0,0,0,0, + 0,0,0,0,255,201,0,0,255,183,0,0,0,0,0,0,0,0,255,211,0,0,255,211,0,0,0,0,0,0,255,211,0,0,0,0,0,0,255,220, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,86,254,201,0,0,255,68,255,13,255,31,255,97,0,0,255,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,220, + 0,0,0,0,0,0,0,0,0,0,0,0,254,173,254,164,0,0,254,164,0,0,0,0,255,193,0,0,0,0,254,164,254,211,254,173,0,0,254,201, + 0,0,254,173,0,0,254,193,255,68,255,144,0,0,255,136,254,173,254,164,0,0,254,164,254,201,0,0,0,0,254,164,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,211,254,248,0,0,0,0,0,0,0,0,255,211,255,183,0,0,0,0,0,0,0,75,0,114,0,57,0,75,0,0,255,68, + 0,0,255,136,255,173,255,154,255,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0, + 255,201,0,0,0,0,255,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,248,255,193,255,183,255,193,255,193,255,183,255,193,255,183,255,183,0,0,0,0, + 0,0,0,0,0,0,255,136,0,0,255,220,0,0,0,0,0,0,0,0,255,183,0,0,0,0,0,0,255,144,255,107,255,144,0,0,0,0,0,0, + 255,183,255,183,0,0,255,183,0,0,0,0,254,125,255,183,0,0,0,0,255,183,255,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,255,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,255,183,255,144,255,183,255,183,255,183,0,47,255,144,255,144,0,0,254,230, + 0,0,254,136,255,3,255,183,254,136,0,0,0,0,0,0,0,0,0,0,255,220,0,0,0,0,0,0,255,183,255,183,255,183,0,0,0,0,0,0, + 255,21,255,60,0,0,255,144,0,0,0,0,0,38,255,144,0,0,0,0,255,183,255,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,255,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,82,0,16,0,16,0,1,0,36,0,36,0,2,0,37,0,37,0,3,0,38,0,38,0,4,0,39, + 0,39,0,5,0,41,0,41,0,6,0,42,0,42,0,7,0,43,0,43,0,8,0,45,0,45,0,9,0,46,0,46,0,10,0,47,0,47,0,11, + 0,50,0,50,0,12,0,51,0,51,0,13,0,52,0,52,0,14,0,53,0,53,0,15,0,54,0,54,0,16,0,55,0,55,0,17,0,56,0,56, + 0,18,0,57,0,57,0,19,0,58,0,58,0,20,0,59,0,59,0,21,0,60,0,60,0,22,0,61,0,61,0,23,0,72,0,72,0,24,0,73, + 0,73,0,25,0,78,0,78,0,26,0,81,0,81,0,27,0,82,0,82,0,28,0,85,0,85,0,29,0,89,0,89,0,30,0,90,0,90,0,31, + 0,91,0,91,0,32,0,92,0,92,0,33,0,109,0,109,0,34,0,125,0,125,0,35,0,130,0,130,0,36,0,131,0,132,0,37,0,133,0,133, + 0,38,0,134,0,134,0,37,0,136,0,136,0,39,0,137,0,137,0,40,0,146,0,146,0,5,0,148,0,152,0,12,0,155,0,158,0,18,0,159, + 0,159,0,22,0,160,0,160,0,41,0,161,0,161,0,42,0,170,0,173,0,24,0,178,0,178,0,43,0,179,0,179,0,27,0,180,0,184,0,28, + 0,191,0,191,0,33,0,193,0,193,0,33,0,194,0,194,0,44,0,196,0,196,0,44,0,198,0,198,0,45,0,200,0,200,0,40,0,206,0,206, + 0,40,0,208,0,208,0,5,0,210,0,210,0,46,0,221,0,221,0,24,0,224,0,224,0,7,0,251,0,251,0,11,0,255,0,255,0,11,1,2, + 1,2,0,47,1,10,1,10,0,27,1,22,1,22,0,15,1,23,1,23,0,29,1,26,1,26,0,15,1,27,1,27,0,48,1,32,1,32,0,16, + 1,34,1,34,0,16,1,38,1,38,0,49,1,48,1,48,0,18,1,58,1,58,0,22,1,63,1,63,0,23,10,238,10,238,0,50,10,250,10,250, + 0,51,10,252,10,252,0,52,18,252,18,252,0,17,19,20,19,20,0,10,19,21,19,21,0,26,0,2,0,162,0,16,0,16,0,1,0,17,0,17, + 0,2,0,29,0,29,0,3,0,36,0,36,0,4,0,37,0,37,0,5,0,38,0,38,0,6,0,39,0,39,0,7,0,41,0,41,0,8,0,42, + 0,42,0,9,0,43,0,43,0,8,0,45,0,45,0,10,0,46,0,47,0,8,0,50,0,50,0,11,0,51,0,51,0,8,0,52,0,52,0,12, + 0,53,0,53,0,8,0,54,0,54,0,13,0,55,0,55,0,14,0,56,0,56,0,15,0,57,0,57,0,16,0,58,0,58,0,17,0,59,0,59, + 0,18,0,60,0,60,0,19,0,61,0,61,0,20,0,68,0,68,0,21,0,70,0,70,0,22,0,71,0,71,0,23,0,72,0,72,0,24,0,73, + 0,73,0,25,0,74,0,75,0,26,0,76,0,76,0,27,0,79,0,79,0,28,0,80,0,80,0,26,0,81,0,81,0,29,0,82,0,82,0,30, + 0,84,0,84,0,23,0,85,0,85,0,31,0,86,0,86,0,32,0,87,0,87,0,33,0,88,0,88,0,34,0,89,0,89,0,35,0,90,0,90, + 0,36,0,91,0,91,0,37,0,92,0,92,0,38,0,109,0,109,0,39,0,125,0,125,0,40,0,130,0,134,0,4,0,136,0,136,0,41,0,137, + 0,137,0,42,0,148,0,152,0,11,0,155,0,158,0,15,0,159,0,159,0,19,0,160,0,161,0,8,0,162,0,162,0,43,0,163,0,163,0,21, + 0,164,0,167,0,43,0,169,0,169,0,22,0,170,0,170,0,44,0,171,0,171,0,24,0,172,0,173,0,44,0,178,0,178,0,45,0,179,0,179, + 0,29,0,180,0,180,0,46,0,181,0,181,0,30,0,182,0,184,0,46,0,187,0,187,0,47,0,188,0,188,0,34,0,189,0,190,0,47,0,191, + 0,191,0,38,0,193,0,193,0,38,0,194,0,194,0,48,0,195,0,195,0,49,0,196,0,196,0,48,0,197,0,197,0,49,0,198,0,198,0,48, + 0,199,0,199,0,49,0,200,0,200,0,6,0,201,0,201,0,50,0,202,0,202,0,51,0,203,0,203,0,52,0,204,0,204,0,51,0,205,0,205, + 0,53,0,206,0,206,0,6,0,207,0,207,0,50,0,208,0,208,0,7,0,209,0,209,0,54,0,211,0,211,0,55,0,213,0,213,0,56,0,215, + 0,215,0,56,0,217,0,217,0,56,0,219,0,219,0,56,0,221,0,221,0,24,0,222,0,222,0,51,0,224,0,224,0,57,0,225,0,225,0,26, + 0,226,0,226,0,51,0,228,0,228,0,58,0,241,0,241,0,59,0,245,0,245,0,59,0,251,0,251,0,8,0,255,0,255,0,8,1,10,1,10, + 0,29,1,14,1,14,0,51,1,15,1,15,0,60,1,16,1,16,0,51,1,17,1,17,0,60,1,18,1,18,0,61,1,19,1,19,0,60,1,22, + 1,22,0,8,1,23,1,23,0,31,1,25,1,25,0,59,1,26,1,26,0,8,1,27,1,27,0,31,1,28,1,28,0,13,1,30,1,30,0,13, + 1,32,1,32,0,13,1,33,1,33,0,32,1,34,1,34,0,13,1,35,1,35,0,32,1,36,1,36,0,62,1,37,1,37,0,53,1,38,1,38, + 0,14,1,39,1,39,0,33,1,40,1,40,0,63,1,43,1,43,0,64,1,45,1,45,0,64,1,47,1,47,0,64,1,48,1,48,0,15,1,49, + 1,49,0,34,1,51,1,51,0,64,1,53,1,53,0,64,1,54,1,54,0,65,1,55,1,55,0,66,1,56,1,56,0,67,1,57,1,57,0,68, + 1,58,1,58,0,19,1,63,1,63,0,20,1,136,1,136,0,52,1,172,1,172,0,69,1,173,1,173,0,70,1,174,1,174,0,69,1,175,1,175, + 0,70,1,218,1,218,0,13,1,220,1,220,0,71,1,221,1,221,0,52,1,240,1,240,0,51,1,241,1,241,0,72,1,243,1,243,0,52,1,244, + 1,244,0,73,1,245,1,245,0,74,9,121,9,121,0,65,9,122,9,122,0,75,9,123,9,123,0,76,9,124,9,124,0,66,9,125,9,125,0,65, + 9,126,9,126,0,66,9,235,9,235,0,67,9,236,9,236,0,68,10,250,10,250,0,77,10,251,10,251,0,78,10,252,10,252,0,79,19,20,19,20, + 0,8,0,1,0,97,0,16,0,36,0,37,0,38,0,39,0,41,0,42,0,43,0,45,0,46,0,47,0,50,0,51,0,52,0,53,0,54,0,55, + 0,56,0,57,0,58,0,59,0,60,0,61,0,72,0,73,0,78,0,81,0,82,0,85,0,89,0,90,0,91,0,92,0,109,0,125,0,130,0,131, + 0,132,0,133,0,134,0,136,0,137,0,146,0,148,0,149,0,150,0,151,0,152,0,155,0,156,0,157,0,158,0,159,0,160,0,161,0,170,0,171, + 0,172,0,173,0,178,0,179,0,180,0,181,0,182,0,183,0,184,0,191,0,193,0,194,0,196,0,198,0,200,0,206,0,208,0,210,0,221,0,224, + 0,251,0,255,1,2,1,10,1,22,1,23,1,26,1,27,1,32,1,34,1,38,1,48,1,58,1,63,10,238,10,250,10,252,18,252,19,20,19,21, + 0,2,0,96,0,4,0,0,0,36,0,88,0,5,0,2,0,0,0,0,0,0,255,216,0,0,255,177,0,0,255,163,0,0,255,156,0,1,19,70, + 0,23,0,1,0,2,0,3,0,4,0,1,0,0,0,1,0,2,0,3,0,2,0,1,0,0,0,1,0,2,0,3,0,2,0,1,0,0,0,1, + 0,4,0,3,0,2,0,1,0,1,19,94,0,1,0,1,0,2,0,4,19,70,19,74,0,0,19,76,19,80,0,5,19,82,19,86,0,10,19,88, + 19,92,0,15,0,1,0,0,0,10,2,26,3,124,0,20,68,70,76,84,0,122,97,114,97,98,0,136,97,114,109,110,0,194,98,114,97,105,0,208, + 99,97,110,115,0,220,99,104,101,114,0,232,99,121,114,108,0,244,103,101,111,114,1,22,103,114,101,107,1,34,104,97,110,105,1,50,104,101,98,114, + 1,62,107,97,110,97,1,80,108,97,111,32,1,92,108,97,116,110,1,104,109,97,116,104,1,194,110,107,111,32,1,206,111,103,97,109,1,224,114,117, + 110,114,1,236,116,102,110,103,1,248,116,104,97,105,2,4,0,4,0,0,0,0,0,0,0,2,0,4,0,8,0,22,0,3,75,85,82,32,0,22, + 83,78,68,32,0,40,85,82,68,32,0,40,0,0,255,255,0,6,0,5,0,11,0,15,0,17,0,21,0,23,0,0,255,255,0,6,0,5,0,11, + 0,15,0,17,0,21,0,24,0,4,0,0,0,0,255,255,0,2,0,4,0,9,0,4,0,0,0,0,255,255,0,1,0,4,0,4,0,0,0,0, + 255,255,0,1,0,4,0,4,0,0,0,0,255,255,0,1,0,4,0,16,0,2,77,75,68,32,0,24,83,82,66,32,0,24,0,0,255,255,0,1, + 0,6,0,0,255,255,0,2,0,6,0,19,0,4,0,0,0,0,255,255,0,1,0,4,0,4,0,0,0,0,255,255,0,3,0,1,0,6,0,25, + 0,4,0,0,0,0,255,255,0,1,0,4,0,4,0,0,0,0,255,255,0,4,0,2,0,7,0,13,0,26,0,4,0,0,0,0,255,255,0,1, + 0,4,0,4,0,0,0,0,255,255,0,1,0,4,0,52,0,8,73,83,77,32,0,70,75,83,77,32,0,70,76,83,77,32,0,70,77,79,76,32, + 0,52,78,83,77,32,0,70,82,79,77,32,0,52,83,75,83,32,0,70,83,83,77,32,0,70,0,0,255,255,0,6,0,3,0,6,0,10,0,14, + 0,18,0,27,0,0,255,255,0,7,0,3,0,6,0,10,0,14,0,18,0,20,0,27,0,4,0,0,0,0,255,255,0,1,0,4,0,4,0,0, + 0,0,0,0,0,4,0,5,0,12,0,16,0,22,0,4,0,0,0,0,255,255,0,1,0,4,0,4,0,0,0,0,255,255,0,1,0,4,0,4, + 0,0,0,0,255,255,0,1,0,4,0,4,0,0,0,0,255,255,0,1,0,4,0,28,32,82,81,68,0,170,97,97,108,116,0,176,97,97,108,116, + 0,182,97,97,108,116,0,188,99,99,109,112,0,194,99,99,109,112,0,200,99,99,109,112,0,208,99,99,109,112,0,216,100,108,105,103,0,226,100,108, + 105,103,0,232,100,108,105,103,0,238,102,105,110,97,0,244,102,105,110,97,0,250,104,108,105,103,1,0,104,108,105,103,1,6,105,110,105,116,1,12, + 105,110,105,116,1,18,108,105,103,97,1,24,108,105,103,97,1,32,108,111,99,108,1,38,108,111,99,108,1,44,109,101,100,105,1,50,109,101,100,105, + 1,56,114,108,105,103,1,62,114,108,105,103,1,72,115,97,108,116,1,80,115,97,108,116,1,86,115,97,108,116,1,92,0,0,0,1,0,0,0,0, + 0,1,0,25,0,0,0,1,0,23,0,0,0,1,0,28,0,0,0,1,0,3,0,0,0,2,0,1,0,3,0,0,0,2,0,2,0,3,0,0, + 0,3,0,1,0,3,0,4,0,0,0,1,0,22,0,0,0,1,0,19,0,0,0,1,0,20,0,0,0,1,0,8,0,0,0,1,0,7,0,0, + 0,1,0,38,0,0,0,1,0,21,0,0,0,1,0,12,0,0,0,1,0,11,0,0,0,2,0,16,0,18,0,0,0,1,0,17,0,0,0,1, + 0,5,0,0,0,1,0,6,0,0,0,1,0,10,0,0,0,1,0,9,0,0,0,3,0,13,0,14,0,15,0,0,0,2,0,14,0,15,0,0, + 0,1,0,26,0,0,0,1,0,24,0,0,0,1,0,27,0,39,0,80,0,88,0,96,0,104,0,130,0,138,0,146,0,154,0,162,0,170,0,178, + 0,186,0,194,0,202,0,210,0,218,0,226,0,234,0,242,0,250,1,2,1,10,1,18,1,26,1,34,1,42,1,50,1,58,1,66,1,74,1,82, + 1,90,1,98,1,106,1,114,1,122,1,130,1,138,1,146,0,6,0,9,0,1,1,74,0,6,0,1,0,1,1,190,0,6,0,0,0,1,2,6, + 0,6,0,0,0,10,5,122,5,210,6,42,6,130,6,218,7,50,7,116,7,188,8,4,8,76,0,4,0,1,0,1,8,116,0,1,0,0,0,1, + 8,146,0,1,0,0,0,1,8,150,0,1,0,9,0,1,8,154,0,1,0,9,0,1,8,222,0,1,0,9,0,1,9,216,0,1,0,9,0,1, + 10,28,0,1,0,9,0,1,10,252,0,1,0,9,0,1,11,64,0,4,0,1,0,1,12,32,0,4,0,1,0,1,12,84,0,4,0,9,0,1, + 12,218,0,4,0,9,0,1,12,248,0,4,0,0,0,1,13,54,0,4,0,1,0,1,13,106,0,4,0,0,0,1,14,34,0,4,0,0,0,1, + 14,102,0,4,0,0,0,1,14,118,0,4,0,0,0,1,14,134,0,1,0,1,0,1,15,26,0,1,0,1,0,1,15,30,0,1,0,0,0,1, + 15,34,0,1,0,0,0,1,15,64,0,1,0,0,0,1,15,94,0,3,0,0,0,1,15,116,0,1,0,0,0,1,15,166,0,1,0,0,0,1, + 15,216,0,1,0,0,0,1,16,14,0,1,0,0,0,1,16,22,0,1,0,0,0,1,16,30,0,1,0,0,0,1,16,38,0,1,0,0,0,1, + 16,46,0,1,0,0,0,1,16,54,0,1,0,1,0,1,16,72,0,4,0,1,0,1,16,76,0,2,0,16,0,44,0,44,0,44,0,2,0,0, + 0,72,0,2,0,4,5,241,6,14,0,0,6,28,6,28,0,30,10,235,10,235,0,31,23,32,23,121,0,32,0,2,0,4,5,241,6,14,0,1, + 6,28,6,28,0,1,10,235,10,235,0,1,23,32,23,121,0,1,0,3,0,8,0,24,0,38,0,1,0,1,0,1,0,1,0,1,0,1,0,0, + 0,9,0,1,0,1,0,1,0,0,0,1,0,0,0,7,0,0,0,1,0,1,0,1,0,1,0,0,0,11,0,2,0,18,0,24,0,32,0,32, + 0,3,0,0,0,66,0,0,0,1,0,1,5,56,0,1,0,0,0,1,0,0,0,2,0,5,5,16,5,24,0,2,5,27,5,27,0,2,5,29, + 5,29,0,2,5,37,5,37,0,2,5,56,5,56,0,1,0,1,0,4,0,0,0,1,0,1,0,2,0,0,0,2,0,22,0,140,0,140,0,140, + 0,5,0,0,3,12,3,68,0,0,0,0,0,1,0,57,0,76,0,77,0,241,2,11,2,42,2,95,2,177,2,178,2,179,2,180,2,181,2,182, + 2,183,2,184,2,185,2,186,2,187,2,188,2,189,2,190,2,191,2,192,2,193,2,194,2,195,2,196,2,197,2,238,2,239,2,240,2,241,2,242, + 2,243,2,244,2,245,2,247,2,251,2,252,2,253,3,1,3,2,3,4,3,135,3,234,3,236,4,23,4,24,4,25,4,26,9,38,9,196,11,140, + 11,141,11,142,11,143,11,218,11,219,0,2,0,106,0,36,0,61,0,3,0,69,0,69,0,3,0,71,0,71,0,3,0,73,0,73,0,3,0,75, + 0,75,0,3,0,76,0,77,0,1,0,78,0,79,0,3,0,87,0,87,0,3,0,130,0,152,0,3,0,154,0,161,0,3,0,194,0,194,0,3, + 0,196,0,196,0,3,0,198,0,198,0,3,0,200,0,200,0,3,0,202,0,202,0,3,0,204,0,204,0,3,0,206,0,206,0,3,0,208,0,208, + 0,3,0,210,0,210,0,3,0,212,0,212,0,3,0,214,0,214,0,3,0,216,0,216,0,3,0,218,0,218,0,3,0,220,0,220,0,3,0,222, + 0,222,0,3,0,224,0,224,0,3,0,226,0,226,0,3,0,228,0,228,0,3,0,230,0,234,0,3,0,236,0,236,0,3,0,238,0,238,0,3, + 0,240,0,240,0,3,0,241,0,241,0,1,0,242,0,242,0,3,0,244,0,244,0,3,0,246,0,246,0,3,0,248,0,248,0,3,0,251,1,5, + 0,3,1,7,1,7,0,3,1,9,1,9,0,3,1,12,1,12,0,3,1,14,1,14,0,3,1,16,1,16,0,3,1,18,1,18,0,3,1,20, + 1,20,0,3,1,22,1,22,0,3,1,24,1,24,0,3,1,26,1,26,0,3,1,28,1,28,0,3,1,30,1,30,0,3,1,32,1,32,0,3, + 1,34,1,34,0,3,1,36,1,36,0,3,1,38,1,38,0,3,1,40,1,40,0,3,1,42,1,42,0,3,1,44,1,44,0,3,1,46,1,46, + 0,3,1,48,1,48,0,3,1,50,1,50,0,3,1,52,1,52,0,3,1,54,1,54,0,3,1,56,1,56,0,3,1,58,1,59,0,3,1,61, + 1,61,0,3,1,63,1,63,0,3,1,65,1,65,0,3,1,72,1,72,0,3,1,82,1,82,0,3,1,84,1,84,0,3,1,86,1,86,0,3, + 1,121,1,122,0,3,1,143,1,143,0,3,1,145,1,147,0,3,1,149,1,149,0,3,1,164,1,164,0,3,1,172,1,172,0,3,1,174,1,174, + 0,3,1,218,1,218,0,3,1,220,1,220,0,3,1,240,1,240,0,3,1,244,1,244,0,3,2,11,2,11,0,1,2,42,2,42,0,1,2,95, + 2,95,0,1,2,177,2,197,0,2,2,199,2,202,0,4,2,205,2,228,0,4,2,234,2,237,0,4,2,238,2,245,0,2,2,246,2,246,0,4, + 2,247,2,247,0,2,2,248,2,250,0,4,2,251,2,253,0,2,2,254,2,255,0,4,3,1,3,2,0,2,3,3,3,3,0,4,3,4,3,4, + 0,2,3,135,3,135,0,1,3,234,3,234,0,1,3,236,3,236,0,1,4,23,4,26,0,2,9,38,9,38,0,1,9,196,9,196,0,1,11,140, + 11,143,0,2,11,218,11,219,0,1,0,3,0,8,0,22,0,38,0,0,0,1,0,1,0,2,0,1,0,0,0,30,0,0,0,1,0,2,0,4, + 0,2,0,1,0,0,0,30,0,0,0,1,0,3,0,4,0,4,0,2,0,1,0,0,0,30,0,3,0,8,0,22,0,38,0,1,0,3,0,1, + 0,0,0,1,0,0,0,29,0,2,0,4,0,3,0,1,0,0,0,1,0,0,0,29,0,3,0,4,0,4,0,3,0,1,0,0,0,1,0,0, + 0,29,0,2,0,18,0,28,0,36,0,36,0,3,0,0,0,52,0,70,0,2,0,1,2,167,2,171,0,0,0,1,0,0,0,1,0,0,0,2, + 0,2,2,167,2,167,0,1,2,168,2,171,0,2,0,1,0,4,0,0,0,1,0,1,0,1,0,1,0,0,0,31,0,1,0,4,0,0,0,1, + 0,1,0,1,0,1,0,0,0,31,0,2,0,18,0,28,0,36,0,36,0,3,0,0,0,52,0,70,0,2,0,1,2,167,2,171,0,0,0,1, + 0,0,0,1,0,0,0,1,2,167,0,5,0,2,0,1,0,2,0,2,0,2,0,1,0,4,0,0,0,1,0,1,0,1,0,1,0,0,0,32, + 0,1,0,4,0,0,0,1,0,1,0,1,0,1,0,0,0,32,0,2,0,18,0,28,0,36,0,36,0,3,0,0,0,52,0,70,0,2,0,1, + 2,167,2,171,0,0,0,1,0,0,0,1,0,0,0,1,2,167,0,5,0,2,0,2,0,1,0,2,0,2,0,1,0,4,0,0,0,1,0,1, + 0,1,0,1,0,0,0,33,0,1,0,4,0,0,0,1,0,1,0,1,0,1,0,0,0,33,0,2,0,18,0,28,0,36,0,36,0,3,0,0, + 0,52,0,70,0,2,0,1,2,167,2,171,0,0,0,1,0,0,0,1,0,0,0,1,2,167,0,5,0,2,0,2,0,2,0,1,0,2,0,1, + 0,4,0,0,0,1,0,1,0,1,0,1,0,0,0,34,0,1,0,4,0,0,0,1,0,1,0,1,0,1,0,0,0,34,0,2,0,18,0,28, + 0,36,0,36,0,3,0,0,0,52,0,70,0,2,0,1,2,167,2,171,0,0,0,1,0,0,0,1,0,0,0,2,0,2,2,167,2,170,0,2, + 2,171,2,171,0,1,0,1,0,4,0,0,0,1,0,1,0,1,0,1,0,0,0,35,0,1,0,4,0,0,0,1,0,1,0,1,0,1,0,0, + 0,35,0,2,0,18,0,24,0,24,0,40,0,3,0,0,0,48,0,0,0,1,0,1,2,167,0,2,0,2,2,167,2,167,0,1,19,70,19,73, + 0,2,0,1,0,0,0,1,0,0,0,1,0,4,0,1,0,2,0,1,0,0,0,1,0,0,0,36,0,2,0,18,0,24,0,24,0,46,0,3, + 0,0,0,54,0,0,0,1,0,1,2,168,0,2,0,3,2,168,2,168,0,1,19,74,19,74,0,2,19,76,19,78,0,2,0,1,0,0,0,1, + 0,0,0,1,0,4,0,1,0,2,0,1,0,0,0,1,0,0,0,36,0,2,0,18,0,24,0,24,0,46,0,3,0,0,0,54,0,0,0,1, + 0,1,2,169,0,2,0,3,2,169,2,169,0,1,19,79,19,80,0,2,19,82,19,83,0,2,0,1,0,0,0,1,0,0,0,1,0,4,0,1, + 0,2,0,1,0,0,0,1,0,0,0,36,0,2,0,18,0,24,0,24,0,46,0,3,0,0,0,54,0,0,0,1,0,1,2,170,0,2,0,3, + 2,170,2,170,0,1,19,84,19,86,0,2,19,88,19,88,0,2,0,1,0,0,0,1,0,0,0,1,0,4,0,1,0,2,0,1,0,0,0,1, + 0,0,0,36,0,2,0,18,0,24,0,24,0,40,0,3,0,0,0,48,0,0,0,1,0,1,2,171,0,2,0,2,2,171,2,171,0,1,19,89, + 19,92,0,2,0,1,0,0,0,1,0,0,0,1,0,4,0,1,0,2,0,1,0,0,0,1,0,0,0,36,0,1,0,30,0,2,0,10,0,20, + 0,1,0,4,19,177,0,2,5,20,0,1,0,4,19,179,0,2,5,23,0,1,0,2,5,47,5,67,0,1,0,6,15,223,0,1,0,1,3,197, + 0,1,0,6,21,221,0,1,0,1,1,12,0,2,0,66,0,30,23,32,23,35,23,38,23,41,23,44,23,47,23,50,23,53,23,56,23,59,23,62, + 23,65,23,68,23,71,23,74,23,77,23,80,23,83,23,86,23,89,23,92,23,95,23,98,23,101,23,104,23,107,23,110,23,113,23,116,23,119,0,2, + 0,1,5,241,6,14,0,0,0,2,0,230,0,112,20,102,20,104,20,106,20,108,20,110,20,114,20,116,20,120,20,122,20,126,20,130,20,134,20,138, + 20,142,20,144,20,146,20,148,20,150,20,154,20,158,20,162,20,166,20,170,20,174,20,178,20,182,20,186,20,190,20,194,20,198,20,202,20,206,20,210, + 20,212,20,214,22,202,22,208,19,244,19,236,19,224,22,214,22,217,19,228,19,240,19,232,22,220,22,223,20,4,20,0,22,226,20,8,20,12,20,22, + 23,135,23,136,23,137,20,18,20,16,20,20,23,138,23,139,20,26,23,11,23,140,23,141,23,3,23,142,23,143,20,24,23,144,23,145,23,148,23,151, + 23,154,23,157,23,160,23,163,22,205,23,166,23,169,19,248,23,172,19,252,23,175,23,178,20,28,23,181,23,184,23,187,20,54,23,190,20,32,23,193, + 20,40,23,196,20,36,23,199,23,5,23,202,23,205,23,208,23,211,20,44,20,46,23,214,23,217,20,50,22,229,20,58,20,62,23,8,23,13,0,2, + 0,4,5,79,5,103,0,0,5,105,5,114,0,25,5,142,5,143,0,35,5,146,5,220,0,37,0,2,0,66,0,30,23,33,23,36,23,39,23,42, + 23,45,23,48,23,51,23,54,23,57,23,60,23,63,23,66,23,69,23,72,23,75,23,78,23,81,23,84,23,87,23,90,23,93,23,96,23,99,23,102, + 23,105,23,108,23,111,23,114,23,117,23,120,0,2,0,1,5,241,6,14,0,0,0,2,0,168,0,81,20,112,20,118,20,124,20,128,20,132,20,136, + 20,140,20,152,20,156,20,160,20,164,20,168,20,172,20,176,20,180,20,184,20,188,20,192,20,196,20,200,20,204,20,208,20,60,20,216,22,204,22,210, + 19,246,19,238,19,226,22,216,22,219,19,230,19,242,19,234,22,222,22,225,20,6,20,2,22,228,20,10,20,14,23,147,23,150,23,153,23,156,23,159, + 23,162,23,165,22,207,23,168,23,171,19,250,23,174,19,254,23,177,23,180,20,30,23,183,23,186,23,189,20,56,23,192,20,34,23,195,20,42,23,198, + 20,38,23,201,23,7,23,204,23,207,23,210,23,213,22,212,20,48,23,216,23,219,20,52,22,231,20,64,23,10,0,2,0,10,5,83,5,83,0,0, + 5,85,5,85,0,1,5,87,5,91,0,2,5,96,5,103,0,7,5,105,5,111,0,15,5,113,5,114,0,22,5,142,5,143,0,24,5,146,5,160, + 0,26,5,179,5,216,0,41,5,218,5,219,0,79,0,2,0,66,0,30,23,34,23,37,23,40,23,43,23,46,23,49,23,52,23,55,23,58,23,61, + 23,64,23,67,23,70,23,73,23,76,23,79,23,82,23,85,23,88,23,91,23,94,23,97,23,100,23,103,23,106,23,109,23,112,23,115,23,118,23,121, + 0,2,0,1,5,241,6,14,0,0,0,2,0,168,0,81,20,111,20,117,20,123,20,127,20,131,20,135,20,139,20,151,20,155,20,159,20,163,20,167, + 20,171,20,175,20,179,20,183,20,187,20,191,20,195,20,199,20,203,20,207,20,59,20,215,22,203,22,209,19,245,19,237,19,225,22,215,22,218,19,229, + 19,241,19,233,22,221,22,224,20,5,20,1,22,227,20,9,20,13,23,146,23,149,23,152,23,155,23,158,23,161,23,164,22,206,23,167,23,170,19,249, + 23,173,19,253,23,176,23,179,20,29,23,182,23,185,23,188,20,55,23,191,20,33,23,194,20,41,23,197,20,37,23,200,23,6,23,203,23,206,23,209, + 23,212,22,211,20,47,23,215,23,218,20,51,22,230,20,63,23,9,0,2,0,10,5,83,5,83,0,0,5,85,5,85,0,1,5,87,5,91,0,2, + 5,96,5,103,0,7,5,105,5,111,0,15,5,113,5,114,0,22,5,142,5,143,0,24,5,146,5,160,0,26,5,179,5,216,0,41,5,218,5,219, + 0,79,0,1,0,50,0,3,0,12,0,22,0,32,0,1,0,4,23,26,0,2,5,121,0,1,0,4,23,29,0,2,5,121,0,2,0,6,0,12, + 23,29,0,2,5,120,23,26,0,2,5,117,0,1,0,3,5,117,5,120,5,121,0,1,0,126,0,6,0,18,0,28,0,38,0,56,0,74,0,108, + 0,1,0,4,23,24,0,2,5,121,0,1,0,4,23,25,0,2,5,121,0,2,0,6,0,12,23,30,0,2,5,124,23,27,0,2,5,121,0,2, + 0,6,0,12,23,31,0,2,5,124,23,28,0,2,5,121,0,4,0,10,0,16,0,22,0,28,23,28,0,2,5,119,23,27,0,2,5,118,23,25, + 0,2,5,116,23,24,0,2,5,115,0,2,0,6,0,12,23,31,0,2,5,119,23,30,0,2,5,118,0,1,0,6,5,115,5,116,5,118,5,119, + 5,121,5,124,0,1,0,30,0,2,0,10,0,20,0,1,0,4,20,223,0,2,20,114,0,1,0,4,20,224,0,2,20,114,0,1,0,2,20,195, + 20,196,0,1,0,62,0,2,0,10,0,36,0,3,0,8,0,14,0,20,20,221,0,2,20,108,20,219,0,2,20,104,20,217,0,2,20,102,0,3, + 0,8,0,14,0,20,20,222,0,2,20,108,20,220,0,2,20,104,20,218,0,2,20,102,0,1,0,2,20,195,20,196,0,1,0,54,0,1,0,8, + 0,5,0,12,0,20,0,28,0,34,0,40,19,169,0,3,0,73,0,79,19,168,0,3,0,73,0,76,19,167,0,2,0,79,19,166,0,2,0,76, + 19,165,0,2,0,73,0,1,0,1,0,73,0,1,0,178,0,5,0,16,0,82,0,108,0,158,0,168,0,8,0,18,0,24,0,30,0,36,0,42, + 0,48,0,54,0,60,20,98,0,2,5,122,20,96,0,2,5,121,20,94,0,2,5,120,20,92,0,2,5,119,20,90,0,2,5,118,20,89,0,2, + 5,117,20,87,0,2,5,116,20,85,0,2,5,115,0,3,0,8,0,14,0,20,5,82,0,2,5,125,5,80,0,2,5,124,5,79,0,2,5,123, + 0,6,0,14,0,20,0,26,0,32,0,38,0,44,20,99,0,2,5,122,20,97,0,2,5,121,20,95,0,2,5,120,20,93,0,2,5,119,20,91, + 0,2,5,118,20,86,0,2,5,115,0,1,0,4,5,81,0,2,5,124,0,1,0,4,5,83,0,2,5,124,0,1,0,5,0,3,5,84,5,104, + 5,112,5,114,0,1,0,66,0,3,0,12,0,22,0,56,0,1,0,4,5,13,0,2,5,8,0,4,0,10,0,16,0,22,0,28,19,176,0,2, + 4,243,19,174,0,2,4,241,19,173,0,2,4,235,19,172,0,2,4,252,0,1,0,4,19,175,0,2,4,252,0,1,0,3,4,235,4,250,5,4, + 0,1,0,18,0,1,0,8,0,1,0,4,19,171,0,2,0,87,0,1,0,1,0,86,0,1,0,18,0,1,0,8,0,1,0,4,19,170,0,2, + 0,87,0,1,0,1,1,65,0,1,0,136,0,8,0,22,0,40,0,58,0,70,0,80,0,90,0,102,0,114,0,2,0,6,0,12,11,39,0,2, + 0,34,11,26,0,2,0,4,0,2,0,6,0,12,11,38,0,2,0,4,11,37,0,2,0,34,0,1,0,4,11,205,0,3,0,36,0,59,0,1, + 0,4,11,123,0,2,0,86,0,1,0,4,11,178,0,2,0,48,0,1,0,4,11,179,0,3,0,40,0,47,0,1,0,4,11,147,0,3,0,18, + 0,70,0,2,0,6,0,14,11,153,0,3,0,18,0,88,11,152,0,3,0,18,0,82,0,1,0,8,0,4,0,34,0,41,0,53,0,54,0,55, + 0,68,0,70,0,1,0,6,14,147,0,1,0,1,5,31,0,1,0,6,14,147,0,1,0,1,5,31,0,2,0,20,0,7,3,103,3,102,3,104, + 3,100,3,101,3,106,3,105,0,1,0,7,3,35,3,57,3,63,3,70,3,76,3,84,3,90,0,2,0,20,0,7,3,103,3,102,3,104,3,100, + 3,101,3,106,3,105,0,1,0,7,3,35,3,57,3,63,3,70,3,76,3,84,3,90,0,2,0,16,0,5,23,22,23,2,2,19,23,12,22,233, + 0,1,0,5,0,44,0,45,0,68,0,79,1,12,0,1,0,42,0,6,0,18,0,22,0,26,0,30,0,34,0,38,0,1,23,22,0,1,23,2, + 0,1,2,19,0,1,23,12,0,1,23,134,0,1,22,233,0,1,0,6,0,44,0,45,0,68,0,79,0,92,1,12,0,2,0,30,0,12,22,188, + 22,186,22,189,22,187,22,192,22,193,22,185,23,122,22,194,22,190,22,195,22,191,0,1,0,12,2,177,2,178,2,179,2,180,2,183,2,184,2,185, + 2,187,2,188,2,189,2,192,2,194,0,2,0,32,0,13,0,243,1,249,23,16,2,33,22,234,22,235,1,249,0,243,1,249,23,19,23,20,23,17, + 23,18,0,1,0,13,0,76,0,77,0,241,2,11,2,42,2,95,3,135,3,234,3,236,9,38,9,196,11,218,11,219,0,1,0,6,16,158,0,2, + 0,1,2,167,2,171,0,0,0,1,0,6,16,163,0,2,0,1,2,167,2,171,0,0,0,1,0,6,16,168,0,2,0,1,2,167,2,171,0,0, + 0,1,0,6,16,173,0,2,0,1,2,167,2,171,0,0,0,1,0,6,16,178,0,2,0,1,2,167,2,171,0,0,0,2,0,16,0,5,19,94, + 19,94,19,94,19,94,19,94,0,2,0,1,2,167,2,171,0,0,0,1,0,6,14,124,0,1,0,1,5,56,0,1,0,18,0,1,0,8,0,1, + 0,4,19,222,0,2,5,50,0,1,0,1,5,38,0,0,0,1,4,14,1,144,0,5,0,0,5,51,5,153,0,0,1,30,5,51,5,153,0,0, + 3,215,0,102,2,18,0,0,2,11,6,3,3,8,4,2,2,4,231,0,110,255,210,0,253,255,10,36,96,41,4,0,32,12,80,102,69,100,0,64, + 0,32,255,255,6,20,254,20,1,154,7,109,1,227,96,0,1,255,223,255,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,44,0,0,0,4, + 0,0,7,188,0,1,0,0,0,0,19,252,0,3,0,1,0,0,0,44,0,3,0,10,0,0,7,188,0,4,7,144,0,0,1,224,1,0,0,7, + 0,224,0,0,0,126,2,233,2,238,2,243,2,247,3,79,3,83,3,88,3,90,3,98,3,119,3,126,3,138,3,140,3,161,5,37,5,86,5,95, + 5,135,5,138,5,195,5,199,5,234,5,244,6,7,6,10,6,12,6,21,6,27,6,31,6,58,6,85,6,87,6,90,6,112,6,116,6,191,6,198, + 6,204,6,206,6,213,6,249,7,231,7,245,7,250,14,63,14,130,14,132,14,136,14,138,14,141,14,151,14,159,14,163,14,165,14,167,14,171,14,185, + 14,189,14,196,14,198,14,205,14,217,14,221,16,197,16,252,20,7,20,27,20,53,20,74,20,82,20,189,20,234,21,7,21,62,21,80,21,106,21,133, + 21,150,21,175,21,222,21,225,22,71,22,118,22,156,29,20,29,35,29,46,29,91,29,106,29,120,29,123,29,125,29,133,29,191,29,201,30,251,31,21, + 31,29,31,69,31,77,31,87,31,89,31,91,31,93,31,125,31,180,31,196,31,211,31,219,31,239,31,244,31,254,32,100,32,113,32,142,32,156,32,181, + 32,186,32,209,32,215,32,220,32,225,33,9,33,73,33,75,33,78,33,133,33,137,35,17,35,25,35,33,35,40,35,44,35,117,35,122,35,125,35,135, + 35,148,35,174,35,207,35,227,35,229,35,232,36,35,36,105,38,156,38,184,38,195,38,226,39,4,39,9,39,39,39,75,39,77,39,82,39,86,39,94, + 39,148,39,175,39,190,39,198,39,224,39,235,40,255,41,7,41,11,41,65,41,132,41,213,41,235,41,251,42,2,42,28,42,47,42,107,42,160,42,186, + 42,250,43,26,43,36,43,84,44,119,44,127,45,37,45,101,45,111,46,24,46,30,46,37,46,46,77,255,164,255,166,71,166,77,166,81,166,87,166,110, + 166,141,166,149,167,22,167,31,167,43,167,65,167,75,167,83,167,87,167,103,167,131,167,142,167,145,167,170,167,255,239,25,240,3,244,38,244,65,246,197, + 251,6,251,23,251,54,251,60,251,62,251,65,251,68,251,79,251,163,251,173,251,214,251,218,251,233,251,255,254,15,254,35,254,116,254,252,254,255,255,253, + 255,255,0,0,0,0,0,32,0,160,2,236,2,243,2,247,3,0,3,81,3,87,3,90,3,92,3,112,3,122,3,132,3,140,3,142,3,163,5,49, + 5,89,5,97,5,137,5,176,5,198,5,208,5,240,6,6,6,9,6,12,6,21,6,27,6,31,6,33,6,64,6,87,6,90,6,96,6,116,6,121, + 6,198,6,204,6,206,6,213,6,240,7,192,7,235,7,248,14,63,14,129,14,132,14,135,14,138,14,141,14,148,14,153,14,161,14,165,14,167,14,170, + 14,173,14,187,14,192,14,198,14,200,14,208,14,220,16,160,16,208,20,1,20,9,20,29,20,55,20,76,20,84,20,192,20,236,21,16,21,64,21,82, + 21,116,21,138,21,160,21,222,21,225,22,70,22,110,22,128,29,0,29,22,29,38,29,48,29,93,29,119,29,123,29,125,29,133,29,155,29,196,30,0, + 31,0,31,24,31,32,31,72,31,80,31,89,31,91,31,93,31,95,31,128,31,182,31,198,31,214,31,221,31,242,31,246,32,0,32,106,32,116,32,144, + 32,160,32,184,32,208,32,214,32,219,32,225,33,0,33,11,33,75,33,78,33,80,33,137,33,144,35,24,35,28,35,36,35,43,35,115,35,122,35,125, + 35,135,35,148,35,155,35,206,35,227,35,229,35,232,36,34,36,96,37,0,38,160,38,192,38,226,39,1,39,6,39,12,39,41,39,77,39,79,39,86, + 39,88,39,97,39,152,39,177,39,197,39,224,39,230,39,240,41,6,41,10,41,64,41,131,41,206,41,235,41,250,42,0,42,12,42,47,42,106,42,125, + 42,174,42,249,43,0,43,31,43,83,44,96,44,121,45,0,45,48,45,111,46,24,46,30,46,34,46,46,77,192,164,208,166,68,166,76,166,80,166,84, + 166,98,166,138,166,148,167,8,167,27,167,34,167,48,167,70,167,78,167,86,167,100,167,128,167,137,167,144,167,160,167,250,239,0,240,0,244,0,244,40, + 246,197,251,0,251,19,251,29,251,56,251,62,251,64,251,67,251,70,251,82,251,170,251,211,251,217,251,232,251,252,254,0,254,32,254,112,254,118,254,255, + 255,249,255,255,0,0,255,227,255,194,255,192,255,188,255,185,255,177,255,176,255,173,255,172,255,171,255,158,255,156,255,151,255,150,255,149,255,148,255,137, + 255,135,255,134,255,133,255,96,255,94,255,86,255,81,255,64,255,63,255,62,255,54,255,49,255,46,255,45,255,40,255,39,255,37,255,32,255,29,255,25, + 255,19,255,14,255,13,255,7,254,237,254,39,254,36,254,34,247,222,247,157,247,156,247,154,247,153,247,151,247,145,247,144,247,143,247,142,247,141,247,139, + 247,138,247,137,247,135,247,134,247,133,247,131,247,129,245,191,245,181,242,177,242,176,242,175,242,174,242,173,242,172,242,170,242,169,242,161,242,160,242,159, + 242,150,242,146,242,137,242,91,242,89,241,245,241,207,241,198,235,99,235,98,235,96,235,95,235,94,235,82,235,80,235,79,235,72,235,51,235,47,234,249, + 234,245,234,243,234,241,234,239,234,237,234,236,234,235,234,234,234,233,234,231,234,230,234,229,234,227,234,226,234,224,234,223,234,222,234,217,234,215,234,214, + 234,211,234,209,234,188,234,184,234,181,234,177,234,147,234,146,234,145,234,143,234,142,234,139,234,133,234,127,234,125,234,123,234,121,234,51,234,47,234,45, + 234,36,234,24,234,18,233,243,233,224,233,223,233,221,233,164,233,104,232,210,232,207,232,200,232,170,232,140,232,139,232,137,232,136,232,135,232,134,232,131, + 232,130,232,128,232,125,232,124,232,118,232,93,232,88,232,84,232,78,232,76,232,24,231,215,231,142,231,121,231,107,231,103,231,94,231,76,231,18,231,1, + 230,244,230,182,230,177,230,173,230,127,229,116,229,115,228,243,228,233,228,224,228,56,228,51,228,48,228,40,196,151,109,199,108,131,108,127,108,125,108,123, + 108,113,108,86,108,80,107,222,107,218,107,216,107,212,107,208,107,206,107,204,107,192,107,168,107,163,107,162,107,148,107,69,36,69,35,95,31,99,31,98, + 28,223,24,165,24,153,24,148,24,147,24,146,24,145,24,144,24,143,24,141,24,135,24,98,24,96,24,83,24,65,22,65,22,49,21,229,21,228,21,226, + 20,233,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,12,64,0,0,0,0,0,0,1,4,0,0,0,32,0,0,0,126,0,0,0,3,0,0,0,160,0,0,2,233, + 0,0,0,98,0,0,2,236,0,0,2,238,0,0,2,172,0,0,2,243,0,0,2,243,0,0,2,175,0,0,2,247,0,0,2,247,0,0,2,176, + 0,0,3,0,0,0,3,79,0,0,2,177,0,0,3,81,0,0,3,83,0,0,3,1,0,0,3,87,0,0,3,88,0,0,3,4,0,0,3,90, + 0,0,3,90,0,0,3,6,0,0,3,92,0,0,3,98,0,0,3,7,0,0,3,112,0,0,3,119,0,0,3,14,0,0,3,122,0,0,3,126, + 0,0,3,22,0,0,3,132,0,0,3,138,0,0,3,27,0,0,3,140,0,0,3,140,0,0,3,34,0,0,3,142,0,0,3,161,0,0,3,35, + 0,0,3,163,0,0,5,37,0,0,3,55,0,0,5,49,0,0,5,86,0,0,4,186,0,0,5,89,0,0,5,95,0,0,4,224,0,0,5,97, + 0,0,5,135,0,0,4,231,0,0,5,137,0,0,5,138,0,0,5,14,0,0,5,176,0,0,5,195,0,0,5,16,0,0,5,198,0,0,5,199, + 0,0,5,36,0,0,5,208,0,0,5,234,0,0,5,38,0,0,5,240,0,0,5,244,0,0,5,65,0,0,6,6,0,0,6,7,0,0,5,70, + 0,0,6,9,0,0,6,10,0,0,5,72,0,0,6,12,0,0,6,12,0,0,5,74,0,0,6,21,0,0,6,21,0,0,5,75,0,0,6,27, + 0,0,6,27,0,0,5,76,0,0,6,31,0,0,6,31,0,0,5,77,0,0,6,33,0,0,6,58,0,0,5,78,0,0,6,64,0,0,6,85, + 0,0,5,104,0,0,6,87,0,0,6,87,0,0,5,126,0,0,6,90,0,0,6,90,0,0,5,127,0,0,6,96,0,0,6,112,0,0,5,128, + 0,0,6,116,0,0,6,116,0,0,5,145,0,0,6,121,0,0,6,191,0,0,5,146,0,0,6,198,0,0,6,198,0,0,5,217,0,0,6,204, + 0,0,6,204,0,0,5,218,0,0,6,206,0,0,6,206,0,0,5,219,0,0,6,213,0,0,6,213,0,0,5,220,0,0,6,240,0,0,6,249, + 0,0,5,221,0,0,7,192,0,0,7,231,0,0,5,231,0,0,7,235,0,0,7,245,0,0,6,15,0,0,7,248,0,0,7,250,0,0,6,26, + 0,0,14,63,0,0,14,63,0,0,6,29,0,0,14,129,0,0,14,130,0,0,6,30,0,0,14,132,0,0,14,132,0,0,6,32,0,0,14,135, + 0,0,14,136,0,0,6,33,0,0,14,138,0,0,14,138,0,0,6,35,0,0,14,141,0,0,14,141,0,0,6,36,0,0,14,148,0,0,14,151, + 0,0,6,37,0,0,14,153,0,0,14,159,0,0,6,41,0,0,14,161,0,0,14,163,0,0,6,48,0,0,14,165,0,0,14,165,0,0,6,51, + 0,0,14,167,0,0,14,167,0,0,6,52,0,0,14,170,0,0,14,171,0,0,6,53,0,0,14,173,0,0,14,185,0,0,6,55,0,0,14,187, + 0,0,14,189,0,0,6,68,0,0,14,192,0,0,14,196,0,0,6,71,0,0,14,198,0,0,14,198,0,0,6,76,0,0,14,200,0,0,14,205, + 0,0,6,77,0,0,14,208,0,0,14,217,0,0,6,83,0,0,14,220,0,0,14,221,0,0,6,93,0,0,16,160,0,0,16,197,0,0,6,95, + 0,0,16,208,0,0,16,252,0,0,6,133,0,0,20,1,0,0,20,7,0,0,6,178,0,0,20,9,0,0,20,27,0,0,6,185,0,0,20,29, + 0,0,20,53,0,0,6,204,0,0,20,55,0,0,20,74,0,0,6,229,0,0,20,76,0,0,20,82,0,0,6,249,0,0,20,84,0,0,20,189, + 0,0,7,0,0,0,20,192,0,0,20,234,0,0,7,106,0,0,20,236,0,0,21,7,0,0,7,149,0,0,21,16,0,0,21,62,0,0,7,177, + 0,0,21,64,0,0,21,80,0,0,7,224,0,0,21,82,0,0,21,106,0,0,7,241,0,0,21,116,0,0,21,133,0,0,8,10,0,0,21,138, + 0,0,21,150,0,0,8,28,0,0,21,160,0,0,21,175,0,0,8,41,0,0,21,222,0,0,21,222,0,0,8,57,0,0,21,225,0,0,21,225, + 0,0,8,58,0,0,22,70,0,0,22,71,0,0,8,59,0,0,22,110,0,0,22,118,0,0,8,61,0,0,22,128,0,0,22,156,0,0,8,70, + 0,0,29,0,0,0,29,20,0,0,8,99,0,0,29,22,0,0,29,35,0,0,8,120,0,0,29,38,0,0,29,46,0,0,8,134,0,0,29,48, + 0,0,29,91,0,0,8,143,0,0,29,93,0,0,29,106,0,0,8,187,0,0,29,119,0,0,29,120,0,0,8,201,0,0,29,123,0,0,29,123, + 0,0,8,203,0,0,29,125,0,0,29,125,0,0,8,204,0,0,29,133,0,0,29,133,0,0,8,205,0,0,29,155,0,0,29,191,0,0,8,206, + 0,0,29,196,0,0,29,201,0,0,8,243,0,0,30,0,0,0,30,251,0,0,8,249,0,0,31,0,0,0,31,21,0,0,9,245,0,0,31,24, + 0,0,31,29,0,0,10,11,0,0,31,32,0,0,31,69,0,0,10,17,0,0,31,72,0,0,31,77,0,0,10,55,0,0,31,80,0,0,31,87, + 0,0,10,61,0,0,31,89,0,0,31,89,0,0,10,69,0,0,31,91,0,0,31,91,0,0,10,70,0,0,31,93,0,0,31,93,0,0,10,71, + 0,0,31,95,0,0,31,125,0,0,10,72,0,0,31,128,0,0,31,180,0,0,10,103,0,0,31,182,0,0,31,196,0,0,10,156,0,0,31,198, + 0,0,31,211,0,0,10,171,0,0,31,214,0,0,31,219,0,0,10,185,0,0,31,221,0,0,31,239,0,0,10,191,0,0,31,242,0,0,31,244, + 0,0,10,210,0,0,31,246,0,0,31,254,0,0,10,213,0,0,32,0,0,0,32,100,0,0,10,222,0,0,32,106,0,0,32,113,0,0,11,67, + 0,0,32,116,0,0,32,142,0,0,11,75,0,0,32,144,0,0,32,156,0,0,11,102,0,0,32,160,0,0,32,181,0,0,11,115,0,0,32,184, + 0,0,32,186,0,0,11,137,0,0,32,208,0,0,32,209,0,0,11,140,0,0,32,214,0,0,32,215,0,0,11,142,0,0,32,219,0,0,32,220, + 0,0,11,144,0,0,32,225,0,0,32,225,0,0,11,146,0,0,33,0,0,0,33,9,0,0,11,147,0,0,33,11,0,0,33,73,0,0,11,157, + 0,0,33,75,0,0,33,75,0,0,11,220,0,0,33,78,0,0,33,78,0,0,11,221,0,0,33,80,0,0,33,133,0,0,11,222,0,0,33,137, + 0,0,33,137,0,0,12,20,0,0,33,144,0,0,35,17,0,0,12,21,0,0,35,24,0,0,35,25,0,0,13,151,0,0,35,28,0,0,35,33, + 0,0,13,153,0,0,35,36,0,0,35,40,0,0,13,159,0,0,35,43,0,0,35,44,0,0,13,164,0,0,35,115,0,0,35,117,0,0,13,166, + 0,0,35,122,0,0,35,122,0,0,13,169,0,0,35,125,0,0,35,125,0,0,13,170,0,0,35,135,0,0,35,135,0,0,13,171,0,0,35,148, + 0,0,35,148,0,0,13,172,0,0,35,155,0,0,35,174,0,0,13,173,0,0,35,206,0,0,35,207,0,0,13,193,0,0,35,227,0,0,35,227, + 0,0,13,195,0,0,35,229,0,0,35,229,0,0,13,196,0,0,35,232,0,0,35,232,0,0,13,197,0,0,36,34,0,0,36,35,0,0,13,198, + 0,0,36,96,0,0,36,105,0,0,13,200,0,0,37,0,0,0,38,156,0,0,13,210,0,0,38,160,0,0,38,184,0,0,15,111,0,0,38,192, + 0,0,38,195,0,0,15,136,0,0,38,226,0,0,38,226,0,0,15,140,0,0,39,1,0,0,39,4,0,0,15,141,0,0,39,6,0,0,39,9, + 0,0,15,145,0,0,39,12,0,0,39,39,0,0,15,149,0,0,39,41,0,0,39,75,0,0,15,177,0,0,39,77,0,0,39,77,0,0,15,212, + 0,0,39,79,0,0,39,82,0,0,15,213,0,0,39,86,0,0,39,86,0,0,15,217,0,0,39,88,0,0,39,94,0,0,15,218,0,0,39,97, + 0,0,39,148,0,0,15,225,0,0,39,152,0,0,39,175,0,0,16,21,0,0,39,177,0,0,39,190,0,0,16,45,0,0,39,197,0,0,39,198, + 0,0,16,59,0,0,39,224,0,0,39,224,0,0,16,61,0,0,39,230,0,0,39,235,0,0,16,62,0,0,39,240,0,0,40,255,0,0,16,68, + 0,0,41,6,0,0,41,7,0,0,17,84,0,0,41,10,0,0,41,11,0,0,17,86,0,0,41,64,0,0,41,65,0,0,17,88,0,0,41,131, + 0,0,41,132,0,0,17,90,0,0,41,206,0,0,41,213,0,0,17,92,0,0,41,235,0,0,41,235,0,0,17,100,0,0,41,250,0,0,41,251, + 0,0,17,101,0,0,42,0,0,0,42,2,0,0,17,103,0,0,42,12,0,0,42,28,0,0,17,106,0,0,42,47,0,0,42,47,0,0,17,123, + 0,0,42,106,0,0,42,107,0,0,17,124,0,0,42,125,0,0,42,160,0,0,17,126,0,0,42,174,0,0,42,186,0,0,17,162,0,0,42,249, + 0,0,42,250,0,0,17,175,0,0,43,0,0,0,43,26,0,0,17,177,0,0,43,31,0,0,43,36,0,0,17,204,0,0,43,83,0,0,43,84, + 0,0,17,210,0,0,44,96,0,0,44,119,0,0,17,212,0,0,44,121,0,0,44,127,0,0,17,236,0,0,45,0,0,0,45,37,0,0,17,243, + 0,0,45,48,0,0,45,101,0,0,18,25,0,0,45,111,0,0,45,111,0,0,18,79,0,0,46,24,0,0,46,24,0,0,18,80,0,0,46,30, + 0,0,46,30,0,0,18,81,0,0,46,34,0,0,46,37,0,0,18,82,0,0,46,46,0,0,46,46,0,0,18,86,0,0,77,192,0,0,77,255, + 0,0,18,87,0,0,164,208,0,0,164,255,0,0,18,151,0,0,166,68,0,0,166,71,0,0,18,199,0,0,166,76,0,0,166,77,0,0,18,203, + 0,0,166,80,0,0,166,81,0,0,18,205,0,0,166,84,0,0,166,87,0,0,18,207,0,0,166,98,0,0,166,110,0,0,18,211,0,0,166,138, + 0,0,166,141,0,0,18,224,0,0,166,148,0,0,166,149,0,0,18,228,0,0,167,8,0,0,167,22,0,0,18,230,0,0,167,27,0,0,167,31, + 0,0,18,245,0,0,167,34,0,0,167,43,0,0,18,250,0,0,167,48,0,0,167,65,0,0,19,4,0,0,167,70,0,0,167,75,0,0,19,22, + 0,0,167,78,0,0,167,83,0,0,19,28,0,0,167,86,0,0,167,87,0,0,19,34,0,0,167,100,0,0,167,103,0,0,19,36,0,0,167,128, + 0,0,167,131,0,0,19,40,0,0,167,137,0,0,167,142,0,0,19,44,0,0,167,144,0,0,167,145,0,0,19,50,0,0,167,160,0,0,167,170, + 0,0,19,52,0,0,167,250,0,0,167,255,0,0,19,63,0,0,239,0,0,0,239,25,0,0,19,69,0,0,240,0,0,0,240,3,0,0,19,95, + 0,0,244,0,0,0,244,38,0,0,19,99,0,0,244,40,0,0,244,65,0,0,19,138,0,0,246,197,0,0,246,197,0,0,19,164,0,0,251,0, + 0,0,251,6,0,0,19,165,0,0,251,19,0,0,251,23,0,0,19,172,0,0,251,29,0,0,251,54,0,0,19,177,0,0,251,56,0,0,251,60, + 0,0,19,203,0,0,251,62,0,0,251,62,0,0,19,208,0,0,251,64,0,0,251,65,0,0,19,209,0,0,251,67,0,0,251,68,0,0,19,211, + 0,0,251,70,0,0,251,79,0,0,19,213,0,0,251,82,0,0,251,163,0,0,19,223,0,0,251,170,0,0,251,173,0,0,20,49,0,0,251,211, + 0,0,251,214,0,0,20,53,0,0,251,217,0,0,251,218,0,0,20,57,0,0,251,232,0,0,251,233,0,0,20,59,0,0,251,252,0,0,251,255, + 0,0,20,61,0,0,254,0,0,0,254,15,0,0,20,65,0,0,254,32,0,0,254,35,0,0,20,81,0,0,254,112,0,0,254,116,0,0,20,85, + 0,0,254,118,0,0,254,252,0,0,20,90,0,0,254,255,0,0,254,255,0,0,20,225,0,0,255,249,0,0,255,253,0,0,20,226,0,1,3,0, + 0,1,3,30,0,0,20,231,0,1,3,32,0,1,3,35,0,0,21,6,0,1,211,0,0,1,211,86,0,0,21,10,0,1,213,56,0,1,213,57, + 0,0,21,97,0,1,213,59,0,1,213,62,0,0,21,99,0,1,213,64,0,1,213,68,0,0,21,103,0,1,213,70,0,1,213,70,0,0,21,108, + 0,1,213,74,0,1,213,80,0,0,21,109,0,1,213,82,0,1,213,107,0,0,21,116,0,1,213,160,0,1,213,211,0,0,21,142,0,1,215,216, + 0,1,215,235,0,0,21,194,0,1,240,48,0,1,240,147,0,0,21,214,0,1,240,160,0,1,240,174,0,0,22,58,0,1,240,177,0,1,240,190, + 0,0,22,73,0,1,240,193,0,1,240,207,0,0,22,87,0,1,240,209,0,1,240,223,0,0,22,102,0,1,244,45,0,1,244,46,0,0,22,117, + 0,1,244,49,0,1,244,49,0,0,22,119,0,1,244,53,0,1,244,53,0,0,22,120,0,1,246,0,0,1,246,35,0,0,22,121,0,1,246,37, + 0,1,246,43,0,0,22,157,0,1,246,45,0,1,246,64,0,0,22,164,0,6,2,10,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,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,1,0,0,0,0,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15, + 0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35, + 0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55, + 0,56,0,57,0,58,0,59,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,72,0,73,0,74,0,75, + 0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92,0,93,0,94,0,95, + 0,96,0,97,0,0,0,134,0,135,0,137,0,139,0,147,0,152,0,158,0,163,0,162,0,164,0,166,0,165,0,167,0,169,0,171,0,170,0,172, + 0,173,0,175,0,174,0,176,0,177,0,179,0,181,0,180,0,182,0,184,0,183,0,188,0,187,0,189,0,190,10,254,0,114,0,100,0,101,0,105, + 11,0,0,120,0,161,0,112,0,107,11,180,0,118,0,106,12,229,0,136,0,154,12,163,0,115,12,233,12,234,0,103,0,119,12,135,12,150,12,148, + 3,84,12,176,0,108,0,124,3,61,0,168,0,186,0,129,0,99,0,110,12,159,1,84,12,205,12,139,0,109,0,125,11,4,0,98,0,130,0,133, + 0,151,1,20,1,21,10,241,10,242,10,250,10,251,10,246,10,247,0,185,14,156,0,193,1,58,11,34,11,127,11,23,11,24,19,166,19,167,10,255, + 0,121,10,248,10,252,11,14,0,132,0,140,0,131,0,141,0,138,0,143,0,144,0,145,0,142,0,149,0,150,0,0,0,148,0,156,0,157,0,155, + 0,243,2,136,2,158,0,113,2,154,2,155,2,156,0,122,2,159,2,157,2,137,0,0,1,53,0,184,0,203,0,203,0,193,0,170,0,156,1,166, + 0,184,0,102,0,0,0,113,0,203,0,160,2,178,0,133,0,117,0,184,0,195,1,203,1,137,2,45,0,203,0,166,0,240,0,211,0,170,0,135, + 0,203,3,170,4,0,1,74,0,51,0,203,0,0,0,217,5,2,0,244,1,84,0,180,0,156,1,57,1,20,1,57,7,6,4,0,4,78,4,180, + 4,82,4,184,4,231,4,205,0,55,4,115,4,205,4,96,4,115,1,51,3,162,5,86,5,166,5,86,5,57,3,197,2,18,0,201,0,31,0,184, + 1,223,0,115,0,186,3,233,3,51,3,188,4,68,4,14,0,223,3,205,3,170,0,229,3,170,4,4,0,0,0,203,0,143,0,164,0,123,0,184, + 0,20,1,111,0,127,2,123,2,82,0,143,0,199,5,205,0,154,0,154,0,111,0,203,0,205,1,158,1,211,0,240,0,186,1,131,0,213,0,152, + 3,4,2,72,0,158,1,213,0,193,0,203,0,246,0,131,3,84,2,127,0,0,3,51,2,102,0,211,0,199,0,164,0,205,0,143,0,154,0,115, + 4,0,5,213,1,10,0,254,2,43,0,164,0,180,0,156,0,0,0,98,0,156,0,0,0,29,3,45,5,213,5,213,5,213,5,240,0,127,0,123, + 0,84,0,164,6,184,6,20,7,35,1,211,0,184,0,203,0,166,1,195,1,236,6,147,0,160,0,211,3,92,3,113,3,219,1,133,4,35,4,168, + 4,72,0,143,1,57,1,20,1,57,3,96,0,143,5,213,1,154,6,20,7,35,6,102,1,121,4,96,4,96,4,96,4,123,0,156,0,0,2,119, + 4,96,1,170,0,233,4,96,7,98,0,123,0,197,0,127,2,123,0,0,0,180,2,82,5,205,0,102,0,188,0,102,0,119,6,16,0,205,1,59, + 1,133,3,137,0,143,0,123,0,0,0,29,0,205,7,74,4,47,0,156,0,156,0,0,7,125,0,111,0,0,0,111,3,53,0,106,0,111,0,123, + 0,174,0,178,0,45,3,150,0,143,2,123,0,246,0,131,3,84,6,55,5,246,0,143,0,156,4,225,2,102,0,143,1,141,2,246,0,205,3,68, + 0,41,0,102,4,238,0,115,0,0,20,0,0,150,0,0,183,7,6,5,4,3,2,1,0,44,32,16,176,2,37,73,100,176,64,81,88,32,200,89, + 33,45,44,176,2,37,73,100,176,64,81,88,32,200,89,33,45,44,32,16,7,32,176,0,80,176,13,121,32,184,255,255,80,88,4,27,5,89,176,5, + 28,176,3,37,8,176,4,37,35,225,32,176,0,80,176,13,121,32,184,255,255,80,88,4,27,5,89,176,5,28,176,3,37,8,225,45,44,75,80,88, + 32,176,253,69,68,89,33,45,44,176,2,37,69,96,68,45,44,75,83,88,176,2,37,176,2,37,69,68,89,33,33,45,44,69,68,45,44,176,2,37, + 176,2,37,73,176,5,37,176,5,37,73,96,176,32,99,104,32,138,16,138,35,58,138,16,101,58,45,0,0,0,0,2,0,8,0,2,255,255,0,3, + 0,2,0,102,254,150,4,102,5,164,0,3,0,7,0,26,64,12,4,251,0,6,251,1,8,5,127,2,4,0,47,196,212,236,49,0,16,212,236,212, + 236,48,19,17,33,17,37,33,17,33,102,4,0,252,115,3,27,252,229,254,150,7,14,248,242,114,6,41,0,2,1,53,0,0,2,0,5,213,0,3, + 0,9,0,53,64,15,7,0,131,4,129,2,8,7,5,1,3,4,0,0,10,16,252,75,176,11,84,88,185,0,0,255,192,56,89,60,236,50,57,57, + 49,0,47,228,252,204,48,1,182,0,11,32,11,80,11,3,93,37,51,21,35,17,51,17,3,35,3,1,53,203,203,203,20,162,21,254,254,5,213,253, + 113,254,155,1,101,0,0,0,0,2,0,197,3,170,2,233,5,213,0,3,0,7,0,66,64,15,5,1,132,4,0,129,8,4,5,6,0,5,2,4, + 8,16,252,75,176,18,84,75,176,19,84,91,88,185,0,2,255,192,56,89,252,220,236,49,0,16,244,60,236,50,48,1,64,15,48,9,64,9,80,9, + 96,9,112,9,160,9,191,9,7,93,1,17,35,17,33,17,35,17,1,111,170,2,36,170,5,213,253,213,2,43,253,213,2,43,0,0,0,2,0,158, + 0,0,6,23,5,190,0,3,0,31,0,96,64,49,27,11,0,135,7,4,29,9,5,25,13,2,135,23,19,15,21,17,31,30,28,27,26,23,22,21, + 20,19,18,17,16,14,13,12,9,8,7,6,5,4,3,2,1,0,26,10,24,6,32,16,252,204,23,57,49,0,47,60,212,60,60,252,60,60,212,60, + 60,196,50,236,50,50,48,64,17,11,1,11,2,11,12,11,13,20,4,26,17,26,18,20,31,8,1,93,1,33,3,33,11,1,33,19,51,3,33,21, + 33,3,33,21,33,3,35,19,33,3,35,19,33,53,33,19,33,53,33,19,4,23,254,221,84,1,37,68,104,1,36,105,160,103,1,56,254,161,82,1, + 62,254,155,104,160,103,254,219,103,161,104,254,197,1,96,84,254,190,1,105,102,3,133,254,178,3,135,254,97,1,159,254,97,154,254,178,153,254,98,1, + 158,254,98,1,158,153,1,78,154,1,159,0,0,3,0,170,254,211,4,109,6,20,0,33,0,40,0,47,0,189,64,85,34,2,10,11,10,39,1,38, + 40,2,11,11,10,29,1,30,28,2,47,41,47,27,2,41,41,47,66,19,17,16,34,10,27,41,4,23,6,9,42,33,5,2,23,134,22,6,134,5, + 17,35,26,138,22,137,16,0,42,138,5,137,2,45,8,22,10,30,7,41,26,18,3,0,9,34,16,9,3,1,7,38,8,13,5,6,48,16,252,75, + 176,9,84,88,185,0,5,255,192,56,89,75,176,12,84,75,176,16,84,91,75,176,15,84,91,88,185,0,5,0,64,56,89,60,236,244,23,60,252,23, + 60,244,228,236,49,0,47,228,236,196,212,228,236,50,196,16,238,16,238,17,18,57,17,57,17,18,23,57,17,18,57,48,75,83,88,7,16,4,237,7, + 16,14,237,17,23,57,7,16,14,237,17,23,57,7,16,4,237,89,34,1,35,3,46,1,39,53,30,1,23,17,46,1,53,52,54,55,53,51,21,30, + 1,23,21,46,1,39,17,30,1,21,20,6,7,3,17,14,1,21,20,22,23,17,62,1,53,52,38,2,180,100,1,105,210,106,102,209,111,221,201,218, + 204,100,93,174,83,83,175,92,227,214,227,214,100,116,122,113,225,127,129,123,254,211,1,45,2,45,45,180,64,65,1,1,200,36,172,150,163,188,14,235, + 232,4,31,27,175,42,46,4,254,85,35,180,156,169,195,15,3,0,1,154,13,106,88,86,96,213,254,79,17,110,90,88,104,0,0,0,0,5,0,113, + 255,227,7,41,5,240,0,11,0,23,0,35,0,39,0,51,0,137,64,54,36,15,37,38,37,38,15,39,36,39,66,0,146,12,30,146,46,141,24,146, + 36,6,146,12,141,38,18,140,40,36,145,52,39,33,27,37,9,3,13,21,14,9,13,15,33,13,43,14,27,13,15,49,11,52,16,252,75,176,9,84, + 75,176,11,84,91,75,176,12,84,91,75,176,20,84,91,75,176,14,84,91,75,176,13,84,91,88,185,0,49,255,192,56,89,196,236,244,236,16,238,246, + 238,17,57,17,18,57,49,0,16,228,50,244,60,228,236,16,238,246,238,16,238,48,75,83,88,7,16,5,237,7,16,5,237,89,34,1,34,6,21,20, + 22,51,50,54,53,52,38,39,50,22,21,20,6,35,34,38,53,52,54,1,34,6,21,20,22,51,50,54,53,52,38,37,51,1,35,19,50,22,21,20, + 6,35,34,38,53,52,54,5,209,87,99,99,87,85,99,99,85,158,186,187,157,160,186,187,252,151,86,99,98,87,87,99,100,3,49,160,252,90,160,31, + 158,188,187,159,159,185,186,2,145,148,132,130,149,149,130,131,149,127,220,187,187,219,219,187,188,219,2,97,149,130,132,148,148,132,129,150,127,249,243,6, + 13,219,187,189,218,219,188,186,220,0,0,0,0,2,0,129,255,227,5,254,5,240,0,9,0,48,1,205,64,150,13,1,14,12,134,17,18,17,11,134, + 10,11,18,18,17,9,134,0,9,21,22,21,7,1,6,8,134,22,22,21,2,1,3,1,134,29,30,29,0,134,9,0,30,30,29,32,31,2,33,30, + 17,10,19,10,23,22,21,3,24,20,17,19,10,7,8,2,6,9,17,19,19,10,2,1,2,3,0,17,10,19,10,23,22,2,24,21,17,19,10,20, + 17,19,19,10,66,18,11,9,3,6,0,10,30,3,40,21,14,6,40,39,6,149,24,43,149,39,148,36,145,24,140,14,19,10,46,11,14,9,0,46, + 18,21,39,14,30,3,46,18,39,33,14,17,15,19,33,3,18,27,16,49,16,252,236,196,212,212,236,16,198,238,17,57,17,18,57,57,17,57,57,17, + 57,17,57,49,0,47,198,228,246,230,238,16,238,16,198,17,18,57,17,23,57,17,23,57,48,75,83,88,7,16,5,237,7,5,237,17,23,57,7,16, + 5,237,17,23,57,7,16,5,237,17,23,57,7,5,237,17,23,57,7,16,5,237,17,23,57,7,16,8,237,7,16,14,237,17,23,57,7,16,14,237, + 17,23,57,7,16,8,237,7,16,8,237,7,16,14,237,17,23,57,89,34,178,15,50,1,1,93,64,178,7,11,5,34,9,41,28,0,28,1,31,2, + 23,11,42,0,42,1,38,18,58,0,52,18,68,11,94,0,89,1,90,10,85,18,90,26,90,31,89,48,103,30,123,0,155,0,154,1,153,2,151,8, + 149,11,147,21,149,22,149,34,153,45,31,9,11,9,12,8,17,12,39,12,40,24,2,27,9,25,11,25,12,25,17,28,20,28,21,22,29,31,50,39, + 0,39,1,41,9,35,18,42,19,42,20,40,21,47,50,59,9,52,18,57,19,63,50,74,9,76,20,75,21,70,25,79,50,86,1,90,9,89,12,85, + 18,89,19,92,31,95,50,106,12,105,17,96,50,117,1,121,12,122,17,147,0,147,1,151,2,149,5,156,7,156,8,159,8,154,9,155,11,154,12,144, + 50,160,50,176,50,57,93,0,93,1,14,1,21,20,22,51,50,54,55,9,1,62,1,55,51,6,2,7,1,35,39,14,1,35,34,0,53,52,54,55, + 46,1,53,52,54,51,50,22,23,21,46,1,35,34,6,21,20,22,1,242,91,85,212,160,95,166,73,254,123,1,252,59,66,6,186,12,104,93,1,23, + 252,143,104,228,131,241,254,206,134,134,48,50,222,184,83,165,85,87,158,68,105,131,59,3,35,81,161,88,146,194,63,64,2,143,253,248,89,203,114,132, + 254,254,126,254,227,147,89,87,1,19,215,128,225,99,63,125,60,162,197,36,36,182,47,49,111,88,51,103,0,1,0,197,3,170,1,111,5,213,0,3, + 0,55,64,10,1,132,0,129,4,0,5,2,4,4,16,252,75,176,18,84,75,176,19,84,91,88,185,0,2,255,192,56,89,236,49,0,16,244,236,48, + 1,64,13,64,5,80,5,96,5,112,5,144,5,160,5,6,93,1,17,35,17,1,111,170,5,213,253,213,2,43,0,0,0,1,0,176,254,242,2,123, + 6,18,0,13,0,55,64,15,6,152,0,151,14,13,7,0,3,18,6,0,19,10,14,16,220,75,176,19,84,88,185,0,10,255,192,56,89,75,176,15, + 84,88,185,0,10,0,64,56,89,228,50,236,17,57,57,49,0,16,252,236,48,1,6,2,21,20,18,23,35,38,2,53,52,18,55,2,123,134,130,131, + 133,160,150,149,148,151,6,18,230,254,62,231,231,254,59,229,235,1,198,224,223,1,196,236,0,1,0,164,254,242,2,111,6,18,0,13,0,31,64,15, + 7,152,0,151,14,7,1,0,11,18,4,19,8,0,14,16,220,60,244,236,17,57,57,49,0,16,252,236,48,19,51,22,18,21,20,2,7,35,54,18, + 53,52,2,164,160,150,149,149,150,160,133,131,131,6,18,236,254,60,223,224,254,58,235,229,1,197,231,231,1,194,0,0,0,1,0,61,2,74,3,195, + 5,240,0,17,0,78,64,44,16,13,11,0,4,12,9,7,4,2,4,8,3,153,5,17,12,153,10,1,14,145,18,8,12,10,3,9,6,17,3,1, + 3,2,0,20,15,4,11,9,20,13,6,18,16,212,60,228,50,220,60,228,50,23,57,17,18,23,57,49,0,16,244,212,60,236,50,196,236,50,23,57, + 18,23,57,48,1,13,1,7,37,17,35,17,5,39,45,1,55,5,17,51,17,37,3,195,254,153,1,103,58,254,176,114,254,176,58,1,103,254,153,58, + 1,80,114,1,80,4,223,194,195,98,203,254,135,1,121,203,98,195,194,99,203,1,121,254,135,203,0,0,0,1,0,217,0,0,5,219,5,4,0,11, + 0,35,64,17,0,9,1,156,7,3,5,2,21,4,0,23,10,6,21,8,12,16,220,252,60,252,60,236,49,0,47,212,60,252,60,196,48,1,17,33, + 21,33,17,35,17,33,53,33,17,3,174,2,45,253,211,168,253,211,2,45,5,4,253,211,170,253,211,2,45,170,2,45,0,1,0,158,255,18,1,195, + 0,254,0,5,0,25,64,12,3,158,0,131,6,3,4,1,25,0,24,6,16,252,236,212,204,49,0,16,252,236,48,55,51,21,3,35,19,240,211,164, + 129,82,254,172,254,192,1,64,0,1,0,100,1,223,2,127,2,131,0,3,0,17,182,0,156,2,4,1,0,4,16,220,204,49,0,16,212,236,48,19, + 33,21,33,100,2,27,253,229,2,131,164,0,0,1,0,219,0,0,1,174,0,254,0,3,0,17,183,0,131,2,1,25,0,24,4,16,252,236,49,0, + 47,236,48,55,51,21,35,219,211,211,254,254,0,1,0,0,255,66,2,178,5,213,0,3,0,45,64,20,0,26,1,2,1,2,26,3,0,3,66,2, + 159,0,129,4,2,0,1,3,47,196,57,57,49,0,16,244,236,48,75,83,88,7,16,5,237,7,16,5,237,89,34,1,51,1,35,2,8,170,253,248, + 170,5,213,249,109,0,0,0,0,2,0,135,255,227,4,143,5,240,0,11,0,23,0,35,64,19,6,160,18,0,160,12,145,18,140,24,9,28,15,30, + 3,28,21,27,24,16,252,236,244,236,49,0,16,228,244,236,16,238,48,1,34,2,17,16,18,51,50,18,17,16,2,39,50,0,17,16,0,35,34,0, + 17,16,0,2,139,156,157,157,156,157,157,157,157,251,1,9,254,247,251,251,254,247,1,9,5,80,254,205,254,204,254,205,254,205,1,51,1,51,1,52, + 1,51,160,254,115,254,134,254,135,254,115,1,141,1,121,1,122,1,141,0,0,1,0,225,0,0,4,90,5,213,0,10,0,64,64,21,66,3,160,4, + 2,160,5,129,7,0,160,9,8,31,6,28,3,0,31,1,11,16,212,75,176,15,84,88,185,0,1,0,64,56,89,236,196,252,236,49,0,47,236,50, + 244,236,212,236,48,75,83,88,89,34,1,180,15,3,15,4,2,93,55,33,17,5,53,37,51,17,33,21,33,254,1,74,254,153,1,101,202,1,74,252, + 164,170,4,115,72,184,72,250,213,170,0,0,0,1,0,150,0,0,4,74,5,240,0,28,0,158,64,39,25,26,27,3,24,28,17,5,4,0,17,5, + 5,4,66,16,161,17,148,13,160,20,145,4,0,160,2,0,16,10,2,1,10,28,23,16,3,6,29,16,252,75,176,21,84,75,176,22,84,91,75,176, + 20,84,91,88,185,0,3,255,192,56,89,196,212,236,192,192,17,18,57,49,0,47,236,50,244,236,244,236,48,75,83,88,7,16,5,237,7,5,237,1, + 176,28,16,17,23,57,89,34,1,64,50,85,4,86,5,86,7,122,4,122,5,118,27,135,25,7,4,0,4,25,4,26,4,27,5,28,116,0,118,6, + 117,26,115,27,116,28,130,0,134,25,130,26,130,27,130,28,168,0,168,27,17,93,0,93,37,33,21,33,53,54,0,55,62,1,53,52,38,35,34,6, + 7,53,62,1,51,50,4,21,20,6,7,6,0,1,137,2,193,252,76,115,1,141,51,97,77,167,134,95,211,120,122,212,88,232,1,20,69,91,25,254, + 244,170,170,170,119,1,145,58,109,151,73,119,150,66,67,204,49,50,232,194,92,165,112,29,254,235,0,0,0,1,0,156,255,227,4,115,5,240,0,40, + 0,112,64,46,0,21,19,10,134,9,31,134,32,19,160,21,13,160,9,147,6,28,160,32,147,35,145,6,140,21,163,41,22,28,19,0,3,20,25,28, + 38,32,16,28,3,20,31,9,6,41,16,252,75,176,22,84,75,176,20,84,91,88,185,0,9,255,192,56,89,196,196,212,236,244,236,17,23,57,57,49, + 0,16,236,228,244,228,236,16,230,238,16,238,16,238,16,238,17,18,57,48,1,64,9,100,30,97,31,97,32,100,33,4,0,93,1,30,1,21,20,4, + 33,34,38,39,53,30,1,51,50,54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7,53,62,1,51,50,4,21,20,6,3,63,145,163,254, + 208,254,232,94,199,106,84,200,109,190,199,185,165,174,182,149,158,163,152,83,190,114,115,201,89,230,1,12,142,3,37,31,196,144,221,242,37,37,195,49, + 50,150,143,132,149,166,119,112,115,123,36,38,180,32,32,209,178,124,171,0,0,2,0,100,0,0,4,164,5,213,0,2,0,13,0,129,64,29,1,13, + 3,13,0,3,3,13,66,0,3,11,7,160,5,1,3,129,9,1,12,10,0,28,6,8,4,12,14,16,220,75,176,11,84,75,176,13,84,91,88,185, + 0,12,255,192,56,89,212,60,196,236,50,17,57,49,0,47,228,212,60,236,50,18,57,48,75,83,88,7,16,4,201,7,16,5,201,89,34,1,64,42, + 11,0,42,0,72,0,89,0,105,0,119,0,138,0,7,22,1,43,0,38,1,43,3,54,1,78,1,79,12,79,13,86,1,102,1,117,1,122,3,133, + 1,13,93,0,93,9,1,33,3,51,17,51,21,35,17,35,17,33,53,3,6,254,2,1,254,53,254,213,213,201,253,94,5,37,252,227,3,205,252,51, + 168,254,160,1,96,195,0,0,0,1,0,158,255,227,4,100,5,213,0,29,0,94,64,35,4,26,7,17,134,16,29,26,160,7,20,160,16,137,13,2, + 160,0,129,13,140,7,164,30,23,28,1,10,3,28,0,10,16,6,30,16,252,1,75,176,22,84,75,176,20,84,91,88,185,0,16,255,192,56,89,75, + 176,15,84,88,185,0,16,0,64,56,89,196,212,236,16,196,238,49,0,16,228,228,244,236,16,230,238,16,254,196,16,238,17,18,57,48,19,33,21,33, + 17,62,1,51,50,0,21,20,0,33,34,38,39,53,30,1,51,50,54,53,52,38,35,34,6,7,221,3,25,253,160,44,88,44,250,1,36,254,212,254, + 239,94,195,104,90,192,107,173,202,202,173,81,161,84,5,213,170,254,146,15,15,254,238,234,241,254,245,32,32,203,49,48,182,156,156,182,36,38,0,0, + 0,2,0,143,255,227,4,150,5,240,0,11,0,36,0,88,64,36,19,6,0,13,134,12,0,160,22,6,160,28,22,165,16,160,12,137,34,145,28,140, + 37,12,34,9,28,25,30,19,28,3,33,31,27,37,16,252,236,236,244,236,228,49,0,16,228,244,228,252,228,16,238,16,238,16,238,17,18,57,48,64, + 20,203,0,203,1,205,2,205,3,205,4,203,5,203,6,7,164,30,178,30,2,93,1,93,1,34,6,21,20,22,51,50,54,53,52,38,1,21,46,1, + 35,34,2,3,62,1,51,50,0,21,20,0,35,32,0,17,16,0,33,50,22,2,164,136,159,159,136,136,159,159,1,9,76,155,76,200,211,15,59,178, + 107,225,1,5,254,240,226,254,253,254,238,1,80,1,27,76,155,3,59,186,162,161,187,187,161,162,186,2,121,184,36,38,254,242,254,239,87,93,254,239, + 235,230,254,234,1,141,1,121,1,98,1,165,30,0,0,0,0,1,0,168,0,0,4,104,5,213,0,6,0,99,64,24,5,17,2,3,2,3,17,4, + 5,4,66,5,160,0,129,3,5,3,1,4,1,0,6,7,16,252,204,196,17,57,57,49,0,47,244,236,48,75,83,88,7,16,5,237,7,16,5,237, + 89,34,1,75,176,22,84,88,189,0,7,0,64,0,1,0,7,0,7,255,192,56,17,55,56,89,64,18,88,2,1,6,3,26,5,57,5,72,5,103, + 3,176,0,176,6,7,93,0,93,19,33,21,1,35,1,33,168,3,192,253,226,211,1,254,253,51,5,213,86,250,129,5,43,0,0,0,0,3,0,139, + 255,227,4,139,5,240,0,11,0,35,0,47,0,67,64,37,24,12,0,160,39,6,160,30,45,160,18,145,30,140,39,163,48,24,12,36,42,28,21,36, + 28,15,9,28,21,27,30,3,28,15,33,27,48,16,252,196,236,244,196,236,16,238,16,238,17,57,57,49,0,16,236,228,244,236,16,238,16,238,57,57, + 48,1,34,6,21,20,22,51,50,54,53,52,38,37,46,1,53,52,36,51,50,22,21,20,6,7,30,1,21,20,4,35,34,36,53,52,54,19,20,22, + 51,50,54,53,52,38,35,34,6,2,139,144,165,165,144,144,166,165,254,165,130,145,0,255,222,223,254,145,129,146,163,254,247,247,247,254,247,164,72,145, + 131,130,147,147,130,131,145,2,197,154,135,135,154,155,134,135,154,86,32,178,128,179,208,208,179,128,178,32,34,198,143,217,232,232,217,143,198,1,97,116, + 130,130,116,116,130,130,0,0,0,2,0,129,255,227,4,135,5,240,0,24,0,36,0,88,64,35,7,31,25,1,134,0,25,160,10,165,4,160,0,137, + 22,31,160,16,145,22,140,37,7,28,28,33,19,30,0,34,34,28,13,27,37,16,252,236,228,244,236,236,49,0,16,228,244,236,16,230,254,245,238,16, + 238,17,18,57,48,64,22,196,25,194,26,192,27,192,28,192,29,194,30,196,31,7,170,18,188,18,233,18,3,93,1,93,55,53,30,1,51,50,18,19, + 14,1,35,34,0,53,52,0,51,32,0,17,16,0,33,34,38,1,50,54,53,52,38,35,34,6,21,20,22,225,76,156,75,200,211,15,58,178,108,224, + 254,251,1,16,226,1,3,1,17,254,177,254,229,76,156,1,62,136,159,159,136,136,159,159,31,184,36,38,1,13,1,18,86,92,1,15,235,230,1,22, + 254,115,254,134,254,159,254,91,30,2,151,186,162,161,187,187,161,162,186,0,0,2,0,240,0,0,1,195,4,35,0,3,0,7,0,28,64,14,6,131, + 4,166,0,131,2,5,1,3,4,0,24,8,16,252,60,236,50,49,0,47,236,244,236,48,55,51,21,35,17,51,21,35,240,211,211,211,211,254,254,4, + 35,254,0,0,0,2,0,158,255,18,1,195,4,35,0,3,0,9,0,37,64,19,2,131,0,7,158,4,131,0,166,10,7,8,5,1,25,4,0,24, + 10,16,252,60,236,50,212,204,49,0,16,228,252,236,16,238,48,19,51,21,35,17,51,21,3,35,19,240,211,211,211,164,129,82,4,35,254,253,217,172, + 254,192,1,64,0,1,0,217,0,94,5,219,4,166,0,6,0,77,64,42,2,156,3,4,3,1,156,0,1,4,4,3,1,156,2,1,5,6,5,0, + 156,6,5,66,5,4,2,1,0,5,3,168,6,167,7,1,2,0,36,4,35,7,16,252,236,50,57,49,0,16,244,236,23,57,48,75,83,88,7,4, + 237,7,16,8,237,7,16,8,237,7,16,4,237,89,34,9,2,21,1,53,1,5,219,251,248,4,8,250,254,5,2,3,240,254,145,254,147,182,1,209, + 166,1,209,0,0,2,0,217,1,96,5,219,3,162,0,3,0,7,0,28,64,13,0,156,2,6,156,4,8,5,1,4,0,35,8,16,252,60,196,50, + 49,0,16,212,236,212,236,48,19,33,21,33,21,33,21,33,217,5,2,250,254,5,2,250,254,3,162,168,240,170,0,0,0,1,0,217,0,94,5,219, + 4,166,0,6,0,79,64,43,6,156,0,6,3,4,3,5,156,4,4,3,0,156,1,2,1,6,156,5,6,2,2,1,66,6,5,3,2,0,5,4, + 168,1,167,7,6,2,36,4,0,35,7,16,252,60,236,57,49,0,16,244,236,23,57,48,75,83,88,7,16,8,237,7,16,4,237,7,16,4,237,7, + 16,8,237,89,34,19,53,1,21,1,53,1,217,5,2,250,254,4,6,3,240,182,254,47,166,254,47,182,1,109,0,0,0,2,0,147,0,0,3,176, + 5,240,0,3,0,36,0,101,64,43,36,30,9,6,4,10,29,19,4,0,20,134,19,136,16,149,23,145,0,131,2,29,26,13,9,5,4,10,30,1, + 13,28,26,4,28,5,1,3,0,38,26,19,37,16,220,75,176,12,84,88,185,0,19,255,192,56,89,196,252,236,212,236,16,238,17,57,57,17,18,57, + 17,18,57,49,0,47,238,246,254,244,238,16,205,17,57,57,23,57,48,1,182,121,9,122,10,122,32,3,93,37,51,21,35,19,35,53,52,54,63,1, + 62,1,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,6,15,1,14,1,7,14,1,21,1,135,203,203,197,191,56,90,90,57,51,131,108,79, + 179,97,94,193,103,184,223,72,90,88,47,39,8,6,6,254,254,1,145,154,101,130,86,89,53,94,49,89,110,70,67,188,57,56,194,159,76,137,86,86, + 47,53,25,21,60,52,0,0,0,2,0,135,254,156,7,113,5,162,0,11,0,76,0,149,64,50,24,12,3,9,169,25,21,27,3,169,76,15,52,51, + 15,172,48,169,55,21,172,36,169,55,67,77,51,52,30,26,0,40,18,6,24,12,40,26,43,30,40,73,18,43,42,40,73,44,61,77,16,220,236,252, + 236,16,254,253,254,60,198,16,238,17,18,57,57,49,0,16,212,196,252,236,16,254,237,212,198,16,197,238,50,16,196,238,17,57,57,48,0,75,176,9, + 84,75,176,12,84,91,75,176,16,84,91,75,176,19,84,91,75,176,20,84,91,88,189,0,77,255,192,0,1,0,77,0,77,0,64,56,17,55,56,89, + 64,9,15,78,31,78,47,78,63,78,4,1,93,1,20,22,51,50,54,53,52,38,35,34,6,1,14,1,35,34,38,53,52,54,51,50,22,23,53,51, + 17,62,1,53,52,38,39,38,36,35,34,6,7,6,2,21,20,18,23,22,4,51,50,54,55,23,6,4,35,34,36,39,38,2,53,52,18,55,54,36, + 51,50,4,23,30,1,21,16,0,5,2,250,142,124,123,141,144,122,121,143,2,33,60,155,103,172,215,216,171,103,156,59,143,146,165,63,64,104,254,213, + 176,123,226,96,157,177,115,109,105,1,20,157,129,249,104,90,125,254,217,152,185,254,184,128,128,134,136,126,129,1,82,189,212,1,107,123,75,79,254,194, + 254,232,2,25,143,163,164,142,140,165,164,254,72,77,73,249,200,200,250,75,76,131,253,32,22,223,177,107,188,80,131,139,65,64,102,254,181,193,159,254, + 234,106,104,109,87,81,111,97,103,131,125,125,1,73,189,182,1,74,125,127,135,174,160,98,230,123,254,249,254,208,6,0,0,2,0,16,0,0,5,104, + 5,213,0,2,0,10,0,194,64,65,0,17,1,0,4,5,4,2,17,5,5,4,1,17,10,3,10,0,17,2,0,3,3,10,7,17,5,4,6,17, + 5,5,4,9,17,3,10,8,17,10,3,10,66,0,3,7,149,1,3,129,9,5,9,8,7,6,4,3,2,1,0,9,5,10,11,16,212,196,23,57, + 49,0,47,60,228,212,236,18,57,48,75,83,88,7,16,5,237,7,5,237,7,16,5,237,7,5,237,7,16,8,237,7,16,5,237,7,16,5,237,7, + 16,8,237,89,34,178,32,12,1,1,93,64,66,15,1,15,2,15,7,15,8,15,0,88,0,118,0,112,0,140,0,9,7,1,8,2,6,3,9,4, + 22,1,25,2,86,1,88,2,80,12,103,1,104,2,120,1,118,2,124,3,114,4,119,7,120,8,135,1,136,2,128,12,152,2,153,3,150,4,23,93, + 0,93,9,1,33,1,51,1,35,3,33,3,35,2,188,254,238,2,37,254,123,229,2,57,210,136,253,95,136,213,5,14,253,25,3,174,250,43,1,127, + 254,129,0,0,0,3,0,201,0,0,4,236,5,213,0,8,0,17,0,32,0,67,64,35,25,0,149,10,9,149,18,129,1,149,10,173,31,17,11,8, + 2,19,25,31,5,0,14,28,22,5,25,28,46,9,0,28,18,4,33,16,252,236,50,252,236,212,236,17,23,57,57,57,49,0,47,236,236,244,236,16, + 238,57,48,178,15,34,1,1,93,1,17,33,50,54,53,52,38,35,1,17,33,50,54,53,52,38,35,37,33,50,22,21,20,6,7,30,1,21,20,4, + 35,33,1,147,1,68,163,157,157,163,254,188,1,43,148,145,145,148,254,11,2,4,231,250,128,124,149,165,254,240,251,253,232,2,201,253,221,135,139,140, + 133,2,102,254,62,111,114,113,112,166,192,177,137,162,20,32,203,152,200,218,0,1,0,115,255,227,5,39,5,240,0,25,0,54,64,26,13,161,14,174, + 10,149,17,1,161,0,174,4,149,23,145,17,140,26,7,25,13,0,48,20,16,26,16,252,236,50,236,49,0,16,228,244,236,244,236,16,238,246,238,48, + 180,15,27,31,27,2,1,93,1,21,46,1,35,32,0,17,16,0,33,50,54,55,21,14,1,35,32,0,17,16,0,33,50,22,5,39,102,231,130,255, + 0,254,240,1,16,1,0,130,231,102,106,237,132,254,173,254,122,1,134,1,83,134,237,5,98,213,95,94,254,199,254,216,254,217,254,199,94,95,211,72, + 72,1,159,1,103,1,104,1,159,71,0,0,0,2,0,201,0,0,5,176,5,213,0,8,0,17,0,46,64,21,0,149,9,129,1,149,16,8,2,16, + 10,0,5,25,13,50,0,28,9,4,18,16,252,236,244,236,17,57,57,57,57,49,0,47,236,244,236,48,178,96,19,1,1,93,1,17,51,32,0,17, + 16,0,33,37,33,32,0,17,16,0,41,1,1,147,244,1,53,1,31,254,225,254,203,254,66,1,159,1,178,1,150,254,104,254,80,254,97,5,47,251, + 119,1,24,1,46,1,44,1,23,166,254,151,254,128,254,126,254,150,0,0,0,1,0,201,0,0,4,139,5,213,0,11,0,46,64,21,6,149,4,2, + 149,0,129,8,149,4,173,10,5,1,9,7,3,28,0,4,12,16,252,236,50,212,196,196,49,0,47,236,236,244,236,16,238,48,178,31,13,1,1,93, + 19,33,21,33,17,33,21,33,17,33,21,33,201,3,176,253,26,2,199,253,57,2,248,252,62,5,213,170,254,70,170,253,227,170,0,0,0,1,0,201, + 0,0,4,35,5,213,0,9,0,41,64,18,6,149,4,2,149,0,129,4,173,8,5,1,7,3,28,0,4,10,16,252,236,50,212,196,49,0,47,236, + 244,236,16,238,48,178,15,11,1,1,93,19,33,21,33,17,33,21,33,17,35,201,3,90,253,112,2,80,253,176,202,5,213,170,254,72,170,253,55,0, + 0,1,0,115,255,227,5,139,5,240,0,29,0,57,64,32,0,5,27,1,149,3,27,149,8,18,161,17,174,21,149,14,145,8,140,30,2,0,28,17, + 52,4,51,24,25,11,16,30,16,252,236,252,228,252,196,49,0,16,228,244,236,244,236,16,254,212,238,17,57,57,48,37,17,33,53,33,17,6,4,35, + 32,0,17,16,0,33,50,4,23,21,46,1,35,32,0,17,16,0,33,50,54,4,195,254,182,2,18,117,254,230,160,254,162,254,117,1,139,1,94,146, + 1,7,111,112,252,139,254,238,254,237,1,19,1,18,107,168,213,1,145,166,253,127,83,85,1,153,1,109,1,110,1,153,72,70,215,95,96,254,206,254, + 209,254,210,254,206,37,0,0,0,1,0,201,0,0,5,59,5,213,0,11,0,44,64,20,8,149,2,173,4,0,129,10,6,7,3,28,5,56,9,1, + 28,0,4,12,16,252,236,50,252,236,50,49,0,47,60,228,50,252,236,48,178,80,13,1,1,93,19,51,17,33,17,51,17,35,17,33,17,35,201,202, + 2,222,202,202,253,34,202,5,213,253,156,2,100,250,43,2,199,253,57,0,0,1,0,201,0,0,1,147,5,213,0,3,0,46,183,0,175,2,1,28, + 0,4,4,16,252,75,176,16,84,88,185,0,0,0,64,56,89,236,49,0,47,236,48,1,64,13,48,5,64,5,80,5,96,5,143,5,159,5,6,93, + 19,51,17,35,201,202,202,5,213,250,43,0,0,1,255,150,254,102,1,147,5,213,0,11,0,66,64,19,11,2,0,7,149,5,176,0,129,12,5,8, + 6,57,1,28,0,4,12,16,252,75,176,16,84,88,185,0,0,0,64,56,89,236,228,57,57,49,0,16,228,252,236,17,57,57,48,1,64,13,48,13, + 64,13,80,13,96,13,143,13,159,13,6,93,19,51,17,16,6,43,1,53,51,50,54,53,201,202,205,227,77,63,134,110,5,213,250,147,254,242,244,170, + 150,194,0,0,0,1,0,201,0,0,5,106,5,213,0,10,0,239,64,40,8,17,5,6,5,7,17,6,6,5,3,17,4,5,4,2,17,5,5,4, + 66,8,5,2,3,3,0,175,9,6,5,1,4,6,8,1,28,0,4,11,16,252,236,50,212,196,17,57,49,0,47,60,236,50,23,57,48,75,83,88, + 7,16,4,237,7,16,5,237,7,16,5,237,7,16,4,237,89,34,178,8,3,1,1,93,64,146,20,2,1,4,2,9,8,22,2,40,5,40,8,55, + 2,54,5,52,8,71,2,70,5,67,8,85,2,103,2,118,2,119,5,131,2,136,5,143,8,148,2,155,8,231,2,21,6,3,9,5,9,6,27,3, + 25,7,5,10,3,10,7,24,3,40,5,43,6,42,7,54,4,54,5,54,6,53,7,48,12,65,3,64,4,69,5,64,6,64,7,64,12,98,3,96, + 4,104,5,103,7,119,5,112,12,139,3,139,5,142,6,143,7,143,12,154,3,157,6,157,7,182,3,181,7,197,3,197,7,215,3,214,7,232,3,233, + 4,232,5,234,6,247,3,248,5,249,6,44,93,113,0,93,113,19,51,17,1,33,9,1,33,1,17,35,201,202,2,158,1,4,253,27,3,26,254,246, + 253,51,202,5,213,253,137,2,119,253,72,252,227,2,207,253,49,0,0,0,0,1,0,201,0,0,4,106,5,213,0,5,0,37,64,12,2,149,0,129, + 4,1,28,3,58,0,4,6,16,252,236,236,49,0,47,228,236,48,64,9,48,7,80,7,128,3,128,4,4,1,93,19,51,17,33,21,33,201,202,2, + 215,252,95,5,213,250,213,170,0,1,0,201,0,0,6,31,5,213,0,12,0,191,64,52,3,17,7,8,7,2,17,1,2,8,8,7,2,17,3,2, + 9,10,9,1,17,10,10,9,66,10,7,2,3,8,3,0,175,8,11,5,9,8,3,2,1,5,10,6,28,4,62,10,28,0,4,13,16,252,236,252, + 236,17,23,57,49,0,47,60,196,236,50,17,23,57,48,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,89,34,178,112,14,1, + 1,93,64,86,3,7,15,8,15,9,2,10,21,2,20,7,19,10,38,2,38,7,32,7,38,10,32,10,52,7,53,10,105,2,124,2,123,7,121,10, + 128,2,130,7,130,10,144,2,22,4,1,11,3,19,1,27,3,35,1,44,3,39,8,40,9,52,1,60,3,86,8,89,9,101,8,106,9,118,8,121, + 9,129,1,141,3,149,1,155,3,20,93,0,93,19,33,9,1,33,17,35,17,1,35,1,17,35,201,1,45,1,125,1,127,1,45,197,254,127,203,254, + 127,196,5,213,252,8,3,248,250,43,5,31,252,0,4,0,250,225,0,0,0,1,0,201,0,0,5,51,5,213,0,9,0,121,64,30,7,17,1,2, + 1,2,17,6,7,6,66,7,2,3,0,175,8,5,6,1,7,2,28,4,54,7,28,0,4,10,16,252,236,252,236,17,57,57,49,0,47,60,236,50, + 57,57,48,75,83,88,7,16,4,237,7,16,4,237,89,34,178,31,11,1,1,93,64,48,54,2,56,7,72,2,71,7,105,2,102,7,128,2,7,6, + 1,9,6,21,1,26,6,70,1,73,6,87,1,88,6,101,1,105,6,121,6,133,1,138,6,149,1,154,6,159,11,16,93,0,93,19,33,1,17,51, + 17,33,1,17,35,201,1,16,2,150,196,254,240,253,106,196,5,213,251,31,4,225,250,43,4,225,251,31,0,2,0,115,255,227,5,217,5,240,0,11, + 0,23,0,35,64,19,6,149,18,0,149,12,145,18,140,24,9,25,15,51,3,25,21,16,24,16,252,236,252,236,49,0,16,228,244,236,16,238,48,1, + 34,0,17,16,0,51,50,0,17,16,0,39,32,0,17,16,0,33,32,0,17,16,0,3,39,220,254,253,1,3,220,220,1,1,254,255,220,1,58,1, + 120,254,136,254,198,254,197,254,135,1,121,5,76,254,184,254,229,254,230,254,184,1,72,1,26,1,27,1,72,164,254,91,254,158,254,159,254,91,1,164, + 1,98,1,98,1,165,0,0,0,2,0,201,0,0,4,141,5,213,0,8,0,19,0,58,64,24,1,149,16,0,149,9,129,18,16,10,8,2,4,0, + 5,25,13,63,17,0,28,9,4,20,16,252,236,50,252,236,17,23,57,49,0,47,244,236,212,236,48,64,11,15,21,31,21,63,21,95,21,175,21,5, + 1,93,1,17,51,50,54,53,52,38,35,37,33,50,4,21,20,4,43,1,17,35,1,147,254,141,154,154,141,254,56,1,200,251,1,1,254,255,251,254, + 202,5,47,253,207,146,135,134,146,166,227,219,221,226,253,168,0,2,0,115,254,248,5,217,5,240,0,11,0,29,0,82,64,42,17,16,2,15,1,12, + 13,12,14,1,13,13,12,66,15,30,12,6,149,18,0,149,24,145,18,140,13,30,13,27,15,12,3,9,25,27,51,3,25,21,16,30,16,252,236,252, + 236,17,57,57,17,57,49,0,16,196,228,244,236,16,238,57,18,57,48,75,83,88,7,16,5,237,7,16,5,237,23,57,89,34,1,34,0,17,16,0, + 51,50,0,17,16,0,19,1,35,39,14,1,35,32,0,17,16,0,33,32,0,17,16,2,3,39,220,254,253,1,3,220,220,1,1,254,255,63,1,10, + 244,221,33,35,16,254,197,254,135,1,121,1,59,1,58,1,120,209,5,76,254,184,254,229,254,230,254,184,1,72,1,26,1,27,1,72,250,207,254,221, + 239,2,2,1,165,1,97,1,98,1,165,254,91,254,158,254,252,254,142,0,0,2,0,201,0,0,5,84,5,213,0,19,0,28,0,177,64,53,9,8, + 7,3,10,6,17,3,4,3,5,17,4,4,3,66,6,4,0,21,3,4,21,149,9,20,149,13,129,11,4,5,6,3,17,9,0,28,22,14,5,10, + 25,25,4,17,63,20,10,28,12,4,29,16,252,236,50,252,196,236,17,23,57,17,57,57,57,49,0,47,60,244,236,212,236,18,57,18,57,18,57,48, + 75,83,88,7,16,5,237,7,16,5,237,17,23,57,89,34,178,64,30,1,1,93,64,66,122,19,1,5,0,5,1,5,2,6,3,7,4,21,0,21, + 1,20,2,22,3,23,4,37,0,37,1,37,2,38,3,39,6,38,7,38,8,38,9,32,30,54,1,54,2,70,1,70,2,104,5,117,4,117,5,119, + 19,136,6,136,7,152,6,152,7,31,93,0,93,1,30,1,23,19,35,3,46,1,43,1,17,35,17,33,32,22,21,20,6,1,17,51,50,54,53,52, + 38,35,3,141,65,123,62,205,217,191,74,139,120,220,202,1,200,1,0,252,131,253,137,254,146,149,149,146,2,188,22,144,126,254,104,1,127,150,98,253, + 137,5,213,214,216,141,186,2,79,253,238,135,131,131,133,0,0,1,0,135,255,227,4,162,5,240,0,39,0,126,64,60,13,12,2,14,11,2,30,31, + 30,8,9,2,7,10,2,31,31,30,66,10,11,30,31,4,21,1,0,21,161,20,148,24,149,17,4,149,0,148,37,145,17,140,40,30,10,11,31,27, + 7,0,34,27,25,14,45,7,25,20,34,40,16,220,196,236,252,236,228,17,18,57,57,57,57,49,0,16,228,244,228,236,16,238,246,238,16,198,17,23, + 57,48,75,83,88,7,16,14,237,17,23,57,7,16,14,237,17,23,57,89,34,178,15,41,1,1,93,182,31,41,47,41,79,41,3,93,1,21,46,1, + 35,34,6,21,20,22,31,1,30,1,21,20,4,33,34,38,39,53,30,1,51,50,54,53,52,38,47,1,46,1,53,52,36,51,50,22,4,72,115,204, + 95,165,179,119,166,122,226,215,254,221,254,231,106,239,128,123,236,114,173,188,135,154,123,226,202,1,23,245,105,218,5,164,197,55,54,128,118,99,101,31, + 25,43,217,182,217,224,48,47,208,69,70,136,126,110,124,31,24,45,192,171,198,228,38,0,0,1,255,250,0,0,4,233,5,213,0,7,0,74,64,14, + 6,2,149,0,129,4,1,64,3,28,0,64,5,8,16,212,228,252,228,49,0,47,244,236,50,48,1,75,176,10,84,88,189,0,8,0,64,0,1,0, + 8,0,8,255,192,56,17,55,56,89,64,19,0,9,31,0,16,1,16,2,31,7,16,9,64,9,112,9,159,9,9,93,3,33,21,33,17,35,17,33, + 6,4,239,253,238,203,253,238,5,213,170,250,213,5,43,0,0,1,0,178,255,227,5,41,5,213,0,17,0,64,64,22,8,2,17,11,0,5,149,14, + 140,9,0,129,18,8,28,10,56,1,28,0,65,18,16,252,75,176,16,84,88,185,0,0,255,192,56,89,236,252,236,49,0,16,228,50,244,236,17,57, + 57,57,57,48,1,182,31,19,143,19,159,19,3,93,19,51,17,20,22,51,50,54,53,17,51,17,16,0,33,32,0,17,178,203,174,195,194,174,203,254, + 223,254,230,254,229,254,223,5,213,252,117,240,211,211,240,3,139,252,92,254,220,254,214,1,42,1,36,0,0,1,0,16,0,0,5,104,5,213,0,6, + 0,183,64,39,4,17,5,6,5,3,17,2,3,6,6,5,3,17,4,3,0,1,0,2,17,1,1,0,66,3,4,1,175,0,6,4,3,2,0,5, + 5,1,7,16,212,196,23,57,49,0,47,236,50,57,48,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,89,34,178,80,8,1, + 1,93,64,98,0,3,42,3,71,4,71,5,90,3,125,3,131,3,7,6,0,7,2,8,4,9,6,21,1,20,2,26,4,26,5,42,0,38,1,38, + 2,41,4,41,5,37,6,32,8,56,0,51,1,51,2,60,4,60,5,55,6,72,0,69,1,69,2,73,4,73,5,71,6,89,0,86,6,102,2,105, + 4,105,5,122,0,118,1,118,2,121,4,121,5,117,6,128,8,152,0,151,6,41,93,0,93,33,1,51,9,1,51,1,2,74,253,198,211,1,217,1, + 218,210,253,199,5,213,251,23,4,233,250,43,0,1,0,68,0,0,7,166,5,213,0,12,1,123,64,73,5,26,6,5,9,10,9,4,26,10,9,3, + 26,10,11,10,2,26,1,2,11,11,10,6,17,7,8,7,5,17,4,5,8,8,7,2,17,3,2,12,0,12,1,17,0,0,12,66,10,5,2,3, + 6,3,0,175,11,8,12,11,10,9,8,6,5,4,3,2,1,11,7,0,13,16,212,204,23,57,49,0,47,60,236,50,50,23,57,48,75,83,88,7, + 16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,7,16,8,237,7,16,5,237,7,5,237,7,16,8,237,89,34,178,0,14,1,1,93,64,242, + 6,2,6,5,2,10,0,10,0,10,18,10,40,5,36,10,32,10,62,2,62,5,52,10,48,10,76,2,77,5,66,10,64,10,89,2,106,2,107,5, + 103,10,96,10,123,2,127,2,124,5,127,5,128,10,150,2,149,5,29,7,0,9,2,8,3,0,4,6,5,0,5,0,6,1,7,4,8,0,8,7, + 9,0,9,4,10,10,12,0,14,26,3,21,4,21,8,25,12,16,14,32,4,33,5,32,6,32,7,32,8,35,9,36,10,37,11,32,14,32,14,60, + 2,58,3,53,4,51,5,48,8,54,9,57,11,63,12,48,14,70,0,70,1,74,2,64,4,69,5,64,5,66,6,66,7,66,8,64,8,64,9,68, + 10,77,12,64,14,64,14,88,2,86,8,89,12,80,14,102,2,103,3,97,4,98,5,96,6,96,7,96,8,100,9,100,10,100,11,119,0,118,1,123, + 2,120,3,119,4,116,5,121,6,121,7,119,8,112,8,120,12,127,12,127,14,134,2,135,3,136,4,137,5,133,9,138,11,143,14,151,4,159,14,175, + 14,91,93,0,93,19,51,9,1,51,9,1,51,1,35,9,1,35,68,204,1,58,1,57,227,1,58,1,57,205,254,137,254,254,197,254,194,254,5,213, + 251,18,4,238,251,18,4,238,250,43,5,16,250,240,0,0,0,1,0,61,0,0,5,59,5,213,0,11,0,102,64,6,13,4,6,0,10,12,16,212, + 196,220,196,196,49,180,128,0,127,10,2,93,0,64,5,3,0,175,9,6,47,60,236,50,48,75,176,66,80,88,64,20,7,17,6,6,5,9,17,10, + 11,10,3,17,4,5,4,1,17,0,11,0,5,7,16,236,7,16,236,7,16,236,7,16,236,64,20,11,10,3,7,0,8,9,4,7,0,5,9,4, + 6,1,2,10,3,6,1,15,15,15,15,89,19,51,9,1,51,9,1,35,9,1,35,1,129,217,1,115,1,117,217,254,32,2,0,217,254,92,254,89, + 218,2,21,5,213,253,213,2,43,253,51,252,248,2,123,253,133,3,29,0,0,1,255,252,0,0,4,231,5,213,0,8,0,148,64,40,3,17,4,5, + 4,2,17,1,2,5,5,4,2,17,3,2,8,0,8,1,17,0,0,8,66,2,3,0,175,6,2,7,4,64,5,28,0,64,7,9,16,212,228,252, + 228,18,57,49,0,47,236,50,57,48,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,89,34,178,0,10,1,1,93,64,60,5, + 2,20,2,53,2,48,2,48,5,48,8,70,2,64,2,64,5,64,8,81,2,81,5,81,8,101,2,132,2,147,2,16,22,1,26,3,31,10,38,1, + 41,3,55,1,56,3,64,10,103,1,104,3,120,3,112,10,159,10,13,93,0,93,3,51,9,1,51,1,17,35,17,4,217,1,158,1,155,217,253,240, + 203,5,213,253,154,2,102,252,242,253,57,2,199,0,0,0,0,1,0,92,0,0,5,31,5,213,0,9,0,144,64,27,3,17,7,8,7,8,17,2, + 3,2,66,8,149,0,129,3,149,5,8,3,0,1,66,4,0,6,10,16,220,75,176,9,84,75,176,10,84,91,88,185,0,6,255,192,56,89,196,212, + 228,17,57,57,49,0,47,236,244,236,48,75,83,88,7,16,5,237,7,16,5,237,89,34,1,64,64,5,2,10,7,24,7,41,2,38,7,56,7,72, + 2,71,7,72,8,9,5,3,11,8,0,11,22,3,26,8,16,11,47,11,53,3,57,8,63,11,71,3,74,8,79,11,85,3,89,8,102,3,105,8, + 111,11,119,3,120,8,127,11,159,11,22,93,0,93,19,33,21,1,33,21,33,53,1,33,115,4,149,252,80,3,199,251,61,3,176,252,103,5,213,154, + 251,111,170,154,4,145,0,0,0,1,0,176,254,242,2,88,6,20,0,7,0,59,64,15,4,169,6,178,2,169,0,177,8,5,1,3,67,0,8,16, + 220,75,176,12,84,88,185,0,0,0,64,56,89,75,176,18,84,75,176,19,84,91,88,185,0,0,255,192,56,89,252,204,50,49,0,16,252,236,244,236, + 48,19,33,21,35,17,51,21,33,176,1,168,240,240,254,88,6,20,143,249,252,143,0,0,0,1,0,0,255,66,2,178,5,213,0,3,0,45,64,20, + 2,26,1,1,0,0,26,3,3,2,66,1,159,0,129,4,2,0,1,3,47,196,57,57,49,0,16,244,236,48,75,83,88,7,16,5,237,7,16,5, + 237,89,34,19,1,35,1,170,2,8,170,253,248,5,213,249,109,6,147,0,0,1,0,199,254,242,2,111,6,20,0,7,0,48,64,16,3,169,1,178, + 5,169,0,177,8,0,67,4,6,2,4,8,16,252,75,176,15,84,75,176,16,84,91,88,185,0,2,0,64,56,89,60,220,236,49,0,16,252,236,244, + 236,48,1,17,33,53,51,17,35,53,2,111,254,88,239,239,6,20,248,222,143,6,4,143,0,1,0,217,3,168,5,219,5,213,0,6,0,24,64,10, + 3,4,1,0,129,7,3,1,5,7,16,220,204,57,49,0,16,244,204,50,57,48,9,1,35,9,1,35,1,3,188,2,31,201,254,72,254,72,201,2, + 31,5,213,253,211,1,139,254,117,2,45,0,0,1,255,236,254,29,4,20,254,172,0,3,0,15,181,0,169,1,0,2,4,16,196,196,49,0,212,236, + 48,1,21,33,53,4,20,251,216,254,172,143,143,0,0,0,0,1,0,170,4,240,2,137,6,102,0,3,0,49,64,9,1,180,0,179,4,3,68,1, + 4,16,220,236,49,0,16,244,236,48,0,75,176,9,84,75,176,14,84,91,88,189,0,4,255,192,0,1,0,4,0,4,0,64,56,17,55,56,89,9, + 1,35,1,1,111,1,26,153,254,186,6,102,254,138,1,118,0,2,0,123,255,227,4,45,4,123,0,10,0,37,0,188,64,39,25,31,11,23,9,14, + 0,169,23,6,185,14,17,32,134,31,186,28,185,35,184,17,140,23,12,0,23,3,24,13,9,8,11,31,3,8,20,69,38,16,252,236,204,212,236,50, + 50,17,57,57,49,0,47,196,228,244,252,244,236,16,198,238,16,238,17,57,17,57,18,57,48,64,110,48,29,48,30,48,31,48,32,48,33,48,34,63, + 39,64,29,64,30,64,31,64,32,64,33,64,34,80,29,80,30,80,31,80,32,80,33,80,34,80,39,112,39,133,29,135,30,135,31,135,32,135,33,133, + 34,144,39,160,39,240,39,30,48,30,48,31,48,32,48,33,64,30,64,31,64,32,64,33,80,30,80,31,80,32,80,33,96,30,96,31,96,32,96,33, + 112,30,112,31,112,32,112,33,128,30,128,31,128,32,128,33,24,93,1,93,1,34,6,21,20,22,51,50,54,61,1,55,17,35,53,14,1,35,34,38, + 53,52,54,51,33,53,52,38,35,34,6,7,53,62,1,51,50,22,2,190,223,172,129,111,153,185,184,184,63,188,136,172,203,253,251,1,2,167,151,96, + 182,84,101,190,90,243,240,2,51,102,123,98,115,217,180,41,76,253,129,170,102,97,193,162,189,192,18,127,139,46,46,170,39,39,252,0,0,2,0,186, + 255,227,4,164,6,20,0,11,0,28,0,56,64,25,3,185,12,15,9,185,24,21,140,15,184,27,151,25,0,18,18,71,24,12,6,8,26,70,29,16, + 252,236,50,50,244,236,49,0,47,236,228,244,196,236,16,198,238,48,182,96,30,128,30,160,30,3,1,93,1,52,38,35,34,6,21,20,22,51,50,54, + 1,62,1,51,50,0,17,16,2,35,34,38,39,21,35,17,51,3,229,167,146,146,167,167,146,146,167,253,142,58,177,123,204,0,255,255,204,123,177,58, + 185,185,2,47,203,231,231,203,203,231,231,2,82,100,97,254,188,254,248,254,248,254,188,97,100,168,6,20,0,1,0,113,255,227,3,231,4,123,0,25, + 0,63,64,27,0,134,1,136,4,14,134,13,136,10,185,17,4,185,23,184,17,140,26,7,18,13,0,72,20,69,26,16,252,228,50,236,49,0,16,228, + 244,236,16,254,244,238,16,245,238,48,64,11,15,27,16,27,128,27,144,27,160,27,5,1,93,1,21,46,1,35,34,6,21,20,22,51,50,54,55,21, + 14,1,35,34,0,17,16,0,33,50,22,3,231,78,157,80,179,198,198,179,80,157,78,77,165,93,253,254,214,1,45,1,6,85,162,4,53,172,43,43, + 227,205,205,227,43,43,170,36,36,1,62,1,14,1,18,1,58,35,0,0,0,2,0,113,255,227,4,90,6,20,0,16,0,28,0,56,64,25,26,185, + 0,14,20,185,5,8,140,14,184,1,151,3,23,4,0,8,2,71,17,18,11,69,29,16,252,236,244,236,50,50,49,0,47,236,228,244,196,236,16,196, + 238,48,182,96,30,128,30,160,30,3,1,93,1,17,51,17,35,53,14,1,35,34,2,17,16,0,51,50,22,1,20,22,51,50,54,53,52,38,35,34, + 6,3,162,184,184,58,177,124,203,255,0,255,203,124,177,253,199,167,146,146,168,168,146,146,167,3,182,2,94,249,236,168,100,97,1,68,1,8,1,8, + 1,68,97,254,21,203,231,231,203,203,231,231,0,2,0,113,255,227,4,127,4,123,0,20,0,27,0,112,64,36,0,21,1,9,134,8,136,5,21,169, + 1,5,185,12,1,187,24,185,18,184,12,140,28,27,21,2,8,21,8,0,75,2,18,15,69,28,16,252,236,244,236,196,17,18,57,49,0,16,228,244, + 236,228,16,238,16,238,16,244,238,17,18,57,48,64,41,63,29,112,29,160,29,208,29,240,29,5,63,0,63,1,63,2,63,21,63,27,5,44,7,47, + 8,47,9,44,10,111,0,111,1,111,2,111,21,111,27,9,93,113,1,93,1,21,33,30,1,51,50,54,55,21,14,1,35,32,0,17,16,0,51,50, + 0,7,46,1,35,34,6,7,4,127,252,178,12,205,183,106,199,98,99,208,107,254,244,254,199,1,41,252,226,1,7,184,2,165,136,154,185,14,2,94, + 90,190,199,52,52,174,42,44,1,56,1,10,1,19,1,67,254,221,196,151,180,174,158,0,0,1,0,47,0,0,2,248,6,20,0,19,0,89,64,28, + 5,16,1,12,8,169,6,1,135,0,151,14,6,188,10,2,19,7,0,7,9,5,8,13,15,11,76,20,16,252,75,176,10,84,88,185,0,11,0,64, + 56,89,75,176,14,84,88,185,0,11,255,192,56,89,60,196,252,60,196,196,18,57,57,49,0,47,228,50,252,236,16,238,50,18,57,57,48,1,182,64, + 21,80,21,160,21,3,93,1,21,35,34,6,29,1,33,21,33,17,35,17,35,53,51,53,52,54,51,2,248,176,99,77,1,47,254,209,185,176,176,174, + 189,6,20,153,80,104,99,143,252,47,3,209,143,78,187,171,0,2,0,113,254,86,4,90,4,123,0,11,0,40,0,74,64,35,25,12,29,9,18,134, + 19,22,185,15,3,185,38,35,184,39,188,9,185,15,189,26,29,38,25,0,8,12,71,6,18,18,32,69,41,16,252,196,236,244,236,50,50,49,0,47, + 196,228,236,228,244,196,236,16,254,213,238,17,18,57,57,48,182,96,42,128,42,160,42,3,1,93,1,52,38,35,34,6,21,20,22,51,50,54,23,16, + 2,33,34,38,39,53,30,1,51,50,54,61,1,14,1,35,34,2,17,16,18,51,50,22,23,53,51,3,162,165,149,148,165,165,148,149,165,184,254,254, + 250,97,172,81,81,158,82,181,180,57,178,124,206,252,252,206,124,178,57,184,2,61,200,220,220,200,199,220,220,235,254,226,254,233,29,30,179,44,42,189, + 191,91,99,98,1,58,1,3,1,4,1,58,98,99,170,0,0,1,0,186,0,0,4,100,6,20,0,19,0,52,64,25,3,9,0,3,14,1,6,135, + 14,17,184,12,151,10,1,2,8,0,78,13,9,8,11,70,20,16,252,236,50,244,236,49,0,47,60,236,244,196,236,17,18,23,57,48,178,96,21,1, + 1,93,1,17,35,17,52,38,35,34,6,21,17,35,17,51,17,62,1,51,50,22,4,100,184,124,124,149,172,185,185,66,179,117,193,198,2,164,253,92, + 2,158,159,158,190,164,253,135,6,20,253,158,101,100,239,0,0,2,0,193,0,0,1,121,6,20,0,3,0,7,0,43,64,14,6,190,4,177,0,188, + 2,5,1,8,4,0,70,8,16,252,60,236,50,49,0,47,228,252,236,48,64,11,16,9,64,9,80,9,96,9,112,9,5,1,93,19,51,17,35,17, + 51,21,35,193,184,184,184,184,4,96,251,160,6,20,233,0,0,2,255,219,254,86,1,121,6,20,0,11,0,15,0,68,64,28,11,2,7,0,14,190, + 12,7,135,5,189,0,188,12,177,16,8,16,5,6,79,13,1,8,12,0,70,16,16,252,60,236,50,228,57,18,57,49,0,16,236,228,244,236,16,238, + 17,18,57,57,48,64,11,16,17,64,17,80,17,96,17,112,17,5,1,93,19,51,17,20,6,43,1,53,51,50,54,53,17,51,21,35,193,184,163,181, + 70,49,105,76,184,184,4,96,251,140,214,192,156,97,153,6,40,233,0,0,0,1,0,186,0,0,4,156,6,20,0,10,0,188,64,41,8,17,5,6, + 5,7,17,6,6,5,3,17,4,5,4,2,17,5,5,4,66,8,5,2,3,3,188,0,151,9,6,5,1,4,6,8,1,8,0,70,11,16,252,236, + 50,212,196,17,57,49,0,47,60,236,228,23,57,48,75,83,88,7,16,4,237,7,16,5,237,7,16,5,237,7,16,4,237,89,34,178,16,12,1,1, + 93,64,95,4,2,10,8,22,2,39,2,41,5,43,8,86,2,102,2,103,8,115,2,119,5,130,2,137,5,142,8,147,2,150,5,151,8,163,2,18, + 9,5,9,6,2,11,3,10,7,40,3,39,4,40,5,43,6,43,7,64,12,104,3,96,12,137,3,133,4,137,5,141,6,143,7,154,3,151,7,170, + 3,167,5,182,7,197,7,214,7,247,3,240,3,247,4,240,4,26,93,113,0,93,19,51,17,1,51,9,1,35,1,17,35,186,185,2,37,235,253,174, + 2,107,240,253,199,185,6,20,252,105,1,227,253,244,253,172,2,35,253,221,0,1,0,193,0,0,1,121,6,20,0,3,0,34,183,0,151,2,1,8, + 0,70,4,16,252,236,49,0,47,236,48,64,13,16,5,64,5,80,5,96,5,112,5,240,5,6,1,93,19,51,17,35,193,184,184,6,20,249,236,0, + 0,1,0,186,0,0,7,29,4,123,0,34,0,90,64,38,6,18,9,24,15,0,6,29,7,21,12,135,29,32,3,184,27,188,25,16,7,0,17,15, + 8,8,6,80,17,8,15,80,28,24,8,26,70,35,16,252,236,50,252,252,252,236,17,18,57,49,0,47,60,60,228,244,60,196,236,50,17,18,23,57, + 48,64,19,48,36,80,36,112,36,144,36,160,36,160,36,191,36,223,36,255,36,9,1,93,1,62,1,51,50,22,21,17,35,17,52,38,35,34,6,21, + 17,35,17,52,38,35,34,6,21,17,35,17,51,21,62,1,51,50,22,4,41,69,192,130,175,190,185,114,117,143,166,185,114,119,141,166,185,185,63,176, + 121,122,171,3,137,124,118,245,226,253,92,2,158,161,156,190,164,253,135,2,158,162,155,191,163,253,135,4,96,174,103,98,124,0,0,0,0,1,0,186, + 0,0,4,100,4,123,0,19,0,54,64,25,3,9,0,3,14,1,6,135,14,17,184,12,188,10,1,2,8,0,78,13,9,8,11,70,20,16,252,236, + 50,244,236,49,0,47,60,228,244,196,236,17,18,23,57,48,180,96,21,207,21,2,1,93,1,17,35,17,52,38,35,34,6,21,17,35,17,51,21,62, + 1,51,50,22,4,100,184,124,124,149,172,185,185,66,179,117,193,198,2,164,253,92,2,158,159,158,190,164,253,135,4,96,174,101,100,239,0,2,0,113, + 255,227,4,117,4,123,0,11,0,23,0,74,64,19,6,185,18,0,185,12,184,18,140,24,9,18,15,81,3,18,21,69,24,16,252,236,244,236,49,0, + 16,228,244,236,16,238,48,64,35,63,25,123,0,123,6,127,7,127,8,127,9,127,10,127,11,123,12,127,13,127,14,127,15,127,16,127,17,123,18,160, + 25,240,25,17,1,93,1,34,6,21,20,22,51,50,54,53,52,38,39,50,0,17,16,0,35,34,0,17,16,0,2,115,148,172,171,149,147,172,172,147, + 240,1,18,254,238,240,241,254,239,1,17,3,223,231,201,201,231,232,200,199,233,156,254,200,254,236,254,237,254,199,1,57,1,19,1,20,1,56,0,0, + 0,2,0,186,254,86,4,164,4,123,0,16,0,28,0,62,64,27,26,185,0,14,20,185,5,8,184,14,140,1,189,3,188,29,17,18,11,71,23,4, + 0,8,2,70,29,16,252,236,50,50,244,236,49,0,16,228,228,228,244,196,236,16,196,238,48,64,9,96,30,128,30,160,30,224,30,4,1,93,37,17, + 35,17,51,21,62,1,51,50,0,17,16,2,35,34,38,1,52,38,35,34,6,21,20,22,51,50,54,1,115,185,185,58,177,123,204,0,255,255,204,123, + 177,2,56,167,146,146,167,167,146,146,167,168,253,174,6,10,170,100,97,254,188,254,248,254,248,254,188,97,1,235,203,231,231,203,203,231,231,0,0,0, + 0,2,0,113,254,86,4,90,4,123,0,11,0,28,0,62,64,27,3,185,12,15,9,185,24,21,184,15,140,27,189,25,188,29,24,12,6,8,26,71, + 0,18,18,69,29,16,252,236,244,236,50,50,49,0,16,228,228,228,244,196,236,16,198,238,48,64,9,96,30,128,30,160,30,224,30,4,1,93,1,20, + 22,51,50,54,53,52,38,35,34,6,1,14,1,35,34,2,17,16,0,51,50,22,23,53,51,17,35,1,47,167,146,146,168,168,146,146,167,2,115,58, + 177,124,203,255,0,255,203,124,177,58,184,184,2,47,203,231,231,203,203,231,231,253,174,100,97,1,68,1,8,1,8,1,68,97,100,170,249,246,0,0, + 0,1,0,186,0,0,3,74,4,123,0,17,0,48,64,20,6,11,7,0,17,11,3,135,14,184,9,188,7,10,6,8,0,8,70,18,16,252,196,236, + 50,49,0,47,228,244,236,196,212,204,17,18,57,48,180,80,19,159,19,2,1,93,1,46,1,35,34,6,21,17,35,17,51,21,62,1,51,50,22,23, + 3,74,31,73,44,156,167,185,185,58,186,133,19,46,28,3,180,18,17,203,190,253,178,4,96,174,102,99,5,5,0,0,0,1,0,111,255,227,3,199, + 4,123,0,39,0,231,64,60,13,12,2,14,11,83,31,30,8,9,2,7,10,83,31,31,30,66,10,11,30,31,4,21,0,134,1,137,4,20,134,21, + 137,24,185,17,4,185,37,184,17,140,40,30,10,11,31,27,7,0,82,27,8,14,7,8,20,34,69,40,16,252,196,236,212,236,228,17,18,57,57,57, + 57,49,0,16,228,244,236,16,254,245,238,16,245,238,18,23,57,48,75,83,88,7,16,14,237,17,23,57,7,14,237,17,23,57,89,34,178,0,39,1, + 1,93,64,109,28,10,28,11,28,12,46,9,44,10,44,11,44,12,59,9,59,10,59,11,59,12,11,32,0,32,1,36,2,40,10,40,11,42,19,47, + 20,47,21,42,22,40,30,40,31,41,32,41,33,36,39,134,10,134,11,134,12,134,13,18,0,0,0,1,2,2,6,10,6,11,3,12,3,13,3,14, + 3,15,3,16,3,25,3,26,3,27,3,28,4,29,9,39,47,41,63,41,95,41,127,41,128,41,144,41,160,41,240,41,24,93,0,93,113,1,21,46, + 1,35,34,6,21,20,22,31,1,30,1,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,38,47,1,46,1,53,52,54,51,50,22,3,139,78, + 168,90,137,137,98,148,63,196,165,247,216,90,195,108,102,198,97,130,140,101,171,64,171,152,224,206,102,180,4,63,174,40,40,84,84,64,73,33,14,42, + 153,137,156,182,35,35,190,53,53,89,81,75,80,37,15,36,149,130,158,172,30,0,0,0,0,1,0,55,0,0,2,242,5,158,0,19,0,56,64,25, + 14,5,8,15,3,169,0,17,1,188,8,135,10,11,8,9,2,4,0,8,16,18,14,70,20,16,252,60,196,252,60,196,50,57,57,49,0,47,236,244, + 60,196,236,50,17,57,57,48,178,175,21,1,1,93,1,17,33,21,33,17,20,22,59,1,21,35,34,38,53,17,35,53,51,17,1,119,1,123,254,133, + 75,115,189,189,213,162,135,135,5,158,254,194,143,253,160,137,78,154,159,210,2,96,143,1,62,0,0,0,0,2,0,174,255,227,4,88,4,123,0,19, + 0,20,0,59,64,28,3,9,0,3,14,1,6,135,14,17,140,10,1,188,20,184,12,13,9,8,20,11,78,2,8,0,70,21,16,252,236,244,57,236, + 50,49,0,47,228,228,50,244,196,236,17,18,23,57,48,180,111,21,192,21,2,1,93,19,17,51,17,20,22,51,50,54,53,17,51,17,35,53,14,1, + 35,34,38,1,174,184,124,124,149,173,184,184,67,177,117,193,200,1,207,1,186,2,166,253,97,159,159,190,164,2,123,251,160,172,102,99,240,3,168,0, + 0,1,0,61,0,0,4,127,4,96,0,6,0,251,64,39,3,17,4,5,4,2,17,1,2,5,5,4,2,17,3,2,6,0,6,1,17,0,0,6, + 66,2,3,0,191,5,6,5,3,2,1,5,4,0,7,16,212,75,176,10,84,88,185,0,0,0,64,56,89,75,176,20,84,75,176,21,84,91,88,185, + 0,0,255,192,56,89,196,23,57,49,0,47,236,50,57,48,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,89,34,1,64,142, + 72,2,106,2,123,2,127,2,134,2,128,2,145,2,164,2,8,6,0,6,1,9,3,9,4,21,0,21,1,26,3,26,4,38,0,38,1,41,3,41, + 4,32,8,53,0,53,1,58,3,58,4,48,8,70,0,70,1,73,3,73,4,70,5,72,6,64,8,86,0,86,1,89,3,89,4,80,8,102,0,102, + 1,105,3,105,4,103,5,104,6,96,8,117,0,116,1,123,3,123,4,117,5,122,6,133,0,133,1,137,3,137,4,137,5,134,6,150,0,150,1,151, + 2,154,3,152,4,152,5,151,6,168,5,167,6,176,8,192,8,223,8,255,8,62,93,0,93,19,51,9,1,51,1,35,61,195,1,94,1,94,195,254, + 92,250,4,96,252,84,3,172,251,160,0,0,0,1,0,86,0,0,6,53,4,96,0,12,1,235,64,73,5,85,6,5,9,10,9,4,85,10,9,3, + 85,10,11,10,2,85,1,2,11,11,10,6,17,7,8,7,5,17,4,5,8,8,7,2,17,3,2,12,0,12,1,17,0,0,12,66,10,5,2,3, + 6,3,0,191,11,8,12,11,10,9,8,6,5,4,3,2,1,11,7,0,13,16,212,75,176,10,84,75,176,17,84,91,75,176,18,84,91,75,176,19, + 84,91,75,176,11,84,91,88,185,0,0,0,64,56,89,1,75,176,12,84,75,176,13,84,91,75,176,16,84,91,88,185,0,0,255,192,56,89,204,23, + 57,49,0,47,60,236,50,50,23,57,48,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,7,16,8,237,7,16,5,237,7,5, + 237,7,16,8,237,89,34,1,64,255,5,2,22,2,22,5,34,10,53,10,73,2,73,5,70,10,64,10,91,2,91,5,85,10,80,10,110,2,110,5, + 102,10,121,2,127,2,121,5,127,5,135,2,153,2,152,5,148,10,188,2,188,5,206,2,199,3,207,5,29,5,2,9,3,6,4,11,5,10,8,11, + 9,4,11,5,12,21,2,25,3,22,4,26,5,27,8,27,9,20,11,21,12,37,0,37,1,35,2,39,3,33,4,37,5,34,6,34,7,37,8,39, + 9,36,10,33,11,35,12,57,3,54,4,54,8,57,12,48,14,70,2,72,3,70,4,64,4,66,5,64,6,64,7,64,8,68,9,68,10,68,11,64, + 14,64,14,86,0,86,1,86,2,80,4,81,5,82,6,82,7,80,8,83,9,84,10,85,11,99,0,100,1,101,2,106,3,101,4,106,5,106,6,106, + 7,110,9,97,11,103,12,111,14,117,0,117,1,121,2,125,3,120,4,125,5,122,6,127,6,122,7,127,7,120,8,121,9,127,9,123,10,118,11,125, + 12,135,2,136,5,143,14,151,0,151,1,148,2,147,3,156,4,155,5,152,6,152,7,153,8,64,47,150,12,159,14,166,0,166,1,164,2,164,3,171, + 4,171,5,169,6,169,7,171,8,164,12,175,14,181,2,177,3,189,4,187,5,184,9,191,14,196,2,195,3,204,4,202,5,121,93,0,93,19,51,27, + 1,51,27,1,51,1,35,11,1,35,86,184,230,229,217,230,229,184,254,219,217,241,242,217,4,96,252,150,3,106,252,150,3,106,251,160,3,150,252,106, + 0,1,0,59,0,0,4,121,4,96,0,11,1,67,64,70,5,17,6,7,6,4,17,3,4,7,7,6,4,17,5,4,1,2,1,3,17,2,2,1, + 11,17,0,1,0,10,17,9,10,1,1,0,10,17,11,10,7,8,7,9,17,8,8,7,66,10,7,4,1,4,8,0,191,5,2,10,7,4,1,4, + 8,0,2,8,6,12,16,212,75,176,10,84,75,176,15,84,91,75,176,16,84,91,75,176,17,84,91,88,185,0,6,0,64,56,89,75,176,20,84,88, + 185,0,6,255,192,56,89,196,212,196,17,23,57,49,0,47,60,236,50,23,57,48,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5, + 237,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,89,34,1,64,152,10,4,4,10,26,4,21,10,38,10,61,4,49,10,85,4,87,7, + 88,10,102,10,118,1,122,4,118,7,116,10,141,4,130,10,153,4,159,4,151,7,146,10,144,10,166,1,169,4,175,4,165,7,163,10,160,10,28,10, + 3,4,5,5,9,10,11,26,3,21,5,21,9,26,11,41,3,38,5,37,9,42,11,32,13,58,1,57,3,55,5,52,7,54,9,57,11,48,13,73, + 3,70,5,69,9,74,11,64,13,89,0,86,1,89,2,89,3,87,5,86,6,89,7,86,8,86,9,89,11,80,13,111,13,120,1,127,13,155,1,148, + 7,171,1,164,7,176,13,207,13,223,13,255,13,47,93,0,93,9,2,35,9,1,35,9,1,51,9,1,4,100,254,107,1,170,217,254,186,254,186,217, + 1,179,254,114,217,1,41,1,41,4,96,253,223,253,193,1,184,254,72,2,74,2,22,254,113,1,143,0,0,1,0,61,254,86,4,127,4,96,0,15, + 1,139,64,67,7,8,2,9,17,0,15,10,17,11,10,0,0,15,14,17,15,0,15,13,17,12,13,0,0,15,13,17,14,13,10,11,10,12,17,11, + 11,10,66,13,11,9,16,0,11,5,135,3,189,14,11,188,16,14,13,12,10,9,6,3,0,8,15,4,15,11,16,16,212,75,176,10,84,75,176,8, + 84,91,88,185,0,11,0,64,56,89,75,176,20,84,88,185,0,11,255,192,56,89,196,196,17,23,57,49,0,16,228,50,244,236,17,57,17,57,18,57, + 48,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,7,16,8,237,7,5,237,23,50,89,34,1,64,240,6,0,5,8,6,9, + 3,13,22,10,23,13,16,13,35,13,53,13,73,10,79,10,78,13,90,9,90,10,106,10,135,13,128,13,147,13,18,10,0,10,9,6,11,5,12,11, + 14,11,15,23,1,21,2,16,4,16,5,23,10,20,11,20,12,26,14,26,15,39,0,36,1,36,2,32,4,32,5,41,8,40,9,37,10,36,11,36, + 12,39,13,42,14,42,15,32,17,55,0,53,1,53,2,48,4,48,5,56,10,54,11,54,12,56,13,57,14,57,15,48,17,65,0,64,1,64,2,64, + 3,64,4,64,5,64,6,64,7,64,8,66,9,69,10,71,13,73,14,73,15,64,17,84,0,81,1,81,2,85,3,80,4,80,5,86,6,85,7,86, + 8,87,9,87,10,85,11,85,12,89,14,89,15,80,17,102,1,102,2,104,10,105,14,105,15,96,17,123,8,120,14,120,15,137,0,138,9,133,11,133, + 12,137,13,137,14,137,15,153,9,149,11,149,12,154,14,154,15,164,11,164,12,171,14,171,15,176,17,207,17,223,17,255,17,101,93,0,93,5,14,1, + 43,1,53,51,50,54,63,1,1,51,9,1,51,2,147,78,148,124,147,108,76,84,51,33,254,59,195,1,94,1,94,195,104,200,122,154,72,134,84,4, + 78,252,148,3,108,0,0,0,0,1,0,88,0,0,3,219,4,96,0,9,0,157,64,26,8,17,2,3,2,3,17,7,8,7,66,8,169,0,188,3, + 169,5,8,3,1,0,4,1,6,10,16,220,75,176,11,84,75,176,12,84,91,88,185,0,6,255,192,56,89,75,176,19,84,88,185,0,6,0,64,56, + 89,196,50,196,17,57,57,49,0,47,236,244,236,48,75,83,88,7,16,5,237,7,16,5,237,89,34,1,64,66,5,2,22,2,38,2,71,2,73,7, + 5,11,8,15,11,24,3,27,8,43,8,32,11,54,3,57,8,48,11,64,1,64,2,69,3,64,4,64,5,67,8,87,3,89,8,95,11,96,1,96, + 2,102,3,96,4,96,5,98,8,127,11,128,11,175,11,27,93,0,93,19,33,21,1,33,21,33,53,1,33,113,3,106,253,76,2,180,252,125,2,180, + 253,101,4,96,168,252,219,147,168,3,37,0,0,1,1,0,254,178,4,23,6,20,0,36,0,119,64,52,25,15,21,11,6,37,9,26,16,21,29,11, + 5,32,33,3,0,11,169,9,0,169,1,192,9,21,169,19,177,37,12,9,10,5,36,22,25,0,29,10,5,19,2,20,0,32,25,67,10,15,5,37, + 16,212,75,176,12,84,88,185,0,5,0,64,56,89,60,196,252,60,196,50,57,57,17,18,57,17,18,57,57,17,18,57,57,49,0,16,252,236,196,244, + 236,16,238,18,23,57,18,57,17,57,57,17,18,57,17,18,57,57,48,1,178,0,38,1,93,5,21,35,34,38,61,1,52,38,43,1,53,51,50,54, + 61,1,52,54,59,1,21,35,34,6,29,1,20,6,7,30,1,29,1,20,22,51,4,23,62,249,169,108,142,61,61,143,107,169,249,62,68,141,86,91, + 110,111,90,86,141,190,144,148,221,239,151,116,143,115,149,240,221,147,143,88,141,248,157,142,25,27,142,156,248,141,88,0,0,1,1,4,254,29,1,174, + 6,29,0,3,0,18,183,1,0,177,4,0,5,2,4,16,212,236,49,0,16,252,204,48,1,17,35,17,1,174,170,6,29,248,0,8,0,0,0,0, + 0,1,1,0,254,178,4,23,6,20,0,36,0,135,64,54,31,37,27,22,12,15,8,27,11,21,25,15,4,5,32,3,0,25,169,27,0,169,35,192, + 27,15,169,17,177,37,28,25,26,21,15,1,4,0,8,26,21,35,18,4,0,26,31,21,67,16,0,11,4,37,16,212,75,176,10,84,88,185,0,4, + 255,192,56,89,75,176,14,84,88,185,0,4,0,64,56,89,60,196,50,252,60,196,17,18,57,57,17,18,57,17,18,57,57,17,18,57,57,49,0,16, + 252,236,196,244,236,16,238,18,23,57,17,18,57,57,17,57,17,57,57,17,18,57,48,1,178,0,38,1,93,5,51,50,54,61,1,52,54,55,46,1, + 61,1,52,38,43,1,53,51,50,22,29,1,20,22,59,1,21,35,34,6,29,1,20,6,43,1,1,0,70,140,85,90,111,111,90,85,140,70,63,249, + 167,108,142,62,62,142,108,167,249,63,190,86,143,248,156,142,27,25,142,157,248,142,87,143,147,221,240,149,115,143,116,151,239,221,148,0,0,1,0,217, + 1,211,5,219,3,49,0,29,0,35,64,16,1,16,27,12,0,19,4,156,27,19,156,12,30,0,15,30,16,212,196,49,0,16,212,252,212,236,16,192, + 17,18,57,57,48,1,21,14,1,35,34,39,38,39,38,39,38,35,34,6,7,53,62,1,51,50,23,22,23,22,23,22,51,50,54,5,219,105,179,97, + 110,146,11,5,7,15,155,94,88,172,98,105,179,97,110,147,10,5,8,14,155,94,86,169,3,49,178,79,68,59,4,2,3,5,62,77,83,178,79,69, + 60,4,2,3,5,62,76,0,0,2,1,53,0,0,2,0,5,213,0,3,0,9,0,98,64,15,7,0,131,2,129,4,8,7,4,0,3,5,1,0, + 10,16,252,60,236,50,57,57,49,0,47,244,252,204,48,1,75,176,11,84,88,189,0,10,0,64,0,1,0,10,0,10,255,192,56,17,55,56,89,1, + 75,176,15,84,75,176,16,84,91,75,176,19,84,91,88,189,0,10,255,192,0,1,0,10,0,10,0,64,56,17,55,56,89,182,0,11,32,11,80,11, + 3,93,1,35,53,51,17,35,17,19,51,19,2,0,203,203,203,21,162,20,4,215,254,250,43,2,143,1,101,254,155,0,0,2,0,172,254,199,4,35, + 5,152,0,6,0,33,0,81,64,43,19,22,20,0,15,12,1,11,7,134,8,136,11,16,134,15,136,12,185,20,22,11,185,29,31,28,184,22,140,34, + 28,21,0,9,30,19,11,15,7,4,18,25,34,16,220,236,212,60,212,60,60,236,50,50,49,0,16,228,244,60,196,236,16,196,254,244,238,16,245,238, + 18,57,17,18,57,17,18,57,48,37,17,14,1,21,20,22,1,21,46,1,39,3,62,1,55,21,14,1,7,17,35,17,38,0,17,16,0,55,17,51, + 19,30,1,2,166,147,164,164,2,16,74,136,68,1,70,137,72,65,137,77,102,241,254,247,1,9,241,102,1,73,137,131,3,88,18,226,184,185,226,3, + 161,172,41,42,3,252,160,5,42,39,170,30,35,7,254,228,1,32,20,1,51,1,1,1,2,1,50,22,1,31,254,225,4,33,0,0,0,1,0,129, + 0,0,4,98,5,240,0,27,0,96,64,33,7,22,8,1,134,0,18,10,169,20,8,12,4,160,0,148,25,145,16,12,160,14,0,13,9,11,7,28, + 19,15,21,17,28,16,220,60,204,204,252,60,196,212,196,49,0,47,236,50,244,228,236,16,212,60,238,50,16,238,17,57,57,48,1,75,176,12,84,88, + 189,0,28,255,192,0,1,0,28,0,28,0,64,56,17,55,56,89,180,54,1,54,2,2,0,93,1,21,46,1,35,34,6,29,1,33,21,33,17,33, + 21,33,53,51,17,35,53,51,53,16,54,51,50,22,4,78,76,136,61,148,116,1,135,254,121,2,45,252,31,236,199,199,214,232,61,151,5,180,182,41, + 41,155,212,215,143,254,47,170,170,1,209,143,238,1,5,243,31,0,0,0,0,2,0,94,0,82,4,188,4,178,0,35,0,47,0,131,64,73,3,9, + 27,21,4,45,30,0,39,28,2,33,29,12,18,45,20,11,10,3,19,15,1,29,45,185,19,235,15,236,39,185,29,235,33,48,30,12,0,18,4,42, + 36,20,48,28,21,27,42,29,19,28,24,9,3,36,11,10,1,3,2,36,40,2,115,6,116,42,40,28,115,24,48,16,220,228,236,244,228,236,18,23, + 57,18,57,57,17,18,57,57,18,57,57,17,18,57,17,18,23,57,49,0,16,212,228,236,244,228,236,16,192,17,18,23,57,18,57,57,17,18,57,57, + 17,57,57,18,23,57,48,1,55,23,7,30,1,21,20,6,7,23,7,39,14,1,35,34,38,39,7,39,55,46,1,53,52,54,55,39,55,23,62,1, + 51,50,22,19,52,38,35,34,6,21,20,22,51,50,54,3,123,207,114,206,37,36,38,40,209,114,207,59,116,61,58,120,61,207,113,207,37,37,38,38, + 207,115,207,55,116,64,60,117,92,155,114,112,158,157,113,113,156,3,225,209,115,206,59,119,62,63,115,57,207,113,207,40,38,37,37,207,115,206,62,118, + 58,64,116,56,206,115,207,39,37,36,254,124,112,154,154,112,114,156,157,0,0,1,0,82,0,0,4,195,5,213,0,24,0,198,64,70,16,2,17,22, + 17,15,2,14,15,22,22,17,15,2,16,15,8,13,8,14,2,13,13,8,66,15,11,9,4,0,211,23,6,18,11,211,20,9,16,13,129,2,12,9, + 14,3,5,22,15,3,21,18,16,3,0,17,102,19,0,101,1,28,13,102,10,5,101,7,3,25,16,212,60,236,50,236,252,236,50,236,18,23,57,18, + 57,57,17,23,57,49,0,47,228,50,212,60,236,50,212,60,236,50,17,18,57,48,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5, + 237,89,34,1,75,176,12,84,88,189,0,25,255,192,0,1,0,25,0,25,0,64,56,17,55,56,89,64,40,134,15,144,15,166,15,160,15,181,15,5, + 39,12,39,13,39,14,41,16,40,17,40,18,55,14,57,16,135,12,136,18,166,13,165,14,170,16,169,17,14,93,0,93,1,33,17,35,17,33,53,33, + 53,39,33,53,33,1,51,9,1,51,1,33,21,33,7,21,33,4,141,254,99,201,254,96,1,160,84,254,180,1,8,254,195,190,1,123,1,121,191,254, + 194,1,8,254,181,84,1,159,1,199,254,57,1,199,123,51,155,123,2,74,253,68,2,188,253,182,123,155,51,0,0,0,0,2,1,4,254,162,1,174, + 5,152,0,3,0,7,0,28,64,13,1,245,0,4,245,5,8,4,0,5,6,2,8,16,220,60,236,50,49,0,16,212,236,212,236,48,1,17,35,17, + 19,17,35,17,1,174,170,170,170,1,152,253,10,2,246,4,0,253,10,2,246,0,0,0,0,2,0,92,255,61,3,162,5,240,0,11,0,62,0,145, + 64,60,47,48,42,6,0,23,29,48,54,4,13,39,138,38,13,138,12,42,198,38,197,35,16,198,12,197,60,145,35,63,47,6,0,23,48,4,19,29, + 45,9,54,3,19,87,57,45,87,32,9,87,12,34,26,57,38,34,3,87,51,63,16,220,236,228,196,212,228,236,212,236,16,238,17,57,17,18,57,17, + 23,57,57,49,0,16,196,244,228,236,16,230,238,16,238,16,238,17,23,57,57,57,17,18,57,48,1,75,176,10,84,75,176,11,84,91,75,176,12,84, + 91,75,176,14,84,91,88,189,0,63,0,64,0,1,0,63,0,63,255,192,56,17,55,56,89,1,14,1,21,20,22,23,62,1,53,52,38,19,21,46, + 1,35,34,6,21,20,23,22,23,30,1,21,20,6,7,30,1,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,47,1,46,1,53,52,54,55, + 46,1,53,52,54,51,50,22,1,123,63,62,139,250,63,62,143,204,83,143,56,97,108,206,26,14,211,131,92,93,62,57,204,173,73,154,88,87,148,58, + 102,113,221,25,214,128,93,91,59,59,200,166,73,153,3,168,46,90,46,76,133,135,45,91,46,75,136,2,147,164,39,39,80,71,90,115,15,8,119,154, + 101,90,140,53,52,109,64,142,168,29,29,164,39,39,84,76,102,123,14,120,153,102,91,143,49,44,112,69,130,159,29,0,0,2,0,215,5,70,3,41, + 6,16,0,3,0,7,0,146,64,14,6,2,206,4,0,205,8,1,100,0,5,100,4,8,16,220,252,212,236,49,0,16,252,60,236,50,48,0,75,176, + 10,84,75,176,13,84,91,88,189,0,8,0,64,0,1,0,8,0,8,255,192,56,17,55,56,89,1,75,176,12,84,75,176,13,84,91,75,176,14,84, + 91,75,176,23,84,91,88,189,0,8,255,192,0,1,0,8,0,8,0,64,56,17,55,56,89,1,75,176,15,84,75,176,25,84,91,88,189,0,8,0, + 64,0,1,0,8,0,8,255,192,56,17,55,56,89,64,17,96,1,96,2,96,5,96,6,112,1,112,2,112,5,112,6,8,93,1,51,21,35,37,51, + 21,35,2,94,203,203,254,121,203,203,6,16,202,202,202,0,0,3,1,27,0,0,6,229,5,205,0,23,0,47,0,73,0,67,64,38,61,203,62,58, + 204,65,202,36,49,203,48,52,204,71,202,24,201,0,200,36,201,12,55,97,68,61,48,94,42,9,6,68,94,30,9,6,18,74,16,220,204,252,236,16, + 254,237,50,16,238,49,0,47,238,246,254,253,238,214,238,16,253,238,214,238,48,1,50,4,23,22,18,21,20,2,7,6,4,35,34,36,39,38,2,53, + 52,18,55,54,36,23,34,6,7,14,1,21,20,22,23,30,1,51,50,54,55,62,1,53,52,38,39,46,1,23,21,46,1,35,34,6,21,20,22,51, + 50,54,55,21,14,1,35,34,38,53,52,54,51,50,22,4,0,152,1,7,109,109,108,108,109,109,254,249,152,152,254,249,109,109,108,108,109,109,1,7, + 152,131,226,94,94,96,96,94,94,226,131,132,227,94,93,93,94,92,94,227,167,66,130,66,149,167,171,155,64,122,66,67,137,70,216,251,251,216,73,136, + 5,205,110,109,109,254,250,154,152,254,251,109,109,110,110,109,109,1,5,152,154,1,6,109,109,110,103,94,94,94,229,130,129,227,94,94,95,95,94,93, + 226,131,133,227,93,94,94,245,129,33,32,175,157,159,174,31,34,127,29,28,244,208,209,242,28,0,0,0,0,3,0,115,1,213,3,59,5,240,0,3, + 0,30,0,41,0,95,64,51,40,7,37,4,31,18,24,16,2,227,0,31,221,16,0,225,37,221,5,10,25,223,24,222,21,221,10,224,28,145,42,0, + 24,13,31,16,34,6,2,1,40,17,6,107,4,108,24,34,107,13,42,16,220,236,204,252,236,50,50,192,192,17,18,57,57,17,18,57,49,0,16,244, + 228,252,244,236,16,196,238,237,214,238,16,238,17,18,57,18,57,17,57,57,48,19,33,21,33,1,17,35,53,14,1,35,34,38,53,52,54,59,1,53, + 52,38,35,34,6,7,53,62,1,51,50,22,5,34,6,21,20,22,51,50,54,61,1,139,2,176,253,80,2,174,149,44,144,93,128,152,191,188,182,117, + 117,62,136,68,73,145,69,183,179,254,236,161,126,98,82,104,130,2,80,123,2,184,254,64,112,63,68,135,113,135,138,4,91,91,34,34,127,28,28,176, + 240,67,79,64,77,144,114,29,0,2,0,158,0,141,4,37,4,35,0,6,0,13,0,134,64,73,3,232,4,5,4,2,232,1,2,5,5,4,2,232, + 3,2,6,0,6,1,232,0,0,6,10,232,11,12,11,9,232,8,9,12,12,11,9,232,10,9,13,7,13,8,232,7,7,13,66,9,2,11,4,231, + 7,0,166,14,9,12,5,2,7,3,0,111,5,10,7,111,12,110,14,16,252,252,60,212,236,50,17,57,17,18,57,49,0,16,244,60,236,50,57,57, + 48,75,83,88,7,16,4,237,7,16,8,237,7,16,8,237,7,16,4,237,7,16,4,237,7,16,8,237,7,16,8,237,7,16,4,237,89,34,1,21, + 9,1,21,1,53,19,21,9,1,21,1,53,4,37,254,211,1,45,254,43,35,254,211,1,45,254,43,4,35,191,254,244,254,244,191,1,162,82,1,162, + 191,254,244,254,244,191,1,162,82,0,0,0,0,1,0,217,1,31,5,219,3,94,0,5,0,23,64,10,4,156,2,0,6,3,23,1,0,6,16,220, + 212,236,49,0,16,212,196,236,48,19,33,17,35,17,33,217,5,2,168,251,166,3,94,253,193,1,149,0,0,1,0,100,1,223,2,127,2,131,0,3, + 0,17,182,0,156,2,4,1,0,4,16,220,204,49,0,16,212,236,48,19,33,21,33,100,2,27,253,229,2,131,164,0,0,4,1,27,0,0,6,229, + 5,205,0,23,0,47,0,56,0,76,0,96,64,54,69,66,67,63,50,201,72,48,201,57,74,67,202,12,57,202,0,201,24,200,12,201,36,72,69,51, + 48,4,49,66,60,63,57,54,73,49,96,75,54,96,67,60,94,18,9,30,75,94,6,9,30,95,42,77,16,220,228,252,236,16,254,253,196,238,16,238, + 50,17,57,57,18,57,18,23,57,49,0,47,238,246,254,237,16,237,50,16,238,214,238,57,18,57,57,48,1,34,6,7,14,1,21,20,22,23,30,1, + 51,50,54,55,62,1,53,52,38,39,46,1,39,50,4,23,22,18,21,20,2,7,6,4,35,34,36,39,38,2,53,52,18,55,54,36,19,35,17,51, + 50,54,53,52,38,39,50,22,21,20,6,7,30,1,31,1,35,39,46,1,43,1,17,35,17,4,0,131,226,94,94,96,96,94,94,226,131,132,227,94, + 93,93,94,92,94,227,132,152,1,7,109,109,108,108,109,109,254,249,152,152,254,249,109,109,108,108,109,109,1,7,125,123,123,110,87,88,102,176,174,105, + 96,24,67,46,137,172,129,59,73,54,66,155,5,102,94,94,94,229,130,129,227,94,94,95,95,94,93,226,131,133,227,93,94,94,103,110,109,109,254,250, + 154,152,254,251,109,109,110,110,109,109,1,5,152,154,1,6,109,109,110,254,98,254,236,62,75,76,63,103,119,121,86,112,17,8,77,73,223,209,96,51, + 254,156,3,68,0,1,0,213,5,98,3,43,5,246,0,3,0,47,183,2,239,0,238,4,1,0,4,16,212,204,49,0,16,252,236,48,0,75,176,9, + 84,75,176,14,84,91,88,189,0,4,255,192,0,1,0,4,0,4,0,64,56,17,55,56,89,19,33,21,33,213,2,86,253,170,5,246,148,0,0,0, + 0,2,0,195,3,117,3,61,5,240,0,11,0,26,0,32,64,17,6,195,21,196,0,195,12,145,27,9,90,18,91,3,90,24,27,16,220,236,252,236, + 49,0,16,244,236,252,236,48,1,34,6,21,20,22,51,50,54,53,52,38,39,50,22,23,30,1,21,20,6,35,34,38,53,52,54,2,0,80,110,110, + 80,80,110,111,79,64,118,43,46,46,185,134,135,180,184,5,111,111,80,79,109,109,79,79,112,129,49,46,45,114,66,132,183,180,135,134,186,0,0,0, + 0,2,0,217,0,0,5,219,5,4,0,11,0,15,0,46,64,24,5,208,7,3,156,0,208,9,1,12,156,14,13,2,21,4,0,23,12,8,21,10, + 6,16,16,212,60,236,50,252,60,236,50,49,0,47,236,212,60,236,252,60,236,48,1,17,33,21,33,17,35,17,33,53,33,17,1,33,21,33,3,174, + 2,45,253,211,168,253,211,2,45,253,211,5,2,250,254,5,4,254,125,170,254,125,1,131,170,1,131,251,166,170,0,0,0,1,0,94,2,156,2,180, + 5,240,0,24,0,74,64,36,0,125,6,4,0,23,125,6,6,4,66,4,2,0,14,221,15,0,221,2,247,11,221,15,18,145,25,0,14,8,126,1, + 21,14,3,25,16,220,196,212,196,236,17,57,49,0,16,244,196,236,252,236,16,238,17,18,57,48,75,83,88,7,16,5,237,23,50,7,5,237,89,34, + 1,33,21,33,53,54,55,0,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,1,6,1,12,1,168,253,170,34,63,1,88,104,85,52,122,72, + 77,133,57,145,174,254,181,56,3,14,114,110,31,56,1,49,94,66,81,35,35,123,28,28,132,108,139,254,228,48,0,0,0,1,0,98,2,141,2,205, + 5,240,0,40,0,72,64,39,0,21,19,10,221,9,31,221,32,19,221,21,13,221,9,248,6,247,28,221,32,248,35,145,41,22,19,0,20,25,126,38, + 16,126,3,20,31,9,41,16,220,196,196,212,236,212,236,17,57,57,57,49,0,16,244,228,236,252,228,236,212,236,16,238,16,238,17,18,57,48,1,30, + 1,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,6,2, + 12,92,101,190,177,57,125,70,52,119,67,109,120,111,108,86,94,94,97,100,95,40,102,81,73,128,55,144,169,90,4,96,18,109,82,124,134,21,20,121, + 27,26,79,70,74,76,108,63,60,58,61,18,23,115,17,18,118,99,69,96,0,1,1,115,4,238,3,82,6,102,0,3,0,49,64,9,2,180,0,179, + 4,3,68,1,4,16,212,236,49,0,16,244,236,48,0,75,176,9,84,75,176,14,84,91,88,189,0,4,255,192,0,1,0,4,0,4,0,64,56,17, + 55,56,89,1,51,1,35,2,139,199,254,186,153,6,102,254,136,0,0,0,0,1,0,174,254,86,4,229,4,96,0,32,0,77,64,37,19,25,31,3, + 22,6,3,9,12,3,1,18,15,6,135,28,22,140,10,1,188,0,189,33,25,9,18,9,8,11,78,31,2,8,0,70,33,16,252,236,50,244,236,196, + 18,57,49,0,16,228,228,50,244,60,236,220,196,17,23,57,17,18,23,57,48,182,31,34,96,34,207,34,3,1,93,19,17,51,17,20,22,51,50,54, + 53,17,51,17,20,22,51,50,54,55,21,14,1,35,34,38,39,14,1,35,34,38,39,17,174,184,138,135,148,149,184,35,37,9,32,28,41,73,35,69, + 82,15,50,145,98,102,143,42,254,86,6,10,253,72,145,148,168,168,2,141,252,162,60,57,11,12,148,23,22,78,80,79,79,78,78,253,215,0,0,0, + 0,1,0,158,255,59,4,57,5,213,0,13,0,37,64,18,8,2,4,193,0,129,6,2,14,0,7,93,5,3,93,1,11,14,16,212,212,252,220,236, + 57,49,0,16,196,50,244,236,17,57,48,1,33,17,35,17,35,17,35,17,46,1,53,52,36,2,121,1,192,141,190,142,215,235,1,4,5,213,249,102, + 6,31,249,225,3,78,17,221,184,190,232,0,0,1,0,219,2,72,1,174,3,70,0,3,0,18,183,2,131,0,4,1,25,0,4,16,212,236,49,0, + 16,212,236,48,19,51,21,35,219,211,211,3,70,254,0,0,0,1,1,35,254,117,2,193,0,0,0,19,0,31,64,14,9,6,10,13,243,6,0,19, + 0,16,39,3,9,20,16,220,212,236,212,204,49,0,47,212,252,196,18,57,48,33,30,1,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,38, + 39,2,84,55,54,120,118,46,87,43,34,74,47,59,60,43,45,62,105,48,89,91,12,12,131,17,15,48,46,30,87,61,0,1,0,137,2,156,2,197, + 5,223,0,10,0,44,64,24,7,0,221,9,3,221,4,2,221,9,247,5,145,11,8,124,6,93,3,124,1,124,0,11,16,220,244,228,252,228,49,0, + 16,244,236,236,212,236,16,238,50,48,19,51,17,7,53,55,51,17,51,21,33,156,204,223,230,137,205,253,215,3,10,2,99,41,116,39,253,43,110,0, + 0,3,0,96,1,213,3,100,5,240,0,3,0,15,0,27,0,46,64,25,2,227,0,225,22,221,10,224,16,221,4,145,28,0,19,13,1,25,107,7, + 108,19,107,13,28,16,220,236,252,236,57,17,18,57,49,0,16,244,236,244,236,252,236,48,19,33,21,33,1,50,22,21,20,6,35,34,38,53,52,54, + 23,34,6,21,20,22,51,50,54,53,52,38,139,2,176,253,80,1,88,179,206,206,179,179,208,208,179,105,126,127,104,105,125,124,2,80,123,4,27,221, + 191,191,219,220,190,191,221,115,161,136,133,160,160,133,137,160,0,2,0,193,0,141,4,72,4,35,0,6,0,13,0,134,64,73,12,232,13,12,9,10, + 9,11,232,10,10,9,13,232,7,8,7,12,232,11,12,8,8,7,5,232,6,5,2,3,2,4,232,3,3,2,6,232,0,1,0,5,232,4,5,1, + 1,0,66,12,5,10,3,231,7,0,166,14,12,8,1,5,0,8,111,10,7,1,111,3,0,112,14,16,252,60,252,212,60,236,18,57,17,18,57,49, + 0,16,244,60,236,50,57,57,48,75,83,88,7,16,8,237,7,16,4,237,7,16,4,237,7,16,8,237,7,16,8,237,7,16,4,237,7,16,4,237, + 7,16,8,237,89,34,19,1,21,1,53,9,1,37,1,21,1,53,9,1,193,1,213,254,43,1,45,254,211,1,178,1,213,254,43,1,45,254,211,4, + 35,254,94,82,254,94,191,1,12,1,12,191,254,94,82,254,94,191,1,12,1,12,0,0,255,255,0,137,255,227,7,127,5,240,16,38,0,123,0,0, + 16,39,11,75,4,139,253,100,16,7,11,34,3,53,0,0,255,255,0,137,255,227,7,63,5,240,16,38,0,123,0,0,16,39,0,116,4,139,253,100, + 16,7,11,34,3,53,0,0,255,255,0,98,255,227,7,127,5,240,16,38,0,117,0,0,16,39,11,75,4,139,253,100,16,7,11,34,3,53,0,0, + 0,2,0,143,255,227,3,172,5,213,0,32,0,36,0,134,64,47,32,26,5,2,4,6,25,0,16,134,15,136,12,0,33,131,35,12,149,19,140,35, + 129,37,6,34,25,22,9,5,1,0,26,34,9,0,28,1,34,28,33,38,15,9,28,22,37,16,220,236,212,252,236,212,236,17,18,57,17,18,57,17, + 18,57,18,57,49,0,16,228,244,236,16,254,205,16,244,238,18,57,57,23,57,48,1,75,176,16,84,75,176,18,84,91,75,176,19,84,91,88,189,0, + 37,255,192,0,1,0,37,0,37,0,64,56,17,55,56,89,64,11,116,4,116,5,116,6,116,7,118,28,5,93,1,51,21,20,6,15,1,14,1,21, + 20,22,51,50,54,55,21,14,1,35,34,38,53,52,54,63,1,62,1,55,62,1,53,19,35,53,51,1,244,190,55,90,90,58,51,131,109,78,180,96, + 94,192,103,184,224,73,89,88,48,38,8,7,6,196,202,202,4,68,156,101,130,87,88,53,94,49,89,110,70,67,188,57,56,194,159,76,137,86,86,47, + 53,25,21,60,54,1,14,254,255,255,0,16,0,0,5,104,7,107,18,38,0,36,0,0,16,7,22,188,4,188,1,117,255,255,0,16,0,0,5,104, + 7,107,18,38,0,36,0,0,16,7,22,186,4,188,1,117,255,255,0,16,0,0,5,104,7,109,18,38,0,36,0,0,17,7,22,189,4,188,1,117, + 0,16,180,5,13,17,10,7,43,64,5,15,13,0,17,2,93,49,0,0,255,255,0,16,0,0,5,104,7,94,18,38,0,36,0,0,17,7,22,187, + 4,188,1,117,0,20,180,10,20,35,5,7,43,64,9,64,20,79,35,32,20,47,35,4,93,49,0,0,255,255,0,16,0,0,5,104,7,78,18,38, + 0,36,0,0,17,7,22,185,4,188,1,117,0,20,180,10,18,13,5,7,43,64,9,48,18,63,13,0,18,15,13,4,93,49,0,0,0,3,0,16, + 0,0,5,104,7,109,0,11,0,14,0,33,0,203,64,84,12,17,13,12,27,28,27,14,17,28,27,30,17,28,27,29,17,28,28,27,13,17,33,15, + 33,12,17,14,12,15,15,33,32,17,15,33,31,17,33,15,33,66,12,27,15,13,9,3,193,21,9,30,149,13,9,142,32,28,30,29,28,24,32,31, + 33,13,18,6,14,24,12,6,27,0,86,24,28,15,6,86,18,28,33,34,16,212,196,212,236,50,16,212,238,50,17,57,17,57,17,18,57,17,57,57, + 17,18,57,57,49,0,47,60,230,214,238,16,212,238,17,18,57,57,57,48,75,83,88,7,16,5,237,7,5,237,7,16,8,237,7,16,5,237,7,16, + 5,237,7,5,237,7,5,237,7,16,8,237,89,34,178,32,35,1,1,93,64,32,26,12,115,12,155,12,3,7,15,8,27,80,35,102,13,105,14,117, + 13,123,14,121,28,121,29,118,32,118,33,128,35,12,93,0,93,1,52,38,35,34,6,21,20,22,51,50,54,3,1,33,1,46,1,53,52,54,51,50, + 22,21,20,6,7,1,35,3,33,3,35,3,84,89,63,64,87,88,63,63,89,152,254,240,2,33,254,88,61,62,159,115,114,161,63,60,2,20,210,136, + 253,95,136,213,6,90,63,89,87,65,63,88,88,254,243,253,25,3,78,41,115,73,115,160,161,114,70,118,41,250,139,1,127,254,129,0,0,2,0,8, + 0,0,7,72,5,213,0,15,0,19,0,135,64,57,17,17,14,15,14,16,17,15,15,14,13,17,15,14,12,17,14,15,14,66,5,149,3,11,149,17, + 1,149,16,149,0,129,17,7,149,3,173,13,9,17,16,15,13,12,5,14,10,0,4,8,6,2,28,18,10,14,20,16,212,212,60,236,50,212,196,196, + 17,18,23,57,49,0,47,60,236,236,196,244,236,236,16,238,16,238,48,75,83,88,7,16,5,237,7,5,237,7,16,5,237,7,16,5,237,89,34,178, + 128,21,1,1,93,64,19,103,17,119,16,119,17,134,12,133,16,150,17,144,21,160,21,191,21,9,93,1,21,33,17,33,21,33,17,33,21,33,17,33, + 3,35,1,23,1,33,17,7,53,253,27,2,199,253,57,2,248,252,61,253,240,160,205,2,113,139,254,182,1,203,5,213,170,254,70,170,253,227,170,1, + 127,254,129,5,213,158,252,240,3,16,0,0,255,255,0,115,254,117,5,39,5,240,18,38,0,38,0,0,16,7,0,122,1,45,0,0,255,255,0,201, + 0,0,4,139,7,107,18,38,0,40,0,0,16,7,22,188,4,158,1,117,255,255,0,201,0,0,4,139,7,107,18,38,0,40,0,0,16,7,22,186, + 4,158,1,117,255,255,0,201,0,0,4,139,7,109,18,38,0,40,0,0,17,7,22,189,4,158,1,117,0,7,64,3,64,12,1,93,49,0,0,0, + 255,255,0,201,0,0,4,139,7,78,18,38,0,40,0,0,17,7,22,185,4,158,1,117,0,9,64,5,64,12,64,16,2,93,49,0,255,255,0,59, + 0,0,1,186,7,107,18,38,0,44,0,0,16,7,22,188,3,47,1,117,255,255,0,162,0,0,2,31,7,107,18,38,0,44,0,0,16,7,22,186, + 3,47,1,117,255,255,255,254,0,0,2,96,7,109,18,38,0,44,0,0,17,7,22,189,3,47,1,117,0,8,180,1,6,10,0,7,43,49,0,0, + 255,255,0,6,0,0,2,88,7,78,18,38,0,44,0,0,17,7,22,185,3,47,1,117,0,8,180,0,10,7,1,7,43,49,0,0,0,2,0,10, + 0,0,5,186,5,213,0,12,0,25,0,103,64,32,16,9,169,11,13,149,0,129,18,149,14,11,7,7,1,25,19,4,15,13,22,25,4,50,10,17, + 13,28,8,0,121,26,16,244,60,236,50,196,244,236,16,196,23,57,49,0,47,198,50,238,246,238,16,238,50,48,64,40,32,27,127,27,176,27,3,159, + 9,159,10,159,11,159,12,159,14,159,15,159,16,159,17,191,9,191,10,191,11,191,12,191,14,191,15,191,16,191,17,16,93,1,93,19,33,32,0,17, + 16,0,41,1,17,35,53,51,19,17,33,21,33,17,51,32,0,17,16,0,33,211,1,160,1,177,1,150,254,105,254,80,254,96,201,201,203,1,80,254, + 176,243,1,53,1,31,254,225,254,203,5,213,254,151,254,128,254,126,254,150,2,188,144,1,227,254,29,144,253,234,1,24,1,46,1,44,1,23,0,0, + 255,255,0,201,0,0,5,51,7,94,18,38,0,49,0,0,17,7,22,187,4,254,1,117,0,20,180,0,19,34,4,7,43,64,9,48,19,63,34,16, + 19,31,34,4,93,49,0,0,255,255,0,115,255,227,5,217,7,107,18,38,0,50,0,0,16,7,22,188,5,39,1,117,255,255,0,115,255,227,5,217, + 7,107,18,38,0,50,0,0,16,7,22,186,5,39,1,117,255,255,0,115,255,227,5,217,7,109,18,38,0,50,0,0,17,7,22,189,5,39,1,117, + 0,16,180,15,26,30,21,7,43,64,5,31,26,16,30,2,93,49,0,0,255,255,0,115,255,227,5,217,7,94,18,38,0,50,0,0,17,7,22,187, + 5,39,1,117,0,24,180,3,33,48,9,7,43,64,13,48,33,63,48,32,33,47,48,16,33,31,48,6,93,49,0,0,255,255,0,115,255,227,5,217, + 7,78,18,38,0,50,0,0,17,7,22,185,5,39,1,117,0,20,180,3,31,26,9,7,43,64,9,64,31,79,26,16,31,31,26,4,93,49,0,0, + 0,1,1,25,0,63,5,156,4,197,0,11,0,133,64,77,10,156,11,10,7,8,7,9,156,8,8,7,4,156,3,4,7,7,6,5,156,6,7,6, + 4,156,5,4,1,2,1,3,156,2,2,1,11,156,0,1,0,10,156,9,10,1,1,0,66,10,8,7,6,4,2,1,0,8,5,3,11,9,12,11, + 10,9,7,5,4,3,1,8,2,0,8,6,12,16,212,60,204,50,23,57,49,0,16,212,60,204,50,23,57,48,75,83,88,7,16,8,237,7,16,5, + 237,7,16,5,237,7,16,8,237,7,16,5,237,7,16,8,237,7,16,5,237,7,16,8,237,89,34,9,2,7,9,1,39,9,1,55,9,1,5,156, + 254,55,1,201,119,254,53,254,53,118,1,200,254,56,118,1,203,1,203,4,76,254,53,254,55,121,1,203,254,53,121,1,201,1,203,121,254,53,1,203, + 0,3,0,102,255,186,5,229,6,23,0,9,0,19,0,43,0,158,64,60,29,31,26,13,43,44,19,10,1,0,4,13,41,38,32,20,13,4,42,38, + 30,26,4,149,38,13,149,26,145,38,140,44,43,44,42,20,23,16,32,30,35,19,10,1,0,4,29,41,16,7,31,7,25,35,51,16,25,23,16,44, + 16,252,236,252,236,192,17,18,57,57,23,57,18,57,57,17,18,57,57,17,57,49,0,16,228,244,236,16,238,16,192,16,192,17,18,57,57,18,57,18, + 23,57,18,57,17,18,57,57,48,64,42,87,0,90,21,87,25,85,33,106,21,101,33,123,21,118,28,117,33,9,70,19,89,0,86,19,106,0,100,19, + 100,28,106,40,124,0,115,19,118,28,122,40,11,93,1,93,9,1,30,1,51,50,0,17,52,38,39,46,1,35,34,0,17,20,22,23,7,38,2,53, + 16,0,33,50,22,23,55,23,7,22,18,21,16,0,33,34,38,39,7,39,4,182,253,51,62,161,95,220,1,1,39,121,61,161,95,220,254,253,39,39, + 134,78,79,1,121,1,59,130,221,87,162,102,170,78,80,254,136,254,198,128,221,91,162,103,4,88,252,178,64,67,1,72,1,26,112,184,184,64,67,254, + 184,254,229,112,188,68,158,102,1,8,160,1,98,1,165,77,75,191,89,198,103,254,246,158,254,159,254,91,75,75,191,88,255,255,0,178,255,227,5,41, + 7,107,18,38,0,56,0,0,16,7,22,188,4,238,1,117,255,255,0,178,255,227,5,41,7,107,18,38,0,56,0,0,16,7,22,186,4,238,1,117, + 255,255,0,178,255,227,5,41,7,109,18,38,0,56,0,0,17,7,22,189,4,238,1,117,0,20,180,10,20,24,0,7,43,64,9,47,20,32,24,31, + 20,16,24,4,93,49,0,0,255,255,0,178,255,227,5,41,7,78,18,38,0,56,0,0,17,7,22,185,4,238,1,117,0,28,180,1,25,20,9,7, + 43,64,17,80,25,95,20,64,25,79,20,32,25,47,20,16,25,31,20,8,93,49,0,0,255,255,255,252,0,0,4,231,7,107,18,38,0,60,0,0, + 16,7,22,186,4,115,1,117,0,2,0,201,0,0,4,141,5,213,0,12,0,21,0,61,64,27,14,149,9,13,149,2,246,0,129,11,21,15,9,3, + 4,1,18,25,6,63,13,10,1,28,0,4,22,16,252,236,50,50,252,236,17,23,57,49,0,47,244,252,236,212,236,48,64,9,15,23,31,23,63,23, + 95,23,4,1,93,19,51,17,51,50,4,21,20,4,43,1,17,35,19,17,51,50,54,53,52,38,35,201,202,254,251,1,1,254,255,251,254,202,202,254, + 141,154,153,142,5,213,254,248,225,220,220,226,254,174,4,39,253,209,146,134,134,145,0,0,0,1,0,186,255,227,4,172,6,20,0,47,0,154,64,48, + 45,39,33,12,4,6,13,32,0,4,42,22,134,23,26,185,19,42,185,3,151,19,140,46,12,9,13,29,32,33,39,9,8,36,39,8,6,29,8,36, + 16,22,45,8,16,0,70,48,16,252,196,252,204,16,198,238,212,238,16,238,17,57,57,18,57,18,57,49,0,47,228,254,238,16,254,213,238,18,23,57, + 23,57,48,64,64,15,5,15,6,15,7,15,39,15,40,138,12,138,13,7,10,6,10,7,10,11,10,12,10,13,10,31,13,32,10,33,12,34,4,38, + 25,13,25,31,25,32,58,32,58,33,77,31,77,32,73,33,73,34,106,31,106,32,165,6,165,7,166,32,24,93,1,93,19,52,54,51,50,22,23,14, + 1,21,20,22,31,1,30,1,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,38,47,1,46,1,53,52,54,55,46,1,35,34,6,21,17,35, + 186,239,218,208,219,3,151,168,58,65,57,166,96,225,211,64,136,73,80,140,65,116,120,59,101,92,96,87,167,151,8,131,113,130,136,187,4,113,200,219, + 232,224,8,115,96,47,81,42,37,106,142,100,172,183,25,24,164,30,29,95,91,63,84,62,55,59,135,91,127,172,29,103,112,139,131,251,147,0,0,0, + 255,255,0,123,255,227,4,45,6,102,18,38,0,68,0,0,17,6,0,67,82,0,0,11,64,7,63,38,47,38,31,38,3,93,49,0,255,255,0,123, + 255,227,4,45,6,102,18,38,0,68,0,0,17,6,0,118,82,0,0,11,64,7,63,38,47,38,31,38,3,93,49,0,255,255,0,123,255,227,4,45, + 6,102,18,38,0,68,0,0,17,6,2,136,82,0,0,8,180,11,40,44,20,7,43,49,255,255,0,123,255,227,4,45,6,55,18,38,0,68,0,0, + 17,6,2,158,82,0,0,20,180,20,46,60,11,7,43,64,9,32,46,47,60,16,46,31,60,4,93,49,255,255,0,123,255,227,4,45,6,16,18,38, + 0,68,0,0,17,6,0,106,82,0,0,32,180,20,45,40,11,7,43,64,21,127,40,111,40,80,45,95,40,64,45,79,40,48,45,63,40,0,45,15, + 40,10,93,49,255,255,0,123,255,227,4,45,7,6,18,38,0,68,0,0,17,6,2,156,82,0,0,37,64,14,38,44,20,44,38,11,7,50,56,20, + 56,50,11,7,43,16,196,43,16,196,49,0,64,9,63,53,63,47,15,53,15,47,4,93,48,0,0,0,0,3,0,123,255,227,7,111,4,123,0,6, + 0,51,0,62,1,3,64,67,39,45,37,61,14,13,0,52,169,37,22,134,21,136,18,0,169,14,58,18,185,28,25,46,134,45,186,42,3,185,14,187, + 7,49,10,184,31,25,140,37,63,52,55,38,6,15,0,37,55,28,7,38,15,21,0,8,13,61,38,8,15,45,55,8,34,69,63,16,252,236,204,212, + 252,60,212,236,196,17,18,57,57,17,57,17,18,57,17,18,57,49,0,16,196,228,50,244,60,196,228,252,60,244,236,16,196,238,50,16,238,16,244,238, + 16,238,17,57,17,57,17,18,57,48,64,129,48,43,48,44,48,45,48,46,48,47,48,48,64,43,64,44,64,45,64,46,64,47,64,48,80,43,80,44, + 80,45,80,46,80,47,80,48,133,43,133,48,128,64,144,64,160,64,176,64,192,64,208,64,224,64,224,64,240,64,29,63,0,63,6,63,13,63,14,63, + 15,5,48,44,48,45,48,46,48,47,64,44,64,45,64,46,64,47,80,44,80,45,80,46,80,47,111,0,111,6,111,13,111,14,111,15,96,44,96,45, + 96,46,96,47,112,44,112,45,112,46,112,47,128,44,128,45,128,46,128,47,29,93,113,1,93,1,46,1,35,34,6,7,3,62,1,51,50,0,29,1, + 33,30,1,51,50,54,55,21,14,1,35,34,38,39,14,1,35,34,38,53,52,54,51,33,53,52,38,35,34,6,7,53,62,1,51,50,22,3,34,6, + 21,20,22,51,50,54,61,1,6,182,1,165,137,153,185,14,68,74,212,132,226,1,8,252,178,12,204,183,104,200,100,100,208,106,167,248,77,73,216,143, + 189,210,253,251,1,2,167,151,96,182,84,101,190,90,142,213,239,223,172,129,111,153,185,2,148,151,180,174,158,1,48,90,94,254,221,250,90,191,200,53, + 53,174,42,44,121,119,120,120,187,168,189,192,18,127,139,46,46,170,39,39,96,254,24,102,123,98,115,217,180,41,0,0,255,255,0,113,254,117,3,231, + 4,123,18,38,0,70,0,0,16,7,0,122,0,143,0,0,255,255,0,113,255,227,4,127,6,102,18,38,0,72,0,0,16,7,0,67,0,139,0,0, + 255,255,0,113,255,227,4,127,6,102,18,38,0,72,0,0,16,7,0,118,0,139,0,0,255,255,0,113,255,227,4,127,6,102,18,38,0,72,0,0, + 17,7,2,136,0,139,0,0,0,8,180,21,30,34,27,7,43,49,0,0,255,255,0,113,255,227,4,127,6,16,18,38,0,72,0,0,17,7,0,106, + 0,139,0,0,0,7,64,3,64,32,1,93,49,0,0,0,255,255,255,199,0,0,1,166,6,102,16,39,0,67,255,29,0,0,18,6,0,243,0,0, + 255,255,0,144,0,0,2,111,6,102,16,39,0,118,255,29,0,0,18,6,0,243,0,0,255,255,255,222,0,0,2,92,6,102,18,38,0,243,0,0, + 17,7,2,136,255,29,0,0,0,8,180,1,7,11,0,7,43,49,0,0,255,255,255,244,0,0,2,70,6,16,18,38,0,243,0,0,17,7,0,106, + 255,29,0,0,0,8,180,0,11,8,1,7,43,49,0,0,0,2,0,113,255,227,4,117,6,20,0,14,0,40,1,39,64,94,37,123,38,37,30,35, + 30,36,123,35,35,30,15,123,35,30,40,123,39,40,30,35,30,38,39,40,39,37,36,37,40,40,39,34,35,34,31,32,31,33,32,32,31,66,40,39, + 38,37,34,33,32,31,8,35,30,3,15,35,3,185,27,9,185,21,140,27,35,177,41,38,39,18,12,33,32,24,40,37,35,34,31,5,30,15,6,12, + 18,18,81,6,18,24,69,41,16,252,236,244,236,17,57,57,23,57,18,57,57,17,18,57,57,49,0,16,236,196,244,236,16,238,18,57,18,57,18,23, + 57,48,75,83,88,7,16,14,201,7,16,8,201,7,16,8,201,7,16,14,201,7,16,8,237,7,14,237,7,16,5,237,7,16,8,237,89,34,178,63, + 42,1,1,93,64,118,22,37,43,31,40,34,47,35,47,36,41,37,45,38,45,39,42,40,54,37,70,37,88,32,88,33,96,32,96,33,102,34,117,32, + 117,33,117,34,19,37,35,37,36,38,38,38,39,39,40,54,36,54,37,70,36,69,37,90,32,90,33,98,32,98,33,127,0,127,1,127,2,122,3,123, + 9,127,10,127,11,127,12,127,13,127,14,127,15,127,16,127,17,127,18,127,19,127,20,123,21,122,27,122,28,127,29,127,30,118,32,118,33,120,34,160, + 42,240,42,39,93,0,93,1,46,1,35,34,6,21,20,22,51,50,54,53,52,38,19,22,18,21,20,0,35,34,0,17,52,0,51,50,22,23,39,5, + 39,37,39,51,23,37,23,5,3,70,50,88,41,167,185,174,146,145,174,54,9,126,114,254,228,230,231,254,229,1,20,221,18,52,42,159,254,193,33,1, + 25,181,228,127,1,77,33,254,217,3,147,17,16,216,195,188,222,222,188,122,188,1,38,143,254,224,173,255,254,201,1,55,0,255,250,1,55,5,5,180, + 107,99,92,204,145,111,97,98,255,255,0,186,0,0,4,100,6,55,18,38,0,81,0,0,16,7,2,158,0,152,0,0,255,255,0,113,255,227,4,117, + 6,102,18,38,0,82,0,0,16,6,0,67,115,0,0,0,255,255,0,113,255,227,4,117,6,102,18,38,0,82,0,0,16,6,0,118,115,0,0,0, + 255,255,0,113,255,227,4,117,6,102,18,38,0,82,0,0,17,6,2,136,115,0,0,8,180,15,26,30,21,7,43,49,255,255,0,113,255,227,4,117, + 6,55,18,38,0,82,0,0,17,6,2,158,115,0,0,20,180,21,32,46,15,7,43,64,9,32,32,47,46,16,32,31,46,4,93,49,255,255,0,113, + 255,227,4,117,6,16,18,38,0,82,0,0,17,6,0,106,115,0,0,20,180,3,31,26,9,7,43,64,9,64,31,79,26,48,31,63,26,4,93,49, + 0,3,0,217,0,150,5,219,4,111,0,3,0,7,0,11,0,41,64,20,0,234,2,6,234,4,2,8,156,4,10,12,9,5,1,114,4,0,8,12, + 16,220,212,60,252,60,196,49,0,16,212,196,252,196,16,238,16,238,48,1,51,21,35,17,51,21,35,1,33,21,33,2,223,246,246,246,246,253,250,5, + 2,250,254,4,111,246,254,18,245,2,65,170,0,3,0,72,255,162,4,156,4,188,0,9,0,19,0,43,0,228,64,60,43,44,38,31,29,26,19,10, + 1,0,4,13,41,38,32,20,13,4,42,38,30,26,4,185,38,13,185,26,184,38,140,44,43,44,42,20,23,16,32,30,35,19,10,1,0,4,16,7, + 31,29,7,18,35,81,41,16,18,23,69,44,16,252,236,50,244,236,50,192,17,18,23,57,18,57,57,17,18,57,57,17,57,49,0,16,228,244,236,16, + 238,16,192,16,192,17,18,57,57,18,57,18,23,57,17,57,57,17,18,57,48,64,112,40,1,63,45,89,20,86,28,85,29,86,32,106,21,102,33,127, + 0,123,4,127,5,127,6,127,7,127,8,127,9,127,10,127,11,127,12,123,13,122,21,123,26,127,27,127,28,127,29,127,30,127,31,127,32,123,33,127, + 34,127,35,127,36,127,37,123,38,155,25,149,37,168,25,160,45,240,45,38,89,0,86,19,85,29,90,40,105,0,102,19,101,28,106,40,122,0,116,19, + 118,28,122,40,137,30,149,24,154,36,162,24,173,36,17,93,1,93,9,1,30,1,51,50,54,53,52,38,39,46,1,35,34,6,21,20,22,23,7,46, + 1,53,16,0,51,50,22,23,55,23,7,30,1,21,16,0,35,34,38,39,7,39,3,137,254,25,41,103,65,147,172,20,92,42,103,62,151,169,19,20, + 125,54,54,1,17,241,93,159,67,139,95,146,53,54,254,238,240,96,161,63,139,96,3,33,253,176,42,40,232,200,79,117,154,41,41,235,211,72,110,46, + 151,77,197,119,1,20,1,56,51,52,168,79,179,77,198,120,254,237,254,199,52,51,168,78,255,255,0,174,255,227,4,88,6,102,18,38,0,88,0,0, + 16,6,0,67,123,0,0,0,255,255,0,174,255,227,4,88,6,102,18,38,0,88,0,0,16,6,0,118,123,0,0,0,255,255,0,174,255,227,4,88, + 6,102,18,38,0,88,0,0,17,6,2,136,123,0,0,8,180,11,23,27,1,7,43,49,255,255,0,174,255,227,4,88,6,16,18,38,0,88,0,0, + 17,6,0,106,123,0,0,24,180,2,27,24,10,7,43,64,13,64,27,79,24,48,27,63,24,0,27,15,24,6,93,49,255,255,0,61,254,86,4,127, + 6,102,18,38,0,92,0,0,16,6,0,118,94,0,0,0,0,2,0,186,254,86,4,164,6,20,0,16,0,28,0,62,64,27,20,185,5,8,26,185, + 0,14,140,8,184,1,189,3,151,29,17,18,11,71,23,4,0,8,2,70,29,16,252,236,50,50,244,236,49,0,16,236,228,228,244,196,236,16,198,238, + 48,64,9,96,30,128,30,160,30,224,30,4,1,93,37,17,35,17,51,17,62,1,51,50,0,17,16,2,35,34,38,1,52,38,35,34,6,21,20,22, + 51,50,54,1,115,185,185,58,177,123,204,0,255,255,204,123,177,2,56,167,146,146,167,167,146,146,167,168,253,174,7,190,253,162,100,97,254,188,254,248, + 254,248,254,188,97,1,235,203,231,231,203,203,231,231,0,0,255,255,0,61,254,86,4,127,6,16,18,38,0,92,0,0,17,6,0,106,94,0,0,22, + 180,24,23,18,25,7,43,64,11,48,23,63,18,32,23,47,18,31,18,5,93,49,0,0,255,255,0,16,0,0,5,104,7,49,16,39,0,113,0,188, + 1,59,19,6,0,36,0,0,0,16,180,14,3,2,9,7,43,64,5,64,3,79,2,2,93,49,0,0,255,255,0,123,255,227,4,45,5,246,16,38, + 0,113,74,0,19,6,0,68,0,0,0,16,180,24,3,2,15,7,43,64,5,111,2,127,3,2,93,49,255,255,0,16,0,0,5,104,7,146,16,39, + 2,154,0,206,1,74,19,6,0,36,0,0,0,18,180,24,0,8,19,7,43,49,0,64,5,111,0,111,8,2,93,48,255,255,0,123,255,227,4,45, + 6,31,16,38,2,154,79,215,19,6,0,68,0,0,0,8,180,34,0,8,25,7,43,49,255,255,0,16,254,117,5,165,5,213,18,38,0,36,0,0, + 16,7,2,157,2,228,0,0,255,255,0,123,254,117,4,128,4,123,18,38,0,68,0,0,16,7,2,157,1,191,0,0,255,255,0,115,255,227,5,39, + 7,107,18,38,0,38,0,0,16,7,22,186,5,45,1,117,255,255,0,113,255,227,3,231,6,102,18,38,0,70,0,0,16,7,0,118,0,137,0,0, + 255,255,0,115,255,227,5,39,7,109,16,39,22,189,5,76,1,117,19,6,0,38,0,0,0,9,178,4,4,30,16,60,61,47,49,0,255,255,0,113, + 255,227,3,231,6,102,18,38,0,70,0,0,16,7,2,136,0,164,0,0,255,255,0,115,255,227,5,39,7,80,16,39,22,193,5,76,1,117,18,6, + 0,38,0,0,255,255,0,113,255,227,3,231,6,20,16,39,2,184,4,164,0,0,18,6,0,70,0,0,255,255,0,115,255,227,5,39,7,109,18,38, + 0,38,0,0,17,7,22,190,5,45,1,117,0,7,64,3,31,29,1,93,49,0,0,0,255,255,0,113,255,227,3,231,6,102,18,38,0,70,0,0, + 16,7,2,137,0,137,0,0,255,255,0,201,0,0,5,176,7,109,16,39,22,190,4,236,1,117,18,6,0,39,0,0,255,255,0,113,255,227,5,219, + 6,20,18,38,0,71,0,0,17,7,22,184,5,20,0,0,0,11,64,7,95,29,63,29,31,29,3,93,49,0,0,0,255,255,0,10,0,0,5,186, + 5,213,16,6,0,146,0,0,0,2,0,113,255,227,4,244,6,20,0,24,0,36,0,74,64,36,7,3,211,9,1,249,34,185,0,22,28,185,13,16, + 140,22,184,5,151,11,2,31,12,4,3,0,8,8,10,6,71,25,18,19,69,37,16,252,236,244,60,196,252,23,60,196,49,0,47,236,228,244,196,236, + 16,196,238,253,60,238,50,48,182,96,38,128,38,160,38,3,1,93,1,17,33,53,33,53,51,21,51,21,35,17,35,53,14,1,35,34,2,17,16,0, + 51,50,22,1,20,22,51,50,54,53,52,38,35,34,6,3,162,254,186,1,70,184,154,154,184,58,177,124,203,255,0,255,203,124,177,253,199,167,146,146, + 168,168,146,146,167,3,182,1,78,125,147,147,125,250,252,168,100,97,1,68,1,8,1,8,1,68,97,254,21,203,231,231,203,203,231,231,255,255,0,201, + 0,0,4,139,7,51,18,38,0,40,0,0,16,7,0,113,0,161,1,61,255,255,0,113,255,227,4,127,5,246,16,39,0,113,0,150,0,0,19,6, + 0,72,0,0,0,7,64,3,112,0,1,93,49,0,0,0,255,255,0,201,0,0,4,139,7,109,16,39,22,192,4,161,1,117,19,6,0,40,0,0, + 0,7,64,3,64,0,1,93,49,0,0,0,255,255,0,113,255,227,4,127,6,72,16,39,2,154,0,150,0,0,19,6,0,72,0,0,0,7,64,3, + 112,0,1,93,49,0,0,0,255,255,0,201,0,0,4,139,7,80,16,39,22,193,4,158,1,117,18,6,0,40,0,0,255,255,0,113,255,227,4,127, + 6,20,16,39,2,184,4,150,0,0,18,6,0,72,0,0,255,255,0,201,254,117,4,141,5,213,18,38,0,40,0,0,16,7,2,157,1,204,0,0, + 255,255,0,113,254,117,4,127,4,123,18,38,0,72,0,0,16,7,2,157,1,120,0,0,255,255,0,201,0,0,4,139,7,103,18,38,0,40,0,0, + 17,7,22,190,4,166,1,111,0,7,64,3,64,12,1,93,49,0,0,0,255,255,0,113,255,227,4,127,6,97,18,38,0,72,0,0,17,7,2,137, + 0,148,255,251,0,16,180,0,33,29,15,7,43,64,5,15,33,0,29,2,93,49,0,0,255,255,0,115,255,227,5,139,7,109,16,39,22,189,5,92, + 1,117,19,6,0,42,0,0,0,9,178,4,4,21,16,60,61,47,49,0,255,255,0,113,254,86,4,90,6,102,16,38,2,136,104,0,19,6,0,74, + 0,0,0,9,178,4,4,10,16,60,61,47,49,0,0,0,255,255,0,115,255,227,5,139,7,109,18,38,0,42,0,0,16,7,22,192,5,27,1,117, + 255,255,0,113,254,86,4,90,6,72,18,38,0,74,0,0,16,7,2,154,0,139,0,0,255,255,0,115,255,227,5,139,7,80,16,39,22,193,5,92, + 1,117,19,6,0,42,0,0,0,8,0,64,3,63,0,1,93,48,0,0,255,255,0,113,254,86,4,90,6,20,16,39,2,184,4,106,0,0,18,6, + 0,74,0,0,255,255,0,115,254,1,5,139,5,240,16,39,2,215,5,94,255,237,18,6,0,42,0,0,255,255,0,113,254,86,4,90,6,52,16,39, + 2,195,3,224,1,12,18,6,0,74,0,0,255,255,0,201,0,0,5,59,7,109,16,39,22,189,5,2,1,117,19,6,0,43,0,0,0,20,180,12, + 2,6,7,7,43,64,9,47,2,32,6,31,2,16,6,4,93,49,0,0,255,255,255,229,0,0,4,100,7,109,16,39,22,189,3,22,1,117,19,6, + 0,75,0,0,0,42,180,20,2,6,19,7,43,49,0,75,176,14,81,88,187,0,20,255,192,0,19,255,192,56,56,89,64,13,144,20,144,19,128,20, + 128,19,64,20,64,19,6,93,0,2,0,201,0,0,6,139,5,213,0,19,0,23,0,58,64,30,6,2,18,149,9,20,17,12,149,21,173,4,0,129, + 14,10,7,12,23,4,28,5,56,18,13,20,1,28,0,24,16,220,236,50,50,204,252,236,50,50,204,49,0,47,60,228,50,252,236,220,50,50,236,50, + 50,48,1,51,21,33,53,51,21,51,21,35,17,35,17,33,17,35,17,35,53,51,23,21,33,53,1,113,202,2,222,202,168,168,202,253,34,202,168,168, + 202,2,222,5,213,224,224,224,164,251,175,2,199,253,57,4,81,164,164,224,224,0,0,0,0,1,0,120,0,0,4,159,6,20,0,27,0,62,64,33, + 3,9,0,3,22,1,14,18,135,13,21,6,135,22,25,184,16,151,10,1,2,8,0,78,19,14,17,21,9,8,16,11,28,16,220,50,236,50,50,204, + 204,244,236,49,0,47,60,236,244,196,236,220,50,236,50,17,18,23,57,48,1,17,35,17,52,38,35,34,6,21,17,35,17,35,53,51,53,51,21,33, + 21,33,17,62,1,51,50,22,4,159,184,124,124,149,172,185,125,125,185,1,96,254,160,66,179,117,193,198,2,164,253,92,2,158,159,158,190,164,253,135, + 4,246,164,122,122,164,254,188,101,100,239,0,255,255,255,228,0,0,2,120,7,94,16,39,22,187,3,46,1,117,19,6,0,44,0,0,0,8,180,30, + 9,24,31,7,43,49,0,0,255,255,255,211,0,0,2,103,6,55,16,39,2,158,255,29,0,0,19,6,0,243,0,0,0,8,180,28,8,22,29,7, + 43,49,0,0,255,255,0,3,0,0,2,89,7,49,16,39,0,113,255,46,1,59,19,6,0,44,0,0,0,8,180,4,3,2,5,7,43,49,0,0, + 255,255,255,242,0,0,2,72,5,245,16,39,0,113,255,29,255,255,19,6,0,243,0,0,0,8,180,4,3,2,5,7,43,49,0,0,255,255,255,245, + 0,0,2,103,7,109,16,39,22,192,3,46,1,117,19,6,0,44,0,0,0,8,180,14,0,8,15,7,43,49,0,0,255,255,255,228,0,0,2,86, + 6,72,16,39,2,154,255,29,0,0,19,6,0,243,0,0,0,8,180,14,0,8,15,7,43,49,0,0,255,255,0,176,254,117,2,37,5,213,16,39, + 2,157,255,100,0,0,18,6,0,44,0,0,255,255,0,150,254,117,2,11,6,20,16,39,2,157,255,74,0,0,18,6,0,76,0,0,255,255,0,201, + 0,0,1,149,7,80,18,38,0,44,0,0,17,7,22,193,3,47,1,117,0,19,179,6,1,7,0,16,60,16,60,49,0,180,63,7,63,6,2,93, + 48,0,0,0,0,2,0,193,0,0,1,121,4,123,0,3,0,4,0,44,64,11,4,184,0,191,2,4,1,8,0,70,5,16,252,236,57,49,0,47, + 236,228,48,64,17,4,4,52,4,68,4,16,6,64,6,80,6,96,6,112,6,8,1,93,19,51,17,35,19,193,184,184,92,4,96,251,160,4,123,0, + 255,255,0,201,254,102,3,239,5,213,16,39,0,45,2,92,0,0,17,6,0,44,0,0,0,8,64,3,17,4,1,16,236,49,0,0,255,255,0,193, + 254,86,3,177,6,20,16,39,0,77,2,56,0,0,17,6,0,76,0,0,0,8,64,3,25,70,1,16,236,49,0,0,255,255,255,150,254,102,2,95, + 7,109,16,39,22,189,3,46,1,117,19,6,0,45,0,0,0,8,180,8,2,6,7,7,43,49,0,0,255,255,255,219,254,86,2,92,6,102,16,39, + 2,136,255,29,0,0,19,6,1,249,0,0,0,8,180,8,2,6,7,7,43,49,0,0,255,255,0,201,254,30,5,106,5,213,16,39,2,215,5,27, + 0,10,18,6,0,46,0,0,255,255,0,186,254,30,4,156,6,20,16,39,2,215,4,172,0,10,18,6,0,78,0,0,0,1,0,186,0,0,4,156, + 4,96,0,10,0,187,64,40,8,17,5,6,5,7,17,6,6,5,3,17,4,5,4,2,17,5,5,4,66,8,5,2,3,3,0,188,9,6,5,1, + 4,6,8,1,8,0,70,11,16,252,236,50,212,196,17,57,49,0,47,60,236,50,23,57,48,75,83,88,7,16,4,237,7,16,5,237,7,16,5,237, + 7,16,4,237,89,34,178,16,12,1,1,93,64,95,4,2,10,8,22,2,39,2,41,5,43,8,86,2,102,2,103,8,115,2,119,5,130,2,137,5, + 142,8,147,2,150,5,151,8,163,2,18,9,5,9,6,2,11,3,10,7,40,3,39,4,40,5,43,6,43,7,64,12,104,3,96,12,137,3,133,4, + 137,5,141,6,143,7,154,3,151,7,170,3,167,5,182,7,197,7,214,7,247,3,240,3,247,4,240,4,26,93,113,0,93,19,51,17,1,51,9,1, + 35,1,17,35,186,185,2,37,235,253,174,2,107,240,253,199,185,4,96,254,27,1,229,253,242,253,174,2,33,253,223,0,255,255,0,201,0,0,4,106, + 7,108,16,39,22,186,3,110,1,118,18,6,0,47,0,0,255,255,0,193,0,0,2,74,7,108,16,39,22,186,3,90,1,118,19,6,0,79,0,0, + 0,30,177,3,4,16,60,49,0,75,176,14,81,88,185,0,0,0,64,56,89,64,7,159,0,143,0,79,0,3,93,48,255,255,0,201,254,30,4,106, + 5,213,16,39,2,215,4,155,0,10,18,6,0,47,0,0,255,255,0,136,254,30,1,173,6,20,16,39,2,215,3,30,0,10,19,6,0,79,0,0, + 0,7,64,3,64,0,1,93,49,0,0,0,255,255,0,201,0,0,4,106,5,213,16,39,22,184,2,159,255,195,18,6,0,47,0,0,255,255,0,193, + 0,0,3,0,6,20,16,39,22,184,2,57,0,2,17,6,0,79,0,0,0,9,64,5,143,0,31,0,2,93,49,0,255,255,0,201,0,0,4,106, + 5,213,16,39,0,121,2,49,0,119,18,6,0,47,0,0,255,255,0,193,0,0,2,132,6,20,16,39,0,121,0,214,0,115,17,6,0,79,0,0, + 0,23,75,176,13,81,75,176,17,83,75,176,24,81,90,91,88,185,0,0,0,64,56,89,49,0,0,0,0,1,255,242,0,0,4,117,5,213,0,13, + 0,63,64,30,12,11,10,4,3,2,6,0,6,149,0,129,8,3,4,1,11,14,0,4,5,1,28,12,7,58,9,0,121,14,16,244,60,236,196,252, + 60,196,17,18,57,17,18,57,49,0,47,228,236,17,23,57,48,180,48,15,80,15,2,1,93,19,51,17,37,23,1,17,33,21,33,17,7,39,55,211, + 203,1,57,80,254,119,2,215,252,94,148,77,225,5,213,253,152,219,111,254,238,253,227,170,2,59,106,110,158,0,0,0,0,1,0,2,0,0,2,72, + 6,20,0,11,0,94,64,26,10,9,8,4,3,2,6,0,151,6,3,4,1,9,10,0,4,122,5,1,8,10,122,7,0,12,16,212,60,228,252,60, + 228,17,18,57,17,18,57,49,0,47,236,23,57,48,1,75,176,16,84,88,189,0,12,0,64,0,1,0,12,0,12,255,192,56,17,55,56,89,64,19, + 16,13,64,13,80,13,96,13,115,4,122,10,112,13,224,13,240,13,9,93,19,51,17,55,23,7,17,35,17,7,39,55,199,184,125,76,201,184,123,74, + 197,6,20,253,166,90,106,141,252,227,2,154,88,106,141,0,255,255,0,201,0,0,5,51,7,108,16,39,22,186,4,197,1,118,19,6,0,49,0,0, + 0,7,64,3,79,0,1,93,49,0,0,0,255,255,0,186,0,0,4,100,6,109,16,38,0,118,66,7,19,6,0,81,0,0,0,9,64,5,63,0, + 79,0,2,93,49,0,0,0,255,255,0,201,254,30,5,51,5,213,16,39,2,215,5,0,0,10,18,6,0,49,0,0,255,255,0,186,254,30,4,100, + 4,123,16,39,2,215,4,144,0,10,18,6,0,81,0,0,255,255,0,201,0,0,5,51,7,95,18,38,0,49,0,0,17,7,22,190,4,245,1,103, + 0,20,180,4,15,11,0,7,43,64,9,47,15,32,11,31,15,16,11,4,93,49,0,0,255,255,0,186,0,0,4,100,6,102,18,38,0,81,0,0, + 17,7,2,137,0,141,0,0,0,16,180,0,25,21,12,7,43,64,5,15,25,0,21,2,93,49,0,0,255,255,0,205,0,0,5,185,5,213,16,39, + 0,81,1,85,0,0,16,6,2,126,27,0,0,1,0,201,254,86,5,25,5,240,0,28,0,59,64,13,25,22,18,24,28,28,18,10,5,28,7,65, + 29,16,252,75,176,16,84,88,185,0,7,255,192,56,89,236,50,212,252,204,17,49,0,64,12,25,149,22,176,7,2,149,14,145,8,129,7,47,228,244, + 236,16,244,236,48,1,16,33,34,6,21,17,35,17,51,21,54,55,54,51,50,18,25,1,20,7,6,43,1,53,51,50,54,53,4,80,254,205,179,215, + 202,202,78,105,106,153,227,233,81,82,181,87,49,102,79,3,127,1,172,255,222,252,178,5,213,241,134,67,67,254,193,254,204,252,111,213,97,96,156,90, + 160,0,0,0,0,1,0,186,254,86,4,100,4,123,0,31,0,59,64,28,13,19,0,3,24,21,7,135,6,16,135,24,28,184,22,188,21,7,13,8, + 0,78,19,23,8,22,70,32,16,252,236,50,244,236,196,49,0,47,228,244,196,236,212,236,17,18,23,57,48,180,96,33,207,33,2,1,93,1,17,20, + 7,6,43,1,53,51,50,55,54,53,17,52,38,35,34,6,21,17,35,17,51,21,54,55,54,51,50,23,22,4,100,82,81,181,254,233,105,38,38,124, + 124,149,172,185,185,66,89,90,117,193,99,99,2,164,253,72,214,96,96,156,48,49,153,2,178,159,158,190,164,253,135,4,96,174,101,50,50,119,120,0, + 255,255,0,115,255,227,5,217,7,49,16,39,0,113,1,39,1,59,19,6,0,50,0,0,0,16,180,13,2,3,7,7,43,64,5,31,2,16,3,2, + 93,49,0,0,255,255,0,113,255,227,4,117,5,245,16,38,0,113,115,255,19,6,0,82,0,0,0,8,180,19,2,3,25,7,43,49,255,255,0,115, + 255,227,5,217,7,109,16,39,22,192,5,39,1,117,19,6,0,50,0,0,0,16,180,17,0,8,23,7,43,64,5,16,0,31,8,2,93,49,0,0, + 255,255,0,113,255,227,4,117,6,72,16,38,2,154,115,0,19,6,0,82,0,0,0,8,180,29,8,0,35,7,43,49,255,255,0,115,255,227,5,217, + 7,107,16,39,22,194,5,39,1,117,18,6,0,50,0,0,255,255,0,113,255,227,4,117,6,102,16,39,2,159,0,160,0,0,18,6,0,82,0,0, + 0,2,0,115,0,0,8,12,5,213,0,16,0,25,0,59,64,31,5,149,3,17,1,149,0,129,24,7,149,3,173,9,24,18,16,10,21,6,2,28, + 17,0,4,8,21,25,13,16,26,16,252,236,212,196,196,212,236,50,18,57,57,57,57,49,0,47,236,236,50,244,236,50,16,238,48,1,21,33,17,33, + 21,33,17,33,21,33,32,0,17,16,0,33,23,35,32,0,17,16,0,33,51,7,250,253,26,2,199,253,57,2,248,251,215,254,79,254,65,1,191,1, + 177,103,129,254,191,254,192,1,64,1,65,129,5,213,170,254,70,170,253,227,170,1,124,1,112,1,109,1,124,170,254,225,254,224,254,223,254,223,0,0, + 0,3,0,113,255,227,7,195,4,123,0,6,0,39,0,51,0,132,64,49,7,8,0,16,134,15,136,12,0,169,8,46,12,185,22,19,40,3,185,8, + 187,34,37,31,184,25,19,140,52,6,0,22,34,49,9,15,0,8,7,75,49,18,9,81,43,18,28,69,52,16,252,236,244,252,244,236,196,17,18,57, + 57,18,57,49,0,16,228,50,244,60,196,228,236,50,16,196,238,50,16,238,16,244,238,17,18,57,48,64,37,63,53,95,53,112,53,159,53,207,53,208, + 53,240,53,7,63,0,63,6,63,7,63,8,63,9,5,111,0,111,6,111,7,111,8,111,9,5,93,113,1,93,1,46,1,35,34,6,7,5,21,33, + 30,1,51,50,54,55,21,14,1,35,34,38,39,14,1,35,34,0,17,16,0,51,50,22,23,62,1,51,50,0,37,34,6,21,20,22,51,50,54,53, + 52,38,7,10,2,164,137,153,185,14,3,72,252,178,12,204,183,106,200,98,100,208,106,160,242,81,71,209,140,241,254,239,1,17,241,140,211,66,78,232, + 143,226,1,8,250,176,148,172,171,149,147,172,172,2,148,152,179,174,158,53,90,190,199,52,52,174,42,44,110,109,110,109,1,57,1,19,1,20,1,56, + 111,108,107,112,254,221,135,231,201,201,231,232,200,199,233,0,255,255,0,201,0,0,5,84,7,108,16,39,22,186,4,149,1,118,18,6,0,53,0,0, + 255,255,0,186,0,0,3,148,6,109,16,38,0,118,66,7,18,6,0,85,0,0,0,0,255,255,0,201,254,30,5,84,5,213,16,39,2,215,5,16, + 0,10,18,6,0,53,0,0,255,255,0,130,254,30,3,74,4,123,16,39,2,215,3,24,0,10,18,6,0,85,0,0,255,255,0,201,0,0,5,84, + 7,95,18,38,0,53,0,0,17,7,22,190,4,125,1,103,0,8,0,64,3,95,29,1,93,48,0,0,255,255,0,186,0,0,3,90,6,102,18,38, + 0,85,0,0,17,6,2,137,27,0,0,16,180,17,23,19,9,7,43,64,5,15,23,0,19,2,93,49,255,255,0,135,255,227,4,162,7,108,16,39, + 22,186,4,149,1,118,18,6,0,54,0,0,255,255,0,111,255,227,3,199,6,109,16,38,0,118,66,7,18,6,0,86,0,0,0,0,255,255,0,135, + 255,227,4,162,7,109,16,39,22,189,4,147,1,117,19,6,0,54,0,0,0,11,180,4,32,21,41,41,16,73,99,58,49,0,0,0,255,255,0,111, + 255,227,3,199,6,102,16,38,2,136,37,0,19,6,0,86,0,0,0,11,180,4,32,21,41,41,16,73,99,58,49,0,255,255,0,135,254,117,4,162, + 5,240,18,38,0,54,0,0,16,7,0,122,0,139,0,0,255,255,0,111,254,117,3,199,4,123,18,38,0,86,0,0,16,6,0,122,23,0,0,0, + 255,255,0,135,255,227,4,162,7,109,18,38,0,54,0,0,17,7,22,190,4,139,1,117,0,11,180,43,32,14,34,34,16,73,99,58,49,0,0,0, + 255,255,0,111,255,227,3,199,6,102,18,38,0,86,0,0,17,7,2,189,4,39,0,0,0,11,180,43,32,14,34,34,16,73,99,58,49,0,0,0, + 255,255,255,250,254,117,4,233,5,213,16,38,0,122,80,0,18,6,0,55,0,0,0,0,255,255,0,55,254,117,2,242,5,158,16,38,0,122,225,0, + 18,6,0,87,0,0,0,0,255,255,255,250,0,0,4,233,7,95,18,38,0,55,0,0,17,7,22,190,4,115,1,103,0,16,180,1,13,9,0,7, + 43,49,0,64,3,95,8,1,93,48,0,0,255,255,0,55,0,0,2,254,6,130,18,38,0,87,0,0,17,7,22,184,2,55,0,112,0,7,64,3, + 143,20,1,93,49,0,0,0,0,1,255,250,0,0,4,233,5,213,0,15,0,70,64,24,7,11,149,4,12,9,3,15,149,0,129,9,5,1,64,7, + 3,28,12,0,64,10,14,16,16,212,60,228,204,252,60,228,204,49,0,47,244,236,50,16,212,60,236,50,48,1,64,19,0,17,31,0,16,1,16,2, + 31,15,16,17,64,17,112,17,159,17,9,93,3,33,21,33,17,33,21,33,17,35,17,33,53,33,17,33,6,4,239,253,238,1,9,254,247,203,254,247, + 1,9,253,238,5,213,170,253,192,170,253,191,2,65,170,2,64,0,0,0,0,1,0,55,0,0,2,242,5,158,0,29,0,67,64,31,8,22,169,5, + 23,4,26,169,0,1,27,188,13,135,16,16,13,14,2,6,8,4,0,8,23,27,21,25,29,70,30,16,252,60,60,196,50,252,60,60,196,196,50,57, + 57,49,0,47,236,244,60,196,252,60,220,60,236,50,48,178,175,31,1,1,93,1,17,33,21,33,21,33,21,33,21,20,23,22,59,1,21,35,34,39, + 38,61,1,35,53,51,53,35,53,51,17,1,119,1,123,254,133,1,123,254,133,37,38,115,189,189,213,81,81,135,135,135,135,5,158,254,194,143,233,142, + 233,137,39,39,154,80,79,210,233,142,233,143,1,62,0,0,255,255,0,178,255,227,5,41,7,94,16,39,22,187,4,238,1,117,19,6,0,56,0,0, + 0,16,180,31,9,24,39,7,43,64,5,16,9,31,24,2,93,49,0,0,255,255,0,174,255,227,4,88,6,55,16,39,2,158,0,131,0,0,19,6, + 0,88,0,0,0,8,180,30,8,22,38,7,43,49,0,0,255,255,0,178,255,227,5,41,7,49,16,39,0,113,0,238,1,59,19,6,0,56,0,0, + 0,20,180,5,3,2,13,7,43,64,9,47,2,32,3,31,2,16,3,4,93,49,0,0,255,255,0,174,255,227,4,88,5,245,16,39,0,113,0,131, + 255,255,19,6,0,88,0,0,0,8,180,6,3,2,14,7,43,49,0,0,255,255,0,178,255,227,5,41,7,109,16,39,22,192,4,238,1,117,19,6, + 0,56,0,0,0,16,180,15,0,8,23,7,43,64,5,16,0,31,8,2,93,49,0,0,255,255,0,174,255,227,4,88,6,72,16,39,2,154,0,131, + 0,0,19,6,0,88,0,0,0,8,180,16,0,8,24,7,43,49,0,0,255,255,0,178,255,227,5,41,7,111,18,38,0,56,0,0,16,7,2,156, + 0,240,0,105,255,255,0,174,255,227,4,88,6,202,18,38,0,88,0,0,17,6,2,156,124,196,0,9,64,5,64,21,64,33,2,93,49,0,0,0, + 255,255,0,178,255,227,5,41,7,107,16,39,22,194,4,238,1,117,18,6,0,56,0,0,255,255,0,174,255,227,4,94,6,102,16,39,2,159,0,176, + 0,0,18,6,0,88,0,0,255,255,0,178,254,117,5,41,5,213,18,38,0,56,0,0,16,7,2,157,0,250,0,0,255,255,0,174,254,117,4,232, + 4,123,18,38,0,88,0,0,16,7,2,157,2,39,0,0,255,255,0,68,0,0,7,166,7,116,16,39,22,189,5,245,1,124,19,6,0,58,0,0, + 0,8,180,21,2,6,20,7,43,49,0,0,255,255,0,86,0,0,6,53,6,109,16,39,2,136,1,69,0,7,19,6,0,90,0,0,0,8,180,21, + 2,6,20,7,43,49,0,0,255,255,255,252,0,0,4,231,7,116,16,39,22,189,4,114,1,124,19,6,0,60,0,0,0,8,180,11,2,6,7,7, + 43,49,0,0,255,255,0,61,254,86,4,127,6,109,16,38,2,136,94,7,19,6,0,92,0,0,0,8,180,24,2,6,23,7,43,49,255,255,255,252, + 0,0,4,231,7,78,18,38,0,60,0,0,17,7,22,185,4,115,1,117,0,8,180,0,16,11,4,7,43,49,0,0,255,255,0,92,0,0,5,31, + 7,108,16,39,22,186,4,149,1,118,18,6,0,61,0,0,255,255,0,88,0,0,3,219,6,109,16,38,0,118,66,7,18,6,0,93,0,0,0,0, + 255,255,0,92,0,0,5,31,7,80,16,39,22,193,4,190,1,117,18,6,0,61,0,0,255,255,0,88,0,0,3,219,6,20,16,39,2,184,4,23, + 0,0,19,6,0,93,0,0,0,14,1,64,9,79,10,95,10,175,10,223,10,4,93,49,255,255,0,92,0,0,5,31,7,109,18,38,0,61,0,0, + 16,7,22,190,4,190,1,117,255,255,0,88,0,0,3,219,6,102,18,38,0,93,0,0,17,6,2,137,27,0,0,16,180,1,15,11,0,7,43,64, + 5,15,15,0,11,2,93,49,0,1,0,47,0,0,2,248,6,20,0,16,0,35,64,18,11,135,10,151,1,2,169,5,188,1,10,16,8,4,6,2, + 76,17,16,252,60,204,252,204,49,0,47,244,236,16,244,236,48,33,35,17,35,53,51,53,52,54,59,1,21,35,34,7,6,21,1,152,185,176,176,174, + 189,174,176,99,39,38,3,209,143,78,187,171,153,40,41,103,0,2,0,32,255,227,4,164,6,20,0,15,0,44,0,68,64,37,4,185,16,20,12,185, + 32,28,140,20,184,34,41,37,169,44,36,39,151,34,46,69,0,18,24,71,42,32,6,44,40,8,37,35,39,70,45,16,252,60,204,236,50,50,50,204, + 244,236,236,49,0,47,244,220,60,236,50,16,228,244,196,236,16,198,238,48,1,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54,1,54,55,54, + 51,50,23,22,17,16,7,6,35,34,39,38,39,21,35,17,35,53,51,53,51,21,33,21,33,3,229,83,84,146,146,84,83,83,84,146,146,84,83,253, + 142,58,89,88,123,204,127,128,128,127,204,123,88,89,58,185,154,154,185,1,69,254,187,2,47,203,116,115,115,116,203,203,116,115,115,116,2,82,100,48, + 49,162,162,254,248,254,248,162,162,49,48,100,168,5,4,125,147,147,125,0,0,3,255,151,0,0,5,80,5,213,0,8,0,17,0,41,0,67,64,35, + 25,0,149,10,9,149,18,129,1,149,10,173,31,17,11,8,2,19,25,31,5,0,14,28,22,5,25,28,46,9,0,28,18,4,42,16,252,236,50,252, + 236,212,236,17,23,57,57,57,49,0,47,236,236,244,236,16,238,57,48,178,15,34,1,1,93,1,17,33,50,54,53,52,38,35,1,17,33,50,54,53, + 52,38,35,37,33,50,22,21,20,6,7,30,1,21,20,4,35,33,17,34,6,29,1,35,53,52,54,1,247,1,68,163,157,157,163,254,188,1,43,148, + 145,145,148,254,11,2,4,231,250,128,124,149,165,254,240,251,253,232,132,118,156,192,2,201,253,221,135,139,140,133,2,102,254,62,111,114,113,112,166,192, + 177,137,162,20,32,203,152,200,218,5,48,95,105,49,70,181,163,0,0,0,255,255,0,201,0,0,4,236,5,213,18,6,3,165,0,0,0,2,0,186, + 255,227,4,164,6,20,0,22,0,38,0,56,64,31,27,185,0,4,35,185,16,12,140,4,184,18,22,169,19,151,18,40,69,20,23,18,8,71,16,31, + 22,8,19,70,39,16,252,236,50,50,244,236,196,236,49,0,47,244,236,16,228,244,196,236,16,198,238,48,1,54,55,54,51,50,23,22,17,16,7,6, + 35,34,39,38,39,21,35,17,33,21,37,1,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54,1,115,58,89,88,123,204,127,128,128,127,204,123, + 88,89,58,185,3,78,253,107,2,114,83,84,146,146,84,83,83,84,146,146,84,83,3,182,100,48,49,162,162,254,248,254,248,162,162,49,48,100,168,6, + 20,166,1,252,192,203,116,115,115,116,203,203,116,115,115,116,0,2,0,0,0,0,4,236,5,213,0,10,0,23,0,51,64,12,23,11,25,0,25,16, + 46,5,11,28,21,22,47,220,236,50,252,236,196,16,204,49,64,9,5,149,12,173,11,129,6,149,20,0,47,236,228,244,236,179,21,21,11,20,17,18, + 57,47,48,1,52,39,38,35,33,17,33,50,55,54,1,17,33,50,4,21,20,4,35,33,17,35,1,4,23,79,78,163,254,188,1,68,163,78,79,253, + 124,1,78,251,1,16,254,240,251,253,232,201,1,56,1,183,139,68,67,253,221,68,67,4,168,253,154,218,222,221,218,4,68,1,145,0,0,2,0,0, + 255,227,4,164,6,21,0,18,0,30,0,62,64,13,17,18,32,19,18,6,71,13,25,18,8,15,16,47,220,236,50,50,244,236,196,16,204,49,64,14, + 0,22,185,3,184,14,12,28,185,9,140,17,151,14,0,47,228,244,236,196,16,244,236,196,179,15,15,17,14,17,18,57,47,48,1,62,1,51,50,0, + 17,16,2,35,34,38,39,21,35,17,35,1,51,1,52,38,35,34,6,21,20,22,51,50,54,1,115,58,177,123,204,0,255,255,204,123,177,58,185,186, + 1,34,81,2,114,167,146,146,167,167,146,146,167,3,182,100,97,254,188,254,248,254,248,254,188,97,100,168,4,68,1,209,252,26,203,231,231,203,203,231, + 231,0,0,0,0,1,0,115,255,227,5,39,5,240,0,25,0,48,64,27,25,134,0,136,22,149,3,145,26,13,134,12,136,16,149,9,140,26,27,16, + 19,25,6,48,13,0,26,16,220,60,244,236,236,49,0,16,244,236,244,236,16,244,236,244,236,48,19,62,1,51,32,0,17,16,0,33,34,38,39,53, + 30,1,51,32,0,17,16,0,33,34,6,7,115,104,237,134,1,83,1,134,254,122,254,173,132,237,106,102,231,130,1,0,1,16,254,240,255,0,130,231, + 102,5,98,71,71,254,97,254,152,254,153,254,97,72,72,211,95,94,1,57,1,39,1,40,1,57,94,95,0,1,0,115,255,227,6,90,7,100,0,36, + 0,68,64,34,33,149,32,37,13,161,14,174,10,149,17,1,161,0,174,4,149,23,145,17,140,37,32,7,25,20,27,17,13,0,48,20,16,37,16,252, + 252,50,236,16,236,196,49,0,16,228,244,236,244,236,16,238,246,238,16,220,236,48,180,15,38,31,38,2,1,93,1,21,46,1,35,32,0,17,16,0, + 33,50,54,55,21,14,1,35,32,0,17,16,0,33,50,23,22,23,54,55,54,59,1,21,35,34,6,5,39,102,231,130,255,0,254,240,1,16,1,0, + 130,231,102,106,237,132,254,173,254,122,1,134,1,83,96,156,13,12,16,83,102,227,77,63,134,110,5,98,213,95,94,254,199,254,216,254,217,254,199,94, + 95,211,72,72,1,159,1,103,1,104,1,159,36,3,4,195,98,122,170,150,0,1,0,113,255,227,4,204,6,20,0,34,0,78,64,36,0,134,1,136, + 4,14,134,13,136,10,185,17,4,185,23,184,17,140,35,1,135,30,151,35,7,18,20,25,8,30,13,0,72,20,69,35,16,252,244,50,204,236,16,236, + 49,0,16,244,236,16,228,244,236,16,254,244,238,16,245,238,48,64,11,15,36,16,36,128,36,144,36,160,36,5,1,93,1,21,46,1,35,34,6,21, + 20,22,51,50,54,55,21,14,1,35,34,0,17,16,0,33,50,23,53,52,54,59,1,21,35,34,6,3,231,78,157,80,179,198,198,179,80,157,78,77, + 165,93,253,254,214,1,45,1,6,71,70,161,181,69,48,105,76,4,126,245,43,43,227,205,205,227,43,43,170,36,36,1,62,1,14,1,18,1,58,12, + 15,214,192,156,97,0,0,0,255,255,0,10,0,0,5,186,5,213,16,6,0,146,0,0,0,2,255,151,0,0,6,20,5,213,0,8,0,26,0,46, + 64,21,0,149,9,129,1,149,16,8,2,16,10,0,5,25,13,50,0,28,9,4,27,16,252,236,244,236,17,57,57,57,57,49,0,47,236,244,236,48, + 178,96,19,1,1,93,1,17,51,32,0,17,16,0,33,37,33,32,0,17,16,0,41,1,17,34,6,29,1,35,53,52,54,1,247,244,1,53,1,31, + 254,225,254,203,254,66,1,159,1,178,1,150,254,104,254,80,254,97,132,118,156,192,5,47,251,119,1,24,1,46,1,44,1,23,166,254,151,254,128,254, + 126,254,150,5,48,95,105,49,70,181,163,0,0,2,0,201,0,0,4,236,5,213,0,7,0,20,0,46,64,12,22,8,4,19,28,10,46,0,25,14, + 16,21,16,252,236,244,236,50,196,196,49,64,12,19,149,9,129,10,4,149,18,173,3,149,10,0,47,236,244,236,16,244,236,48,1,16,41,1,17,33, + 34,6,17,33,17,33,34,36,53,52,36,51,33,17,33,1,158,1,64,1,68,254,188,163,157,3,78,253,232,251,254,240,1,16,251,1,78,253,124,1, + 183,254,239,2,35,135,3,147,250,43,218,222,221,218,1,192,0,2,0,113,255,227,4,90,6,20,0,18,0,30,0,63,64,29,28,185,17,14,22,185, + 5,8,140,14,184,3,18,135,1,151,3,25,4,17,8,2,71,0,19,18,11,69,31,16,252,236,196,244,236,50,50,49,0,47,252,236,16,228,244,196, + 236,16,196,238,48,182,96,32,128,32,160,32,3,1,93,1,53,33,17,35,53,14,1,35,34,2,17,16,0,51,50,22,23,17,1,20,22,51,50,54, + 53,52,38,35,34,6,1,13,3,77,184,58,177,124,203,255,0,255,203,124,177,58,253,141,167,146,146,168,168,146,146,167,5,110,166,249,236,168,100,97, + 1,68,1,8,1,8,1,68,97,100,1,185,252,192,203,231,231,203,203,231,231,0,0,0,0,2,0,113,254,86,4,116,4,99,0,25,0,39,0,84, + 64,20,13,12,11,32,41,69,23,11,18,2,26,18,23,81,6,32,18,17,69,40,16,252,236,196,244,178,127,23,1,93,236,212,236,16,236,17,18,57, + 57,0,64,14,13,12,29,9,6,7,9,185,4,29,185,20,182,40,16,244,236,212,252,212,204,17,18,57,57,64,6,0,37,83,12,13,12,7,14,16, + 236,57,49,48,37,22,21,16,33,34,39,53,22,51,50,53,52,37,38,39,38,17,16,0,51,50,0,3,20,2,3,54,38,35,34,6,21,20,22,23, + 22,23,62,1,3,107,157,254,71,221,120,102,246,246,254,248,208,117,142,1,18,239,240,1,19,1,155,39,1,171,148,148,172,188,126,64,51,99,110,66, + 79,141,254,240,70,153,70,117,92,48,37,112,135,1,15,1,15,1,57,254,199,254,237,156,254,252,1,160,203,229,232,195,194,199,11,6,14,42,220,0, + 0,1,0,131,0,0,4,69,5,213,0,11,0,43,64,9,13,5,9,28,0,11,7,2,12,16,220,196,196,212,236,50,196,49,64,12,10,149,11,129, + 2,6,149,7,173,3,149,2,0,47,236,244,236,16,244,236,48,1,17,33,53,33,17,33,53,33,17,33,53,4,69,252,62,2,248,253,57,2,199,253, + 26,5,213,250,43,170,2,29,170,1,186,170,0,2,0,117,255,227,5,217,5,240,0,19,0,26,0,68,64,38,1,20,0,8,161,7,174,4,0,149, + 20,23,149,17,0,149,20,173,4,149,11,145,17,140,27,1,20,26,26,25,15,51,20,25,7,0,16,27,16,252,196,236,244,236,17,18,57,49,0,16, + 228,244,236,244,228,16,238,16,238,16,244,238,17,18,57,48,19,33,16,0,33,34,6,7,53,54,36,51,32,0,17,16,0,33,32,0,55,22,0,51, + 50,0,55,117,4,143,254,237,254,238,139,252,112,111,1,7,146,1,94,1,139,254,136,254,198,254,183,254,151,220,13,0,255,202,202,0,255,13,3,12, + 1,12,1,50,96,95,215,70,72,254,103,254,146,254,159,254,91,1,183,204,195,254,228,1,28,195,0,0,0,1,0,164,255,227,4,123,5,240,0,40, + 0,64,64,36,10,134,9,136,13,149,6,145,41,0,22,149,19,173,41,31,134,32,136,28,149,35,140,41,42,20,9,31,16,25,3,25,25,38,16,41, + 16,252,236,212,236,212,196,196,204,49,0,16,244,236,244,236,16,244,236,57,16,244,236,244,236,48,1,46,1,53,52,36,51,50,22,23,21,46,1,35, + 34,6,21,20,22,59,1,21,35,34,6,21,20,22,51,50,54,55,21,14,1,35,32,36,53,52,54,1,216,131,142,1,12,230,89,201,115,114,190,83, + 152,163,158,149,182,174,165,185,199,190,109,200,84,106,199,94,254,232,254,208,163,3,37,33,171,124,178,209,32,32,180,38,36,123,115,112,119,166,149,132, + 143,150,50,49,195,37,37,242,221,144,196,0,0,1,255,150,254,102,4,35,5,213,0,17,0,65,64,31,17,8,18,13,149,12,176,18,6,149,4,2, + 149,0,129,4,173,18,17,8,0,7,12,5,1,7,3,28,0,4,18,16,252,236,50,212,196,196,17,18,57,57,49,0,16,236,244,236,16,238,16,244, + 236,16,57,57,48,178,15,11,1,1,93,19,33,21,33,17,33,21,33,17,16,6,43,1,53,51,50,54,53,201,3,90,253,112,2,80,253,176,205,227, + 77,63,134,110,5,213,170,254,72,170,253,159,254,242,244,170,150,194,0,0,0,1,255,127,254,86,2,248,6,20,0,27,0,101,64,35,19,10,15,135, + 13,189,29,5,24,1,20,8,169,6,1,135,0,151,22,6,188,28,2,27,7,0,7,9,5,8,21,23,19,76,28,16,252,75,176,10,84,88,185,0, + 19,0,64,56,89,75,176,22,84,88,185,0,19,255,192,56,89,60,196,252,60,196,196,18,57,57,49,0,16,228,50,252,236,16,238,50,18,57,57,16, + 244,236,57,57,48,1,182,64,29,80,29,160,29,3,93,1,21,35,34,6,29,1,33,21,33,17,20,6,43,1,53,51,50,54,53,17,35,53,51,53, + 52,54,51,2,248,176,99,77,1,47,254,209,174,189,174,176,99,77,176,176,174,189,6,20,153,80,104,99,143,251,235,187,171,153,80,104,4,42,143,78, + 187,171,0,0,0,1,0,115,255,227,6,151,7,100,0,38,0,73,64,16,21,2,0,28,4,17,28,26,52,4,51,33,25,11,70,39,16,252,236,252, + 244,236,16,252,196,196,49,64,24,22,149,21,39,0,5,36,1,149,3,36,149,8,27,161,26,174,30,149,14,145,8,140,39,0,16,228,244,236,244,236, + 16,254,212,238,17,57,57,16,220,236,48,37,17,33,53,33,17,6,4,35,32,0,17,16,0,33,50,22,23,52,54,59,1,21,35,34,6,29,1,46, + 1,35,32,0,17,16,0,33,50,54,4,195,254,182,2,18,117,254,230,160,254,162,254,117,1,139,1,94,91,163,68,201,227,77,63,134,110,112,252,139, + 254,238,254,237,1,19,1,18,107,168,213,1,145,166,253,127,83,85,1,153,1,109,1,110,1,153,25,25,188,234,170,150,194,215,95,96,254,206,254,209, + 254,210,254,206,37,0,0,0,0,2,0,8,254,82,5,118,5,213,0,15,0,37,0,149,64,13,39,80,18,1,18,4,25,23,12,25,31,36,38,16, + 212,212,236,212,236,212,93,196,181,16,8,0,3,4,12,17,18,23,57,49,64,10,0,149,27,189,17,37,18,36,129,38,0,16,228,50,50,50,244,236, + 179,31,23,8,27,17,18,57,57,48,64,12,19,17,17,18,18,8,35,37,17,36,36,8,7,5,16,236,60,7,16,236,60,182,19,17,8,18,8,36, + 8,7,8,16,236,182,35,17,8,36,8,18,8,7,8,16,236,180,16,37,19,17,35,15,64,16,22,21,20,3,23,19,36,8,34,33,32,3,31,35, + 18,8,4,7,17,18,23,57,7,17,18,23,57,1,50,55,54,53,52,39,38,39,6,7,6,21,20,23,22,19,1,51,1,22,23,22,21,20,7,6, + 35,34,39,38,53,52,55,54,55,1,51,2,191,54,44,28,31,51,44,44,51,31,28,44,54,1,217,222,253,186,104,67,46,75,100,155,155,100,75,46, + 67,104,253,186,222,254,253,32,20,66,57,73,121,92,92,121,73,57,66,20,32,3,122,3,94,251,207,200,174,119,66,139,65,87,87,65,139,66,119,174, + 200,4,49,0,0,1,0,186,0,0,7,71,6,20,0,42,0,79,64,17,44,13,18,4,8,17,42,21,8,38,78,31,27,8,29,70,43,16,252,236, + 50,244,236,196,196,204,212,236,57,49,0,64,25,8,135,9,39,20,38,0,135,17,21,27,38,3,32,17,24,135,32,9,35,184,30,151,17,28,47,60, + 236,244,60,196,236,17,18,23,57,16,236,18,57,57,16,236,48,37,50,55,54,53,52,39,38,39,53,22,23,22,17,20,0,43,1,34,38,53,17,52, + 38,35,34,6,21,17,35,17,51,17,62,1,51,50,22,21,17,20,22,51,5,76,149,84,87,74,62,121,224,109,111,254,224,221,70,187,157,124,124,149, + 172,185,185,66,179,117,193,198,76,105,156,98,101,155,222,112,95,33,148,29,143,145,254,236,245,254,230,200,206,1,8,159,158,190,164,253,135,6,20,253, + 158,101,100,239,232,254,242,147,103,0,0,0,0,1,0,201,0,0,2,198,5,213,0,11,0,46,64,16,11,2,0,6,149,0,129,7,5,8,6,1, + 28,0,4,12,16,252,75,176,16,84,88,185,0,0,0,64,56,89,236,196,57,57,49,0,47,228,236,17,57,57,48,1,19,51,17,20,22,59,1,21, + 35,34,38,17,201,202,110,134,63,77,227,205,5,213,252,45,194,150,170,244,1,14,0,0,0,1,0,10,0,0,2,82,5,213,0,11,0,69,64,17, + 2,11,149,5,8,0,175,6,3,5,1,28,10,8,0,4,12,16,252,60,196,75,176,16,84,88,187,0,8,0,64,0,0,0,64,56,56,89,236,50, + 196,49,0,47,236,220,60,244,50,48,1,64,13,48,13,64,13,80,13,96,13,143,13,159,13,6,93,19,51,17,51,21,35,17,35,17,35,53,51,201, + 202,191,191,202,191,191,5,213,253,22,170,253,191,2,65,170,0,1,0,201,0,0,5,247,5,240,0,23,0,102,64,14,0,28,1,7,8,15,7,9, + 11,15,28,14,4,24,16,252,236,50,212,196,17,57,16,212,236,0,49,0,64,37,11,17,8,9,8,10,17,9,9,8,17,17,7,8,7,16,17,8, + 8,7,66,11,8,16,3,14,12,23,2,5,149,19,145,14,175,12,9,47,60,236,244,236,57,57,17,18,23,57,48,75,83,88,7,16,4,237,7,16, + 5,237,7,16,5,237,7,16,4,237,89,34,1,35,53,52,38,35,34,7,9,1,33,1,17,35,17,51,17,1,54,51,50,23,22,21,5,247,170,73, + 38,70,37,253,221,3,26,254,246,253,51,202,202,2,108,85,113,136,85,85,4,72,121,54,80,35,253,249,252,227,2,207,253,49,5,213,253,137,2,67, + 79,92,91,110,0,1,0,185,0,0,4,156,6,20,0,18,0,203,64,11,4,13,9,12,14,16,9,8,0,70,19,16,252,236,50,212,196,17,57,196, + 49,0,64,15,66,16,13,10,3,11,17,6,149,3,151,11,188,17,14,47,60,228,252,228,17,18,23,57,48,75,83,88,64,20,16,17,13,14,13,15, + 17,14,14,13,11,17,12,13,12,10,17,13,13,12,7,16,4,237,7,16,5,237,7,16,5,237,7,16,4,237,89,178,16,20,1,1,93,64,53,11, + 11,10,15,40,11,39,12,40,13,43,14,43,15,64,20,104,11,96,20,137,11,133,12,137,13,141,14,143,15,154,11,151,15,170,11,167,13,182,15,197, + 15,214,15,247,11,240,11,247,12,240,12,26,93,180,9,13,9,14,2,113,0,64,37,4,10,10,16,22,10,39,10,41,13,43,16,86,10,102,10,103, + 16,115,10,119,13,130,10,137,13,142,16,147,10,150,13,151,16,163,10,18,93,19,52,54,59,1,21,35,34,6,21,17,1,51,9,1,35,1,17,35, + 185,163,181,191,168,105,76,2,37,235,253,174,2,107,240,253,199,185,4,126,214,192,156,97,153,253,255,1,227,253,244,253,172,2,35,253,221,0,0,0, + 0,1,0,10,0,0,2,42,6,20,0,11,0,50,64,7,5,1,8,8,0,70,12,16,252,60,236,50,49,0,64,8,2,11,169,5,8,0,151,6, + 47,236,212,60,236,50,48,64,13,16,13,64,13,80,13,96,13,112,13,240,13,6,1,93,19,51,17,51,21,35,17,35,17,35,53,51,193,184,177,177, + 184,183,183,6,20,253,56,144,253,68,2,188,144,0,0,0,0,1,0,61,0,0,4,127,6,20,0,15,0,160,64,19,8,2,11,5,1,14,7,13, + 8,12,6,9,4,6,17,12,6,0,16,16,212,196,178,128,6,1,93,212,196,16,196,204,17,18,23,57,180,16,9,64,9,2,93,49,0,64,15,8, + 2,11,5,1,14,6,6,0,4,9,6,151,13,0,47,60,244,196,196,17,18,23,57,48,64,50,10,3,169,2,169,11,169,5,8,4,12,7,9,4, + 15,17,0,14,17,1,13,6,1,0,5,17,2,17,14,17,15,14,1,17,0,1,13,17,12,7,12,11,17,8,17,7,17,13,6,13,7,5,16,236, + 236,236,7,16,5,236,8,236,8,236,5,236,236,7,8,16,236,5,16,236,7,8,16,60,60,236,236,14,252,60,51,1,39,5,39,37,39,51,23,37, + 23,5,1,35,9,1,61,1,235,71,254,212,33,1,41,75,200,52,1,58,33,254,201,1,237,195,254,198,254,126,4,50,188,101,99,99,197,138,104,97, + 104,250,215,3,60,252,196,0,0,1,0,178,255,227,7,39,5,213,0,39,0,74,64,18,0,18,20,32,29,28,41,31,80,18,28,20,80,10,28,8, + 4,40,16,252,236,252,252,252,204,252,60,17,18,57,49,0,64,22,7,20,10,28,17,0,6,33,8,14,24,149,33,3,36,140,40,18,29,8,129,32, + 47,244,60,60,16,244,60,196,236,50,17,18,23,57,48,57,37,14,1,35,34,39,38,53,17,51,17,20,23,22,51,50,54,53,17,51,17,20,23,22, + 51,50,55,54,53,17,51,17,35,53,14,1,35,34,39,38,3,166,69,192,130,175,95,95,203,39,57,117,143,166,203,57,57,119,123,83,83,203,203,63, + 176,121,122,86,85,213,124,118,123,122,226,4,27,251,239,186,53,78,190,164,3,236,251,239,162,78,77,95,96,163,3,236,250,41,174,103,98,62,62,0, + 0,1,255,150,254,102,5,51,5,213,0,17,0,140,64,41,7,17,1,2,1,2,17,6,7,6,66,8,17,0,13,149,12,176,18,7,2,3,0,175, + 5,6,1,7,2,28,4,54,11,14,12,57,7,28,0,4,18,16,252,236,228,57,57,252,236,17,57,57,49,0,47,236,50,57,57,16,252,236,17,57, + 57,48,75,83,88,7,16,4,237,7,16,4,237,89,34,178,31,11,1,1,93,64,48,54,2,56,7,72,2,71,7,105,2,102,7,128,2,7,6,1, + 9,6,21,1,26,6,70,1,73,6,87,1,88,6,101,1,105,6,121,6,133,1,138,6,149,1,154,6,159,19,16,93,0,93,19,33,1,17,51,17, + 33,1,17,16,6,43,1,53,51,50,54,53,201,1,16,2,150,196,254,240,253,106,205,227,71,63,134,110,5,213,251,31,4,225,250,43,4,225,251,135, + 254,242,244,170,150,194,0,0,255,255,0,186,254,86,4,100,4,123,16,6,3,75,0,0,0,3,0,115,255,227,5,217,5,240,0,11,0,18,0,25, + 0,49,64,11,25,16,25,6,51,15,19,25,0,16,26,16,252,236,50,244,236,50,49,0,64,15,22,149,9,19,149,15,173,26,12,149,3,145,9,140, + 26,16,228,244,236,16,244,236,16,236,48,19,16,0,33,32,0,17,16,0,33,32,0,1,34,0,7,33,38,2,1,26,1,51,50,18,19,115,1,121, + 1,58,1,59,1,120,254,136,254,197,254,198,254,135,2,181,202,255,0,12,3,172,14,254,253,86,8,251,220,220,248,8,2,233,1,98,1,165,254,91, + 254,159,254,158,254,91,1,164,3,197,254,228,195,195,1,28,253,122,254,255,254,194,1,61,1,2,0,0,255,255,0,103,255,227,6,29,6,20,16,38, + 0,50,244,0,16,7,2,204,5,162,1,52,255,255,0,118,255,227,4,211,4,235,16,39,2,204,4,88,0,11,16,6,0,82,5,0,0,2,0,115, + 255,227,6,207,5,240,0,20,0,31,0,51,64,28,4,149,16,175,0,21,149,13,145,0,27,149,7,140,0,33,19,28,0,30,28,16,4,24,25,10, + 16,32,16,252,236,212,60,236,220,236,196,49,0,47,244,236,16,244,236,16,244,236,48,33,17,52,38,35,17,6,33,32,0,17,16,0,33,50,23,33, + 50,22,25,1,1,34,0,17,16,0,51,50,55,17,38,6,5,110,122,188,254,197,254,198,254,135,1,121,1,59,112,97,1,39,227,205,252,88,220,254, + 253,1,3,220,175,128,138,3,211,194,150,251,139,211,1,164,1,98,1,98,1,165,27,244,254,242,252,45,5,76,254,184,254,230,254,229,254,184,103,4, + 24,70,0,0,0,2,0,113,254,86,5,89,4,123,0,22,0,33,0,58,64,32,5,135,17,188,34,23,185,14,184,34,29,185,8,140,22,189,34,17, + 1,5,35,21,8,1,31,8,5,26,18,11,69,34,16,252,236,212,236,220,236,196,17,18,57,49,0,16,228,244,236,16,244,236,16,244,236,48,1,17, + 52,39,38,35,17,6,35,34,0,17,16,0,51,50,23,51,50,23,22,21,17,1,34,6,21,20,22,51,50,55,17,38,4,161,38,38,105,137,240,241, + 254,239,1,17,241,100,82,216,181,82,81,253,26,148,172,171,149,129,64,84,254,86,4,116,153,49,48,252,188,157,1,57,1,19,1,20,1,56,27,96, + 96,214,251,140,5,137,231,201,201,231,58,2,240,54,0,0,0,2,255,151,0,0,4,241,5,213,0,8,0,28,0,58,64,24,1,149,16,0,149,9, + 129,18,16,10,8,2,4,0,5,25,13,63,17,0,28,9,4,29,16,252,236,50,252,236,17,23,57,49,0,47,244,236,212,236,48,64,11,15,21,31, + 21,63,21,95,21,175,21,5,1,93,1,17,51,50,54,53,52,38,35,37,33,50,4,21,20,4,43,1,17,35,17,34,6,29,1,35,53,52,54,1, + 247,254,141,154,154,141,254,56,1,200,251,1,1,254,255,251,254,202,132,118,156,192,5,47,253,207,146,135,134,146,166,227,219,221,226,253,168,5,48,95, + 105,49,70,181,163,0,0,0,0,2,0,185,254,86,4,164,6,20,0,24,0,36,0,79,64,36,35,185,0,23,29,185,14,17,184,23,140,1,189,37, + 3,12,9,169,6,151,37,26,18,20,71,6,9,3,7,32,12,0,8,2,70,37,16,252,236,50,50,204,17,57,57,244,236,49,0,16,244,236,57,57, + 16,228,228,244,196,236,16,196,238,48,64,9,96,38,128,38,160,38,224,38,4,1,93,37,17,35,17,52,54,59,1,21,35,34,6,29,1,62,1,51, + 50,0,17,16,2,35,34,38,1,52,38,35,34,6,21,20,22,51,50,54,1,115,186,163,181,254,231,105,76,58,177,123,204,0,255,255,204,123,177,2, + 56,167,146,146,167,167,146,146,167,168,253,174,6,40,214,192,156,97,153,200,100,97,254,188,254,248,254,248,254,188,97,1,235,203,231,231,203,203,231,231, + 0,2,0,201,254,248,5,84,5,213,0,21,0,29,0,86,64,23,5,6,3,19,0,9,29,24,16,5,10,26,25,4,19,63,14,22,10,18,12,4, + 30,16,252,236,50,50,252,196,236,17,23,57,17,57,57,57,49,0,64,16,0,23,6,3,4,23,149,9,22,149,15,129,4,13,129,11,47,236,220,244, + 236,212,236,18,57,57,18,57,48,1,64,9,32,31,64,31,117,4,124,5,2,93,1,30,1,23,19,35,3,46,1,43,1,17,35,17,51,17,51,32, + 22,21,20,6,1,17,51,50,54,16,38,35,3,141,65,123,62,205,217,191,74,139,120,220,202,202,254,1,0,252,131,253,137,254,141,154,153,142,1,180, + 22,144,126,254,104,1,127,150,98,254,145,5,213,254,248,214,216,141,186,2,79,253,209,146,1,12,145,0,0,1,0,114,255,227,4,141,5,240,0,33, + 0,100,64,17,7,24,25,6,29,10,15,29,25,4,45,0,34,10,25,21,34,16,220,236,228,252,236,196,17,18,57,57,57,57,49,0,64,25,66,25, + 24,7,6,4,14,33,0,14,161,15,148,12,149,17,32,149,0,148,2,145,17,140,34,16,228,244,228,236,16,238,246,238,16,206,17,23,57,48,75,83, + 88,64,10,24,2,7,6,7,25,2,6,6,7,7,16,14,237,7,16,14,237,89,19,54,32,4,16,6,15,1,14,1,20,22,51,50,55,21,4,35, + 32,39,38,53,52,54,63,1,54,55,54,52,39,38,32,7,204,228,1,198,1,23,202,226,123,154,135,188,173,225,248,254,253,214,254,231,146,145,215,226, + 122,166,60,59,89,90,254,161,228,5,164,76,228,254,143,192,45,24,31,124,236,136,139,208,95,112,112,217,182,217,43,25,31,50,51,217,64,64,109,0, + 0,1,0,100,255,227,3,188,4,123,0,39,0,207,64,17,10,30,29,9,13,33,20,33,8,6,13,8,0,82,26,69,40,16,252,228,236,212,236,196, + 17,18,57,57,57,57,49,64,25,30,29,10,9,4,19,0,134,39,137,36,20,134,19,137,16,185,23,36,185,3,184,23,140,40,0,16,228,244,236,16, + 254,245,238,16,245,238,18,23,57,48,64,18,27,28,2,26,29,83,9,10,32,31,2,33,30,83,10,10,9,66,75,83,88,7,16,14,237,17,23,57, + 7,14,237,17,23,57,89,34,178,0,1,1,1,93,64,17,47,41,63,41,95,41,127,41,128,41,144,41,160,41,240,41,8,93,64,37,32,0,32,39, + 36,38,40,30,40,29,42,21,47,20,47,19,42,18,40,10,40,9,41,8,41,7,36,1,134,30,134,29,134,28,134,27,18,0,93,64,23,28,30,28, + 29,28,28,46,31,44,30,44,29,44,28,59,31,59,30,59,29,59,28,11,113,19,62,1,51,50,22,21,20,6,15,1,14,1,21,20,22,51,50,54, + 55,21,14,1,35,34,38,53,52,54,63,1,62,1,53,52,38,35,34,6,7,160,76,180,102,206,224,152,171,64,171,101,140,130,97,198,102,108,195,90, + 216,247,165,196,63,148,98,137,137,90,168,78,4,63,30,30,172,158,130,149,36,15,37,80,75,81,89,53,53,190,35,35,182,156,137,153,42,14,33,73, + 64,84,84,40,40,0,0,0,255,255,0,201,0,0,4,139,5,213,16,6,3,55,0,0,0,2,254,242,254,86,2,215,6,20,0,22,0,31,0,54, + 64,12,29,14,10,21,6,20,1,8,23,10,79,32,16,252,50,252,50,204,204,16,212,204,49,0,64,15,20,31,135,0,11,27,135,16,151,32,4,135, + 6,189,32,16,252,236,16,244,236,212,60,236,50,48,1,17,20,22,59,1,21,35,34,38,53,17,35,32,53,52,33,50,23,22,23,51,21,37,38,39, + 38,35,34,7,6,51,1,119,77,99,176,174,189,174,190,254,242,1,47,181,82,53,18,191,254,134,8,17,33,110,124,3,3,119,4,106,251,61,104,80, + 153,171,187,4,174,210,216,96,64,111,155,154,44,24,48,65,51,0,0,0,0,1,0,55,254,86,2,242,5,158,0,29,0,63,64,14,14,20,8,8, + 2,9,4,0,8,26,28,24,70,30,16,252,60,196,252,60,220,50,57,252,204,49,0,64,18,24,5,8,25,3,169,0,27,1,188,8,135,21,16,135, + 14,189,21,47,252,236,16,236,244,60,204,236,50,17,57,57,48,1,17,33,21,33,17,20,22,59,1,21,20,6,43,1,53,51,50,55,54,61,1,34, + 38,53,17,35,53,51,17,1,119,1,123,254,133,75,115,189,164,180,70,48,106,38,38,213,167,135,135,5,158,254,194,143,253,160,137,78,174,214,192,156, + 48,49,153,20,159,210,2,96,143,1,62,0,0,1,0,24,0,0,4,233,5,213,0,15,0,88,64,21,13,10,12,6,2,149,0,129,4,0,7,1, + 64,3,28,5,11,28,13,5,16,16,212,212,236,16,252,228,57,57,49,0,47,244,236,50,196,57,57,48,1,75,176,10,84,88,189,0,16,0,64,0, + 1,0,16,0,16,255,192,56,17,55,56,89,64,19,0,17,31,0,16,1,16,2,31,7,16,17,64,17,112,17,159,17,9,93,1,33,21,33,17,35, + 17,35,34,6,29,1,35,53,52,54,1,174,3,59,253,238,203,94,132,118,156,192,5,213,170,250,213,5,43,90,105,49,70,181,163,0,0,1,0,55, + 0,0,2,242,6,20,0,27,0,73,64,16,25,22,11,8,4,23,9,2,4,0,8,16,19,14,70,28,16,252,60,196,252,60,196,50,50,23,57,49, + 0,64,19,19,0,25,135,22,151,10,14,5,8,15,3,169,17,1,188,8,135,10,47,236,244,60,236,50,17,57,57,16,244,236,57,57,48,178,175,21, + 1,1,93,1,21,33,21,33,17,20,22,59,1,21,35,34,38,53,17,35,53,51,53,52,54,59,1,21,35,34,6,1,119,1,123,254,133,75,115,189, + 189,213,162,135,135,174,189,174,176,99,77,4,195,99,143,253,160,137,78,154,159,210,2,96,143,78,187,171,153,81,0,0,0,1,255,250,254,102,4,233, + 5,213,0,15,0,84,64,20,7,149,10,189,16,14,2,149,0,129,16,8,1,64,3,28,0,64,13,16,16,212,228,252,228,196,49,0,16,244,236,50, + 16,244,236,48,1,75,176,10,84,88,189,0,16,0,64,0,1,0,16,0,16,255,192,56,17,55,56,89,64,19,0,17,31,0,16,1,16,2,31,15, + 16,17,64,17,112,17,159,17,9,93,3,33,21,33,17,20,22,59,1,21,35,34,38,25,1,33,6,4,239,253,238,110,134,63,78,227,205,253,238,5, + 213,170,251,61,194,150,170,244,1,14,4,195,255,255,0,173,255,247,6,95,6,20,16,38,0,56,251,20,16,7,2,204,5,228,1,52,255,255,0,176, + 255,227,5,105,4,235,16,39,2,204,4,238,0,11,16,6,0,88,2,0,0,1,0,78,255,227,5,207,5,202,0,31,0,58,64,16,29,26,25,33, + 16,0,4,51,10,17,20,25,13,10,16,32,16,252,196,252,196,16,244,196,236,252,196,49,0,64,14,13,17,1,29,149,30,16,129,32,23,149,7,140, + 32,16,244,236,16,252,60,236,50,50,50,48,1,33,22,18,21,16,0,33,32,0,17,52,18,55,33,53,33,21,6,2,21,20,0,51,50,0,53,52, + 2,39,53,33,5,207,254,192,161,142,254,127,254,209,254,207,254,129,145,158,254,193,2,88,178,199,1,9,216,216,1,8,198,177,2,88,5,24,141,254, + 216,194,254,203,254,119,1,138,1,62,184,1,42,139,178,178,97,254,180,202,239,254,221,1,34,240,202,1,76,97,178,0,0,1,0,201,255,225,5,118, + 5,213,0,27,0,45,64,13,16,21,12,7,8,3,25,12,24,28,21,4,28,16,252,236,212,236,47,60,17,18,57,49,0,64,9,8,22,129,28,0, + 149,16,140,28,16,244,236,16,236,196,48,37,50,0,53,52,39,38,39,53,23,22,18,21,16,7,6,33,39,38,39,38,25,1,51,17,20,22,51,2, + 198,216,1,8,99,65,110,179,161,142,192,191,254,207,77,232,97,103,202,110,134,141,1,34,240,202,166,109,87,68,1,141,254,216,194,254,203,197,196,2, + 6,116,122,1,14,3,240,252,16,194,150,0,0,1,255,252,0,0,5,240,5,240,0,23,0,100,64,15,19,28,20,12,4,11,7,0,64,5,28,9, + 64,7,24,16,212,228,252,228,18,57,196,57,47,236,49,0,64,11,18,21,20,0,149,14,145,11,9,175,6,47,236,57,244,236,204,57,57,48,64,25, + 12,17,4,5,4,11,17,10,11,5,5,4,11,17,12,11,8,9,8,10,17,9,9,8,66,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237, + 7,16,5,237,89,34,1,34,7,6,7,1,17,35,17,1,51,9,1,54,51,50,23,22,29,1,35,53,52,38,4,215,57,21,37,17,254,132,203,253, + 240,217,1,158,1,78,90,163,136,85,85,170,73,5,71,14,24,25,253,191,253,57,2,199,3,14,253,154,1,249,136,92,91,110,131,121,54,80,0,0, + 0,1,0,61,254,86,5,216,4,123,0,31,1,106,64,23,18,14,21,27,31,24,8,21,31,14,13,12,10,9,6,3,0,8,31,4,31,11,32,16, + 212,75,176,10,84,75,176,8,84,91,88,185,0,11,0,64,56,89,75,176,20,84,88,185,0,11,255,192,56,89,196,196,17,23,57,16,212,236,17,57, + 17,18,57,49,0,64,58,7,8,2,9,17,0,31,10,17,11,10,0,0,31,14,17,29,0,31,13,17,12,13,0,0,31,13,17,14,13,10,11,10, + 12,17,11,11,10,66,13,11,9,32,0,11,5,135,3,189,32,27,185,18,184,11,188,23,32,16,196,228,244,236,16,244,236,17,57,17,57,18,57,48, + 75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,7,16,8,237,7,5,237,23,50,89,34,1,64,141,10,0,10,9,6,11,5, + 12,23,1,21,2,16,4,16,5,23,10,20,11,20,12,39,0,36,1,36,2,32,4,32,5,41,8,40,9,37,10,36,11,36,12,39,13,55,0,53, + 1,53,2,48,4,48,5,56,10,54,11,54,12,56,13,65,0,64,1,64,2,64,3,64,4,64,5,64,6,64,7,64,8,66,9,69,10,71,13,84, + 0,81,1,81,2,85,3,80,4,80,5,86,6,85,7,86,8,87,9,87,10,85,11,85,12,102,1,102,2,104,10,123,8,137,0,138,9,133,11,133, + 12,137,13,153,9,149,11,149,12,164,11,164,12,70,93,0,64,37,6,0,5,8,6,9,3,13,22,10,23,13,16,13,35,13,53,13,73,10,79,10, + 78,13,90,9,90,10,106,10,135,13,128,13,147,13,18,93,5,14,1,43,1,53,51,50,54,63,1,1,51,9,1,54,55,54,51,50,22,29,1,35, + 53,52,38,35,34,7,6,7,2,147,78,148,124,147,108,76,84,51,33,254,59,195,1,94,1,26,21,48,88,135,131,185,178,81,57,57,41,20,10,104, + 200,122,154,72,134,84,4,78,252,148,2,192,52,51,96,191,134,114,114,58,84,42,20,25,0,1,0,92,0,0,5,31,5,213,0,17,0,192,64,53, + 6,3,2,7,2,12,15,16,11,16,7,17,11,16,11,16,17,2,7,2,66,5,13,149,4,14,18,16,149,0,129,7,149,9,12,6,3,15,4,14, + 4,8,14,0,16,7,0,1,66,8,0,10,18,16,220,75,176,9,84,75,176,10,84,91,88,185,0,10,255,192,56,89,196,212,228,17,57,57,16,196, + 16,196,17,23,57,49,0,47,236,244,236,16,212,60,236,50,48,75,83,88,7,16,5,237,7,16,5,237,7,16,5,60,60,7,16,5,60,60,89,34, + 1,64,64,5,2,10,11,24,11,41,2,38,11,56,11,72,2,71,11,72,16,9,5,7,11,16,0,19,22,7,26,16,16,19,47,19,53,7,57,16, + 63,19,71,7,74,16,79,19,85,7,89,17,102,7,105,16,111,19,119,7,120,16,127,19,159,19,22,93,0,93,19,33,21,1,33,21,33,1,33,21, + 33,53,1,33,53,33,1,33,115,4,149,254,112,1,25,254,115,254,84,3,199,251,61,1,185,254,213,1,159,1,131,252,103,5,213,154,254,17,144,253, + 238,170,154,2,34,144,1,223,0,1,0,88,0,0,3,219,4,96,0,17,0,197,64,49,12,15,16,11,16,6,3,2,7,2,16,17,2,7,2,7, + 17,11,16,11,66,16,169,0,188,9,5,13,169,4,14,7,169,9,16,7,15,3,6,12,6,1,0,14,4,8,1,10,18,16,220,75,176,11,84,75, + 176,12,84,91,88,185,0,10,255,192,56,89,75,176,19,84,88,185,0,10,0,64,56,89,196,50,196,196,196,17,23,57,49,0,47,236,212,60,236,50, + 16,244,236,48,75,83,88,7,16,5,237,7,16,5,237,7,16,5,60,60,7,16,5,60,60,89,34,1,64,66,5,2,22,2,38,2,71,2,73,11, + 5,11,16,15,19,24,7,27,16,43,16,32,19,54,7,57,16,48,19,64,1,64,2,69,7,64,8,64,9,67,16,87,7,89,16,95,19,96,1,96, + 2,102,7,96,8,96,9,98,16,127,19,128,19,175,19,27,93,0,93,19,33,21,3,51,21,33,1,33,21,33,53,1,35,53,33,1,33,113,3,106, + 251,194,254,194,254,195,2,180,252,125,1,43,212,1,80,1,13,253,101,4,96,168,254,220,144,254,143,147,168,1,92,144,1,57,0,0,0,1,0,160, + 255,193,4,248,5,213,0,34,0,112,64,14,11,14,13,8,10,4,25,14,16,22,10,13,30,35,16,220,196,196,212,57,196,236,18,57,180,63,14,79, + 14,2,93,17,18,57,49,0,64,19,10,9,149,16,15,11,149,13,129,35,31,161,30,174,0,149,26,140,35,16,244,236,244,236,16,244,236,57,212,236, + 57,48,64,10,16,17,10,11,10,11,17,15,16,15,7,16,5,236,7,16,5,236,64,14,9,10,55,15,2,5,16,11,11,21,16,59,11,4,1,93, + 0,93,37,50,55,54,53,52,39,38,43,1,53,1,33,53,33,21,1,50,23,22,23,22,21,20,7,6,33,34,39,38,39,53,22,23,22,2,168,192, + 99,100,92,93,165,174,1,129,252,252,4,0,254,101,106,128,98,86,81,152,152,254,232,119,125,126,134,106,127,126,107,75,75,143,134,73,74,152,1,234, + 170,154,254,22,56,42,109,104,138,220,122,121,19,18,37,195,49,25,25,0,0,1,0,92,255,193,4,180,5,213,0,34,0,94,64,15,24,22,21,27, + 31,19,13,25,22,5,31,25,21,13,35,16,220,196,180,48,21,64,21,2,93,236,212,196,196,17,57,17,57,17,18,57,49,0,64,19,25,27,149,19, + 20,24,149,22,129,35,4,161,5,174,0,149,9,140,35,16,244,236,244,236,16,244,236,57,212,236,57,48,64,10,19,17,25,24,25,24,17,20,19,20, + 7,16,5,236,7,16,5,236,37,50,55,54,55,21,6,7,6,35,32,39,38,53,52,55,54,55,54,51,1,53,33,21,33,1,21,35,34,7,6,21, + 20,23,22,2,172,137,126,127,106,134,126,125,119,254,232,152,152,81,86,98,128,106,254,101,4,0,252,252,1,129,174,165,93,92,100,99,107,25,25,49, + 195,37,18,19,121,122,220,138,104,109,42,56,1,234,154,170,254,22,152,74,73,134,143,75,75,0,0,0,0,1,0,104,254,76,4,63,4,96,0,32, + 0,163,64,11,0,6,2,12,18,27,19,3,6,2,33,16,220,204,196,196,212,236,17,18,57,49,0,64,26,12,27,0,24,6,66,0,169,7,7,3, + 33,4,169,3,19,134,20,147,16,185,24,189,3,188,33,16,228,252,236,244,236,16,236,17,18,57,47,236,236,17,18,57,57,48,64,8,6,17,0,5, + 17,1,7,2,7,5,16,236,4,16,236,64,27,3,5,5,0,20,5,22,0,35,5,37,0,55,0,52,5,70,0,67,5,91,0,84,5,126,0,13, + 1,93,64,27,4,6,4,1,20,6,20,1,37,6,36,1,53,1,55,6,69,1,70,6,84,1,92,6,127,6,13,0,93,64,9,6,21,7,22,26, + 21,26,18,4,93,9,1,53,33,21,33,1,21,35,34,7,6,21,20,23,22,51,50,54,55,21,6,7,6,35,32,36,53,52,55,54,55,54,2,91, + 254,101,3,106,253,101,1,174,174,165,93,92,100,99,190,109,200,84,106,100,99,94,254,232,254,208,81,86,98,128,1,220,1,220,168,147,254,13,166,74, + 75,132,143,75,75,50,49,195,37,19,18,242,221,138,104,109,42,56,0,0,0,1,0,113,254,86,3,232,4,96,0,32,0,0,1,50,55,54,55,21, + 6,7,6,35,32,17,52,37,36,53,52,35,48,33,1,33,53,33,21,1,32,21,16,5,6,21,20,2,127,84,77,79,81,87,80,86,97,254,32,1, + 150,1,28,235,254,222,1,229,253,101,3,106,254,158,1,111,254,48,226,254,238,21,21,44,179,32,13,14,1,25,238,53,37,98,124,2,56,147,168,254, + 100,229,254,236,49,24,97,139,0,1,0,150,0,0,4,74,5,240,0,36,0,0,37,33,21,33,53,1,55,33,53,33,54,55,54,53,52,39,38,35, + 34,7,6,7,53,62,1,51,50,4,21,20,7,6,7,51,21,35,7,1,137,2,193,252,76,1,58,115,254,167,1,226,95,37,39,83,84,134,95,105, + 106,120,122,212,88,232,1,20,34,31,74,104,236,48,170,170,170,1,64,117,144,109,72,76,73,119,75,75,33,33,67,204,49,50,232,194,92,82,73,96, + 144,49,0,0,0,1,0,93,255,193,4,249,5,213,0,25,0,53,64,14,27,3,8,17,10,11,8,7,0,8,25,7,70,26,16,252,212,236,16,236, + 212,212,236,204,49,0,64,13,22,149,1,0,26,6,149,13,11,149,9,129,26,16,244,236,212,236,16,204,212,236,48,1,16,32,17,52,38,35,33,17, + 33,21,33,17,37,36,23,22,16,15,1,6,7,6,32,36,53,1,38,3,10,185,165,253,247,3,161,253,41,1,115,1,0,162,81,59,28,20,45,152, + 253,196,254,208,1,144,254,219,1,37,134,147,3,44,170,254,37,1,1,208,104,254,224,86,41,29,36,121,242,221,0,0,0,1,0,104,254,76,4,63, + 4,96,0,26,0,51,64,11,28,4,8,18,10,12,8,26,8,70,27,16,252,196,236,212,212,236,204,49,0,64,15,2,135,0,26,24,189,27,7,135, + 14,12,135,10,188,27,16,244,236,212,236,16,252,204,50,236,48,23,22,51,32,17,52,38,35,33,17,33,21,33,17,51,50,30,1,16,15,1,6,7, + 6,33,34,39,104,170,206,1,150,185,165,254,159,3,25,253,159,221,105,228,166,59,28,20,45,152,254,232,187,212,167,99,1,37,134,147,3,44,170,254, + 38,99,212,254,224,86,41,29,36,121,74,0,0,1,0,88,255,227,3,165,5,158,0,36,0,0,1,7,22,23,22,21,20,7,6,33,34,39,38,39, + 53,22,23,22,51,50,55,54,55,52,39,38,43,1,19,35,53,51,17,51,17,51,21,2,33,2,170,112,108,110,137,254,237,85,81,81,76,73,84,78, + 80,179,99,57,1,58,86,192,62,2,229,229,202,231,3,230,125,30,119,115,170,186,125,157,18,17,35,172,40,24,22,114,65,133,98,76,114,1,15,164, + 1,20,254,236,164,0,0,0,0,2,0,186,254,86,4,164,4,123,0,14,0,23,0,64,64,11,25,17,8,13,4,23,0,8,2,70,24,16,252,236, + 50,50,212,236,204,49,0,64,12,66,21,135,5,9,140,3,188,0,1,189,24,16,236,196,244,244,204,236,48,75,83,88,182,23,5,15,135,0,0,14, + 7,4,16,237,0,16,204,89,5,17,35,17,51,21,54,55,54,51,50,23,22,21,16,1,0,53,52,39,38,35,34,7,1,115,185,185,52,135,81,210, + 184,77,78,252,207,2,114,57,56,120,220,173,122,254,208,6,10,170,66,82,49,112,113,153,254,87,254,228,1,144,249,133,66,65,239,0,0,1,0,201, + 254,86,1,147,5,213,0,3,0,38,64,10,0,151,2,189,4,1,8,0,70,4,16,252,236,49,0,16,236,236,48,64,13,16,5,64,5,80,5,96, + 5,112,5,240,5,6,1,93,19,51,17,35,201,202,202,5,213,248,129,0,255,255,0,201,254,86,3,39,5,213,16,39,1,130,1,148,0,0,16,6, + 1,130,0,0,0,1,0,20,254,86,3,156,5,213,0,19,0,58,64,29,12,9,169,15,6,19,2,169,16,5,5,10,0,151,10,189,20,7,3,9, + 5,1,8,18,13,12,16,0,20,16,212,60,60,204,50,252,60,60,204,50,49,0,16,236,236,17,57,47,60,236,50,220,60,236,50,48,1,51,17,33, + 21,33,21,33,21,33,17,35,17,33,53,33,53,33,53,33,1,115,202,1,95,254,161,1,95,254,161,202,254,161,1,95,254,161,1,95,5,213,253,151, + 168,240,170,253,44,2,212,170,240,168,0,0,255,255,0,201,0,0,1,148,5,213,16,6,0,4,148,0,255,255,0,201,0,0,10,208,7,109,16,39, + 1,63,5,177,0,0,16,6,0,39,0,0,255,255,0,201,0,0,9,176,6,102,16,39,1,64,5,213,0,0,16,6,0,39,0,0,255,255,0,113, + 255,227,8,145,6,102,16,39,1,64,4,182,0,0,16,6,0,71,0,0,255,255,0,201,254,102,6,36,5,213,16,39,0,45,4,145,0,0,16,6, + 0,47,0,0,255,255,0,201,254,86,5,222,6,20,16,39,0,77,4,101,0,0,16,6,0,47,0,0,255,255,0,193,254,86,2,239,6,20,16,39, + 0,77,1,118,0,0,16,6,0,79,0,0,255,255,0,201,254,102,6,242,5,213,16,39,0,45,5,95,0,0,16,6,0,49,0,0,255,255,0,201, + 254,86,6,183,6,20,16,39,0,77,5,62,0,0,16,6,0,49,0,0,255,255,0,186,254,86,5,222,6,20,16,39,0,77,4,101,0,0,16,6, + 0,81,0,0,255,255,0,16,0,0,5,104,7,109,18,38,0,36,0,0,17,7,22,190,4,190,1,117,0,6,177,14,0,16,60,49,255,255,0,123, + 255,227,4,45,6,102,18,38,0,68,0,0,17,6,2,137,90,0,0,8,180,11,43,39,20,7,43,49,255,255,255,254,0,0,2,96,7,109,18,38, + 0,44,0,0,17,7,22,190,3,47,1,117,0,11,180,7,32,1,0,0,16,73,99,58,49,0,0,0,255,255,255,224,0,0,2,94,6,102,18,38, + 0,243,0,0,17,7,2,137,255,31,0,0,0,11,180,8,32,1,0,0,16,73,99,58,49,0,0,0,255,255,0,115,255,227,5,217,7,109,18,38, + 0,50,0,0,16,7,22,190,5,39,1,117,255,255,0,113,255,227,4,117,6,102,18,38,0,82,0,0,17,6,2,137,118,0,0,6,177,27,12,16, + 60,49,0,0,255,255,0,178,255,227,5,41,7,109,18,38,0,56,0,0,17,7,22,190,4,246,1,117,0,6,177,21,5,16,60,49,255,255,0,174, + 255,227,4,88,6,102,18,38,0,88,0,0,17,6,2,137,118,0,0,11,180,24,32,11,1,1,16,73,99,58,49,0,255,255,0,178,255,227,5,41, + 8,51,16,38,22,236,48,0,18,6,0,56,0,0,0,0,255,255,0,174,255,227,4,88,7,49,16,39,0,113,0,123,1,59,18,6,0,190,0,0, + 255,255,0,178,255,227,5,41,8,90,18,38,0,56,0,0,16,6,22,239,54,0,0,0,255,255,0,174,255,227,4,88,7,34,18,38,0,88,0,0, + 16,7,22,239,255,190,254,200,255,255,0,178,255,227,5,41,8,90,18,38,0,56,0,0,16,6,22,244,48,0,0,0,255,255,0,174,255,227,4,88, + 7,34,18,38,0,88,0,0,16,7,22,244,255,196,254,200,255,255,0,178,255,227,5,41,8,96,18,38,0,56,0,0,16,6,22,240,48,6,0,0, + 255,255,0,174,255,227,4,88,7,34,18,38,0,88,0,0,16,7,22,240,255,190,254,200,255,255,0,113,255,227,4,127,4,123,18,6,2,27,0,0, + 255,255,0,16,0,0,5,104,8,51,18,38,0,36,0,0,16,6,22,236,0,0,0,0,255,255,0,123,255,227,4,45,7,49,18,38,0,166,0,0, + 16,7,0,113,0,82,1,59,255,255,0,16,0,0,5,104,8,51,18,38,0,36,0,0,16,6,22,238,0,0,0,0,255,255,0,123,255,227,4,45, + 6,244,18,38,0,68,0,0,16,7,22,238,255,147,254,193,255,255,0,8,0,0,7,72,7,52,16,39,0,113,2,215,1,62,18,6,0,136,0,0, + 255,255,0,123,255,227,7,111,5,242,16,39,0,113,1,232,255,252,18,6,0,168,0,0,0,1,0,115,255,227,6,4,5,240,0,37,0,84,64,16, + 33,36,34,30,28,17,52,2,0,4,51,24,25,11,16,38,16,252,236,252,60,204,228,252,196,196,49,0,64,24,4,31,1,34,0,5,27,35,149,37, + 27,149,8,18,161,17,174,21,149,14,145,8,140,38,16,228,244,236,244,236,16,254,212,238,17,57,57,220,176,11,75,84,88,177,34,64,56,89,60,204, + 50,48,1,17,51,21,35,21,6,4,35,32,0,17,16,0,33,50,4,23,21,46,1,35,32,0,17,16,0,33,50,54,55,53,35,53,51,53,33,53, + 5,139,121,121,117,254,230,160,254,162,254,117,1,139,1,94,146,1,7,111,112,252,139,254,238,254,237,1,19,1,18,107,168,67,253,253,254,182,3,12, + 254,214,88,255,83,85,1,153,1,109,1,110,1,153,72,70,215,95,96,254,206,254,209,254,210,254,206,37,39,181,88,132,166,0,0,0,0,2,0,113, + 254,86,4,250,4,123,0,11,0,52,0,88,64,14,15,34,50,37,0,8,12,71,6,18,24,44,69,53,16,252,196,236,244,236,50,50,196,196,49,0, + 64,27,32,17,14,35,37,12,41,9,24,134,25,28,185,21,3,185,50,47,184,51,188,9,185,21,189,38,41,47,196,228,236,228,244,196,236,16,254,213, + 238,17,18,57,57,212,60,204,50,48,182,96,54,128,54,160,54,3,1,93,1,52,38,35,34,6,21,20,22,51,50,54,23,20,7,51,21,35,6,7, + 6,33,34,38,39,53,30,1,51,50,55,54,55,33,53,33,54,61,1,14,1,35,34,2,17,16,18,51,50,22,23,53,51,3,162,165,149,148,165,165, + 148,149,165,184,19,179,198,31,58,127,254,250,97,172,81,81,158,82,181,90,21,17,253,132,2,154,22,57,178,124,206,252,252,206,124,178,57,184,2,61, + 200,220,220,200,199,220,220,235,110,88,70,93,64,140,29,30,179,44,42,95,23,28,69,71,94,91,99,98,1,58,1,3,1,4,1,58,98,99,170,0, + 255,255,0,115,255,227,5,139,7,109,18,38,0,42,0,0,17,7,22,190,5,74,1,117,0,16,177,33,14,16,60,64,7,148,33,84,33,36,33,3, + 93,49,0,0,255,255,0,113,254,86,4,90,6,99,16,38,2,137,74,253,18,6,0,74,0,0,0,0,255,255,0,201,0,0,5,106,7,109,16,39, + 22,190,4,162,1,117,18,6,0,46,0,0,255,255,255,233,0,0,4,156,7,109,18,38,0,78,0,0,17,7,22,190,3,26,1,117,0,42,180,1, + 16,12,0,7,43,49,0,75,176,14,81,88,187,0,1,255,192,0,0,255,192,56,56,89,64,13,144,1,144,0,128,1,128,0,64,1,64,0,6,93, + 255,255,0,115,254,117,5,217,5,240,16,39,2,157,1,52,0,0,18,6,0,50,0,0,255,255,0,113,254,117,4,117,4,123,16,39,2,157,0,128, + 0,0,18,6,0,82,0,0,255,255,0,115,254,117,5,217,7,49,16,39,0,113,1,39,1,59,18,6,1,172,0,0,255,255,0,113,254,117,4,117, + 5,245,16,38,0,113,115,255,18,6,1,173,0,0,0,0,255,255,0,160,255,193,4,248,7,109,16,39,22,190,4,190,1,117,18,6,1,121,0,0, + 255,255,0,88,254,76,4,47,6,102,16,38,2,137,27,0,16,6,2,84,0,0,0,0,255,255,255,219,254,86,2,100,6,102,16,39,2,137,255,37, + 0,0,17,6,1,249,0,0,0,11,180,3,32,8,7,7,16,73,99,58,49,0,0,0,255,255,0,201,0,0,10,208,5,213,16,39,0,61,5,177, + 0,0,16,6,0,39,0,0,255,255,0,201,0,0,9,176,5,213,16,39,0,93,5,213,0,0,16,6,0,39,0,0,255,255,0,113,255,227,8,145, + 6,20,16,39,0,93,4,182,0,0,16,6,0,71,0,0,255,255,0,115,255,227,5,139,7,108,16,39,22,186,5,27,1,118,18,6,0,42,0,0, + 255,255,0,113,254,86,4,90,6,99,18,38,0,74,0,0,16,6,0,118,27,253,0,0,0,1,0,201,255,227,8,45,5,213,0,29,0,53,64,14, + 14,28,17,25,3,28,6,56,27,1,28,0,4,30,16,252,236,50,252,236,50,212,236,49,0,64,14,15,26,149,2,173,4,0,129,28,10,149,21,140, + 28,47,228,236,16,228,50,252,236,196,48,19,51,17,33,17,51,17,20,23,22,23,50,55,54,53,17,51,17,20,7,6,33,32,39,38,53,17,33,17, + 35,201,202,2,222,202,62,61,153,148,66,62,202,100,96,254,230,254,237,103,100,253,34,202,5,213,253,156,2,100,251,236,159,80,78,1,79,75,164,2, + 159,253,90,223,128,120,120,118,233,1,13,253,57,0,0,0,0,2,0,201,254,86,5,2,5,240,0,14,0,23,0,64,64,11,25,17,28,13,4,23, + 0,28,2,4,24,16,252,236,50,50,212,236,204,49,0,64,12,66,21,149,5,9,140,3,129,0,1,189,24,16,236,196,244,244,204,236,48,75,83,88, + 182,23,5,15,135,0,0,14,7,4,16,237,0,16,204,89,37,17,35,17,51,21,54,55,54,51,50,23,22,21,16,1,0,17,52,39,38,35,34,3, + 1,147,202,202,56,145,87,226,198,83,84,252,145,2,161,61,60,129,237,186,156,253,186,7,127,185,72,87,53,120,122,164,254,55,254,206,1,174,1,12, + 143,71,70,254,255,0,0,0,255,255,0,201,0,0,5,51,7,107,16,39,22,188,5,30,1,117,18,6,0,49,0,0,255,255,0,186,0,0,4,100, + 6,100,18,38,0,81,0,0,16,7,0,67,1,24,255,254,255,255,0,16,0,0,5,104,7,115,18,38,0,135,0,0,16,7,22,186,6,92,1,125, + 255,255,0,123,255,227,4,220,7,115,18,38,0,167,0,0,16,7,22,186,5,236,1,125,255,255,0,8,0,0,7,72,7,108,16,39,22,186,6,92, + 1,118,18,6,0,136,0,0,255,255,0,123,255,227,7,111,6,99,18,38,0,168,0,0,16,7,0,118,1,101,255,253,255,255,0,102,255,186,5,229, + 7,108,16,39,22,186,4,254,1,118,18,6,0,154,0,0,255,255,0,72,255,162,4,156,6,99,18,38,0,186,0,0,16,6,0,118,28,253,0,0, + 255,255,0,16,0,0,5,104,7,112,18,38,0,36,0,0,16,7,22,195,4,229,1,122,255,255,0,123,255,227,4,45,6,100,16,39,2,192,4,152, + 255,254,18,6,0,68,0,0,255,255,0,16,0,0,5,104,7,54,18,38,0,36,0,0,16,7,22,191,4,188,1,62,255,255,0,123,255,227,4,45, + 6,72,16,39,2,194,4,101,0,0,18,6,0,68,0,0,255,255,0,201,0,0,4,139,7,112,18,38,0,40,0,0,16,7,22,195,4,165,1,122, + 255,255,0,113,255,227,4,127,6,99,16,39,2,192,4,186,255,253,18,6,0,72,0,0,255,255,0,201,0,0,4,139,7,54,18,38,0,40,0,0, + 16,7,22,191,4,166,1,62,255,255,0,113,255,227,4,127,6,72,16,39,2,194,4,169,0,0,18,6,0,72,0,0,255,255,255,167,0,0,2,115, + 7,112,18,38,0,44,0,0,16,7,22,195,3,89,1,122,255,255,255,195,0,0,2,129,6,99,16,39,2,192,3,102,255,253,18,6,0,243,0,0, + 255,255,0,5,0,0,2,119,7,54,18,38,0,44,0,0,16,7,22,191,3,62,1,62,255,255,255,227,0,0,2,85,6,72,16,39,2,194,3,36, + 0,0,18,6,0,243,0,0,255,255,0,115,255,227,5,217,7,112,18,38,0,50,0,0,16,7,22,195,5,65,1,122,255,255,0,113,255,227,4,117, + 6,100,16,39,2,192,4,159,255,254,18,6,0,82,0,0,255,255,0,115,255,227,5,217,7,54,18,38,0,50,0,0,16,7,22,191,5,28,1,62, + 255,255,0,113,255,227,4,117,6,72,16,39,2,194,4,152,0,0,18,6,0,82,0,0,255,255,0,199,0,0,5,84,7,112,18,38,0,53,0,0, + 16,7,22,195,4,121,1,122,255,255,0,130,0,0,3,74,6,99,16,39,2,192,4,37,255,253,18,6,0,85,0,0,255,255,0,201,0,0,5,84, + 7,54,18,38,0,53,0,0,16,7,22,191,4,128,1,62,255,255,0,186,0,0,3,94,6,72,16,39,2,194,4,45,0,0,18,6,0,85,0,0, + 255,255,0,178,255,227,5,41,7,112,18,38,0,56,0,0,16,7,22,195,5,21,1,122,255,255,0,174,255,227,4,88,6,100,16,39,2,192,4,212, + 255,254,18,6,0,88,0,0,255,255,0,178,255,227,5,41,7,54,18,38,0,56,0,0,16,7,22,191,4,236,1,62,255,255,0,174,255,227,4,88, + 6,72,16,39,2,194,4,171,0,0,18,6,0,88,0,0,255,255,0,135,254,20,4,162,5,240,16,39,2,215,4,118,0,0,18,6,0,54,0,0, + 255,255,0,111,254,20,3,199,4,123,16,39,2,215,4,44,0,0,18,6,0,86,0,0,255,255,255,250,254,20,4,233,5,213,16,39,2,215,4,83, + 0,0,18,6,0,55,0,0,255,255,0,55,254,20,2,242,5,158,16,39,2,215,4,0,0,0,18,6,0,87,0,0,0,1,0,156,254,82,4,115, + 5,240,0,46,0,0,1,4,17,20,14,1,12,1,7,53,54,36,62,1,53,52,38,35,34,15,1,53,55,62,3,53,52,46,3,35,34,7,53,54, + 51,50,30,1,21,20,14,2,3,63,1,52,111,185,255,0,254,234,153,200,1,49,185,92,125,112,95,115,163,248,60,102,104,61,35,55,75,72,38,184, + 243,239,206,131,203,124,23,58,110,2,162,67,254,219,112,206,160,136,96,34,160,55,140,153,157,79,101,132,51,72,171,106,26,65,99,139,82,55,86,51, + 34,12,184,190,164,86,182,128,60,102,113,116,0,1,0,71,254,79,3,188,4,123,0,52,0,0,1,30,3,21,20,14,5,7,53,62,4,53,52,38, + 35,34,15,1,53,55,62,4,53,52,46,3,35,34,6,7,53,36,51,50,30,1,21,20,6,2,167,70,112,62,33,66,108,152,157,179,149,74,162,245, + 158,99,40,118,93,59,63,216,223,34,65,87,63,45,31,49,67,65,35,69,168,147,1,10,134,112,184,116,103,1,205,8,68,90,88,37,75,138,108,97, + 70,61,39,15,130,46,96,91,98,91,51,88,112,25,86,139,85,13,32,60,69,102,57,44,70,42,27,10,59,90,154,133,71,146,97,110,153,0,0,0, + 255,255,0,201,0,0,5,59,7,109,16,39,22,190,5,4,1,117,18,6,0,43,0,0,255,255,255,240,0,0,4,100,7,109,16,39,22,190,3,33, + 1,117,19,6,0,75,0,0,0,42,180,20,5,1,19,7,43,49,0,75,176,14,81,88,187,0,20,255,192,0,19,255,192,56,56,89,64,13,144,20, + 144,19,128,20,128,19,64,20,64,19,6,93,0,1,0,201,254,86,5,25,5,240,0,19,0,46,64,18,3,149,14,145,9,129,18,176,8,19,28,18, + 11,6,28,8,65,20,16,252,75,176,16,84,88,185,0,8,255,192,56,89,236,50,212,252,49,0,47,236,228,244,236,48,1,52,38,35,34,6,21,17, + 35,17,51,21,62,1,23,50,18,25,1,35,4,80,154,153,179,215,202,202,81,204,157,227,233,201,3,127,215,213,255,222,252,178,5,213,241,135,134,1, + 254,193,254,204,250,217,0,0,0,3,0,113,255,112,6,68,6,20,0,7,0,40,0,52,0,0,37,22,51,50,53,52,39,34,7,54,51,50,21,16, + 33,34,39,6,7,35,54,55,38,53,6,7,6,35,34,39,38,16,55,54,51,50,23,22,23,17,51,0,16,23,22,32,55,54,16,39,38,32,7,4, + 182,17,37,160,52,52,202,110,136,244,254,170,73,53,34,24,196,29,67,48,58,88,89,124,203,128,127,127,128,203,124,89,88,58,184,252,213,83,84,1, + 36,84,84,84,84,254,220,84,130,5,175,45,1,32,184,206,254,191,15,72,58,69,147,60,36,100,48,49,162,162,2,16,162,162,49,48,100,2,94,252, + 230,254,106,116,115,115,116,1,150,116,115,115,0,2,0,113,255,227,5,37,5,240,0,12,0,59,0,87,64,28,36,0,20,51,4,24,16,61,69,10, + 28,40,66,29,24,28,33,56,59,16,28,55,66,4,28,47,69,60,16,252,236,244,236,204,178,32,59,1,93,244,236,204,244,236,236,17,18,23,57,49, + 0,64,18,36,51,0,149,20,173,60,13,59,28,29,145,60,7,8,44,140,60,16,244,236,16,244,204,212,204,16,244,236,57,57,48,1,34,7,6,16, + 23,22,32,55,54,53,52,38,3,14,1,21,20,23,22,51,50,55,54,53,52,39,38,39,53,50,23,22,21,20,6,7,22,23,22,21,20,7,6,32, + 39,38,53,52,55,54,55,38,39,38,53,52,55,54,33,2,203,184,106,107,107,106,1,112,107,107,212,244,130,170,95,59,204,168,95,96,76,109,130,228, + 150,139,170,152,172,95,96,156,155,253,186,155,156,96,97,171,171,67,85,130,116,1,1,2,197,77,77,254,242,77,77,77,78,134,135,154,2,39,3,124, + 79,69,72,45,65,65,136,158,43,77,8,100,104,97,186,128,178,32,34,99,99,143,217,116,116,116,116,217,143,99,99,34,31,70,89,88,130,83,74,0, + 0,2,0,113,255,227,4,113,5,15,0,13,0,52,0,67,64,22,54,69,10,8,24,66,14,52,50,8,16,40,41,43,8,38,66,4,8,31,69,53, + 16,252,236,244,236,204,50,212,236,204,50,244,236,236,49,0,64,14,52,41,20,34,0,185,46,173,53,7,185,28,140,53,16,244,236,16,244,236,57,57, + 204,50,48,1,34,7,6,16,23,22,32,55,54,53,52,39,38,19,22,21,20,7,6,7,22,23,22,21,20,7,6,32,39,38,53,52,54,55,38,39, + 38,53,52,55,51,6,20,23,22,51,50,55,54,53,52,39,2,113,144,83,82,82,83,1,32,83,83,83,82,254,58,52,72,130,146,82,81,133,132,254, + 18,132,133,164,146,144,59,52,63,161,43,73,72,131,130,73,74,44,2,197,77,77,254,242,77,77,77,78,134,135,77,77,2,74,64,98,153,64,89,32, + 34,99,99,143,217,116,116,116,116,217,143,198,34,35,86,75,142,89,73,65,232,65,65,65,65,116,119,62,0,1,0,92,254,86,5,31,5,213,0,21, + 0,159,64,12,15,20,17,18,66,11,8,21,6,17,13,22,16,220,75,176,9,84,75,176,10,84,91,88,185,0,13,255,192,56,89,196,196,212,236,228, + 17,57,57,49,0,64,12,66,7,149,5,12,15,149,17,129,20,149,12,47,236,244,236,16,220,236,48,75,83,88,64,10,20,17,14,15,14,15,17,19, + 20,19,7,16,5,237,7,16,5,237,89,1,64,64,5,19,10,14,24,14,41,19,38,14,56,14,72,19,71,14,72,15,9,5,20,11,15,0,23,22, + 20,26,15,16,23,47,23,53,20,57,15,63,23,71,20,74,15,79,23,85,20,89,15,102,20,105,15,111,23,119,20,120,15,127,23,159,23,22,93,0, + 93,5,16,7,6,43,1,53,51,50,55,54,61,1,33,53,1,33,53,33,21,1,33,5,31,158,72,114,254,233,105,38,38,251,245,3,176,252,103,4, + 149,252,80,3,199,20,254,223,80,37,156,48,49,153,20,154,4,145,170,154,251,111,0,0,0,1,0,88,254,86,3,219,4,96,0,21,0,172,64,12, + 11,8,21,13,15,20,18,17,18,6,13,22,16,220,75,176,11,84,75,176,12,84,91,88,185,0,13,255,192,56,89,75,176,19,84,88,185,0,13,0, + 64,56,89,196,196,180,64,18,96,18,2,93,196,17,57,57,16,212,180,64,21,96,21,2,93,236,49,0,64,12,66,7,169,5,12,15,169,17,188,20, + 169,12,47,236,244,236,16,220,236,48,75,83,88,64,10,15,17,19,20,19,20,17,14,15,14,7,16,5,237,7,16,5,237,89,1,64,50,5,19,22, + 19,38,19,71,19,73,14,5,11,15,15,23,24,20,27,15,43,15,32,23,54,20,57,15,48,23,69,20,73,15,87,20,89,15,95,23,102,20,104,15, + 127,23,128,23,175,23,19,93,0,93,5,16,7,6,43,1,53,51,50,55,54,61,1,33,53,1,33,53,33,21,1,33,3,219,158,72,114,254,233,105, + 38,38,253,53,2,180,253,101,3,106,253,76,2,180,20,254,223,80,37,156,48,49,153,20,168,3,37,147,168,252,219,0,255,255,0,16,0,0,5,104, + 7,80,16,39,22,193,4,188,1,117,18,6,0,36,0,0,255,255,0,123,255,227,4,45,6,20,16,39,2,184,4,74,0,0,18,6,0,68,0,0, + 255,255,0,201,254,117,4,139,5,213,18,38,0,40,0,0,16,7,0,122,0,162,0,0,255,255,0,113,254,117,4,127,4,123,18,38,0,72,0,0, + 16,6,0,122,123,0,0,0,255,255,0,115,255,227,5,217,8,51,18,38,0,50,0,0,16,6,22,236,98,0,0,0,255,255,0,113,255,227,4,117, + 7,49,18,38,0,184,0,0,16,7,0,113,0,115,1,59,255,255,0,115,255,227,5,217,8,51,18,38,0,50,0,0,16,6,22,243,105,0,0,0, + 255,255,0,113,255,227,4,117,6,233,18,38,0,82,0,0,16,7,22,243,255,181,254,182,255,255,0,115,255,227,5,217,7,80,16,39,22,193,5,39, + 1,117,18,6,0,50,0,0,255,255,0,113,255,227,4,117,6,20,16,39,2,184,4,115,0,0,18,6,0,82,0,0,255,255,0,115,255,227,5,217, + 8,51,18,38,0,50,0,0,16,6,22,238,106,0,0,0,255,255,0,113,255,227,4,117,7,49,18,38,1,241,0,0,16,7,0,113,0,115,1,59, + 255,255,255,252,0,0,4,231,7,49,16,39,0,113,0,114,1,59,18,6,0,60,0,0,255,255,0,61,254,86,4,127,5,245,16,38,0,113,94,255, + 18,6,0,92,0,0,0,0,0,2,0,138,255,112,3,92,6,14,0,7,0,25,0,0,37,22,51,50,53,52,39,34,7,54,51,50,21,16,33,34, + 39,6,7,35,54,55,38,55,17,51,1,206,17,37,160,52,52,202,110,136,244,254,170,73,53,34,24,196,29,67,49,1,184,130,5,175,45,1,32,184, + 206,254,191,15,72,58,69,147,60,90,5,48,0,2,0,186,255,112,6,78,4,123,0,7,0,43,0,0,37,22,51,50,53,52,39,34,7,54,51,50, + 21,16,33,34,39,6,7,35,54,55,38,55,17,52,38,35,34,6,21,17,35,17,51,21,54,55,54,51,50,23,22,21,4,192,17,37,160,52,52,202, + 110,136,244,254,170,73,53,34,24,196,29,67,49,1,124,124,149,172,185,185,66,89,90,117,193,99,99,130,5,175,45,1,32,184,206,254,191,15,72,58, + 69,147,60,90,1,192,159,158,190,164,253,135,4,96,174,101,50,50,119,120,232,0,0,0,0,2,0,55,255,112,3,97,5,158,0,7,0,33,0,0, + 37,22,51,50,53,52,39,34,7,54,51,50,21,16,33,34,39,6,7,35,54,55,38,53,17,35,53,51,17,51,17,33,21,33,1,211,17,37,160,52, + 52,202,110,136,244,254,170,73,54,33,24,196,29,67,49,135,135,185,1,123,254,133,130,5,175,45,1,32,184,206,254,191,15,72,58,69,147,60,90,2, + 243,143,1,62,254,194,143,0,0,1,255,219,254,86,1,121,4,96,0,11,0,56,64,21,11,2,7,0,7,135,5,189,0,188,12,8,12,5,6,79, + 1,8,0,70,12,16,252,236,228,57,18,57,49,0,16,228,244,236,17,18,57,57,48,64,11,16,13,64,13,80,13,96,13,112,13,5,1,93,19,51, + 17,20,6,43,1,53,51,50,54,53,193,184,163,181,70,49,105,76,4,96,251,140,214,192,156,97,153,0,0,3,0,113,255,227,7,140,6,20,0,9, + 0,35,0,47,0,65,64,19,49,69,37,18,20,71,5,27,13,8,43,24,14,71,1,18,33,69,48,16,252,236,244,60,60,252,60,60,244,236,236,49, + 0,64,16,40,8,185,10,46,4,185,22,29,140,17,10,184,13,151,25,47,236,228,50,244,50,236,50,16,236,50,48,0,16,23,22,32,54,16,38,32, + 7,19,50,23,17,51,17,54,51,50,0,16,2,35,34,39,21,35,53,6,35,34,39,38,16,55,54,0,16,39,38,32,7,6,16,23,22,32,55,1, + 47,83,84,1,36,168,168,254,220,84,185,245,114,185,114,244,204,0,255,255,204,244,114,185,114,245,203,128,127,127,128,5,93,83,84,254,220,84,83,83, + 84,1,36,84,2,250,254,106,116,115,231,1,150,231,115,1,13,197,2,94,253,162,197,254,188,253,240,254,188,197,168,168,197,162,162,2,16,162,162,252, + 233,1,150,116,115,115,116,254,106,116,115,115,0,3,0,113,254,86,7,140,4,123,0,11,0,37,0,47,0,68,64,19,49,69,1,18,36,71,43,17, + 29,18,7,14,30,71,39,18,23,69,48,16,252,236,244,60,60,252,60,60,244,236,236,49,0,64,18,10,42,185,19,4,46,185,33,26,184,12,19,140, + 15,189,29,188,48,16,228,228,228,50,244,60,236,50,16,236,50,48,0,16,39,38,32,7,6,16,23,22,32,55,3,34,39,17,35,17,6,35,34,39, + 38,16,55,54,51,50,23,53,51,21,54,51,50,0,16,2,0,16,23,22,32,54,16,38,32,7,6,205,83,84,254,220,84,83,83,84,1,36,84,185, + 244,114,185,114,245,203,128,127,127,128,203,245,114,185,114,244,204,0,255,255,250,162,83,84,1,36,168,168,254,220,84,1,100,1,150,116,115,115,116,254, + 106,116,115,115,254,243,197,253,174,2,82,197,162,162,2,16,162,162,197,170,170,197,254,188,253,240,254,188,3,23,254,106,116,115,231,1,150,231,115,0, + 0,3,255,253,255,186,5,124,6,23,0,18,0,22,0,25,0,0,1,51,19,1,23,9,1,35,3,33,15,1,35,7,39,35,55,39,55,9,1,51, + 1,3,33,3,2,74,229,134,1,97,102,254,112,1,124,210,136,253,214,205,50,70,59,82,2,1,20,47,2,144,254,238,22,1,111,189,1,93,106,5, + 213,254,161,1,161,89,254,39,252,27,1,127,241,142,70,70,1,17,56,4,196,253,25,1,177,254,79,1,31,0,0,0,0,2,0,12,255,186,5,138, + 6,23,0,34,0,44,0,0,23,39,19,38,17,16,55,54,33,50,23,22,23,55,23,7,21,38,39,1,22,23,22,33,50,55,54,55,21,6,7,6, + 35,32,39,19,1,35,38,35,32,7,6,17,20,114,102,220,117,195,195,1,83,134,118,61,58,101,102,99,46,49,252,244,9,11,136,1,0,130,116,115, + 102,106,119,118,132,254,180,194,57,2,216,1,116,130,255,0,136,136,70,88,1,5,187,1,23,1,104,207,208,36,18,27,120,89,118,187,43,33,252,102, + 13,12,157,47,47,95,211,72,36,36,199,1,21,3,92,47,156,157,254,216,173,0,0,0,0,2,0,9,255,162,4,93,4,188,0,34,0,43,0,0, + 23,39,55,38,53,16,55,54,33,50,23,22,23,55,23,7,21,38,39,1,22,23,22,51,50,55,54,55,21,6,7,6,35,34,39,19,1,38,35,34, + 7,6,21,20,105,96,189,85,151,150,1,6,85,81,46,45,89,95,118,25,24,253,211,7,6,99,179,80,78,79,78,77,82,83,93,240,147,55,1,238, + 71,71,179,99,99,94,78,230,141,204,1,18,157,157,17,10,16,108,79,143,85,14,11,253,94,8,8,113,21,22,43,170,36,18,18,144,1,5,2,86, + 17,113,114,205,103,0,0,0,0,1,0,10,0,0,4,106,5,213,0,13,0,59,64,22,12,5,10,149,2,12,6,149,0,129,8,3,5,1,28,7, + 58,12,10,0,4,14,16,252,60,204,236,252,60,204,49,0,47,228,236,212,60,236,50,48,64,13,48,15,80,15,128,7,128,8,127,4,127,3,6,1, + 93,19,51,17,51,21,35,17,33,21,33,17,35,53,51,201,202,191,191,2,215,252,95,191,191,5,213,253,119,144,253,238,170,2,188,144,0,2,255,178, + 255,186,5,49,6,23,0,15,0,18,0,0,1,21,35,1,17,35,17,1,39,1,17,33,53,33,55,23,9,1,33,4,233,52,254,34,203,254,13,103, + 2,90,253,238,4,153,56,102,253,166,1,44,254,212,5,105,62,253,204,253,9,2,7,253,179,88,2,199,2,82,170,66,89,254,11,1,98,0,0,0, + 0,1,0,111,254,16,4,25,4,123,0,61,0,0,1,52,39,38,47,1,38,39,38,53,52,54,51,50,22,23,21,46,1,35,34,7,6,21,20,23, + 22,31,1,22,23,22,21,20,7,6,7,31,1,22,51,21,35,34,39,38,47,1,38,39,38,39,38,39,53,22,23,22,51,50,55,54,3,10,50,51, + 171,64,171,76,76,224,206,102,180,76,78,168,90,137,68,69,49,49,148,63,198,80,83,123,87,132,159,147,42,76,39,84,114,71,89,237,30,36,16,17, + 97,108,102,99,99,97,130,70,70,1,39,75,40,40,37,15,36,74,75,130,158,172,30,30,174,40,40,42,42,84,64,37,36,33,14,44,75,76,137,156, + 91,64,19,159,126,36,154,61,38,91,243,30,16,3,2,18,35,190,53,26,27,45,44,0,0,1,0,88,254,16,4,51,4,96,0,24,0,0,19,33, + 21,1,22,23,1,23,22,59,1,21,35,34,39,38,47,1,38,43,1,61,1,1,33,113,3,106,253,78,92,49,1,8,147,42,76,108,147,84,114,71, + 89,237,61,90,94,2,180,253,101,4,96,168,252,221,16,49,254,248,126,36,154,61,38,91,243,63,156,12,3,37,0,0,0,1,0,80,0,0,4,141, + 5,213,0,24,0,54,64,17,18,19,12,11,4,15,0,5,1,8,25,22,1,28,4,15,25,16,212,212,236,212,236,17,57,57,17,23,57,49,0,64, + 11,0,149,5,15,149,16,11,149,18,129,2,47,244,236,212,236,212,236,48,1,35,17,35,17,51,50,54,53,52,38,43,1,34,6,7,53,54,59,1, + 50,4,21,20,4,2,145,39,202,241,141,154,154,141,254,69,175,79,152,171,254,244,1,8,254,247,2,90,253,166,3,0,145,135,136,143,42,44,182,70, + 220,225,215,231,0,1,0,80,0,0,3,143,4,123,0,24,0,55,64,16,10,8,6,15,4,12,1,0,4,18,19,22,8,0,12,25,16,212,212,236, + 212,236,18,57,18,23,57,49,0,64,13,22,185,1,23,12,134,13,136,8,185,15,184,23,47,244,236,244,238,16,212,236,48,1,51,50,54,53,52,39, + 38,35,34,7,6,7,53,54,51,50,23,22,21,20,6,35,17,35,1,47,100,141,154,76,85,134,73,86,86,78,152,171,251,125,132,212,194,202,1,166, + 145,135,141,65,72,21,21,43,182,70,110,116,219,213,229,254,252,0,0,0,0,3,0,10,0,0,4,236,5,213,0,12,0,21,0,40,0,92,64,26, + 21,15,12,6,23,29,35,5,0,18,28,26,9,25,32,46,2,4,13,0,28,38,37,22,4,41,16,252,60,204,236,50,50,204,252,236,212,236,17,23, + 57,57,57,49,0,64,21,40,1,149,37,4,4,0,5,29,0,149,14,13,149,22,129,5,149,14,173,35,47,236,236,244,236,16,238,57,17,18,57,47, + 60,236,50,48,178,15,42,1,1,93,1,21,33,21,33,21,33,50,54,53,52,38,35,1,17,33,50,54,53,52,38,35,37,33,50,22,21,20,6,7, + 30,1,21,20,4,35,33,17,35,53,51,1,147,1,91,254,165,1,68,163,157,157,163,254,188,1,43,148,145,145,148,254,11,2,4,231,250,128,124,149, + 165,254,240,251,253,232,191,191,2,201,201,144,202,135,139,140,133,2,102,254,62,111,114,113,112,166,192,177,137,162,20,32,203,152,200,218,1,112,144,0, + 0,2,0,12,255,227,5,206,5,213,0,20,0,29,0,95,64,15,21,3,28,7,9,5,56,22,1,28,19,17,0,65,30,16,252,75,176,16,84,88, + 185,0,0,255,192,56,89,60,204,236,50,252,60,204,236,50,49,0,64,22,29,23,16,10,0,7,20,3,149,17,9,22,22,0,26,149,13,140,4,0, + 129,30,16,228,50,244,236,17,57,47,60,60,236,50,50,17,57,57,57,57,48,1,182,31,31,143,31,159,31,3,93,19,51,17,33,17,51,17,51,21, + 35,21,16,0,33,32,0,17,53,35,53,51,5,33,21,20,22,51,50,54,53,178,203,2,225,203,165,165,254,223,254,230,254,229,254,223,166,166,3,172, + 253,31,174,195,194,174,5,213,253,150,2,106,253,150,164,150,254,220,254,214,1,42,1,36,150,164,164,125,240,211,211,240,255,255,0,16,0,0,5,104, + 5,213,16,6,3,48,0,0,0,3,0,201,255,66,4,139,6,147,0,19,0,23,0,27,0,0,1,51,7,51,21,35,3,33,21,33,3,33,21,33, + 7,35,55,35,17,33,1,19,35,17,1,19,33,17,3,184,170,65,88,146,151,1,10,254,188,185,2,46,253,152,65,170,65,176,2,174,254,60,185,217, + 1,19,151,254,86,6,147,190,170,254,70,170,253,227,170,190,190,5,213,250,213,2,29,253,227,2,199,1,186,254,70,0,0,4,0,113,255,66,4,127, + 5,30,0,5,0,38,0,45,0,49,0,0,1,38,39,38,39,3,5,21,33,3,22,51,50,54,55,21,14,1,35,34,39,7,35,19,38,39,38,17, + 16,0,51,50,23,55,51,7,22,23,22,5,19,38,35,34,6,7,27,1,35,22,3,199,2,83,14,16,111,1,154,254,43,148,74,97,106,199,98,99, + 208,107,123,99,80,170,109,33,28,157,1,41,252,56,49,71,170,92,57,47,131,253,188,135,20,22,154,185,14,90,111,207,11,2,148,151,90,16,13,254, + 242,54,90,254,151,28,52,52,174,42,44,33,194,1,9,23,29,156,1,10,1,19,1,67,9,172,224,34,50,146,197,1,74,2,174,158,254,99,1,14, + 172,0,0,0,0,1,255,150,254,102,2,82,5,213,0,19,0,89,64,31,11,2,7,12,1,12,149,18,15,20,7,149,5,176,16,129,20,0,17,13, + 5,8,6,57,1,17,28,12,16,4,20,16,252,75,176,16,84,88,185,0,16,0,64,56,89,60,236,50,228,57,57,196,16,196,49,0,16,228,252,236, + 16,212,60,236,50,17,18,57,57,48,1,64,13,48,21,64,21,80,21,96,21,143,21,159,21,6,93,1,35,17,16,6,43,1,53,51,50,54,53,17, + 35,53,51,17,51,17,51,2,82,191,205,227,77,63,134,110,191,191,202,191,2,119,253,241,254,242,244,170,150,194,2,15,166,2,184,253,72,0,0,0, + 0,2,255,219,254,86,2,28,6,20,0,19,0,23,0,83,64,36,23,190,20,177,24,15,6,11,0,11,135,9,189,24,2,19,169,5,16,0,188,24, + 12,24,9,10,79,21,5,1,8,20,16,0,70,24,16,252,60,60,236,50,50,228,57,18,57,49,0,16,228,220,60,228,50,16,244,236,17,18,57,57, + 16,244,236,48,64,11,16,25,64,25,80,25,96,25,112,25,5,1,93,19,51,17,51,21,35,17,20,6,43,1,53,51,50,54,53,17,35,53,51,17, + 51,21,35,193,184,163,163,163,181,70,49,105,76,181,181,184,184,4,96,254,8,164,254,40,214,192,156,97,153,1,216,164,3,172,233,0,0,2,0,115, + 254,102,6,176,5,241,0,24,0,36,0,67,64,36,3,12,13,6,149,9,176,37,34,149,0,22,28,149,13,16,140,22,145,1,175,37,9,6,8,2, + 31,13,0,28,2,25,25,19,16,37,16,252,236,212,236,50,50,16,204,57,57,49,0,16,236,228,244,196,236,16,196,238,16,228,236,17,57,57,48,1, + 53,51,17,20,22,59,1,21,35,34,38,17,53,14,1,35,32,0,17,16,0,33,50,22,1,16,18,51,50,18,17,16,2,35,34,2,4,179,196,110, + 134,69,77,227,205,77,236,165,254,242,254,172,1,84,1,14,165,236,252,223,234,204,205,235,235,205,204,234,4,237,232,250,147,194,150,170,244,1,14,127, + 132,128,1,171,1,92,1,92,1,171,128,253,120,254,227,254,187,1,69,1,29,1,29,1,69,254,187,0,0,2,0,113,254,86,5,64,4,123,0,24, + 0,36,0,72,64,34,24,135,0,189,37,34,185,17,14,28,185,5,8,140,14,184,18,188,37,1,23,24,19,31,4,17,8,19,71,25,18,11,69,37, + 16,252,236,244,236,50,50,16,204,57,57,49,0,16,236,228,244,196,236,16,196,238,16,244,236,48,182,96,38,128,38,160,38,3,1,93,1,35,34,38, + 61,1,14,1,35,34,2,17,16,0,51,50,22,23,53,51,17,20,22,59,1,1,20,22,51,50,54,53,52,38,35,34,6,5,64,70,181,163,58,177, + 124,203,255,0,255,203,124,177,58,184,76,105,49,251,239,167,146,146,168,168,146,146,167,254,86,192,214,188,100,97,1,68,1,8,1,8,1,68,97,100, + 170,251,140,153,97,3,61,203,231,231,203,203,231,231,0,0,0,2,0,10,0,0,5,84,5,213,0,23,0,32,0,187,64,24,5,6,3,21,9,0, + 32,26,18,5,10,29,25,4,21,63,24,10,28,14,17,12,4,33,16,252,60,204,236,50,252,196,236,17,23,57,17,57,57,57,49,0,64,33,9,8, + 7,3,10,6,17,3,4,3,5,17,4,4,3,66,6,4,0,25,3,4,16,25,149,13,9,24,149,17,129,11,4,47,60,244,236,212,50,236,50,18, + 57,18,57,18,57,48,75,83,88,7,16,5,237,7,16,5,237,17,23,57,89,34,178,64,34,1,1,93,64,66,122,23,1,5,0,5,1,5,2,6, + 3,7,4,21,0,21,1,20,2,22,3,23,4,37,0,37,1,37,2,38,3,39,6,38,7,38,8,38,9,32,34,54,1,54,2,70,1,70,2,104, + 5,117,4,117,5,119,23,136,6,136,7,152,6,152,7,31,93,0,93,1,30,1,23,19,35,3,46,1,43,1,17,35,17,35,53,51,17,33,32,22, + 21,20,6,1,17,51,50,54,53,52,38,35,3,141,65,123,62,205,217,191,74,139,120,220,202,191,191,1,200,1,0,252,131,253,137,254,146,149,149,146, + 2,188,22,144,126,254,104,1,127,150,98,253,137,2,119,166,2,184,214,216,141,186,2,79,253,238,135,131,131,133,0,0,0,1,0,14,0,0,3,74, + 4,123,0,24,0,61,64,10,10,24,3,8,6,18,8,4,70,25,16,252,60,196,196,252,60,60,49,0,64,16,18,17,11,21,135,14,184,3,8,24, + 169,5,2,9,188,3,47,228,212,60,236,50,16,244,236,196,212,204,48,180,80,26,159,26,2,1,93,1,21,35,17,35,17,35,53,51,17,51,21,62, + 1,51,50,22,31,1,46,1,35,34,6,21,2,30,171,185,172,172,185,58,186,133,19,46,28,1,31,73,44,156,167,2,104,164,254,60,1,196,164,1, + 248,174,102,99,5,5,189,18,17,206,161,0,0,2,255,246,0,0,4,236,5,213,0,17,0,20,0,0,3,51,23,33,55,51,7,51,21,33,1,17, + 35,17,1,33,53,51,5,33,23,4,217,151,2,12,150,217,151,156,254,245,254,246,203,254,246,254,244,157,2,119,254,209,152,5,213,224,224,224,164,254, + 118,253,57,2,199,1,138,164,164,226,0,0,0,2,0,11,254,86,4,181,4,96,0,24,0,27,0,0,5,14,1,43,1,53,51,50,54,63,1,3, + 33,53,51,3,51,19,33,19,51,3,51,21,33,43,1,19,2,147,78,148,124,147,108,76,84,51,33,205,254,214,240,190,195,184,1,76,184,195,185,239, + 254,215,193,218,109,104,200,122,154,72,134,84,1,242,143,1,205,254,51,1,205,254,51,143,254,240,0,0,0,2,0,174,255,227,4,96,4,123,0,10, + 0,37,0,178,64,16,23,0,3,10,39,31,3,8,20,24,10,13,8,12,70,38,16,252,236,50,50,212,236,204,196,17,18,57,57,49,64,21,0,169, + 23,12,14,6,185,17,184,38,32,134,31,186,28,185,35,140,12,188,38,0,16,228,244,236,252,236,16,244,236,196,16,212,228,182,25,31,11,23,9,14, + 0,18,17,57,17,57,18,57,48,64,49,63,30,63,31,63,32,63,33,79,30,79,31,79,32,79,33,95,30,95,31,95,32,95,33,111,30,111,31,111, + 32,111,33,127,30,127,31,127,32,127,33,143,30,143,31,143,32,143,33,24,93,64,37,63,29,63,30,63,31,63,32,63,33,63,34,79,29,79,30,79, + 31,79,32,79,33,79,34,95,29,95,30,95,31,95,32,95,33,95,34,21,1,93,1,50,54,53,52,38,35,34,6,29,1,7,17,51,21,62,1,51, + 50,22,21,20,6,35,33,21,20,22,51,50,54,55,21,14,1,35,34,38,2,29,223,172,129,111,153,185,184,184,63,188,136,172,203,253,251,254,254,167, + 151,96,182,84,101,190,90,243,240,2,43,102,123,98,115,217,180,41,76,2,127,170,102,97,193,162,189,192,18,127,139,46,46,170,39,39,252,0,0,0, + 0,2,0,113,255,227,4,90,4,123,0,16,0,28,0,56,64,25,26,185,0,14,20,185,5,8,140,14,184,1,188,3,23,4,0,8,2,71,17,18, + 11,69,29,16,252,236,244,236,50,50,49,0,47,236,228,244,196,236,16,196,238,48,182,96,30,128,30,160,30,3,1,93,1,53,51,17,35,53,14,1, + 35,34,2,17,16,0,51,50,22,1,20,22,51,50,54,53,52,38,35,34,6,3,162,184,184,58,177,124,203,255,0,255,203,124,177,253,199,167,146,146, + 168,168,146,146,167,3,182,170,251,160,168,100,97,1,68,1,8,1,8,1,68,97,254,21,203,231,231,203,203,231,231,0,0,2,0,186,255,227,4,163, + 4,123,0,11,0,28,0,56,64,25,3,185,12,15,9,185,24,21,140,15,184,27,188,25,0,18,18,71,24,12,6,8,26,70,29,16,252,236,50,50, + 244,236,49,0,47,236,228,244,196,236,16,198,238,48,182,96,30,128,30,160,30,3,1,93,1,52,38,35,34,6,21,20,22,51,50,54,1,62,1,51, + 50,0,17,16,2,35,34,38,39,21,35,17,51,3,229,167,146,146,168,168,146,146,167,253,141,58,177,124,203,0,255,255,203,124,177,58,184,184,2,47, + 203,231,231,203,203,231,231,2,82,100,97,254,188,254,248,254,248,254,188,97,100,170,4,96,0,2,0,186,255,227,4,164,6,20,0,11,0,36,0,67, + 64,31,3,185,12,15,9,185,24,21,140,15,184,25,33,169,30,151,25,0,18,18,71,30,33,31,24,12,6,8,26,70,37,16,252,236,50,50,196,57, + 57,244,236,49,0,47,252,236,16,228,244,196,236,16,198,238,48,182,96,38,128,38,160,38,3,1,93,1,52,38,35,34,6,21,20,22,51,50,54,1, + 62,1,51,50,0,17,16,2,35,34,38,39,21,35,17,52,54,59,1,21,35,34,6,21,3,229,167,146,146,167,167,146,146,167,253,142,58,177,123,204, + 0,255,255,204,123,177,58,185,179,165,254,233,90,91,2,47,203,231,231,203,203,231,231,2,82,100,97,254,188,254,248,254,248,254,188,97,100,168,4,126, + 195,211,156,125,125,0,0,0,0,1,0,127,255,227,3,245,4,123,0,25,0,48,64,27,25,134,0,136,22,185,3,184,26,13,134,12,136,16,185,9, + 140,26,27,69,19,18,6,72,13,0,26,16,220,60,244,236,236,49,0,16,244,236,244,236,16,244,236,244,236,48,19,62,1,51,50,0,17,16,0,33, + 34,38,39,53,30,1,51,50,54,53,52,38,35,34,6,7,127,77,165,93,253,1,42,254,211,254,250,85,162,76,78,157,80,179,198,198,179,80,157,78, + 4,51,36,36,254,194,254,242,254,238,254,198,35,35,172,43,43,227,205,205,227,43,43,0,0,2,0,113,255,115,3,231,4,123,0,39,0,47,0,79, + 64,15,40,11,7,44,44,18,19,7,18,19,0,72,34,69,48,16,252,228,50,236,16,236,17,18,57,57,49,0,64,19,0,134,1,136,4,15,185,46, + 42,185,23,4,185,37,184,27,23,140,48,16,228,204,244,236,16,252,220,236,16,245,238,48,64,11,15,49,16,49,128,49,144,49,160,49,5,1,93,1, + 21,46,1,35,34,6,21,20,23,22,23,54,55,54,51,50,23,22,21,20,7,6,35,34,39,6,21,35,52,55,38,39,38,17,16,0,33,50,22,1, + 22,51,50,53,52,35,34,3,231,78,157,80,179,198,99,7,6,39,62,73,106,163,74,63,95,83,155,80,73,6,153,12,57,47,149,1,45,1,6,85, + 162,254,138,58,77,146,132,101,4,53,172,43,43,227,205,205,114,8,6,81,44,51,72,61,89,125,47,41,17,57,68,104,81,35,51,161,1,12,1,18, + 1,58,35,252,58,19,57,75,0,2,0,113,254,86,5,64,6,20,0,24,0,36,0,75,64,36,4,20,18,5,24,169,0,189,37,34,185,17,14,28, + 185,5,8,140,14,184,18,151,37,24,79,31,4,18,8,19,71,25,18,11,69,37,16,252,236,244,236,50,50,228,49,0,16,236,228,244,196,236,16,196, + 238,16,252,236,17,18,57,57,48,182,96,30,128,30,160,30,3,1,93,1,35,34,38,61,1,14,1,35,34,2,17,16,0,51,50,22,23,17,51,17, + 20,22,59,1,1,20,22,51,50,54,53,52,38,35,34,6,5,64,70,181,163,58,177,124,203,255,0,255,203,124,177,58,184,76,105,49,251,239,167,146, + 146,168,168,146,146,167,254,86,192,214,188,100,97,1,68,1,8,1,8,1,68,97,100,2,94,249,216,153,97,3,61,203,231,231,203,203,231,231,0,0, + 0,2,0,113,255,227,5,185,6,20,0,24,0,36,0,61,64,28,34,185,0,22,28,185,13,16,140,22,184,37,6,169,5,151,37,31,12,0,8,11, + 71,25,18,19,69,37,16,252,236,244,236,50,50,49,0,16,252,228,16,228,244,196,236,16,196,238,48,182,96,30,128,30,160,30,3,1,93,1,53,52, + 54,59,1,21,35,34,6,21,17,35,53,14,1,35,34,2,17,16,0,51,50,22,1,20,22,51,50,54,53,52,38,35,34,6,3,162,163,181,191,170, + 105,76,184,58,177,124,203,255,0,255,203,124,177,253,199,167,146,146,168,168,146,146,167,3,182,200,214,192,156,97,153,251,130,168,100,97,1,68,1,8, + 1,8,1,68,97,254,21,203,231,231,203,203,231,231,0,0,0,2,0,113,255,227,4,127,4,123,0,25,0,34,0,114,64,13,27,24,26,24,18,8, + 75,26,8,16,25,69,35,16,252,196,236,244,236,17,18,57,49,64,23,0,26,25,15,134,16,136,20,26,169,25,20,185,12,25,187,31,185,4,184,12, + 140,35,0,16,228,244,236,228,16,236,16,236,16,244,236,17,18,57,48,64,41,63,36,112,36,160,36,208,36,240,36,5,63,0,63,25,63,24,63,26, + 63,27,5,44,17,47,16,47,15,44,14,111,0,111,25,111,24,111,26,111,27,9,93,113,1,93,19,52,55,54,51,50,23,22,17,16,7,6,33,34, + 38,39,53,22,23,22,51,50,55,54,55,33,55,5,38,39,38,35,34,7,6,113,131,132,226,252,148,149,157,156,254,244,107,208,99,98,100,99,106,183, + 102,103,12,252,178,184,2,144,14,93,92,154,136,82,83,2,94,250,146,145,161,162,254,237,254,246,156,156,44,42,174,52,26,26,99,100,190,144,1,158, + 87,87,90,90,0,2,0,113,255,227,4,127,4,123,0,20,0,27,0,65,64,36,0,21,1,9,134,8,136,5,1,169,21,24,185,18,21,187,5,185, + 12,184,18,140,28,2,21,27,27,8,15,75,21,18,8,1,69,28,16,252,196,236,244,236,17,18,57,49,0,16,228,244,236,228,16,238,16,238,16,244, + 238,17,18,57,48,19,53,33,46,1,35,34,6,7,53,62,1,51,32,0,17,16,0,35,34,0,55,30,1,51,50,54,55,113,3,78,12,205,183,106, + 199,98,99,208,107,1,12,1,57,254,215,252,226,254,249,184,2,165,136,154,185,14,2,0,90,190,199,52,52,174,42,44,254,200,254,246,254,237,254,189, + 1,35,196,151,180,174,158,0,0,2,0,124,255,227,6,132,4,123,0,10,0,52,0,119,64,16,54,46,40,8,39,52,2,18,13,75,5,18,31,21, + 69,53,16,252,196,236,252,236,220,60,252,220,196,182,38,22,11,4,4,2,13,17,18,23,57,49,64,15,47,169,46,39,34,26,185,34,184,53,9,185, + 17,140,53,0,16,244,236,16,244,236,16,212,220,236,180,31,134,30,136,26,16,244,236,64,11,5,21,11,13,2,4,38,22,8,34,17,17,18,23,57, + 48,64,10,52,11,4,5,17,38,22,21,39,21,7,14,16,60,60,252,60,60,4,60,37,54,39,54,39,1,22,23,22,51,50,1,22,21,16,7,6, + 35,34,39,38,39,1,38,39,38,7,6,7,6,7,53,62,1,51,32,23,22,23,55,51,21,20,23,22,59,1,21,35,34,39,38,53,3,78,102,2, + 1,10,253,151,30,32,82,136,168,1,96,31,149,148,252,228,130,92,28,2,254,19,27,76,209,108,97,100,98,99,208,107,1,12,156,36,27,203,184,38, + 38,105,43,64,175,87,82,214,138,207,62,56,254,156,69,35,90,2,144,96,118,254,237,162,161,145,103,156,1,187,39,35,100,1,1,25,26,52,174,42, + 44,156,35,41,117,148,153,49,48,156,96,90,200,0,0,0,255,255,0,133,255,227,3,200,4,124,18,6,3,73,0,0,255,255,0,133,255,227,3,200, + 4,124,18,6,3,203,0,0,0,1,0,133,255,227,6,42,4,124,0,62,0,105,64,16,64,54,48,8,60,47,30,18,46,19,18,3,25,39,11,63, + 16,220,196,196,212,236,212,236,220,60,252,220,196,49,64,22,38,134,39,136,34,185,42,184,63,24,169,25,63,11,134,10,136,15,185,6,140,63,0,16, + 244,236,252,236,16,212,236,16,244,236,252,236,182,61,46,0,42,0,24,25,17,18,57,17,18,57,57,180,55,169,54,48,42,16,212,220,236,48,179,60, + 61,46,47,7,4,16,60,1,30,1,21,20,4,35,34,39,38,39,53,22,23,22,51,50,55,54,53,52,39,38,43,1,53,51,50,55,54,53,52,39, + 38,35,34,7,6,7,53,62,1,51,50,23,22,23,55,51,21,20,23,22,59,1,21,35,34,39,38,53,5,6,2,194,124,138,254,254,238,80,85,84, + 90,71,85,85,93,151,85,84,78,72,137,148,155,116,67,68,70,69,119,71,81,80,97,98,170,76,196,113,95,15,236,184,38,38,105,43,64,175,87,82, + 254,224,64,2,92,24,146,108,173,182,14,14,28,171,37,19,18,56,56,90,88,56,51,152,44,45,70,64,46,46,13,13,29,167,24,24,78,66,106,134, + 148,153,49,48,156,96,90,200,166,70,0,0,0,2,0,113,255,227,4,197,4,124,0,26,0,47,0,59,64,13,23,18,31,49,18,12,18,38,4,18, + 44,69,48,16,252,236,212,236,196,196,212,236,49,64,14,0,185,27,184,48,17,169,18,48,8,185,41,140,48,0,16,244,236,16,212,236,16,244,236,178, + 35,18,17,17,18,57,48,1,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,43,1,53,51,50,55,54,53,52,39,38,39,50,23,22,21,20, + 7,6,7,30,1,21,20,4,35,32,0,17,16,55,54,2,241,251,96,99,99,104,210,151,85,84,78,72,137,148,155,116,67,68,70,69,104,196,113,114, + 60,60,112,124,138,254,254,238,254,198,254,214,151,151,3,220,110,114,205,208,111,116,56,56,90,88,56,51,152,44,45,70,64,46,46,160,78,79,141,93, + 64,65,24,24,146,108,173,182,1,62,1,14,1,18,157,158,0,1,255,219,254,86,2,28,4,96,0,19,0,75,64,31,15,6,11,0,11,135,9,189, + 20,2,19,169,5,16,0,188,20,12,20,9,10,79,2,5,1,8,19,16,0,70,20,16,252,60,60,236,50,50,228,57,18,57,49,0,16,228,220,60, + 228,50,16,244,236,17,18,57,57,48,64,11,16,21,64,21,80,21,96,21,112,21,5,1,93,19,51,17,51,21,35,17,20,6,43,1,53,51,50,54, + 53,17,35,53,51,193,184,163,163,163,181,70,49,105,76,181,181,4,96,254,8,164,254,40,214,192,156,97,153,1,216,164,0,2,0,113,254,86,5,184, + 6,20,0,11,0,48,0,85,64,41,25,12,29,9,18,134,19,22,185,15,3,185,38,35,184,29,45,169,42,151,9,185,15,189,26,29,42,45,43,38, + 25,0,8,12,71,6,18,18,32,69,49,16,252,196,236,244,236,50,50,196,57,57,49,0,47,196,228,236,244,236,16,244,196,236,16,254,213,238,17,18, + 57,57,48,182,96,50,128,50,160,50,3,1,93,1,52,38,35,34,6,21,20,22,51,50,54,23,16,2,33,34,38,39,53,30,1,51,50,54,61,1, + 14,1,35,34,2,17,16,18,51,50,22,23,53,52,54,59,1,21,35,34,6,21,3,162,165,149,148,165,165,148,149,165,184,254,254,250,97,172,81,81, + 158,82,181,180,57,178,124,206,252,252,206,124,178,57,163,181,190,169,105,76,2,61,200,220,220,200,199,220,220,235,254,226,254,233,29,30,179,44,42,189, + 191,91,99,98,1,58,1,3,1,4,1,58,98,99,200,214,192,156,97,153,0,2,0,113,254,86,4,90,4,96,0,10,0,35,0,67,64,31,24,11, + 28,8,17,134,18,21,185,14,2,185,35,188,8,185,14,189,25,28,24,0,8,11,71,5,18,17,31,69,36,16,252,196,236,244,236,50,49,0,47,196, + 228,236,244,236,16,254,213,238,17,18,57,57,48,182,96,37,128,37,160,37,3,1,93,1,17,33,34,6,21,20,22,51,50,54,23,16,2,33,34,38, + 39,53,30,1,51,50,54,61,1,14,1,35,34,2,17,52,18,51,33,3,162,254,170,135,150,165,148,149,165,184,254,254,250,97,172,81,81,158,82,181, + 180,57,178,124,206,252,252,206,2,31,2,61,1,136,205,187,199,220,220,235,254,226,254,233,29,30,179,44,42,189,191,91,99,98,1,58,1,3,249,1, + 42,0,0,0,0,1,0,113,255,227,4,79,4,123,0,29,0,56,64,31,0,5,27,1,169,3,27,185,8,18,134,17,136,21,185,14,184,8,140,30, + 2,0,8,17,52,4,24,18,11,69,30,16,252,236,220,228,252,196,49,0,16,228,244,236,244,236,16,254,212,238,17,57,57,48,37,17,35,53,33,17, + 14,1,35,34,0,17,16,0,33,50,22,23,21,46,1,35,34,6,21,20,22,51,50,54,3,169,155,1,65,101,215,123,253,254,214,1,45,1,6,104, + 197,93,95,192,99,179,198,198,179,79,124,158,1,17,140,253,240,36,36,1,62,1,14,1,18,1,58,55,55,170,62,62,227,205,205,227,15,0,0,0, + 0,2,0,96,254,82,4,100,4,96,0,19,0,35,0,121,64,10,37,2,24,18,7,32,18,13,18,36,16,212,212,236,212,236,212,196,181,0,28,20, + 3,24,32,17,18,23,57,49,64,10,20,185,10,189,1,19,2,18,188,36,0,16,228,50,50,50,244,236,179,13,7,28,10,17,18,57,57,48,180,19, + 17,18,18,28,7,5,16,236,179,17,18,2,28,8,16,60,180,1,17,2,2,28,7,5,16,236,181,0,1,3,2,18,28,8,16,60,4,16,60,179, + 3,0,19,0,7,14,16,60,179,17,0,1,0,7,14,16,60,9,1,51,1,22,23,22,21,20,6,35,34,38,53,52,55,54,55,1,51,1,50,55, + 54,53,52,39,38,39,6,7,6,21,20,23,22,2,98,1,66,192,254,95,106,38,59,150,150,150,150,59,38,106,254,95,192,1,66,67,31,28,28,40, + 58,58,40,28,28,31,1,232,2,120,252,220,177,83,128,99,129,130,130,129,99,128,83,177,3,36,250,142,27,24,45,69,73,100,99,99,100,73,69,45, + 24,27,0,0,0,2,0,96,255,227,4,100,4,96,0,19,0,35,0,121,64,10,37,2,24,18,7,32,18,13,18,36,16,212,212,236,212,236,212,196, + 181,0,28,20,3,24,32,17,18,23,57,49,64,10,20,185,10,140,1,19,2,18,188,36,0,16,228,50,50,50,244,236,179,13,7,28,10,17,18,57, + 57,48,180,19,17,18,18,28,7,5,16,236,179,17,18,2,28,8,16,60,180,1,17,2,2,28,7,5,16,236,181,0,1,3,2,18,28,8,16,60, + 4,16,60,179,3,0,19,0,7,14,16,60,179,17,0,1,0,7,14,16,60,9,1,51,1,22,23,22,21,20,6,35,34,38,53,52,55,54,55,1, + 51,1,50,55,54,53,52,39,38,39,6,7,6,21,20,23,22,2,98,1,41,217,254,114,71,44,69,150,150,150,150,69,44,71,254,114,217,1,41,67, + 31,28,39,31,56,56,31,39,28,31,2,209,1,143,253,234,98,76,120,62,130,129,129,130,62,120,76,98,2,22,252,31,27,24,45,33,64,50,70,70, + 50,64,33,45,24,27,0,0,0,1,0,174,254,86,4,88,4,96,0,19,0,57,64,27,3,9,0,3,14,1,6,135,14,17,140,10,1,188,12,189, + 20,13,9,8,11,78,2,8,0,70,20,16,252,236,244,236,50,49,0,16,228,228,50,244,196,236,17,18,23,57,48,180,96,21,207,21,2,1,93,19, + 17,51,17,20,22,51,50,54,53,17,51,17,35,17,14,1,35,34,38,174,184,124,124,149,173,184,184,67,177,117,193,200,1,186,2,166,253,97,159,159, + 190,164,2,123,249,246,2,86,102,99,240,0,0,1,0,186,0,0,4,100,6,20,0,27,0,67,64,33,3,9,0,3,22,1,6,135,22,25,184,28, + 12,21,18,169,15,151,10,1,2,8,0,78,15,18,16,21,9,8,11,70,28,16,252,236,50,196,57,57,244,236,49,0,47,60,252,236,57,57,16,244, + 196,236,17,18,23,57,48,178,96,29,1,1,93,1,17,35,17,52,38,35,34,6,21,17,35,17,52,54,59,1,21,35,34,6,29,1,62,1,51,50, + 22,4,100,184,124,124,149,172,185,163,181,254,231,105,77,66,179,117,193,198,2,164,253,92,2,158,159,158,190,164,253,135,4,126,214,192,156,97,153,204, + 101,100,239,0,0,1,0,186,254,86,4,100,6,20,0,33,0,74,64,37,3,9,0,3,29,1,13,135,29,31,184,34,19,28,25,169,22,151,18,7, + 135,4,18,6,10,8,0,78,22,25,23,28,16,8,18,70,34,16,252,236,50,196,57,57,244,236,196,49,0,47,220,236,16,252,236,57,57,16,244,196, + 236,17,18,23,57,48,178,96,35,1,1,93,1,17,20,6,43,1,53,51,50,54,53,17,16,35,34,6,21,17,35,17,52,54,59,1,21,35,34,6, + 29,1,54,51,50,22,4,100,163,181,254,233,105,76,248,149,172,185,163,181,254,231,105,77,131,231,193,198,2,164,253,72,214,192,156,97,153,2,178,1, + 61,190,164,253,135,4,126,214,192,156,97,153,204,201,239,0,0,2,0,14,0,0,2,30,6,20,0,11,0,15,0,62,64,24,14,190,12,177,6,2, + 11,169,5,8,0,188,6,5,2,13,1,8,8,11,12,0,70,16,16,252,60,60,60,236,50,50,50,49,0,47,228,220,60,236,50,16,252,236,48,64, + 11,16,17,64,17,80,17,96,17,112,17,5,1,93,19,51,17,51,21,35,17,35,17,35,53,51,17,51,21,35,194,184,164,164,184,180,180,184,184,4, + 96,254,8,164,254,60,1,196,164,3,172,233,255,255,0,166,0,0,2,110,4,96,16,6,3,77,0,0,0,1,0,116,0,0,2,132,4,96,0,11, + 0,39,64,10,3,6,8,4,8,0,9,8,10,12,16,220,236,50,252,236,50,49,0,64,9,4,11,169,1,188,5,9,169,8,47,236,50,252,236,50, + 48,19,53,33,21,35,17,51,21,33,53,51,17,116,2,16,168,168,253,240,176,3,188,164,164,252,232,164,164,3,24,0,0,1,0,75,0,0,2,223, + 6,20,0,35,0,60,64,13,37,11,86,10,18,1,8,0,19,28,86,29,36,16,220,252,220,60,252,60,220,252,212,49,64,18,20,17,2,35,4,15, + 33,6,195,15,29,11,33,195,24,0,151,19,0,47,228,47,236,50,212,60,236,17,18,23,57,48,1,51,17,22,23,22,51,50,55,54,55,51,6,7, + 6,35,34,39,17,35,17,38,39,38,35,34,7,6,7,35,54,55,54,51,50,23,1,61,184,2,1,17,13,38,18,18,2,125,2,51,51,91,20,19, + 184,6,5,17,13,38,18,18,2,125,2,51,51,91,25,22,6,20,252,237,1,1,9,37,36,82,135,73,74,4,253,133,3,2,4,3,9,37,36,82, + 135,73,74,6,0,2,0,77,0,0,3,84,6,20,0,17,0,24,0,53,64,11,26,4,5,1,8,18,0,7,22,13,25,16,220,220,212,60,50,252, + 60,220,196,49,64,14,17,15,185,20,10,5,169,18,2,2,7,0,151,7,0,47,228,17,57,47,60,236,50,212,236,196,48,1,51,17,51,21,35,17, + 35,17,52,39,35,32,55,54,51,50,23,7,38,35,34,7,20,51,1,162,184,250,250,184,1,61,254,232,1,1,245,53,42,16,23,55,77,1,92,6, + 20,252,254,160,253,142,2,84,15,15,189,246,25,250,132,75,57,0,0,0,0,1,0,193,254,86,2,95,6,20,0,11,0,40,64,7,13,6,0,8, + 11,70,12,16,252,252,212,196,49,0,64,12,10,1,5,0,11,151,12,5,135,6,189,12,16,244,236,16,228,17,18,57,57,48,1,17,20,22,59,1, + 21,35,34,38,53,17,1,121,61,120,49,70,191,153,6,20,249,206,124,116,156,204,202,6,40,0,0,0,0,1,0,193,254,76,5,54,6,20,0,36, + 0,178,64,14,27,35,21,18,38,6,14,35,29,34,8,32,70,37,16,252,252,60,212,196,212,196,236,16,204,178,0,35,27,17,18,57,49,64,24,27, + 66,0,169,26,26,34,31,29,169,34,14,134,13,147,17,185,9,189,34,188,32,151,31,0,47,228,228,252,236,244,236,16,236,17,18,57,47,236,236,179, + 21,6,0,9,17,18,57,57,48,64,8,27,17,0,28,17,36,26,35,7,5,16,236,4,16,236,64,27,12,28,10,0,27,28,25,0,42,28,42,0, + 56,0,59,28,73,0,76,28,84,0,91,28,113,0,13,1,93,64,27,4,27,4,36,20,27,20,36,37,27,36,36,53,36,55,27,69,36,70,27,84, + 36,92,27,127,27,13,0,93,64,9,7,11,6,12,26,12,26,15,4,93,1,50,23,22,23,22,21,20,4,33,34,39,38,39,53,30,1,51,50,55, + 54,53,52,39,38,43,1,53,1,33,17,35,17,51,17,33,21,3,67,105,129,99,85,81,254,208,254,232,94,99,100,106,84,200,109,190,99,100,92,91, + 167,174,1,174,253,106,184,184,3,101,1,220,56,43,108,104,138,221,242,18,19,37,195,49,50,75,75,143,132,75,74,166,1,243,252,51,6,20,254,76, + 168,0,0,0,0,1,0,186,255,230,7,29,4,98,0,38,0,94,64,17,0,18,20,30,27,8,29,80,18,8,20,80,10,8,8,70,39,16,252,236, + 252,252,252,252,60,17,18,57,49,64,22,7,20,10,26,17,0,6,31,8,13,23,135,31,4,35,140,39,27,18,8,188,39,0,16,244,60,60,16,244, + 60,196,236,50,17,18,23,57,48,64,19,48,40,80,40,112,40,144,40,160,40,160,40,191,40,223,40,255,40,9,1,93,37,6,7,6,35,34,38,53, + 17,51,17,20,22,51,50,55,54,53,17,51,17,20,22,51,50,54,53,17,51,17,35,53,6,7,6,35,34,39,38,3,174,67,98,96,130,175,190,185, + 114,117,143,83,83,185,114,119,141,166,185,185,61,90,88,121,122,86,85,216,121,61,60,246,226,2,164,253,98,162,156,96,94,164,2,122,253,98,162,156, + 192,162,2,122,251,158,176,101,51,50,62,62,0,1,0,186,254,86,7,29,4,98,0,38,0,97,64,17,0,18,20,30,27,8,29,80,18,8,20,80, + 10,8,8,70,39,16,252,236,252,252,252,252,60,17,18,57,49,64,24,7,20,10,26,17,0,6,31,8,13,23,135,31,4,35,140,39,27,18,8,188, + 29,189,39,0,16,236,244,60,60,16,244,60,196,236,50,17,18,23,57,48,64,19,48,40,80,40,112,40,144,40,160,40,160,40,191,40,223,40,255,40, + 9,1,93,37,6,7,6,35,34,38,53,17,51,17,20,22,51,50,55,54,53,17,51,17,20,22,51,50,54,53,17,51,17,35,17,6,7,6,35,34, + 39,38,3,174,67,98,96,130,175,190,185,114,117,143,83,83,185,114,119,141,166,185,185,61,90,88,121,122,86,85,216,121,61,60,246,226,2,164,253,98, + 162,156,96,94,164,2,122,253,98,162,156,192,162,2,122,249,244,2,90,101,51,50,62,62,0,1,0,186,254,86,7,29,4,123,0,48,0,99,64,18, + 14,0,17,15,19,8,7,80,28,8,26,80,41,37,8,39,70,49,16,252,236,50,252,252,252,236,17,18,57,204,49,0,64,24,14,135,13,27,7,29, + 20,37,26,0,6,42,27,33,23,135,42,45,3,184,40,188,38,27,47,60,228,244,60,196,236,50,17,18,23,57,16,212,236,48,1,64,19,48,50,80, + 50,112,50,144,50,160,50,160,50,191,50,223,50,255,50,9,93,1,62,1,51,50,23,22,21,17,20,7,6,43,1,53,51,50,55,54,53,3,52,38, + 35,34,6,21,17,35,17,52,39,38,35,34,7,6,21,17,35,17,51,21,62,1,51,50,23,22,4,41,69,192,130,175,95,95,82,81,181,254,233,105, + 38,38,1,114,117,143,166,185,57,57,119,141,83,83,185,185,63,176,121,122,85,86,3,137,124,118,123,122,226,253,72,214,96,96,156,48,49,153,2,178, + 161,156,190,164,253,135,2,158,162,78,77,95,96,163,253,135,4,96,174,103,98,62,62,0,0,1,255,219,254,86,4,107,4,123,0,27,0,81,64,15, + 2,8,0,78,16,28,13,14,79,10,21,8,20,70,28,16,252,236,50,228,57,18,57,244,236,49,0,64,14,3,9,0,3,22,1,6,135,22,25,184, + 20,188,1,47,228,244,196,236,17,18,23,57,64,9,19,10,15,20,15,135,13,189,28,16,244,236,17,18,57,57,48,180,96,29,207,29,2,1,93,1, + 17,35,17,52,38,35,34,6,21,17,20,6,43,1,53,51,50,54,53,17,51,21,62,1,51,50,22,4,107,184,124,124,149,173,163,181,70,49,105,76, + 185,66,179,117,193,198,2,164,253,92,2,158,159,158,190,164,253,115,214,192,156,97,153,4,116,174,101,100,239,0,0,0,0,1,0,186,254,86,5,74, + 4,123,0,29,0,59,64,12,23,26,3,8,21,78,9,13,8,12,70,30,16,252,236,50,244,236,220,196,49,64,13,6,135,14,17,184,12,188,11,26, + 169,27,189,11,0,47,252,236,16,228,244,196,236,181,9,3,20,3,14,10,17,18,23,57,48,1,38,53,17,52,38,35,34,6,21,17,35,17,51,21, + 62,1,51,50,22,21,17,20,23,22,59,1,21,35,34,3,254,82,124,124,149,172,185,185,66,179,117,193,198,38,38,105,49,70,181,254,182,96,214,2, + 178,159,158,190,164,253,135,4,96,174,101,100,239,232,253,72,153,49,48,156,0,1,0,179,0,0,4,100,4,96,0,9,0,121,64,30,7,17,1,2, + 1,2,17,6,7,6,66,7,2,3,0,188,8,5,6,1,7,2,8,4,78,7,8,0,70,10,16,252,236,252,236,17,57,57,49,0,47,60,236,50, + 57,57,48,75,83,88,7,16,4,237,7,16,4,237,89,34,178,31,11,1,1,93,64,48,54,2,56,7,72,2,71,7,105,2,102,7,128,2,7,6, + 1,9,6,21,1,26,6,70,1,73,6,87,1,88,6,101,1,105,6,121,6,133,1,138,6,149,1,154,6,159,11,16,93,0,93,19,33,1,17,51, + 17,33,1,17,35,179,1,16,1,221,196,254,240,254,35,196,4,96,252,121,3,135,251,160,3,108,252,148,0,3,0,113,255,227,4,117,4,123,0,6, + 0,13,0,25,0,44,64,24,4,169,11,7,185,20,0,185,14,184,20,140,26,10,4,18,17,81,11,3,18,23,69,26,16,252,236,50,244,236,50,49, + 0,16,228,244,236,16,238,220,236,48,1,34,6,7,33,46,1,3,50,54,53,33,20,22,19,50,0,17,16,0,35,34,0,17,16,0,2,113,147,149, + 18,2,116,18,149,146,149,168,253,134,168,150,240,1,18,254,238,240,241,254,239,1,17,3,223,193,127,127,193,252,160,232,148,148,232,3,252,254,200,254, + 236,254,237,254,199,1,57,1,19,1,20,1,56,0,0,0,0,2,0,113,0,0,6,36,4,96,0,18,0,29,0,73,64,13,31,4,0,9,6,2, + 8,19,24,18,14,69,30,16,252,236,212,236,50,212,196,196,196,179,10,18,2,19,17,18,57,57,49,64,10,2,19,169,18,188,10,29,7,169,10,0, + 47,252,60,16,244,252,60,64,8,3,169,6,6,14,14,19,10,17,18,57,16,208,47,236,48,1,21,33,17,33,21,33,17,33,21,33,32,39,38,17, + 16,55,54,33,23,35,34,7,6,21,20,23,22,59,1,6,22,253,212,2,21,253,235,2,58,252,225,254,187,167,168,168,167,1,69,42,37,240,120,120, + 120,120,240,37,4,96,154,254,221,155,254,148,156,142,143,1,20,1,18,142,143,130,108,107,216,217,108,109,0,2,0,148,255,220,5,62,4,124,0,19, + 0,36,0,50,64,13,38,69,7,18,25,19,8,0,12,18,20,69,37,16,252,236,212,252,212,236,236,49,0,64,13,0,10,135,23,3,15,135,30,35, + 140,23,184,37,16,228,244,60,236,50,16,236,196,48,1,21,20,22,50,55,54,53,16,2,32,2,17,20,23,22,50,54,61,1,5,16,0,32,0,17, + 20,6,7,6,34,38,39,14,1,34,38,3,72,96,107,38,73,208,254,110,202,73,38,107,96,254,4,1,66,2,34,1,70,58,46,97,215,162,12,18, + 157,214,215,2,148,196,163,181,48,91,157,1,15,1,49,254,208,254,240,157,91,48,181,163,196,200,1,84,1,92,254,164,254,128,108,178,54,112,163,117, + 121,159,237,0,255,255,0,112,254,86,4,209,6,20,18,6,3,105,0,0,0,1,0,0,255,229,2,144,4,96,0,14,0,47,64,9,7,2,4,10, + 14,8,13,4,15,16,47,220,236,50,17,57,57,49,0,64,13,10,0,11,5,4,0,7,135,2,140,12,188,13,47,236,244,236,196,212,204,17,18,57, + 48,37,6,33,34,47,1,22,51,50,54,53,17,51,17,35,1,215,114,254,249,37,56,1,60,88,156,167,185,185,174,201,10,189,35,203,190,2,78,251, + 160,0,0,0,0,1,0,0,255,229,2,144,6,10,0,14,0,47,64,9,7,2,4,10,14,8,13,4,15,16,47,220,236,50,17,57,57,49,0,64, + 13,10,0,11,5,4,0,7,135,2,140,12,151,13,47,236,244,236,196,212,204,17,18,57,48,37,6,33,34,47,1,22,51,50,54,53,17,51,17,35, + 1,215,114,254,249,37,56,1,60,88,159,164,185,185,174,201,10,189,35,206,187,3,248,249,246,0,0,0,0,1,0,0,254,86,3,118,4,96,0,22, + 0,68,64,12,17,79,13,7,2,4,10,22,8,13,4,15,16,47,220,236,50,17,57,57,16,228,49,0,64,22,22,13,11,0,17,169,18,189,23,10, + 0,11,5,4,0,7,135,2,140,12,188,23,16,236,244,236,196,212,204,17,18,57,16,252,236,17,18,57,57,48,37,6,33,34,47,1,22,51,50,54, + 53,17,51,17,20,22,59,1,21,35,34,38,53,1,215,114,254,249,37,56,1,60,88,156,167,185,76,105,49,70,181,163,174,201,10,189,35,203,190,2, + 78,251,140,153,97,156,192,214,0,1,0,186,254,88,3,74,4,123,0,17,0,51,64,22,6,11,7,0,17,11,3,135,14,184,9,188,7,189,18,10, + 6,8,0,8,70,18,16,252,196,236,50,49,0,16,236,228,244,236,196,212,204,17,18,57,48,180,80,19,159,19,2,1,93,1,46,1,35,34,6,21, + 17,35,17,51,21,62,1,51,50,22,23,3,74,31,73,44,156,167,185,185,58,186,133,19,46,28,3,180,18,17,203,190,252,10,6,8,174,102,99,5, + 5,0,0,0,0,1,0,186,254,86,3,74,4,123,0,25,0,58,64,26,6,19,7,11,135,12,189,26,0,25,19,3,135,24,184,17,188,26,11,18, + 6,8,0,16,70,26,16,252,196,236,50,196,49,0,16,228,244,236,196,212,204,16,244,236,17,18,57,48,180,80,27,159,27,2,1,93,1,46,1,35, + 34,6,21,17,20,22,59,1,21,35,34,38,53,17,51,21,62,1,51,50,22,23,3,74,31,73,44,157,167,76,105,233,254,181,163,185,58,186,133,19, + 46,28,3,180,18,17,203,190,253,158,153,97,156,192,214,4,116,174,102,99,5,5,0,0,0,1,0,132,0,0,3,126,4,123,0,15,0,37,64,7, + 2,12,0,8,5,7,16,16,220,204,236,50,204,49,0,64,10,0,7,12,135,11,188,1,6,135,4,47,236,50,252,236,57,57,48,1,17,51,21,33, + 53,51,17,52,54,59,1,21,35,34,6,1,224,164,254,0,164,163,181,254,233,105,76,2,229,253,191,164,164,2,65,214,192,156,97,0,0,1,0,116, + 0,0,3,126,4,123,0,15,0,37,64,7,2,0,8,12,5,7,16,16,220,204,204,252,204,49,0,64,10,0,7,10,135,13,188,1,6,135,4,47, + 236,50,252,236,57,57,48,1,17,51,21,33,53,51,17,52,38,43,1,53,51,50,22,2,202,180,253,240,164,76,105,233,254,181,163,2,229,253,191,164, + 164,2,65,153,97,156,192,0,0,2,0,186,0,0,4,151,4,96,0,19,0,28,0,176,64,52,9,8,7,3,10,6,17,3,4,3,5,17,4,4, + 3,66,6,4,0,21,3,4,21,169,9,20,169,13,188,11,4,5,6,3,17,9,0,28,22,14,5,10,25,18,4,17,20,10,8,12,70,29,16,252, + 236,50,220,196,236,17,23,57,17,57,57,57,49,0,47,60,244,236,212,236,18,57,18,57,18,57,48,75,83,88,7,16,5,237,7,16,5,237,17,23, + 57,89,34,178,64,30,1,1,93,64,66,122,19,1,5,0,5,1,5,2,6,3,7,4,21,0,21,1,20,2,22,3,23,4,37,0,37,1,37,2, + 38,3,39,6,38,7,38,8,38,9,32,30,54,1,54,2,70,1,70,2,104,5,117,4,117,5,119,19,136,6,136,7,152,6,152,7,31,93,0,93, + 1,30,1,23,19,35,3,46,1,43,1,17,35,17,33,50,22,21,20,6,1,17,51,50,54,53,52,38,35,3,20,48,115,50,174,195,162,74,123,81, + 169,185,1,132,218,214,112,253,245,198,119,127,117,129,2,13,10,116,93,254,206,1,31,128,58,254,39,4,96,158,165,105,140,1,157,254,175,86,78,77, + 96,0,0,0,0,2,0,186,0,0,4,151,4,96,0,19,0,28,0,69,64,21,9,7,6,15,3,12,28,22,18,5,2,25,18,8,15,1,20,8, + 0,70,29,16,252,236,50,220,196,236,17,23,57,17,57,57,57,49,0,64,15,6,8,12,20,9,8,3,169,20,21,169,8,0,188,19,47,228,50,236, + 212,236,17,57,17,57,17,57,48,19,51,17,51,50,54,55,19,51,3,14,1,7,30,1,21,20,6,35,33,19,17,51,50,54,53,52,38,35,186,185, + 169,81,123,74,162,195,174,50,115,48,106,112,214,218,254,124,185,198,129,117,127,119,4,96,254,39,58,128,1,31,254,206,93,116,10,27,140,105,165,158, + 1,236,254,175,96,77,78,86,0,1,0,111,254,86,3,199,4,123,0,48,0,128,64,67,13,12,2,14,11,83,40,39,8,9,2,7,10,83,39,40, + 39,66,25,169,26,189,49,10,11,39,40,4,31,0,134,1,137,4,31,137,33,185,17,4,185,46,184,17,140,49,26,21,8,30,39,10,11,40,36,7, + 0,82,36,8,14,7,8,30,43,69,49,16,252,196,236,212,236,228,17,18,57,57,57,57,16,236,204,49,0,16,228,244,236,16,254,245,16,245,238,18, + 23,57,16,252,236,48,75,83,88,7,16,14,237,17,23,57,7,14,237,17,23,57,89,34,178,0,48,1,1,93,1,21,46,1,35,34,6,21,20,22, + 31,1,30,1,21,20,6,35,34,47,1,21,20,22,59,1,21,35,34,38,61,1,22,51,50,54,53,52,38,47,1,46,1,53,52,54,51,50,22,3, + 139,78,168,90,137,137,98,148,63,196,165,247,216,100,88,21,76,105,233,254,181,163,204,193,130,140,101,171,64,171,152,224,206,102,180,4,63,174,40,40, + 84,84,64,73,33,14,42,153,137,156,182,17,4,12,153,97,156,192,214,251,106,89,81,75,80,37,15,36,149,130,158,172,30,0,0,0,0,1,255,217, + 254,86,2,215,6,20,0,19,0,52,64,13,17,20,14,15,79,5,11,10,8,1,0,70,20,16,252,60,236,50,50,228,57,18,57,49,0,64,13,16, + 135,15,189,20,10,1,6,6,135,5,151,20,16,252,236,18,57,57,16,244,236,48,23,17,52,54,59,1,21,35,34,6,21,17,20,6,43,1,53,51, + 50,54,190,174,189,174,176,99,77,163,181,70,49,105,75,20,4,194,187,171,153,80,104,251,41,214,192,156,97,0,0,0,0,1,255,217,254,86,2,215, + 6,20,0,32,0,79,64,18,13,32,28,1,22,33,19,20,79,5,16,10,8,25,30,1,70,33,16,252,60,60,236,50,50,228,57,18,57,16,204,50, + 196,49,0,64,23,30,169,0,188,33,12,28,169,15,27,21,135,20,189,33,10,1,6,6,135,5,151,33,16,252,236,18,57,57,16,244,236,212,60,236, + 50,16,244,236,48,19,53,52,54,59,1,21,35,34,6,21,17,23,51,21,35,17,20,6,43,1,53,51,50,54,53,17,35,53,51,17,35,53,190,174, + 189,174,176,99,77,1,162,163,163,181,70,49,105,75,180,180,175,4,96,78,187,171,153,80,104,253,168,3,164,254,40,214,192,156,97,153,1,216,164,1, + 105,143,0,0,0,1,0,55,254,86,3,53,4,101,0,19,0,34,182,15,79,11,8,1,6,20,16,212,220,252,236,49,0,64,10,14,135,16,189,20, + 4,135,6,188,20,16,244,236,16,244,236,48,5,17,52,38,43,1,53,51,50,22,21,17,20,22,59,1,21,35,34,38,1,151,77,99,176,174,189,174, + 75,105,49,70,181,163,20,3,40,104,80,153,171,187,252,237,153,97,156,192,0,2,254,242,254,86,2,215,6,20,0,22,0,31,0,50,64,12,26,9, + 13,2,17,3,22,8,23,13,79,32,16,252,50,252,50,204,204,16,212,204,49,0,64,12,28,7,3,24,135,0,19,135,17,151,11,0,47,60,244,236, + 16,236,50,212,204,48,33,51,21,35,6,7,6,35,32,53,52,33,51,17,52,54,59,1,21,35,34,6,21,3,35,34,23,22,51,50,55,54,1,119, + 183,191,18,53,82,181,254,209,1,14,190,174,189,174,176,99,77,195,179,119,3,3,124,110,33,17,155,111,64,96,216,210,4,174,187,171,153,80,104,250, + 163,51,65,48,24,0,0,0,0,1,0,55,254,192,2,242,4,94,0,19,0,51,64,9,8,11,14,18,8,5,1,9,2,47,60,212,60,236,50,57, + 57,49,0,64,12,14,5,0,8,169,11,188,15,3,169,18,2,47,60,236,50,244,236,196,57,57,48,1,178,175,21,1,93,1,17,33,53,33,17,52, + 38,43,1,53,51,50,22,21,17,51,21,35,17,1,178,254,133,1,123,75,115,189,189,213,162,135,135,254,192,1,62,143,2,96,137,78,154,159,210,253, + 160,143,254,194,0,1,0,55,254,86,2,246,5,158,0,19,0,61,64,28,14,5,8,15,3,169,0,17,1,188,20,8,135,11,189,20,11,8,9,2, + 4,0,8,16,18,14,70,20,16,252,60,196,252,60,196,50,57,57,49,0,16,252,236,16,244,60,196,236,50,17,57,57,48,178,175,21,1,1,93,1, + 17,33,21,33,17,20,22,59,1,21,35,34,38,53,17,35,53,51,17,1,119,1,123,254,133,76,105,202,224,181,163,135,135,5,158,254,194,143,252,27, + 153,97,156,192,214,3,229,143,1,62,0,0,0,2,0,0,255,227,5,18,4,96,0,22,0,30,0,67,64,31,13,1,28,135,16,0,7,4,169,10, + 20,23,13,16,140,5,1,188,11,23,12,4,8,6,78,24,2,8,0,70,31,16,252,236,50,244,236,50,50,49,0,47,228,50,244,196,220,50,50,236, + 50,50,16,252,17,18,48,180,96,32,207,32,2,1,93,19,17,51,17,33,17,51,17,51,21,35,17,35,53,14,1,35,34,38,61,1,35,53,5,33, + 21,20,22,51,50,54,174,184,2,58,184,186,186,184,67,177,117,193,200,174,3,159,253,199,124,124,143,178,2,104,1,248,254,8,1,248,254,8,164,254, + 60,172,102,99,240,231,10,164,165,2,159,159,186,0,0,0,0,1,0,113,255,226,4,132,4,96,0,31,0,83,64,13,29,26,18,33,0,4,17,20, + 18,14,10,4,32,16,252,196,252,196,212,196,204,252,196,49,0,64,14,17,29,13,1,169,30,16,188,32,23,185,7,140,32,16,244,236,16,252,60,236, + 50,50,50,48,1,64,25,224,17,224,16,239,29,239,30,208,17,208,16,223,29,223,30,64,17,64,16,79,29,79,30,12,93,1,35,30,1,21,20,0, + 35,34,0,53,52,54,55,35,53,33,21,14,1,21,20,22,51,50,54,53,52,38,39,55,33,4,132,236,97,127,254,228,225,225,254,228,127,97,237,1, + 186,102,136,176,144,144,176,136,102,1,1,180,3,188,72,235,152,235,254,220,1,36,235,152,235,72,164,220,66,215,139,159,194,194,159,139,215,66,220,0, + 0,1,0,193,0,0,4,92,4,98,0,30,0,44,64,12,32,0,18,20,25,5,16,12,8,9,70,31,16,252,252,196,196,196,212,236,57,49,0,64, + 10,17,185,4,24,185,25,184,11,188,4,47,236,244,236,16,236,48,1,20,7,6,43,1,34,39,38,53,17,51,17,20,23,22,55,51,50,54,53,52, + 39,38,39,53,22,23,22,23,22,4,92,142,145,222,70,181,82,81,184,38,40,103,51,144,176,74,73,110,104,88,167,51,34,2,15,238,143,146,96,96, + 214,2,202,253,54,153,49,50,2,196,158,232,101,99,30,150,8,48,91,171,115,0,0,0,0,1,0,61,0,0,4,127,4,96,0,6,0,104,64,39, + 4,17,3,3,2,5,17,6,5,2,2,3,5,17,5,4,1,0,1,6,17,0,1,0,66,5,2,1,191,3,6,5,4,2,1,5,3,0,7,16, + 212,75,176,10,84,88,185,0,0,0,64,56,89,75,176,20,84,75,176,21,84,91,88,185,0,0,255,192,56,89,196,23,57,49,0,47,236,50,57,48, + 75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,89,34,1,51,1,51,1,35,9,1,61,1,164,250,1,164,195,254,162,254,162, + 4,96,251,160,3,172,252,84,0,1,0,86,0,0,6,53,4,96,0,12,1,239,64,15,8,9,10,11,12,1,2,3,4,5,6,11,0,7,13,16, + 212,75,176,10,84,75,176,17,84,91,75,176,18,84,91,75,176,19,84,91,75,176,11,84,91,88,185,0,7,0,64,56,89,1,75,176,12,84,75,176, + 13,84,91,75,176,16,84,91,88,185,0,7,255,192,56,89,204,23,57,49,64,10,10,5,2,3,12,8,191,7,3,0,0,47,60,60,236,50,23,57, + 48,64,48,2,85,1,2,11,10,11,3,85,10,11,4,85,10,9,10,5,85,6,5,9,9,10,1,17,0,12,0,2,17,3,2,12,12,0,5,17, + 4,5,8,7,8,6,17,7,7,8,66,75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,7,16,8,237,7,16,5,237,7,5, + 237,7,16,8,237,89,34,1,64,255,10,5,25,5,25,2,45,10,58,10,70,5,70,2,73,10,79,10,84,5,84,2,90,10,95,10,97,5,97,2, + 105,10,118,5,112,5,118,2,112,2,136,5,150,5,151,2,155,10,179,5,179,2,193,5,200,4,192,2,29,5,5,9,4,6,3,11,2,10,12,11, + 11,4,9,5,8,21,5,25,4,22,3,26,2,27,12,27,11,20,9,21,8,37,7,37,6,35,5,39,4,33,3,37,2,34,1,34,0,37,12,39, + 11,36,10,33,9,35,8,57,4,54,3,54,12,57,8,48,14,70,5,72,4,70,3,64,3,66,2,64,1,64,0,64,12,68,11,68,10,68,9,64, + 14,64,14,86,7,86,6,86,5,80,3,81,2,82,1,82,0,80,12,83,11,84,10,85,9,99,7,100,6,101,5,106,4,101,3,106,2,106,1,106, + 0,110,11,97,9,103,8,111,14,117,7,117,6,121,5,125,4,120,3,125,2,122,1,127,1,122,0,127,0,120,12,121,11,127,11,123,10,118,9,125, + 8,135,5,136,2,143,14,151,7,151,6,148,5,147,4,156,3,155,2,152,1,152,0,153,12,64,47,150,8,159,14,166,7,166,6,164,5,164,4,171, + 3,171,2,169,1,169,0,171,12,164,8,175,14,181,5,177,4,189,3,187,2,184,11,191,14,196,5,195,4,204,3,202,2,121,93,0,93,33,35,11, + 1,35,11,1,35,1,51,27,1,51,6,53,184,230,229,217,230,229,184,1,37,217,241,242,217,3,106,252,150,3,106,252,150,4,96,252,106,3,150,0, + 0,1,0,61,0,0,4,127,6,20,0,17,0,70,180,19,6,14,0,18,16,212,212,196,196,49,181,7,169,6,151,14,0,0,47,60,244,236,48,183, + 16,13,12,17,17,0,1,0,7,5,16,252,60,60,60,182,8,9,10,11,4,7,12,1,17,18,23,57,64,9,16,17,17,12,15,17,14,14,13,7, + 16,236,8,236,51,1,54,55,54,59,1,21,35,34,7,6,15,1,1,35,9,1,61,1,236,80,72,74,124,147,108,76,42,46,47,33,1,197,195,254, + 161,254,163,4,210,199,62,61,154,36,35,135,94,251,178,3,108,252,148,0,0,1,0,102,0,0,4,107,4,96,0,8,0,56,64,10,2,8,5,10, + 4,5,8,8,0,9,16,212,220,252,212,196,17,18,57,49,179,4,0,188,7,0,47,228,50,48,64,12,3,17,4,5,4,2,17,1,17,0,8,0, + 7,5,16,236,4,236,7,5,16,236,19,51,9,1,51,1,17,35,17,102,217,1,37,1,46,217,254,93,203,4,96,254,56,1,200,253,144,254,16,1, + 240,0,0,0,0,1,0,88,254,86,4,191,4,96,0,19,0,170,64,34,18,17,2,3,2,3,17,17,18,17,66,9,169,10,189,15,18,169,0,188, + 3,169,15,10,79,4,18,3,1,0,4,1,16,20,16,220,75,176,11,84,75,176,12,84,91,88,185,0,16,255,192,56,89,75,176,19,84,88,185,0, + 16,0,64,56,89,196,50,196,17,57,57,16,236,49,0,47,236,244,236,16,252,236,48,75,83,88,7,16,5,237,7,16,5,237,89,34,1,64,66,5, + 2,22,2,38,2,71,2,73,17,5,11,18,15,21,24,3,27,18,43,18,32,21,54,3,57,18,48,21,64,1,64,2,69,3,64,4,64,15,67,18, + 87,3,89,18,95,21,96,1,96,2,102,3,96,4,96,5,98,18,127,21,128,21,175,21,27,93,0,93,19,33,21,1,33,21,20,22,59,1,21,35, + 34,38,61,1,33,53,1,33,113,3,106,253,76,2,180,76,105,47,70,181,163,253,55,2,180,253,101,4,96,168,252,219,167,153,97,156,192,214,20,168, + 3,37,0,0,0,2,0,88,255,145,3,219,4,96,0,26,0,33,0,177,64,17,22,4,18,17,27,30,18,12,25,3,1,0,12,1,1,23,34,16, + 220,75,84,75,176,12,84,91,88,185,0,23,255,192,56,89,75,176,19,84,88,185,0,23,0,64,56,89,196,50,196,17,57,57,16,236,220,60,236,50, + 49,0,64,13,25,169,0,188,19,23,8,185,32,3,27,169,23,47,252,60,220,236,16,204,244,236,48,64,11,25,17,2,3,2,3,17,24,25,24,66, + 75,83,88,7,16,5,237,7,16,5,237,89,34,1,64,58,5,2,22,2,38,2,71,2,73,24,5,11,25,15,35,24,3,27,25,43,25,32,35,54, + 3,57,25,48,35,64,1,64,2,69,3,67,25,87,3,89,25,95,35,96,1,96,2,102,3,98,25,127,35,128,35,175,35,23,93,0,93,19,33,21, + 1,51,54,55,54,51,50,23,22,21,22,7,6,43,1,6,21,35,52,55,33,53,1,33,1,51,50,53,52,7,6,113,3,106,253,76,175,34,84,65, + 96,132,58,38,1,62,82,126,105,3,153,3,254,150,2,180,253,101,1,255,56,138,70,88,4,96,168,252,219,162,71,55,87,57,87,96,47,61,51,60, + 59,52,168,3,37,252,198,54,93,2,2,0,0,1,0,88,254,76,4,47,4,96,0,32,0,169,64,10,27,31,21,18,34,6,30,31,14,33,16,220, + 212,196,212,196,236,16,204,178,0,31,27,17,18,57,49,64,22,27,66,0,169,26,26,30,33,29,169,30,14,134,13,147,17,185,9,189,30,188,33,0, + 16,228,252,236,244,236,16,236,17,18,57,47,236,236,179,21,6,0,9,17,18,57,57,48,64,8,27,17,0,28,17,32,26,31,7,5,16,236,4,16, + 236,64,27,12,28,10,0,27,28,25,0,42,28,42,0,56,0,59,28,73,0,76,28,84,0,91,28,113,0,13,1,93,64,27,4,27,4,32,20,27, + 20,32,37,27,36,32,53,32,55,27,69,32,70,27,84,32,92,27,127,27,13,0,93,64,9,7,11,6,12,26,12,26,15,4,93,1,50,23,22,23, + 22,21,20,4,33,34,39,38,39,53,30,1,51,50,55,54,53,52,39,38,43,1,53,1,33,53,33,21,2,60,106,128,98,86,81,254,208,254,232,94, + 99,100,106,84,200,109,190,99,100,92,93,165,174,1,174,253,101,3,106,1,220,56,42,109,104,138,221,242,18,19,37,195,49,50,75,75,143,132,75,74, + 166,1,243,147,168,0,0,0,0,2,0,109,254,76,4,108,4,96,0,36,0,45,0,0,1,32,55,54,5,22,23,54,53,52,39,38,43,1,53,1, + 33,53,33,21,1,50,23,22,23,22,21,20,7,22,21,35,52,39,48,7,6,55,38,35,34,7,20,51,50,55,1,231,254,177,2,2,1,42,246,158, + 12,92,94,164,174,1,174,253,101,3,106,254,101,105,129,100,84,81,39,100,153,40,20,151,9,125,197,131,1,158,190,99,254,76,189,251,5,4,59,42, + 49,133,74,74,166,1,243,147,168,254,36,56,43,108,103,139,113,85,101,164,82,56,17,121,250,42,75,47,75,0,0,0,0,1,0,88,0,0,3,165, + 6,18,0,28,0,52,64,9,30,5,18,22,26,8,0,13,29,16,220,220,252,220,236,196,49,64,14,13,134,14,12,18,9,185,18,151,27,26,169,0, + 27,0,47,212,228,16,244,236,16,75,80,88,220,27,212,89,236,48,1,51,50,55,54,53,38,39,38,35,34,7,6,7,53,54,55,54,51,32,23,22, + 21,20,7,6,7,17,35,1,84,63,192,86,58,1,57,99,179,80,79,78,78,76,81,81,85,1,19,138,109,108,112,170,202,3,30,114,76,98,133,65, + 114,22,21,43,172,35,17,18,157,125,186,170,115,119,30,253,116,0,0,0,0,1,0,88,0,0,3,165,6,18,0,28,0,53,64,10,30,16,0,8, + 3,24,18,7,69,29,16,252,236,220,252,220,196,49,64,14,16,134,15,12,11,20,185,11,151,2,3,169,0,2,0,47,212,228,16,244,236,16,75,80, + 88,220,27,212,89,236,48,1,17,35,17,38,39,38,53,52,55,54,33,50,23,22,23,21,38,39,38,35,34,7,6,7,20,23,22,51,2,168,202,170, + 112,108,110,137,1,19,85,81,81,76,78,79,78,80,179,99,57,1,58,86,192,3,30,252,226,2,140,30,119,115,170,186,125,157,18,17,35,172,43,21, + 22,114,65,133,98,76,114,0,0,1,0,88,0,0,3,165,6,18,0,28,0,55,64,9,30,24,18,7,3,8,0,16,29,16,220,220,252,220,236,196, + 49,64,16,16,134,15,12,11,20,185,11,140,29,3,169,0,1,151,29,0,16,244,212,228,16,244,236,16,75,80,88,220,27,212,89,236,48,1,19,51, + 17,22,23,22,21,20,7,6,33,34,39,38,39,53,22,23,22,51,50,55,54,55,52,39,38,35,1,84,1,202,170,112,108,109,138,254,237,85,81,81, + 76,78,78,79,80,179,99,57,1,58,86,192,2,244,3,30,253,116,30,119,115,170,186,125,157,18,17,35,172,43,21,22,114,65,133,98,76,114,0,0, + 0,1,0,88,254,76,3,165,6,20,0,35,0,45,182,37,26,8,18,18,0,36,16,220,236,220,50,204,49,0,64,16,9,135,8,13,135,4,151,36, + 26,135,27,22,135,31,189,36,16,252,236,212,236,16,244,236,212,236,48,19,52,55,54,33,50,23,22,23,21,38,39,38,35,34,7,6,21,17,20,23, + 22,51,50,55,54,55,21,6,7,6,35,32,39,38,53,88,110,137,1,19,85,81,81,76,73,84,78,80,176,102,58,58,102,176,80,78,79,78,76,81, + 81,85,254,237,137,110,4,64,186,125,157,18,17,35,172,40,24,22,114,65,133,251,224,133,65,114,22,21,43,172,35,17,18,157,125,186,0,3,0,115, + 255,227,5,217,5,240,0,13,0,23,0,34,0,0,1,52,55,54,51,50,23,22,21,20,6,34,39,38,0,32,0,17,16,0,32,0,17,16,1,32, + 0,17,16,0,33,32,0,16,0,2,181,34,32,48,46,34,32,66,94,32,34,1,78,254,72,254,253,1,3,1,184,1,1,254,35,1,58,1,120,254, + 136,254,198,254,197,254,135,1,121,2,233,46,34,34,34,34,46,47,66,33,33,2,146,254,184,254,229,254,230,254,184,1,72,1,26,1,27,1,236,254, + 91,254,158,254,159,254,91,1,164,2,196,1,165,0,0,0,255,255,0,186,0,0,4,62,4,96,16,6,3,198,0,0,0,2,0,113,255,227,4,197, + 4,124,0,26,0,47,0,61,64,14,49,23,18,31,9,37,4,18,44,15,18,37,69,48,16,252,236,212,236,16,196,212,236,196,49,64,14,0,185,27, + 184,48,10,169,9,48,19,185,34,140,48,0,16,244,236,16,212,236,16,244,236,178,40,10,9,17,18,57,48,1,34,7,6,21,20,23,22,59,1,21, + 35,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,37,32,23,22,17,16,0,33,34,36,53,52,54,55,38,39,38,53,52,55,54,2,69,119, + 69,70,68,67,116,155,148,137,72,78,84,85,151,210,104,99,99,96,254,246,1,97,151,151,254,214,254,198,238,254,254,138,124,112,60,60,114,113,3,220, + 46,46,64,70,45,44,152,51,56,88,90,56,56,116,111,208,205,114,110,160,158,157,254,238,254,242,254,194,182,173,108,146,24,24,65,64,93,141,79,78, + 0,1,0,113,255,227,5,203,6,20,0,39,0,71,64,39,18,27,17,28,24,169,21,151,40,0,5,37,1,169,3,37,185,8,17,28,136,31,185,14, + 184,8,140,40,2,0,8,27,52,4,34,18,11,69,40,16,252,236,220,228,252,196,49,0,16,228,244,252,236,57,16,254,212,238,17,57,57,16,252,236, + 17,18,57,57,48,37,17,35,53,33,17,14,1,35,34,0,17,16,0,33,50,22,23,53,52,54,59,1,21,35,34,6,21,17,46,1,35,34,6,21, + 20,22,51,50,54,3,169,155,1,65,101,215,123,253,254,214,1,45,1,6,55,105,49,163,181,254,231,105,77,95,192,99,179,198,198,179,79,124,158,1, + 17,140,253,240,36,36,1,62,1,14,1,18,1,58,15,15,33,214,192,156,97,153,254,229,62,62,227,205,205,227,15,0,255,255,0,186,0,0,4,129, + 4,96,16,6,3,209,0,0,0,3,254,242,254,86,2,46,6,20,0,3,0,18,0,27,0,57,64,17,9,19,5,4,22,18,15,4,29,7,1,5, + 8,0,4,70,28,16,252,60,252,60,220,196,16,220,236,17,18,57,57,49,64,11,24,13,189,4,188,0,177,9,19,6,18,0,47,60,204,50,228,228, + 252,196,48,19,51,21,35,21,51,17,51,21,35,6,7,6,35,32,53,52,33,51,7,35,34,23,20,51,50,55,54,193,184,184,184,181,189,18,55,75, + 188,254,209,1,14,193,8,184,117,1,127,95,43,29,6,20,233,203,251,160,139,120,71,96,221,205,139,66,65,48,32,0,0,1,0,186,254,76,4,156, + 4,96,0,10,0,0,1,35,17,1,35,9,1,51,1,17,51,4,156,185,253,219,235,2,82,253,149,240,2,57,185,254,76,3,151,254,29,2,12,2, + 84,253,221,2,35,0,0,0,0,1,0,186,0,0,3,241,4,96,0,5,0,27,64,13,0,191,3,169,6,5,7,3,1,8,0,70,6,16,252,252, + 204,196,49,0,47,16,236,236,48,19,51,17,33,21,33,186,184,2,127,252,201,4,96,252,51,147,0,0,0,2,0,113,254,86,5,248,6,18,0,11, + 0,36,0,67,64,30,3,185,12,15,9,185,24,21,184,15,140,35,189,37,31,135,28,151,37,24,12,6,8,34,71,0,18,18,69,37,16,252,236,244, + 236,50,50,49,0,16,252,236,16,228,228,244,196,236,16,198,238,48,64,9,96,38,128,38,160,38,224,38,4,1,93,1,20,22,51,50,54,53,52,38, + 35,34,6,1,14,1,35,34,2,17,16,0,51,50,22,23,53,52,54,59,1,21,35,34,6,21,17,35,1,47,167,146,146,168,168,146,146,167,2,115, + 58,177,124,203,255,0,255,203,124,177,58,163,181,254,231,105,77,185,2,47,203,231,231,203,203,231,231,253,174,100,97,1,68,1,8,1,8,1,68,97, + 100,198,214,192,156,97,153,249,218,0,0,0,0,1,0,88,0,0,3,165,6,18,0,36,0,76,64,11,38,5,18,22,31,26,8,32,0,14,37,16, + 220,220,60,252,60,220,236,196,179,28,26,35,0,16,204,16,204,49,64,20,13,134,14,12,18,36,27,169,33,30,31,9,185,18,151,31,26,169,0,31, + 0,47,212,228,16,244,236,16,220,60,236,50,16,75,80,88,220,27,212,89,236,48,1,51,50,55,54,53,38,39,38,35,34,7,6,7,53,54,55,54, + 51,32,23,22,21,20,7,6,7,21,51,21,35,17,35,17,35,53,51,1,84,63,192,86,58,1,57,99,179,80,79,78,78,76,81,81,85,1,19,138, + 109,108,112,170,231,231,202,229,228,3,30,114,76,98,133,65,114,22,21,43,172,35,17,18,157,125,186,170,115,119,30,212,164,254,236,1,20,164,0,0, + 0,1,0,88,0,0,3,165,6,18,0,36,0,77,64,12,38,16,34,29,8,35,3,24,18,7,69,37,16,252,236,220,60,252,60,220,196,179,32,34, + 0,35,16,204,16,204,49,64,20,16,134,15,12,11,2,30,169,36,33,35,20,185,11,151,35,3,169,29,35,0,47,212,228,16,244,236,16,220,60,236, + 50,16,75,80,88,220,27,212,89,236,48,19,53,51,53,38,39,38,53,52,55,54,33,50,23,22,23,21,38,39,38,35,34,7,6,7,20,23,22,59, + 1,17,51,21,35,17,35,17,247,231,170,112,108,110,137,1,19,85,81,81,76,78,79,78,80,179,99,57,1,58,86,192,62,229,229,202,1,20,164,212, + 30,119,115,170,186,125,157,18,17,35,172,43,21,22,114,65,133,98,76,114,254,154,164,254,236,1,20,0,0,3,0,113,255,227,7,195,6,20,0,11, + 0,38,0,41,0,0,0,16,23,22,32,55,54,16,39,38,32,7,37,17,51,17,33,21,1,33,21,33,43,1,53,6,7,6,35,34,39,38,16,55, + 54,51,50,23,22,23,17,1,1,47,83,84,1,36,84,84,84,84,254,220,84,2,32,184,3,105,253,76,2,180,252,151,26,158,58,88,89,124,203,128, + 127,127,128,203,124,89,88,242,2,154,2,250,254,106,116,115,115,116,1,150,116,115,115,72,2,94,254,76,168,252,219,147,168,100,48,49,162,162,2,16, + 162,162,49,48,77,252,249,3,7,0,0,0,0,2,0,113,254,76,8,28,6,20,0,52,0,64,0,0,1,17,35,53,6,7,6,35,34,39,38,16, + 55,54,51,50,23,22,23,17,51,17,33,21,1,50,23,22,23,22,21,20,4,33,34,39,38,39,53,30,1,51,50,55,54,53,52,39,38,43,1,53, + 1,4,16,23,22,32,55,54,16,39,38,32,7,4,90,184,58,88,89,124,203,128,127,127,128,203,124,89,88,58,184,3,106,254,101,106,128,98,86,81, + 254,208,254,232,94,99,100,106,84,200,109,190,99,100,92,93,165,174,1,174,250,58,83,84,1,36,84,84,84,84,254,220,84,3,205,252,51,168,100,48, + 49,162,162,2,16,162,162,49,48,100,2,94,254,76,168,254,36,56,42,109,104,138,221,242,18,19,37,195,49,50,75,75,143,132,75,74,166,1,243,211, + 254,106,116,115,115,116,1,150,116,115,115,0,0,4,0,113,255,145,7,194,6,20,0,11,0,14,0,51,0,58,0,0,0,16,23,22,32,55,54,16, + 39,38,32,7,37,17,1,37,33,21,1,51,18,51,50,23,22,33,35,6,21,35,52,55,33,35,53,6,7,6,35,34,39,38,16,55,54,51,50,23, + 22,23,17,51,1,51,50,53,52,35,6,1,47,83,84,1,36,84,84,84,84,254,220,84,2,216,2,153,253,103,3,104,253,76,175,60,219,227,1,1, + 254,178,41,3,153,3,254,150,157,58,88,89,124,203,128,127,127,128,203,124,89,88,58,184,1,253,20,174,70,88,2,250,254,106,116,115,115,116,1,150, + 116,115,115,95,252,250,3,6,147,168,252,219,1,32,246,189,51,60,59,52,168,100,48,49,162,162,2,16,162,162,49,48,100,2,94,250,127,54,91,2, + 0,1,0,55,0,0,6,64,5,158,0,55,0,0,1,17,33,21,33,17,20,23,22,51,33,50,55,54,53,52,38,47,1,46,1,53,52,54,51,50, + 22,23,21,46,1,35,34,6,21,20,22,31,1,30,1,21,20,7,6,41,1,34,39,38,53,17,35,53,51,17,1,119,1,123,254,133,37,38,115,2, + 64,130,70,70,94,178,64,171,152,224,206,102,180,76,78,168,90,137,137,98,148,63,198,163,124,76,254,249,253,196,213,81,81,135,135,5,158,254,194,143, + 253,160,137,39,39,45,44,52,73,77,42,15,36,149,130,158,172,30,30,174,40,40,84,84,64,73,33,14,44,151,137,146,101,62,80,79,210,2,96,143, + 1,62,0,0,0,2,0,55,254,86,5,8,6,20,0,38,0,47,0,0,1,17,33,48,53,52,55,54,59,1,21,35,34,7,6,21,19,20,7,6, + 43,1,53,51,50,55,54,61,1,35,34,39,38,53,17,35,53,51,17,1,2,17,33,17,20,23,22,51,1,119,1,120,87,81,195,174,176,99,38,39, + 2,81,82,181,70,49,105,38,38,189,213,81,81,135,135,2,51,2,254,136,37,38,115,5,158,254,194,78,181,91,86,153,40,40,104,251,41,214,96,96, + 156,48,49,153,20,80,79,210,2,96,143,1,62,250,252,1,162,1,149,253,160,137,39,39,0,3,0,55,255,112,5,201,5,158,0,45,0,57,0,68, + 0,0,1,17,33,21,54,33,50,23,22,23,21,38,39,38,35,34,7,6,16,31,1,54,51,32,23,20,7,6,35,34,39,6,21,7,52,55,33,34, + 39,38,53,17,35,53,51,17,1,22,51,50,55,54,39,38,35,34,7,6,5,38,53,16,55,33,17,20,23,22,51,1,119,1,123,149,0,255,85,81, + 81,76,78,79,78,80,179,99,99,99,8,79,206,1,43,1,101,75,157,84,73,2,153,6,254,235,213,81,81,135,135,3,59,66,83,95,21,31,1,1, + 131,114,40,5,254,214,128,139,254,153,37,38,115,5,158,254,194,122,149,17,18,35,172,43,22,21,113,114,254,102,114,9,171,246,118,41,30,18,50,76, + 3,79,65,80,79,210,2,96,143,1,62,250,249,24,7,11,39,75,86,10,9,157,248,1,7,155,253,160,137,39,39,0,0,1,0,47,254,86,6,111, + 6,20,0,53,0,0,1,17,20,7,6,43,1,53,51,50,55,54,53,17,52,38,35,34,6,21,17,35,17,33,17,35,17,35,53,51,53,52,55,54, + 59,1,21,35,34,7,6,29,1,33,59,1,21,54,55,54,51,50,23,22,6,111,82,81,181,254,233,105,38,38,124,124,149,172,185,254,211,185,176,176, + 87,87,189,174,176,99,39,38,1,45,2,183,66,89,90,117,193,99,99,2,164,253,72,214,96,96,156,48,49,153,2,178,159,158,190,164,253,135,3,209, + 252,47,3,209,143,78,187,85,86,153,40,40,104,99,174,101,50,50,119,120,0,1,0,193,0,0,5,65,6,20,0,39,0,0,19,51,17,33,50,55, + 54,53,52,38,47,1,46,1,53,52,54,51,50,22,23,21,46,1,35,34,6,21,20,22,31,1,30,1,21,20,7,6,41,1,193,184,1,253,130,70, + 70,94,178,64,171,152,224,206,102,180,76,78,168,90,137,137,98,148,63,198,163,124,76,254,249,253,79,6,20,250,134,45,44,52,73,77,42,15,36,149, + 130,158,172,30,30,174,40,40,84,84,64,73,33,14,44,151,137,146,101,62,0,2,0,193,0,0,4,226,6,20,0,10,0,13,0,142,64,13,13,5, + 3,11,6,3,9,11,1,8,0,70,14,16,252,252,60,212,196,50,17,18,57,57,49,0,64,10,66,13,169,2,188,5,169,0,151,7,47,236,236,244, + 236,48,75,83,88,64,10,5,17,12,13,12,13,17,4,5,4,7,16,5,237,7,16,5,237,89,1,64,66,5,4,22,4,27,12,38,4,71,4,73, + 12,6,13,13,15,15,24,5,29,13,43,13,48,15,57,13,64,3,64,4,64,6,64,7,64,15,67,13,69,5,87,5,89,13,96,3,96,4,96,6, + 96,7,96,15,98,13,102,5,175,15,191,15,223,15,26,93,0,93,19,51,17,33,21,1,33,21,33,43,1,19,17,1,193,184,3,105,253,76,2,180, + 252,151,26,158,184,2,154,6,20,254,76,168,252,219,147,3,205,252,249,3,7,0,0,0,0,2,0,54,255,226,3,233,5,31,0,12,0,25,0,0, + 19,51,27,1,51,27,1,51,3,35,11,1,35,3,51,27,1,51,27,1,51,3,35,11,1,35,54,116,145,144,137,145,144,116,185,136,152,153,136,185, + 116,145,144,137,145,144,116,185,136,152,153,136,2,85,254,23,1,233,254,23,1,233,253,141,2,2,253,254,5,61,254,23,1,233,254,23,1,233,253,141, + 2,2,253,254,0,2,0,54,0,173,3,233,5,31,0,7,0,15,0,51,64,12,17,12,4,8,9,1,13,5,8,8,0,16,16,220,60,236,50,212, + 60,236,50,196,49,64,12,11,14,13,169,8,16,3,6,5,169,0,16,0,16,212,252,204,50,16,212,252,204,50,48,19,33,17,35,17,33,17,35,17, + 33,17,35,17,33,17,35,54,3,179,143,253,107,143,3,179,143,253,107,143,2,85,254,88,1,5,254,251,4,114,254,88,1,5,254,251,0,1,0,0, + 254,74,4,144,6,20,0,25,0,51,64,12,27,0,22,8,23,78,15,8,5,70,10,26,16,212,252,236,244,236,50,204,49,0,64,15,18,135,0,2, + 140,26,9,135,11,151,22,188,24,189,26,16,236,236,244,236,16,244,204,236,48,37,6,35,34,38,53,17,52,38,43,1,53,51,50,22,21,17,16,51, + 50,54,53,17,51,17,35,3,215,131,231,193,198,76,105,49,70,181,163,248,149,172,185,185,172,201,239,232,2,196,153,97,156,192,214,253,66,254,195,190, + 164,2,121,249,236,0,0,0,0,1,0,0,254,86,5,118,6,20,0,33,0,58,64,13,29,35,0,21,8,23,78,15,8,5,70,10,34,16,212,252, + 236,244,236,50,204,204,49,0,64,18,18,135,0,2,140,34,10,135,11,151,34,28,135,30,189,22,188,34,16,236,252,236,16,244,236,16,244,204,236,48, + 37,6,35,34,38,53,17,52,38,43,1,53,51,50,22,21,17,16,51,50,54,53,17,51,17,6,22,59,1,21,35,34,38,39,3,215,131,231,193,198, + 76,105,49,70,181,163,248,149,172,185,4,80,104,50,70,182,158,5,172,201,239,232,2,196,153,97,156,192,214,253,66,254,195,190,164,2,121,251,142,148, + 102,156,185,221,0,1,0,117,2,156,2,196,6,3,0,19,0,48,64,7,21,0,3,14,10,11,20,16,212,220,60,47,204,204,75,176,13,81,88,177, + 21,64,56,89,49,178,127,21,1,93,0,64,6,6,17,12,2,11,20,16,212,60,196,212,204,48,1,17,35,17,52,38,35,34,6,21,17,35,17,51, + 17,62,1,51,50,22,2,196,116,78,78,94,108,117,117,41,113,74,121,125,4,23,254,133,1,119,89,89,107,92,254,158,3,103,254,171,56,56,134,0, + 0,1,0,117,2,156,2,196,6,3,0,27,0,58,75,176,14,83,88,64,8,29,0,3,16,22,10,11,28,16,212,220,60,204,47,204,204,75,176,13, + 81,88,177,29,64,56,89,49,178,127,29,1,93,0,64,7,6,25,17,15,2,11,28,16,212,60,212,204,212,204,48,89,1,17,35,17,52,38,35,34, + 6,21,17,35,17,52,54,59,1,21,35,34,6,29,1,62,1,51,50,22,2,196,116,78,78,94,108,117,103,114,160,146,66,48,41,113,74,121,125,4, + 23,254,133,1,119,89,89,107,92,254,158,2,132,120,107,87,54,86,114,56,56,134,0,0,0,2,255,233,1,173,0,238,6,3,0,13,0,17,0,35, + 64,7,19,15,1,8,14,0,18,16,220,60,204,220,60,204,49,0,64,7,14,17,0,8,7,0,18,16,212,212,204,16,220,204,48,19,51,17,20,7, + 6,43,1,53,51,50,55,54,53,17,51,21,35,122,116,52,51,114,44,31,66,24,24,116,116,5,15,253,130,120,54,54,88,27,27,86,3,114,130,0, + 0,1,0,117,2,156,2,18,5,30,0,17,0,31,64,5,17,11,7,8,18,16,220,204,0,204,49,0,64,7,0,17,7,3,14,9,8,47,196,212, + 204,16,212,204,48,1,46,1,35,34,6,21,17,35,17,51,21,62,1,51,50,22,23,2,18,19,46,28,98,105,117,117,36,117,84,12,29,18,4,175, + 10,9,113,107,254,182,2,115,97,57,55,2,3,0,0,0,0,1,0,72,2,141,1,228,5,15,0,17,0,27,180,8,6,11,17,18,16,220,220,60, + 204,49,0,181,0,17,3,14,7,9,47,204,212,204,212,204,48,19,30,1,51,50,54,53,17,51,17,35,53,14,1,35,34,38,39,72,19,46,28,98, + 105,116,116,36,117,84,12,29,18,2,252,10,9,113,107,1,74,253,141,97,57,55,2,3,0,1,0,72,1,173,2,117,5,15,0,27,0,39,182,29, + 14,9,6,21,0,28,16,220,220,60,220,220,49,0,64,10,13,15,20,0,27,3,24,8,9,20,47,60,204,212,204,212,204,16,220,204,48,19,30,1, + 51,50,54,53,17,51,17,21,20,22,59,1,21,35,34,38,61,2,14,1,35,34,38,39,72,19,46,28,98,105,116,48,66,31,44,114,103,36,117,84, + 12,29,18,2,252,10,9,113,107,1,74,253,141,11,86,54,88,108,120,11,97,57,55,2,3,0,0,0,0,2,0,32,2,156,2,143,5,15,0,22, + 0,33,0,0,1,30,1,21,20,7,6,43,1,17,51,17,51,50,55,54,63,1,51,7,6,7,6,1,51,50,55,54,53,52,39,38,43,1,1,155, + 67,70,67,68,137,244,116,107,61,37,37,40,102,123,110,33,33,34,254,215,125,75,39,41,41,39,75,125,3,233,15,78,59,91,45,45,2,115,254,247, + 21,20,63,161,171,53,30,30,255,0,23,24,47,46,24,25,0,1,0,54,2,156,3,233,5,15,0,12,0,0,19,51,27,1,51,27,1,51,3,35, + 11,1,35,54,116,145,144,137,145,144,116,185,136,152,153,136,5,15,254,23,1,233,254,23,1,233,253,141,2,2,253,254,0,1,0,38,1,173,2,213, + 5,15,0,17,0,0,1,6,7,6,43,1,53,51,50,55,54,63,1,1,51,27,1,51,1,159,49,47,46,78,93,68,48,26,27,32,21,254,226,123, + 221,220,123,2,98,112,34,35,87,20,20,75,47,2,105,254,22,1,234,0,255,255,0,160,4,116,1,159,6,102,16,6,3,18,0,0,255,255,0,160, + 4,116,3,19,6,102,16,38,3,18,0,0,16,7,3,18,1,116,0,0,255,255,0,174,3,233,1,211,5,213,16,6,10,246,0,0,255,255,0,178, + 3,254,1,215,5,213,16,6,10,247,0,0,0,1,0,196,4,238,1,233,6,218,0,5,0,23,64,10,3,158,0,6,3,2,0,25,5,6,16,220, + 252,212,204,49,0,16,212,236,48,1,21,19,35,3,53,1,151,82,129,164,6,218,172,254,192,1,64,172,0,1,0,117,3,239,1,135,6,20,0,14, + 0,49,180,0,7,4,12,15,16,220,180,63,12,79,12,2,93,204,220,182,0,7,16,7,32,7,3,93,60,49,0,182,1,4,0,7,8,151,15,16, + 244,204,220,178,0,0,1,93,57,204,48,19,53,50,54,53,52,38,35,53,50,23,22,20,7,6,117,64,88,88,64,115,80,79,79,80,3,239,123,88, + 64,63,88,123,80,79,230,80,80,0,0,0,0,1,0,117,3,239,1,135,6,20,0,14,0,49,180,0,8,11,4,15,16,212,204,220,64,13,0,4, + 0,11,16,4,16,11,32,4,32,11,6,93,60,49,0,182,14,11,0,8,7,151,15,16,244,204,212,178,0,0,1,93,57,204,48,1,34,39,38,52, + 55,54,51,21,34,6,21,20,22,51,1,135,115,80,79,79,80,115,64,88,88,64,3,239,80,80,230,79,80,123,88,63,64,88,0,0,0,1,0,117, + 2,156,2,137,6,2,0,28,0,43,64,9,1,5,0,5,22,26,14,0,29,16,212,196,220,220,204,17,18,57,49,0,64,9,26,0,18,13,14,9, + 18,28,29,16,212,212,204,212,204,16,220,204,48,1,51,50,55,54,53,38,39,38,35,34,7,6,7,53,54,55,54,51,50,23,22,21,20,7,6,7, + 17,35,1,20,39,121,55,36,1,35,63,113,50,50,49,49,48,51,51,53,174,87,68,68,70,107,128,4,91,64,42,55,75,36,64,12,12,24,96,20, + 9,10,88,70,104,95,64,67,17,254,147,0,0,1,0,117,2,156,2,137,6,2,0,28,0,45,64,10,28,0,24,15,0,24,7,0,3,29,16,220, + 204,220,204,16,196,17,18,57,49,0,64,9,3,0,11,16,15,20,11,2,29,16,212,212,204,212,204,16,220,204,48,1,17,35,17,38,39,38,53,52, + 55,54,51,50,23,22,23,21,38,39,38,35,34,7,6,7,20,23,22,51,1,234,127,107,71,68,69,87,173,53,51,51,48,49,50,49,50,113,62,36, + 1,37,54,121,4,91,254,65,1,109,17,67,64,95,104,70,88,10,9,20,96,24,12,12,64,36,75,55,42,64,0,0,0,1,1,11,4,50,2,245, + 6,176,0,6,0,0,1,37,21,13,1,21,37,1,11,1,234,254,153,1,103,254,22,5,187,245,139,180,180,139,245,0,0,1,1,11,4,50,2,245, + 6,176,0,6,0,0,1,5,53,45,1,53,5,2,245,254,22,1,103,254,153,1,234,5,39,245,139,180,180,139,245,0,0,1,0,193,4,124,3,63, + 6,102,0,6,0,61,180,4,2,117,6,7,16,220,236,57,49,0,181,4,5,2,0,179,7,16,244,204,50,180,16,2,16,5,2,93,57,48,0,75, + 176,9,84,75,176,14,84,91,88,189,0,7,255,192,0,1,0,7,0,7,0,64,56,17,55,56,89,1,51,19,35,11,1,35,1,182,148,245,139,180, + 180,139,6,102,254,22,1,103,254,153,0,0,0,1,0,193,4,124,3,63,6,102,0,6,0,76,180,3,5,117,1,7,16,220,236,57,49,0,181,3, + 0,4,1,179,7,16,244,60,212,178,16,0,1,93,57,48,0,75,176,9,84,75,176,14,84,91,88,189,0,7,255,192,0,1,0,7,0,7,0,64, + 56,17,55,56,89,64,12,53,0,58,6,53,2,58,4,4,51,3,1,93,1,93,1,3,51,27,1,51,3,1,182,245,139,180,180,139,245,4,124,1, + 234,254,153,1,103,254,22,0,0,1,0,193,4,238,3,63,6,102,0,6,0,55,64,12,4,5,2,180,0,179,7,4,2,117,6,7,16,220,236,57, + 49,0,16,244,236,50,57,48,0,75,176,9,84,75,176,14,84,91,88,189,0,7,255,192,0,1,0,7,0,7,0,64,56,17,55,56,89,1,51,19, + 35,39,7,35,1,182,148,245,139,180,180,139,6,102,254,136,245,245,0,0,0,1,0,193,4,238,3,63,6,102,0,6,0,55,64,12,3,0,180,4, + 1,179,7,3,5,117,1,7,16,220,236,57,49,0,16,244,60,236,57,48,0,75,176,9,84,75,176,14,84,91,88,189,0,7,255,192,0,1,0,7, + 0,7,0,64,56,17,55,56,89,1,3,51,23,55,51,3,1,182,245,139,180,180,139,245,4,238,1,120,245,245,254,136,0,1,0,214,3,231,1,94, + 6,18,0,3,0,19,64,4,5,0,3,4,16,220,220,204,49,0,64,2,3,2,47,196,48,1,17,35,17,1,94,136,6,18,253,213,2,43,0,0, + 255,255,0,213,5,98,3,43,5,246,16,6,0,113,0,0,0,1,1,115,4,238,3,82,6,102,0,3,0,0,1,51,1,35,2,139,199,254,186,153, + 6,102,254,136,0,1,0,170,4,240,2,137,6,102,0,3,0,0,9,1,35,1,1,111,1,26,153,254,186,6,102,254,138,1,118,0,0,1,0,214, + 254,209,1,94,0,252,0,3,0,19,64,4,5,0,3,4,16,220,220,204,49,0,64,2,3,2,47,196,48,37,17,35,17,1,94,136,252,253,213,2, + 43,0,0,0,255,255,0,213,254,192,3,43,255,84,16,7,0,113,0,0,249,94,0,0,0,1,0,170,254,28,2,137,255,146,0,3,0,0,5,1, + 35,1,1,111,1,26,153,254,186,110,254,138,1,118,0,0,0,1,1,115,254,28,3,82,255,148,0,3,0,0,5,51,1,35,2,139,199,254,186,153, + 108,254,136,0,0,2,0,111,0,0,1,212,4,35,0,2,0,5,0,69,64,11,0,1,3,5,3,0,4,2,5,1,6,16,212,60,196,75,176,16, + 80,88,179,7,64,2,64,56,56,89,50,57,57,49,0,47,196,212,196,48,64,9,15,3,0,0,96,0,111,3,4,93,1,64,13,80,7,96,7,96, + 4,96,2,100,3,100,0,6,93,1,3,33,3,19,33,1,33,178,1,101,179,179,254,155,2,217,1,74,253,39,254,182,0,1,0,111,2,217,1,212, + 4,35,0,2,0,52,182,0,1,3,0,2,1,3,16,212,196,75,176,16,80,88,179,4,64,2,64,56,56,89,57,49,0,16,212,196,48,64,5,0, + 0,96,0,2,93,1,64,9,80,4,96,4,96,2,100,0,4,93,1,3,33,1,33,178,1,101,2,217,1,74,0,0,255,255,0,117,1,254,1,135, + 4,35,16,7,2,128,0,0,254,15,0,0,255,255,0,117,1,254,1,135,4,35,16,7,2,129,0,0,254,15,0,0,0,1,1,31,1,212,2,225, + 3,150,0,7,0,0,1,21,33,53,51,17,51,17,2,225,254,62,150,150,2,106,150,150,1,44,254,212,0,1,1,31,1,212,2,225,3,150,0,7, + 0,0,1,53,33,21,35,17,35,17,1,31,1,194,150,150,3,0,150,150,254,212,1,44,0,1,0,100,0,255,2,186,3,85,0,11,0,0,1,53, + 51,21,51,21,35,21,35,53,35,53,1,68,150,224,224,150,224,2,117,224,224,150,224,224,150,0,0,0,0,1,0,100,1,223,2,38,2,117,0,3, + 0,0,1,33,53,33,2,38,254,62,1,194,1,223,150,0,0,1,0,199,5,41,3,57,6,72,0,13,0,87,64,14,11,240,4,7,0,179,14,7, + 86,8,1,86,0,14,16,220,236,212,236,49,0,16,244,60,212,236,48,0,75,176,9,84,88,189,0,14,255,192,0,1,0,14,0,14,0,64,56,17, + 55,56,89,0,75,176,15,84,75,176,16,84,91,75,176,17,84,91,88,189,0,14,0,64,0,1,0,14,0,14,255,192,56,17,55,56,89,19,51,30, + 1,51,50,54,55,51,14,1,35,34,38,199,118,11,97,87,86,96,13,118,10,158,145,145,158,6,72,75,75,74,76,143,144,144,0,0,0,1,1,154, + 5,68,2,102,6,16,0,3,0,78,64,9,2,206,0,205,4,1,100,0,4,16,212,236,49,0,16,252,236,48,0,75,176,10,84,75,176,13,84,91, + 88,189,0,4,0,64,0,1,0,4,0,4,255,192,56,17,55,56,89,1,176,13,75,84,176,14,75,84,91,88,189,0,4,0,64,0,1,0,4,0, + 4,255,192,56,17,55,56,89,1,51,21,35,1,154,204,204,6,16,204,0,0,2,0,238,4,225,3,18,7,6,0,11,0,23,0,32,64,17,3,193, + 21,242,9,193,15,241,24,0,86,12,120,6,86,18,24,16,212,236,244,236,49,0,16,244,236,244,236,48,1,52,38,35,34,6,21,20,22,51,50,54, + 55,20,6,35,34,38,53,52,54,51,50,22,2,152,88,64,65,87,87,65,64,88,122,159,115,115,159,159,115,115,159,5,244,63,88,87,64,65,87,88, + 64,115,160,160,115,115,159,159,0,1,1,76,254,117,2,193,0,0,0,19,0,32,64,15,11,14,10,7,243,14,244,0,1,0,10,4,39,17,20,16, + 212,236,196,212,204,49,0,47,252,252,196,18,57,48,33,51,14,1,21,20,22,51,50,54,55,21,14,1,35,34,38,53,52,54,1,184,119,45,43,55, + 54,32,62,31,38,68,30,122,115,53,61,88,31,46,46,15,15,133,10,10,87,93,48,105,0,1,0,182,5,29,3,74,6,55,0,27,0,99,64,36, + 0,18,7,14,11,4,1,18,7,15,11,4,18,195,25,7,4,195,21,11,237,28,15,1,14,0,7,21,86,22,119,7,86,8,118,28,16,244,236,252, + 236,17,57,57,57,57,49,0,16,252,60,252,212,60,236,17,18,57,17,18,57,17,18,57,17,18,57,48,0,75,176,9,84,75,176,12,84,91,88,189, + 0,28,255,192,0,1,0,28,0,28,0,64,56,17,55,56,89,1,39,46,1,35,34,6,7,35,62,1,51,50,22,31,1,30,1,51,50,54,55,51, + 14,1,35,34,38,1,252,57,22,33,13,38,36,2,125,2,102,91,38,64,37,57,22,33,13,38,36,2,125,2,102,91,38,64,5,90,55,20,19,73, + 82,135,147,28,33,55,20,19,73,82,135,147,28,0,0,0,0,2,0,240,4,238,3,174,6,102,0,3,0,7,0,66,64,17,6,2,180,4,0,179, + 8,4,7,3,0,5,1,3,5,7,8,16,212,220,212,204,17,57,17,18,57,49,0,16,244,60,236,50,48,0,75,176,9,84,75,176,14,84,91,88, + 189,0,8,255,192,0,1,0,8,0,8,0,64,56,17,55,56,89,1,51,3,35,3,51,3,35,2,252,178,248,135,129,170,223,137,6,102,254,136,1, + 120,254,136,0,0,1,255,255,1,222,2,173,4,8,0,15,0,0,3,37,51,21,20,23,22,59,1,21,35,34,39,38,53,5,1,1,22,184,38,38, + 105,43,64,175,87,82,254,235,3,100,164,148,153,49,48,156,96,90,200,162,0,1,0,239,4,238,3,16,6,102,0,11,0,0,1,39,7,35,55,39, + 51,23,55,51,7,23,2,92,92,93,180,181,181,180,93,92,180,182,182,4,238,97,97,187,189,96,96,189,187,0,0,0,0,2,0,117,1,171,2,253, + 5,15,0,13,0,21,0,0,1,22,21,20,35,32,53,52,55,3,51,23,55,51,1,6,21,20,51,50,53,52,2,5,178,242,254,245,181,250,137,191, + 183,137,254,188,137,136,129,3,220,249,180,132,132,191,242,1,47,224,224,254,138,174,152,77,77,137,0,0,0,1,0,122,2,156,0,238,6,3,0,3, + 0,13,177,2,3,47,204,49,0,177,0,3,47,196,48,19,51,17,35,122,116,116,6,3,252,153,0,0,0,1,0,117,2,156,2,144,5,47,0,50, + 0,0,1,21,38,39,38,35,34,7,6,21,20,23,22,31,1,22,23,22,21,20,7,6,35,34,39,38,39,53,22,23,22,51,50,54,53,52,39,38, + 47,1,38,39,38,53,52,55,54,51,50,23,22,2,106,49,53,52,57,87,43,43,31,31,93,40,125,50,52,78,77,136,57,62,61,68,64,63,62,61, + 82,88,32,28,111,40,108,48,48,71,70,130,64,57,57,5,13,97,22,11,11,23,24,47,36,20,21,18,8,24,42,43,77,87,51,51,10,10,19,107, + 30,15,15,50,45,42,23,20,23,8,21,41,42,73,88,48,49,9,8,0,0,1,0,117,2,156,3,33,5,15,0,11,0,0,1,3,1,35,39,7, + 35,1,3,51,23,55,3,20,255,1,12,137,205,205,137,1,18,251,137,187,187,5,15,254,207,254,190,246,246,1,72,1,43,223,223,0,255,255,0,117, + 2,156,2,137,6,2,16,6,2,131,0,0,0,1,0,214,0,0,3,29,5,88,0,5,0,21,64,9,1,169,3,0,0,8,4,2,6,16,196,212, + 236,49,0,47,212,236,48,33,17,33,53,33,17,2,149,254,65,2,71,4,208,136,250,168,0,1,0,214,0,0,3,29,5,88,0,7,0,39,64,24, + 63,4,63,1,47,4,47,1,31,4,31,1,6,1,169,4,5,0,0,4,8,6,2,8,16,196,212,236,50,49,0,47,212,220,236,93,48,33,17,33, + 53,33,17,51,17,2,149,254,65,1,191,136,3,156,136,1,52,250,168,0,0,1,0,214,0,0,3,29,5,88,0,7,0,25,64,11,1,169,4,5, + 0,0,4,8,6,2,8,16,196,212,236,50,49,0,47,212,220,236,48,33,17,33,53,33,17,51,17,2,149,254,65,1,191,136,2,104,136,2,104,250, + 168,0,0,0,0,1,0,214,0,0,3,29,5,88,0,7,0,39,64,24,112,4,112,1,48,4,48,1,16,4,16,1,6,4,169,1,5,0,0,4, + 8,6,2,8,16,196,212,236,50,49,0,47,212,220,236,93,48,33,17,33,53,33,17,51,17,2,149,254,65,1,191,136,1,52,136,3,156,250,168,0, + 0,1,0,214,0,0,3,29,5,88,0,5,0,21,64,9,1,0,169,4,0,8,2,4,6,16,196,212,236,49,0,47,236,196,48,37,17,51,17,33, + 53,2,149,136,253,185,136,4,208,250,168,136,255,255,0,193,253,236,3,63,255,214,16,7,2,135,0,0,249,112,0,0,255,255,0,213,4,226,3,43, + 6,118,18,39,0,113,0,0,0,128,18,6,0,113,0,128,255,255,0,174,3,233,3,109,5,213,18,6,10,251,0,0,255,255,0,238,254,20,3,18, + 0,57,16,7,2,156,0,0,249,51,0,0,0,1,0,182,254,118,3,74,255,144,0,33,0,95,64,14,18,1,17,0,9,26,86,27,119,9,86,10, + 118,34,16,244,236,252,236,17,57,57,57,57,49,0,64,21,0,22,9,17,14,5,1,22,9,18,14,5,22,195,31,9,5,195,26,14,34,16,212,60, + 252,212,60,236,17,18,57,17,18,57,17,18,57,17,18,57,48,0,75,176,9,84,88,189,0,28,255,192,0,1,0,28,0,28,0,64,56,17,55,56, + 89,1,39,38,39,38,35,34,7,6,7,35,54,55,54,51,50,22,31,1,22,23,22,51,50,55,54,55,51,6,7,6,35,34,38,1,252,57,22,17, + 16,13,38,18,18,2,125,2,51,51,91,38,64,37,57,22,17,16,13,38,18,18,2,125,2,51,51,91,38,64,254,179,55,20,10,9,37,36,82,135, + 73,74,28,33,55,20,10,9,37,36,82,135,73,74,28,0,0,2,252,168,4,123,254,135,6,102,0,3,0,4,0,54,64,12,1,180,0,179,4,184, + 5,4,3,68,1,5,16,220,236,57,49,0,16,228,244,236,48,0,75,176,9,84,75,176,14,84,91,88,189,0,4,255,192,0,1,0,4,0,4,0, + 64,56,17,55,56,89,9,1,35,9,1,253,109,1,26,153,254,186,1,88,6,102,254,138,1,118,254,21,0,2,253,113,4,123,255,80,6,102,0,3, + 0,4,0,54,64,12,2,180,0,179,4,184,5,4,3,68,1,5,16,212,236,57,49,0,16,228,244,236,48,0,75,176,9,84,75,176,14,84,91,88, + 189,0,4,255,192,0,1,0,4,0,4,0,64,56,17,55,56,89,1,51,1,35,23,254,137,199,254,186,153,143,6,102,254,136,115,0,0,2,252,193, + 4,123,255,63,6,102,0,6,0,7,0,60,64,15,4,5,2,180,0,179,7,184,8,7,4,2,117,6,8,16,220,236,57,57,49,0,16,228,244,236, + 50,57,48,0,75,176,9,84,75,176,14,84,91,88,189,0,7,255,192,0,1,0,7,0,7,0,64,56,17,55,56,89,1,51,19,35,39,7,35,5, + 253,182,148,245,139,180,180,139,1,63,6,102,254,136,245,245,115,0,0,0,255,255,252,180,5,29,255,72,6,55,16,7,2,158,251,254,0,0,0,0, + 255,255,252,217,5,98,255,47,5,246,16,7,0,113,252,4,0,0,0,0,255,255,251,236,5,124,0,20,6,11,16,7,11,28,252,0,0,0,0,0, + 255,255,252,191,5,41,255,49,6,72,16,7,2,154,251,248,0,0,0,0,0,2,253,162,4,123,254,90,6,20,0,3,0,4,0,37,64,12,2,190, + 0,177,4,184,5,4,1,8,0,5,16,212,236,57,49,0,16,228,252,236,48,0,1,64,7,4,4,52,4,68,4,3,93,1,51,21,35,23,253,162, + 184,184,94,6,20,233,176,0,0,3,252,215,4,123,255,41,6,16,0,3,0,7,0,8,0,73,64,17,6,2,206,4,0,205,8,184,9,1,100,8, + 0,5,100,4,9,16,220,252,212,57,236,49,0,16,228,252,60,236,50,48,1,64,35,4,8,52,8,68,8,96,1,96,2,96,3,96,0,96,1,96, + 2,96,5,96,6,96,8,112,1,112,2,112,5,112,6,112,8,17,93,1,51,21,35,37,51,21,35,5,254,94,203,203,254,121,203,203,1,41,6,16, + 202,202,202,203,0,1,253,55,4,242,254,247,6,123,0,25,0,34,64,9,20,86,64,5,128,12,86,25,13,47,204,236,26,220,26,236,49,0,64,6, + 23,193,64,2,192,13,47,26,220,26,236,48,1,54,51,50,22,21,20,15,1,6,7,6,21,35,53,52,54,63,1,54,53,52,38,35,34,7,253,55, + 112,105,104,127,88,44,35,4,7,119,30,51,45,46,62,71,90,100,6,72,51,85,67,61,65,32,26,9,16,32,12,40,54,37,34,34,40,21,36,52, + 255,255,252,236,4,225,255,16,7,6,16,7,2,156,251,254,0,0,0,0,255,255,252,244,4,238,255,178,6,102,16,7,2,159,252,4,0,0,0,0, + 0,2,252,197,4,123,255,67,6,102,0,6,0,7,0,60,64,15,3,0,180,4,1,179,7,184,8,7,3,5,117,1,8,16,220,236,57,57,49,0, + 16,228,244,60,236,57,48,0,75,176,9,84,75,176,14,84,91,88,189,0,7,255,192,0,1,0,7,0,7,0,64,56,17,55,56,89,1,3,51,23, + 55,51,3,7,253,186,245,139,180,180,139,245,78,4,238,1,120,245,245,254,136,115,0,0,0,1,253,188,4,236,254,68,6,168,0,3,0,14,178,2, + 27,0,47,236,49,0,177,3,1,47,204,48,1,17,35,17,254,68,136,6,168,254,68,1,188,0,0,0,255,255,252,240,4,236,255,16,6,168,16,39, + 2,190,255,52,0,0,16,7,2,190,0,204,0,0,0,0,0,2,252,93,4,238,255,27,6,102,0,3,0,7,0,66,64,17,6,2,180,4,0,179, + 8,4,5,1,0,7,3,1,7,5,8,16,212,220,212,204,17,57,17,18,57,49,0,16,244,60,236,50,48,0,75,176,9,84,75,176,14,84,91,88, + 189,0,8,255,192,0,1,0,8,0,8,0,64,56,17,55,56,89,1,19,35,3,33,19,35,3,253,15,205,135,248,2,0,190,137,223,6,102,254,136, + 1,120,254,136,1,120,0,0,255,255,252,191,5,41,255,49,7,86,16,39,2,184,0,0,1,66,16,7,2,154,251,248,0,0,0,0,0,1,252,191, + 5,41,255,49,6,72,0,12,0,24,181,7,86,8,1,86,0,47,236,212,236,49,0,180,10,240,4,0,7,47,60,220,236,48,3,35,46,1,35,34, + 6,7,35,62,1,32,22,207,118,11,97,87,86,96,13,118,10,158,1,34,158,5,41,75,75,74,76,143,144,144,0,0,0,1,254,31,3,233,255,68, + 5,40,0,3,0,10,64,3,2,1,4,0,16,212,204,48,1,35,19,51,254,242,211,164,129,3,233,1,63,0,0,0,0,1,253,144,4,194,254,130, + 6,193,0,8,0,0,1,16,35,53,22,53,35,53,51,254,130,242,112,112,242,5,195,254,255,123,3,137,254,0,0,0,0,1,253,144,4,194,254,130, + 6,193,0,8,0,0,1,53,51,21,35,20,55,21,34,253,144,241,111,112,242,5,195,254,254,137,3,123,0,1,255,121,4,154,0,135,6,18,0,3, + 0,0,3,51,3,35,64,199,117,153,6,18,254,136,0,0,255,255,252,168,253,223,254,135,255,85,16,7,0,67,251,254,248,239,0,0,255,255,253,113, + 253,221,255,80,255,85,16,7,0,118,251,254,248,239,0,0,0,1,253,36,254,20,254,60,255,206,0,7,0,0,1,35,53,51,53,51,17,35,253,196, + 160,160,120,120,254,181,120,161,254,70,0,0,0,1,253,196,254,20,254,220,255,206,0,7,0,0,5,51,21,51,21,35,21,35,253,196,120,160,160,120, + 50,161,120,161,0,1,254,85,5,134,0,63,7,112,0,5,0,0,3,33,53,33,17,35,73,254,158,1,234,136,6,232,136,254,22,0,0,1,254,240, + 3,107,0,123,4,224,0,19,0,49,64,6,7,86,14,4,17,0,47,75,176,12,84,75,176,13,84,91,75,176,14,84,91,88,185,0,0,0,64,56, + 89,220,50,220,236,49,0,64,5,10,4,193,0,17,47,196,252,204,48,1,53,30,1,51,50,54,53,52,38,39,51,30,1,21,20,6,35,34,38,254, + 240,61,88,31,46,46,15,15,133,10,10,87,93,48,105,3,215,119,45,43,55,54,32,62,31,38,68,30,122,115,53,0,0,1,253,128,254,18,254,86, + 255,190,0,13,0,28,64,6,13,6,10,86,3,14,16,212,252,204,50,49,0,64,6,6,193,7,13,193,0,47,252,220,236,48,1,34,38,53,52,54, + 51,21,34,6,21,20,22,51,254,86,90,124,124,90,40,53,53,40,254,18,125,90,89,124,120,53,39,40,53,0,0,0,0,1,253,11,254,20,254,245, + 255,77,0,7,0,0,1,51,21,33,53,51,53,51,254,68,177,254,22,177,136,254,156,136,136,177,0,0,0,1,253,11,254,20,254,245,255,77,0,7, + 0,0,1,35,53,33,21,35,21,35,253,188,177,1,234,177,136,254,197,136,136,177,0,0,0,1,253,36,254,20,254,220,255,206,0,11,0,0,1,35, + 53,51,53,51,21,51,21,35,21,35,253,196,160,160,120,160,160,120,254,181,120,161,161,120,161,0,0,0,0,1,253,11,254,136,254,245,255,16,0,3, + 0,0,1,53,33,21,253,11,1,234,254,136,136,136,0,0,0,1,253,122,254,86,255,208,0,128,0,13,0,0,39,21,20,7,6,43,1,53,51,50, + 55,54,61,1,48,82,81,181,254,233,105,38,38,128,148,214,96,96,156,48,49,153,148,0,0,1,253,119,254,86,255,205,0,128,0,13,0,0,37,51, + 21,20,23,22,59,1,21,35,34,39,38,53,253,119,184,38,38,105,233,254,181,81,82,128,148,153,49,48,156,96,96,214,0,1,253,162,254,137,254,90, + 255,115,0,3,0,0,5,51,21,35,253,162,184,184,141,234,255,255,252,213,254,137,255,39,255,83,16,7,0,106,251,254,249,67,0,0,0,2,253,40, + 254,18,254,212,255,190,0,11,0,23,0,30,64,8,0,86,12,120,6,86,18,24,16,212,236,244,236,49,0,64,6,21,193,3,9,193,15,47,252,220, + 236,48,1,52,38,35,34,6,21,20,22,51,50,54,55,20,6,35,34,38,53,52,54,51,50,22,254,91,54,39,40,53,53,40,39,54,121,124,90,90, + 124,124,90,90,124,254,234,38,54,53,39,40,53,54,38,90,125,125,90,89,124,124,0,0,0,1,253,106,254,20,254,143,255,84,0,3,0,10,64,3, + 3,0,4,0,16,212,204,48,5,51,3,35,253,188,211,164,129,172,254,192,255,255,253,35,254,117,254,193,0,0,16,7,0,122,252,0,0,0,0,0, + 255,255,253,76,254,117,254,193,0,0,16,7,2,157,252,0,0,0,0,0,0,1,253,188,254,20,254,68,255,160,0,3,0,14,178,2,27,0,47,236, + 49,0,177,1,3,47,204,48,5,17,35,17,254,68,136,96,254,116,1,140,0,1,252,240,254,80,255,23,255,154,0,7,0,0,7,17,35,53,33,21, + 35,17,233,137,254,235,137,102,254,182,194,194,1,74,0,0,0,1,252,99,254,57,255,152,255,88,0,20,0,0,1,6,35,34,3,52,53,51,22,51, + 50,55,51,22,23,50,55,51,2,7,34,253,254,60,116,218,17,117,14,104,101,15,118,12,105,102,15,118,15,220,116,254,139,82,1,26,2,3,150,150, + 149,1,150,254,226,1,0,0,255,255,252,197,254,20,255,67,255,140,17,7,2,137,252,4,249,38,0,39,0,75,176,9,84,75,176,14,84,75,176,11, + 84,75,176,12,84,91,91,91,88,189,0,7,0,64,0,1,0,7,0,7,255,192,56,17,55,56,89,0,255,255,252,191,254,20,255,61,255,140,17,7, + 2,136,251,254,249,38,0,39,0,75,176,9,84,75,176,14,84,75,176,11,84,75,176,12,84,91,91,91,88,189,0,7,0,64,0,1,0,7,0,7, + 255,192,56,17,55,56,89,0,255,255,252,191,254,57,255,49,255,88,16,7,2,154,251,248,249,16,0,0,0,1,252,191,254,54,255,49,255,85,0,12, + 0,0,3,35,46,1,35,34,6,7,35,62,1,32,22,207,118,11,97,87,86,96,13,118,10,158,1,34,158,254,54,75,75,74,76,143,144,144,0,0, + 255,255,252,180,254,57,255,72,255,83,16,7,2,158,251,254,249,28,0,0,255,255,252,217,254,192,255,47,255,84,16,7,2,143,252,4,0,0,0,0, + 255,255,251,236,254,29,0,20,254,172,16,7,0,66,252,0,0,0,0,0,255,255,251,236,254,29,0,20,255,238,16,7,10,245,252,0,0,0,0,0, + 0,1,251,140,1,236,255,173,3,12,0,27,0,0,3,21,14,1,35,34,39,38,39,46,1,35,34,6,7,53,62,1,51,50,22,23,22,23,22,51, + 50,54,83,75,143,79,90,113,22,11,77,103,51,79,141,73,78,146,83,53,100,74,12,21,116,93,70,137,3,12,174,59,55,51,10,4,33,24,59,63, + 174,60,54,22,31,5,10,55,61,0,0,0,0,1,253,120,1,196,255,136,2,104,0,3,0,0,3,21,33,53,120,253,240,2,104,164,164,0,0,0, + 0,1,250,237,1,196,255,255,2,104,0,3,0,0,1,53,33,21,250,237,5,18,1,196,164,164,0,0,0,1,251,104,255,162,255,188,4,188,0,3, + 0,0,5,39,1,23,251,200,96,3,245,95,94,78,4,204,79,0,0,0,0,1,250,18,255,186,255,145,6,23,0,3,0,0,5,39,1,23,250,121, + 103,5,25,102,70,88,6,5,89,0,0,0,0,1,253,172,254,18,254,130,255,190,0,13,0,28,64,6,13,6,10,86,3,14,16,212,252,204,50,49, + 0,64,6,0,193,13,7,193,6,47,252,220,236,48,5,50,22,21,20,6,35,53,50,54,53,52,38,35,253,172,90,124,124,90,40,53,53,40,66,125, + 90,89,124,120,53,39,40,53,0,1,252,241,254,91,255,24,255,165,0,7,0,0,1,17,51,21,33,53,51,17,252,241,137,1,21,137,254,91,1,74, + 194,194,254,182,0,2,253,33,254,20,254,227,255,214,0,3,0,7,0,0,5,17,33,17,1,53,35,21,254,227,254,62,1,74,210,42,254,62,1,194, + 254,182,210,210,0,1,252,99,254,57,255,152,255,88,0,20,0,0,5,54,51,50,19,20,21,35,38,35,34,7,35,38,39,34,7,35,18,55,50,253, + 254,59,116,218,17,118,13,103,102,16,118,11,105,102,15,118,15,220,116,250,82,254,230,2,3,150,150,149,1,150,1,30,1,0,0,0,0,1,253,43, + 4,243,254,229,6,173,0,11,0,0,1,7,39,55,39,55,23,55,23,7,23,7,254,8,125,96,125,125,96,125,125,96,125,125,96,5,112,125,96,125, + 125,96,125,125,96,125,125,96,0,1,254,6,4,194,255,32,6,210,0,29,0,0,1,46,1,53,52,54,55,21,14,1,21,20,23,22,31,1,30,1, + 21,20,6,7,53,62,1,53,52,39,38,39,254,67,33,28,147,135,82,73,9,12,18,55,33,28,147,135,82,73,9,12,18,5,199,28,48,28,80,81, + 2,110,2,27,28,10,12,15,14,43,28,48,28,80,81,2,110,2,27,28,10,12,15,14,255,255,251,236,4,58,0,20,6,11,16,39,11,28,252,0, + 0,0,16,7,11,28,252,0,254,190,0,0,255,255,252,168,4,240,254,135,6,102,16,7,0,67,251,254,0,0,0,0,255,255,253,113,4,238,255,80, + 6,102,16,7,0,118,251,254,0,0,0,0,255,255,252,180,5,29,255,72,6,55,16,7,2,158,251,254,0,0,0,0,255,255,253,144,4,194,254,130, + 6,193,16,6,2,196,0,0,255,255,252,231,5,70,255,98,7,210,16,7,3,28,252,16,0,0,0,0,255,255,253,198,254,86,254,162,255,164,16,7, + 3,22,252,16,0,0,0,0,0,1,252,213,5,29,255,43,6,73,0,7,0,0,3,35,53,33,21,35,17,33,213,150,254,214,150,2,86,5,29,150, + 150,1,44,0,0,2,253,31,254,50,254,225,255,184,0,3,0,7,0,0,1,33,53,33,53,33,53,33,254,225,254,62,1,194,254,62,1,194,254,50, + 120,150,120,0,0,2,253,21,254,20,254,235,255,160,0,3,0,7,0,0,5,51,17,35,1,51,17,35,253,21,150,150,1,64,150,150,96,254,116,1, + 140,254,116,0,0,1,253,31,254,20,254,225,255,214,0,5,0,0,5,33,17,35,17,33,253,31,1,194,150,254,212,42,254,62,1,44,0,1,252,182, + 4,238,255,74,6,102,0,39,0,0,1,55,51,7,22,23,22,51,50,55,54,55,51,6,7,6,35,34,39,38,39,7,35,55,38,39,38,35,34,7, + 6,7,35,54,55,54,51,50,23,22,253,255,66,109,107,11,22,16,13,38,18,18,2,125,2,51,51,91,38,32,30,33,66,110,107,13,20,16,13,38, + 18,18,2,125,2,51,51,91,38,32,30,5,255,103,169,9,14,10,36,37,82,135,74,73,14,13,29,103,168,11,13,10,36,37,82,135,74,73,14,13, + 0,3,252,182,4,137,255,74,6,204,0,29,0,33,0,37,0,0,1,39,46,1,35,34,6,29,1,35,52,54,51,50,22,31,1,30,1,51,50,54, + 61,1,51,14,1,35,34,38,7,51,21,35,19,51,21,35,253,252,57,25,31,12,36,40,125,103,86,36,61,48,57,23,34,15,32,40,125,2,103,84, + 34,59,232,150,150,210,150,150,5,104,33,14,11,50,45,6,101,118,16,27,30,13,12,51,41,6,100,119,16,46,150,2,67,150,0,0,255,255,252,182, + 4,197,255,74,6,144,16,34,22,187,0,183,16,3,22,187,0,0,0,167,0,1,252,99,254,40,255,157,255,194,0,13,0,0,1,55,33,23,35,39, + 55,51,7,33,39,51,23,7,254,112,132,254,25,132,127,175,175,127,132,1,231,132,126,175,175,254,40,155,155,205,205,155,155,205,205,0,0,1,253,51, + 254,20,254,205,255,164,0,8,0,0,1,35,53,7,53,55,23,21,39,254,50,100,155,205,205,155,254,20,231,132,126,175,175,126,132,0,0,1,253,120, + 4,225,254,136,7,6,0,16,0,0,1,6,7,6,21,20,23,22,23,21,38,39,38,52,55,54,55,254,136,64,42,44,44,42,64,114,78,80,80,78, + 114,6,139,1,42,44,64,65,43,43,1,123,1,79,80,230,80,78,1,0,255,255,252,191,4,96,255,49,6,216,16,39,2,194,0,0,0,144,16,6, + 2,184,0,229,255,255,253,43,254,20,254,229,255,206,16,7,2,238,0,0,249,33,0,0,0,1,253,120,4,225,254,136,7,6,0,18,0,0,1,48, + 53,22,23,22,20,7,6,7,48,53,54,55,54,53,52,39,38,253,120,114,78,80,80,78,114,64,42,44,44,42,6,139,123,1,78,80,230,80,79,1, + 123,1,43,43,65,64,44,42,255,255,255,46,5,68,255,250,6,16,16,7,2,155,253,148,0,0,0,0,0,3,252,144,254,18,255,111,255,191,0,7, + 0,21,0,29,0,0,0,22,50,62,1,38,34,6,55,54,50,22,20,6,34,39,6,34,38,52,54,50,18,54,52,38,34,6,20,22,253,9,53,79, + 53,2,55,79,53,247,62,181,124,124,182,61,62,182,124,124,182,254,54,54,79,53,53,254,195,53,53,77,55,53,109,63,124,179,125,65,64,125,179,124, + 254,206,54,77,54,53,79,53,255,255,252,112,254,27,3,144,255,133,16,7,11,29,252,201,0,0,0,0,255,255,252,112,6,107,3,144,7,213,16,7, + 11,29,252,201,8,80,0,0,0,1,252,112,6,215,3,144,7,107,0,3,0,0,1,33,21,33,252,112,7,32,248,224,7,107,148,0,0,1,252,112, + 254,192,3,144,255,84,0,3,0,0,5,33,21,33,252,112,7,32,248,224,172,148,0,0,0,1,253,42,6,13,2,214,7,39,0,35,0,0,3,39, + 38,39,38,35,34,7,6,7,35,54,55,54,51,50,23,22,31,1,22,23,22,51,50,55,54,55,51,6,7,6,35,34,39,38,4,144,28,79,44,36, + 101,53,70,5,162,4,113,112,200,91,63,57,90,144,28,79,44,36,97,57,71,4,162,4,113,112,200,91,63,57,6,74,55,11,18,10,36,48,71,135, + 74,73,14,13,34,55,11,18,10,36,44,75,135,74,73,14,13,0,0,0,255,255,252,112,6,4,3,144,7,110,16,7,11,30,252,201,0,0,0,0, + 0,1,252,119,254,40,3,147,255,194,0,8,0,0,1,53,33,39,51,23,7,35,55,252,119,6,115,132,126,175,175,126,132,254,195,100,155,205,205,155, + 255,255,0,201,0,0,4,113,5,213,16,6,17,233,0,0,255,255,0,193,0,0,3,208,4,96,16,6,17,234,0,0,0,1,0,201,0,0,6,28, + 5,213,0,11,0,0,19,33,17,35,17,33,17,35,17,33,17,35,201,5,83,202,254,134,203,254,134,202,5,213,252,244,2,98,250,213,5,43,253,158, + 0,1,0,201,0,0,4,101,5,213,0,11,0,0,19,33,17,35,17,35,17,35,17,35,17,35,201,3,156,184,185,185,185,185,5,213,252,244,2,98, + 250,213,5,43,253,158,0,0,0,1,0,160,4,116,1,159,6,102,0,3,0,17,64,6,1,0,4,2,0,4,16,212,204,49,0,16,212,204,48,27, + 1,51,3,160,65,190,110,4,116,1,242,254,14,0,0,0,0,1,0,160,254,86,1,159,0,72,0,3,0,17,64,6,2,3,4,0,2,4,16,212, + 204,49,0,16,212,204,48,37,3,35,19,1,159,65,190,110,72,254,14,1,242,0,0,0,255,255,0,201,0,0,5,51,5,213,16,6,3,172,0,0, + 255,255,0,186,0,0,4,121,4,96,16,6,3,204,0,0,0,1,1,182,254,86,2,146,255,164,0,13,0,0,1,35,34,39,38,61,1,51,21,20, + 23,22,59,1,2,146,148,26,26,20,149,10,12,14,35,254,86,33,26,46,229,229,14,12,13,0,0,0,255,255,0,127,255,227,3,245,4,123,16,6, + 2,22,0,0,255,255,0,113,255,227,3,231,4,123,16,39,0,121,1,79,255,132,16,6,0,70,0,0,255,255,0,127,255,227,3,245,4,123,16,39, + 0,121,0,142,255,132,16,6,2,22,0,0,255,255,0,158,255,18,1,195,4,35,18,6,0,30,0,0,0,1,1,115,4,238,3,82,6,102,0,3, + 0,49,64,9,2,180,0,179,4,3,68,1,4,16,212,236,49,0,16,244,236,48,0,75,176,9,84,75,176,14,84,91,88,189,0,4,255,192,0,1, + 0,4,0,4,0,64,56,17,55,56,89,1,51,1,35,2,139,199,254,186,153,6,102,254,136,0,0,0,255,255,0,215,5,70,3,82,7,210,18,38, + 0,106,0,0,17,7,3,27,0,0,1,108,0,20,0,64,7,175,8,159,8,95,8,3,93,64,5,95,8,15,8,2,113,48,0,0,255,255,0,16, + 0,0,5,104,6,102,16,39,3,27,254,218,0,0,16,6,3,38,0,0,255,255,0,219,2,72,1,174,3,70,18,6,0,121,0,0,255,255,255,231, + 0,0,5,117,6,102,16,39,3,27,254,116,0,0,16,7,3,42,0,234,0,0,0,0,255,255,255,243,0,0,6,31,6,102,16,39,3,27,254,128, + 0,0,16,7,3,44,0,228,0,0,0,0,255,255,255,237,0,0,2,125,6,102,16,39,3,27,254,122,0,0,16,7,3,46,0,234,0,0,0,0, + 255,255,255,242,255,227,6,1,6,102,16,39,3,27,254,127,0,0,16,6,3,52,40,0,255,255,255,225,0,0,6,145,6,102,16,39,3,27,254,110, + 0,0,16,7,3,57,1,170,0,0,0,0,255,255,255,219,0,0,6,5,6,102,16,39,3,27,254,104,0,0,16,6,3,61,54,0,255,255,0,5, + 0,0,2,128,7,210,16,39,3,28,255,46,0,0,18,6,3,77,15,0,255,255,0,16,0,0,5,104,5,213,18,6,0,36,0,0,255,255,0,201, + 0,0,4,236,5,213,18,6,0,37,0,0,0,1,0,201,0,0,4,106,5,213,0,5,0,25,64,12,4,149,1,129,0,7,2,4,28,1,4,6, + 16,252,252,204,196,49,0,47,244,236,48,51,17,33,21,33,17,201,3,161,253,41,5,213,170,250,213,0,0,2,0,16,0,0,5,104,5,213,0,2, + 0,6,0,61,64,12,66,0,149,4,129,1,149,3,8,6,3,7,16,212,196,196,49,0,47,236,244,236,48,75,83,88,64,18,0,17,5,4,3,2, + 17,6,6,5,0,17,4,1,17,3,3,4,5,7,16,236,16,236,7,16,236,8,16,236,89,9,1,33,5,1,51,1,2,188,254,102,3,53,251,185, + 2,58,229,2,57,5,14,251,154,168,5,213,250,43,0,0,255,255,0,201,0,0,4,139,5,213,18,6,0,40,0,0,255,255,0,92,0,0,5,31, + 5,213,18,6,0,61,0,0,255,255,0,201,0,0,5,59,5,213,18,6,0,43,0,0,0,3,0,115,255,227,5,217,5,240,0,3,0,18,0,33, + 0,50,64,28,4,149,19,145,34,3,149,0,173,34,11,149,26,140,34,35,16,1,15,25,22,51,0,8,25,30,16,34,16,252,236,196,244,236,196,236, + 49,0,16,244,236,16,244,236,16,244,236,48,1,33,21,33,1,34,7,6,17,16,0,51,50,55,54,17,16,39,38,39,32,0,17,16,7,6,33,32, + 39,38,17,16,55,54,1,197,2,194,253,62,1,98,220,129,130,1,3,220,220,129,128,128,129,220,1,58,1,120,188,188,254,198,254,197,188,189,189,188, + 3,112,170,2,134,164,164,254,229,254,230,254,184,164,164,1,26,1,27,164,164,164,254,91,254,158,254,159,210,211,210,210,1,98,1,98,211,210,0,0, + 255,255,0,201,0,0,1,147,5,213,18,6,0,44,0,0,255,255,0,201,0,0,5,106,5,213,18,6,0,46,0,0,0,1,0,16,0,0,5,104, + 5,213,0,6,0,60,64,11,66,6,149,2,129,5,1,8,4,1,7,16,212,196,196,49,0,47,60,244,236,48,75,83,88,64,18,6,17,3,2,1, + 5,17,4,4,3,6,17,2,0,17,1,1,2,5,7,16,236,16,236,7,16,236,8,16,236,89,51,35,1,51,1,35,1,229,213,2,58,229,2,57, + 210,254,38,5,213,250,43,5,14,0,0,0,255,255,0,201,0,0,6,31,5,213,18,6,0,48,0,0,255,255,0,201,0,0,5,51,5,213,18,6, + 0,49,0,0,0,3,0,201,0,0,4,98,5,213,0,3,0,7,0,11,0,42,64,22,7,149,4,129,11,3,149,0,173,8,149,11,13,4,1,9, + 5,0,8,4,4,12,16,252,60,196,212,60,196,236,49,0,47,236,244,236,16,244,236,48,1,33,21,33,3,33,21,33,17,33,21,33,1,50,2,199, + 253,57,105,3,153,252,103,3,153,252,103,3,113,170,3,14,170,251,127,170,255,255,0,115,255,227,5,217,5,240,18,6,0,50,0,0,255,255,0,201, + 0,0,5,59,5,213,18,6,3,179,0,0,255,255,0,201,0,0,4,141,5,213,18,6,0,51,0,0,0,1,0,201,0,0,4,139,5,213,0,11, + 0,70,64,17,66,10,6,149,7,129,0,4,149,3,13,1,8,4,7,4,12,16,252,60,212,60,204,49,0,47,236,50,244,236,50,48,75,83,88,64, + 18,11,17,5,5,4,10,17,6,6,5,11,17,5,0,17,4,5,4,5,7,16,236,16,236,7,16,236,8,16,236,89,37,33,21,33,53,9,1,53, + 33,21,33,1,1,177,2,218,252,62,1,223,254,33,3,176,253,56,1,223,170,170,170,2,112,2,17,170,170,253,243,0,255,255,255,250,0,0,4,233, + 5,213,18,6,0,55,0,0,255,255,255,252,0,0,4,231,5,213,18,6,0,60,0,0,0,3,0,115,0,0,5,217,5,213,0,8,0,17,0,39, + 0,60,64,16,41,13,25,33,18,26,0,28,37,29,17,4,25,22,16,40,16,252,236,212,60,60,252,60,60,212,236,196,49,0,64,14,17,0,149,29, + 26,27,129,39,9,8,149,37,18,39,47,212,60,252,60,16,244,212,60,252,60,48,1,6,7,6,21,20,23,22,23,51,54,55,54,53,52,39,38,39, + 3,38,39,38,17,16,55,54,55,53,51,21,22,23,22,17,16,7,6,7,21,35,2,194,150,98,130,130,98,150,202,150,98,128,128,98,150,202,244,158, + 189,189,157,245,202,244,157,188,188,157,244,202,4,142,21,87,115,198,197,115,87,21,21,87,115,197,198,115,87,21,252,16,22,134,160,1,15,1,15,161, + 135,22,159,159,23,134,161,254,241,254,242,161,134,23,157,0,255,255,0,61,0,0,5,59,5,213,18,6,0,59,0,0,0,1,0,115,0,0,5,219, + 5,213,0,29,0,46,64,23,16,13,149,27,2,21,14,7,129,0,31,21,28,22,2,14,28,27,15,8,28,7,30,16,220,236,212,60,252,60,212,236, + 204,49,0,47,228,50,50,220,60,236,50,48,33,54,39,34,39,38,3,17,51,17,16,23,22,23,17,51,17,54,55,54,25,1,51,17,2,7,6,35, + 6,23,2,194,1,1,214,188,184,5,213,130,110,138,202,138,110,130,213,5,184,188,214,1,1,134,176,210,204,1,104,1,153,254,103,254,230,164,140,14, + 3,241,252,15,14,140,164,1,26,1,153,254,103,254,152,204,210,72,238,0,0,1,0,78,0,0,5,207,5,231,0,38,0,51,64,27,11,149,30,145, + 38,3,18,21,149,2,20,3,7,25,40,16,0,34,51,26,18,14,25,21,26,16,39,16,252,196,252,196,16,244,196,236,252,196,49,0,47,60,236,50, + 50,50,244,236,48,37,21,33,53,54,55,54,53,52,39,38,35,34,0,21,20,23,22,23,21,33,53,33,38,39,38,53,16,55,54,33,32,23,22,17, + 20,7,6,7,5,207,253,168,177,99,99,132,132,216,216,254,247,99,100,178,253,168,1,63,158,73,72,192,191,1,49,1,47,193,192,71,71,161,178,178, + 178,97,166,166,202,240,145,145,254,221,239,202,166,166,97,178,178,139,149,149,184,1,62,197,197,197,196,254,203,194,148,148,141,0,0,0,255,255,0,6, + 0,0,2,88,7,78,16,39,22,185,3,47,1,117,19,6,3,46,0,0,0,8,180,9,3,6,8,7,43,49,0,0,255,255,255,252,0,0,4,231, + 7,78,16,39,22,185,4,113,1,117,19,6,3,57,0,0,0,8,180,12,2,7,8,7,43,49,0,0,255,255,0,113,255,231,4,228,6,102,18,38, + 3,69,0,0,16,6,3,27,110,0,0,0,255,255,0,133,255,227,3,200,6,102,16,38,3,27,80,0,18,6,3,73,0,0,0,0,255,255,0,186, + 254,86,4,100,6,102,16,39,3,27,0,198,0,0,18,6,3,75,0,0,255,255,0,166,0,0,2,152,6,102,18,38,3,77,0,0,16,7,3,27, + 255,70,0,0,255,255,0,149,255,227,4,42,7,210,18,38,3,89,0,0,16,6,3,28,27,0,0,0,0,2,0,113,255,231,4,228,4,121,0,13, + 0,42,0,200,64,11,18,17,7,44,16,23,7,18,37,69,43,16,252,236,212,196,196,18,57,57,64,10,63,16,47,16,31,16,3,143,16,1,93,113, + 0,64,17,18,17,11,3,185,41,184,25,11,185,33,140,15,188,22,135,25,47,236,228,244,236,16,244,236,17,57,57,5,64,20,29,17,0,17,14,17, + 18,17,17,16,15,17,14,17,0,17,29,17,17,16,7,16,60,236,236,236,8,7,16,60,236,236,49,48,1,64,11,132,18,134,17,136,1,137,13,128, + 16,5,93,64,19,73,19,73,18,73,28,74,29,78,13,76,0,78,1,73,14,75,17,9,93,64,17,58,14,57,18,58,17,56,29,56,17,63,13,60, + 0,62,1,8,93,64,11,43,13,43,1,42,0,41,14,41,17,5,93,64,13,25,15,24,14,27,13,27,1,26,0,25,17,6,93,0,64,5,43,30, + 43,31,2,93,1,39,38,35,34,7,6,21,20,23,22,51,50,55,27,1,51,3,23,22,23,22,59,1,21,35,34,39,38,39,6,7,6,35,34,39, + 38,17,16,55,54,51,32,3,78,44,45,178,134,61,77,75,76,121,134,72,164,99,164,205,40,9,35,41,32,88,110,94,84,41,17,46,94,44,143,235, + 114,117,127,141,198,1,55,2,9,231,237,110,138,182,220,105,107,213,1,231,1,37,253,161,219,49,41,48,156,84,42,88,111,87,41,152,157,1,19,1, + 38,138,154,0,0,2,0,192,254,86,4,136,6,33,0,14,0,28,0,55,64,15,24,18,7,30,69,19,18,11,22,0,28,8,3,70,29,16,252,236, + 50,196,212,236,228,212,236,49,0,64,14,26,185,5,9,21,185,22,17,185,13,140,2,189,29,16,236,244,236,212,252,57,212,236,48,37,17,35,17,16, + 33,32,17,16,7,4,17,16,33,34,3,22,51,32,17,16,5,53,32,17,52,35,32,17,1,121,185,1,170,1,178,172,1,24,254,30,212,89,111,197, + 1,32,254,48,1,107,234,254,251,69,254,17,6,3,1,200,254,127,254,238,100,90,254,245,254,38,1,74,173,1,58,1,26,22,170,1,64,219,254,200, + 0,1,0,32,254,86,4,127,4,96,0,14,0,64,64,7,16,3,7,8,4,12,15,16,212,212,252,212,196,49,0,64,7,2,12,191,6,189,4,7, + 47,60,236,228,50,48,5,64,18,1,17,8,7,2,17,3,4,3,14,13,1,17,0,17,7,8,7,7,16,236,236,57,57,7,16,236,8,236,1,19, + 1,51,1,17,35,17,1,38,43,1,53,51,50,1,105,245,1,94,195,254,59,184,254,218,44,95,49,70,197,3,176,253,76,3,100,251,160,254,86,1, + 170,3,68,126,158,0,0,0,0,2,0,113,255,227,4,117,5,240,0,28,0,45,0,84,64,20,6,5,40,4,47,69,28,40,18,10,81,18,4,18, + 24,33,18,18,69,46,16,252,236,212,236,16,244,178,127,10,1,93,236,196,236,17,18,57,57,0,64,14,6,5,37,2,28,0,2,185,26,37,185,14, + 140,46,16,244,236,212,252,212,204,17,18,57,57,64,6,22,29,83,5,6,5,7,14,16,236,57,49,48,1,38,35,34,21,20,5,22,23,22,17,16, + 7,6,35,34,39,38,17,52,55,54,55,38,53,16,33,50,23,1,6,7,6,21,20,23,22,51,50,54,53,52,39,38,39,38,3,236,102,239,253,1, + 8,208,117,142,137,137,240,239,138,137,137,53,75,156,1,185,221,120,254,24,68,55,86,85,86,149,147,172,91,97,126,64,5,17,70,117,92,48,37,112, + 135,254,235,254,247,156,157,157,156,1,19,204,165,64,36,79,141,1,16,70,254,40,29,73,113,204,203,114,115,232,190,199,96,103,11,6,0,1,0,133, + 255,227,3,200,4,124,0,50,0,61,64,34,12,134,11,136,16,185,8,184,51,27,169,24,51,39,134,40,136,35,185,44,140,51,52,25,11,39,20,8, + 4,31,8,48,69,51,16,252,236,212,236,212,196,196,196,49,0,16,244,236,244,236,16,212,236,16,244,236,244,236,48,1,38,39,38,53,52,55,54,51, + 50,22,23,21,38,39,38,35,34,7,6,21,20,23,22,59,1,21,35,34,7,6,21,20,23,22,51,50,55,54,55,21,6,7,6,35,34,39,38,53, + 52,54,1,139,112,60,60,114,113,196,76,170,98,97,80,81,71,119,69,70,68,67,116,155,148,137,72,78,84,85,151,93,85,85,71,90,84,85,80,238, + 129,129,138,2,92,24,65,64,93,141,79,78,24,24,167,29,13,13,46,46,64,70,45,44,152,51,56,88,90,56,56,18,19,37,171,28,14,14,91,91, + 173,108,146,0,0,1,0,107,254,82,3,248,6,20,0,29,0,62,64,11,10,14,18,31,4,25,24,28,18,20,30,16,212,236,212,212,212,196,252,204, + 75,176,16,81,88,185,0,22,0,64,56,89,49,0,64,14,8,185,10,0,185,18,140,30,26,23,135,24,151,30,16,244,236,50,16,244,236,220,236,48, + 37,22,23,22,21,20,7,6,35,52,53,22,55,54,53,52,39,38,35,32,3,16,1,33,53,33,21,0,17,16,2,202,132,79,84,74,80,163,69,42, + 32,32,31,58,253,162,1,2,59,253,236,3,102,253,44,127,1,75,79,120,115,80,87,75,76,5,44,35,37,53,44,42,2,51,1,236,1,89,185,185, + 254,148,254,39,254,105,0,0,0,1,0,186,254,86,4,100,4,123,0,21,0,49,64,22,6,135,14,18,184,12,188,2,189,11,23,70,3,8,0,78, + 9,13,8,12,70,22,16,252,236,50,244,236,236,49,0,47,236,228,244,196,236,48,64,5,160,23,128,23,2,1,93,1,17,35,17,52,38,35,34,6, + 21,17,35,17,51,21,54,55,54,51,50,23,22,4,100,184,124,124,149,172,185,185,66,89,90,117,193,99,99,2,164,251,178,4,72,159,158,190,164,253, + 135,4,96,174,101,50,50,119,120,0,0,0,0,3,0,113,255,233,4,117,6,36,0,8,0,17,0,33,0,79,64,27,13,185,18,151,34,1,149,17, + 34,5,185,26,140,34,35,69,0,9,18,22,81,1,17,18,30,69,34,16,252,236,50,244,178,127,22,1,93,236,50,236,49,0,16,244,236,16,212,64, + 7,63,17,31,17,15,17,3,93,236,16,244,236,48,64,11,25,6,22,4,119,4,160,35,128,35,5,1,93,1,33,18,23,22,51,50,55,54,19,2, + 39,38,35,34,7,6,3,1,50,23,22,17,16,7,6,35,34,39,38,17,16,55,54,3,177,253,131,15,69,86,149,150,83,73,9,28,54,86,147,153, + 81,64,19,1,61,240,137,137,137,137,240,241,136,137,137,136,2,198,254,213,127,156,157,138,1,201,1,28,100,158,156,126,254,252,2,180,212,211,254,138, + 254,139,212,213,213,212,1,117,1,118,211,212,0,1,0,166,0,0,2,110,4,96,0,13,0,27,64,7,15,6,0,8,13,70,14,16,252,252,212,196, + 49,0,64,5,13,188,5,135,8,47,236,228,48,1,17,20,23,22,59,1,21,35,34,39,38,53,3,1,99,34,36,108,89,111,180,82,82,1,4,96, + 253,43,145,46,48,156,96,98,212,2,202,0,0,1,0,191,0,0,4,133,4,96,0,11,0,73,64,9,13,6,4,9,1,8,11,70,12,16,252,236, + 50,196,212,196,49,0,64,5,3,0,188,7,11,47,60,228,50,48,64,22,8,17,9,4,5,7,17,6,6,5,8,5,9,4,3,17,4,2,17,9, + 9,4,7,16,4,236,16,5,236,9,60,60,7,16,5,236,16,8,236,19,51,17,1,51,9,1,35,1,7,17,35,191,190,1,227,224,254,71,1,254, + 225,254,98,137,190,4,96,254,47,1,209,254,90,253,70,2,66,129,254,63,0,1,0,61,0,0,4,127,6,20,0,13,0,70,64,5,15,1,11,5, + 14,16,212,196,212,196,49,0,64,6,10,135,11,151,2,5,47,60,244,236,48,64,24,3,17,1,0,6,4,17,5,6,5,7,17,6,17,3,17,1, + 0,0,2,17,0,1,0,7,16,5,236,16,9,236,236,5,236,7,16,5,236,16,8,236,9,1,35,9,1,35,1,39,38,43,1,53,23,22,2,122, + 2,5,195,254,198,254,126,195,1,235,74,47,107,96,117,226,5,101,250,155,3,60,252,196,4,50,198,126,158,2,3,0,255,255,0,174,254,86,4,229, + 4,96,16,6,0,119,0,0,0,1,0,74,0,0,4,24,4,96,0,21,0,66,64,7,23,7,18,17,0,1,22,16,212,196,212,236,196,49,64,4, + 11,1,188,0,0,47,228,50,48,64,22,20,19,18,3,17,21,17,6,5,4,3,7,3,17,1,0,0,2,17,1,1,0,7,16,5,236,16,9,236, + 18,23,57,5,236,18,23,57,33,1,51,1,54,55,54,55,54,39,38,39,51,49,22,23,22,21,20,7,6,7,1,160,254,170,198,1,33,120,100,76, + 4,2,24,28,106,186,69,46,42,136,177,123,4,96,252,84,124,172,129,112,53,100,119,131,89,124,114,78,196,175,228,116,0,1,0,107,254,82,4,1, + 6,20,0,38,0,64,64,15,10,14,18,40,4,34,29,28,32,18,24,37,18,20,39,16,212,236,212,236,212,212,196,212,196,252,204,49,64,18,8,185, + 10,0,185,18,140,39,22,35,135,34,30,27,135,28,151,39,0,16,244,252,60,212,236,57,16,244,236,220,236,48,37,22,23,22,21,20,7,6,35,52, + 53,22,55,54,53,52,39,38,35,32,17,16,37,36,17,52,55,35,53,33,21,32,17,20,5,21,36,19,18,2,218,132,79,84,74,80,163,69,42,32, + 32,31,58,253,145,1,77,254,232,220,208,3,21,253,139,2,16,253,198,2,1,127,1,75,79,120,115,80,87,75,76,5,44,35,37,53,44,42,1,181, + 1,44,88,36,1,4,197,82,185,185,254,221,191,9,170,22,254,188,254,241,255,255,0,113,255,227,4,117,4,123,18,6,0,82,0,0,0,1,0,74, + 255,217,4,152,4,96,0,23,0,47,64,11,25,10,1,18,8,3,19,8,0,22,24,16,220,196,236,212,236,196,196,204,49,64,12,7,135,14,140,21, + 3,19,23,135,0,188,21,0,47,244,236,50,50,16,244,236,48,19,33,21,35,17,20,22,51,50,54,55,21,14,1,35,34,38,53,17,33,17,35,17, + 35,74,4,49,141,49,55,15,44,7,35,74,37,120,92,254,99,188,143,4,96,184,253,80,72,63,5,1,133,13,12,131,176,2,156,252,88,3,168,0, + 0,2,0,186,254,86,4,164,4,123,0,17,0,29,0,49,64,25,21,185,4,184,30,27,185,10,140,15,189,30,31,69,18,18,7,81,13,8,24,18, + 16,70,30,16,252,236,236,244,178,127,7,1,93,236,236,49,0,16,236,244,236,16,244,236,48,1,54,55,54,51,50,0,17,16,2,35,34,38,39,17, + 35,17,52,5,52,38,35,34,6,21,20,22,51,50,54,1,20,61,151,59,182,204,0,255,255,204,123,177,58,185,3,43,167,146,146,167,167,146,146,167, + 3,152,102,90,35,254,188,254,248,254,248,254,188,97,100,253,174,3,207,231,221,203,231,231,203,203,231,231,0,1,0,113,254,82,3,231,4,123,0,36, + 0,54,64,12,29,33,18,23,38,9,72,16,18,3,69,37,16,252,236,244,204,212,252,196,49,64,17,27,185,29,19,185,0,140,37,9,134,10,136,13, + 185,6,184,37,0,16,244,252,244,236,16,244,236,220,236,48,5,32,0,17,16,0,33,50,22,23,21,46,1,35,34,6,21,20,22,51,50,23,22,21, + 20,7,6,35,52,53,22,55,54,53,52,39,38,2,168,254,243,254,214,1,45,1,6,85,162,76,78,157,80,179,198,198,175,131,80,84,74,80,163,69, + 42,32,32,31,29,1,62,1,14,1,18,1,58,35,35,172,43,43,227,205,205,227,76,79,120,115,80,87,75,76,5,44,35,37,53,44,42,0,0,0, + 0,2,0,113,255,227,4,214,4,96,0,13,0,30,0,49,64,11,32,15,10,18,19,81,4,18,27,69,31,16,252,236,244,178,127,19,1,93,236,212, + 196,49,64,12,7,185,23,140,31,17,135,0,185,14,188,31,0,16,244,236,236,16,244,236,48,1,34,7,6,21,20,22,51,50,54,53,52,39,38,39, + 33,21,35,22,21,16,7,6,35,34,39,38,17,16,55,54,2,115,152,82,86,171,149,147,172,86,79,154,2,99,206,109,137,137,240,241,136,137,137,113, + 3,206,110,115,190,201,231,232,200,183,122,110,146,184,156,221,254,237,156,157,157,156,1,19,1,21,155,129,0,1,0,100,0,0,4,109,4,96,0,17, + 0,35,64,8,19,13,3,15,8,12,10,18,16,212,196,252,196,196,196,49,0,64,8,15,11,135,12,188,2,185,5,47,236,244,236,50,48,37,22,59, + 1,21,35,34,39,38,53,17,33,53,33,21,33,17,20,2,230,36,108,89,111,180,82,82,254,92,4,9,254,87,204,48,156,96,98,212,2,18,184,184, + 253,227,145,0,0,1,0,149,255,227,4,42,4,96,0,28,0,43,64,10,30,69,9,18,19,0,8,28,70,29,16,252,236,212,236,228,64,7,63,30, + 63,9,63,19,3,93,49,0,64,6,13,28,188,5,185,23,47,236,244,60,48,1,17,20,23,22,51,50,55,54,55,54,39,38,39,51,49,22,23,22, + 21,20,7,6,39,34,39,38,53,3,1,82,50,55,107,150,105,59,15,8,30,28,106,186,70,45,42,128,156,254,179,101,98,1,4,96,253,43,135,64, + 69,208,118,187,102,128,119,131,90,123,115,154,253,187,228,1,120,118,197,2,202,0,0,0,0,2,0,112,254,86,4,209,4,104,0,10,0,41,0,61, + 64,16,43,69,7,18,15,19,2,8,30,22,40,35,18,26,69,42,16,252,236,212,60,204,252,60,212,236,236,49,0,64,16,0,31,185,11,30,184,42, + 3,39,135,19,22,140,21,189,42,16,236,244,60,236,50,16,244,60,236,50,48,1,34,21,17,50,55,54,53,52,39,38,39,50,23,22,17,16,7,6, + 35,17,35,17,34,39,38,17,16,55,54,55,21,6,7,6,21,20,23,22,51,17,16,3,61,65,95,95,85,86,70,54,140,127,137,137,129,203,183,199, + 134,136,136,102,166,66,58,86,86,77,112,3,203,145,253,82,104,93,223,208,112,91,157,132,141,254,217,254,241,161,152,254,110,1,145,153,156,1,19,1, + 30,146,109,28,163,23,78,115,190,202,115,103,2,175,1,46,0,1,0,59,254,85,4,100,4,97,0,23,0,174,64,12,4,16,1,13,4,9,15,20, + 15,3,9,24,16,212,60,212,60,17,18,23,57,177,25,15,16,196,49,64,19,4,16,1,13,4,21,15,8,169,15,9,188,24,20,169,21,2,189,24, + 0,16,252,60,236,16,252,60,236,17,18,23,57,48,176,37,75,83,88,64,18,0,17,17,12,17,5,3,14,0,5,14,17,15,2,17,3,3,14,7, + 5,16,236,16,236,7,8,16,236,16,236,180,13,12,17,14,3,15,180,4,5,0,14,3,15,180,16,12,17,2,15,15,180,1,15,2,0,5,15,180, + 6,7,5,5,4,7,5,17,18,57,180,23,22,17,5,4,7,5,17,18,57,180,11,10,12,17,12,7,5,17,18,57,180,18,19,17,17,12,7,5, + 17,18,57,89,5,3,1,35,1,3,38,43,1,53,23,4,23,19,1,51,1,19,22,59,1,21,39,36,2,220,149,254,205,217,1,178,182,49,154,49, + 70,1,2,65,148,1,51,217,254,78,182,49,154,49,70,254,254,250,1,127,253,208,3,24,1,215,126,158,2,7,167,254,129,2,48,252,232,254,41,126, + 158,2,7,0,0,1,0,112,254,86,4,209,4,96,0,27,0,54,64,13,29,19,8,20,25,13,8,0,12,6,8,5,28,16,220,236,212,60,252,60, + 212,236,204,49,0,64,14,19,12,5,188,28,14,11,135,25,0,140,27,189,28,16,236,244,60,236,50,16,244,60,60,48,5,38,39,38,53,17,51,17, + 20,23,22,23,17,51,17,54,55,54,53,17,51,17,20,7,6,7,17,35,2,69,231,107,131,186,85,74,124,183,131,67,85,186,131,118,220,183,25,37, + 97,119,243,2,137,253,126,183,76,66,14,3,213,252,44,14,66,84,175,2,129,253,120,252,110,99,35,254,110,0,0,0,0,1,0,135,255,227,6,39, + 4,96,0,26,0,56,64,20,18,18,19,28,69,16,18,21,11,8,12,7,18,2,5,18,4,2,69,27,16,252,220,236,16,236,212,252,212,236,236,220, + 236,49,0,64,9,11,18,4,188,14,9,135,23,0,47,60,236,50,244,60,196,48,5,32,17,52,19,51,2,21,16,51,50,17,51,16,51,50,17,52, + 3,51,18,21,16,33,32,3,2,2,38,254,97,155,198,143,222,203,170,203,222,143,198,155,254,97,254,240,33,41,29,2,82,235,1,64,254,192,240,254, + 79,2,26,253,230,1,177,240,1,64,254,192,235,253,174,1,43,254,213,0,255,255,0,5,0,0,2,125,6,16,18,38,3,77,15,0,16,7,0,106, + 255,46,0,0,255,255,0,149,255,227,4,42,6,16,16,38,0,106,29,0,18,6,3,89,0,0,0,0,255,255,0,113,255,227,4,117,6,102,16,38, + 3,27,125,0,18,6,3,83,0,0,0,0,255,255,0,149,255,227,4,42,6,102,16,38,3,27,34,0,18,6,3,89,0,0,0,0,255,255,0,135, + 255,227,6,39,6,102,18,38,3,93,0,0,16,7,3,27,1,89,0,0,0,1,0,201,254,86,5,106,5,213,0,12,0,0,19,51,17,1,33,9, + 2,35,9,1,17,35,201,202,2,158,1,4,253,27,3,26,254,146,134,1,16,253,13,202,5,213,253,137,2,119,253,72,252,227,254,86,1,132,2,245, + 253,49,0,0,0,3,0,167,255,233,4,77,6,36,0,10,0,27,0,39,0,71,64,14,5,28,26,41,69,38,28,13,0,30,28,20,70,40,16,252, + 236,50,212,236,236,212,178,63,26,1,93,236,49,0,64,16,28,11,0,185,30,40,34,185,17,140,40,7,185,23,151,40,16,244,236,16,244,236,16,212, + 182,63,30,31,30,15,30,3,93,236,57,57,48,1,50,54,55,54,53,54,35,34,7,6,1,22,21,20,7,6,32,39,38,2,55,54,23,30,1,18, + 6,7,6,35,16,23,22,51,50,55,62,1,38,1,105,80,203,68,121,1,204,122,93,54,1,238,246,59,126,254,14,139,111,2,120,134,210,164,218,2, + 93,251,89,223,58,80,174,143,87,24,1,173,3,112,4,61,108,147,222,186,108,254,199,167,233,130,95,213,213,168,3,44,190,213,1,1,226,254,229,182, + 150,20,254,234,128,176,156,45,209,158,0,0,0,2,0,113,255,233,4,117,6,36,0,10,0,31,0,55,64,15,11,0,8,33,69,21,7,8,15,21, + 26,8,25,69,32,16,252,236,204,220,236,16,236,252,60,49,0,64,14,4,135,18,151,32,0,135,11,29,135,22,140,26,32,16,204,244,236,220,236,16, + 244,236,48,1,52,39,38,35,34,6,21,20,23,22,5,32,39,38,17,52,54,51,50,18,16,0,32,0,17,23,21,16,18,32,18,3,174,49,66,149, + 83,120,121,74,1,19,254,204,131,211,208,175,218,245,254,228,254,35,254,245,188,176,1,47,165,3,112,246,126,170,137,90,170,90,55,170,65,105,1,54, + 160,222,254,100,252,252,254,101,1,182,1,210,1,160,254,243,254,189,1,66,0,1,0,87,0,0,5,81,5,223,0,32,0,73,64,9,34,0,27,20, + 4,28,15,7,33,16,220,204,252,57,220,196,180,63,0,64,27,2,93,204,49,0,64,17,7,4,20,5,14,149,15,31,0,149,13,149,20,24,17,145, + 5,47,244,60,204,236,236,204,212,236,17,18,57,57,64,9,111,31,127,31,143,31,207,31,4,93,48,1,6,3,6,21,17,35,17,52,39,2,39,38, + 34,7,53,54,50,23,4,19,18,37,54,50,23,22,21,20,7,6,35,34,4,70,160,82,42,203,42,82,160,77,119,40,31,111,85,1,67,72,107,1, + 31,38,95,42,83,17,25,75,133,5,17,72,254,243,141,165,253,118,2,138,165,141,1,13,72,35,9,170,10,13,48,254,114,1,123,67,9,32,64,91, + 41,47,66,0,255,255,255,225,0,0,6,161,6,102,16,39,3,27,254,110,0,0,16,7,3,102,1,80,0,0,0,0,255,255,0,87,0,0,5,81, + 7,78,16,39,22,185,4,197,1,117,18,6,3,102,0,0,0,3,0,112,254,86,4,209,6,20,0,21,0,30,0,39,0,65,64,16,41,26,18,6, + 9,1,30,8,12,20,32,36,18,16,69,40,16,252,236,212,60,60,252,60,60,212,236,196,49,64,18,30,32,135,1,20,184,40,22,31,135,9,12,140, + 21,151,11,189,40,0,16,236,228,244,60,252,60,16,244,60,252,60,48,1,17,50,23,22,17,16,7,6,35,17,35,17,34,39,38,17,16,55,54,51, + 17,19,50,55,54,55,54,39,38,35,3,17,34,7,6,23,22,23,22,2,252,199,133,137,137,133,199,183,199,134,136,136,134,199,183,113,77,84,1,1, + 86,77,113,183,113,76,87,1,1,85,76,6,20,254,99,153,156,254,237,254,237,156,153,254,111,1,145,153,156,1,19,1,19,156,153,1,157,250,119,103, + 115,202,200,117,103,252,184,3,72,103,117,200,202,115,103,0,0,2,0,65,255,227,6,109,4,96,0,16,0,30,0,69,64,22,4,17,18,16,4,6, + 14,32,69,3,29,18,6,24,8,25,20,18,1,14,69,31,16,252,196,236,212,252,212,236,196,236,17,18,23,57,49,0,64,15,24,16,17,3,135,1, + 188,31,27,22,135,8,12,140,31,16,244,60,236,50,16,244,236,50,50,204,48,19,53,33,21,35,22,21,16,37,36,3,2,33,32,17,52,55,41,1, + 6,21,16,51,50,3,51,2,55,54,17,52,65,6,44,147,77,254,97,254,241,34,41,254,248,254,97,77,4,58,252,146,71,222,207,4,170,4,207,222, + 3,168,184,184,207,164,253,173,1,1,1,42,254,213,2,82,164,207,209,167,254,79,2,26,253,227,3,3,1,174,167,0,0,1,0,112,254,91,4,205, + 4,103,0,57,0,0,5,38,39,38,52,55,7,2,7,6,35,34,53,52,1,54,53,52,39,38,35,34,7,53,54,51,50,23,4,17,20,7,55,18, + 55,54,51,50,21,20,1,6,21,20,23,22,51,50,55,2,7,6,34,39,53,22,51,50,3,249,246,33,10,13,189,96,200,55,34,55,1,36,62,14, + 26,142,57,91,64,91,26,27,1,29,29,189,96,200,55,34,55,254,220,62,14,26,142,57,91,38,205,70,162,93,95,73,164,10,32,240,73,129,53,108, + 254,247,124,34,79,154,1,9,138,122,58,54,104,108,224,48,4,39,254,195,91,77,108,1,9,124,34,79,154,254,247,138,122,58,54,104,108,253,224,102, + 36,49,160,49,0,2,0,115,254,88,5,217,5,240,0,17,0,31,0,68,64,14,33,16,29,25,14,10,0,28,3,22,25,7,16,32,16,252,236,220, + 182,0,3,16,3,48,3,3,93,252,57,220,182,0,14,16,14,48,14,3,93,236,236,49,0,64,12,19,149,10,145,32,26,149,0,3,1,189,32,16, + 236,212,60,236,16,244,236,48,5,17,35,17,38,39,38,16,55,54,33,32,23,22,17,16,7,6,2,32,7,6,17,16,23,22,32,55,54,17,16,39, + 3,132,184,252,160,189,189,188,1,59,1,58,188,188,188,159,123,254,72,129,130,130,129,1,184,129,128,128,24,254,112,1,144,26,179,210,2,196,211,210, + 210,211,254,158,254,159,210,179,5,73,164,164,254,229,254,230,164,164,164,164,1,26,1,27,164,0,0,0,0,2,0,113,254,86,4,117,4,123,0,13, + 0,31,0,60,64,16,33,69,10,18,28,0,25,7,14,18,17,4,18,21,69,32,16,252,236,220,178,48,17,1,93,252,57,57,57,220,236,236,49,0, + 64,13,0,185,25,184,32,7,185,14,17,140,15,189,32,16,236,244,60,236,16,244,236,48,1,34,7,6,16,23,22,51,50,54,53,52,39,38,3,17, + 35,17,38,39,38,17,16,55,54,51,50,0,17,16,7,6,2,115,148,86,86,85,86,149,147,172,86,86,57,170,190,107,137,137,136,241,240,1,18,137, + 106,3,223,115,116,254,110,116,115,232,200,199,116,117,252,9,254,110,1,146,27,125,156,1,19,1,20,156,156,254,200,254,236,254,237,156,123,0,0,0, + 0,1,0,139,254,82,4,171,5,213,0,36,0,46,64,10,18,22,18,38,12,35,4,28,30,37,16,220,236,204,212,204,252,196,49,0,64,13,16,149, + 18,8,149,26,140,37,0,149,34,129,37,16,244,236,16,244,236,220,236,48,1,32,7,6,17,16,23,22,51,50,23,22,21,20,7,6,35,52,53,22, + 55,54,53,52,39,38,35,32,39,38,17,16,55,54,41,1,21,3,70,254,243,96,123,91,109,200,122,89,84,74,80,163,69,42,32,32,31,58,254,192, + 142,149,185,138,1,120,1,101,5,43,119,152,254,205,254,181,127,152,84,79,120,115,80,87,75,76,5,44,35,37,53,44,42,203,214,1,101,1,78,237, + 177,170,0,0,0,1,0,113,254,82,4,81,4,96,0,32,0,52,64,11,25,29,18,34,19,7,12,18,3,69,33,16,252,236,204,212,204,252,196,178, + 15,7,1,93,49,0,64,13,23,185,25,15,185,0,140,33,9,185,6,184,33,16,244,236,16,244,236,220,236,48,5,34,0,17,16,0,41,1,21,33, + 34,6,21,20,22,51,50,23,22,21,20,7,6,35,52,53,22,55,54,53,52,39,38,2,103,204,254,214,1,45,1,6,1,173,254,91,179,198,197,111, + 131,80,84,74,80,163,69,42,32,32,32,29,1,62,1,14,1,18,1,31,156,199,206,205,227,76,79,120,115,80,87,75,76,5,44,35,37,53,44,42, + 255,255,0,201,0,0,4,35,5,213,18,6,0,41,0,0,0,1,255,64,254,86,3,70,6,20,0,39,0,54,183,9,20,22,19,18,32,0,40,16, + 220,204,252,60,204,204,49,0,64,20,22,135,19,10,135,9,19,14,135,5,151,40,32,135,31,36,135,27,189,40,16,252,236,212,236,16,244,236,204,212, + 236,16,236,48,51,17,52,55,54,51,50,23,22,23,21,38,39,38,35,34,7,6,21,17,33,21,33,17,20,7,6,35,34,39,38,39,53,22,23,22, + 51,50,55,54,238,136,96,169,49,50,49,51,36,41,41,44,120,58,75,1,65,254,191,139,98,173,57,51,51,46,49,50,50,48,87,64,82,4,130,160, + 142,100,9,9,18,164,28,14,15,62,81,111,254,201,143,253,63,146,165,115,10,11,22,164,31,16,17,75,95,0,0,0,0,1,0,179,255,252,4,212, + 5,213,0,23,0,0,1,3,1,3,6,23,22,55,21,34,39,38,55,19,1,19,54,39,38,7,53,50,23,22,2,54,110,3,12,234,39,27,66,131, + 230,81,95,19,154,253,6,172,39,27,66,131,230,81,95,4,135,254,91,1,126,253,44,96,42,108,35,189,70,82,182,1,218,254,145,2,144,96,42,108, + 35,189,70,82,0,1,0,191,0,0,4,136,6,19,0,7,0,66,64,10,1,2,6,5,3,7,6,0,4,8,16,220,204,23,57,49,0,182,66,3, + 169,7,5,151,1,47,228,212,236,48,75,83,88,64,16,3,17,0,2,17,1,0,1,7,17,4,6,17,5,4,5,7,5,16,236,16,236,7,5,16, + 236,16,236,89,9,1,35,19,33,1,51,3,4,136,254,231,184,226,253,38,1,25,184,226,3,112,252,144,2,198,3,77,253,93,0,0,0,1,0,114, + 254,86,6,96,5,240,0,33,0,0,1,17,35,17,6,7,53,54,33,32,19,18,17,16,3,35,0,17,16,39,6,7,6,21,17,35,54,17,52,63, + 1,2,33,34,2,81,170,205,104,208,1,130,1,217,237,214,246,225,1,4,82,82,95,64,205,2,182,187,208,254,164,48,5,58,253,140,2,73,75,105, + 198,207,254,206,254,236,253,194,254,88,254,146,1,76,1,202,1,209,125,47,77,52,208,253,198,33,2,20,247,143,141,1,4,0,0,0,0,1,0,119, + 254,144,4,150,4,120,0,22,0,0,1,3,35,1,38,39,1,35,1,38,39,38,35,53,32,23,22,19,18,17,35,16,39,3,110,239,185,1,100,14, + 50,254,70,185,2,31,98,46,188,211,1,45,242,224,172,116,168,96,1,52,254,204,1,192,35,77,253,208,2,176,127,33,132,164,216,200,254,80,254,223, + 254,137,1,94,246,0,0,0,0,1,0,115,254,75,7,5,5,213,0,61,0,87,64,28,60,13,1,16,8,0,57,18,58,63,16,53,28,13,0,17, + 43,28,44,34,28,25,30,18,29,25,16,62,16,252,220,236,16,236,212,252,57,212,57,236,236,220,236,16,220,75,83,88,176,9,60,89,93,49,0,64, + 15,9,8,62,43,57,29,129,62,13,38,49,149,21,140,62,16,244,236,50,57,16,244,60,204,16,204,57,48,1,16,7,6,7,6,5,6,7,39,54, + 55,54,55,38,39,38,39,6,7,6,35,34,39,38,17,52,19,54,55,51,6,3,6,21,16,23,22,51,50,55,54,61,1,51,21,20,23,22,51,50, + 55,54,17,52,39,2,39,51,22,23,18,7,5,61,68,219,180,254,236,118,140,97,138,121,205,164,103,68,100,39,39,100,101,146,211,121,123,100,59,93, + 249,84,135,67,72,73,125,114,72,71,199,70,70,116,134,65,71,67,135,84,250,95,56,100,2,224,254,239,203,230,166,136,100,42,23,133,24,48,81,128, + 23,65,94,173,173,94,94,177,180,1,152,201,1,14,159,127,70,254,191,159,183,254,205,107,109,105,104,198,241,241,198,104,105,109,119,1,39,183,159,1, + 65,70,130,156,254,235,0,0,0,1,0,135,254,85,6,39,4,96,0,37,0,83,64,25,16,33,25,22,18,23,39,69,20,18,0,25,2,15,8,16, + 11,18,6,9,18,8,6,69,38,16,252,220,236,16,236,212,252,57,212,57,236,236,220,236,16,220,75,83,88,176,34,60,89,49,0,64,15,34,33,38, + 15,22,8,188,38,0,18,13,135,4,140,38,16,244,236,50,57,16,244,60,196,16,204,57,48,33,36,3,2,33,32,17,52,19,51,2,21,2,23,22, + 3,51,2,55,54,17,52,3,51,18,21,22,7,6,7,6,7,6,7,39,54,55,54,4,136,254,237,30,35,254,242,254,97,135,218,143,1,223,208,5, + 170,3,206,222,143,218,135,1,57,105,197,154,210,107,112,91,81,139,199,1,1,13,254,237,2,58,235,1,64,254,192,240,254,151,1,1,1,212,254,43, + 2,2,1,104,240,1,64,254,192,235,209,132,244,158,123,73,37,16,108,11,43,63,0,0,0,1,0,115,254,86,5,72,5,240,0,29,0,46,64,10, + 15,28,17,12,0,4,28,25,69,30,16,252,236,220,220,60,236,49,0,64,14,0,149,29,140,14,129,30,8,149,21,140,15,189,30,16,236,244,236,16, + 252,244,236,48,1,6,7,6,17,20,23,22,51,50,55,54,25,1,51,17,35,17,6,7,6,35,32,39,38,17,16,19,54,37,2,236,180,96,133,110, + 98,195,196,98,99,217,217,68,104,104,170,255,0,156,162,186,151,1,40,5,74,18,132,185,254,238,249,171,152,152,153,1,11,2,236,248,129,2,144,132, + 64,63,213,221,1,71,1,54,1,8,213,1,0,1,0,113,254,86,4,140,4,123,0,28,0,46,64,10,14,8,16,11,28,4,8,24,69,29,16,252, + 236,220,220,60,236,49,0,64,14,0,135,28,140,13,188,29,7,160,20,140,14,189,29,16,236,244,236,16,252,244,236,48,1,6,7,6,21,20,23,22, + 32,55,54,53,17,51,17,35,17,6,7,6,35,34,39,38,53,52,55,54,51,2,139,154,80,114,94,83,1,76,84,84,184,184,58,88,89,144,218,133, + 137,158,127,253,3,253,14,99,141,208,189,129,116,115,116,203,2,49,249,246,2,82,100,48,49,162,168,248,236,200,162,0,0,1,0,201,254,75,5,226, + 5,213,0,37,0,57,64,14,16,13,12,21,28,39,69,4,29,33,28,32,4,38,16,252,236,50,212,236,236,220,196,75,83,88,177,13,12,16,60,89, + 49,0,64,11,25,149,0,184,30,13,12,189,32,129,30,47,228,252,204,16,244,236,48,1,32,23,22,17,20,7,6,7,6,7,6,7,39,54,55,54, + 55,54,55,54,53,52,39,38,35,34,7,6,21,17,35,17,51,17,54,55,54,3,76,1,39,177,190,60,67,170,195,241,185,73,97,134,125,217,152,136, + 44,54,126,115,205,203,115,113,202,202,78,105,105,4,123,179,194,254,253,204,161,178,128,147,69,53,12,133,22,50,87,122,109,104,127,192,157,150,134,129, + 126,222,254,39,5,213,253,154,135,66,67,0,0,2,0,45,255,227,4,146,4,154,0,23,0,77,0,0,1,38,35,34,7,6,7,6,7,6,21,20, + 23,22,23,22,23,22,51,50,55,54,55,54,37,22,21,20,7,6,33,34,39,38,35,34,7,39,54,51,50,23,22,51,50,55,54,53,52,39,6,7, + 6,7,6,39,38,39,38,39,38,39,38,53,52,55,54,55,54,55,54,51,50,23,54,55,23,6,3,44,127,141,31,55,29,37,29,16,14,12,15,24, + 26,35,32,30,25,71,59,73,36,1,11,108,127,111,254,247,141,99,75,53,65,81,84,135,95,130,82,63,91,157,79,75,49,27,31,70,117,102,71,41, + 72,50,64,48,41,30,29,31,46,62,80,101,94,210,144,56,42,136,55,3,68,152,22,11,33,26,32,27,33,32,21,28,17,20,6,5,25,20,49,24, + 50,192,212,176,156,136,46,35,65,147,76,46,35,94,89,127,140,113,25,23,52,43,38,2,1,10,7,34,26,72,52,66,59,59,61,47,63,34,43,159, + 86,104,80,146,0,1,0,79,254,86,5,11,5,246,0,33,0,0,5,4,33,32,1,0,55,54,53,52,39,38,35,34,7,6,7,35,54,55,54,33, + 32,23,22,21,20,7,0,1,22,51,32,55,4,250,255,0,254,237,254,175,254,185,2,186,179,108,108,99,164,180,94,35,24,240,44,86,163,1,24,1, + 19,161,162,162,254,247,254,24,156,213,1,41,232,236,190,1,163,1,241,219,132,156,141,101,93,146,54,63,161,102,194,144,145,241,216,182,254,242,254,133, + 181,179,0,0,0,1,0,100,254,86,4,106,4,123,0,32,0,0,1,6,35,32,1,0,55,54,53,52,39,38,35,34,7,6,7,35,54,55,54,51, + 50,4,21,20,7,6,1,22,51,50,55,4,92,218,234,254,238,254,222,2,66,167,92,92,84,139,153,80,30,20,204,37,73,139,238,232,1,20,138,175, + 254,47,145,169,253,197,254,239,153,1,121,1,89,194,107,125,111,83,75,117,44,50,129,82,156,232,194,164,156,197,254,224,186,144,0,0,0,2,0,115, + 0,0,5,182,5,239,0,2,0,53,0,0,37,33,9,3,38,39,38,35,34,15,1,53,54,55,54,51,50,23,22,23,9,1,54,55,54,51,50,23, + 22,23,21,39,38,35,34,7,6,7,9,1,22,23,22,59,1,21,33,53,51,50,55,54,1,218,2,110,254,205,254,20,1,128,254,220,19,26,34,63, + 25,22,69,33,32,31,28,114,75,44,47,1,2,1,9,52,39,75,114,29,30,32,33,68,23,24,60,38,19,26,254,210,1,116,6,7,29,69,71,250, + 195,71,72,26,12,170,1,202,254,104,2,61,1,187,29,26,34,4,10,187,11,5,5,67,40,70,254,129,1,127,75,35,67,5,5,11,187,10,4,34, + 17,38,254,69,253,195,9,8,33,170,170,33,15,0,0,0,0,2,0,54,0,0,4,203,4,123,0,2,0,53,0,0,37,33,3,9,1,3,38,39, + 38,35,34,15,1,53,54,55,54,51,50,23,22,23,27,1,54,55,54,51,50,23,22,23,21,39,38,35,34,7,6,7,3,1,22,23,22,59,1,21, + 33,53,51,50,55,54,1,154,1,204,228,254,91,1,57,239,21,17,29,54,21,19,58,28,27,26,24,131,64,37,40,197,197,40,37,64,131,24,26,27, + 28,58,19,21,54,29,17,21,246,1,45,6,5,25,58,73,251,107,73,58,25,5,158,1,56,254,238,1,164,1,61,28,14,25,3,7,141,8,4,4, + 51,30,53,254,250,1,6,53,30,51,4,4,8,141,7,3,25,14,28,254,184,254,103,8,5,25,158,158,25,5,0,0,0,2,0,115,255,227,5,37, + 6,16,0,29,0,43,0,0,1,36,7,6,7,54,55,54,51,50,0,16,0,33,32,39,38,17,16,55,54,33,50,55,54,55,21,6,7,6,18,16, + 38,35,34,7,6,21,20,23,22,51,50,55,3,42,254,214,87,56,22,81,85,123,130,245,1,50,254,206,254,249,254,206,164,163,139,124,1,176,115,149, + 160,75,94,151,108,142,200,186,188,104,105,105,101,191,188,98,5,45,2,115,74,160,86,34,49,254,188,253,240,254,188,156,155,1,80,1,222,210,187,10, + 10,39,177,36,8,6,252,65,1,130,230,115,116,192,189,120,115,115,0,0,0,2,0,113,255,227,4,91,6,16,0,31,0,47,0,0,1,38,7,6, + 7,54,55,54,51,50,23,22,16,7,6,35,34,39,38,17,16,55,54,33,50,55,54,55,21,6,7,6,19,52,39,38,35,34,7,6,21,20,23,22, + 51,50,55,54,2,155,227,73,44,20,41,101,91,120,204,127,128,128,127,219,255,137,136,116,103,1,79,95,92,83,71,93,69,90,168,83,84,146,149,86, + 88,88,84,151,148,82,83,5,55,2,120,74,169,70,54,49,162,162,253,240,162,162,156,155,1,80,1,222,210,187,10,10,39,167,39,5,6,252,248,205, + 114,115,115,116,203,199,120,115,115,116,0,0,0,1,0,44,254,86,4,183,5,213,0,15,0,52,64,13,3,18,0,15,4,28,7,8,18,11,12,7, + 16,16,220,60,220,236,16,252,60,220,236,49,0,64,13,2,9,4,7,149,15,12,188,13,129,5,189,16,16,236,236,244,60,236,50,204,50,48,1,17, + 35,53,33,17,35,17,33,21,35,17,33,17,51,17,4,183,203,254,235,203,254,235,203,1,224,203,4,96,254,242,100,250,160,5,96,100,1,14,1,117, + 254,139,0,0,0,1,0,55,254,85,4,20,5,207,0,15,0,51,64,13,3,8,0,15,4,8,7,8,8,11,12,7,16,16,220,60,220,236,16,252, + 60,220,236,49,0,64,12,2,9,4,7,135,15,12,188,13,5,189,16,16,236,204,244,60,236,50,204,50,48,1,17,35,53,35,17,35,17,35,21,35, + 17,33,17,51,17,4,20,173,229,185,229,173,1,146,185,4,95,255,0,112,250,134,5,122,112,1,0,1,112,254,144,0,0,1,0,112,255,242,4,205, + 4,103,0,51,0,0,1,2,7,6,35,34,53,52,1,54,53,52,39,38,35,34,7,53,54,51,50,23,4,17,20,7,55,18,55,54,51,50,21,20, + 1,6,21,20,23,22,51,50,55,21,6,35,34,39,36,17,52,55,2,40,96,200,55,34,55,1,36,62,14,26,142,57,91,64,91,26,27,1,29,29, + 189,96,200,55,34,55,254,220,62,14,26,142,57,91,64,91,26,27,254,227,29,1,153,254,247,124,34,79,154,1,9,138,122,58,54,104,108,224,48,4, + 37,254,193,91,77,108,1,9,124,34,79,154,254,247,138,122,58,54,104,108,224,48,4,37,1,63,91,77,0,2,0,186,254,86,4,164,4,123,0,24, + 0,36,0,58,64,14,20,38,69,26,18,10,81,17,8,31,18,0,70,37,16,252,236,236,244,178,127,10,1,93,236,236,196,49,0,64,15,19,185,22, + 28,185,6,184,37,34,185,13,140,22,189,37,16,236,244,236,16,244,236,16,236,48,19,52,55,54,55,54,51,50,23,22,16,7,6,35,34,39,38,39, + 18,41,1,21,33,32,17,36,16,39,38,32,7,6,16,23,22,32,55,186,90,54,158,59,182,204,127,128,128,127,204,120,91,89,58,5,1,32,1,244, + 254,28,254,18,3,43,83,84,254,220,84,83,83,84,1,36,84,2,37,208,163,98,94,35,162,162,253,240,162,162,49,48,100,254,88,170,2,218,52,1, + 150,116,115,115,116,254,106,116,115,115,0,0,255,255,0,113,255,227,3,231,4,123,18,6,0,70,0,0,255,255,255,219,254,86,1,121,6,20,18,6, + 0,77,0,0,255,255,0,115,255,227,5,217,5,240,18,6,1,97,0,0,0,1,0,113,255,227,3,216,4,123,0,33,0,0,1,38,39,38,35,34, + 7,6,7,33,21,33,22,23,22,51,50,63,1,21,7,6,35,32,39,38,16,55,54,33,50,23,22,23,3,216,37,37,99,106,183,102,95,18,2,165, + 253,91,18,95,102,183,128,77,74,79,104,107,254,244,156,157,157,156,1,12,101,110,40,39,3,174,13,10,26,99,92,169,144,169,92,99,26,25,167,18, + 22,156,156,2,40,156,156,22,8,12,0,0,0,1,0,196,255,227,4,43,4,123,0,33,0,0,19,53,54,55,54,51,32,23,22,16,7,6,33,34, + 47,1,53,23,22,51,50,55,54,55,33,53,33,38,39,38,35,34,7,6,196,39,40,110,101,1,12,156,157,157,156,254,244,107,104,79,74,77,128,183, + 102,95,18,253,91,2,165,18,95,102,183,106,99,37,3,174,163,12,8,22,156,156,253,216,156,156,22,18,167,25,26,99,92,169,144,169,92,99,26,10, + 255,255,0,201,0,0,4,141,5,213,18,6,0,160,0,0,255,255,0,186,254,86,4,164,6,20,18,6,0,192,0,0,255,255,0,115,255,227,5,39, + 5,240,18,6,0,38,0,0,0,1,0,201,0,0,6,31,5,213,0,12,0,148,64,16,9,8,3,2,1,5,10,6,28,4,62,10,28,0,4,13, + 16,252,236,252,236,17,23,57,49,0,64,12,66,10,7,2,3,8,3,0,175,8,11,5,47,60,196,236,50,17,23,57,48,75,83,88,64,24,3,17, + 7,8,7,2,17,1,2,8,8,7,2,17,3,2,9,10,9,1,17,10,10,9,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,89,178, + 112,14,1,1,93,64,17,4,2,6,7,6,10,54,2,73,7,73,10,89,7,89,10,8,64,21,2,1,13,3,22,8,25,9,38,1,41,3,53,1, + 58,3,69,8,74,9,10,93,0,93,19,33,9,1,33,17,35,17,1,35,1,17,35,201,1,45,1,125,1,127,1,45,197,254,127,203,254,127,196,5, + 213,254,33,1,223,250,43,5,31,254,25,1,231,250,225,0,0,1,0,127,254,86,4,179,4,96,0,12,0,79,64,9,14,70,7,8,4,10,8,0, + 13,16,220,236,220,236,236,49,0,64,13,66,10,7,2,3,9,3,0,188,9,12,189,6,47,236,196,236,50,17,23,57,48,75,83,88,64,18,2,17, + 8,10,9,3,17,7,8,7,2,17,9,1,17,10,10,9,5,7,16,237,16,237,7,16,237,8,16,237,89,19,33,19,1,33,17,35,17,1,35,1, + 17,35,127,1,27,254,1,0,1,27,185,254,236,153,254,235,185,4,96,254,123,1,133,251,160,3,178,254,96,1,160,250,164,0,0,0,0,2,0,85, + 254,86,4,164,4,123,0,27,0,39,0,0,23,17,52,55,54,55,54,51,50,23,22,16,7,6,35,34,39,38,39,17,33,21,33,21,35,53,35,53, + 0,16,39,38,32,7,6,16,23,22,32,55,186,90,61,151,59,182,204,127,128,128,127,204,123,88,89,58,1,229,254,27,185,101,3,144,83,84,254,220, + 84,83,83,84,1,36,84,144,2,181,231,140,102,90,35,162,162,253,240,162,162,49,48,100,254,200,170,112,112,170,1,244,1,150,116,115,115,116,254,106, + 116,115,115,0,255,255,0,115,255,227,5,39,5,240,18,6,1,72,0,0,255,255,0,115,255,227,5,39,5,240,18,38,3,141,0,0,16,7,0,121, + 2,51,0,0,255,255,0,115,255,227,5,39,5,240,16,39,0,121,0,228,0,0,18,6,3,145,0,0,255,255,0,201,0,0,4,139,7,107,18,38, + 3,169,0,0,16,7,22,188,4,238,1,117,255,255,0,201,0,0,4,139,7,78,18,38,3,169,0,0,17,7,22,185,4,157,1,117,0,133,177,146, + 151,66,176,147,176,152,66,177,128,4,66,177,129,0,66,124,176,0,176,1,35,73,176,19,176,14,35,73,97,176,128,98,104,176,19,70,97,176,0,70, + 96,176,146,67,176,1,96,35,66,176,146,67,176,1,96,67,176,0,85,88,176,14,176,146,67,176,1,96,67,56,176,14,17,176,1,53,89,177,128,0, + 66,177,129,0,66,24,176,0,16,176,19,176,14,176,1,35,73,104,59,176,19,17,176,2,53,0,176,0,176,19,35,73,176,64,80,88,176,19,176,64, + 56,176,19,17,176,2,53,176,1,53,89,0,0,1,255,250,254,102,5,172,5,213,0,27,0,52,64,11,5,10,28,27,20,14,22,28,19,17,28,16, + 212,204,252,60,204,220,252,204,49,0,64,15,5,149,4,176,16,14,149,23,16,22,17,149,19,129,16,47,244,236,50,16,212,236,16,244,236,48,37,16, + 6,43,1,53,51,50,54,53,17,52,38,35,33,17,35,17,33,53,33,21,33,17,33,50,22,21,5,172,204,228,76,62,134,111,124,124,254,136,203,254, + 82,4,139,253,238,1,161,186,222,104,254,242,244,170,150,194,1,34,159,158,253,57,5,43,170,170,254,70,233,238,0,0,255,255,0,201,0,0,4,106, + 7,107,18,38,3,167,0,0,16,7,22,186,4,174,1,117,0,1,0,115,255,227,5,39,5,240,0,24,0,78,64,9,26,18,11,0,17,20,25,6, + 25,16,220,236,50,212,60,204,204,49,0,64,23,19,149,18,173,25,12,161,11,174,14,149,9,145,25,0,161,1,174,23,149,3,140,25,16,244,236,244, + 236,16,244,236,244,236,16,244,236,177,18,14,73,177,23,19,73,80,88,179,18,19,64,2,23,56,89,48,1,21,6,33,32,0,17,16,0,33,32,23, + 21,38,33,32,2,7,33,21,33,22,18,33,32,5,39,212,254,245,254,177,254,122,1,134,1,79,1,15,208,211,255,0,254,248,238,22,3,30,252,226, + 22,238,1,8,1,0,1,70,211,144,1,159,1,104,1,103,1,159,142,213,189,254,227,239,170,239,254,228,255,255,0,135,255,227,4,162,5,240,18,6, + 0,54,0,0,255,255,0,201,0,0,1,147,5,213,18,6,0,44,0,0,255,255,0,6,0,0,2,88,7,78,16,6,0,145,0,0,255,255,255,150, + 254,102,1,147,5,213,18,6,0,45,0,0,0,2,0,84,0,0,8,47,5,213,0,20,0,28,0,51,64,12,23,25,16,0,28,27,11,1,28,10, + 6,29,16,212,212,236,212,60,236,220,236,49,0,64,14,27,149,12,173,20,1,149,10,129,28,6,149,5,20,47,60,236,50,244,236,16,252,236,48,1, + 33,21,16,2,5,53,54,18,17,53,33,17,51,50,4,21,20,4,35,33,37,32,17,52,38,43,1,17,4,112,254,27,200,254,145,217,149,3,120,234, + 251,1,16,254,240,251,254,76,1,170,1,64,157,163,224,5,43,184,253,202,253,251,56,170,47,1,166,2,88,254,253,154,218,221,222,218,166,1,17,139, + 135,253,221,0,0,2,0,201,0,0,7,204,5,213,0,18,0,27,0,53,64,14,19,25,15,8,0,28,23,10,7,2,28,5,4,28,16,252,236,50, + 220,60,236,50,220,236,49,0,64,13,23,1,149,11,7,173,9,5,129,24,149,0,4,47,60,236,228,50,252,60,236,50,48,33,17,33,17,35,17,51, + 17,33,17,51,17,51,50,4,21,20,4,35,1,52,38,43,1,17,51,50,54,4,13,253,134,202,202,2,122,202,234,251,1,16,254,240,251,1,54,157, + 163,224,224,161,159,2,199,253,57,5,213,253,156,2,100,253,154,218,222,221,218,1,183,139,135,253,221,135,0,1,255,250,0,0,5,172,5,213,0,19, + 0,44,64,10,6,28,3,16,10,18,28,14,13,20,16,212,204,252,60,204,220,236,49,0,64,11,10,149,19,12,18,13,149,15,129,5,12,47,60,244, + 236,50,16,212,236,48,1,50,22,21,17,35,17,52,38,35,33,17,35,17,33,53,33,21,33,17,4,20,186,222,201,124,124,254,136,203,254,82,4,139, + 253,238,3,113,233,238,254,102,1,138,159,158,253,57,5,43,170,170,254,70,255,255,0,201,0,0,5,134,7,107,18,38,3,174,0,0,16,7,22,186, + 4,238,1,117,255,255,0,201,0,0,5,51,7,107,18,38,3,172,0,0,16,7,22,188,4,229,1,117,255,255,0,35,0,0,4,189,7,109,16,39, + 22,192,4,114,1,117,18,6,3,183,0,0,0,1,0,201,254,191,5,59,5,213,0,11,0,41,64,13,13,4,6,28,7,11,149,9,3,28,2,4, + 12,16,252,236,212,252,212,236,236,49,0,183,11,4,149,6,2,129,9,1,47,60,228,50,236,204,48,41,1,17,51,17,33,17,51,17,33,17,35,2, + 173,254,28,202,2,222,202,254,28,170,5,213,250,213,5,43,250,43,254,191,255,255,0,16,0,0,5,104,5,213,18,6,0,36,0,0,0,2,0,201, + 0,0,4,236,5,213,0,8,0,21,0,46,64,12,23,9,0,25,16,46,4,11,28,21,4,22,16,252,236,50,244,236,196,204,49,0,64,12,11,149, + 21,129,20,4,149,12,173,5,149,20,47,236,244,236,16,244,236,48,1,52,38,35,33,17,33,50,54,19,21,33,17,33,50,4,21,20,4,41,1,17, + 4,23,157,163,254,188,1,68,163,157,108,253,16,1,78,251,1,16,254,249,254,252,253,232,1,183,139,135,253,221,135,4,168,166,254,64,218,222,221,218, + 5,213,0,0,255,255,0,201,0,0,4,236,5,213,18,6,0,37,0,0,0,1,0,201,0,0,4,106,5,213,0,5,0,25,64,12,4,149,1,129, + 0,7,2,4,28,1,4,6,16,252,252,204,196,49,0,47,244,236,48,51,17,33,21,33,17,201,3,161,253,41,5,213,170,250,213,0,0,2,0,101, + 254,191,5,219,5,213,0,7,0,23,0,52,64,15,2,28,14,19,149,25,16,23,3,28,13,20,149,23,24,16,220,236,212,236,16,212,204,252,60,236, + 49,0,64,11,3,149,13,129,18,22,15,0,23,149,20,47,236,50,50,204,50,244,236,48,37,33,17,33,21,16,3,6,5,54,55,18,25,1,33,17, + 51,17,35,17,33,17,35,17,1,211,2,148,254,27,112,23,254,177,134,38,97,3,120,170,170,251,222,170,170,4,129,212,254,13,254,181,68,43,63,120, + 1,52,2,38,1,26,250,213,254,21,1,65,254,191,1,235,255,255,0,201,0,0,4,139,5,213,18,6,0,40,0,0,0,1,0,40,0,0,8,118, + 5,213,0,19,0,152,64,11,8,5,1,4,6,9,1,28,12,0,20,16,220,60,236,50,212,196,17,57,57,49,0,64,17,66,13,12,16,19,8,9, + 5,2,8,18,3,0,175,15,10,6,47,60,60,236,50,50,23,57,48,75,83,88,64,22,7,17,6,8,17,5,9,4,6,5,3,17,4,2,17,5, + 8,9,9,4,9,4,9,7,16,60,60,4,237,16,5,237,7,8,16,237,5,16,237,89,1,64,19,13,1,8,14,1,7,15,1,6,16,1,5,17, + 1,4,18,1,3,0,16,73,58,73,58,73,58,73,58,73,58,73,58,0,64,8,19,2,16,5,13,8,12,9,16,60,16,60,16,60,16,60,1,51, + 17,1,51,9,1,35,9,1,17,35,17,9,1,35,9,1,51,1,3,234,202,2,170,245,253,223,2,68,211,254,19,254,254,202,254,254,254,19,211,2, + 68,253,223,245,2,170,5,213,253,30,2,226,253,179,252,120,3,1,254,233,254,22,1,234,1,23,252,255,3,136,2,77,253,30,0,0,0,1,0,135, + 255,227,4,154,5,240,0,40,0,63,64,12,27,31,25,3,42,22,25,9,37,16,6,41,16,252,50,212,236,204,212,252,204,49,0,64,22,26,149,27, + 12,16,161,15,174,19,149,12,37,161,38,174,34,149,0,145,12,140,41,16,228,244,236,244,236,16,236,244,236,16,212,236,48,1,50,4,21,20,6,7, + 30,1,21,20,4,35,34,36,39,53,30,1,51,50,54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7,53,62,1,2,73,246,1,56,142, + 131,145,163,254,157,238,122,254,228,44,153,169,124,188,208,185,195,204,212,179,158,163,198,134,92,205,113,236,5,240,209,178,124,171,33,31,196,144,230,233, + 66,28,208,89,43,144,149,132,149,166,119,112,115,123,24,77,197,40,34,0,0,1,0,201,0,0,5,51,5,213,0,9,0,121,64,30,3,17,9,9, + 8,8,17,4,4,3,66,8,3,9,6,175,2,5,9,4,7,3,28,0,54,7,28,6,4,10,16,252,236,252,236,17,57,57,49,0,47,60,236,50, + 57,57,48,75,83,88,7,16,4,237,7,16,4,237,89,34,178,31,11,1,1,93,64,48,54,8,56,3,72,8,71,3,105,8,102,3,128,8,7,6, + 4,9,9,21,4,26,9,70,4,73,9,87,4,88,9,101,4,105,9,121,9,133,4,138,9,149,4,154,9,159,11,16,93,0,93,1,17,35,17,1, + 33,17,51,17,1,5,51,196,253,106,254,240,196,2,150,5,213,250,43,4,225,251,31,5,213,251,31,4,225,0,0,0,255,255,0,201,0,0,5,51, + 7,109,18,38,3,172,0,0,17,7,22,192,4,245,1,117,0,35,180,6,10,18,0,7,43,176,10,75,84,176,11,75,84,91,176,16,75,84,91,88, + 187,0,18,0,64,0,10,255,192,56,56,89,49,0,0,0,0,1,0,201,0,0,5,134,5,213,0,11,0,89,64,11,8,5,1,4,6,9,1,28, + 0,4,12,16,252,236,50,212,196,17,57,57,49,0,64,11,66,8,9,5,2,4,3,0,175,10,6,47,60,236,50,23,57,48,75,83,88,64,22,7, + 17,6,8,17,5,9,4,6,5,3,17,4,2,17,5,8,9,9,4,9,4,9,7,16,60,60,4,237,16,5,237,7,8,16,237,5,16,237,89,19, + 51,17,1,33,9,1,35,9,1,17,35,201,202,2,210,1,3,253,191,2,95,220,253,250,254,239,202,5,213,253,30,2,226,253,178,252,121,3,1,254, + 233,254,22,0,0,1,0,84,0,0,5,58,5,213,0,15,0,37,64,10,17,4,10,28,7,11,28,6,1,16,16,212,212,236,212,236,236,49,0,64, + 8,11,149,6,129,1,149,0,9,47,60,236,244,236,48,51,53,54,55,18,17,53,33,17,35,17,33,21,16,3,6,84,217,62,87,3,120,202,254,27, + 102,98,170,47,164,1,2,2,88,254,250,43,5,43,184,253,202,254,248,253,255,255,0,201,0,0,6,31,5,213,18,6,0,48,0,0,255,255,0,201, + 0,0,5,59,5,213,18,6,0,43,0,0,255,255,0,115,255,227,5,217,5,240,18,6,0,50,0,0,0,1,0,201,0,0,5,59,5,213,0,7, + 0,31,64,16,4,149,7,129,2,6,9,4,3,28,0,4,28,7,4,8,16,252,236,212,236,236,49,0,47,60,244,236,48,1,17,35,17,33,17,35, + 17,5,59,202,253,34,202,5,213,250,43,5,43,250,213,5,213,0,0,0,255,255,0,201,0,0,4,141,5,213,18,6,0,51,0,0,255,255,0,115, + 255,227,5,39,5,240,18,6,0,38,0,0,255,255,255,250,0,0,4,233,5,213,18,6,0,55,0,0,0,1,0,35,0,0,4,189,5,213,0,17, + 0,62,180,19,17,6,13,18,16,212,196,212,196,49,0,182,66,16,13,129,6,149,5,47,236,236,50,48,75,83,88,64,18,15,17,0,13,12,16,17, + 17,17,0,15,17,12,14,17,13,13,12,5,7,16,236,16,236,7,16,236,8,16,236,89,37,6,7,6,43,1,53,51,50,55,54,63,1,1,51,9, + 1,51,2,143,21,32,79,251,77,63,119,46,28,18,45,254,33,217,1,115,1,117,217,181,50,38,93,170,27,17,42,106,4,107,252,148,3,108,0,0, + 0,3,0,121,0,0,6,106,5,213,0,6,0,13,0,31,0,61,64,17,33,16,10,25,26,14,0,21,28,29,13,22,3,25,17,16,32,16,252,236, + 212,60,60,252,60,60,212,236,236,49,0,64,14,13,0,149,23,20,21,129,31,7,5,149,29,14,31,47,220,60,236,50,16,244,220,60,236,50,48,1, + 14,1,21,20,22,23,51,62,1,53,52,38,39,3,36,0,17,16,0,37,53,51,21,4,0,17,16,0,5,21,35,3,13,217,230,230,217,203,217,228, + 228,217,203,254,195,254,169,1,87,1,61,203,1,61,1,85,254,171,254,195,203,4,162,20,204,197,197,203,20,20,203,197,197,204,20,252,16,23,1,43, + 1,9,1,9,1,45,23,139,139,23,254,213,254,245,254,247,254,213,23,178,255,255,0,61,0,0,5,59,5,213,18,6,0,59,0,0,0,1,0,201, + 254,191,5,229,5,213,0,11,0,41,64,12,13,9,149,0,6,28,7,3,28,2,4,12,16,252,236,212,236,60,252,204,49,0,64,8,6,2,129,11, + 8,4,149,1,47,236,50,204,244,60,48,41,1,17,51,17,33,17,51,17,51,17,35,5,59,251,142,202,2,222,202,170,170,5,213,250,213,5,43,250, + 213,254,21,0,0,1,0,175,0,0,4,179,5,213,0,15,0,36,64,10,17,4,1,13,28,14,7,28,6,16,16,220,236,212,236,50,236,49,0,183, + 2,149,11,173,13,6,129,0,47,228,50,244,236,48,33,17,33,34,38,53,17,51,17,20,22,51,33,17,51,17,3,232,254,95,186,222,201,124,124,1, + 120,203,2,100,233,238,1,154,254,118,159,158,2,199,250,43,0,1,0,201,0,0,7,197,5,213,0,11,0,42,64,13,13,4,2,28,3,10,28,11, + 7,28,6,4,12,16,252,236,212,252,212,236,236,49,0,64,8,10,2,6,129,0,8,149,5,47,236,50,244,60,60,48,37,33,17,51,17,33,17,51, + 17,33,17,51,4,172,2,79,202,249,4,202,2,79,202,170,5,43,250,43,5,213,250,213,5,43,0,0,0,1,0,201,254,191,8,111,5,213,0,15, + 0,50,64,15,17,13,149,0,10,28,11,6,28,7,3,28,2,4,16,16,252,236,212,252,212,236,60,252,204,49,0,64,10,6,10,2,129,15,12,8, + 4,149,1,47,236,50,50,204,244,60,60,48,41,1,17,51,17,33,17,51,17,33,17,51,17,51,17,35,7,197,249,4,202,2,79,202,2,79,202,170, + 170,5,213,250,213,5,43,250,213,5,43,250,213,254,21,0,0,2,0,60,0,0,6,24,5,213,0,12,0,23,0,42,64,22,2,149,3,129,0,18, + 149,5,173,19,149,0,16,13,25,9,18,4,28,1,3,24,16,204,220,236,50,212,236,204,49,0,47,236,244,236,16,244,236,48,33,17,33,53,33,17, + 33,50,4,21,20,4,35,1,52,39,38,35,33,17,33,50,55,54,1,245,254,71,2,131,1,78,251,1,16,254,240,251,1,54,79,78,163,254,188,1, + 68,161,80,79,5,43,170,253,154,218,222,221,218,1,183,139,68,67,253,221,68,67,0,0,255,255,0,201,0,0,6,70,5,213,16,38,3,192,0,0, + 16,7,0,44,4,179,0,0,0,2,0,201,0,0,4,236,5,213,0,10,0,21,0,36,64,19,5,149,13,173,11,129,6,149,21,23,0,25,17,5, + 12,28,11,4,22,16,252,236,50,212,236,204,49,0,47,236,228,244,236,48,1,52,39,38,35,33,17,33,50,55,54,1,51,17,33,50,4,21,20,4, + 35,33,4,23,79,78,163,254,188,1,68,163,78,79,252,178,202,1,78,251,1,16,254,240,251,253,232,1,183,139,68,67,253,221,68,67,4,168,253,154, + 218,222,221,218,0,1,0,111,255,227,5,35,5,240,0,24,0,78,64,9,26,5,8,25,19,7,0,14,25,16,220,60,204,212,236,50,204,49,0,64, + 23,6,149,7,173,25,13,161,14,174,11,149,16,145,25,0,161,24,174,2,149,22,140,25,16,244,236,244,236,16,244,236,244,236,16,244,236,177,7,11, + 73,177,2,6,73,80,88,179,7,6,64,2,23,56,89,48,19,22,33,32,18,55,33,53,33,38,2,33,32,7,53,54,33,32,0,17,16,0,33,32, + 39,111,211,1,0,1,8,238,22,252,226,3,30,22,238,254,248,255,0,211,208,1,15,1,79,1,134,254,122,254,177,254,245,212,1,70,189,1,28,239, + 170,239,1,29,189,213,142,254,97,254,153,254,152,254,97,144,0,2,0,211,255,227,8,48,5,240,0,15,0,38,0,56,64,31,0,149,20,145,39,8, + 149,28,140,39,33,149,38,173,36,129,35,40,12,25,24,4,25,32,16,33,37,28,36,4,39,16,252,236,50,212,60,236,212,236,204,49,0,47,228,244, + 236,16,244,236,16,244,236,48,1,34,7,6,17,16,23,22,51,50,55,54,17,16,39,38,1,18,55,54,33,32,23,22,17,16,7,6,33,32,39,38, + 3,33,17,35,17,51,17,5,126,220,130,129,129,130,220,220,128,129,129,128,252,115,14,180,180,1,59,1,58,188,188,188,188,254,198,254,197,180,180,14, + 254,208,202,202,5,76,164,164,254,229,254,230,164,164,164,164,1,26,1,27,164,164,253,243,1,24,205,204,210,211,254,158,254,159,210,211,205,205,1,24, + 253,107,5,213,253,106,0,0,0,2,0,136,0,0,4,198,5,213,0,8,0,22,0,64,64,11,24,4,20,5,28,17,0,25,9,13,23,16,212,196, + 236,212,236,50,236,49,0,64,12,66,6,149,16,129,9,21,149,3,173,19,9,47,60,244,236,16,244,236,48,75,83,88,183,21,17,10,22,17,9,10, + 9,5,7,16,236,16,236,89,1,20,22,51,33,17,33,34,6,9,1,38,36,53,52,36,41,1,17,35,17,33,1,1,155,149,146,1,58,254,198,146, + 149,254,237,1,152,100,255,0,1,4,1,2,2,4,202,254,242,254,118,4,39,131,135,2,18,133,251,86,2,141,26,169,215,206,224,250,43,2,119,253, + 137,0,0,0,255,255,0,123,255,227,4,45,4,123,18,6,0,68,0,0,0,2,0,112,255,227,4,127,6,55,0,29,0,41,0,58,64,14,19,20, + 43,69,39,18,3,81,28,33,18,9,69,42,16,252,236,50,244,236,236,212,196,49,0,64,17,22,169,17,151,42,36,185,6,30,185,9,28,0,184,6, + 140,42,16,228,244,57,57,236,16,238,16,244,236,48,1,50,0,17,16,0,35,34,0,3,39,38,53,52,55,54,36,37,54,55,23,6,15,1,6,7, + 6,15,1,54,23,34,6,21,20,22,51,50,54,53,52,38,2,125,240,1,18,254,238,240,241,254,246,7,6,5,58,91,1,59,1,8,122,54,51,49, + 45,250,126,76,199,19,7,130,211,148,172,171,149,147,172,172,4,123,254,200,254,236,254,237,254,199,1,48,1,28,229,119,41,160,118,185,160,2,1,17, + 146,20,1,17,9,44,117,153,56,119,156,231,201,201,231,232,200,199,233,0,0,3,0,186,0,0,4,62,4,96,0,8,0,17,0,32,0,47,64,13, + 14,18,22,34,5,18,28,0,9,8,18,70,33,16,252,236,50,212,236,204,212,236,49,0,64,11,0,169,10,32,9,169,18,188,1,169,32,47,236,244, + 236,16,212,236,48,1,17,33,50,54,53,52,38,35,1,17,51,50,54,53,52,38,35,37,33,50,22,21,20,6,7,30,1,21,20,6,35,33,1,114, + 1,6,126,132,132,126,254,250,242,104,132,132,104,254,86,1,182,197,212,108,106,127,140,231,214,254,57,2,4,254,143,95,90,90,94,1,201,254,202,83, + 74,74,79,147,144,133,103,121,15,24,152,114,150,164,0,0,0,1,0,186,0,0,3,208,4,96,0,5,0,25,182,7,2,4,8,1,70,6,16,252, + 252,220,204,49,0,180,4,169,1,188,0,47,244,236,48,51,17,33,21,33,17,186,3,22,253,163,4,96,147,252,51,0,0,2,0,107,254,229,5,29, + 4,96,0,6,0,22,0,52,64,15,2,8,13,18,169,24,15,22,3,8,12,19,169,22,23,16,220,236,212,236,16,212,196,252,60,236,49,0,64,11, + 3,169,12,188,17,21,14,0,22,169,19,47,236,50,50,204,50,244,236,48,37,33,17,33,21,16,7,5,54,55,54,17,53,33,17,51,17,35,17,33, + 17,35,17,1,187,2,22,254,125,118,254,216,91,40,98,2,245,147,147,252,116,147,147,3,58,140,254,100,220,54,40,85,211,1,169,212,252,51,254,82, + 1,27,254,229,1,174,0,0,255,255,0,113,255,227,4,127,4,123,18,6,0,72,0,0,0,1,0,70,0,0,6,239,4,96,0,19,0,152,64,11, + 8,5,1,4,6,9,1,8,12,0,20,16,220,60,236,50,212,196,17,57,57,49,0,64,17,66,13,12,16,19,8,9,5,2,8,18,3,0,188,15, + 10,6,47,60,60,236,50,50,23,57,48,75,83,88,64,22,7,17,6,8,17,5,9,4,6,5,3,17,4,2,17,5,8,9,9,4,9,4,9,7, + 16,60,60,4,237,16,5,237,7,8,16,237,5,16,237,89,1,64,19,13,1,8,14,1,7,15,1,6,16,1,5,17,1,4,18,1,3,0,16,73, + 58,73,58,73,58,73,58,73,58,73,58,0,64,8,19,2,16,5,13,8,12,9,16,60,16,60,16,60,16,60,1,51,17,1,51,9,1,35,1,7, + 17,35,17,39,1,35,9,1,51,1,3,63,183,1,233,214,254,110,1,204,197,254,135,187,183,187,254,135,197,1,204,254,110,214,1,233,4,96,253,242, + 2,14,254,81,253,79,2,54,201,254,147,1,109,201,253,202,2,177,1,175,253,242,0,0,0,1,0,133,255,227,3,200,4,124,0,40,0,78,64,11, + 25,18,38,42,16,18,3,21,32,10,41,16,220,196,196,212,236,204,212,236,49,0,64,22,32,134,31,136,28,185,35,184,41,20,169,21,41,9,134,10, + 136,13,185,6,140,41,16,244,252,176,12,75,81,88,252,27,244,89,236,16,212,236,16,244,252,176,12,75,81,88,252,27,244,89,236,48,1,30,1,21, + 20,4,35,34,38,39,53,30,1,51,50,54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,6,2,194,124, + 138,254,254,238,80,169,90,71,170,93,151,169,150,137,148,155,116,135,139,119,71,161,97,98,170,76,196,227,120,2,92,24,146,108,173,182,28,28,171,37, + 37,112,90,88,107,152,89,70,64,92,26,29,167,24,24,157,141,93,129,0,0,1,0,186,0,0,4,121,4,96,0,9,0,63,64,21,66,8,3,9, + 6,188,2,5,11,70,9,4,7,3,8,0,7,8,6,70,10,16,252,236,212,236,17,57,57,236,49,0,47,60,228,50,57,57,48,75,83,88,64,10, + 3,17,9,9,8,8,17,4,4,3,7,16,236,7,16,236,89,1,17,35,17,1,35,17,51,17,1,4,121,183,253,228,236,183,2,27,4,96,251,160, + 3,131,252,125,4,96,252,127,3,129,0,0,255,255,0,186,0,0,4,121,6,20,18,38,3,204,0,0,17,7,2,154,0,154,255,204,0,35,180,7, + 10,18,3,7,43,176,14,75,84,176,16,75,84,91,176,21,75,84,91,88,187,0,18,0,64,0,10,255,192,56,56,89,49,0,0,0,0,1,0,186, + 0,0,4,145,4,96,0,11,0,89,64,11,8,5,1,4,6,9,1,8,0,70,12,16,252,236,50,212,196,17,57,57,49,0,64,11,66,8,9,5, + 2,4,3,0,188,10,6,47,60,236,50,23,57,48,75,83,88,64,22,7,17,6,8,17,5,9,4,6,5,3,17,4,2,17,5,8,9,9,4,9, + 4,9,7,16,60,60,4,237,16,5,237,7,8,16,237,5,16,237,89,19,51,17,1,51,9,1,35,1,7,17,35,186,183,2,7,226,254,84,1,227, + 206,254,115,197,183,4,96,253,242,2,14,254,79,253,81,2,53,200,254,147,0,1,0,76,0,0,4,115,4,96,0,15,0,36,64,10,17,70,10,8, + 7,11,8,6,1,16,16,212,212,236,212,236,236,49,0,183,11,169,6,188,1,169,0,9,47,60,236,244,236,48,51,53,54,55,54,17,53,33,17,35, + 17,33,21,16,7,6,76,182,56,68,2,245,184,254,123,88,94,153,28,126,177,1,197,183,251,160,3,205,111,254,80,194,207,0,0,0,0,1,0,186, + 0,0,5,79,4,96,0,12,0,77,64,22,66,10,7,2,3,8,3,0,188,9,6,12,14,70,7,8,4,10,8,0,70,13,16,252,236,220,236,236, + 49,0,47,60,196,236,50,17,23,57,48,75,83,88,64,18,2,17,8,10,9,3,17,7,8,7,2,17,9,1,17,10,10,9,5,7,16,237,16,237, + 7,16,237,8,16,237,89,19,33,9,1,33,17,35,17,1,35,1,17,35,186,1,13,1,62,1,63,1,11,185,254,203,184,254,202,185,4,96,253,18, + 2,238,251,160,3,176,253,39,2,217,252,80,0,1,0,186,0,0,4,129,4,96,0,11,0,39,64,20,9,169,2,4,0,188,7,11,13,70,8,4, + 8,5,9,1,8,0,70,12,16,252,236,50,220,236,50,236,49,0,47,60,228,50,220,236,48,19,51,17,33,17,51,17,35,17,33,17,35,186,185,2, + 85,185,185,253,171,185,4,96,254,55,1,201,251,160,2,4,253,252,0,0,255,255,0,113,255,227,4,117,4,123,18,6,0,82,0,0,0,1,0,186, + 0,0,4,129,4,96,0,7,0,31,64,16,4,169,7,188,2,6,3,8,9,70,0,4,8,7,70,8,16,252,236,212,236,236,49,0,47,60,244,236, + 48,1,17,35,17,33,17,35,17,4,129,185,253,171,185,4,96,251,160,3,205,252,51,4,96,0,0,0,255,255,0,186,254,86,4,164,4,123,18,6, + 0,83,0,0,255,255,0,113,255,227,3,231,4,123,18,6,0,70,0,0,0,1,0,60,0,0,4,109,4,96,0,7,0,28,182,9,1,3,8,6, + 0,8,16,220,212,252,220,204,49,0,181,3,7,169,0,188,5,47,244,236,50,48,19,33,21,33,17,35,17,33,60,4,49,254,66,181,254,66,4,96, + 147,252,51,3,205,0,0,0,255,255,0,61,254,86,4,127,4,96,18,6,0,92,0,0,0,3,0,112,254,86,6,103,5,213,0,10,0,40,0,51, + 0,66,64,17,53,69,41,18,33,12,6,25,8,39,46,26,0,18,18,69,52,16,252,236,212,60,60,252,60,60,212,236,236,49,0,64,18,44,8,185, + 30,21,184,25,151,52,49,3,185,36,15,140,11,189,52,16,236,244,60,236,50,16,228,244,60,236,50,48,1,20,22,51,50,55,17,38,35,34,6,1, + 17,14,1,35,34,2,17,16,18,51,50,22,23,17,51,17,62,1,51,50,18,17,16,2,35,34,38,39,17,1,52,38,35,34,7,17,22,51,50,54, + 1,47,145,123,98,114,114,98,123,145,1,224,57,131,83,167,233,233,167,83,131,57,185,57,131,83,167,233,233,167,83,131,57,1,224,145,123,98,114,114, + 98,123,145,2,47,235,199,168,2,20,168,199,251,60,2,57,94,78,1,53,1,19,1,19,1,61,76,94,2,4,253,252,94,76,254,195,254,237,254,237, + 254,203,78,94,253,199,3,217,235,199,168,253,236,168,199,0,255,255,0,59,0,0,4,121,4,96,18,6,0,91,0,0,0,1,0,186,254,229,5,20, + 4,96,0,11,0,40,64,12,13,9,169,6,8,0,7,3,8,2,70,12,16,252,236,212,60,236,252,204,49,0,183,6,2,188,11,8,4,169,1,47, + 236,50,204,244,60,48,41,1,17,51,17,33,17,51,17,51,17,35,4,129,252,57,185,2,85,185,147,147,4,96,252,51,3,205,252,51,254,82,0,0, + 0,1,0,150,0,0,4,0,4,96,0,17,0,59,64,17,2,169,13,15,7,188,0,19,70,1,15,8,16,8,8,7,18,16,220,236,212,236,50,236, + 49,0,47,228,50,212,236,176,0,176,2,35,73,176,13,176,15,35,73,82,88,177,2,13,184,255,192,176,2,23,56,89,48,33,17,33,34,39,38,53, + 17,51,17,20,23,22,51,33,17,51,17,3,72,254,169,153,102,92,184,52,53,104,1,41,184,1,215,95,86,184,1,28,254,245,117,59,59,1,246,251, + 160,0,0,0,0,1,0,186,0,0,6,152,4,96,0,11,0,41,64,13,13,70,2,8,3,10,8,11,7,8,6,70,12,16,252,236,212,252,212,236, + 236,49,0,183,10,2,6,188,0,8,169,5,47,236,50,244,60,60,48,37,33,17,51,17,33,17,51,17,33,17,51,4,5,1,218,185,250,34,185,1, + 217,185,147,3,205,251,160,4,96,252,51,3,205,0,0,0,0,1,0,186,254,229,7,43,4,96,0,15,0,50,64,15,17,13,169,10,8,0,11,6, + 8,7,3,8,2,70,16,16,252,236,212,252,212,60,236,252,204,49,0,64,10,6,10,2,188,15,12,8,4,169,1,47,236,50,50,204,244,60,60,48, + 41,1,17,51,17,33,17,51,17,33,17,51,17,51,17,35,6,152,250,34,185,1,217,185,1,218,185,147,147,4,96,252,51,3,205,252,51,3,205,252, + 51,254,82,0,0,2,0,62,0,0,5,46,4,96,0,12,0,21,0,44,64,11,23,69,19,18,3,14,11,8,8,10,22,16,196,220,236,50,212,236, + 236,49,0,64,11,8,169,11,188,7,14,169,12,15,169,7,47,236,212,236,16,244,236,48,1,50,22,21,20,6,35,33,17,33,53,33,17,5,33,17, + 33,50,54,53,52,38,3,113,214,231,231,214,254,56,254,149,2,36,1,7,254,249,1,7,126,131,131,2,151,163,168,168,164,3,205,147,254,55,147,254, + 143,95,90,90,94,0,0,0,255,255,0,186,0,0,5,155,4,123,16,39,0,243,4,34,0,0,16,6,3,224,0,0,0,2,0,186,0,0,4,62, + 4,96,0,8,0,19,0,37,64,11,21,69,0,18,15,5,11,8,9,70,20,16,252,236,50,212,236,236,49,0,183,4,169,11,9,188,5,169,19,47, + 236,228,212,236,48,1,52,38,35,33,17,33,50,54,1,51,17,33,50,22,21,20,6,35,33,3,122,131,126,254,250,1,6,126,131,253,64,185,1,14, + 214,231,231,214,254,57,1,76,90,94,254,143,95,3,110,254,55,163,168,168,164,0,0,0,0,1,0,113,255,227,3,231,4,123,0,24,0,77,64,9, + 5,8,18,19,72,7,14,0,25,16,220,60,204,244,236,50,49,0,64,23,14,134,13,136,11,24,134,0,136,2,185,22,7,169,6,187,11,185,16,184, + 22,140,25,16,228,244,236,244,238,16,254,244,238,16,245,238,177,7,11,73,177,2,6,73,80,88,179,7,6,64,2,23,56,89,48,55,22,51,50,54, + 55,33,53,33,46,1,35,34,7,53,54,51,32,0,17,16,0,33,34,39,113,158,157,147,210,19,253,200,2,50,12,159,199,154,161,157,166,1,6,1, + 45,254,219,254,255,189,147,213,86,171,218,147,105,223,86,172,70,254,195,254,241,254,242,254,194,72,0,0,0,2,0,193,255,227,6,76,4,123,0,11, + 0,30,0,58,64,15,32,69,9,18,18,3,18,24,12,25,29,8,28,70,31,16,252,236,50,212,60,236,212,236,236,49,0,64,16,0,185,15,184,27, + 6,185,21,140,27,25,169,30,28,188,27,47,228,212,236,16,244,236,16,244,236,48,1,34,6,21,20,22,51,50,54,53,52,38,1,54,18,51,50,0, + 17,16,0,35,34,0,39,35,17,35,17,51,17,4,74,148,172,171,149,147,172,172,253,113,19,249,240,240,1,18,254,238,240,241,254,249,9,208,184,184, + 3,223,231,201,201,231,232,200,199,233,254,194,190,1,28,254,200,254,236,254,237,254,199,1,46,248,253,247,4,96,254,65,0,2,0,116,0,0,4,34, + 4,96,0,8,0,22,0,60,64,9,20,5,8,17,0,18,9,13,23,16,212,196,236,212,236,50,49,0,64,11,66,6,169,16,188,9,21,169,3,19, + 9,47,60,212,236,16,244,236,48,75,83,88,183,21,17,10,22,17,9,10,9,5,7,16,236,16,236,89,1,20,22,59,1,17,35,34,6,9,1,46, + 1,53,52,54,51,33,17,35,17,35,1,1,122,128,119,248,248,119,128,254,250,1,86,116,154,215,217,1,182,185,229,254,182,3,29,83,94,1,97,92, + 252,143,1,235,26,137,143,162,161,251,160,1,217,254,39,0,255,255,0,113,255,227,4,127,6,107,18,38,3,201,0,0,16,6,0,67,90,5,0,0, + 255,255,0,113,255,227,4,127,6,16,18,38,3,201,0,0,17,7,0,106,0,150,0,0,0,133,177,146,151,66,176,147,176,152,66,177,128,4,66,177, + 129,0,66,124,176,15,176,1,35,73,176,35,176,30,35,73,97,176,128,98,104,176,35,70,97,176,15,70,96,176,146,67,176,1,96,35,66,176,146,67, + 176,1,96,67,176,0,85,88,176,30,176,146,67,176,1,96,67,56,176,30,17,176,2,53,89,177,128,0,66,177,129,0,66,24,176,15,16,176,35,176, + 30,176,1,35,73,104,59,176,35,17,176,3,53,0,176,18,176,35,35,73,176,64,80,88,176,35,176,64,56,176,35,17,176,3,53,176,2,53,89,0, + 0,1,0,47,254,86,4,144,6,20,0,31,0,63,64,15,20,23,8,16,78,8,29,9,5,8,1,3,0,70,32,16,252,60,204,236,50,50,204,244, + 252,204,49,0,64,17,20,169,19,31,8,1,169,7,2,4,26,135,10,13,4,151,30,47,236,212,196,236,16,220,60,236,50,16,212,236,48,19,35,53, + 51,17,51,17,33,21,33,17,62,1,51,50,22,17,20,0,7,53,54,18,53,52,38,35,34,6,21,17,35,223,176,176,185,2,29,253,227,66,178,118, + 182,216,254,169,215,122,245,124,124,154,167,185,3,209,143,1,180,254,76,143,254,109,101,100,233,254,234,226,254,89,41,140,22,1,46,210,208,159,196,158, + 254,251,0,0,255,255,0,186,0,0,3,216,6,109,18,38,3,199,0,0,16,7,0,118,0,134,0,7,0,1,0,113,255,227,3,231,4,123,0,24, + 0,78,64,10,10,11,8,18,16,2,72,22,69,25,16,252,228,50,252,50,204,49,0,64,23,2,134,3,136,5,17,134,16,136,14,185,19,9,169,10, + 187,5,185,0,184,19,140,25,16,228,244,236,244,238,16,254,244,238,16,245,238,177,9,5,73,177,14,10,73,80,88,179,9,10,64,2,23,56,89,48, + 1,50,23,21,38,35,34,6,7,33,21,33,30,1,51,50,55,21,6,35,32,0,17,16,0,2,164,166,157,161,154,199,159,12,2,50,253,200,19,210, + 147,157,158,147,189,254,255,254,219,1,45,4,123,70,172,86,223,105,147,218,171,86,170,72,1,62,1,14,1,15,1,61,255,255,0,111,255,227,3,199, + 4,123,18,6,0,86,0,0,255,255,0,193,0,0,1,121,6,20,18,6,0,76,0,0,255,255,255,244,0,0,2,70,6,16,16,6,0,177,0,0, + 255,255,255,219,254,86,1,121,6,20,18,6,0,77,0,0,0,2,0,76,0,0,6,191,4,96,0,22,0,31,0,54,64,14,33,69,26,18,12,17, + 8,30,7,18,8,6,1,32,16,212,212,236,212,60,236,212,236,236,49,0,64,14,30,169,9,31,169,16,18,169,6,188,1,169,0,16,47,60,236,244, + 236,16,236,212,236,48,51,53,54,55,54,17,53,33,17,51,50,22,21,20,6,35,33,17,33,21,16,7,6,37,50,54,53,52,38,43,1,17,76,182, + 56,68,2,216,171,214,232,231,214,254,155,254,154,88,94,3,120,126,132,132,126,163,153,28,126,177,1,197,183,254,55,163,168,168,164,3,205,111,254,80, + 194,207,118,95,90,90,94,254,143,0,0,0,0,2,0,186,0,0,6,183,4,96,0,18,0,27,0,56,64,16,29,69,22,18,5,10,18,8,26,0, + 11,15,8,13,70,28,16,252,236,50,220,60,236,50,212,236,49,0,64,13,19,169,9,26,11,169,1,16,18,14,188,9,13,47,60,228,50,220,60,236, + 50,16,236,48,1,17,51,50,22,21,20,6,35,33,17,33,17,35,17,51,17,33,17,1,50,54,53,52,38,43,1,17,4,78,171,214,232,231,214,254, + 155,253,222,185,185,2,34,1,92,126,132,132,126,163,4,96,254,55,163,168,168,164,2,4,253,252,4,96,254,55,1,201,252,51,95,90,90,94,254,143, + 0,1,0,47,0,0,4,137,6,20,0,27,0,58,64,15,8,25,19,8,16,78,25,9,5,8,1,3,0,70,28,16,252,60,204,236,50,50,244,236, + 16,204,49,0,64,14,8,1,169,7,2,4,22,135,10,13,4,151,18,26,47,60,236,212,196,236,16,220,60,236,50,48,19,35,53,51,17,51,17,33, + 21,33,17,62,1,51,50,22,21,17,35,17,52,38,35,34,6,21,17,35,223,176,176,185,2,29,253,227,66,179,117,189,202,184,124,124,152,169,185,3, + 209,143,1,180,254,76,143,254,109,101,100,234,237,254,208,1,42,159,158,193,161,254,251,0,255,255,0,186,0,0,4,145,6,109,18,38,3,206,0,0, + 16,6,0,118,111,7,0,0,255,255,0,186,0,0,4,121,6,107,18,38,3,204,0,0,16,6,0,67,93,5,0,0,255,255,0,61,254,86,4,127, + 6,20,18,38,3,215,0,0,16,6,2,154,94,204,0,0,0,1,0,186,254,229,4,129,4,96,0,11,0,41,64,13,13,70,6,8,7,11,169,9, + 3,8,2,70,12,16,252,236,212,252,212,236,236,49,0,183,11,4,169,6,2,188,9,1,47,60,228,50,236,204,48,41,1,17,51,17,33,17,51,17, + 33,17,35,2,84,254,102,185,2,85,185,254,102,147,4,96,252,51,3,205,251,160,254,229,0,1,0,115,255,227,7,5,5,213,0,52,0,56,64,20, + 36,18,37,54,16,32,28,41,22,28,23,13,28,4,9,18,8,4,16,53,16,252,220,236,16,236,212,252,212,236,236,220,236,49,0,64,9,22,36,8, + 129,17,28,149,45,0,47,60,236,50,244,60,204,48,5,34,39,38,17,52,19,54,55,51,6,3,6,21,16,23,22,51,50,55,54,61,1,51,21,20, + 23,22,51,50,55,54,17,52,39,2,39,51,22,23,18,21,16,7,6,35,34,39,38,39,6,7,6,2,58,211,121,123,100,59,93,249,84,135,67,72, + 73,125,114,72,71,199,70,70,116,134,65,71,67,135,84,250,95,56,100,123,123,209,146,101,100,39,39,100,101,29,177,180,1,152,201,1,14,159,127,70, + 254,191,159,183,254,205,107,109,105,104,198,241,241,198,104,105,109,119,1,39,183,159,1,65,70,130,156,254,231,190,254,102,178,177,94,94,173,173,94,94, + 255,255,0,135,255,227,6,39,4,96,16,6,3,93,0,0,0,2,0,30,0,0,5,177,5,213,0,18,0,29,0,58,64,14,31,19,25,5,13,17, + 25,15,0,28,11,9,13,30,16,220,60,204,252,60,60,204,16,212,236,204,49,0,64,15,10,18,149,12,16,14,129,9,24,149,1,173,25,149,9,47, + 236,244,236,16,244,212,60,236,50,48,1,21,33,50,4,21,20,4,35,33,17,33,53,33,53,51,21,33,21,1,52,39,38,35,33,17,33,50,55,54, + 2,88,1,78,251,1,16,254,240,251,253,232,254,144,1,112,202,1,113,1,19,79,78,163,254,188,1,68,163,78,79,4,81,226,218,222,221,218,4,81, + 164,224,224,164,253,102,139,68,67,253,221,68,67,0,0,0,0,2,0,30,0,0,4,231,6,20,0,7,0,25,0,58,64,15,27,69,0,18,23,9, + 17,5,19,15,28,11,9,13,26,16,220,60,204,252,60,60,204,16,212,236,236,49,0,64,14,9,17,169,11,15,13,4,169,19,13,151,5,169,8,47, + 236,228,212,236,16,212,60,236,50,48,36,52,38,35,33,17,33,50,5,17,33,53,33,17,51,17,33,21,33,17,33,50,22,16,6,35,4,35,131,126, + 254,250,1,6,126,253,195,254,187,1,69,185,1,169,254,87,1,14,214,231,231,214,242,180,94,254,143,147,3,205,147,1,180,254,76,147,254,202,163,254, + 176,164,0,0,0,1,0,211,255,227,7,27,5,240,0,43,0,0,1,17,35,17,51,17,51,18,55,54,33,50,23,22,23,21,38,39,38,35,32,7, + 6,7,33,21,33,18,23,22,33,50,55,54,55,21,6,7,6,35,32,39,38,3,1,157,202,202,210,30,157,195,1,83,134,118,119,104,102,115,116,130, + 255,0,136,103,25,2,178,253,70,7,129,137,0,255,130,116,115,102,106,119,118,132,254,173,195,186,9,2,199,253,57,5,213,253,156,1,8,167,208,36, + 35,71,213,95,47,47,156,119,198,170,254,243,148,157,47,47,95,211,72,36,36,207,198,1,79,0,0,0,0,1,0,193,255,227,5,129,4,123,0,35, + 0,0,1,50,23,21,38,35,34,7,6,7,33,21,33,22,23,22,51,50,55,21,6,35,32,39,38,39,35,17,35,17,51,17,51,54,55,54,4,62, + 166,157,161,154,230,92,34,12,1,204,254,44,13,158,85,120,157,158,147,188,254,243,148,123,10,147,184,184,152,23,122,151,4,123,70,172,86,180,65,87, + 143,244,94,51,86,170,72,173,144,228,253,252,4,96,254,51,202,128,158,0,0,2,0,16,0,0,6,248,5,213,0,11,0,14,0,0,33,35,1,33, + 17,35,17,33,1,35,1,51,19,9,1,6,248,225,254,234,254,233,202,254,231,254,234,225,3,2,229,177,254,220,254,220,2,27,253,229,2,27,253,229, + 5,213,252,243,2,55,253,201,0,2,0,51,0,0,6,17,4,96,0,11,0,14,0,0,33,35,3,35,17,35,17,35,3,35,1,51,19,11,1,6, + 17,195,236,227,184,229,236,195,2,142,195,145,243,243,1,149,254,107,1,149,254,107,4,96,253,185,1,161,254,95,0,0,0,2,0,201,0,0,9,20, + 5,213,0,19,0,22,0,0,33,35,1,33,17,35,17,33,1,35,1,33,17,35,17,51,17,33,1,51,19,9,1,9,20,225,254,234,254,233,202,254, + 231,254,234,225,1,111,253,248,202,202,2,95,1,60,229,177,254,220,254,220,2,27,253,229,2,27,253,229,2,199,253,57,5,213,253,156,2,100,252,243, + 2,55,253,201,0,2,0,193,0,0,7,208,4,96,0,19,0,22,0,0,33,35,3,35,17,35,17,35,3,35,1,33,17,35,17,51,17,33,1,51, + 19,11,1,7,208,195,236,227,184,229,236,195,1,28,254,107,184,184,1,233,1,30,195,145,243,243,1,149,254,107,1,149,254,107,1,231,254,25,4,96, + 254,23,1,233,253,185,1,161,254,95,0,0,0,2,0,115,0,0,5,217,5,213,0,23,0,26,0,130,64,20,25,26,14,13,20,28,15,19,14,0, + 7,28,12,8,13,24,0,28,3,27,16,220,236,57,204,220,180,15,8,79,8,2,93,57,236,16,204,220,182,0,19,64,14,64,19,3,93,57,236,17, + 18,57,57,49,0,64,14,66,12,15,17,0,3,25,149,24,13,129,20,8,2,47,60,60,244,57,236,212,60,236,50,48,75,83,88,64,20,24,17,15, + 26,24,25,17,14,15,14,24,17,12,25,24,26,17,13,12,13,7,5,16,237,8,16,237,7,5,16,237,8,16,237,89,178,64,28,1,1,93,1,17, + 35,17,6,7,6,17,35,16,55,54,55,1,33,1,22,23,22,17,35,16,39,38,39,1,33,3,139,202,147,100,130,213,189,120,170,254,81,5,18,254, + 80,164,116,188,213,128,96,248,1,62,253,131,2,89,253,167,2,89,28,126,164,254,229,1,98,210,134,49,2,234,253,19,50,130,210,254,158,1,30,161, + 122,202,2,40,0,2,0,107,0,0,4,123,4,96,0,2,0,26,0,126,64,20,0,1,3,26,9,28,4,8,3,13,20,28,25,21,26,2,13,28, + 16,27,16,220,236,57,204,220,178,128,21,1,93,57,236,16,204,220,178,48,3,1,93,57,236,17,18,57,57,49,0,64,14,66,25,4,17,13,16,0, + 149,2,26,188,9,21,15,47,60,60,244,57,236,212,60,236,50,48,75,83,88,64,20,2,17,4,1,2,0,17,3,4,3,2,17,25,0,2,1,17, + 26,25,26,7,5,16,237,8,16,237,7,5,16,237,8,16,237,89,180,112,28,143,28,2,1,93,1,33,19,9,1,22,23,22,17,35,52,39,38,39, + 17,35,17,6,7,6,21,35,16,55,54,55,1,3,69,254,93,209,2,8,254,187,107,75,137,195,86,58,86,184,83,56,86,194,137,74,108,254,187,3, + 182,254,150,2,20,253,204,38,86,156,254,236,199,116,79,26,254,92,1,162,26,75,116,201,1,20,156,85,39,2,52,0,0,2,0,201,0,0,7,196, + 5,213,0,30,0,33,0,0,9,1,33,1,22,23,22,17,35,16,39,38,39,17,35,17,6,7,6,17,35,16,55,54,55,33,17,35,17,51,17,5, + 1,33,3,239,254,159,5,18,254,80,164,116,188,213,128,96,153,202,147,100,130,213,189,85,110,253,181,202,202,3,132,1,62,253,131,3,113,2,100,253, + 19,50,130,210,254,158,1,30,161,122,32,253,167,2,89,28,126,164,254,229,1,98,210,95,52,253,57,5,213,253,156,110,2,40,0,0,0,2,0,193, + 0,0,6,46,4,96,0,30,0,33,0,0,9,1,33,1,22,23,22,17,35,52,39,38,39,17,35,17,6,7,6,21,35,16,55,54,55,33,17,35, + 17,51,17,1,33,19,3,55,254,231,4,16,254,187,107,75,137,195,86,58,86,184,83,56,86,194,137,27,31,254,146,184,184,3,127,254,93,209,2,119, + 1,233,253,204,38,86,156,254,236,199,116,79,26,254,92,1,162,26,75,116,201,1,20,156,31,24,254,25,4,96,254,23,1,63,254,150,0,1,0,115, + 254,86,4,115,7,122,0,83,0,0,1,20,7,6,35,34,38,35,34,21,20,51,50,55,54,23,22,23,21,38,35,34,6,35,34,39,38,53,52,55, + 54,51,33,50,55,54,53,52,39,38,35,53,50,22,51,50,55,54,53,52,33,34,7,53,54,55,3,51,19,55,54,55,54,55,54,51,50,23,21,39, + 38,35,34,15,1,22,23,22,21,16,5,22,23,22,4,115,115,152,198,68,186,35,96,220,65,128,116,32,98,84,68,116,59,252,60,125,74,163,53,63, + 117,1,95,104,70,65,187,88,249,18,86,23,163,82,117,254,197,165,222,160,129,159,115,160,106,30,15,23,23,35,66,26,35,39,11,15,34,50,90,166, + 98,114,254,239,141,82,85,1,190,207,103,136,8,130,114,12,11,2,7,37,167,39,27,44,97,146,122,81,94,88,82,106,189,55,25,166,2,38,54,141, + 238,74,180,45,13,1,131,254,131,222,64,24,39,18,27,10,87,5,2,111,202,24,87,100,167,254,253,69,30,92,96,0,0,1,0,91,254,116,3,200, + 6,6,0,79,0,0,1,20,7,6,35,34,38,35,34,21,20,23,22,51,50,54,51,50,23,21,38,35,34,6,35,34,39,38,53,16,51,33,50,54, + 53,52,39,38,39,34,35,53,50,23,50,51,32,53,52,39,38,35,34,7,53,54,55,3,51,19,55,54,55,54,51,50,23,21,38,35,34,15,1,4, + 21,20,7,22,23,22,3,200,118,109,162,68,168,25,80,98,33,39,44,178,45,99,88,59,98,49,210,50,105,63,137,196,1,44,90,110,78,60,114,5, + 178,11,33,32,21,1,53,94,72,92,145,184,126,102,159,115,160,106,47,21,43,81,26,35,50,15,34,50,91,1,48,232,111,71,80,1,82,158,94,86, + 8,129,97,27,9,36,39,139,34,23,37,82,151,1,12,96,89,76,56,43,8,152,1,160,81,42,33,55,167,31,11,1,131,254,131,222,99,23,50,10, + 87,7,111,202,47,242,196,50,22,64,73,0,0,1,0,16,0,0,6,193,5,213,0,28,0,0,1,39,38,35,34,7,6,7,1,35,17,35,17,35, + 1,51,1,51,17,51,17,51,19,54,55,54,51,50,23,6,193,58,25,32,37,29,66,60,254,228,250,202,250,254,92,195,1,94,125,202,125,232,78,104, + 66,129,51,56,5,20,7,3,25,56,161,253,10,254,202,1,54,4,96,252,84,3,235,252,19,2,114,212,80,51,16,0,0,1,0,50,254,86,6,208, + 6,30,0,28,0,0,1,39,38,35,34,7,6,7,1,35,17,35,17,35,1,51,1,51,17,51,17,51,19,54,55,54,51,50,23,6,208,58,25,32, + 37,29,66,60,254,228,250,183,250,254,92,195,1,94,125,183,125,232,78,104,66,129,51,56,3,222,7,3,25,56,161,253,10,254,86,1,170,4,96,252, + 84,5,106,250,148,2,114,212,80,51,16,0,255,255,0,115,255,227,5,217,5,240,18,6,1,97,0,0,255,255,0,113,255,227,4,117,4,123,18,6, + 2,55,0,0,0,1,0,16,0,0,6,39,5,240,0,18,0,0,1,50,23,21,39,38,35,34,7,6,7,1,35,1,51,9,1,18,54,5,169,63, + 63,68,22,25,73,34,71,84,254,129,229,253,198,211,1,217,1,56,115,174,5,240,21,187,10,4,34,67,221,252,20,5,213,251,23,3,61,1,50,149, + 0,1,0,50,0,0,5,31,4,123,0,19,0,0,1,50,23,21,39,38,35,34,7,6,7,1,35,1,51,1,19,54,55,54,4,180,51,56,58,19, + 38,37,29,65,61,254,228,250,254,92,195,1,94,232,80,102,66,4,123,16,141,7,3,25,55,162,253,10,4,96,252,84,2,112,213,79,51,0,0,0, + 255,255,0,16,0,0,6,39,7,112,16,39,22,195,4,228,1,122,18,6,4,8,0,0,255,255,0,50,0,0,5,31,6,102,16,39,2,192,4,194, + 0,0,18,6,4,9,0,0,0,3,0,115,254,86,7,179,5,240,0,17,0,30,0,44,0,0,9,1,6,7,6,43,1,53,51,50,55,54,55,19, + 1,51,27,1,1,16,7,2,32,3,38,16,55,18,32,19,22,3,16,39,38,32,7,6,17,16,23,22,32,55,54,7,179,254,20,82,70,74,124,147, + 108,76,42,38,55,124,254,162,195,253,253,253,63,95,126,254,0,127,96,96,127,2,0,126,95,213,28,56,254,152,58,28,29,57,1,104,57,27,4,96, + 251,56,203,58,61,154,36,33,137,1,55,3,107,253,138,2,118,254,138,254,221,208,254,236,1,19,209,2,68,209,1,20,254,237,209,254,222,1,6,114, + 234,234,116,254,251,254,252,116,234,234,114,0,0,3,0,113,254,86,6,255,4,123,0,17,0,31,0,37,0,0,9,1,6,7,6,43,1,53,51,50, + 55,54,55,19,1,51,27,1,0,16,7,6,35,34,39,38,16,55,54,51,50,23,2,16,35,34,16,51,6,255,254,20,82,70,74,124,147,108,76,42, + 38,55,124,254,162,195,253,253,253,117,95,115,204,206,116,96,96,116,206,204,115,100,219,224,224,4,96,251,56,203,58,61,154,36,33,137,1,55,3,107, + 253,138,2,118,254,171,254,72,167,201,200,166,1,188,166,200,201,252,205,3,96,252,160,0,0,2,0,115,255,227,7,45,5,240,0,41,0,82,0,0, + 37,51,50,55,54,53,52,39,38,43,1,6,7,6,7,6,34,39,38,39,38,39,35,34,7,6,21,20,23,22,59,1,54,55,54,55,54,50,23,22, + 23,22,7,35,32,39,38,16,55,54,33,51,54,55,54,55,54,50,23,22,23,22,23,51,32,23,22,17,16,7,6,33,35,6,7,6,7,6,34,39, + 38,39,38,4,93,30,235,114,128,128,114,235,30,11,15,22,27,26,62,26,27,22,16,10,46,235,114,130,130,114,235,46,10,16,22,27,26,62,26,27, + 22,16,254,46,254,161,152,189,189,152,1,95,45,11,16,22,27,26,62,26,31,18,16,11,29,1,94,152,188,188,152,254,162,29,10,17,22,27,26,62, + 26,31,18,16,194,145,164,242,243,164,145,20,14,21,12,11,11,12,21,16,18,145,164,243,242,164,145,18,16,21,12,11,11,12,21,16,161,170,210,2, + 116,211,170,21,15,21,12,11,11,14,19,17,19,170,211,254,198,254,199,210,171,19,17,21,12,11,11,14,19,17,0,0,0,2,0,113,255,227,5,161, + 4,123,0,38,0,80,0,0,37,51,50,55,54,53,52,39,38,43,1,6,7,14,1,34,38,39,38,39,35,34,7,6,21,20,23,22,59,1,54,55, + 62,1,50,23,22,23,22,7,35,32,39,38,53,52,55,54,33,51,54,55,54,55,54,50,23,22,23,22,23,51,32,23,22,21,20,7,6,33,35,6, + 7,6,7,6,34,39,38,39,38,3,114,45,161,72,86,86,63,170,45,7,10,18,44,52,44,18,10,7,45,163,71,86,85,72,163,45,7,10,18,44, + 52,22,27,13,9,201,46,254,255,120,137,137,116,1,5,46,7,9,13,27,22,52,22,27,13,9,7,46,1,2,119,137,137,116,254,251,46,7,9,13, + 27,22,52,22,27,13,9,164,96,116,183,167,131,97,11,10,17,20,20,17,10,11,95,116,184,188,112,95,11,10,17,20,10,12,15,10,147,137,156,238, + 233,162,136,10,10,15,12,10,10,12,15,10,10,136,156,239,232,162,137,10,10,15,12,10,10,12,15,10,255,255,0,118,255,227,8,250,7,116,16,38, + 18,203,0,0,16,39,4,26,6,151,0,0,16,7,4,24,6,48,1,39,255,255,0,152,255,227,7,161,6,16,16,38,18,204,0,0,16,39,4,26, + 5,252,254,156,16,7,4,24,5,149,255,195,255,255,0,115,255,227,7,5,7,51,16,39,23,131,0,99,1,83,16,6,3,244,0,0,255,255,0,135, + 255,227,6,39,5,224,16,38,23,131,0,0,16,6,3,245,0,0,0,0,0,1,0,115,254,86,5,39,5,240,0,29,0,57,64,10,0,28,27,13, + 48,22,25,5,16,30,16,252,236,252,212,180,47,27,63,27,2,93,236,49,0,64,12,14,161,13,174,18,149,9,145,28,26,149,0,47,236,204,244,236, + 244,236,48,180,15,31,31,31,2,1,93,33,35,32,39,38,17,16,55,54,33,50,23,22,23,21,38,39,38,35,32,7,6,17,16,23,22,51,33,17, + 35,3,250,174,254,165,187,195,195,195,1,83,134,118,119,104,102,115,116,130,255,0,136,136,136,152,240,1,107,201,198,208,1,83,1,104,207,208,36,35, + 71,213,95,47,47,156,157,254,216,254,211,130,148,253,176,0,0,1,0,113,254,86,3,231,4,123,0,29,0,57,64,10,29,18,26,12,72,21,18,4, + 69,30,16,252,236,244,212,236,49,0,64,12,12,134,13,136,17,185,8,184,28,25,169,0,47,236,204,244,252,245,238,48,64,11,15,31,16,31,128,31, + 144,31,160,31,5,1,93,33,32,39,38,53,16,55,54,33,50,23,22,23,21,38,39,38,35,34,7,6,21,20,23,22,59,1,17,35,17,2,152,254, + 251,141,149,151,150,1,6,85,81,81,76,78,79,78,80,179,99,99,99,99,179,245,201,150,159,250,1,18,157,157,17,18,35,172,43,22,21,113,114,205, + 185,114,113,253,195,1,170,0,0,1,0,59,255,165,3,202,3,167,0,19,0,0,1,7,39,7,23,7,39,7,39,55,39,55,23,55,39,55,23,55, + 23,7,3,202,100,216,105,216,100,216,125,174,125,216,100,216,105,216,100,216,105,174,105,2,17,174,125,181,125,174,125,216,100,216,125,174,125,181,125,174, + 125,181,100,181,0,1,251,218,4,222,255,66,6,122,0,47,0,0,1,33,20,7,6,7,6,7,6,34,39,38,39,38,39,38,53,52,55,54,55,54, + 55,54,51,33,52,55,54,55,54,55,54,50,23,22,23,22,23,22,21,20,7,6,7,6,7,6,254,185,254,51,10,11,19,20,25,24,56,24,25,20, + 19,11,10,10,11,19,20,25,24,28,1,205,10,11,19,20,25,24,56,24,25,20,20,10,10,10,11,19,20,25,24,5,103,27,25,27,18,19,11,10, + 10,11,19,18,27,25,27,28,25,27,18,19,11,10,27,25,27,18,19,11,10,10,11,19,21,24,25,28,27,25,27,18,19,11,10,0,0,1,253,7, + 5,41,0,9,6,77,0,13,0,0,19,35,38,35,34,7,6,7,53,54,55,54,51,32,9,118,23,162,93,91,147,136,139,74,119,125,1,36,5,41, + 155,47,75,23,134,39,42,67,0,1,253,179,4,194,254,165,6,97,0,8,0,0,1,34,17,53,51,21,35,20,55,254,165,242,241,133,134,4,194,1, + 11,148,158,157,3,0,0,0,0,1,253,179,4,194,254,165,6,97,0,8,0,0,1,16,35,53,22,53,35,53,51,254,165,242,134,133,241,5,205,254, + 245,103,3,157,158,0,0,0,0,1,249,202,4,217,0,9,6,77,0,13,0,0,1,18,33,50,5,4,37,21,36,39,36,39,38,7,249,202,135,1, + 175,114,1,69,1,50,1,32,254,95,239,254,217,102,221,152,5,1,1,76,123,116,1,134,23,92,113,7,12,207,0,0,0,8,247,214,254,144,3,70, + 7,96,0,12,0,25,0,38,0,51,0,64,0,77,0,90,0,103,0,0,1,35,46,1,35,34,6,7,35,62,1,32,22,1,35,46,1,35,34,6, + 7,35,62,1,32,22,5,35,46,1,35,34,6,7,35,62,1,32,22,1,35,46,1,35,34,6,7,35,62,1,32,22,5,35,46,1,35,34,6,7, + 35,62,1,32,22,1,35,46,1,35,34,6,7,35,62,1,32,22,5,35,46,1,35,34,6,7,35,62,1,32,22,1,35,46,1,35,34,6,7,35, + 62,1,32,22,254,199,118,11,97,87,86,96,13,118,10,158,1,34,158,3,56,118,11,97,87,86,96,13,118,10,158,1,34,158,249,174,118,11,97,87, + 86,96,13,118,10,158,1,34,158,6,102,118,11,97,87,86,96,13,118,10,158,1,34,158,249,174,118,11,97,87,86,96,13,118,10,158,1,34,158,7, + 183,118,11,97,87,86,96,13,118,10,158,1,34,158,247,12,118,11,97,87,86,96,13,118,10,158,1,34,158,4,137,118,11,97,87,86,96,13,118,10, + 158,1,34,158,6,65,75,75,74,76,143,144,144,254,81,75,75,74,76,143,144,144,143,75,75,74,76,143,144,144,250,1,75,75,74,76,143,144,144,143, + 75,75,74,76,143,144,144,2,41,75,75,74,76,143,144,144,143,75,75,74,76,143,144,144,251,152,75,75,74,76,143,144,144,0,0,0,0,8,248,88, + 253,195,2,194,8,45,0,5,0,11,0,17,0,23,0,29,0,35,0,41,0,47,0,0,39,55,23,19,7,3,1,7,39,3,55,19,1,39,55,37, + 23,5,1,23,7,5,39,37,1,53,51,5,21,45,1,21,35,37,53,5,1,35,53,19,51,11,1,51,21,3,35,19,107,150,121,111,92,169,251,119, + 150,121,111,92,169,5,31,150,122,1,86,92,254,227,250,76,149,121,254,169,91,1,28,6,96,172,1,64,254,192,248,194,172,254,192,1,64,4,95,211, + 164,129,82,211,211,164,129,82,90,150,121,254,169,92,1,29,5,181,150,121,1,87,92,254,227,254,241,149,122,110,91,169,251,119,150,121,111,92,168,2, + 24,212,164,130,82,212,212,164,130,82,2,223,172,1,64,254,192,248,194,172,254,192,1,64,255,255,0,201,254,86,5,252,7,109,16,38,23,132,0,0, + 16,7,22,192,4,245,1,117,255,255,0,193,254,86,5,56,6,20,16,38,23,133,0,0,16,7,2,154,0,160,255,204,0,2,0,33,0,0,4,236, + 5,213,0,18,0,29,0,58,64,14,31,19,25,5,13,17,25,15,0,28,11,9,13,30,16,220,60,204,252,60,60,204,16,212,236,204,49,0,64,15, + 10,18,149,12,16,14,129,9,24,149,1,173,25,149,9,47,236,244,236,16,244,212,60,236,50,48,1,21,33,50,4,21,20,4,35,33,17,35,53,51, + 53,51,21,51,21,1,52,39,38,35,33,17,33,50,55,54,1,147,1,78,251,1,16,254,240,251,253,232,168,168,202,168,1,220,79,78,163,254,188,1, + 68,163,78,79,4,81,226,218,222,221,218,4,81,164,224,224,164,253,102,139,68,67,253,221,68,67,0,0,0,2,0,38,0,0,4,69,5,158,0,10, + 0,30,0,57,64,15,32,69,0,18,17,22,30,6,12,28,28,24,22,26,31,16,220,60,204,252,60,60,204,16,212,236,236,49,0,64,13,22,30,169, + 24,28,26,5,169,12,26,6,169,21,47,236,196,212,236,16,212,60,236,50,48,1,52,39,38,35,33,17,33,50,55,54,1,17,33,50,23,22,16,7, + 6,35,33,17,35,53,51,17,51,17,51,21,3,129,62,67,128,254,249,1,7,129,66,62,253,248,1,15,208,121,116,116,115,214,254,57,155,155,184,157, + 1,76,94,42,46,254,151,46,43,2,223,254,202,85,82,254,176,82,82,3,209,143,1,62,254,194,143,0,0,2,0,201,0,0,4,225,5,213,0,15, + 0,28,0,0,1,23,7,39,6,43,1,17,35,17,33,50,23,22,21,20,39,54,55,52,38,43,1,17,51,50,55,39,55,4,85,140,106,146,126,214, + 254,202,1,200,251,128,129,226,12,1,154,141,254,254,114,71,215,106,3,35,117,126,123,83,253,168,5,213,113,114,219,146,45,44,57,134,146,253,207,47, + 180,126,0,0,0,2,0,186,254,86,4,164,4,123,0,16,0,41,0,0,37,39,55,23,54,53,52,39,38,32,7,6,16,23,22,51,50,5,23,7, + 39,6,35,34,39,38,39,17,35,17,51,21,54,55,54,51,50,23,22,16,7,6,3,42,140,110,138,79,83,84,254,220,84,83,83,84,146,70,1,27, + 147,111,149,87,108,123,88,89,58,185,185,58,89,88,123,204,127,128,128,12,152,167,93,165,115,197,203,116,115,116,115,254,106,116,115,20,174,93,179,46, + 48,49,100,253,174,6,10,170,100,48,49,162,162,253,240,162,15,0,0,0,0,1,0,201,0,0,4,106,7,7,0,7,0,27,64,13,3,6,149,1, + 129,0,3,4,6,28,1,4,8,16,252,252,220,204,49,0,47,244,236,204,48,51,17,33,17,51,17,33,17,201,2,247,170,253,41,5,213,1,50,254, + 36,250,213,0,0,1,0,186,0,0,3,208,5,154,0,7,0,29,183,9,3,4,6,8,1,70,8,16,252,252,220,204,204,49,0,181,3,6,169,1, + 188,0,47,244,236,204,48,51,17,33,17,51,17,33,17,186,2,131,147,253,162,4,96,1,58,254,51,252,51,0,0,0,0,1,0,71,0,0,4,239, + 5,213,0,13,0,41,64,20,1,12,149,9,4,8,149,5,129,0,15,6,10,12,9,28,2,4,1,14,16,220,60,204,252,60,204,204,196,49,0,47, + 244,252,220,60,236,50,48,33,17,33,53,33,17,33,21,33,17,33,21,33,17,1,78,254,249,1,7,3,161,253,41,2,35,253,221,2,148,170,2,151, + 170,254,19,170,253,108,0,0,0,1,0,56,0,0,4,85,4,96,0,13,0,43,64,10,15,6,10,12,9,8,2,4,1,14,16,220,60,204,252,60, + 204,220,204,49,0,64,10,1,12,169,9,4,8,169,5,188,0,47,244,252,220,60,236,50,48,33,17,33,53,33,17,33,21,33,17,33,21,33,17,1, + 63,254,249,1,7,3,22,253,162,1,160,254,96,1,244,170,1,194,157,254,219,170,254,12,0,1,0,201,254,102,4,204,5,213,0,27,0,51,64,12, + 18,24,28,4,29,12,0,6,28,3,4,28,16,252,252,60,220,204,196,252,204,49,0,64,14,18,149,17,176,2,0,149,7,2,6,149,3,129,2,47, + 244,236,16,212,236,16,244,236,48,1,17,35,17,33,21,33,17,33,50,23,22,21,17,16,6,43,1,53,51,50,55,54,53,17,52,38,35,1,147,202, + 3,161,253,41,1,161,186,113,109,204,228,76,62,134,56,55,124,124,2,199,253,57,5,213,170,254,70,119,114,238,254,206,254,242,244,170,75,75,194,1, + 34,159,158,0,0,1,0,186,254,86,4,11,4,96,0,29,0,51,64,12,19,25,8,4,31,12,0,6,8,3,70,30,16,252,252,60,220,204,196,252, + 204,49,0,64,14,19,169,18,189,1,0,169,7,1,6,169,3,188,1,47,244,236,16,212,236,16,252,236,48,1,17,35,17,33,21,33,17,51,32,23, + 22,21,17,20,7,6,43,1,53,51,50,55,54,53,17,52,39,38,35,1,114,184,3,22,253,162,250,1,7,70,82,82,81,181,193,172,110,33,38,38, + 49,134,1,231,254,25,4,96,170,254,193,71,81,229,254,242,214,96,96,156,48,55,147,1,8,170,32,41,0,1,0,40,254,191,8,145,5,213,0,23, + 0,0,1,51,17,1,51,9,1,51,17,35,17,35,9,1,17,35,17,9,1,35,9,1,51,1,3,234,202,2,170,245,253,223,1,215,136,197,41,254, + 19,254,254,202,254,254,254,19,211,2,68,253,223,245,2,170,5,213,253,30,2,226,253,179,253,34,254,21,1,65,3,1,254,233,254,22,1,234,1,23, + 252,255,3,136,2,77,253,30,0,1,0,70,254,229,7,3,4,96,0,23,0,0,1,51,17,1,51,9,1,51,17,35,17,35,1,7,17,35,17,39, + 1,35,9,1,51,1,3,63,183,1,233,214,254,110,1,102,122,184,33,254,135,187,183,187,254,135,197,1,204,254,110,214,1,233,4,96,253,242,2,14, + 254,81,253,232,254,76,1,27,2,54,201,254,147,1,109,201,253,202,2,177,1,175,253,242,255,255,0,135,254,117,4,154,5,240,16,38,0,122,57,0, + 18,6,3,171,0,0,0,0,255,255,0,133,254,117,3,200,4,124,16,38,0,122,206,0,18,6,3,203,0,0,0,0,0,1,0,201,254,191,5,180, + 5,213,0,15,0,0,19,51,17,1,33,9,1,51,17,35,17,35,9,1,17,35,201,202,2,210,1,3,253,191,1,237,160,197,69,253,250,254,239,202, + 5,213,253,30,2,226,253,178,253,35,254,21,1,65,3,1,254,233,254,22,0,1,0,186,254,229,4,179,4,96,0,15,0,0,19,51,17,1,51,9, + 1,51,17,35,17,35,1,7,17,35,186,183,2,7,226,254,84,1,119,142,184,56,254,115,197,183,4,96,253,242,2,14,254,79,253,234,254,76,1,27, + 2,53,200,254,147,0,0,0,0,1,0,201,0,0,5,134,5,213,0,18,0,0,19,51,17,55,17,51,21,1,33,9,1,35,1,17,35,17,7,17, + 35,201,202,173,100,1,193,1,3,253,191,2,95,220,253,250,100,173,202,5,213,253,30,177,1,84,238,1,203,253,178,252,121,3,1,254,37,1,117,177, + 254,22,0,0,0,1,0,186,0,0,4,145,4,96,0,18,0,0,19,51,17,55,53,51,21,1,51,9,1,35,1,17,35,53,7,17,35,186,183,96, + 101,1,66,226,254,84,1,227,206,254,115,101,96,183,4,96,253,242,97,221,118,1,70,254,79,253,81,2,53,254,197,212,97,254,147,0,0,1,0,33, + 0,0,5,134,5,213,0,19,0,0,19,51,21,51,21,35,17,1,33,9,1,35,9,1,17,35,17,35,53,51,201,202,168,168,2,210,1,3,253,191, + 2,95,220,253,250,254,239,202,168,168,5,213,224,144,254,142,2,226,253,178,252,121,3,1,254,233,254,22,4,101,144,0,0,1,0,61,0,0,4,145, + 6,20,0,19,0,0,19,51,21,33,21,33,17,1,51,9,1,35,1,7,17,35,17,35,53,51,186,183,1,100,254,156,2,7,226,254,84,1,227,206, + 254,115,197,183,125,125,6,20,122,125,253,53,2,14,254,79,253,81,2,53,200,254,147,5,29,125,0,0,0,1,0,50,0,0,6,178,5,213,0,13, + 0,95,64,11,8,5,1,4,6,9,1,28,12,0,14,16,212,220,236,50,212,196,17,57,57,49,0,64,14,66,13,160,0,8,9,5,2,4,3,0, + 175,10,6,47,60,236,50,23,57,16,236,48,75,83,88,64,22,7,17,6,8,17,5,9,4,6,5,3,17,4,2,17,5,8,9,9,4,9,4,9, + 7,16,60,60,4,237,16,5,237,7,8,16,237,5,16,237,89,19,33,17,1,33,9,1,35,9,1,17,35,17,33,50,2,141,2,210,1,3,253,191, + 2,95,220,253,250,254,239,202,254,61,5,213,253,30,2,226,253,178,252,121,3,1,254,233,254,22,5,43,0,1,0,42,0,0,5,130,4,96,0,13, + 0,95,64,11,8,5,1,4,6,9,1,8,11,0,14,16,212,220,236,50,212,196,17,57,57,49,0,64,14,66,13,160,0,8,9,5,2,4,3,0, + 188,10,6,47,60,236,50,23,57,16,236,48,75,83,88,64,22,7,17,6,8,17,5,9,4,6,5,3,17,4,2,17,5,8,9,9,4,9,4,9, + 7,16,60,60,4,237,16,5,237,7,8,16,237,5,16,237,89,19,33,17,1,51,9,1,35,1,7,17,35,17,33,42,2,56,2,7,226,254,84,1, + 227,206,254,115,197,183,254,127,4,96,253,242,2,14,254,79,253,81,2,53,200,254,147,3,198,0,0,0,0,1,0,201,254,191,6,4,5,213,0,15, + 0,54,64,26,12,149,2,173,4,0,129,6,149,9,14,10,7,149,10,11,3,28,5,56,13,1,28,0,4,16,16,252,236,50,252,236,50,60,236,49, + 0,47,60,204,236,228,50,252,236,48,178,80,17,1,1,93,19,51,17,33,17,51,17,51,17,35,17,35,17,33,17,35,201,202,2,222,202,201,201,202, + 253,34,202,5,213,253,156,2,100,250,213,254,21,1,65,2,199,253,57,0,0,1,0,193,254,229,5,64,4,96,0,15,0,49,64,26,13,169,2,4, + 0,188,6,169,9,11,15,17,70,12,4,8,7,169,10,5,13,1,8,0,70,16,16,252,236,50,220,60,236,236,50,236,49,0,47,60,204,236,228,50, + 220,236,48,19,51,17,33,17,51,17,51,17,35,17,35,17,33,17,35,193,184,2,87,184,184,184,184,253,169,184,4,96,254,51,1,205,252,57,254,76, + 1,27,2,4,253,252,0,0,0,1,0,201,0,0,8,18,5,213,0,13,0,45,64,24,6,149,4,10,149,2,173,4,0,129,12,8,5,9,3,28, + 7,56,11,1,28,0,4,14,16,252,236,50,252,236,50,196,49,0,47,60,228,50,252,236,16,236,48,19,51,17,33,17,33,21,33,17,35,17,33,17, + 35,201,202,2,222,3,161,253,41,202,253,34,202,5,213,253,156,2,100,170,250,213,2,199,253,57,0,0,0,1,0,193,0,0,6,230,4,96,0,13, + 0,43,64,22,6,169,4,11,169,2,4,0,188,9,13,5,10,4,8,7,11,1,8,0,70,14,16,252,236,50,220,236,50,196,49,0,47,60,228,50, + 220,236,16,236,48,19,51,17,33,17,33,21,33,17,35,17,33,17,35,193,184,2,87,3,22,253,162,184,253,169,184,4,96,254,51,1,205,170,252,74, + 2,4,253,252,0,1,0,201,254,102,8,116,5,213,0,29,0,56,64,14,31,15,28,19,26,3,28,0,8,4,28,7,4,30,16,252,236,212,60,236, + 220,204,252,204,49,0,64,15,29,149,10,173,2,3,149,7,129,6,19,149,20,6,2,47,60,220,236,16,244,236,16,244,236,48,1,17,35,17,33,17, + 35,17,33,17,33,50,23,22,21,17,16,6,43,1,53,51,50,55,54,53,17,52,38,35,5,59,202,253,34,202,4,114,1,161,186,113,109,204,228,76, + 62,134,56,55,124,124,2,199,253,57,5,43,250,213,5,213,253,156,119,114,238,254,206,254,242,244,170,75,75,194,1,34,159,158,0,0,0,1,0,193, + 254,86,7,33,4,96,0,31,0,51,64,14,33,15,8,20,27,3,8,0,8,4,8,7,70,32,16,252,236,212,60,236,220,204,252,204,49,0,64,11, + 31,9,3,169,7,188,2,19,21,2,6,47,60,220,204,16,244,236,220,204,48,1,17,35,17,33,17,35,17,33,17,51,32,23,22,21,17,20,7,6, + 43,1,53,51,50,55,54,53,17,52,39,38,7,4,136,184,253,169,184,3,199,250,1,7,70,82,82,81,181,193,172,110,33,38,38,49,134,1,231,254, + 25,3,198,252,58,4,96,254,23,71,81,229,254,242,214,96,96,156,48,55,147,1,8,164,38,46,5,0,0,2,0,115,255,227,6,247,5,241,0,65, + 0,89,0,0,37,46,3,53,52,62,4,51,50,30,4,21,20,14,2,7,30,1,51,50,54,55,21,14,1,35,34,46,2,39,14,1,35,34,36,38, + 2,53,52,18,62,1,55,21,14,3,21,20,30,2,51,50,54,55,62,3,53,52,46,4,35,34,14,4,21,20,30,2,4,43,57,108,82,50,19,42, + 68,97,129,83,78,125,97,70,45,21,26,63,106,81,38,104,59,62,101,51,46,120,61,38,81,85,87,43,66,195,121,170,254,244,188,99,91,172,247,157, + 115,171,112,56,60,123,190,129,82,128,177,63,83,48,20,11,23,36,48,62,38,49,72,51,33,18,7,40,66,84,174,49,137,170,196,107,66,138,131,116, + 87,50,50,84,112,123,127,58,83,180,178,170,74,26,21,19,26,168,23,18,8,20,35,27,38,52,116,207,1,29,168,160,1,16,203,125,14,167,22,102, + 154,205,124,125,222,167,98,25,109,58,134,142,145,69,47,102,99,89,67,40,43,71,91,96,95,38,98,171,142,110,0,0,0,2,0,113,255,227,5,120, + 4,122,0,63,0,80,0,0,19,52,62,2,55,21,14,3,21,20,30,2,51,50,54,55,46,3,53,52,62,2,51,50,30,2,21,20,6,7,30,1, + 51,50,62,2,55,21,14,3,35,34,38,39,14,3,35,34,46,2,5,62,3,53,52,46,2,35,34,14,2,21,20,113,75,143,209,134,93,138,91,45, + 50,96,138,88,39,86,28,36,63,47,27,40,80,116,77,66,112,80,45,92,95,35,68,30,27,45,41,42,24,17,37,45,56,37,55,130,67,30,70,73, + 71,31,135,212,145,76,3,86,34,45,26,11,22,33,40,18,26,44,33,19,2,40,131,216,156,88,3,155,6,70,114,152,88,98,160,114,62,11,17,37, + 103,120,130,64,93,159,115,65,57,104,146,89,155,241,94,19,10,4,10,19,15,157,10,17,12,7,28,44,18,27,18,9,84,153,214,184,38,94,100,99, + 43,75,105,66,31,38,72,105,67,247,0,0,255,255,0,115,254,117,5,39,5,240,16,39,0,122,1,45,0,0,18,6,3,181,0,0,255,255,0,113, + 254,117,3,231,4,123,16,39,0,122,0,143,0,0,18,6,3,213,0,0,0,1,255,250,254,191,4,233,5,213,0,11,0,44,64,13,13,10,64,1, + 28,4,11,28,8,64,5,8,12,16,196,220,236,252,60,236,252,196,49,0,64,9,10,6,149,9,129,1,149,3,5,47,204,236,244,236,50,48,37,51, + 17,35,17,35,17,33,53,33,21,33,2,215,201,201,203,253,238,4,239,253,238,170,254,21,1,65,5,43,170,170,0,0,0,1,0,60,254,229,4,109, + 4,96,0,11,0,40,64,10,13,9,1,8,4,11,8,6,8,12,16,220,220,252,60,236,220,204,49,0,64,9,11,7,169,8,188,0,169,3,5,47, + 204,236,244,236,50,48,37,51,17,35,17,35,17,33,53,33,21,33,2,175,184,184,181,254,66,4,49,254,66,153,254,76,1,27,3,182,170,170,0,0, + 255,255,255,252,0,0,4,231,5,213,18,6,0,60,0,0,0,1,0,61,254,86,4,127,4,96,0,8,0,111,64,16,4,8,188,2,9,6,3,0, + 8,3,4,0,8,3,4,9,16,212,75,176,10,84,75,176,8,84,91,88,185,0,11,0,64,56,89,75,176,20,84,88,185,0,11,255,192,56,89,212, + 252,73,58,17,18,57,49,0,16,204,228,50,48,64,25,7,17,8,0,8,6,17,5,6,0,8,0,6,17,6,7,3,3,4,5,17,4,4,3,66, + 75,83,88,7,16,5,237,7,16,8,237,7,16,8,237,7,16,5,237,89,34,37,17,35,17,1,51,9,1,51,2,197,195,254,59,195,1,94,1,94, + 195,18,254,68,1,188,4,78,252,148,3,108,0,1,255,252,0,0,4,231,5,213,0,16,0,0,1,33,17,35,17,33,53,33,53,1,51,9,1,51, + 1,21,33,3,223,254,248,203,254,249,1,7,253,240,217,1,158,1,155,217,253,240,1,8,1,115,254,141,1,115,170,170,3,14,253,154,2,102,252,242, + 170,0,0,0,0,1,0,61,254,86,4,127,4,96,0,16,0,0,9,1,21,33,21,33,21,35,53,33,53,33,53,1,51,9,1,4,127,254,70,1, + 6,254,250,195,254,239,1,17,254,59,195,1,94,1,94,4,96,251,178,88,170,186,186,170,88,4,78,252,148,3,108,0,0,1,0,61,254,191,5,59, + 5,213,0,15,0,0,37,51,17,35,17,35,9,1,35,9,1,51,9,1,51,1,4,203,112,197,20,254,92,254,89,218,2,21,254,47,217,1,115,1, + 117,217,254,32,170,254,21,1,65,2,123,253,133,3,29,2,184,253,213,2,43,253,51,0,0,1,0,59,254,229,4,121,4,96,0,15,0,0,37,51, + 17,35,17,35,9,1,35,9,1,51,9,1,51,1,4,8,113,184,33,254,186,254,186,217,1,179,254,114,217,1,41,1,41,217,254,107,153,254,76,1, + 27,1,184,254,72,2,74,2,22,254,113,1,143,253,223,0,0,1,255,250,254,191,7,71,5,213,0,15,0,53,64,16,17,5,149,8,2,28,3,10, + 13,64,15,28,12,64,10,16,16,212,228,252,228,16,212,236,60,252,204,49,0,64,11,15,10,149,2,12,129,7,4,0,149,9,47,236,50,204,244,60, + 236,50,48,37,33,17,51,17,51,17,35,17,33,17,33,53,33,21,33,2,214,2,222,202,201,201,251,142,253,238,4,239,253,238,170,5,43,250,213,254, + 21,1,65,5,43,170,170,0,0,1,0,5,254,229,6,66,4,96,0,15,0,51,64,14,17,5,169,2,8,8,3,10,13,15,8,12,10,16,16,220, + 196,252,196,16,212,60,236,252,204,49,0,64,11,15,11,169,2,12,188,7,4,0,169,9,47,236,50,204,244,60,236,50,48,37,33,17,51,17,51,17, + 35,17,33,17,33,53,33,21,33,2,120,2,90,184,184,184,252,57,254,66,4,49,254,66,153,3,199,252,57,254,76,1,27,3,182,170,170,0,0,0, + 0,1,0,175,254,191,5,124,5,213,0,20,0,46,64,12,1,22,4,6,19,28,4,20,13,28,12,21,16,220,236,212,60,236,50,236,50,49,0,64, + 11,7,149,17,173,19,12,129,0,149,3,5,47,204,236,228,50,244,236,48,37,51,17,35,17,35,17,33,34,39,38,53,17,51,17,20,22,51,33,17, + 51,4,179,201,201,203,254,95,186,113,109,201,124,124,1,120,203,170,254,21,1,65,2,199,119,114,238,1,55,254,217,159,158,2,100,0,0,1,0,150, + 254,229,4,184,4,96,0,21,0,70,64,12,1,23,70,6,20,8,4,21,13,8,12,22,16,220,236,212,60,236,50,236,50,49,0,64,10,7,169,18, + 20,12,188,0,169,3,5,47,204,236,228,50,212,236,176,5,176,7,35,73,176,18,176,20,35,73,82,88,177,7,18,184,255,192,176,2,23,56,89,48, + 37,51,17,35,17,35,17,33,34,39,38,61,1,51,21,20,23,22,51,33,17,51,4,0,184,184,184,254,169,153,102,92,184,52,53,104,1,41,184,153, + 254,76,1,27,2,9,95,86,184,234,211,117,59,59,1,190,0,1,0,175,0,0,4,179,5,213,0,24,0,0,1,35,34,39,38,53,17,51,17,20, + 22,59,1,17,51,17,51,17,51,17,35,17,35,17,35,2,130,59,186,113,109,201,124,124,18,144,214,203,203,214,144,2,199,119,114,238,1,55,254,217, + 159,158,1,57,254,199,2,100,250,43,2,199,254,207,0,0,0,1,0,150,0,0,4,0,4,96,0,24,0,0,1,53,51,21,51,17,51,17,35,17, + 35,21,35,53,35,34,39,38,61,1,51,21,20,23,22,1,249,160,175,184,184,175,160,8,153,102,92,184,52,43,2,164,194,196,1,190,251,160,2,9, + 196,196,95,86,184,234,211,117,59,48,0,0,0,1,0,175,0,0,4,179,5,213,0,15,0,36,64,10,17,8,28,6,12,0,28,15,4,16,16,252, + 236,50,212,236,204,49,0,183,2,149,11,173,15,129,7,14,47,60,244,244,236,48,1,17,33,50,22,21,17,35,17,52,38,35,33,17,35,17,1,122, + 1,161,186,222,201,124,124,254,136,203,5,213,253,156,233,238,254,102,1,138,159,158,253,57,5,213,0,0,255,255,0,186,0,0,4,100,6,20,18,6, + 0,75,0,0,0,2,0,20,255,227,7,20,5,240,0,34,0,42,0,73,64,17,35,36,9,15,36,25,8,51,9,25,24,30,18,29,0,24,43,16, + 220,50,220,236,16,236,244,236,196,17,18,57,49,0,64,22,16,161,15,174,12,30,24,8,149,0,36,173,12,149,20,40,149,4,145,20,140,43,16,228, + 244,236,16,236,244,60,236,50,204,16,244,236,48,1,18,55,54,33,32,23,22,19,33,16,0,33,50,54,55,21,6,7,6,35,32,39,38,3,6,39, + 38,61,1,51,21,20,23,22,37,33,38,39,38,32,7,6,1,178,34,150,188,1,58,1,67,181,187,1,251,112,1,18,1,18,139,252,112,111,131,132, + 146,254,162,197,188,10,170,118,122,170,75,66,1,64,3,173,24,98,130,254,72,128,97,3,109,1,10,167,210,210,219,254,132,254,244,254,206,96,95,215, + 70,36,36,205,194,1,85,1,103,107,223,76,62,160,65,57,2,191,124,164,164,124,0,0,0,2,0,15,255,227,5,102,4,123,0,37,0,46,0,105, + 64,17,46,38,21,29,38,8,19,75,0,6,18,5,21,18,11,0,47,16,220,50,236,220,64,11,0,5,112,48,127,5,176,48,207,48,5,93,236,16, + 244,236,196,17,18,57,49,0,64,26,19,38,20,30,134,29,136,25,6,11,38,169,20,25,185,34,0,20,187,42,185,15,184,34,140,47,16,228,244,236, + 228,178,111,20,1,93,50,16,236,16,252,60,204,16,244,178,47,29,1,93,236,17,18,57,48,1,34,39,38,61,1,51,21,20,23,22,51,54,55,54, + 33,50,23,22,29,1,33,22,23,22,51,50,55,54,55,21,6,7,6,35,32,39,38,1,38,39,38,35,34,7,6,7,1,88,144,89,96,156,48,57, + 74,26,116,146,0,255,226,131,132,252,178,12,102,103,183,106,100,99,98,104,99,110,101,254,243,156,148,3,78,2,82,83,136,154,93,92,14,2,4,82, + 90,172,70,49,151,33,38,197,130,161,145,146,250,90,190,100,99,26,26,52,174,44,20,22,156,148,1,129,151,90,90,87,87,158,0,0,0,2,0,20, + 254,135,7,20,5,240,0,7,0,45,0,0,1,33,38,39,38,32,7,6,7,18,55,54,33,32,23,22,19,33,16,0,33,50,54,55,21,6,7,6, + 7,17,35,17,36,39,38,3,6,39,38,61,1,51,21,20,23,22,2,139,3,173,24,98,130,254,72,128,97,241,34,150,188,1,58,1,67,181,187,1, + 251,112,1,18,1,18,139,252,112,111,131,109,119,178,254,253,160,188,10,170,118,122,170,75,66,3,109,191,124,164,164,124,191,1,10,167,210,210,219,254, + 132,254,244,254,206,96,95,215,70,36,30,5,254,163,1,99,32,166,195,1,84,1,103,107,223,76,62,160,65,57,0,0,0,2,0,15,254,183,5,102, + 4,123,0,8,0,49,0,0,1,38,39,38,35,34,7,6,15,1,34,39,38,61,1,51,21,20,23,22,51,54,55,54,33,50,23,22,29,1,33,22, + 23,22,51,50,55,54,55,21,6,7,6,7,17,35,17,38,39,38,4,174,2,82,83,136,154,93,92,14,198,144,89,96,156,48,57,74,26,116,146,0, + 255,226,131,132,252,178,12,102,103,183,106,100,99,98,104,99,79,74,166,194,123,148,2,148,151,90,90,87,87,158,143,82,90,172,70,49,151,33,38,197, + 130,161,145,146,250,90,190,100,99,26,26,52,174,44,20,16,4,254,210,1,51,26,123,148,255,255,0,201,0,0,1,147,5,213,18,6,0,44,0,0, + 255,255,0,40,0,0,8,118,7,109,16,39,22,192,6,91,1,117,18,6,3,170,0,0,255,255,0,70,0,0,6,239,6,72,16,39,2,154,1,168, + 0,0,18,6,3,202,0,0,0,1,0,201,254,102,5,53,5,213,0,28,0,0,1,51,50,23,22,21,17,16,6,43,1,53,51,50,55,54,53,17, + 52,38,35,33,17,35,17,51,17,1,33,2,169,139,186,113,109,204,228,76,62,134,56,55,124,124,254,136,202,202,2,158,1,4,3,113,119,114,238,254, + 206,254,242,244,170,75,75,194,1,34,159,158,253,57,5,213,253,137,2,119,0,1,0,191,254,86,4,136,4,96,0,30,0,0,1,51,32,23,22,21, + 17,20,7,6,43,1,53,51,50,55,54,53,17,52,39,38,35,33,17,35,17,51,17,1,51,2,94,20,1,5,72,82,82,81,181,193,172,110,33,38, + 38,44,139,254,252,185,185,2,37,235,2,119,71,81,229,254,242,214,96,96,156,48,55,147,1,8,166,36,41,254,25,4,96,254,29,1,227,0,0,0, + 0,1,0,54,254,86,6,3,5,213,0,20,0,0,33,35,17,33,21,16,3,6,5,53,54,55,18,25,1,33,17,51,21,1,35,5,58,202,254,27, + 132,98,254,145,212,67,117,3,120,201,254,146,134,5,43,212,254,24,254,170,253,56,167,46,168,1,37,2,53,1,26,250,213,170,254,86,0,1,0,46, + 254,86,5,43,4,96,0,20,0,0,37,51,21,1,35,19,35,17,33,21,16,3,6,5,53,54,55,54,17,53,33,4,115,184,254,222,123,229,184,254, + 123,118,94,254,204,179,59,98,2,245,153,153,254,86,1,170,3,199,134,254,146,254,252,207,29,153,27,127,207,1,167,212,0,1,0,201,254,102,5,59, + 5,213,0,20,0,49,64,14,15,8,0,28,22,4,10,56,7,3,28,5,4,21,16,252,236,50,252,236,252,60,204,49,0,64,11,14,16,4,2,149, + 8,173,9,6,129,4,47,228,50,252,236,16,220,204,48,37,17,33,17,35,17,51,17,33,17,51,17,16,6,43,1,53,51,50,55,54,4,113,253,34, + 202,202,2,222,202,206,227,76,62,134,56,55,104,2,95,253,57,5,213,253,156,2,100,250,147,254,242,244,170,75,75,0,0,1,0,193,254,86,4,136, + 4,96,0,21,0,47,64,13,16,8,0,8,23,70,10,7,3,8,5,70,22,16,252,236,50,220,236,252,60,204,49,0,64,10,15,17,4,2,169,8, + 9,6,188,4,47,244,60,220,236,16,220,204,48,5,17,33,17,35,17,51,17,33,17,51,17,20,7,6,43,1,53,51,50,55,54,3,208,253,169,184, + 184,2,87,184,82,81,181,193,172,110,33,38,20,2,24,253,252,4,96,254,51,1,205,251,140,214,96,96,156,48,55,0,0,1,0,201,254,86,6,4, + 5,213,0,16,0,0,33,35,17,33,17,35,17,51,17,33,17,51,17,51,21,1,35,5,59,202,253,34,202,202,2,222,202,201,254,146,134,2,199,253, + 57,5,213,253,156,2,100,250,213,170,254,86,0,1,0,193,254,86,5,64,4,96,0,16,0,0,33,35,17,33,17,35,17,51,17,33,17,51,17,51, + 21,1,35,4,136,184,253,169,184,184,2,87,184,184,254,222,123,2,4,253,252,4,96,254,51,1,205,252,57,153,254,86,0,1,0,175,254,191,4,179, + 5,213,0,20,0,47,64,13,20,28,17,1,14,28,22,4,15,8,28,7,21,16,220,236,212,236,252,50,50,236,49,0,64,11,2,149,12,173,14,7, + 129,0,149,19,17,47,204,236,228,50,244,236,48,37,17,33,34,39,38,53,17,51,17,20,22,51,33,17,51,17,35,17,35,17,3,232,254,95,186,113, + 109,201,124,124,1,120,203,203,201,170,2,29,119,114,238,1,55,254,217,159,158,2,100,250,43,254,191,1,235,0,0,0,0,1,0,150,254,229,4,0, + 4,96,0,21,0,71,64,13,21,8,18,1,15,8,23,70,16,8,8,7,22,16,220,236,212,236,252,50,50,236,49,0,64,10,2,169,13,15,7,188, + 0,169,20,18,47,204,236,228,50,212,236,176,18,176,2,35,73,176,13,176,15,35,73,82,88,177,2,13,184,255,192,176,2,23,56,89,48,37,17,33, + 34,39,38,61,1,51,21,20,23,22,51,33,17,51,17,35,17,35,17,3,72,254,169,153,102,92,184,52,53,104,1,41,184,184,184,153,1,112,95,86, + 184,234,211,117,59,59,1,190,251,160,254,229,1,180,0,0,0,1,0,201,254,86,6,232,5,213,0,17,0,0,37,51,21,1,35,1,35,17,1,35, + 1,17,35,17,33,9,1,33,6,31,201,254,146,134,1,43,197,254,127,203,254,127,196,1,45,1,125,1,127,1,45,170,170,254,86,1,170,5,31,252, + 0,4,0,250,225,5,213,252,8,3,248,0,0,1,0,193,254,86,6,0,4,96,0,17,0,0,37,51,21,1,35,19,35,17,1,35,1,17,35,17, + 33,9,1,33,5,72,184,254,222,123,229,178,254,203,184,254,202,178,1,6,1,62,1,63,1,4,153,153,254,86,1,170,3,176,253,39,2,217,252,80, + 4,96,253,18,2,238,0,0,255,255,0,193,0,0,1,121,6,20,18,6,0,79,0,0,255,255,0,16,0,0,5,104,7,146,16,39,2,154,0,206, + 1,74,19,6,3,164,0,0,0,18,180,24,0,8,19,7,43,49,0,64,5,111,0,111,8,2,93,48,255,255,0,123,255,227,4,45,6,31,16,38, + 2,154,79,215,19,6,3,196,0,0,0,8,180,34,0,8,25,7,43,49,255,255,0,16,0,0,5,104,7,78,18,38,3,164,0,0,17,7,22,185, + 4,188,1,117,0,20,180,10,18,13,5,7,43,64,9,48,18,63,13,0,18,15,13,4,93,49,0,0,255,255,0,123,255,227,4,45,6,16,18,38, + 3,196,0,0,17,6,0,106,82,0,0,32,180,20,45,40,11,7,43,64,21,127,40,111,40,80,45,95,40,64,45,79,40,48,45,63,40,0,45,15, + 40,10,93,49,255,255,0,8,0,0,7,72,5,213,18,6,0,136,0,0,255,255,0,123,255,227,7,111,4,123,18,6,0,168,0,0,255,255,0,201, + 0,0,4,139,7,109,16,39,22,192,4,161,1,117,19,6,3,169,0,0,0,7,64,3,64,0,1,93,49,0,0,0,255,255,0,113,255,227,4,127, + 6,72,16,39,2,154,0,150,0,0,19,6,3,201,0,0,0,7,64,3,112,0,1,93,49,0,0,0,255,255,0,117,255,227,5,217,5,240,18,6, + 1,81,0,0,255,255,0,113,255,227,4,127,4,123,18,6,2,27,0,0,255,255,0,117,255,227,5,217,7,78,16,39,22,185,5,32,1,117,18,6, + 4,108,0,0,255,255,0,113,255,227,4,127,6,16,16,38,0,106,84,0,18,6,4,109,0,0,0,0,255,255,0,40,0,0,8,118,7,78,16,39, + 22,185,6,81,1,117,18,6,3,170,0,0,255,255,0,70,0,0,6,239,6,16,16,39,0,106,1,158,0,0,18,6,3,202,0,0,255,255,0,135, + 255,227,4,154,7,78,16,39,22,185,4,135,1,117,18,6,3,171,0,0,255,255,0,133,255,227,3,200,6,16,16,38,0,106,58,0,18,6,3,203, + 0,0,0,0,255,255,0,160,255,193,4,248,5,213,18,6,1,121,0,0,255,255,0,88,254,76,4,47,4,96,18,6,2,84,0,0,255,255,0,201, + 0,0,5,51,7,49,16,39,0,113,0,245,1,59,18,6,3,172,0,0,255,255,0,186,0,0,4,121,5,245,16,39,0,113,0,146,255,255,18,6, + 3,204,0,0,255,255,0,201,0,0,5,51,7,78,16,39,22,185,4,245,1,117,18,6,3,172,0,0,255,255,0,186,0,0,4,121,6,16,16,39, + 0,106,0,146,0,0,18,6,3,204,0,0,255,255,0,115,255,227,5,217,7,78,18,38,3,178,0,0,17,7,22,185,5,39,1,117,0,20,180,3, + 31,26,9,7,43,64,9,64,31,79,26,16,31,31,26,4,93,49,0,0,255,255,0,113,255,227,4,117,6,16,18,38,3,210,0,0,17,6,0,106, + 115,0,0,20,180,3,31,26,9,7,43,64,9,64,31,79,26,48,31,63,26,4,93,49,255,255,0,115,255,227,5,217,5,240,18,6,1,97,0,0, + 255,255,0,113,255,227,4,117,4,123,18,6,2,55,0,0,255,255,0,115,255,227,5,217,7,78,18,38,4,124,0,0,16,7,22,185,5,39,1,117, + 255,255,0,113,255,227,4,117,6,16,18,38,4,125,0,0,16,6,0,106,115,0,0,0,255,255,0,111,255,227,5,35,7,78,16,39,22,185,4,103, + 1,117,18,6,3,193,0,0,255,255,0,113,255,227,3,231,6,16,16,38,0,106,226,0,18,6,3,225,0,0,0,0,255,255,0,35,0,0,4,189, + 7,49,16,39,0,113,0,114,1,59,18,6,3,183,0,0,255,255,0,61,254,86,4,127,5,245,16,38,0,113,94,255,18,6,3,215,0,0,0,0, + 255,255,0,35,0,0,4,189,7,78,16,39,22,185,4,114,1,117,18,6,3,183,0,0,255,255,0,61,254,86,4,127,6,16,16,38,0,106,94,0, + 18,6,3,215,0,0,0,0,255,255,0,35,0,0,4,189,7,107,16,39,22,194,4,114,1,117,18,6,3,183,0,0,255,255,0,61,254,86,4,127, + 6,102,16,38,2,159,94,0,18,6,3,215,0,0,0,0,255,255,0,175,0,0,4,179,7,78,16,39,22,185,4,204,1,117,18,6,3,187,0,0, + 255,255,0,150,0,0,4,0,6,16,16,38,0,106,94,0,18,6,3,219,0,0,0,0,0,1,0,201,254,191,4,106,5,213,0,9,0,35,64,10, + 11,2,6,149,9,4,28,1,4,10,16,252,252,60,236,204,196,49,0,182,4,149,1,129,6,8,0,47,204,204,244,236,48,51,17,33,21,33,17,51, + 17,35,17,201,3,161,253,41,201,201,5,213,170,251,127,254,21,1,65,0,0,1,0,186,254,229,3,208,4,96,0,9,0,35,64,10,11,2,6,169, + 9,4,8,1,70,10,16,252,252,60,236,220,204,49,0,182,4,169,1,188,6,8,0,47,204,204,244,236,48,51,17,33,21,33,17,51,17,35,17,186, + 3,22,253,162,184,184,4,96,170,252,227,254,76,1,27,0,255,255,0,201,0,0,6,70,7,78,18,38,3,191,0,0,16,7,22,185,5,183,1,117, + 255,255,0,186,0,0,5,155,6,16,18,38,3,223,0,0,16,7,0,106,1,8,0,0,0,1,0,71,254,86,4,239,5,213,0,25,0,57,64,13, + 25,14,27,6,10,12,9,28,2,21,4,1,26,16,220,60,60,204,252,60,204,204,196,220,204,49,0,64,14,20,21,14,0,1,12,149,9,4,8,149, + 5,129,0,47,244,252,220,60,236,50,16,204,220,204,48,33,17,33,53,33,17,33,21,33,17,33,21,33,17,33,21,20,7,6,43,1,53,51,50,54, + 53,1,78,254,249,1,7,3,161,253,41,2,35,253,221,1,105,71,82,191,254,233,105,76,2,148,170,2,151,170,254,19,170,253,236,148,200,96,110,156, + 97,173,0,0,0,1,0,56,254,86,4,85,4,96,0,25,0,59,64,14,27,6,9,25,14,10,12,9,8,2,21,4,1,26,16,220,60,196,204,252, + 60,204,220,204,16,220,204,49,0,64,14,20,21,14,0,1,12,169,9,4,8,169,5,188,0,47,244,236,220,60,252,60,16,204,220,204,48,33,17,33, + 53,33,17,33,21,33,17,33,21,33,17,33,21,20,7,6,43,1,53,51,50,54,53,1,63,254,249,1,7,3,22,253,162,1,160,254,96,1,110,70, + 82,192,254,233,106,75,1,244,170,1,194,157,254,219,170,254,140,148,200,96,110,156,97,173,0,1,0,61,254,102,5,42,5,213,0,23,0,0,37,22, + 7,6,7,6,43,1,53,51,50,55,54,55,9,1,35,9,1,51,9,1,51,1,5,42,1,2,15,83,102,228,76,62,135,55,40,11,254,94,254,89, + 218,2,21,254,47,217,1,115,1,117,217,254,32,26,2,24,190,98,122,170,75,53,115,2,120,253,133,3,29,2,184,253,213,2,43,253,51,0,0,0, + 0,1,0,59,254,86,4,100,4,96,0,23,0,0,9,2,22,21,20,7,6,43,1,53,50,55,62,1,53,9,1,35,9,1,51,9,1,4,100,254, + 107,1,107,27,67,81,196,193,196,25,79,53,254,189,254,186,217,1,179,254,114,217,1,41,1,41,4,96,253,223,254,23,38,57,205,97,115,156,3,10, + 109,152,1,180,254,72,2,74,2,22,254,113,1,143,0,0,0,1,0,61,0,0,5,59,5,213,0,17,0,0,19,51,9,1,51,1,33,21,33,1, + 35,9,1,35,1,33,53,33,129,217,1,115,1,117,217,254,78,1,116,254,144,1,206,217,254,92,254,89,218,1,212,254,140,1,150,5,213,253,213,2, + 43,253,119,144,253,68,2,123,253,133,2,188,144,0,0,0,0,1,0,59,0,0,4,121,4,96,0,17,0,0,9,1,51,9,1,51,1,33,21,33, + 1,35,9,1,35,1,33,53,1,183,254,169,217,1,41,1,41,217,254,170,1,13,254,224,1,126,217,254,186,254,186,217,1,127,254,223,2,148,1,204, + 254,113,1,143,254,52,144,253,252,1,184,254,72,2,4,144,0,2,0,145,0,0,4,180,5,213,0,10,0,21,0,38,64,10,23,4,5,20,28,11, + 0,25,16,22,16,220,236,212,236,50,236,49,0,64,9,6,149,20,173,11,129,5,149,12,47,236,228,244,236,48,1,20,23,22,51,33,17,33,34,7, + 6,1,17,33,34,36,53,52,36,51,33,17,1,102,79,78,163,1,68,254,188,163,78,79,3,78,253,232,251,254,240,1,16,251,1,78,1,183,138,67, + 68,2,35,67,68,3,147,250,43,218,221,222,218,2,102,0,0,2,0,113,0,0,3,245,4,96,0,10,0,22,0,37,64,11,24,70,5,21,8,11, + 0,18,17,69,23,16,252,236,212,236,50,236,49,0,183,6,169,21,11,188,5,169,12,47,236,228,212,236,48,1,20,23,22,51,33,17,33,34,7,6, + 1,17,33,34,39,38,16,55,54,51,33,17,1,53,62,66,129,1,7,254,249,128,67,62,2,192,254,57,214,115,116,116,121,208,1,15,1,76,90,43, + 46,1,105,46,42,2,182,251,160,82,82,1,80,82,85,1,197,0,0,0,0,2,0,145,255,227,7,67,5,213,0,12,0,48,0,57,64,14,50,4, + 38,28,41,13,27,12,28,29,5,25,23,49,16,220,236,212,236,50,57,212,236,236,49,0,64,16,34,8,149,19,1,149,26,173,45,19,140,40,188,29, + 129,49,16,236,236,228,50,244,236,16,236,50,48,1,33,34,7,6,16,23,22,51,50,55,54,53,19,6,7,6,7,6,35,34,39,38,53,52,36,51, + 33,17,51,17,20,23,22,51,50,55,54,53,17,51,17,20,7,6,35,34,39,38,3,234,254,188,163,78,79,79,95,129,180,75,86,33,12,14,51,106, + 94,110,238,129,136,1,16,251,1,78,201,63,52,112,105,59,63,202,110,104,215,217,102,49,2,201,67,68,254,234,80,95,109,125,159,254,221,29,28,96, + 54,49,129,137,202,222,218,2,102,251,236,143,91,74,74,79,155,2,159,253,90,224,127,120,120,57,0,0,0,2,0,113,255,227,6,115,4,96,0,13, + 0,48,0,56,64,15,50,70,38,8,41,14,13,27,8,30,5,18,22,69,49,16,252,236,212,236,50,57,212,236,236,49,0,64,14,34,9,169,49,1, + 169,26,45,18,140,40,29,188,49,16,236,204,228,50,212,236,16,236,50,48,1,33,34,7,6,21,20,23,22,51,50,55,54,53,19,6,7,6,35,34, + 39,38,53,52,55,54,51,33,17,51,17,20,23,22,51,50,55,54,53,17,51,17,20,7,6,35,34,39,38,3,61,254,249,128,67,62,65,64,106,148, + 92,45,49,67,93,94,136,172,102,101,116,121,208,1,15,184,62,60,106,104,60,62,184,100,104,206,211,100,31,2,2,46,42,94,92,58,57,109,52,156, + 254,246,108,48,49,97,96,166,170,82,85,1,197,253,97,159,80,79,79,82,157,1,65,254,184,236,115,120,120,37,0,0,0,1,0,201,255,227,7,3, + 5,240,0,55,0,64,64,15,57,46,28,44,6,11,25,27,44,0,25,35,18,6,56,16,252,212,236,204,212,252,204,16,236,204,49,0,64,19,31,5, + 149,6,39,149,50,18,161,19,174,15,149,23,145,45,50,140,56,16,228,204,244,236,244,236,16,236,212,236,57,48,1,52,39,38,43,1,53,51,50,55, + 54,53,52,39,38,35,34,6,7,53,54,55,54,51,50,23,22,21,20,7,6,7,22,23,22,21,20,23,22,51,50,55,54,53,17,51,17,20,7,6, + 35,34,39,38,39,38,3,170,92,93,165,174,182,149,79,79,81,82,152,83,190,114,115,100,101,89,230,134,134,71,71,131,145,82,81,63,52,112,105,59, + 63,202,110,104,215,217,102,48,28,33,1,178,132,74,75,166,59,60,112,115,61,62,36,38,180,32,16,16,104,105,178,124,85,86,33,31,98,98,144,128, + 91,74,74,79,155,2,159,253,90,224,127,120,120,56,80,97,0,1,0,171,255,227,6,70,4,124,0,53,0,71,64,14,55,46,18,44,11,18,27,44, + 0,18,35,6,20,54,16,220,196,212,236,204,212,236,16,236,204,49,0,64,19,20,134,19,136,15,185,23,184,54,5,169,6,54,39,185,50,140,44,54, + 16,204,244,236,16,212,236,16,244,252,176,12,75,81,88,252,27,244,89,236,48,1,52,39,38,43,1,53,51,50,55,54,53,52,39,38,35,34,7,6, + 7,53,62,1,51,50,23,22,21,20,7,6,7,22,23,22,21,20,23,22,51,50,55,54,53,17,51,17,20,7,6,35,34,39,38,3,19,78,72,137, + 148,155,116,67,68,70,69,119,71,81,80,97,98,170,76,196,113,114,60,60,112,129,64,69,62,61,105,104,60,62,184,100,104,206,199,112,98,1,56,102, + 56,51,152,44,45,70,64,46,46,13,13,29,167,24,24,78,79,141,93,64,65,24,25,72,79,72,88,68,69,79,82,157,1,65,254,184,236,115,120,117, + 101,0,0,0,0,1,0,201,254,86,5,60,5,240,0,41,0,58,64,13,8,13,25,29,39,28,43,2,25,37,20,6,42,16,252,212,236,204,236,212, + 252,204,49,0,64,18,33,7,149,8,0,20,161,21,174,17,149,25,145,39,149,40,189,0,47,236,236,244,236,244,236,16,212,236,57,48,33,35,17,52, + 39,38,43,1,53,51,50,55,54,53,52,39,38,35,34,6,7,53,54,55,54,51,50,23,22,21,20,7,6,7,22,23,22,21,17,51,17,35,4,115, + 201,92,93,165,174,182,149,79,79,81,82,152,83,190,114,115,100,101,89,230,134,134,71,71,131,145,82,81,201,201,1,177,133,74,75,166,59,60,112,115, + 61,62,36,38,180,32,16,16,104,105,178,124,85,86,33,31,98,97,146,254,249,253,172,0,0,1,0,171,254,86,4,131,4,124,0,41,0,63,64,12, + 17,18,33,1,18,43,6,18,41,12,26,42,16,220,196,212,236,204,236,212,236,49,0,64,17,26,134,25,136,21,185,29,184,4,11,169,12,0,169,2, + 189,4,47,236,236,212,236,16,244,252,176,12,75,81,88,252,27,244,89,236,48,37,51,17,35,17,35,17,52,39,38,43,1,53,51,50,55,54,53,52, + 39,38,35,34,7,6,7,53,62,1,51,50,23,22,21,20,7,6,7,22,23,22,21,3,200,187,184,184,78,72,137,148,155,116,67,68,70,69,119,71, + 81,80,97,98,170,76,196,113,114,60,60,112,126,67,69,153,253,189,1,170,1,70,88,56,51,152,44,45,70,64,46,46,13,13,29,167,24,24,78,79, + 141,93,64,65,24,24,73,75,106,0,0,0,0,1,0,54,255,227,7,202,5,213,0,33,0,52,64,13,35,4,11,28,10,21,28,0,22,28,33,28, + 34,16,212,212,236,212,236,212,252,236,49,0,64,14,22,149,33,129,34,5,149,16,140,28,149,27,10,34,16,204,60,236,244,236,16,244,236,48,1,17, + 20,23,22,51,50,55,54,53,17,51,17,20,7,6,35,34,39,38,53,17,33,21,16,3,6,5,53,54,55,18,25,1,5,58,63,52,112,105,59,63, + 202,110,104,215,214,105,110,254,27,132,98,254,145,212,67,117,5,213,251,236,143,91,74,74,79,155,2,159,253,90,224,127,120,120,125,226,3,113,212,254, + 24,254,170,253,56,167,46,168,1,37,2,53,1,26,0,0,0,1,0,46,255,227,6,238,4,96,0,32,0,52,64,13,34,70,10,8,9,20,8,0, + 21,8,32,27,33,16,212,212,236,212,236,212,252,236,49,0,64,14,21,169,32,188,33,4,169,15,140,27,169,26,9,33,16,204,60,236,244,236,16,244, + 236,48,1,17,20,22,51,50,55,54,53,17,51,17,20,7,6,35,34,39,38,53,17,33,21,16,3,6,5,53,54,55,54,17,53,4,115,122,103,104, + 60,62,184,100,104,206,199,112,98,254,123,118,94,254,204,179,59,98,4,96,253,4,87,138,79,82,157,1,65,254,184,236,115,120,117,101,123,2,143,134, + 254,146,254,252,207,29,153,27,127,207,1,167,212,0,0,0,255,255,0,201,255,227,8,45,5,213,18,6,1,184,0,0,0,1,0,193,255,227,7,3, + 4,96,0,28,0,54,64,15,30,70,10,8,9,20,28,8,0,21,25,8,24,70,29,16,252,236,50,220,236,50,212,252,236,49,0,64,13,21,169,26, + 28,24,188,23,4,169,15,140,9,23,47,204,244,236,16,228,50,220,236,48,1,17,20,22,51,50,55,54,53,17,51,17,20,7,6,35,34,39,38,61, + 1,33,17,35,17,51,17,33,17,4,136,122,103,104,60,62,184,100,104,206,199,112,98,253,169,184,184,2,87,4,96,253,4,87,138,79,82,157,1,65, + 254,184,236,115,120,117,101,123,204,253,252,4,96,254,51,1,205,0,0,0,0,1,0,115,255,227,5,137,5,240,0,27,0,48,64,11,29,4,16,25, + 28,27,20,28,10,16,28,16,252,236,220,236,196,236,49,0,64,14,22,149,6,26,16,149,15,18,149,13,145,6,140,28,16,228,244,236,212,252,204,16, + 236,48,1,20,7,6,7,6,35,32,39,38,16,55,54,33,32,23,21,38,33,32,17,16,33,50,54,53,17,51,5,137,100,45,137,124,151,254,155,196, + 192,191,197,1,101,1,39,225,225,254,234,253,219,2,37,215,123,202,1,186,224,127,57,33,30,210,204,2,208,205,210,142,215,191,253,159,253,160,148,164, + 1,240,0,0,0,1,0,113,255,227,4,70,4,123,0,27,0,48,64,11,29,69,6,18,18,20,13,18,0,69,28,16,252,236,212,236,196,236,49,0, + 64,14,16,185,24,19,7,185,6,9,185,4,184,24,140,28,16,228,244,236,212,252,204,16,236,48,19,16,55,54,33,50,23,21,38,35,34,7,6,16, + 23,22,51,50,17,53,51,21,20,6,35,32,39,38,113,146,150,1,11,208,186,190,196,189,98,90,90,98,189,226,184,201,229,254,252,149,142,2,47,1, + 14,157,161,110,170,124,124,114,254,124,114,124,1,62,190,197,236,231,166,158,0,1,255,250,255,227,5,102,5,213,0,25,0,47,64,12,9,28,11,27, + 24,64,0,28,23,64,20,26,16,212,228,252,228,204,220,236,49,0,64,12,5,149,16,21,0,149,23,129,16,140,10,26,16,204,228,244,236,50,16,236, + 48,1,17,20,23,22,51,50,55,54,53,17,51,17,20,7,6,35,34,39,38,53,17,33,53,33,21,2,215,63,52,111,105,59,63,202,110,104,215,214, + 105,110,253,238,4,239,5,43,252,150,143,91,74,74,79,155,2,159,253,90,224,127,120,120,125,226,3,113,170,170,0,0,0,1,0,5,255,227,4,246, + 4,96,0,25,0,50,64,10,10,8,11,27,24,0,8,21,23,26,16,212,220,252,204,204,220,236,49,0,64,12,5,169,16,140,26,0,22,169,23,188, + 10,26,16,204,244,236,50,16,244,236,178,16,10,1,93,48,1,17,20,23,22,51,50,55,54,53,17,51,17,20,7,6,35,34,39,38,53,17,33,53, + 33,21,2,120,62,61,105,104,60,62,184,100,104,206,199,112,98,254,66,4,49,3,182,253,174,86,70,69,79,82,157,1,65,254,184,236,115,120,117,101, + 123,2,126,170,170,0,0,0,255,255,0,164,255,227,4,123,5,240,18,6,1,82,0,0,255,255,0,133,255,227,3,200,4,124,18,6,3,73,0,0, + 0,1,0,84,254,102,5,58,5,213,0,24,0,47,64,11,13,26,4,19,28,7,20,28,6,1,25,16,212,212,236,212,236,236,204,49,0,64,13,13, + 149,12,189,25,20,149,6,129,1,149,0,25,16,50,236,244,236,16,244,236,48,51,53,54,55,54,17,53,33,17,16,6,43,1,53,51,50,55,54,53, + 17,33,21,16,3,6,84,221,58,87,3,120,205,227,77,63,134,55,55,254,27,102,98,170,48,163,246,2,100,254,250,147,254,242,244,170,75,76,193,4, + 195,184,253,202,254,248,253,0,0,1,0,76,254,86,4,115,4,96,0,24,0,47,64,11,13,26,70,19,8,7,20,8,6,1,25,16,212,212,236,212, + 236,236,204,49,0,64,13,13,169,12,189,25,20,169,6,188,1,169,0,25,16,50,236,244,236,16,244,236,48,51,53,54,55,54,17,53,33,17,20,6, + 43,1,53,51,50,55,54,53,17,33,21,16,7,6,76,187,51,68,2,245,163,181,70,49,97,46,38,254,123,88,94,153,29,125,166,1,208,183,251,140, + 214,192,156,48,41,161,3,225,111,254,80,194,207,0,0,0,0,1,0,84,0,0,9,28,5,213,0,23,0,0,51,53,54,55,18,17,53,33,9,1, + 51,9,1,35,9,1,35,9,1,33,21,16,3,6,84,217,62,87,3,121,1,115,1,117,217,254,32,2,0,217,254,92,254,89,218,2,21,254,160,253, + 184,102,98,170,47,164,1,2,2,88,254,253,213,2,43,253,51,252,248,2,123,253,133,3,29,2,14,184,253,202,254,248,253,0,0,0,0,1,0,76, + 0,0,7,178,4,96,0,24,0,0,9,2,35,9,1,35,9,1,33,21,16,7,6,5,53,54,55,54,17,53,33,23,9,1,7,157,254,107,1,170, + 217,254,186,254,186,217,1,179,254,223,254,48,88,94,254,204,182,56,68,2,245,1,1,39,1,41,4,96,253,223,253,193,1,184,254,72,2,74,1,131, + 111,254,80,194,207,29,153,28,126,177,1,197,183,3,254,116,1,143,0,0,0,2,0,201,0,0,6,232,5,213,0,8,0,26,0,0,1,17,51,50, + 54,53,52,38,35,1,6,33,35,17,35,17,33,50,4,21,20,7,1,51,9,1,35,1,147,254,141,154,154,141,1,149,127,254,234,254,202,1,200,251, + 1,1,6,1,104,217,254,32,2,0,217,5,47,253,207,146,135,134,146,253,179,138,253,168,5,213,227,219,48,42,2,24,253,51,252,248,0,2,0,186, + 254,86,6,168,4,123,0,24,0,32,0,0,9,2,35,1,6,7,6,35,34,38,39,17,35,17,51,21,62,1,51,50,23,22,23,1,0,16,38,32, + 6,16,22,32,6,147,254,107,1,170,217,254,203,26,92,127,204,123,177,58,185,185,58,177,123,204,127,84,29,1,37,254,43,167,254,220,167,167,1,36, + 4,96,253,223,253,193,1,161,168,116,162,97,100,253,174,6,10,170,100,97,162,107,151,1,137,253,4,1,150,231,231,254,106,231,0,0,0,2,0,136, + 0,0,7,188,5,213,0,21,0,29,0,0,51,1,38,36,53,52,36,41,1,21,33,17,33,21,33,17,33,21,33,17,33,1,18,16,22,51,33,17, + 33,34,136,1,152,100,255,0,1,4,1,2,4,232,253,28,2,197,253,59,2,246,252,62,254,244,254,118,55,149,146,1,56,254,200,146,2,141,26,169, + 215,206,224,170,254,70,170,253,227,170,2,119,253,137,4,170,254,250,135,2,18,0,0,0,0,3,0,116,255,227,7,119,4,123,0,31,0,38,0,47, + 0,0,1,21,33,30,1,51,50,54,55,21,14,1,35,32,39,38,39,35,1,35,1,46,1,53,52,54,51,33,54,51,50,0,7,46,1,35,34,6, + 7,37,20,22,59,1,17,35,34,6,7,119,252,178,12,205,183,106,199,98,99,208,107,254,244,157,152,4,229,254,182,198,1,86,116,154,215,217,2,101, + 86,103,226,1,7,184,2,165,136,154,185,14,253,75,128,119,248,248,119,128,2,94,90,190,199,52,52,174,42,44,156,152,194,254,39,1,235,26,137,143, + 162,161,27,254,221,196,151,180,174,158,138,83,94,1,97,92,255,255,0,115,254,248,5,217,5,240,16,6,0,52,0,0,255,255,0,113,254,86,4,90, + 4,123,16,6,0,84,0,0,255,255,0,68,0,0,7,166,5,213,16,6,0,58,0,0,255,255,0,86,0,0,6,53,4,96,16,6,0,90,0,0, + 0,1,0,201,0,0,5,134,5,213,0,20,0,0,1,51,23,55,33,1,23,35,39,7,1,35,9,1,17,35,17,51,17,1,39,2,106,135,151,221, + 1,3,254,163,200,142,128,158,2,95,220,253,250,254,239,202,202,1,175,219,5,138,151,226,254,155,200,128,161,252,121,3,1,254,233,254,22,5,213,253, + 30,1,184,220,0,1,0,186,0,0,4,145,4,96,0,19,0,0,1,51,23,55,51,7,23,35,39,7,1,35,1,7,17,35,17,51,17,1,2,53, + 140,65,118,226,230,147,142,76,127,1,227,206,254,115,197,183,183,1,75,4,41,64,119,233,147,76,129,253,81,2,53,200,254,147,4,96,253,242,1,80, + 0,1,0,84,254,102,8,115,5,213,0,37,0,57,64,14,14,28,39,19,25,32,28,29,7,33,28,6,1,38,16,212,212,236,212,60,236,220,196,204, + 236,49,0,64,15,19,149,18,29,149,8,33,149,6,129,18,189,8,0,31,47,60,204,236,244,236,16,236,16,236,48,51,53,54,55,18,17,53,33,17, + 33,50,23,22,21,17,16,6,43,1,53,51,50,55,54,53,17,52,38,35,33,17,35,17,33,21,16,3,6,84,217,62,87,3,120,1,161,186,113,109, + 204,228,76,62,134,56,55,124,124,254,136,202,254,27,102,98,170,47,164,1,2,2,88,254,253,156,119,114,238,254,206,254,242,244,170,75,75,194,1,34, + 159,158,253,57,5,43,184,253,202,254,248,253,0,1,0,76,254,86,7,12,4,96,0,39,0,57,64,14,14,8,41,20,26,34,8,31,7,35,8,6, + 1,40,16,212,212,236,212,60,236,220,196,204,236,49,0,64,15,20,169,19,31,169,8,35,169,6,188,19,189,8,0,33,47,60,204,236,244,236,16,236, + 16,236,48,51,53,54,55,54,17,53,33,17,51,32,23,22,21,17,20,7,6,43,1,53,51,50,55,54,53,17,52,39,38,35,33,17,35,17,33,21, + 16,7,6,76,182,56,68,2,245,250,1,7,70,82,82,81,181,193,172,110,33,38,38,44,139,254,252,184,254,123,88,94,153,28,126,177,1,197,183,254, + 23,71,81,229,254,242,213,97,96,156,48,55,147,1,8,166,36,41,254,25,3,205,111,254,80,194,207,0,0,1,0,201,254,102,8,116,5,213,0,33, + 0,63,64,17,16,12,28,35,23,29,3,28,27,5,56,31,1,28,0,4,34,16,252,236,50,252,60,236,50,212,204,236,204,49,0,64,16,18,149,16, + 189,28,27,30,149,6,2,173,4,0,129,32,28,47,60,228,50,252,60,236,50,16,252,236,48,19,51,17,33,17,51,17,33,50,23,22,21,17,16,6, + 43,1,53,51,50,55,54,53,17,52,38,35,33,17,35,17,33,17,35,201,202,2,222,202,1,161,186,113,109,204,228,76,62,134,56,55,124,124,254,136, + 202,253,34,202,5,213,253,156,2,100,253,156,119,114,238,254,206,254,242,244,170,75,75,194,1,34,159,158,253,57,2,199,253,57,0,0,0,1,0,186, + 254,86,7,26,4,96,0,35,0,64,64,16,12,8,37,18,24,32,4,8,29,5,33,1,8,0,70,36,16,252,236,50,220,60,236,50,220,196,204,236, + 49,0,64,17,18,169,17,29,169,6,33,169,2,4,0,188,31,17,189,6,35,47,204,236,60,228,50,220,236,16,236,16,236,48,19,51,17,33,17,51, + 17,51,32,23,22,21,17,20,7,6,43,1,53,51,50,55,54,53,17,52,39,38,35,33,17,35,17,33,17,35,186,185,2,85,185,250,1,7,70,82, + 82,81,181,193,172,110,33,38,38,44,139,254,252,185,253,171,185,4,96,254,55,1,201,254,23,71,81,229,254,242,213,97,96,156,48,55,147,1,8,166, + 36,41,254,25,2,4,253,252,0,1,0,201,254,191,6,4,5,213,0,11,0,0,33,17,33,17,35,17,33,17,51,17,35,17,4,113,253,34,202,4, + 114,201,201,5,43,250,213,5,213,250,213,254,21,1,65,0,0,1,0,186,254,229,5,57,4,96,0,11,0,0,1,17,51,17,35,17,35,17,33,17, + 35,17,4,129,184,184,185,253,171,185,4,96,252,57,254,76,1,27,3,205,252,51,4,96,0,1,0,178,255,196,5,112,5,213,0,35,0,0,1,30, + 1,23,54,53,17,51,17,20,7,22,23,7,38,39,14,1,35,32,0,25,1,51,17,20,30,2,51,50,54,55,46,1,39,3,136,39,85,46,44,203, + 97,79,89,70,113,108,69,175,107,254,235,254,217,203,42,89,140,98,63,102,41,54,94,38,1,227,52,90,41,101,185,3,139,252,92,229,144,51,39,158, + 52,72,46,47,1,41,1,37,3,164,252,117,120,171,109,51,18,20,45,96,52,0,0,0,0,1,0,178,0,0,5,51,5,242,0,25,0,0,51,17, + 16,0,33,32,0,17,21,35,53,52,46,2,35,34,14,2,21,17,33,21,33,17,178,1,34,1,24,1,25,1,36,203,43,90,139,96,98,139,90,42, + 3,182,252,74,3,164,1,37,1,41,254,217,254,217,57,32,121,171,109,50,50,109,171,121,254,231,175,254,61,0,0,0,0,2,0,93,0,0,5,213, + 5,242,0,19,0,35,0,0,1,51,21,35,17,35,17,33,34,46,2,52,62,2,51,32,0,17,3,17,52,46,2,35,34,14,2,20,30,2,51,4, + 219,250,250,203,254,145,139,216,148,77,77,148,216,140,1,23,1,34,203,42,90,138,96,105,143,86,37,44,91,139,95,2,114,175,254,61,1,195,80,142, + 196,232,197,143,81,254,214,254,220,254,206,1,25,121,171,109,50,58,100,136,158,132,95,53,0,1,0,90,0,0,5,203,5,242,0,25,0,0,33,17, + 52,46,2,35,34,14,2,29,1,35,53,16,0,33,32,0,25,1,51,21,35,17,4,6,42,90,140,97,96,139,90,43,203,1,36,1,25,1,24,1, + 34,250,250,3,139,121,171,109,50,50,109,171,121,32,57,1,39,1,39,254,215,254,219,254,206,175,254,61,0,1,0,178,255,227,5,51,5,213,0,25, + 0,0,1,17,33,21,33,17,20,30,2,51,50,62,2,61,1,51,21,16,0,33,32,0,25,1,1,125,3,182,252,74,42,90,139,98,96,139,90,43, + 203,254,220,254,231,254,232,254,222,5,213,254,139,175,254,153,121,171,109,50,50,109,171,121,32,57,254,217,254,217,1,41,1,37,3,164,0,1,0,178, + 0,0,5,138,5,243,0,41,0,0,1,20,14,4,7,33,21,33,17,51,21,51,50,62,4,53,52,46,2,34,14,2,29,1,35,53,52,62,2,32, + 30,2,5,138,51,84,109,113,110,44,1,228,251,100,203,86,61,153,157,151,117,71,48,102,158,220,156,99,46,203,76,153,229,1,50,235,159,82,3,129, + 103,180,153,124,93,61,13,170,1,76,162,43,83,123,162,199,117,103,171,121,67,64,112,151,86,71,75,121,210,154,88,90,165,231,0,0,0,1,0,188, + 0,0,4,237,5,213,0,9,0,0,37,33,21,33,17,51,17,33,21,33,1,135,2,219,252,90,203,3,102,252,154,175,175,5,213,254,139,175,0,0, + 0,1,0,178,0,0,5,51,5,242,0,23,0,0,51,17,16,0,33,32,0,17,21,35,53,52,46,2,35,34,14,2,21,17,33,21,178,1,34,1, + 24,1,25,1,36,203,43,90,139,96,98,139,90,42,3,182,3,164,1,37,1,41,254,217,254,217,57,32,121,171,109,50,50,109,171,121,253,36,175,0, + 0,2,0,178,255,227,6,174,5,242,0,41,0,56,0,0,0,34,14,2,21,17,35,17,52,62,2,32,30,2,29,1,51,21,35,17,20,14,2,35, + 34,46,2,52,62,2,59,1,53,52,46,1,0,20,30,2,50,62,2,53,17,35,34,14,1,3,195,240,175,113,54,203,91,171,246,1,54,246,171,91, + 206,206,66,116,161,94,95,159,116,65,68,117,159,91,234,53,111,254,200,37,65,88,104,86,62,34,234,57,90,62,5,78,50,109,171,121,252,117,3,164, + 147,221,148,74,74,148,221,147,52,175,254,215,107,163,110,57,58,115,175,234,168,108,51,24,122,173,109,252,225,168,112,66,28,27,65,107,80,1,35,25, + 63,0,0,0,0,2,0,93,255,227,5,213,5,213,0,21,0,35,0,0,1,20,14,2,35,34,46,2,52,62,2,51,33,17,51,17,51,21,35,33, + 34,14,2,20,30,2,51,50,54,53,17,4,219,73,144,213,139,140,216,148,77,77,148,216,139,1,111,203,250,250,253,197,95,139,91,44,37,86,143,105, + 192,174,2,87,146,233,162,87,93,157,209,232,208,158,92,1,117,254,139,175,66,110,144,158,148,115,69,247,242,1,65,0,0,1,0,188,0,0,5,51, + 5,213,0,24,0,0,19,51,17,62,1,51,50,30,2,29,1,35,53,52,46,2,34,14,2,21,17,35,188,203,63,188,118,138,212,146,75,203,43,90, + 139,192,139,91,43,203,5,213,254,9,77,73,72,147,221,150,75,50,121,171,109,50,50,108,172,121,253,243,0,1,0,188,0,0,4,68,5,213,0,5, + 0,0,1,17,33,21,33,17,1,135,2,189,252,120,5,213,250,218,175,5,213,0,0,0,0,1,0,188,255,227,6,203,5,213,0,29,0,0,1,17, + 20,30,2,50,62,2,53,17,51,17,20,14,2,34,46,2,53,17,33,17,35,17,51,17,3,202,54,84,102,96,98,81,51,203,72,128,176,210,179,132, + 75,254,136,203,203,4,96,253,49,75,102,62,27,27,62,102,75,2,207,253,73,119,171,111,53,53,111,171,119,2,8,252,79,5,213,254,139,0,0,0, + 0,2,1,8,255,230,6,26,5,240,0,43,0,62,0,0,1,51,21,51,62,3,51,50,30,2,23,21,46,3,35,34,6,7,22,4,30,1,21,20, + 14,4,35,34,46,2,53,52,54,55,35,19,20,30,2,51,50,62,2,53,52,46,1,36,43,1,14,1,1,12,203,78,66,153,163,168,82,60,100,88, + 84,45,53,106,101,92,39,97,179,79,155,1,17,204,118,39,76,111,147,180,106,159,239,161,80,76,67,139,203,42,101,166,125,124,172,106,47,66,159,254, + 246,200,29,76,87,5,213,245,63,101,71,37,9,18,27,18,215,35,47,28,11,57,52,9,89,161,232,153,83,157,139,117,84,47,99,174,237,137,128,231, + 101,254,52,95,175,133,80,76,127,168,92,96,174,132,78,97,235,0,0,0,0,1,0,178,0,0,5,41,5,213,0,24,0,0,33,35,17,14,1,35, + 34,46,2,53,17,51,17,20,30,2,50,62,2,61,1,51,5,41,203,69,182,118,138,212,146,75,203,43,90,139,192,139,91,43,203,1,227,63,67,72, + 147,221,150,2,38,253,243,121,171,109,50,50,108,171,122,152,0,1,0,70,255,202,5,26,5,213,0,25,0,0,37,21,1,46,3,62,1,55,54,36, + 55,3,51,1,14,3,7,14,2,22,23,5,26,252,22,62,103,63,11,59,139,119,155,1,56,164,207,238,1,3,113,203,193,187,96,103,95,13,56,47, + 152,206,1,64,19,57,76,96,117,138,80,104,166,71,1,47,254,137,43,88,97,109,64,69,92,62,38,15,0,2,0,168,255,208,5,128,5,243,0,53, + 0,67,0,0,19,52,62,2,51,50,22,23,62,3,53,52,46,2,34,14,2,29,1,35,53,52,62,2,32,30,2,21,20,14,2,7,30,1,23,7, + 46,1,39,14,1,35,34,46,2,37,34,14,2,21,20,22,51,50,54,55,46,1,183,59,101,132,72,120,237,118,40,65,47,26,47,100,159,224,157,98, + 44,203,78,154,229,1,44,235,160,84,34,63,87,54,56,109,56,136,54,111,56,110,249,126,71,132,102,61,1,108,33,63,49,29,88,88,86,176,81,94, + 175,1,9,73,114,78,40,96,80,50,115,124,134,70,103,174,125,70,64,112,151,86,71,75,121,210,154,88,88,163,231,144,86,165,156,142,63,45,95,51, + 142,52,101,48,89,100,36,75,113,220,19,36,51,32,65,79,72,64,66,80,0,1,0,100,0,0,5,213,5,242,0,23,0,0,37,51,21,33,17,52, + 46,2,35,34,14,2,29,1,35,53,16,0,33,32,0,17,4,219,250,254,59,43,90,140,97,98,139,89,41,203,1,32,1,28,1,26,1,33,175,175, + 3,139,121,171,109,50,52,109,171,119,32,57,1,39,1,39,254,214,254,220,0,2,0,105,0,0,5,185,5,226,0,26,0,36,0,0,1,34,14,2, + 7,1,21,33,34,46,2,62,1,55,62,1,55,1,51,19,62,3,51,1,14,1,30,1,51,33,1,14,1,5,38,45,112,124,133,67,2,116,251,196, + 66,110,75,35,20,81,77,67,161,89,254,228,243,188,80,159,150,136,56,252,145,80,68,14,89,77,2,244,253,234,71,129,5,41,35,64,91,57,252,114, + 164,32,69,108,153,200,126,109,201,88,1,151,254,238,66,107,74,40,252,126,133,169,96,35,2,251,74,166,0,1,0,178,255,227,6,35,5,213,0,23, + 0,0,1,17,16,0,33,32,0,25,1,51,17,20,30,2,51,50,62,2,53,17,33,21,5,41,254,223,254,230,254,228,254,224,203,42,89,140,98,97, + 140,89,42,1,197,5,38,253,11,254,221,254,213,1,39,1,39,3,164,252,117,120,171,109,51,51,109,171,120,3,139,175,0,1,0,146,255,227,5,89, + 5,241,0,55,0,0,1,20,14,2,32,46,2,53,51,20,30,2,51,50,62,2,53,52,38,35,33,53,33,50,62,2,53,52,38,32,6,21,35,52, + 62,2,50,30,2,21,20,14,2,7,30,3,5,89,77,153,230,254,206,229,152,76,203,43,96,155,113,112,155,94,42,202,201,253,176,2,80,81,119,77, + 37,159,254,202,160,203,74,136,191,234,192,137,76,37,64,84,46,68,117,87,50,1,188,103,173,126,71,74,130,175,101,65,114,87,50,50,86,112,62,128, + 127,175,39,67,92,53,118,113,114,123,95,149,103,54,53,102,147,93,59,104,83,60,15,17,63,91,118,0,0,1,0,0,255,227,5,113,5,213,0,23, + 0,0,1,17,20,30,2,51,50,62,2,61,1,51,21,16,0,33,32,0,25,1,35,53,1,197,41,90,140,99,98,139,89,41,203,254,223,254,229,254, + 230,254,223,250,5,213,252,117,120,171,109,51,51,110,170,120,32,57,254,220,254,214,1,45,1,33,2,244,176,0,0,0,0,1,0,160,255,226,5,121, + 5,213,0,46,0,0,1,46,1,43,1,53,51,50,22,23,1,21,37,46,1,35,34,14,2,21,20,22,51,50,62,2,61,1,51,21,20,14,2,35, + 34,46,2,53,52,62,2,55,2,100,56,138,85,141,219,106,162,71,2,107,254,150,26,64,42,111,186,135,75,208,211,105,155,101,50,203,82,156,228,145, + 146,233,163,88,78,138,189,111,5,0,25,18,170,24,30,254,254,212,148,11,13,72,134,192,121,240,248,60,109,152,92,71,75,128,211,151,83,86,165,242, + 156,126,215,165,107,19,0,0,0,1,0,178,0,0,5,41,5,242,0,21,0,0,51,17,16,0,33,32,0,25,1,35,17,52,46,2,35,34,14,2, + 21,17,178,1,32,1,28,1,26,1,33,203,43,90,139,96,98,139,90,42,3,164,1,39,1,39,254,214,254,220,252,92,3,139,121,171,109,50,50,109, + 171,121,252,117,0,1,0,120,255,198,5,80,5,243,0,37,0,0,37,23,21,1,53,23,30,1,51,50,62,2,53,52,38,35,34,14,2,29,1,35, + 53,52,62,2,32,30,2,21,20,14,2,3,77,195,252,251,237,26,74,42,114,187,132,73,210,208,104,155,102,50,203,82,156,227,1,36,233,163,87,75, + 137,189,233,85,206,1,69,212,103,11,13,86,148,198,113,223,239,60,109,152,92,71,75,128,211,151,83,83,160,233,150,116,222,182,125,0,0,1,0,90, + 0,0,5,181,5,242,0,28,0,0,1,17,35,17,14,3,29,1,35,53,52,62,2,51,50,4,30,1,21,17,35,17,52,46,2,3,103,203,86,139, + 98,52,203,102,182,248,147,157,0,255,181,99,203,56,102,142,5,71,252,148,3,108,12,73,112,149,88,42,57,130,217,156,87,87,156,217,130,252,92,3, + 149,79,149,118,79,0,0,0,0,2,0,168,0,0,5,125,5,243,0,34,0,59,0,0,1,34,46,4,53,38,62,2,51,50,30,2,21,20,14,2, + 7,33,21,33,17,51,21,51,50,54,55,54,38,37,52,46,2,35,34,14,2,23,30,3,51,50,30,2,7,62,3,2,18,86,120,80,46,23,7,3, + 79,156,229,147,160,236,156,77,76,133,183,108,1,217,251,100,203,78,81,195,95,40,162,1,213,48,101,158,111,107,158,101,46,6,3,18,43,75,59,121, + 177,109,39,17,43,72,53,29,2,155,35,57,71,71,64,21,107,194,148,88,94,167,229,136,121,221,188,148,49,170,1,76,162,63,61,178,195,230,100,170, + 123,69,57,100,135,77,38,55,37,18,64,114,156,91,45,106,120,135,0,0,0,1,0,178,0,0,6,35,5,242,0,25,0,0,33,17,52,46,2,35, + 34,14,2,21,17,35,17,16,0,33,32,0,25,1,51,21,35,17,4,94,42,90,140,97,96,139,90,43,203,1,36,1,25,1,24,1,34,250,250,3, + 139,121,171,109,50,50,109,171,121,252,117,3,164,1,39,1,39,254,215,254,219,254,206,175,254,61,0,0,255,255,0,178,255,227,5,41,5,213,18,6, + 0,56,0,0,0,1,0,100,0,0,5,213,5,213,0,26,0,0,41,1,17,14,1,35,34,46,2,61,1,51,21,20,30,2,50,62,2,53,17,51, + 17,51,5,213,254,59,65,186,118,138,212,146,75,203,43,90,139,192,139,91,43,203,250,1,243,72,74,72,147,221,150,177,152,121,171,109,50,50,108,171, + 122,2,13,250,218,0,0,0,0,1,0,150,255,227,5,14,5,238,0,61,0,0,19,51,20,30,2,51,50,62,2,53,52,46,2,39,46,5,39,38, + 62,2,50,30,2,21,35,46,3,35,34,14,2,23,30,3,23,30,3,21,20,14,2,32,46,2,150,203,53,96,135,82,80,136,100,56,54,97,137,84, + 67,127,113,95,70,40,2,2,73,135,191,234,195,141,78,203,3,39,78,122,86,79,120,79,36,4,4,38,75,113,80,136,213,148,78,82,150,213,254,252, + 210,149,80,1,195,68,116,84,48,32,68,105,73,58,85,61,40,13,10,30,45,63,88,115,75,90,154,114,64,61,108,145,84,44,84,66,41,39,70,95, + 55,50,73,53,37,13,23,66,105,153,110,102,164,115,61,75,130,175,0,0,0,1,0,178,0,0,5,41,5,242,0,21,0,0,51,17,16,0,33,32, + 0,17,21,35,53,52,46,2,35,34,14,2,21,17,178,1,34,1,22,1,23,1,40,203,44,92,140,96,98,138,88,41,3,164,1,37,1,41,254,221, + 254,213,57,32,121,171,109,50,50,109,171,121,252,117,0,0,0,2,0,160,255,227,5,103,5,241,0,49,0,64,0,0,1,20,14,2,32,46,2,53, + 51,20,30,2,51,50,62,2,53,52,38,35,33,53,51,46,3,53,52,62,2,50,30,2,21,20,14,2,7,30,3,1,50,62,2,53,52,38,32,6, + 21,20,30,2,5,103,77,153,230,254,206,229,152,76,203,43,96,155,113,112,155,94,42,202,201,253,176,224,32,55,40,23,74,136,191,234,192,137,76,37, + 64,84,46,68,117,87,50,253,155,81,119,77,37,159,254,202,160,24,68,124,1,188,103,173,126,71,74,130,175,101,65,114,87,50,50,86,112,62,128,127, + 175,17,50,63,74,41,95,149,103,54,53,102,147,93,59,104,83,60,15,17,63,91,118,1,103,39,67,92,53,118,115,116,123,38,85,74,48,0,0,0, + 0,1,0,188,0,0,4,77,5,213,0,7,0,0,1,17,33,21,33,17,35,17,1,135,2,198,253,58,203,5,213,254,139,175,252,79,5,213,0,0, + 0,3,0,120,0,0,6,4,5,213,0,5,0,15,0,39,0,0,1,14,1,16,22,23,51,62,3,52,46,2,39,3,46,3,16,62,2,55,53,51, + 21,30,3,16,14,2,7,21,35,2,215,193,209,209,193,203,93,149,104,56,56,104,149,93,203,135,224,160,88,88,160,224,135,203,135,224,161,90,90,161, + 224,135,203,4,142,7,217,254,118,216,7,4,59,107,152,196,153,108,59,3,252,16,6,84,150,213,1,12,214,152,84,5,159,159,5,84,152,214,254,244, + 213,152,84,5,157,0,0,0,0,2,0,50,0,0,5,110,5,242,0,27,0,43,0,0,1,34,46,2,39,17,33,21,33,21,35,53,35,53,51,17, + 16,0,33,50,30,2,20,14,2,0,20,30,2,50,62,2,52,46,2,34,14,1,3,42,62,110,94,75,26,3,152,252,104,203,190,190,1,34,1,23, + 139,217,148,77,77,148,216,254,6,36,86,141,210,142,85,37,38,87,142,208,140,86,1,215,21,37,52,30,254,230,175,154,154,175,2,101,1,36,1,32, + 78,139,194,232,193,138,77,2,90,156,129,92,50,50,91,129,158,133,97,54,55,97,0,0,255,255,0,115,255,227,5,217,5,240,18,6,0,50,0,0, + 0,3,0,110,255,230,5,248,5,213,0,31,0,41,0,51,0,0,0,20,14,1,4,32,36,46,1,61,1,51,21,20,30,2,23,17,34,46,2,53, + 52,54,59,1,17,50,30,1,37,17,34,14,2,20,30,2,0,52,46,2,35,17,62,2,5,248,100,186,254,249,254,186,254,250,183,98,203,60,107,148, + 87,119,175,115,56,237,239,192,133,224,162,253,46,79,102,60,23,23,60,102,2,172,56,105,149,92,90,149,105,2,132,254,201,140,75,77,142,200,124,39, + 39,86,135,93,52,4,2,230,42,80,112,71,153,146,254,81,75,141,216,1,11,16,33,51,70,50,32,15,253,138,170,137,96,51,253,29,4,52,95,0, + 0,1,0,117,3,239,1,135,6,20,0,14,0,0,1,34,39,38,52,55,54,51,21,34,6,21,20,22,51,1,135,115,80,79,79,80,115,64,88,88, + 64,3,239,80,80,230,79,80,123,88,63,64,88,0,0,0,0,1,0,178,3,254,1,215,5,213,0,5,0,0,1,51,21,3,35,19,1,4,211,164, + 129,82,5,213,152,254,193,1,63,0,0,0,0,1,0,0,4,245,1,223,6,109,0,3,0,0,1,51,1,35,1,24,199,254,186,153,6,109,254,136, + 0,1,0,5,4,241,2,217,7,37,0,21,0,0,1,14,3,21,35,52,62,2,55,62,3,53,51,20,14,2,1,111,58,90,61,31,122,51,94,134, + 83,66,91,57,26,122,46,90,136,5,195,5,36,57,72,40,64,123,98,63,6,4,37,57,72,40,71,123,94,59,0,0,255,255,255,255,4,240,1,222, + 6,102,16,7,0,67,255,85,0,0,0,0,0,1,0,8,4,232,3,53,6,237,0,41,0,0,19,35,38,62,2,51,50,30,2,21,20,14,2,35, + 34,46,2,39,51,30,3,51,50,62,2,53,52,46,2,39,38,14,2,117,109,1,71,126,174,102,63,122,96,60,32,61,91,60,39,79,67,49,7,134, + 3,19,27,30,14,26,38,25,12,28,48,66,38,74,133,101,59,4,240,121,190,130,68,34,70,110,76,48,82,62,35,19,43,71,51,15,24,18,9,19, + 30,37,18,39,60,42,24,3,6,46,99,147,0,1,0,90,4,241,3,178,6,20,0,5,0,0,19,17,51,21,33,21,90,140,2,204,4,241,1,35, + 169,122,0,0,0,1,0,174,255,228,7,17,4,96,0,42,0,0,37,14,1,35,34,46,2,53,17,51,17,20,30,2,51,50,62,2,53,17,51,17, + 20,22,51,50,62,2,53,17,51,17,35,53,14,1,35,34,38,3,162,69,191,131,87,136,93,49,185,28,58,86,59,71,114,81,43,185,113,120,70,114, + 80,43,185,185,63,176,121,124,168,214,126,116,63,120,176,113,2,164,253,78,81,113,72,32,49,92,131,82,2,122,253,98,163,155,50,93,130,81,2,122, + 251,160,174,105,97,122,0,0,0,1,0,186,254,86,4,100,4,123,0,22,0,0,1,53,16,35,34,6,21,17,33,21,33,17,35,17,51,21,62,1, + 51,50,22,29,1,3,172,248,149,172,2,241,253,15,185,185,66,178,118,194,197,1,194,220,1,61,190,164,254,39,160,254,86,6,10,174,102,99,238,233, + 226,0,0,0,0,2,0,113,254,86,5,47,4,123,0,16,0,40,0,0,0,20,30,2,50,62,2,53,52,46,2,34,14,1,1,35,17,14,1,35, + 34,46,2,16,62,2,51,50,22,23,53,51,17,51,21,35,1,47,43,81,116,146,117,81,43,44,81,116,146,116,81,3,0,184,58,176,125,102,168,121, + 67,67,121,168,102,125,176,58,184,213,213,2,148,202,161,112,60,60,112,161,101,100,161,113,60,60,112,251,33,2,82,100,97,85,155,217,1,6,217,155, + 85,97,100,170,252,64,160,0,0,1,0,186,254,86,5,58,4,123,0,22,0,0,33,17,35,17,16,35,34,6,21,17,35,17,51,21,62,1,51,50, + 22,21,17,51,21,4,101,185,248,149,172,185,185,66,178,118,194,198,213,254,86,4,72,1,61,190,164,253,135,4,96,174,102,99,238,233,253,252,160,0, + 0,1,0,174,255,227,4,98,6,20,0,26,0,0,19,17,51,17,33,21,33,17,20,23,22,51,50,55,54,61,1,51,17,35,53,14,1,35,34,39, + 38,174,184,2,252,253,4,62,61,125,152,84,86,184,184,67,176,118,193,100,100,1,186,4,90,254,76,160,254,1,159,80,79,95,98,161,235,253,48,172, + 103,98,120,119,0,2,0,113,254,86,5,47,4,123,0,21,0,45,0,0,1,51,21,33,17,14,1,35,34,46,2,16,62,2,51,50,22,23,53,51, + 1,20,30,2,51,50,62,4,53,52,46,2,35,34,14,4,4,90,213,254,115,58,176,125,102,168,121,67,67,121,168,102,125,176,58,184,252,213,33,73, + 120,87,60,93,70,48,30,13,33,75,119,87,60,93,69,48,30,13,254,246,160,2,82,100,97,85,155,217,1,6,217,155,85,97,100,170,253,207,78,156, + 123,77,37,65,85,97,102,48,78,155,124,77,38,64,86,96,102,0,0,0,0,1,0,186,0,0,3,236,6,20,0,9,0,0,41,1,17,51,17,33, + 21,33,17,33,3,151,253,35,184,2,122,253,134,2,37,6,20,254,76,160,252,224,0,0,0,1,0,186,254,86,4,100,4,123,0,20,0,0,33,17, + 16,35,34,6,21,17,33,21,33,17,51,21,62,1,51,50,22,21,17,3,172,248,149,172,2,241,252,86,185,66,178,118,194,197,2,158,1,61,190,164, + 252,125,160,6,10,174,102,99,238,233,253,92,0,2,0,186,254,86,5,232,4,123,0,44,0,60,0,0,1,33,52,46,2,35,34,14,2,21,17,35, + 17,51,21,62,3,51,50,30,4,21,51,21,35,14,3,35,34,46,2,52,62,2,5,33,34,14,2,21,20,30,2,51,50,62,2,3,102,1,49,72, + 118,151,79,82,140,103,59,185,185,42,99,109,118,61,68,136,126,109,81,46,146,150,18,96,129,148,70,72,127,96,56,55,90,115,1,102,254,214,26,50, + 40,24,23,43,64,41,25,81,81,68,2,47,100,161,112,61,41,90,142,101,251,235,6,10,170,60,76,44,17,39,72,104,131,155,87,160,113,161,105,49, + 36,73,110,148,111,73,37,160,15,33,51,36,29,49,38,21,23,61,105,0,0,2,0,113,255,227,5,47,6,20,0,16,0,38,0,0,1,33,34,14, + 2,21,20,30,2,51,50,62,2,53,19,17,20,14,2,34,46,2,53,52,62,2,51,33,17,51,17,51,21,3,162,254,198,73,116,81,43,43,81,116, + 73,81,118,77,38,184,66,127,186,242,187,127,66,64,127,187,123,1,60,184,213,3,192,53,102,149,97,101,161,112,60,60,113,160,101,1,145,254,57,114, + 195,144,81,86,155,216,131,113,203,154,91,1,180,254,76,160,0,1,0,186,254,86,4,100,6,20,0,18,0,0,1,17,35,17,16,35,34,6,21,17, + 35,17,51,17,62,1,51,50,22,4,100,184,248,149,172,185,185,66,178,118,194,197,2,164,253,92,2,158,1,61,190,164,251,221,7,190,253,158,102,99, + 238,0,0,0,0,1,0,186,254,86,2,108,4,96,0,5,0,0,1,51,21,33,17,51,1,114,250,254,78,184,254,246,160,6,10,0,0,1,0,186, + 254,86,7,29,6,20,0,42,0,0,1,21,20,22,51,50,62,2,53,17,51,17,35,53,14,1,35,34,46,2,53,17,16,35,34,14,2,21,17,35, + 17,51,17,62,3,51,50,22,4,72,113,120,70,114,80,43,185,185,63,176,121,61,129,107,68,247,75,110,72,36,185,185,19,65,87,104,59,195,196,2, + 164,226,163,155,50,93,130,81,2,122,251,160,174,105,97,41,101,169,129,1,2,1,61,50,92,131,81,251,221,7,190,253,158,39,73,55,34,236,0,0, + 0,2,0,113,255,227,4,116,6,20,0,24,0,45,0,0,1,19,51,7,5,33,21,35,30,1,21,20,14,2,34,46,2,53,52,62,2,55,3,20, + 30,2,51,50,62,2,53,52,46,2,39,35,34,14,2,1,6,194,212,164,1,66,1,55,125,67,61,68,131,192,246,192,130,68,62,111,154,91,225,40, + 81,119,80,79,120,80,40,18,43,71,52,135,78,120,81,41,5,10,1,10,226,210,160,78,215,132,122,206,151,85,85,151,206,122,120,198,148,94,16,253, + 192,83,149,111,65,65,111,149,83,77,119,99,86,44,69,117,154,0,0,0,0,1,0,174,254,86,4,88,6,20,0,19,0,0,19,17,51,17,16,51, + 50,55,54,53,17,51,17,35,17,14,1,35,34,38,174,184,248,149,86,87,184,184,67,176,118,194,199,1,186,4,90,251,173,254,194,95,94,165,2,123, + 249,246,2,86,103,98,239,0,255,255,0,186,0,0,4,100,6,20,18,6,0,75,0,0,0,2,0,106,255,226,4,48,6,20,0,45,0,66,0,0, + 1,21,14,1,7,22,18,21,17,35,53,14,3,35,34,46,2,55,62,3,55,46,3,53,52,63,1,51,7,14,1,7,6,30,2,55,62,1,1,20, + 30,2,51,50,62,2,61,1,52,46,2,39,14,3,3,60,26,52,26,169,179,184,27,72,92,112,67,98,156,106,55,3,2,62,109,154,94,68,93,59, + 26,34,36,199,42,19,15,1,2,46,71,87,40,27,57,254,10,33,67,101,68,77,120,82,43,30,69,112,81,61,108,82,48,5,44,177,16,32,18,100, + 254,229,185,253,255,172,45,74,54,29,66,120,170,105,96,183,173,163,75,10,52,71,83,41,68,53,57,63,29,59,23,45,63,34,2,17,18,34,252,160, + 69,115,83,45,55,93,123,68,86,53,119,117,104,38,50,117,135,154,0,0,0,1,0,186,254,86,5,57,4,123,0,20,0,0,1,21,33,17,16,35, + 34,6,21,17,35,17,51,21,62,1,51,50,22,21,17,5,57,254,115,248,149,172,185,185,66,178,118,194,197,254,246,160,4,72,1,61,190,164,253,135, + 4,96,174,102,99,238,233,252,82,0,0,0,0,2,0,140,255,227,4,90,6,36,0,40,0,62,0,0,19,53,51,62,3,51,50,22,23,21,38,35, + 34,14,2,7,51,50,30,2,21,17,35,53,14,3,35,34,46,2,39,38,18,55,19,30,3,51,50,62,2,61,1,52,46,2,43,1,14,3,140,196, + 55,141,167,193,107,25,45,22,52,50,71,127,114,98,42,3,119,209,156,90,184,24,70,92,116,69,102,151,102,53,3,5,54,56,86,6,45,73,97,56, + 70,115,83,46,42,98,159,117,71,29,42,27,10,3,182,170,96,165,122,69,6,4,189,29,42,75,104,61,76,138,194,119,253,175,174,44,74,54,31,65, + 114,155,90,131,1,29,139,253,253,88,117,70,29,51,91,124,73,104,64,134,109,69,65,135,132,126,0,0,0,1,0,174,255,227,5,45,6,20,0,22, + 0,0,19,17,51,17,16,51,50,62,2,53,17,33,21,35,17,35,53,14,1,35,34,38,174,184,248,75,119,83,45,1,141,213,184,67,176,118,195,198, + 1,186,2,166,253,97,254,194,50,92,131,81,4,47,160,250,140,172,103,98,238,0,0,0,0,1,255,212,254,86,1,114,4,96,0,11,0,0,19,51, + 17,20,6,43,1,53,51,50,54,53,186,184,163,181,70,49,105,76,4,96,251,140,214,192,156,97,153,0,0,1,255,217,255,227,4,88,6,20,0,22, + 0,0,3,33,17,16,51,50,62,2,53,17,51,17,35,53,14,1,35,34,38,53,17,35,39,1,141,248,75,119,83,45,184,184,67,176,118,195,198,213, + 6,20,251,173,254,194,50,92,131,81,2,123,251,160,172,103,98,238,233,3,186,0,0,0,0,1,0,0,254,86,3,123,4,123,0,49,0,0,23,20, + 30,2,51,33,21,33,34,46,2,53,52,62,6,53,52,46,2,35,34,6,7,53,62,3,51,50,30,2,21,20,14,6,193,4,10,20,17,2,80,253, + 116,42,68,48,26,60,98,125,131,125,98,60,45,82,115,71,91,154,78,38,74,79,89,53,115,184,129,69,60,98,126,130,126,98,60,217,8,17,15,9, + 160,27,47,63,36,49,106,113,118,124,127,131,133,67,72,105,68,33,38,42,174,14,23,15,8,53,108,162,109,75,149,144,135,124,111,94,74,0,0,0, + 255,255,0,186,0,0,4,100,4,123,18,6,0,81,0,0,0,1,0,10,254,86,2,246,4,96,0,49,0,0,19,33,21,33,34,46,2,53,52,62, + 4,55,46,3,53,52,62,2,55,51,14,3,21,20,30,2,55,62,1,55,7,14,3,21,20,30,2,252,1,250,253,214,36,70,55,33,35,60,83,96, + 106,53,47,110,95,63,11,32,59,48,231,59,77,44,17,38,63,82,45,25,66,35,1,102,169,121,66,4,11,17,254,246,160,22,46,70,47,58,135,142, + 144,137,125,51,2,32,68,107,76,30,63,70,77,44,37,72,67,62,26,48,68,40,14,5,3,21,18,183,89,203,200,184,69,12,26,20,13,0,0,0, + 0,1,0,174,254,86,7,17,4,96,0,42,0,0,37,14,1,35,34,46,2,53,17,51,17,20,30,2,51,50,62,2,53,17,51,17,20,22,51,50, + 62,2,53,17,51,17,35,17,14,1,35,34,38,3,162,69,191,131,87,136,93,49,185,28,58,86,59,71,114,81,43,185,113,120,70,114,80,43,185,185, + 63,176,121,124,168,214,126,116,63,120,176,113,2,164,253,78,81,113,72,32,49,92,131,82,2,122,253,98,163,155,50,93,130,81,2,122,249,246,2,88, + 105,97,122,0,0,2,0,110,254,86,3,244,4,124,0,44,0,68,0,0,1,20,14,6,21,20,22,51,33,21,33,34,46,2,53,52,54,55,62,3, + 39,46,5,53,52,62,2,51,50,30,2,37,34,14,2,21,20,30,4,21,20,7,62,3,53,52,46,2,3,244,60,98,126,131,126,98,60,31,21,2, + 80,253,116,38,67,49,29,82,72,25,35,20,4,6,8,42,54,59,49,32,73,120,154,80,110,176,123,66,254,37,43,86,68,42,31,46,55,46,31,50, + 60,130,108,69,40,75,106,2,210,78,153,145,137,125,110,93,73,25,23,26,160,25,43,57,32,66,144,73,25,68,76,79,36,47,82,75,72,77,84,50, + 79,134,96,54,58,110,158,170,26,52,77,51,33,66,68,72,76,83,44,81,79,58,126,132,138,72,69,105,72,36,0,0,0,1,0,186,0,0,4,224, + 4,123,0,36,0,0,1,34,14,2,21,17,35,17,51,21,62,1,51,50,30,2,21,20,14,2,7,33,21,33,53,62,3,53,52,46,2,2,193,79, + 124,86,45,185,185,63,189,121,99,162,116,63,33,61,86,53,1,41,253,253,63,96,66,34,35,71,108,3,219,52,90,122,70,253,115,4,96,172,97,102, + 70,125,174,103,83,139,123,113,57,160,132,52,109,121,138,80,73,129,97,56,255,255,0,174,255,227,4,88,4,123,18,6,0,88,0,0,0,1,0,174, + 254,86,5,45,6,20,0,22,0,0,19,17,51,17,16,51,50,62,2,53,17,51,17,51,21,33,17,14,1,35,34,38,174,184,248,75,119,83,45,184, + 213,254,115,67,176,118,195,198,1,186,2,166,253,97,254,194,50,92,131,81,4,47,248,226,160,2,86,103,98,238,0,0,0,1,0,174,255,227,7,28, + 4,123,0,39,0,0,1,17,51,21,62,3,51,50,22,21,17,35,17,16,35,34,14,2,21,17,35,53,14,1,35,34,38,53,17,51,17,16,51,50, + 62,2,3,143,184,33,79,87,91,44,195,196,184,248,60,107,80,46,184,67,177,100,195,198,184,248,63,111,83,48,1,229,2,123,174,51,75,50,25,236, + 235,253,92,2,158,1,61,50,92,131,81,253,135,172,103,98,238,233,2,166,253,97,254,194,47,91,132,0,0,1,0,186,254,86,4,100,4,123,0,20, + 0,0,1,17,35,17,16,35,34,14,2,21,17,35,17,51,21,62,1,51,50,22,4,100,184,248,75,119,83,44,185,185,66,178,118,195,196,2,164,253, + 92,2,158,1,61,50,92,131,81,251,221,6,10,174,103,98,236,0,0,0,255,255,0,111,254,86,4,88,4,123,16,6,0,74,254,0,0,1,0,186, + 0,0,3,152,4,96,0,5,0,0,37,33,21,33,17,51,1,114,2,38,253,34,184,160,160,4,96,0,0,1,0,174,254,86,7,28,6,20,0,39, + 0,0,1,17,51,17,62,3,51,50,22,21,17,35,17,16,35,34,14,2,21,17,35,17,14,1,35,34,38,53,17,51,17,16,51,50,62,2,3,143, + 184,33,79,87,91,44,195,196,184,248,57,106,81,49,184,67,177,100,195,198,184,248,63,111,83,48,1,229,4,47,253,158,51,75,50,25,236,235,253,92, + 2,158,1,61,47,90,132,85,251,221,2,86,103,98,238,233,2,166,253,97,254,194,47,91,132,0,0,0,0,2,0,41,254,86,4,164,4,123,0,27, + 0,44,0,0,37,17,33,21,33,21,35,53,35,53,51,17,51,21,62,1,51,50,30,2,16,14,2,35,34,38,1,52,46,2,34,14,2,20,30,2, + 50,62,2,1,115,3,21,252,235,185,145,145,185,58,176,124,102,168,122,67,67,122,168,102,124,176,2,56,43,81,116,146,116,81,43,43,81,116,146,117, + 80,43,168,254,168,155,95,95,155,5,16,170,100,97,86,155,216,254,250,216,155,86,97,1,235,100,161,112,61,60,112,161,202,161,112,60,60,113,160,0, + 255,255,0,111,255,227,4,115,4,123,16,6,0,82,254,0,0,3,0,70,254,86,6,33,6,20,0,39,0,46,0,56,0,0,0,16,14,2,35,17, + 35,17,34,46,4,61,1,51,21,20,30,2,51,17,34,46,2,53,52,62,2,59,1,17,50,30,1,37,17,34,6,21,20,22,0,52,46,2,35,17, + 50,62,1,6,33,103,180,243,139,184,87,164,145,120,86,48,180,80,131,169,90,98,156,111,59,59,111,156,98,184,142,243,178,253,21,125,116,123,3,10, + 69,125,176,106,106,176,125,2,199,254,248,214,151,82,254,86,1,170,39,73,103,128,149,83,93,86,87,152,114,66,3,26,43,79,110,67,72,112,77,39, + 254,76,70,137,207,1,38,79,72,66,77,253,128,192,143,95,47,252,230,57,107,0,0,0,0,1,0,174,255,227,6,126,6,20,0,22,0,0,37,33, + 21,33,53,14,1,35,34,38,53,17,51,17,16,51,50,62,2,55,17,51,4,88,2,38,253,34,67,176,118,195,198,184,248,73,117,84,46,2,184,160, + 160,172,103,98,238,233,4,90,251,173,254,194,47,88,125,77,2,140,0,0,0,2,0,240,0,0,1,195,3,82,0,3,0,7,0,0,55,51,21,35, + 17,51,21,35,240,211,211,211,211,254,254,3,82,254,0,0,0,1,0,100,1,178,2,127,2,131,0,6,0,0,19,4,37,21,6,36,39,100,1,15, + 1,12,136,254,245,136,2,131,90,90,164,45,1,44,0,0,0,2,2,68,254,67,2,218,255,211,0,3,0,7,0,28,180,4,3,5,1,9,16,220, + 60,204,50,49,0,182,6,2,0,4,2,0,8,16,220,220,220,73,58,48,5,51,21,35,21,51,21,35,2,68,150,150,150,150,45,150,100,150,0,0, + 255,255,0,171,254,67,3,130,255,211,16,39,5,16,0,168,0,0,17,7,5,22,254,228,0,0,0,19,176,16,75,82,88,187,0,0,0,4,0,4, + 0,64,56,16,60,49,89,0,0,3,0,255,254,67,3,162,255,211,0,3,0,7,0,11,0,37,182,0,3,8,4,9,5,13,16,220,60,220,60,220, + 204,49,0,64,9,10,6,4,8,6,3,4,1,12,16,220,60,220,60,220,73,58,48,5,53,33,21,55,51,21,35,21,51,21,35,0,255,1,144,125, + 150,150,150,150,195,150,150,150,150,100,150,0,0,3,0,255,254,67,3,162,255,211,0,3,0,7,0,15,0,46,64,9,12,11,8,15,4,0,5,1, + 17,16,220,60,220,60,220,220,220,204,49,0,64,11,7,2,0,5,10,2,8,11,0,13,16,16,220,60,220,60,60,204,220,73,58,48,5,51,21,35, + 21,51,21,35,39,21,35,53,35,53,33,21,3,12,150,150,150,150,250,150,125,1,144,45,150,100,150,250,200,200,150,150,0,1,2,68,254,187,2,218, + 255,81,0,3,0,16,181,2,0,4,0,1,5,16,220,204,49,0,16,220,204,48,5,51,21,35,2,68,150,150,175,150,255,255,1,199,254,187,3,87, + 255,81,16,38,5,20,125,0,17,6,5,20,131,0,0,15,178,0,0,5,73,83,88,185,0,0,0,64,56,89,49,0,0,3,1,199,254,67,3,87, + 255,211,0,3,0,7,0,11,0,79,64,9,4,11,10,5,0,1,11,10,13,16,212,204,220,204,220,73,58,49,178,0,8,5,73,83,88,65,12,0, + 11,0,10,0,9,0,8,0,64,0,4,0,7,0,6,0,5,0,4,255,192,0,4,23,56,23,56,89,0,64,9,3,11,8,0,11,7,8,4,12, + 16,220,60,220,60,220,73,58,48,1,51,21,35,3,51,21,35,55,51,21,35,2,68,150,150,125,150,150,250,150,150,254,217,150,1,144,150,150,150,0, + 0,1,1,99,254,187,3,187,255,81,0,3,0,16,181,2,0,4,0,2,5,16,220,204,49,0,16,220,204,48,5,33,21,33,1,99,2,88,253,168, + 175,150,0,0,0,1,1,99,254,117,3,187,255,161,0,7,0,25,180,5,2,0,6,9,16,220,220,220,204,49,0,180,1,0,3,5,8,16,220,220, + 60,204,48,5,21,35,53,35,53,33,21,2,218,150,225,2,88,245,150,150,150,150,0,0,0,1,0,0,5,0,0,150,5,150,0,3,0,16,181,1, + 3,4,1,3,4,16,212,204,49,0,16,220,204,48,17,51,21,35,150,150,5,150,150,0,255,255,0,0,5,0,0,150,5,150,16,6,5,25,0,0, + 255,255,1,47,254,27,3,185,255,221,16,39,5,20,0,223,255,96,16,38,5,20,229,246,17,7,5,20,254,235,0,140,0,61,178,0,10,4,73,83, + 88,185,0,10,255,192,56,89,179,0,4,10,5,16,73,58,49,0,178,0,9,12,73,83,88,185,0,9,255,192,56,89,178,0,4,9,73,83,88,185, + 0,4,255,192,56,89,179,0,4,9,4,16,73,58,48,0,0,1,2,78,1,229,2,228,2,123,0,3,0,16,181,1,3,4,3,1,5,16,212,204, + 49,0,16,220,204,48,1,51,21,35,2,78,150,150,2,123,150,0,0,0,0,1,2,68,254,67,2,218,255,211,0,3,0,16,181,2,0,4,0,2, + 5,16,220,204,49,0,16,220,204,48,5,51,17,35,2,68,150,150,45,254,112,0,0,0,0,1,0,100,3,198,2,127,4,106,0,3,0,0,19,33, + 21,33,100,2,27,253,229,4,106,164,0,0,0,1,1,99,5,0,3,187,5,150,0,3,0,16,181,1,3,4,3,1,5,16,212,204,49,0,16,220, + 204,48,1,33,21,33,1,99,2,88,253,168,5,150,150,0,0,1,0,209,255,56,1,139,5,40,0,3,0,28,180,5,2,8,0,4,16,212,236,204, + 49,0,178,1,2,4,16,204,204,48,180,64,5,80,5,2,1,93,19,51,17,35,209,186,186,5,40,250,16,0,0,0,0,1,5,25,5,0,5,175, + 5,150,0,3,0,16,181,1,3,4,1,3,4,16,212,204,49,0,16,220,204,48,1,51,21,35,5,25,150,150,5,150,150,0,0,0,0,1,0,197, + 5,0,1,91,5,150,0,3,0,16,181,1,3,4,1,3,4,16,212,204,49,0,16,220,204,48,19,51,21,35,197,150,150,5,150,150,0,2,0,209, + 0,0,1,139,4,96,0,3,0,7,0,35,182,9,2,6,8,0,4,8,16,212,50,236,50,204,49,0,180,3,1,188,5,7,47,204,244,204,48,180, + 64,9,80,9,2,1,93,19,51,21,35,17,51,21,35,209,186,186,186,186,4,96,202,253,52,202,0,0,0,1,0,102,0,0,2,220,4,96,0,13, + 0,29,182,15,5,12,9,8,13,14,16,212,236,212,204,204,49,0,182,5,169,4,188,10,169,12,47,236,244,236,48,19,16,54,59,1,21,35,34,6, + 21,17,33,21,33,102,205,227,146,148,134,110,1,188,253,138,2,94,1,14,244,143,150,194,254,22,143,0,0,1,1,99,254,67,3,187,255,211,0,7, + 0,25,180,5,2,0,6,9,16,220,220,220,204,49,0,180,1,0,3,5,8,16,220,220,60,204,48,5,21,35,53,35,53,33,21,2,218,150,225,2, + 88,195,250,250,150,150,0,0,0,1,0,186,0,0,4,159,4,96,0,39,0,111,183,41,70,31,8,30,1,8,2,183,22,8,21,10,8,11,70,40, + 16,252,236,212,252,220,183,127,2,127,2,111,2,95,2,178,63,2,5,93,236,212,75,176,29,83,88,185,0,30,255,192,56,89,252,252,183,74,3,58, + 3,41,3,122,3,178,68,3,5,93,75,176,10,81,88,185,0,41,255,192,56,89,49,0,180,31,22,188,10,1,47,47,252,196,183,58,0,58,3,85, + 29,91,9,182,101,23,106,3,121,9,7,93,48,9,1,35,1,14,4,21,17,35,53,52,62,5,55,1,51,1,62,4,53,17,51,21,20,14,5,3, + 128,1,29,217,254,96,28,35,56,33,26,184,20,31,50,45,65,44,31,254,228,217,1,160,27,35,56,34,26,184,20,31,50,46,64,44,1,155,254,101, + 2,88,14,21,53,65,110,69,254,244,185,81,138,96,81,50,44,21,13,1,155,253,168,13,21,54,65,110,69,1,12,185,82,137,97,81,49,44,21,0, + 0,1,0,88,0,0,4,72,4,96,0,21,0,54,183,23,19,17,8,0,8,21,22,16,220,212,220,252,220,220,180,116,10,111,7,2,93,49,75,176, + 10,81,88,185,0,23,255,192,56,89,0,183,8,169,9,188,17,169,21,169,176,20,47,236,236,252,236,48,37,17,52,46,3,35,33,53,33,50,30,3, + 21,17,51,21,33,53,2,232,11,38,69,121,87,254,182,1,74,123,177,116,69,27,166,252,16,143,1,207,75,99,102,58,37,143,46,85,139,166,114,254, + 85,143,143,0,0,1,0,88,255,246,3,17,4,96,0,31,0,63,183,33,3,8,4,0,8,22,27,177,13,32,16,220,212,212,236,220,236,204,180,116, + 29,92,16,2,93,75,176,15,81,75,176,13,83,90,88,125,176,6,47,24,89,49,0,183,27,169,28,188,32,16,169,11,176,3,47,47,236,16,252,236, + 48,1,20,18,23,35,38,39,14,3,35,34,39,53,22,51,50,62,3,53,52,46,1,43,1,53,51,50,22,2,127,69,77,199,58,25,33,70,80,80, + 55,46,51,34,36,44,69,86,56,40,51,101,92,90,96,221,203,2,94,144,254,192,142,135,112,81,103,54,19,14,169,10,13,52,91,170,117,151,161,59, + 143,244,0,0,0,1,0,88,0,0,4,23,4,96,0,7,0,40,182,9,0,1,8,4,5,8,16,220,220,252,220,220,49,75,176,10,81,88,185,0, + 9,255,192,56,89,0,181,1,4,169,6,188,3,47,252,252,196,48,1,35,17,35,17,33,53,33,4,23,198,186,253,193,3,191,3,209,252,47,3,209, + 143,0,0,0,0,2,0,186,0,0,4,128,4,96,0,3,0,15,0,60,183,17,70,4,8,7,11,1,8,178,2,70,16,16,252,236,212,212,252,252, + 180,112,13,106,10,2,93,75,176,10,81,88,185,0,17,255,192,56,89,49,0,183,11,169,12,188,2,0,3,2,176,6,47,47,212,196,16,252,252,48, + 1,17,35,17,5,17,35,17,52,38,35,33,53,33,32,22,1,136,185,3,177,185,129,186,254,46,1,208,1,21,225,2,172,253,84,2,96,38,253,198, + 2,96,216,153,143,250,0,0,0,1,0,186,0,0,1,116,4,96,0,3,0,33,182,5,70,1,8,2,70,4,16,252,252,252,75,176,10,81,88,185, + 0,5,255,192,56,89,49,0,178,3,188,1,47,228,48,1,17,35,17,1,116,186,4,96,251,160,4,96,0,1,0,88,0,0,2,109,4,96,0,13, + 0,69,182,15,1,5,8,8,13,14,16,220,220,252,220,220,49,75,176,14,83,75,176,16,81,90,88,124,176,2,47,24,179,106,3,90,3,180,106,11, + 90,11,4,93,49,89,75,176,10,81,88,185,0,15,255,192,56,89,0,181,2,12,169,13,188,7,47,252,252,196,48,1,21,35,34,6,21,17,35,17, + 52,54,55,35,53,2,109,80,87,65,186,77,56,248,4,96,143,155,189,253,135,2,121,127,178,39,143,0,0,1,0,186,0,0,4,128,4,96,0,13, + 0,55,183,15,70,1,8,2,8,8,9,177,70,14,16,252,252,220,252,252,178,112,11,1,93,75,176,10,81,88,185,0,15,255,192,56,89,49,0,181, + 7,169,10,188,8,2,47,47,252,236,178,116,0,1,93,0,48,1,17,35,17,52,38,35,33,17,35,17,33,32,22,4,128,186,130,184,254,231,185,1, + 208,1,20,226,2,94,253,162,2,121,198,146,252,47,4,96,240,0,0,0,0,1,0,185,255,227,4,191,4,107,0,31,0,91,183,33,25,8,10,17, + 1,8,30,177,70,32,16,252,252,220,220,183,116,20,112,20,127,10,47,10,178,160,10,5,93,252,220,49,75,176,10,81,88,185,0,33,255,192,56,89, + 0,183,15,169,20,31,188,32,5,169,176,28,47,236,16,252,196,236,181,108,10,110,25,110,30,181,92,10,94,25,94,30,183,68,10,68,1,52,10,52, + 1,176,10,93,48,1,17,20,30,2,50,62,2,53,52,46,2,35,34,7,53,54,51,50,30,2,21,16,2,32,2,25,1,1,114,45,89,116,160,116, + 89,45,19,48,90,67,66,93,114,87,102,144,84,37,252,253,242,252,4,96,253,180,116,162,91,40,40,91,162,116,113,157,125,61,30,143,30,81,159,210, + 141,254,212,254,243,1,13,1,44,2,68,0,0,1,0,136,1,162,1,66,4,96,0,3,0,35,180,5,1,8,2,4,16,220,252,220,49,75,176,10, + 81,88,185,0,5,255,192,56,89,0,180,1,2,0,188,4,16,228,47,196,48,1,17,7,17,1,66,186,4,96,253,142,76,2,190,0,0,1,0,88, + 254,86,3,146,4,96,0,16,0,56,182,18,70,0,8,3,10,17,16,220,220,252,252,180,97,12,95,9,2,93,75,176,10,81,88,185,0,18,255,192, + 56,89,49,0,182,10,169,11,188,1,189,17,16,236,252,236,182,95,3,79,3,63,3,3,93,48,1,17,35,17,52,46,3,35,33,53,33,50,30,2, + 3,146,186,21,50,88,127,93,254,251,1,1,168,214,134,53,1,238,252,104,3,152,114,155,117,66,31,143,61,151,232,0,0,1,0,88,0,0,3,202, + 4,96,0,25,0,53,182,27,7,8,19,14,25,26,16,220,212,220,252,220,183,79,15,79,24,63,15,63,24,176,4,93,49,75,176,10,81,88,185,0, + 27,255,192,56,89,0,182,25,169,0,188,14,169,13,47,236,252,236,48,19,33,50,30,3,20,14,3,35,33,53,33,50,62,2,52,46,2,35,33,88, + 1,88,117,187,120,80,34,34,80,120,187,117,254,168,1,88,100,141,78,34,34,78,141,100,254,168,4,96,64,107,146,157,172,157,146,107,64,142,62,117, + 145,188,145,117,62,0,0,0,0,1,0,88,0,0,3,240,5,213,0,8,0,54,183,10,7,8,1,8,8,0,5,178,8,2,9,16,220,252,220,252, + 212,178,127,1,1,93,252,220,49,75,176,10,81,88,185,0,10,255,192,56,89,0,182,7,2,169,4,5,188,0,47,252,204,252,196,48,33,1,33,17, + 51,17,5,7,1,1,129,1,148,253,67,187,2,221,3,254,87,3,209,2,4,254,139,1,110,252,15,0,0,2,0,186,0,0,4,149,4,96,0,8, + 0,15,0,52,183,17,70,0,8,11,10,8,1,177,70,16,16,252,252,220,252,252,49,75,176,10,81,88,185,0,17,255,192,56,89,0,182,9,169,2, + 188,10,169,1,47,236,244,236,180,111,12,126,12,2,93,48,41,1,17,33,50,30,2,21,1,17,33,17,52,38,35,4,149,252,37,1,227,141,192,119, + 52,252,223,2,103,130,185,4,96,58,129,189,138,1,115,252,190,1,234,198,146,0,0,0,0,1,0,88,0,0,4,181,4,112,0,37,0,100,183,39, + 70,12,8,17,14,27,8,180,28,1,8,0,38,16,220,236,212,178,112,28,1,93,252,220,220,252,252,183,74,35,58,35,42,35,28,35,183,104,35,90, + 35,74,4,104,4,180,115,4,12,35,8,93,75,176,10,81,88,185,0,39,255,192,56,89,49,0,183,20,169,10,0,188,15,169,14,176,27,47,47,236, + 252,212,252,183,88,4,108,17,92,17,118,4,178,127,17,5,93,48,19,51,30,1,23,62,4,51,32,25,1,33,53,33,17,52,38,35,34,7,6,7, + 6,7,3,35,19,62,4,53,52,2,88,217,4,66,22,28,77,76,98,76,51,1,146,253,206,1,120,122,97,180,86,48,42,2,5,98,186,80,3,15, + 5,7,3,93,4,96,11,157,78,70,100,54,30,8,253,238,253,162,142,1,208,195,187,160,91,206,14,23,254,18,1,162,16,73,27,51,39,22,64,1, + 7,0,0,0,0,1,0,186,254,86,1,116,4,96,0,3,0,36,182,5,70,1,8,2,70,4,16,252,252,252,75,176,10,81,88,185,0,5,255,192, + 56,89,49,0,180,2,189,3,188,4,16,228,228,48,1,17,35,17,1,116,186,4,96,249,246,6,10,0,0,1,0,88,0,0,2,120,4,96,0,13, + 0,49,183,15,70,11,8,0,5,13,14,16,220,212,220,252,252,75,176,10,81,88,185,0,15,255,192,56,89,49,0,182,5,169,6,188,13,169,12,47, + 236,252,236,180,16,10,0,10,2,93,48,37,17,52,38,43,1,53,51,50,22,21,17,33,53,1,190,100,106,126,126,205,187,253,224,143,2,88,123,111, + 143,177,221,253,46,143,0,0,0,2,0,185,255,227,4,191,4,96,0,9,0,19,0,93,183,21,4,8,15,12,8,9,70,176,20,16,252,252,220,178, + 127,15,1,93,252,220,182,74,10,60,10,96,1,3,93,49,183,89,7,84,6,105,7,100,6,176,4,93,75,176,10,81,88,185,0,21,255,192,56,89, + 0,183,10,169,0,188,20,14,169,6,47,236,16,252,252,183,52,15,52,12,38,15,38,12,183,66,15,66,12,82,3,100,3,176,8,93,48,19,33,32, + 4,17,16,0,32,0,17,1,33,17,16,32,17,52,46,2,185,1,231,1,29,1,2,255,0,253,250,255,0,1,231,254,210,2,148,45,95,127,4,96, + 250,254,212,254,208,254,217,1,39,1,48,1,141,254,107,254,73,1,191,117,156,88,36,0,0,1,0,88,255,66,4,72,4,96,0,19,0,75,183,21, + 70,2,8,1,15,8,12,177,14,20,16,220,196,252,220,252,252,182,62,13,29,13,15,13,3,93,49,75,176,10,81,88,185,0,21,255,192,56,89,0, + 183,16,169,11,169,12,1,188,14,177,188,21,16,228,228,212,236,228,180,20,16,5,16,2,93,48,180,103,13,71,13,2,93,1,17,51,17,20,14,4, + 7,5,53,37,1,51,1,62,1,18,3,136,192,19,49,88,136,194,130,254,128,1,36,254,212,194,1,20,132,144,70,3,68,1,28,254,228,118,178,175, + 136,127,106,47,139,169,104,4,13,252,50,57,150,1,8,0,0,1,0,186,254,86,4,100,4,96,0,23,0,94,183,25,70,0,8,3,13,8,8,178, + 19,70,24,16,252,252,212,220,252,252,49,75,176,10,81,88,185,0,25,255,192,56,89,0,183,16,169,11,7,169,20,188,2,177,189,24,16,236,252,252, + 220,183,74,19,31,11,15,11,47,11,176,4,93,75,176,23,80,75,176,18,83,90,88,185,0,11,0,64,56,89,252,183,106,3,92,3,74,3,127,4, + 176,4,93,48,1,17,35,17,52,38,43,1,21,20,22,51,50,55,21,6,35,34,38,53,17,33,32,22,4,100,186,145,169,253,71,74,41,67,82,67, + 134,155,1,182,1,16,228,2,94,251,248,4,10,208,161,240,73,69,13,152,16,148,176,1,100,245,0,0,0,1,0,186,0,0,4,142,4,96,0,28, + 0,106,183,30,3,8,12,22,16,8,7,178,0,70,29,16,252,196,252,212,220,180,95,12,63,12,2,93,252,220,183,61,14,61,10,75,14,75,10,176, + 4,93,49,75,176,10,81,88,185,0,30,255,192,56,89,0,183,25,169,20,16,169,0,188,9,177,169,6,47,236,252,252,125,220,178,95,20,1,113,24, + 182,112,20,80,20,74,28,3,93,75,176,25,80,75,176,18,83,90,88,185,0,20,0,64,56,89,252,48,19,33,32,0,16,0,41,1,53,33,50,54, + 53,52,38,43,1,7,6,22,51,50,55,21,6,35,34,38,53,186,1,170,1,2,1,40,254,215,254,255,254,86,1,94,236,209,216,228,165,1,1,72, + 74,41,67,82,67,134,155,4,96,254,220,253,232,254,220,142,192,238,219,186,222,73,69,13,152,16,148,176,0,1,0,88,254,86,3,249,4,99,0,22, + 0,71,183,24,8,8,7,3,14,8,17,179,0,8,22,23,16,220,252,212,252,196,220,178,127,7,1,93,252,220,183,54,3,68,3,84,3,5,3,176, + 4,93,49,75,176,10,81,88,185,0,24,255,192,56,89,0,181,7,0,188,16,189,23,16,236,252,196,178,55,3,1,93,48,1,23,22,23,62,1,61, + 1,51,21,20,14,2,7,17,35,17,52,46,1,39,3,1,37,159,102,58,117,104,184,61,104,128,72,186,57,61,49,211,4,99,228,146,153,46,195,151, + 132,132,111,186,126,83,18,252,134,3,38,80,171,106,73,1,57,0,0,0,0,1,0,88,0,0,4,5,4,96,0,26,0,108,183,28,70,23,13,8, + 12,2,8,178,26,1,27,16,220,196,252,220,176,12,75,81,176,16,75,83,90,88,185,0,12,0,64,56,177,12,0,47,16,89,252,196,252,183,60,22, + 59,3,63,0,72,3,183,108,0,89,0,95,0,74,22,182,105,22,124,0,61,0,9,93,49,75,176,10,81,88,185,0,28,255,192,56,89,0,181,12, + 1,188,26,169,25,47,236,252,196,183,84,22,56,3,84,3,116,3,176,4,93,48,37,1,51,1,54,55,62,4,53,17,51,21,20,14,5,7,1,21, + 33,53,2,244,253,100,218,1,131,4,7,24,26,44,24,19,184,18,26,46,38,61,36,30,1,3,252,83,142,3,210,253,201,3,5,17,22,52,55,90, + 55,1,12,185,74,125,88,77,46,47,21,16,254,142,71,142,0,2,0,186,254,86,5,17,4,95,0,3,0,10,0,82,176,7,183,12,8,8,5,10, + 8,4,1,180,8,2,6,70,11,16,252,212,252,220,252,212,183,79,5,95,5,111,5,127,5,176,4,93,252,204,49,75,176,10,81,88,185,0,12,255, + 192,56,89,0,183,2,1,6,169,7,188,0,189,176,4,47,236,252,252,220,196,178,175,1,1,93,180,64,9,80,9,2,113,48,1,17,7,17,9,1, + 33,53,33,21,1,1,140,186,1,211,1,148,252,129,4,87,254,87,254,86,4,86,76,251,246,1,170,3,209,142,110,252,15,0,0,0,0,1,0,88, + 0,0,3,202,4,96,0,17,0,64,182,19,70,1,8,2,10,18,16,220,220,252,236,49,176,14,75,84,176,15,75,84,91,88,176,12,47,49,89,75, + 176,10,81,88,185,0,19,255,192,56,89,0,180,10,169,11,188,2,47,252,236,48,75,176,16,80,88,177,3,0,47,47,48,89,1,17,35,17,52,46, + 3,35,33,53,33,50,30,3,3,202,186,21,51,80,126,82,254,176,1,79,126,191,122,77,31,2,58,253,198,2,58,73,118,105,70,41,143,53,93,141, + 161,0,0,0,0,1,0,88,0,0,5,83,4,96,0,40,0,162,183,42,32,8,31,15,8,14,3,182,8,2,22,8,1,2,41,16,220,212,252,16, + 252,220,180,16,14,0,14,2,93,252,220,183,72,6,59,6,43,6,16,31,183,0,31,80,0,96,0,112,0,176,8,93,252,220,75,176,11,80,88,187, + 0,22,255,192,0,1,255,192,56,56,49,177,4,21,47,125,47,24,89,183,32,0,48,0,87,21,87,4,176,4,93,49,183,102,19,103,4,119,4,118, + 19,178,135,4,5,93,75,176,10,81,88,185,0,42,255,192,56,89,0,183,21,169,4,31,14,2,188,22,177,169,0,47,236,252,196,196,220,183,175,4, + 31,4,47,4,159,4,176,4,93,236,182,67,29,67,34,72,37,3,93,48,33,35,3,51,19,62,8,55,51,2,7,6,7,6,7,19,50,62,6,55, + 51,14,7,1,174,188,154,185,73,48,75,56,40,29,17,15,8,13,6,165,18,24,41,108,95,167,43,98,151,146,107,99,69,56,34,10,185,18,42,61, + 75,105,129,171,203,4,96,253,241,1,15,33,35,64,53,93,69,121,43,254,252,103,171,69,61,6,254,205,15,40,67,105,146,197,250,157,166,252,228,163, + 137,87,61,26,0,1,0,20,255,248,4,136,4,96,0,30,0,73,183,32,70,1,8,3,10,8,23,179,8,24,17,31,16,220,212,252,252,220,252,252, + 49,180,208,25,208,24,2,93,75,176,10,81,88,185,0,32,255,192,56,89,0,183,19,169,14,1,10,169,24,169,178,25,188,1,47,252,236,252,16,212, + 252,182,127,3,106,3,91,3,3,93,48,1,17,35,17,52,46,3,43,1,17,20,6,35,34,39,53,22,51,50,54,53,17,35,53,33,50,30,2,4, + 136,186,10,36,64,112,80,246,123,152,53,78,65,38,71,46,173,2,93,143,193,108,44,2,94,253,162,2,96,74,99,101,58,37,253,205,214,208,16,143, + 14,114,163,2,51,143,67,138,180,0,0,0,255,255,0,186,0,0,3,10,4,96,16,39,5,43,1,150,0,0,16,6,5,43,0,0,255,255,0,136, + 0,0,2,168,4,96,16,39,5,43,1,52,0,0,16,6,5,47,0,0,255,255,0,136,1,162,2,127,4,96,16,39,5,47,1,61,0,0,16,6, + 5,47,0,0,0,1,0,186,2,228,2,153,4,96,0,3,0,20,64,9,2,180,0,188,4,3,68,1,4,16,212,236,49,0,16,244,236,48,1,51, + 1,35,1,210,199,254,186,153,4,96,254,132,0,2,0,186,2,228,4,110,4,96,0,3,0,7,0,29,64,14,3,7,180,1,5,188,8,3,68,1, + 7,68,5,8,16,212,236,220,236,49,0,16,244,60,236,50,48,1,51,1,35,3,51,1,35,3,167,199,254,186,153,189,199,254,186,153,4,96,254,132, + 1,124,254,132,0,2,0,0,255,215,4,220,7,34,0,37,0,48,0,0,1,22,23,22,21,35,52,39,38,39,51,22,23,22,55,54,55,54,53,51, + 20,23,22,23,22,55,54,53,51,20,7,6,35,34,39,6,7,6,37,9,1,5,7,39,1,35,1,35,53,2,177,15,10,20,114,23,31,98,123,30, + 25,13,29,46,5,4,113,9,14,29,38,9,8,113,24,45,97,84,21,32,33,29,253,246,2,4,1,0,1,27,25,125,254,193,66,253,174,115,6,22, + 49,50,106,255,238,123,162,205,64,69,35,4,7,36,28,93,125,13,21,1,1,24,24,113,171,33,60,34,28,7,5,105,250,141,2,197,98,80,45,252, + 141,6,70,96,0,2,0,0,255,215,4,220,7,41,0,42,0,53,0,0,1,21,6,7,6,21,20,23,22,23,21,34,7,6,21,20,23,22,23,50, + 55,54,55,21,6,7,6,35,34,39,38,53,52,55,54,55,38,39,38,53,38,55,54,5,9,1,5,7,39,1,35,1,35,53,3,168,77,64,86,58, + 49,49,56,85,70,30,37,47,62,55,80,54,46,78,64,63,94,71,63,68,41,55,45,28,35,1,142,70,253,150,2,4,1,0,1,27,25,125,254,193, + 66,253,174,115,7,41,94,10,29,38,35,20,32,27,2,92,42,36,64,46,34,41,1,13,19,24,110,20,16,13,70,62,93,75,72,42,14,18,26,33, + 35,84,72,35,157,250,141,2,197,98,80,45,252,141,6,70,96,0,0,0,0,4,0,133,0,0,5,122,5,20,0,3,0,7,0,11,0,15,0,0, + 37,51,21,35,37,51,21,35,1,51,21,35,37,51,1,35,4,198,180,180,254,62,180,180,253,143,180,180,2,148,160,253,94,160,250,250,250,250,5,20, + 250,250,250,236,0,5,0,133,0,0,7,60,5,20,0,3,0,7,0,11,0,15,0,19,0,0,37,51,21,35,37,51,21,35,37,51,21,35,1,51, + 21,35,37,51,1,35,6,136,180,180,254,62,180,180,254,62,180,180,253,143,180,180,2,148,160,253,94,160,250,250,250,250,250,250,5,20,250,250,250,236, + 0,1,0,219,0,0,2,0,1,236,0,5,0,0,33,35,53,19,51,3,1,174,211,164,129,82,172,1,64,254,192,0,0,2,0,252,4,253,3,5, + 6,241,0,10,0,27,0,0,1,51,50,55,54,53,52,39,38,7,6,23,43,1,53,51,17,51,17,54,55,54,23,22,21,20,7,6,1,205,55,78, + 22,53,30,1,71,52,24,175,112,81,102,36,104,63,70,65,64,54,5,98,13,33,21,32,16,1,28,21,168,101,1,143,254,191,73,40,24,26,25,82, + 91,50,42,0,0,2,0,219,0,0,2,0,5,17,0,5,0,9,0,0,1,35,53,19,51,11,1,51,21,35,1,174,211,164,129,82,211,211,211,3, + 37,172,1,64,254,192,253,45,254,0,0,0,0,2,0,147,0,0,3,176,5,240,0,3,0,36,0,0,37,21,35,53,55,53,52,38,39,46,1,47, + 1,46,1,53,52,54,51,50,22,23,21,46,1,35,34,6,21,20,22,31,1,30,1,29,1,2,188,203,6,6,6,8,39,47,88,90,72,223,184,103, + 193,94,97,179,79,108,131,51,57,90,90,56,254,254,254,147,123,52,60,21,25,53,47,86,86,137,76,159,194,56,57,188,67,70,110,89,49,94,53,89, + 86,130,101,154,0,1,0,163,0,85,3,30,3,222,0,34,0,0,55,53,54,55,54,55,38,39,38,53,52,55,54,55,54,51,50,23,21,38,7,6, + 7,6,23,20,23,22,55,54,55,21,6,7,6,163,47,83,68,52,142,51,53,21,30,103,99,98,110,90,100,70,51,49,96,1,200,57,58,72,58,90, + 205,231,85,176,6,25,20,33,24,76,79,84,65,75,118,63,61,22,185,31,2,1,26,48,112,115,50,14,15,19,35,185,60,80,90,0,255,255,255,181, + 0,0,2,133,7,131,16,39,5,123,255,29,1,194,16,6,5,84,0,0,255,255,0,108,0,0,1,195,7,253,16,39,5,124,255,29,1,134,16,6, + 5,84,0,0,255,255,255,171,254,12,3,64,4,181,16,39,5,124,255,194,254,62,16,6,5,112,0,0,255,255,0,108,254,12,1,195,6,20,16,39, + 5,125,255,29,0,0,16,6,5,84,0,0,255,255,0,130,254,243,5,192,4,181,16,39,5,124,255,244,254,62,16,6,5,113,0,0,0,1,0,193, + 0,0,1,121,6,20,0,3,0,0,19,51,17,35,193,184,184,6,20,249,236,0,0,0,255,255,0,130,254,162,6,235,2,157,16,38,5,142,0,0, + 16,7,22,196,3,57,254,162,255,255,0,139,255,198,3,160,4,26,16,38,5,111,0,0,16,7,22,197,0,250,3,132,255,255,0,130,255,236,6,235, + 3,32,16,38,5,142,0,0,16,7,22,197,2,188,2,138,255,255,0,130,255,236,6,235,4,26,16,38,5,142,0,0,16,7,22,198,2,188,2,138, + 255,255,0,157,254,12,5,40,3,102,16,38,5,90,0,0,16,7,22,196,3,7,0,25,0,1,0,157,254,12,5,40,3,102,0,30,0,0,19,36, + 51,32,23,21,32,7,6,17,20,23,22,33,50,55,21,6,35,32,39,38,53,16,55,54,55,34,7,6,7,157,1,20,195,1,36,196,254,218,215,224, + 74,127,1,75,193,212,150,250,254,94,169,131,212,96,137,101,159,126,104,3,39,63,54,154,167,174,254,251,135,96,164,118,184,99,194,150,224,1,2,223, + 101,52,19,15,45,0,0,0,255,255,0,157,254,12,5,40,4,176,16,38,5,90,0,0,16,7,22,196,2,63,4,26,0,1,0,125,255,218,3,27, + 3,82,0,25,0,0,37,54,55,54,53,52,39,38,39,51,22,23,22,21,20,7,6,5,6,35,34,39,53,22,51,50,1,135,172,35,8,60,66,173, + 227,113,66,82,32,80,254,250,46,45,102,103,115,84,33,151,49,112,27,42,78,116,129,146,91,124,152,105,99,75,194,41,7,38,184,42,255,255,0,125, + 255,218,3,27,4,176,16,38,5,92,0,0,16,7,22,196,1,69,4,26,0,1,255,171,254,12,3,98,2,38,0,17,0,0,37,54,53,52,39,51, + 22,21,20,7,2,5,4,33,53,32,55,54,2,163,10,53,184,50,8,46,254,221,254,228,254,190,1,48,203,218,158,58,72,126,136,118,132,82,62,254, + 162,155,151,184,128,138,0,0,255,255,255,171,254,12,3,98,3,182,16,38,5,94,0,0,16,7,22,196,2,113,3,32,0,1,0,130,254,12,9,26, + 2,238,0,63,0,0,37,6,7,6,7,6,35,38,39,36,17,52,55,51,6,23,22,23,22,51,50,55,54,55,54,39,38,47,1,51,23,22,23,22, + 51,50,55,54,53,51,20,23,22,51,50,25,1,51,17,20,7,6,7,6,35,34,39,38,39,6,7,6,7,6,4,252,24,84,133,193,80,120,128,109, + 254,237,105,184,108,1,1,147,95,81,98,95,121,94,64,1,1,16,64,184,36,16,28,59,115,82,44,37,184,19,64,110,142,184,92,75,102,37,32,73, + 48,138,17,49,95,50,70,132,44,179,107,170,62,26,1,28,71,1,72,246,180,206,220,179,38,24,37,48,158,108,142,125,61,234,156,74,60,129,122,103, + 194,205,50,169,1,24,1,38,254,170,199,113,92,24,9,25,70,123,159,30,15,3,6,0,255,255,0,130,254,12,9,26,4,176,16,38,5,96,0,0, + 16,7,22,198,4,226,3,32,0,2,0,130,254,12,9,19,2,229,0,50,0,63,0,0,5,6,7,6,35,38,39,36,17,52,55,51,6,23,22,23, + 22,51,50,55,54,55,54,53,52,39,51,6,23,22,23,54,55,54,55,54,23,22,23,22,21,20,7,6,41,1,34,39,38,53,20,1,34,7,6,7, + 51,50,55,54,39,38,39,38,4,144,88,238,80,120,128,109,254,237,105,184,108,1,1,147,95,81,102,91,162,43,33,39,171,1,14,10,40,115,123,126, + 129,79,81,125,97,186,184,202,254,228,254,236,38,52,45,2,161,76,126,168,145,187,237,129,187,1,2,137,37,242,155,77,26,1,28,71,1,72,246,180, + 206,220,179,38,24,37,68,138,108,127,147,138,15,55,40,50,146,108,110,54,34,1,2,37,71,233,169,109,120,30,26,16,186,2,169,81,108,194,63,91, + 70,135,19,5,255,255,0,130,254,12,9,19,3,182,16,38,5,98,0,0,16,7,22,196,4,251,3,32,0,2,0,144,0,0,6,220,6,20,0,12, + 0,31,0,0,37,51,50,55,54,39,38,39,38,35,34,7,6,19,41,1,53,33,17,51,17,18,37,54,51,50,23,22,21,20,7,6,3,65,187,237, + 129,187,1,2,137,37,48,80,122,177,117,253,193,254,145,1,111,184,217,1,20,92,68,120,102,186,184,202,184,63,93,68,135,19,5,81,120,254,146,184, + 5,92,251,14,1,63,99,33,39,69,235,169,109,120,0,0,255,255,0,144,0,0,6,220,6,20,16,38,5,100,0,0,16,7,22,196,3,207,3,82, + 0,1,0,117,254,12,4,178,4,42,0,42,0,0,5,22,33,50,55,21,6,35,32,39,38,53,52,55,54,55,38,39,38,53,52,55,54,51,21,34, + 7,6,21,20,23,22,51,50,55,54,55,21,4,7,6,21,20,1,83,119,1,83,193,212,150,250,254,91,166,98,87,113,77,51,47,88,204,124,252,195, + 116,93,48,45,46,40,41,158,254,254,239,236,209,177,158,118,184,99,188,111,201,177,101,131,25,4,30,56,130,208,127,77,169,65,52,104,75,25,24,18, + 69,29,184,26,149,131,185,117,255,255,0,117,254,12,4,178,5,70,16,38,5,102,0,0,16,7,22,196,1,119,4,176,0,1,255,236,0,0,2,108, + 0,184,0,3,0,0,35,53,33,21,20,2,128,184,184,0,255,255,0,130,255,164,7,158,5,20,16,38,5,186,0,0,16,7,22,196,5,245,4,126, + 255,255,0,107,254,72,5,155,5,20,16,38,5,143,0,0,16,7,22,197,3,82,4,126,0,2,0,144,255,201,5,199,6,20,0,33,0,61,0,0, + 1,21,6,7,6,21,20,23,22,23,22,21,20,7,6,35,34,39,53,22,51,50,55,54,53,52,39,38,39,38,55,54,55,54,1,54,25,1,51,17, + 16,7,6,7,6,39,38,39,36,53,52,55,51,6,21,22,23,22,51,50,55,54,3,208,74,38,80,14,12,68,102,88,82,78,66,56,68,45,60,57, + 60,78,74,18,32,1,2,75,85,1,102,76,184,110,149,221,136,118,207,101,254,219,16,184,14,2,160,121,127,140,89,152,4,111,82,4,14,30,33,28, + 18,16,10,15,88,110,42,39,11,88,10,26,26,30,38,17,16,28,47,46,81,38,43,252,174,73,1,1,3,177,252,79,254,185,123,167,31,19,1,2, + 30,88,195,75,53,58,44,92,46,35,27,47,0,1,0,144,254,200,5,24,6,20,0,27,0,0,37,54,53,17,51,17,16,7,6,5,6,35,34,39, + 36,3,38,55,51,6,21,20,23,22,51,50,55,54,4,18,78,184,98,121,254,251,134,85,95,73,254,220,1,1,64,184,65,166,40,73,80,109,174,73, + 126,227,4,106,251,150,254,195,144,177,66,34,22,92,1,17,138,92,115,115,130,62,16,34,53,0,0,0,0,2,0,140,254,20,4,94,2,243,0,17, + 0,46,0,0,1,22,51,50,55,54,53,52,39,38,39,38,35,34,7,6,21,20,7,38,7,6,21,17,35,17,52,55,54,51,38,53,52,55,54,51, + 50,23,22,23,22,21,20,7,6,35,6,2,98,122,76,44,21,53,6,21,59,40,46,59,27,68,110,50,75,25,200,120,65,90,2,162,77,92,77,79, + 182,28,8,98,120,88,178,1,39,42,22,57,58,24,20,88,17,12,27,68,68,40,193,28,78,26,79,254,20,1,236,173,102,55,42,40,148,132,63,36, + 83,167,45,56,146,65,80,2,255,255,0,147,254,181,5,72,3,182,16,38,5,211,0,0,16,7,22,196,2,63,3,32,0,2,0,139,255,198,3,160, + 2,222,0,15,0,31,0,0,1,34,7,6,23,22,23,22,51,50,55,54,53,52,39,38,39,50,23,22,21,6,7,6,35,34,39,38,53,52,55,54, + 1,187,66,33,26,1,1,55,57,57,91,93,75,66,123,152,198,182,141,1,147,165,132,96,81,167,37,84,2,42,87,69,123,82,44,44,57,46,85,77, + 65,120,179,160,124,148,200,75,85,35,74,239,181,78,185,0,0,2,255,171,254,12,3,64,2,134,0,11,0,38,0,0,1,34,7,6,21,20,23,22, + 51,52,39,38,1,16,7,6,7,6,33,53,32,55,54,55,34,39,38,39,38,53,52,55,54,51,50,23,22,23,22,1,238,63,44,24,51,47,192,86, + 37,1,46,172,95,93,192,254,147,1,103,134,168,62,118,45,150,40,116,89,104,137,89,72,130,25,17,1,196,57,33,36,51,47,44,184,59,25,254,244, + 254,204,160,88,42,86,184,76,95,148,10,33,34,98,137,141,87,103,51,90,143,102,0,0,0,1,0,130,254,243,5,192,3,74,0,54,0,0,37,6, + 5,6,35,34,39,36,17,52,55,51,6,23,22,23,22,55,54,55,54,55,54,53,52,39,38,39,38,39,38,39,52,55,54,50,23,22,23,35,38,39, + 38,39,38,7,6,21,20,23,22,23,22,23,22,5,86,102,254,169,177,120,129,72,254,219,63,184,66,1,2,164,97,61,126,129,177,84,59,126,66,114, + 67,58,64,1,190,95,208,96,141,27,184,13,66,40,69,78,62,60,125,248,57,77,2,1,12,170,73,38,26,104,1,5,117,113,131,99,147,45,26,6, + 11,24,33,80,56,53,74,29,15,46,27,51,57,115,150,74,37,42,61,173,61,33,20,2,2,39,38,34,55,42,83,64,85,89,68,0,255,255,0,130, + 254,12,5,192,3,74,16,38,5,113,0,0,16,7,22,197,1,244,254,12,0,2,0,220,4,186,3,36,6,154,0,3,0,7,0,0,19,53,37,21, + 1,53,37,21,220,2,72,253,184,2,72,5,170,110,130,110,254,142,110,130,110,0,0,0,0,2,0,220,4,186,3,36,6,253,0,38,0,53,0,0, + 1,54,55,38,39,38,53,52,55,54,51,50,23,22,21,20,7,22,51,22,51,21,34,47,1,6,7,6,35,34,39,38,53,51,20,23,22,51,50,55, + 54,55,54,53,52,38,35,34,7,6,21,20,23,22,2,11,37,21,33,23,108,69,28,63,73,40,55,12,19,14,18,20,47,20,52,26,75,85,94,114, + 56,15,90,12,35,48,56,159,3,3,9,34,20,23,11,18,45,20,5,100,36,42,7,13,57,94,87,52,21,39,54,79,39,38,1,1,110,2,5,61, + 78,86,154,41,113,97,26,75,238,7,7,21,24,34,28,9,13,28,37,18,8,0,0,0,0,2,0,220,254,22,3,36,255,246,0,3,0,7,0,0, + 19,53,37,21,37,53,37,21,220,2,72,253,184,2,72,254,22,110,130,110,110,110,130,110,0,1,0,220,4,186,3,36,5,170,0,3,0,0,19,53, + 37,21,220,2,72,4,186,110,130,110,0,0,0,2,0,220,4,185,3,36,6,253,0,30,0,45,0,0,1,38,39,38,53,52,55,54,51,50,23,22, + 21,20,7,30,1,51,21,34,39,38,39,6,7,6,35,53,50,55,54,55,54,55,54,53,52,38,35,34,7,6,21,20,23,22,2,41,9,19,108,69, + 28,63,73,40,55,14,17,36,20,35,32,30,28,43,69,200,147,152,139,23,86,3,3,9,34,20,23,11,18,45,20,5,186,2,10,56,95,87,52,21, + 39,54,79,32,45,1,1,110,2,2,3,61,42,123,110,109,18,112,7,7,21,24,34,28,9,13,28,37,18,8,0,0,0,1,0,220,254,232,3,36, + 255,216,0,3,0,0,19,53,37,21,220,2,72,254,232,110,130,110,0,0,0,1,0,200,4,203,3,56,6,244,0,40,0,0,1,6,7,6,35,34, + 39,38,53,52,55,51,6,21,20,23,22,55,54,55,54,53,51,22,21,20,51,50,53,52,39,51,22,21,20,7,6,7,6,39,38,2,16,15,33,57, + 69,79,41,34,16,97,11,25,19,50,61,4,2,96,3,89,71,13,103,12,27,45,83,71,31,27,5,132,76,40,69,63,52,109,109,98,125,56,84,34, + 25,20,24,170,82,89,36,54,195,174,115,57,73,116,133,54,89,10,9,33,30,0,0,0,0,2,0,236,4,225,3,16,7,6,0,11,0,19,0,0, + 1,52,38,35,34,6,21,20,22,51,50,62,1,20,6,34,38,52,54,50,2,150,88,64,65,87,87,65,64,88,122,159,230,159,159,230,5,244,63,88, + 87,64,65,87,88,179,230,160,160,230,159,0,0,1,0,152,4,185,3,104,5,193,0,19,0,0,19,55,22,23,22,51,50,55,54,55,21,6,7,6, + 35,34,39,38,39,7,152,160,103,67,42,54,58,41,107,88,90,90,67,53,34,76,77,68,165,5,54,123,83,21,13,16,41,76,125,64,29,22,17,17, + 70,128,0,0,255,255,1,79,4,191,2,166,6,119,16,7,5,145,0,213,255,141,0,0,255,255,1,79,254,12,2,166,255,196,16,7,5,145,0,213, + 248,218,0,0,0,2,0,220,4,235,3,36,7,47,0,30,0,45,0,0,1,22,23,22,21,20,7,6,35,34,39,38,53,52,55,46,1,35,53,50, + 23,22,23,54,55,54,51,21,34,7,6,7,6,7,6,21,20,22,51,50,55,54,53,52,39,38,1,215,9,19,108,69,28,63,73,40,55,14,17,36, + 20,35,32,30,28,43,69,200,147,152,139,23,86,3,3,9,34,20,23,11,18,45,20,6,46,2,10,56,95,87,52,21,39,54,79,32,45,1,1,110, + 2,2,3,61,42,123,110,109,18,112,7,7,21,24,34,28,9,13,28,37,18,8,0,0,0,1,0,243,4,238,3,13,6,52,0,6,0,0,1,3, + 51,23,55,51,3,1,182,195,139,130,130,139,195,4,238,1,70,195,195,254,186,0,0,0,0,1,1,184,1,194,2,148,2,188,0,3,0,0,1,51, + 21,35,1,184,220,220,2,188,250,0,0,0,0,1,1,22,0,0,2,188,5,20,0,9,0,0,33,35,16,39,2,3,51,18,19,22,2,188,180,37, + 49,156,196,121,73,32,1,169,220,1,33,1,110,254,221,254,148,155,0,0,0,1,0,82,0,0,3,240,5,20,0,24,0,0,1,22,23,22,17,35, + 16,39,2,3,51,22,23,22,51,22,55,54,55,51,6,7,2,35,34,1,166,27,23,32,180,37,49,156,199,66,3,82,180,123,54,31,8,180,8,41, + 99,243,111,3,97,106,114,155,254,22,1,169,220,1,33,1,110,155,5,152,2,149,85,80,121,109,254,250,0,1,0,76,0,0,4,18,5,20,0,37, + 0,0,1,22,23,22,17,35,16,39,2,3,51,22,23,22,55,54,55,54,53,51,20,23,22,23,22,55,54,53,51,16,7,6,35,34,39,6,7,6, + 1,171,24,15,32,180,37,49,156,196,47,40,20,47,72,8,6,180,14,22,47,59,15,13,180,39,71,155,133,32,52,52,46,3,53,87,89,190,254,57, + 1,169,220,1,33,1,110,114,124,62,8,12,64,50,166,222,25,37,2,2,44,42,202,254,207,59,108,62,51,12,10,0,0,1,0,175,255,236,3,167, + 5,32,0,42,0,0,1,21,6,7,6,21,20,23,22,23,21,34,7,6,21,20,23,22,23,50,55,54,55,21,6,7,6,35,34,39,38,53,52,55, + 54,55,38,39,38,39,38,55,54,3,35,122,102,136,92,77,79,89,135,112,48,59,74,99,88,126,86,73,124,101,101,149,112,100,107,65,88,72,44,55, + 1,2,226,112,5,32,168,17,52,67,64,35,57,48,4,164,76,64,114,82,60,74,1,23,33,43,196,37,28,23,125,112,165,134,128,76,24,32,48,58, + 63,150,128,63,0,2,0,135,255,236,3,197,5,36,0,13,0,28,0,0,0,34,7,6,7,6,23,22,50,55,54,39,38,39,3,22,19,22,21,16, + 7,6,32,39,38,17,52,55,18,2,105,134,86,78,4,4,71,41,254,41,71,4,4,78,153,191,134,90,85,105,254,62,105,85,90,135,4,104,212,192, + 174,199,115,66,66,115,199,174,192,1,144,1,254,161,235,179,254,203,117,144,144,117,1,53,179,235,1,97,0,1,0,85,0,0,3,242,5,20,0,17, + 0,0,1,16,19,18,19,35,2,3,2,39,6,35,34,39,53,22,51,50,3,78,37,29,98,196,85,31,28,2,96,142,178,167,180,165,210,5,20,254, + 220,254,159,254,235,254,134,1,68,1,75,1,42,145,28,50,180,50,0,0,0,1,0,60,0,0,4,16,5,20,0,18,0,0,33,38,3,2,39,51, + 18,19,22,23,54,55,18,19,51,2,3,2,7,1,204,17,98,159,126,196,154,90,48,2,2,48,90,154,196,165,120,85,30,246,1,58,1,254,230,254, + 202,254,197,168,11,11,168,1,59,1,54,254,211,254,73,254,202,250,0,0,0,1,0,60,0,0,4,16,5,20,0,18,0,0,1,51,22,19,18,19, + 35,2,3,38,39,6,7,2,3,35,54,19,18,1,204,180,30,85,120,165,196,154,90,48,2,2,48,90,154,196,126,159,98,5,20,250,254,202,254,73, + 254,211,1,54,1,59,168,11,11,168,254,197,254,202,230,1,254,1,58,0,0,2,0,100,0,0,3,242,5,30,0,20,0,35,0,0,1,34,39,38, + 39,38,53,52,55,54,51,50,23,22,23,22,23,18,19,35,2,3,53,52,39,38,35,34,7,6,21,20,23,22,23,22,2,191,206,61,173,58,105,95, + 123,149,154,92,129,13,10,18,37,90,196,91,44,44,71,92,79,57,56,60,27,83,71,2,85,18,51,55,101,123,143,97,125,85,119,166,135,150,254,205, + 254,164,1,156,1,110,87,108,60,97,55,54,71,57,54,24,20,17,0,0,0,3,0,133,0,0,3,199,5,20,0,3,0,7,0,11,0,0,37,51, + 21,35,1,51,21,35,37,51,1,35,3,4,180,180,253,143,180,180,2,148,160,253,94,160,250,250,5,20,250,250,250,236,0,1,0,0,255,31,2,102, + 2,139,0,17,0,0,21,54,55,54,55,54,53,52,39,51,22,21,20,7,6,7,6,7,169,112,107,47,26,22,150,25,76,79,165,105,189,70,5,113, + 109,143,80,79,96,96,78,111,170,160,166,113,72,6,0,0,0,1,0,178,3,254,1,215,5,213,0,5,0,0,1,51,21,3,35,19,1,4,211,164, + 129,82,5,213,152,254,193,1,63,0,0,0,0,1,0,87,0,206,4,5,4,76,0,9,0,0,19,33,27,1,33,5,19,37,5,19,87,1,103,112, + 112,1,103,254,222,111,254,220,254,220,111,2,247,1,85,254,171,212,254,171,211,211,1,85,0,1,0,130,255,236,6,235,2,157,0,29,0,0,1,22, + 21,20,7,6,5,4,35,34,39,36,17,52,55,51,6,21,20,23,22,51,50,37,36,55,54,53,52,39,6,220,15,76,128,254,195,254,227,185,191,129, + 254,182,63,184,65,203,104,151,185,1,9,0,255,67,55,25,2,157,90,70,135,101,171,64,58,38,97,1,12,138,92,94,136,125,67,34,57,54,113,93, + 75,59,61,0,0,2,0,107,254,72,5,155,3,217,0,15,0,56,0,0,1,54,53,52,39,38,7,6,7,6,7,20,23,22,51,50,1,50,55,36, + 17,6,35,34,39,38,53,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,37,38,39,38,53,52,55,51,6,7,6,23,22,4,168,41, + 66,31,44,52,40,40,1,55,40,42,72,253,128,240,162,1,74,63,122,133,75,98,8,23,150,78,76,99,57,103,39,33,60,92,243,206,254,206,211,133, + 77,82,183,85,3,1,12,53,2,25,43,77,59,51,25,1,1,42,41,51,80,38,25,253,6,115,234,1,72,75,67,87,129,52,44,148,69,36,50,90, + 119,102,160,204,140,213,189,159,1,1,191,110,174,180,216,185,155,60,52,229,0,1,1,201,4,209,2,55,7,25,0,3,0,0,1,17,51,17,1,201, + 110,4,209,2,72,253,184,0,0,1,0,122,5,50,1,209,6,234,0,24,0,0,19,55,38,39,38,53,52,55,54,51,50,23,21,38,35,34,7,6, + 21,20,23,22,55,21,5,122,78,44,16,16,56,58,92,62,52,50,64,66,17,29,94,33,120,254,169,5,150,18,20,36,37,45,96,43,45,33,100,33, + 18,32,26,77,27,10,29,102,77,0,0,0,255,255,0,130,255,236,6,235,4,153,16,38,5,142,0,0,16,7,5,75,1,132,253,168,255,255,0,130, + 255,236,6,235,4,26,16,38,5,142,0,0,16,7,22,200,3,57,3,132,255,255,0,130,254,12,6,235,2,157,16,38,5,142,0,0,16,7,22,200, + 3,57,255,6,255,255,0,130,254,144,6,235,3,32,16,38,5,142,0,0,16,39,22,197,2,188,2,138,16,7,22,213,2,169,254,144,255,255,0,130, + 255,236,6,235,3,182,16,38,5,142,0,0,16,7,22,199,2,188,3,32,255,255,0,130,254,12,6,235,2,157,16,38,5,142,0,0,16,7,22,199, + 2,188,255,6,255,255,0,130,255,236,6,235,4,26,16,38,5,142,0,0,16,7,22,201,2,188,3,132,255,255,0,130,254,12,6,235,2,157,16,38, + 5,142,0,0,16,7,22,201,2,188,255,6,255,255,0,157,254,12,5,40,5,175,16,38,5,90,0,0,16,7,5,124,0,138,255,56,255,255,0,157, + 254,12,5,40,5,170,16,38,5,90,0,0,16,7,22,200,2,63,5,20,255,255,0,157,254,12,5,40,3,102,16,38,5,90,0,0,16,7,22,197, + 2,138,0,25,255,255,0,157,254,12,5,40,3,102,16,38,5,90,0,0,16,7,22,200,3,7,0,175,255,255,0,157,254,12,5,40,5,170,16,38, + 5,90,0,0,16,7,22,198,1,194,4,26,255,255,0,157,254,12,5,40,3,102,16,38,5,90,0,0,16,7,22,199,2,150,0,150,255,255,0,157, + 254,12,5,40,3,102,16,38,5,90,0,0,16,7,22,201,2,150,0,175,255,255,0,125,255,218,3,27,5,247,16,38,5,92,0,0,16,7,5,75, + 255,194,255,6,255,255,0,125,254,144,3,27,3,82,16,38,5,92,0,0,16,7,22,213,1,25,254,144,255,255,0,125,254,162,3,27,3,82,16,38, + 5,92,0,0,16,7,22,196,1,169,254,162,255,255,0,125,254,162,3,27,5,247,16,39,22,196,1,169,254,162,16,38,5,92,0,0,16,7,5,75, + 255,194,255,6,255,255,0,125,255,218,3,27,4,176,16,38,5,92,0,0,16,7,22,197,0,250,4,26,255,255,0,125,254,212,3,27,3,82,16,38, + 5,92,0,0,16,7,22,197,1,43,254,212,255,255,0,125,255,218,3,27,5,170,16,38,5,92,0,0,16,7,22,198,0,250,4,26,255,255,0,125, + 255,218,3,27,5,120,16,38,5,92,0,0,16,7,22,199,0,250,4,226,255,255,0,125,255,218,3,27,5,170,16,38,5,92,0,0,16,7,22,201, + 0,250,5,20,255,255,255,171,254,12,3,193,5,47,16,39,5,75,0,188,254,62,16,6,5,94,0,0,255,255,255,171,254,12,3,201,4,114,16,39, + 5,127,0,188,254,62,16,6,5,94,0,0,255,255,255,171,254,12,4,14,2,38,16,38,5,94,0,0,16,7,22,213,2,88,254,12,255,255,255,171, + 254,12,3,202,2,38,16,38,5,94,0,0,16,7,22,196,3,52,254,72,255,255,255,171,254,12,5,19,2,38,16,39,5,127,2,6,249,30,16,6, + 5,94,0,0,255,255,255,171,254,12,3,202,2,38,16,39,22,196,3,52,254,72,16,38,5,94,0,0,16,7,22,196,0,180,0,40,255,255,255,171, + 254,12,3,132,3,182,16,38,5,94,0,0,16,7,22,197,1,244,3,32,255,255,255,171,254,12,3,132,4,176,16,38,5,94,0,0,16,7,22,198, + 1,244,3,32,255,255,255,171,254,12,3,132,4,176,16,38,5,94,0,0,16,7,22,201,1,244,4,26,255,255,0,130,254,12,9,26,3,182,16,38, + 5,96,0,0,16,39,22,196,5,95,3,32,16,7,22,196,5,245,254,162,255,255,0,130,254,12,9,26,2,238,16,38,5,96,0,0,16,7,22,199, + 5,120,255,6,255,255,0,130,254,12,9,26,4,176,16,38,5,96,0,0,16,39,22,198,4,226,3,32,16,7,22,199,5,120,255,6,255,255,0,130, + 254,12,9,19,2,229,16,38,5,98,0,0,16,7,22,197,5,120,254,162,255,255,0,130,254,12,9,19,4,176,16,38,5,98,0,0,16,7,22,198, + 4,126,3,32,255,255,0,144,0,0,6,220,6,20,16,38,5,100,0,0,16,7,22,198,3,132,3,82,255,255,0,117,254,12,4,178,6,64,16,38, + 5,102,0,0,16,7,22,198,1,44,4,176,0,2,0,130,255,164,7,158,3,217,0,15,0,58,0,0,1,54,53,52,39,38,7,6,7,6,7,20, + 23,22,51,50,19,6,5,4,33,32,39,36,3,38,55,51,6,21,20,23,22,33,32,55,54,55,54,55,6,35,34,39,38,53,52,55,54,55,54,51, + 50,23,22,23,22,7,6,6,181,41,66,31,44,52,40,40,1,55,40,42,72,179,110,254,195,254,239,254,225,254,217,130,254,183,1,1,64,184,65,203, + 90,1,24,1,65,209,215,100,35,20,63,122,133,75,98,8,23,150,78,76,90,66,96,46,24,1,2,2,25,43,77,59,51,25,1,1,42,41,51,80, + 38,25,254,218,180,70,61,41,100,1,9,138,92,94,136,116,76,34,57,59,108,38,78,75,67,87,129,52,44,148,69,36,50,72,102,54,137,226,0,0, + 255,255,0,130,254,162,7,158,3,217,16,38,5,186,0,0,16,7,22,196,3,107,254,162,255,255,0,130,254,162,7,158,5,20,16,38,5,186,0,0, + 16,39,22,196,5,245,4,126,16,7,22,196,3,107,254,162,255,255,0,130,255,164,7,158,6,14,16,38,5,186,0,0,16,7,22,198,5,120,4,126, + 255,255,0,130,253,168,7,158,3,217,16,38,5,186,0,0,16,7,22,199,2,238,254,162,255,255,0,130,255,164,7,158,6,14,16,38,5,186,0,0, + 16,7,22,201,5,120,5,120,255,255,0,107,254,72,5,155,5,20,16,38,5,143,0,0,16,7,22,196,3,207,4,126,255,255,0,107,254,72,5,155, + 6,14,16,38,5,143,0,0,16,7,22,198,3,82,4,126,0,1,0,130,255,167,7,41,6,20,0,45,0,0,37,50,55,54,55,54,53,52,39,1, + 38,53,52,55,54,55,1,21,5,6,7,6,21,20,23,1,22,21,20,7,6,5,6,35,34,39,36,17,52,55,51,6,21,20,23,22,3,2,184,194, + 157,36,16,54,254,202,50,10,35,100,2,233,253,173,71,21,6,31,1,19,102,62,53,254,247,227,161,192,128,254,182,63,184,65,203,104,88,80,65,55, + 26,46,69,66,1,124,61,81,35,33,119,42,1,54,186,250,30,40,11,25,32,37,254,182,123,123,113,101,86,85,73,38,98,1,11,138,92,94,136,126, + 66,34,0,0,0,1,0,130,255,167,8,0,6,20,0,46,0,0,1,53,52,55,54,55,1,33,1,6,7,6,23,22,23,5,22,21,20,7,6,4, + 35,33,34,39,36,17,52,55,51,6,21,20,23,22,51,33,50,36,54,61,1,52,39,37,36,1,199,11,17,162,2,176,1,96,252,104,95,15,9,4, + 6,174,3,202,248,62,53,254,20,161,254,12,192,128,254,182,63,184,65,203,104,151,1,244,184,1,109,47,121,252,89,254,157,3,107,8,5,62,98,97, + 1,155,253,232,55,35,10,35,53,27,150,38,248,113,101,86,158,38,98,1,11,138,92,94,136,126,66,34,150,106,8,8,106,19,145,55,255,255,0,130, + 255,167,7,41,6,20,16,38,5,194,0,0,16,7,22,213,5,70,3,132,255,255,0,144,255,201,5,199,6,20,16,38,5,107,0,0,16,7,22,196, + 2,238,5,70,255,255,0,144,255,201,5,199,6,214,16,38,5,107,0,0,16,7,22,198,2,113,5,70,255,255,0,144,253,168,5,199,6,20,16,38, + 5,107,0,0,16,7,22,199,2,88,254,162,255,255,0,130,255,167,7,41,7,43,16,38,5,194,0,0,16,7,22,232,3,202,0,0,255,255,0,130, + 255,167,7,41,7,43,16,38,5,200,0,0,16,7,22,213,5,70,3,132,255,255,0,130,255,167,7,41,7,58,16,38,5,200,0,0,16,7,22,197, + 3,132,6,164,255,255,0,130,254,162,7,41,7,43,16,38,5,200,0,0,16,7,22,197,2,88,254,162,255,255,0,130,253,168,7,41,7,43,16,38, + 5,200,0,0,16,7,22,200,2,213,254,162,255,255,0,130,255,167,7,41,8,52,16,38,5,200,0,0,16,7,22,198,3,132,6,164,255,255,0,144, + 254,200,5,201,7,196,16,38,5,108,0,0,16,7,5,127,2,188,1,144,255,255,0,144,254,200,5,24,7,158,16,38,5,108,0,0,16,7,22,196, + 4,106,7,8,255,255,0,144,254,200,5,120,8,52,16,38,5,108,0,0,16,7,22,198,3,232,6,164,255,255,0,144,252,224,5,24,6,20,16,38, + 5,108,0,0,16,7,22,199,2,38,253,218,255,255,0,147,253,118,5,72,3,182,16,38,5,211,0,0,16,39,22,196,2,63,3,32,16,7,22,196, + 2,188,253,118,0,1,0,147,254,181,5,72,2,238,0,29,0,0,1,20,7,6,7,6,35,34,39,36,17,52,55,51,6,21,20,23,22,51,50,55, + 54,55,54,53,52,39,51,22,5,72,100,110,249,97,80,132,109,254,184,47,184,49,201,93,93,76,71,193,76,34,102,184,104,1,56,173,178,197,68,27, + 37,106,1,100,235,81,144,172,237,52,24,20,53,222,98,96,184,222,156,0,255,255,0,147,254,181,5,72,5,22,16,38,5,211,0,0,16,7,5,75, + 0,200,254,37,255,255,0,147,253,93,5,72,3,182,16,38,5,211,0,0,16,39,22,196,2,63,3,32,16,7,22,213,2,38,253,93,255,255,0,147, + 254,181,5,72,4,176,16,38,5,211,0,0,16,7,22,198,1,244,3,32,0,3,0,144,255,189,5,27,3,229,0,10,0,50,0,63,0,0,1,52, + 35,34,6,20,23,22,23,62,1,3,6,35,34,39,38,53,52,55,51,6,21,20,22,51,50,54,55,38,39,38,53,52,55,54,51,50,23,38,39,53, + 22,23,0,17,20,7,6,35,34,19,22,21,20,15,1,22,51,50,55,54,52,38,3,95,95,65,45,7,21,68,36,73,108,150,110,57,101,193,16,184, + 14,124,27,26,56,45,72,29,18,44,45,67,7,7,44,81,218,221,1,78,40,74,175,132,127,6,98,29,52,49,125,17,7,62,1,237,135,88,65,37, + 118,51,27,136,254,104,79,32,61,172,74,54,62,40,69,38,9,33,66,132,81,72,74,81,83,1,39,14,185,66,181,254,239,254,245,103,61,113,2,63, + 37,39,147,105,33,46,67,30,93,147,0,0,255,255,0,157,254,12,5,40,4,176,16,39,22,199,2,150,0,150,16,38,5,90,0,0,16,7,22,196, + 2,63,4,26,255,255,255,171,254,12,3,64,4,114,16,39,5,127,255,244,254,62,16,6,5,112,0,0,255,255,0,130,254,243,5,192,3,74,16,6, + 5,113,0,0,255,255,0,130,254,243,5,192,4,114,16,38,5,113,0,0,16,7,5,127,255,244,254,62,255,255,0,139,255,198,3,160,2,222,16,6, + 5,111,0,0,255,255,1,184,1,194,2,148,2,188,16,6,5,128,0,0,255,255,1,22,0,0,2,188,5,20,16,6,5,129,0,0,255,255,0,82, + 0,0,3,240,5,20,16,6,5,130,0,0,255,255,0,76,0,0,4,18,5,20,16,6,5,131,0,0,0,1,0,82,0,0,3,197,5,37,0,39, + 0,0,1,38,53,52,55,54,51,50,23,21,38,7,6,7,6,21,20,23,22,55,54,55,21,6,35,34,39,22,23,22,17,35,16,39,2,3,51,22, + 23,22,1,200,4,88,92,108,84,88,92,68,56,30,31,25,47,48,69,141,195,61,141,146,27,23,32,180,37,49,156,199,66,3,27,4,20,15,19,120, + 58,61,25,156,36,2,1,33,34,21,52,21,39,2,2,17,180,26,81,106,114,155,254,22,1,169,220,1,33,1,110,155,5,56,0,0,0,2,0,106, + 255,245,3,226,5,36,0,20,0,40,0,0,1,22,51,50,55,54,53,52,39,38,35,34,7,6,21,20,23,22,51,50,55,23,6,35,34,39,38,53, + 16,55,18,51,50,19,22,17,20,7,6,35,34,2,128,45,50,33,19,27,87,90,87,88,90,86,27,15,37,50,45,90,40,145,160,46,53,95,179,170, + 159,190,95,53,50,156,145,1,90,161,74,107,86,215,216,224,224,213,218,60,133,74,161,208,149,158,184,121,1,38,196,1,118,254,138,187,254,209,139,166, + 158,0,0,0,0,1,0,208,0,0,3,144,5,31,0,32,0,0,51,18,55,54,55,34,39,38,53,52,55,54,51,50,23,21,38,35,34,7,6,21, + 20,23,22,51,50,55,21,6,7,6,7,208,65,111,68,100,78,46,134,98,112,140,120,88,87,115,62,48,66,55,44,103,140,96,225,112,134,53,0,255, + 181,111,85,37,109,151,174,97,111,31,180,51,47,65,98,77,51,41,41,180,73,152,183,225,255,255,0,60,0,0,4,16,5,20,16,6,5,135,0,0, + 255,255,0,60,0,0,4,16,5,20,16,6,5,136,0,0,255,255,0,100,0,0,3,242,5,30,16,6,5,137,0,0,0,2,0,135,255,227,4,143, + 5,240,0,11,0,21,0,40,64,11,23,27,9,28,15,30,3,28,20,27,22,16,252,236,244,236,236,49,0,64,10,6,160,22,0,160,13,145,18,140, + 22,16,228,244,236,16,236,48,1,34,2,17,16,18,51,50,18,17,16,2,36,32,0,17,16,0,32,0,17,16,2,139,156,157,157,156,157,157,157,254, + 104,1,246,1,9,254,247,254,10,254,247,5,80,254,205,254,204,254,205,254,205,1,51,1,51,1,52,1,51,160,254,115,254,134,254,135,254,115,1,141, + 1,121,1,122,0,1,0,225,0,0,4,90,5,213,0,10,0,40,64,9,3,31,5,28,8,0,31,10,12,16,212,236,204,252,252,49,0,64,11,8, + 160,7,9,160,6,129,4,0,160,2,47,236,50,244,236,212,236,48,37,21,33,53,33,17,51,5,21,37,17,4,61,252,164,1,74,202,1,101,254,153, + 170,170,170,5,43,72,184,72,251,141,0,0,0,1,0,225,0,0,4,61,5,213,0,9,0,31,183,1,28,2,4,8,28,7,10,16,220,236,50,212, + 236,49,0,182,3,160,9,2,8,129,6,47,228,50,212,236,48,1,17,51,17,33,17,35,17,51,17,3,117,200,253,108,200,200,3,231,1,238,253,104, + 252,195,5,213,254,18,0,0,0,1,0,225,0,0,4,61,5,213,0,9,0,31,182,3,7,28,9,5,1,10,16,220,50,212,236,50,49,0,183,6, + 160,4,9,129,3,160,1,47,236,244,212,236,48,41,1,53,33,17,33,53,33,17,51,4,61,252,164,2,148,253,108,2,148,200,170,1,185,170,2,200, + 0,1,0,225,0,0,4,61,5,213,0,9,0,32,183,5,28,1,7,9,28,3,10,16,220,236,212,50,236,49,0,183,4,160,8,7,129,0,160,2, + 47,236,228,212,236,48,37,33,21,33,17,33,17,51,17,33,1,169,2,148,252,164,2,148,200,253,108,170,170,3,13,2,200,252,142,0,0,1,0,225, + 0,0,4,61,5,213,0,7,0,27,181,0,5,1,28,3,8,16,220,236,50,196,49,0,182,12,6,160,0,4,129,2,47,228,212,236,48,1,33,17, + 35,17,51,17,33,4,61,253,108,200,200,2,148,2,214,253,42,5,213,253,171,0,0,0,0,1,0,225,0,0,4,61,5,213,0,7,0,27,182,1, + 28,7,5,28,3,8,16,220,236,212,236,49,0,181,6,160,2,4,129,0,47,228,212,236,48,33,35,17,33,17,51,17,33,4,61,200,253,108,200,2, + 148,2,99,3,114,253,56,0,0,1,0,214,0,0,4,65,5,213,0,7,0,39,181,2,0,6,28,4,8,16,220,252,204,57,49,0,180,1,0,5, + 129,3,47,236,220,204,48,182,7,135,6,135,1,2,1,7,16,4,236,5,236,1,21,1,35,17,51,17,1,4,65,253,147,254,201,2,83,4,117,195, + 252,78,5,213,250,219,3,197,0,2,0,214,0,0,4,65,5,213,0,2,0,9,0,40,182,11,7,5,0,28,3,10,16,220,252,60,220,204,0,181, + 2,160,6,4,129,9,47,244,220,236,180,0,1,7,8,8,16,7,5,220,4,60,49,48,37,1,33,3,51,17,33,21,1,35,1,159,1,254,254,2, + 201,201,2,162,253,147,254,176,3,29,2,8,254,160,195,252,78,0,0,0,0,2,0,157,0,0,4,123,5,238,0,11,0,30,0,50,64,14,32,69, + 7,28,26,22,30,28,14,1,28,19,69,31,16,252,236,220,178,64,14,1,93,252,57,220,236,236,49,0,64,9,3,149,14,30,9,149,22,145,12,47, + 244,236,212,60,236,48,0,20,30,1,50,62,1,52,46,1,34,6,1,35,17,38,39,46,1,52,62,1,51,50,30,1,20,6,7,6,7,1,57,91, + 156,184,157,90,90,157,184,156,1,95,200,80,71,114,133,133,228,134,135,228,132,132,114,69,77,4,187,112,96,55,55,96,112,95,56,56,250,230,3,31, + 11,30,49,167,197,167,98,98,167,197,167,49,29,12,0,0,0,1,0,193,0,0,1,121,5,213,0,3,0,21,64,10,0,175,2,5,4,2,8,0, + 4,4,16,252,252,236,49,0,47,236,48,19,51,17,35,193,184,184,5,213,250,43,0,0,0,2,0,113,255,227,4,33,3,147,0,7,0,15,0,47, + 64,10,17,69,5,28,13,1,28,9,69,16,16,244,236,212,182,16,13,48,13,160,13,3,93,236,236,49,0,64,9,7,160,11,16,3,160,15,140,16, + 16,244,236,16,212,236,48,0,16,22,32,54,16,38,32,0,16,0,32,0,16,0,32,1,13,185,1,6,185,185,254,250,254,171,1,21,1,134,1,21, + 254,235,254,122,2,62,254,250,185,185,1,6,185,254,1,1,134,1,21,254,235,254,122,254,235,0,0,0,0,1,0,61,0,0,3,39,5,217,0,8, + 0,43,64,11,0,6,3,2,1,3,28,7,8,6,9,16,220,196,50,252,196,50,17,18,57,49,0,64,9,0,6,3,3,4,1,7,129,4,47,236, + 50,17,23,57,48,1,19,51,1,17,35,17,1,51,1,178,179,194,254,231,184,254,231,194,4,54,1,163,253,81,252,214,3,42,2,175,0,1,0,61, + 0,0,4,127,3,113,0,6,0,0,51,1,51,1,35,9,1,61,1,164,250,1,164,195,254,162,254,162,3,113,252,143,2,189,253,67,0,1,0,186, + 0,0,4,129,3,113,0,7,0,32,64,10,9,4,7,28,5,4,28,2,4,8,16,252,236,212,252,236,49,0,181,6,3,163,5,160,1,47,236,244, + 60,48,41,1,17,51,17,33,17,51,4,129,252,57,185,2,85,185,3,113,253,34,2,222,0,1,0,186,0,0,4,129,3,113,0,7,0,32,64,9, + 9,4,0,28,5,3,6,4,8,16,252,60,212,252,236,49,0,182,6,160,0,163,4,160,2,47,236,244,236,48,1,17,33,53,33,17,33,53,4,129, + 252,57,3,14,252,242,3,113,252,143,147,2,75,147,0,0,0,2,0,113,0,0,4,79,5,226,0,21,0,33,0,62,64,15,35,69,1,29,28,17, + 21,28,6,23,28,4,11,69,34,16,252,196,236,220,178,64,6,1,93,252,220,178,64,17,1,93,236,196,236,49,0,64,12,26,149,6,21,32,149,14, + 145,0,5,160,2,47,236,50,244,236,212,60,236,48,37,33,21,33,53,33,17,38,39,46,1,52,62,1,32,30,1,20,6,7,6,7,0,20,30,1, + 50,62,1,52,46,1,34,6,2,188,1,135,252,58,1,135,82,74,114,133,133,228,1,12,230,131,131,115,75,82,254,81,91,156,184,157,90,90,157,184, + 156,147,147,147,2,123,11,32,49,168,197,169,98,98,169,197,168,49,32,11,1,159,112,96,56,56,96,112,96,56,56,0,0,2,0,186,0,0,4,129, + 4,166,0,8,0,12,0,37,64,10,3,6,0,5,12,4,14,11,4,13,16,236,220,252,212,204,204,50,49,0,182,2,3,6,8,11,160,9,47,236, + 220,220,220,204,48,1,16,51,21,34,7,51,21,35,1,33,53,33,2,17,242,132,2,133,241,2,112,252,57,3,199,3,156,1,10,102,154,158,252,248, + 147,0,0,0,0,2,0,113,0,0,5,231,5,238,0,17,0,27,0,50,64,14,29,3,8,5,8,18,8,6,0,25,8,13,69,28,16,252,236,212, + 60,236,50,212,252,204,49,0,64,11,7,9,5,160,27,1,22,160,14,145,3,47,244,236,212,60,236,50,204,48,1,21,33,17,35,17,33,17,35,17, + 35,34,38,16,54,32,23,22,3,53,52,39,38,34,6,20,22,51,3,113,2,118,185,254,67,156,248,188,176,177,1,102,94,139,156,93,56,198,109,114, + 94,4,58,201,252,143,2,222,254,196,1,60,214,1,85,229,102,152,254,129,201,131,93,56,152,198,131,0,0,1,0,193,0,0,3,68,5,213,0,9, + 0,39,64,10,11,5,9,19,0,6,28,3,4,10,16,252,252,60,252,60,204,49,0,64,9,7,160,9,1,6,160,4,175,1,47,244,236,16,220,236, + 48,1,17,35,17,33,21,33,17,33,21,1,121,184,2,131,254,53,1,203,2,223,253,33,5,213,147,254,47,146,0,0,0,1,0,61,0,0,2,192, + 5,213,0,9,0,39,64,10,11,4,3,18,1,7,19,9,5,10,16,220,60,252,60,252,236,49,0,64,9,7,160,9,2,6,160,4,175,2,47,244, + 236,16,220,236,48,1,17,51,17,33,21,33,17,33,21,2,8,184,253,125,1,203,254,53,2,223,253,33,5,213,147,254,47,146,0,0,0,2,0,186, + 0,0,4,8,5,213,0,10,0,23,0,37,64,11,25,27,7,28,15,23,2,28,21,4,24,16,252,252,60,212,236,236,49,0,183,1,160,11,22,129, + 3,160,20,47,236,236,212,236,48,1,33,17,33,50,55,54,53,52,39,38,39,50,23,22,21,20,7,6,35,33,17,51,17,2,156,254,208,1,44,82, + 52,44,44,61,25,105,127,88,88,88,108,253,206,185,2,222,253,181,93,79,122,125,73,95,147,135,95,210,173,135,133,5,213,253,156,0,0,1,0,193, + 0,0,4,36,5,213,0,16,0,59,64,10,18,4,16,6,28,12,7,13,4,17,16,244,220,178,95,7,1,93,57,252,212,236,0,64,9,1,12,6, + 13,0,160,14,129,6,47,244,236,57,17,57,57,64,7,1,18,0,18,12,13,12,7,16,5,236,236,49,48,1,19,22,23,22,18,7,35,52,2,39, + 38,39,3,53,33,21,1,189,157,136,52,66,11,1,184,27,53,77,137,195,3,99,5,65,254,239,234,184,230,254,201,113,153,1,95,150,220,220,1,57, + 86,147,0,0,0,1,0,61,0,0,2,12,5,213,0,6,0,52,183,8,3,2,4,28,0,2,7,16,212,220,252,17,57,204,49,0,64,11,1,18, + 0,18,2,3,2,2,3,129,5,47,244,204,178,31,2,1,93,7,16,4,236,236,180,141,1,141,0,2,93,48,9,1,53,1,51,17,35,1,84,254, + 233,1,21,186,184,4,223,254,199,246,1,57,250,43,0,0,0,3,0,193,0,0,6,235,4,26,0,15,0,24,0,33,0,45,64,13,35,4,14,28, + 16,22,28,25,31,28,1,4,34,16,252,236,212,236,212,252,236,49,0,64,10,19,160,10,28,160,4,24,33,160,0,47,236,50,212,236,212,236,48,51, + 17,52,18,51,50,22,23,62,1,51,50,23,22,21,17,3,52,38,35,34,6,21,17,33,1,52,38,35,34,6,29,1,33,193,244,198,125,120,53,37, + 150,211,210,94,136,186,164,90,129,127,1,254,253,72,164,90,108,148,1,254,1,238,166,0,255,75,45,45,210,88,128,104,253,38,2,124,130,128,197,149, + 254,110,1,99,131,127,167,210,242,0,0,0,0,1,0,61,0,0,3,139,5,213,0,11,0,38,64,11,13,8,31,10,6,28,4,0,31,2,12,16, + 220,252,60,252,60,252,204,49,0,182,9,1,2,6,4,129,11,47,244,220,60,220,60,48,1,33,53,33,17,51,17,33,21,33,17,35,1,136,254,181, + 1,75,184,1,75,254,181,184,3,128,148,1,193,254,63,148,252,128,0,0,0,1,0,61,0,0,6,8,5,213,0,19,0,57,64,16,21,12,31,10, + 14,28,16,8,6,18,28,0,4,31,2,20,16,220,252,60,252,60,220,60,252,60,252,204,49,0,64,12,1,17,13,160,3,7,11,5,9,129,19,15, + 47,60,244,60,220,60,60,252,60,60,48,33,17,33,53,33,17,51,17,33,17,51,17,33,21,33,17,35,17,33,17,1,136,254,181,1,75,185,1,195, + 184,1,76,254,180,184,254,61,3,129,147,1,193,254,63,1,193,254,63,147,252,127,3,129,252,127,0,0,0,2,0,186,0,0,4,129,3,113,0,3, + 0,7,0,33,64,10,9,4,1,28,7,5,28,3,4,8,16,252,236,212,252,236,49,0,182,4,160,0,163,6,160,2,47,236,244,236,48,1,17,33, + 17,23,17,33,17,4,129,252,57,185,2,85,3,113,252,143,3,113,147,253,181,2,75,0,0,2,0,61,0,0,4,195,5,213,0,2,0,6,0,61, + 179,8,3,6,7,16,212,196,196,49,0,183,66,1,149,6,129,2,149,5,47,236,244,236,48,75,83,88,64,18,2,17,4,1,2,0,17,3,3,4, + 2,17,5,1,17,6,6,5,5,7,16,236,16,236,7,16,236,8,16,236,89,1,33,9,2,35,1,3,198,253,116,1,70,2,67,254,48,230,254,48, + 5,66,251,126,5,21,250,43,5,213,0,0,0,3,0,193,0,0,5,110,5,213,0,10,0,14,0,29,0,52,64,15,31,27,5,28,20,26,0,28, + 15,14,12,28,28,4,30,16,252,236,220,60,252,60,212,236,236,49,0,64,12,25,11,160,1,29,10,160,16,129,13,160,27,47,236,244,236,220,60,236, + 50,48,1,51,50,55,54,53,52,39,38,43,1,1,17,33,25,1,33,50,23,22,21,6,7,6,47,1,17,33,17,33,3,109,168,93,37,31,31,29, + 105,164,254,13,1,59,1,176,132,64,69,1,68,92,140,212,253,84,1,244,3,113,81,69,61,60,100,94,253,156,253,181,2,75,2,247,133,144,124,145, + 91,124,1,1,253,34,3,113,0,1,0,193,0,0,3,125,5,213,0,11,0,40,64,12,13,4,0,28,10,2,8,4,28,6,4,12,16,252,252,60, + 220,60,252,236,49,0,183,5,3,160,7,9,11,129,1,47,244,220,204,252,204,48,33,35,17,33,17,35,17,51,17,33,17,51,3,125,184,254,181,185, + 185,1,75,184,3,129,254,252,2,155,254,252,1,193,0,0,0,2,0,112,0,0,5,10,5,213,0,10,0,27,0,46,64,13,29,4,26,31,24,11, + 28,13,1,7,19,27,28,16,252,204,212,60,252,60,252,236,49,0,64,10,27,14,160,0,25,2,160,23,129,12,47,244,236,212,60,236,50,48,1,33, + 17,33,34,7,6,21,20,23,22,5,17,35,17,33,34,39,38,53,52,55,54,51,33,17,33,21,1,220,1,48,254,212,82,52,44,44,61,2,39,185, + 254,171,107,125,88,88,88,108,2,50,1,76,2,247,2,75,93,79,122,125,73,95,147,253,156,2,100,135,95,210,173,135,133,253,34,147,0,1,0,61, + 0,0,3,139,5,213,0,7,0,31,64,9,9,0,31,2,28,4,31,6,8,16,220,252,252,252,204,49,0,181,5,2,160,7,129,3,47,244,236,50, + 48,1,21,33,17,35,17,33,53,3,139,254,181,184,254,181,5,213,147,250,190,5,66,147,0,2,0,61,0,0,4,195,5,213,0,2,0,6,0,61, + 179,8,3,4,7,16,212,196,196,49,0,183,66,1,149,5,129,2,160,4,47,236,244,236,48,75,83,88,64,18,1,17,6,2,1,0,17,3,3,6, + 1,17,5,2,17,4,4,5,5,7,16,236,16,236,7,16,236,8,16,236,89,37,9,1,5,33,1,51,3,198,254,186,254,186,3,137,251,122,1,208, + 230,147,4,130,251,126,147,5,213,0,0,0,0,2,0,113,0,0,4,79,5,213,0,26,0,38,0,0,1,53,33,53,33,17,22,23,30,1,20,6, + 7,6,7,17,35,17,38,39,46,1,52,55,54,55,54,2,20,30,1,50,62,1,52,46,1,34,6,2,4,254,181,2,3,88,69,114,132,132,114,74, + 83,184,82,74,114,133,67,69,111,74,165,91,156,184,157,90,90,157,184,156,4,79,243,147,254,123,13,30,50,166,198,166,49,32,11,254,123,1,134,11, + 31,49,166,198,83,86,47,31,254,222,112,95,56,56,95,112,96,56,56,0,0,1,0,193,0,0,3,125,5,213,0,7,0,32,64,10,9,4,3,28, + 1,5,28,7,4,8,16,252,236,212,236,236,49,0,181,6,4,160,0,129,2,47,244,252,204,48,1,17,35,17,33,17,35,17,3,125,184,254,181,185, + 5,213,250,43,5,66,254,197,1,206,0,0,0,1,0,193,0,0,3,125,4,230,0,9,0,35,64,11,11,4,1,28,3,9,5,28,7,4,10,16, + 252,252,60,220,252,236,49,0,181,8,0,160,6,4,2,47,212,204,252,204,48,1,17,35,17,33,17,35,17,51,17,3,125,184,254,181,185,185,3,226, + 252,30,3,79,254,252,2,155,254,252,0,0,0,2,0,193,0,0,3,109,5,213,0,3,0,11,0,43,64,12,13,4,10,28,6,3,1,28,4,8, + 4,12,16,252,60,236,220,60,252,236,49,0,64,10,0,160,5,7,160,9,129,2,160,11,47,236,244,236,212,236,48,1,17,33,17,37,33,17,33,53, + 33,17,33,1,122,1,59,254,12,1,244,254,12,2,172,253,84,2,222,253,181,2,75,147,1,209,147,250,43,0,0,0,0,2,0,113,0,0,4,79, + 5,213,0,11,0,36,0,61,64,15,38,69,7,28,17,12,21,28,34,24,1,28,29,69,37,16,252,236,220,178,64,24,1,93,60,252,60,220,178,64, + 17,1,93,236,236,49,0,64,11,3,149,24,21,10,149,12,34,35,129,22,47,236,212,60,236,212,60,236,48,0,20,30,1,50,62,1,52,46,1,34, + 6,37,22,23,30,1,20,6,7,6,7,17,35,17,38,39,46,1,52,55,54,55,54,55,17,51,1,13,91,156,184,157,90,90,157,184,156,1,84,88, + 69,114,132,132,114,74,83,184,82,74,114,133,67,69,111,74,82,184,3,34,112,95,56,56,95,112,96,56,56,206,13,30,50,166,198,166,49,32,11,254, + 123,1,134,11,31,49,166,198,83,86,47,31,11,1,134,0,0,2,0,113,0,0,4,79,5,213,0,28,0,40,0,0,1,22,23,30,1,20,6,7, + 6,7,17,35,17,38,39,46,1,52,55,54,55,54,55,53,33,53,33,21,33,0,20,30,1,50,62,1,52,46,1,34,6,2,188,88,69,114,132,132, + 114,74,83,184,82,74,114,133,67,69,111,74,82,254,181,3,78,254,181,254,81,91,156,184,157,90,90,157,184,156,4,80,13,30,50,166,198,166,49,32, + 11,254,123,1,134,11,31,49,166,198,83,86,47,31,11,243,147,147,253,224,112,95,56,56,95,112,96,56,56,0,0,0,0,1,0,217,5,98,3,47, + 5,246,0,3,0,16,178,2,0,4,16,220,204,49,0,178,1,160,3,47,236,48,19,33,21,33,217,2,86,253,170,5,246,148,0,0,0,1,0,66, + 4,224,3,190,6,102,0,19,0,0,1,3,14,1,35,34,38,47,1,7,35,19,51,23,30,1,51,50,63,1,3,190,162,17,69,61,57,81,27,99, + 180,139,245,148,116,5,50,13,37,19,120,6,102,254,188,34,32,37,47,175,245,1,120,224,10,28,36,226,0,1,1,164,5,68,2,112,6,16,0,3, + 0,15,178,2,8,0,47,236,49,0,178,1,8,3,47,236,48,1,51,21,35,1,164,204,204,6,16,204,0,1,0,191,4,238,3,61,6,102,0,6, + 0,55,180,4,2,117,6,7,16,220,236,57,49,0,182,4,5,2,180,0,179,7,16,244,236,50,57,48,0,75,176,9,84,75,176,14,84,91,88,189, + 0,7,255,192,0,1,0,7,0,7,0,64,56,17,55,56,89,1,51,19,35,39,7,35,1,180,148,245,139,180,180,139,6,102,254,136,245,245,0,0, + 0,1,0,91,4,238,3,165,6,102,0,6,0,69,179,5,6,2,7,16,220,204,57,49,0,182,6,0,5,3,160,0,7,16,220,252,204,17,57,48, + 183,3,160,6,4,160,5,6,5,7,5,16,236,16,236,64,9,85,6,101,6,117,6,133,6,4,64,11,41,4,57,4,73,4,85,5,101,5,5,1, + 93,0,93,1,33,53,5,39,51,5,3,165,252,182,2,123,236,182,1,5,4,238,148,2,230,228,0,0,0,1,0,66,4,224,3,190,6,102,0,19, + 0,0,19,51,23,22,51,50,54,63,1,51,19,35,39,7,14,1,35,34,38,39,66,139,120,19,37,13,50,5,116,148,245,139,180,99,27,81,57,61, + 69,17,6,102,226,36,28,10,224,254,136,245,175,47,37,32,34,0,0,0,0,1,0,91,4,238,3,165,6,102,0,6,0,67,179,2,5,1,7,16, + 220,204,57,49,0,182,1,0,2,4,160,0,7,16,220,252,204,17,57,48,183,4,160,1,3,160,2,1,2,7,5,16,236,16,236,64,20,85,1,101, + 1,117,1,133,1,4,38,3,54,3,70,3,90,2,106,2,5,1,93,0,93,19,53,37,51,7,37,21,91,1,5,182,236,2,123,4,238,148,228,230, + 2,148,0,0,0,1,1,154,254,135,2,102,255,83,0,3,0,15,178,2,8,0,47,236,49,0,178,3,8,1,47,236,48,5,51,21,35,1,154,204, + 204,173,204,0,0,2,0,213,5,70,3,39,6,16,0,3,0,7,0,24,181,2,8,0,4,8,6,47,252,220,236,49,0,180,5,1,8,7,3,47, + 60,252,60,48,1,51,21,35,37,51,21,35,2,92,203,203,254,121,203,203,6,16,202,202,202,0,0,0,0,1,0,200,4,117,1,186,6,20,0,8, + 0,28,183,10,4,0,5,3,7,4,9,16,252,60,220,220,236,49,0,180,2,3,8,160,6,47,236,220,204,48,1,16,35,53,50,55,35,53,51,1, + 186,242,132,2,133,241,5,128,254,245,103,154,158,0,0,0,0,1,0,200,4,117,1,186,6,20,0,8,0,28,183,10,4,6,3,5,8,4,9,16, + 252,220,220,60,236,49,0,180,2,3,7,160,5,47,236,220,204,48,19,16,51,21,34,7,51,21,35,200,242,132,2,133,241,5,9,1,11,103,154,158, + 0,2,0,100,0,0,4,23,3,251,0,3,0,7,0,28,182,9,6,2,8,0,4,8,16,220,220,252,220,204,49,0,181,1,8,3,5,160,7,47, + 236,212,236,48,1,51,21,35,1,33,21,33,1,215,204,204,254,141,3,179,252,77,3,251,204,253,100,147,0,3,0,100,0,0,4,23,3,222,0,3, + 0,7,0,11,0,39,64,9,13,10,6,2,8,4,0,8,12,16,220,220,60,252,60,220,204,49,0,64,9,9,160,11,1,8,3,5,8,7,47,236, + 212,236,212,236,48,1,51,21,35,21,51,21,35,1,33,21,33,1,215,204,204,204,204,254,141,3,179,252,77,2,132,204,236,204,3,222,146,0,0,0, + 0,1,255,236,0,0,2,247,0,147,0,3,0,18,179,2,5,0,4,16,196,220,196,49,0,178,1,160,3,47,236,48,39,33,21,33,20,3,11,252, + 245,147,147,0,0,5,0,176,254,230,4,145,6,39,0,3,0,7,0,30,0,39,0,47,0,0,1,17,51,17,3,17,51,25,1,33,17,33,17,51, + 17,22,23,22,21,20,6,7,30,1,21,20,7,6,39,17,35,19,17,54,55,54,53,52,39,38,3,17,54,55,54,53,52,38,1,110,205,205,205,254, + 117,1,139,100,209,114,117,120,116,139,155,128,129,241,100,100,120,62,68,68,62,120,152,73,73,146,4,137,254,118,1,138,253,231,254,33,1,223,253,144, + 5,26,1,13,254,243,2,82,84,154,120,142,18,28,177,133,175,96,97,2,254,230,5,163,254,119,4,44,48,100,99,49,45,253,235,254,33,1,58,59, + 122,123,116,0,0,3,0,130,255,235,4,219,4,123,0,7,0,15,0,42,0,76,64,15,36,8,37,16,8,22,14,6,10,2,18,27,20,69,43,16, + 252,60,244,60,212,60,60,236,220,252,64,6,33,31,29,3,27,35,17,18,23,57,49,0,64,8,0,22,4,135,18,140,36,43,16,60,244,236,212,196, + 64,9,12,25,8,135,40,135,29,184,43,16,252,236,236,212,196,48,37,34,21,20,51,50,53,52,3,34,21,20,51,50,53,52,19,20,35,34,53,52, + 33,17,6,35,34,53,52,51,50,23,54,51,32,25,1,35,17,52,35,34,7,1,104,63,63,65,65,63,63,65,184,249,230,1,39,43,22,230,230,168, + 44,76,189,1,150,184,226,137,87,240,64,64,64,64,3,7,64,64,64,64,252,193,205,201,208,1,112,8,216,183,81,81,254,190,252,199,3,57,170,142, + 0,2,0,139,255,221,5,135,4,140,0,7,0,47,0,64,64,14,49,28,15,18,40,6,46,2,10,20,18,35,69,48,16,252,236,60,204,220,204,220, + 252,60,204,49,0,64,19,25,135,30,22,135,33,140,48,18,135,37,4,8,0,42,135,13,184,48,16,252,236,204,220,204,220,244,16,244,236,212,236,48, + 1,34,21,20,51,50,53,52,3,34,53,52,36,51,32,17,16,13,1,4,21,20,33,50,54,51,50,23,7,38,35,34,6,35,32,53,52,45,1,54, + 53,52,33,34,7,22,21,20,1,96,64,64,64,67,210,1,118,187,2,66,254,153,254,238,254,196,1,15,137,213,168,159,138,134,105,85,118,203,171,254, + 58,1,214,1,14,215,254,107,110,76,63,3,111,64,64,64,64,254,236,228,137,196,254,171,254,236,78,59,69,106,102,142,213,97,145,127,249,239,101,58, + 46,154,186,56,56,85,216,0,0,3,0,137,255,236,4,244,4,140,0,7,0,14,0,56,0,0,1,22,51,50,55,38,39,34,18,50,53,52,34,29, + 1,37,52,55,38,53,52,55,54,33,32,23,22,25,1,35,17,52,39,38,35,32,7,6,21,54,51,32,16,35,34,39,6,21,20,23,54,51,50,21, + 20,35,32,1,105,54,5,23,48,73,1,18,75,104,104,254,175,42,41,133,147,1,55,1,33,139,111,184,94,82,191,254,253,88,59,42,58,1,4,250, + 57,20,28,22,23,171,204,204,254,117,2,96,20,18,17,1,254,16,47,39,34,4,173,127,128,54,79,212,102,113,179,143,254,247,253,191,2,65,188,133, + 116,113,76,73,19,254,182,11,36,92,57,46,141,200,182,0,0,2,0,109,254,24,3,81,4,140,0,25,0,33,0,54,64,13,6,8,17,13,8,12, + 0,32,22,28,0,69,34,16,252,204,220,204,16,212,252,220,252,49,0,64,14,30,24,26,20,135,3,184,34,13,15,135,9,189,34,16,252,236,204,16, + 252,236,196,220,196,48,19,52,54,51,32,25,1,16,6,35,34,38,39,55,22,51,50,53,17,16,35,22,7,6,39,38,19,38,23,6,55,22,39,54, + 109,162,221,1,101,154,205,214,116,13,189,34,120,175,130,3,1,5,216,208,214,67,3,2,66,67,3,1,3,166,113,117,253,244,253,143,254,249,240,208, + 141,10,209,243,2,223,1,104,21,33,207,1,1,1,9,1,65,67,3,2,66,66,0,0,0,2,0,127,255,255,4,151,4,154,0,11,0,41,0,50, + 64,13,16,18,19,29,9,21,3,25,35,18,38,69,42,16,252,236,212,204,212,204,220,60,236,49,0,64,11,31,135,12,184,42,0,37,27,6,23,18, + 47,212,204,212,196,204,16,244,236,48,1,34,6,21,20,22,51,50,54,53,52,38,3,32,23,22,25,1,7,19,52,39,20,39,38,53,52,51,50,23, + 16,5,6,7,6,29,1,35,53,52,55,54,2,176,36,28,32,32,37,27,32,85,1,37,124,123,184,1,101,200,217,218,244,54,254,153,227,76,17,184, + 30,106,2,96,32,32,37,27,34,30,37,27,2,58,121,120,254,217,253,126,1,1,41,142,82,166,1,2,183,192,104,1,150,6,4,134,30,134,75,75, + 170,62,220,0,0,2,0,139,254,32,5,134,4,140,0,11,0,54,0,53,64,14,31,18,18,36,45,9,51,3,23,18,12,40,69,55,16,252,60,236, + 204,212,204,212,60,252,60,49,0,64,13,6,53,0,47,135,16,184,55,25,135,38,140,55,16,244,236,16,244,236,204,212,204,1,34,6,21,20,22,51, + 50,54,53,52,38,7,52,55,54,51,32,17,20,13,1,6,21,20,33,50,55,54,51,50,21,16,19,7,2,17,2,33,32,53,52,45,1,54,53,52, + 33,34,7,22,7,6,35,34,1,96,36,28,32,32,37,27,32,245,231,144,186,2,66,254,153,254,173,251,1,15,239,121,35,120,151,148,144,190,74,254, + 105,254,58,1,149,1,79,215,254,107,110,76,73,16,26,191,210,3,111,32,32,37,27,34,30,37,27,48,137,121,75,254,233,254,112,106,78,100,102,239, + 68,215,254,252,254,148,81,1,99,1,119,254,245,249,216,127,105,67,145,124,56,53,115,189,0,2,0,115,255,239,4,244,4,149,0,11,0,42,0,59, + 64,14,38,8,37,3,20,9,29,24,32,8,12,16,69,43,16,252,60,236,220,204,204,212,204,220,236,49,0,64,16,34,135,41,140,43,29,135,28,0, + 22,6,18,184,38,188,43,16,236,244,204,212,204,212,236,16,244,236,48,1,50,54,53,52,38,39,38,6,21,20,22,1,52,55,38,55,18,5,22,21, + 20,7,6,39,22,23,22,55,21,7,6,21,20,5,4,25,1,51,17,16,37,36,1,230,36,28,33,31,37,27,32,254,173,165,166,1,1,1,108,220, + 221,129,54,2,90,65,144,141,147,1,139,1,124,184,253,204,253,179,3,149,32,32,36,27,1,1,33,32,36,28,253,152,143,86,109,234,1,45,1,1, + 183,198,2,1,136,189,71,52,12,161,23,24,112,168,6,6,1,190,2,63,253,193,253,180,1,1,0,0,0,2,0,186,255,227,4,188,4,123,0,7, + 0,28,0,49,64,11,9,8,28,6,16,2,14,8,20,70,29,16,252,236,204,220,204,220,236,49,0,64,6,11,135,24,184,8,29,16,60,252,236,64, + 6,0,14,4,18,140,29,16,244,196,220,196,48,37,34,21,20,51,50,53,52,5,17,52,33,32,21,17,32,21,20,35,34,53,17,52,36,51,50,4, + 21,17,1,165,64,64,64,2,31,254,185,254,181,1,25,230,235,1,31,228,214,1,41,235,64,64,64,64,235,3,31,198,198,254,80,196,200,200,2,142, + 204,118,118,204,252,199,0,0,0,2,0,129,255,226,4,131,4,161,0,11,0,46,0,60,64,14,16,18,18,45,25,32,9,34,3,32,18,39,69,47, + 16,252,236,204,212,204,16,220,60,220,236,49,0,64,16,0,32,6,36,140,47,25,135,45,29,21,135,14,41,184,18,47,244,60,236,50,220,236,16,244, + 204,212,204,48,37,34,6,21,20,22,51,50,54,53,52,38,1,54,55,50,25,1,35,17,52,35,34,7,6,35,34,39,38,35,34,7,3,32,21,20, + 35,34,53,17,16,51,50,23,22,51,50,1,108,36,28,32,32,37,27,32,1,76,32,153,242,184,55,42,62,40,128,122,42,77,35,54,1,1,1,25, + 213,251,242,151,38,56,34,36,241,32,32,37,27,34,30,37,27,3,51,124,1,254,169,252,182,3,48,219,175,113,105,189,225,254,80,196,218,210,2,150, + 1,87,117,171,0,3,0,0,254,20,4,178,4,123,0,7,0,15,0,43,0,63,64,14,45,36,8,39,6,18,2,23,8,14,43,10,27,44,16,60, + 204,220,204,252,204,220,204,220,252,204,49,0,64,17,12,25,8,41,135,29,33,184,44,0,16,5,20,140,38,189,44,16,236,244,196,220,196,16,252,60, + 236,196,220,196,48,37,34,21,20,51,50,53,52,1,34,21,20,51,50,53,52,19,32,23,22,35,34,53,17,6,35,38,55,54,55,54,23,54,51,32, + 22,21,17,35,17,52,33,34,7,2,9,64,64,64,254,153,64,64,64,174,1,23,2,2,228,239,33,31,217,1,1,211,162,55,121,193,1,45,158,184, + 254,230,178,94,245,64,64,64,64,2,246,64,64,64,64,253,152,221,195,227,2,27,7,2,215,199,1,1,101,100,213,109,250,219,5,37,163,139,0,0, + 0,2,0,87,255,239,4,203,4,145,0,11,0,44,0,57,64,16,46,29,18,32,36,18,25,9,16,3,20,18,12,41,69,45,16,252,60,236,204,212, + 204,212,252,220,252,220,49,0,64,13,22,135,39,140,45,6,43,0,34,135,14,27,184,244,60,236,204,212,204,16,244,236,48,1,34,6,21,20,22,51, + 50,54,53,52,38,5,52,51,50,21,20,7,6,23,20,51,50,53,17,52,5,4,21,17,35,17,52,35,34,21,17,16,37,36,17,16,55,34,1,64, + 36,28,32,32,37,27,32,254,249,230,236,144,139,1,181,182,1,39,1,40,184,117,106,254,145,254,146,213,211,3,248,32,32,37,27,34,30,37,27,64, + 217,213,175,141,136,168,204,176,2,88,254,1,1,251,252,115,3,141,103,104,253,169,254,185,1,1,1,92,1,21,151,0,0,2,0,95,255,227,4,190, + 4,140,0,7,0,34,0,57,64,13,36,25,8,28,9,13,8,2,20,6,16,69,35,16,252,204,220,204,252,204,220,236,204,49,0,64,16,0,14,4, + 18,184,26,188,35,23,135,10,169,30,8,140,35,16,244,60,236,236,16,236,252,196,220,196,48,1,50,53,52,35,34,7,20,3,53,51,50,54,53,17, + 36,53,52,55,54,21,17,22,55,54,53,17,51,17,16,33,34,39,6,35,1,87,64,64,62,2,184,122,93,85,254,232,226,238,93,131,227,184,254,105, + 185,84,114,217,3,115,64,64,64,64,252,112,143,101,156,1,103,8,204,221,1,1,219,253,117,169,1,1,177,3,47,252,209,254,178,115,115,0,0,0, + 0,2,0,73,255,239,4,115,4,124,0,7,0,29,0,50,64,12,25,8,23,6,16,2,12,19,18,8,69,30,16,252,236,60,204,220,204,220,252,49, + 0,64,13,4,10,0,14,184,24,188,30,21,135,28,140,30,16,244,252,16,236,252,196,220,196,48,1,34,21,20,51,50,53,52,1,52,55,38,55,54, + 51,22,7,6,0,21,22,33,32,25,1,51,17,16,37,36,1,53,64,64,64,254,212,182,183,1,1,229,237,1,1,254,236,1,1,77,1,103,184,253, + 225,253,245,3,238,64,64,64,64,253,82,218,196,38,182,194,2,188,151,254,209,168,203,1,39,2,180,253,76,254,66,1,1,0,0,0,0,2,0,73, + 255,239,4,115,6,20,0,7,0,29,0,50,64,12,26,8,23,6,16,2,12,19,18,8,69,30,16,252,236,60,204,220,204,220,252,49,0,64,13,4, + 10,0,14,184,24,151,30,21,135,28,140,30,16,244,252,16,236,252,196,220,196,48,1,34,21,20,51,50,53,52,1,52,55,38,55,54,23,22,7,6, + 0,21,22,33,32,25,1,51,17,16,37,36,1,53,64,64,64,254,212,182,183,1,1,229,237,1,1,254,236,1,1,77,1,103,184,253,225,253,245,4, + 4,64,64,64,64,253,60,239,197,37,183,194,1,1,189,173,254,210,168,203,1,39,4,104,251,152,254,66,1,1,0,0,0,3,0,89,255,239,5,204, + 4,233,0,11,0,23,0,69,0,0,1,34,6,21,20,22,51,50,54,53,52,38,33,34,6,21,20,22,51,50,54,53,52,38,1,38,39,6,39,34, + 38,53,17,54,23,50,7,6,5,17,20,51,50,53,17,51,3,20,55,54,53,17,36,55,52,23,22,23,54,53,38,39,55,22,23,6,7,17,20,6, + 4,31,36,28,32,32,37,27,32,253,6,36,28,32,32,37,27,32,2,75,148,102,103,180,166,156,1,252,212,1,1,254,233,165,164,184,1,163,155,254, + 231,1,211,215,27,29,7,18,168,31,5,1,196,178,3,210,32,32,37,27,34,30,37,27,32,32,37,27,34,30,37,27,252,29,1,73,75,1,163,154, + 2,98,225,2,235,199,5,254,118,132,132,1,52,254,203,139,5,5,130,1,140,8,203,238,1,1,152,52,50,64,55,45,93,102,197,110,254,57,165,153, + 0,2,0,186,255,227,5,104,6,20,0,29,0,37,0,65,64,16,39,0,8,27,23,8,20,16,36,13,32,16,8,8,70,38,16,252,236,204,220,204, + 16,220,252,220,252,204,49,0,64,8,21,25,18,135,2,6,140,38,16,244,60,252,60,204,64,8,34,15,30,11,184,28,151,38,16,236,252,196,220,196, + 48,1,16,33,34,39,6,35,32,25,1,52,51,50,21,20,33,17,20,51,50,53,17,51,17,20,51,50,53,17,51,1,34,21,20,51,50,53,52,5, + 104,254,169,148,102,103,180,254,190,253,211,254,232,165,164,184,162,155,184,252,62,64,64,64,1,32,254,195,74,74,1,61,2,124,223,235,204,254,92,164, + 164,1,64,254,191,166,167,4,244,253,204,64,64,64,64,0,0,2,0,104,255,239,5,22,4,125,0,11,0,45,0,63,64,16,24,8,21,17,8,14, + 44,9,40,3,44,8,36,32,69,46,16,252,60,236,204,212,204,16,212,252,212,236,49,0,64,16,6,34,0,38,184,22,188,46,15,19,12,135,26,30, + 140,46,16,244,60,252,60,196,16,228,244,204,212,204,48,1,34,6,21,20,22,51,50,54,53,52,38,19,50,53,17,51,17,20,51,50,53,17,51,17, + 16,33,34,39,6,35,32,17,52,55,38,53,52,51,50,21,20,3,6,21,20,1,100,36,28,32,32,37,27,32,65,164,184,162,155,184,254,169,148,102, + 103,180,254,190,153,137,230,236,232,66,3,210,32,32,37,27,34,30,37,27,252,179,167,1,52,254,203,169,170,3,47,252,209,254,195,74,74,1,61,240, + 166,37,158,248,220,137,254,241,77,144,167,0,0,2,0,104,255,239,5,22,6,20,0,11,0,45,0,63,64,16,24,8,21,17,8,14,44,9,40,3, + 44,8,36,32,69,46,16,252,60,236,204,212,204,16,212,252,212,236,49,0,64,16,6,34,0,38,184,22,151,46,15,19,12,135,26,30,140,46,16,244, + 60,252,60,196,16,228,244,204,212,204,48,1,34,6,21,20,22,51,50,54,53,52,38,19,50,53,17,51,17,20,51,50,53,17,51,17,16,33,34,39, + 6,35,32,17,52,55,38,53,52,51,50,21,20,3,6,21,20,1,100,36,28,32,32,37,27,32,65,164,184,162,155,184,254,169,148,102,103,180,254,190, + 153,137,230,236,232,66,3,210,32,32,37,27,34,30,37,27,252,179,167,1,52,254,203,169,170,4,232,251,24,254,195,74,74,1,61,240,166,37,158,248, + 220,139,254,243,76,145,167,0,0,1,0,64,255,227,5,22,4,96,0,23,0,36,64,7,6,8,8,2,8,0,24,16,220,236,220,236,49,0,64,10, + 7,1,188,24,4,135,11,15,140,24,16,244,60,252,16,252,60,48,1,51,17,16,33,50,25,1,51,17,16,33,32,39,6,35,34,53,52,51,50,7, + 50,53,1,147,184,1,26,249,184,254,79,254,179,41,51,182,198,156,144,2,41,4,96,253,44,254,237,1,19,2,212,252,197,254,190,56,56,156,150,123, + 139,0,0,0,0,2,0,115,255,239,4,244,6,20,0,11,0,42,0,59,64,14,38,8,37,3,20,9,29,24,32,8,12,16,69,43,16,252,60,236, + 220,204,204,212,204,220,236,49,0,64,16,34,135,41,140,43,29,135,28,0,22,6,18,184,38,151,43,16,236,244,204,212,204,212,236,16,244,236,48,1, + 50,54,53,52,38,39,38,6,21,20,22,1,52,55,38,55,18,5,22,21,20,7,6,39,22,23,22,55,21,7,6,21,20,5,4,25,1,51,17,16, + 37,36,1,230,36,28,33,31,37,27,32,254,173,165,166,1,1,1,108,220,221,129,54,2,90,65,144,141,147,1,139,1,124,184,253,204,253,179,3,149, + 32,32,36,27,1,1,33,32,36,28,253,152,143,86,109,234,1,45,1,1,183,198,2,1,136,189,71,52,12,161,23,24,112,168,6,6,1,190,3,218, + 252,38,253,180,1,1,0,0,0,2,0,139,255,239,5,18,4,140,0,11,0,44,0,55,64,12,29,18,12,9,39,25,18,3,16,35,69,45,16,252, + 60,204,236,212,204,212,252,49,0,64,16,43,135,31,140,46,6,0,37,14,135,27,23,135,18,184,46,16,244,252,212,252,212,220,204,16,244,236,48,1, + 34,6,21,20,22,51,50,54,53,52,38,5,52,33,32,17,16,33,32,23,7,38,35,32,21,20,33,32,17,16,33,32,39,38,53,52,51,50,21,20, + 7,22,51,32,1,99,36,28,32,32,36,28,32,2,189,254,128,253,212,2,54,1,98,230,117,248,229,254,140,1,146,2,26,253,196,254,171,135,85,211, + 224,22,75,183,1,22,1,88,32,32,36,28,32,32,36,28,16,232,1,56,1,36,220,123,187,140,159,254,143,254,155,110,69,123,203,210,78,20,37,0, + 0,2,0,79,255,239,4,170,4,140,0,11,0,48,0,64,64,16,50,44,18,30,26,18,12,9,18,37,18,3,38,22,69,49,16,252,60,204,236,212, + 204,220,236,212,236,220,49,0,64,17,14,135,37,24,0,16,6,28,135,20,47,140,49,33,135,42,184,244,236,16,244,60,236,204,212,204,212,204,236,48, + 37,34,6,21,20,22,51,50,54,53,52,38,5,38,39,38,7,22,7,6,39,38,53,16,33,32,19,22,55,54,53,17,16,33,32,7,6,7,39,54, + 55,54,5,4,25,1,20,37,38,1,52,37,27,32,32,36,28,32,1,11,44,171,68,12,227,2,2,207,249,1,41,1,60,87,37,68,118,254,162,254, + 243,39,26,2,183,6,17,71,1,161,2,38,254,190,222,248,33,31,36,28,32,32,36,27,30,243,3,1,84,1,183,214,1,1,235,1,137,254,176,145, + 1,2,174,1,168,1,24,114,74,99,20,111,60,249,1,1,254,137,253,212,250,1,1,0,0,2,0,115,255,229,4,118,4,123,0,7,0,33,0,58, + 64,7,33,18,8,2,18,69,34,16,252,196,212,236,64,6,6,22,12,8,28,35,16,220,236,220,196,49,0,64,9,33,0,20,4,26,135,15,140,34, + 16,244,236,204,220,204,204,64,5,31,135,10,184,34,16,252,252,48,1,34,21,20,51,50,53,52,1,18,33,32,25,1,16,33,32,36,53,52,51,50, + 21,20,7,22,51,32,53,17,52,33,32,7,1,84,64,64,64,254,248,41,1,205,1,244,254,34,255,0,254,219,229,221,69,25,143,1,30,254,204,254, + 217,24,1,84,64,64,64,64,1,206,1,89,254,215,253,184,254,219,157,143,210,215,61,73,8,216,1,196,204,213,0,0,0,3,0,79,255,239,5,129, + 5,111,0,11,0,53,0,61,0,0,37,34,6,21,20,22,51,50,54,53,52,38,37,17,6,33,36,55,54,33,32,23,54,61,1,38,39,55,22,23, + 6,7,17,20,37,38,39,38,39,38,7,22,7,6,39,38,55,18,33,32,19,22,55,54,1,32,39,52,33,32,21,20,1,52,37,27,32,32,36,28, + 32,2,150,70,254,235,253,222,2,2,2,30,1,142,114,64,10,92,160,116,4,1,214,254,190,222,43,44,171,68,12,227,2,2,207,250,1,1,1,40, + 1,60,87,37,68,118,254,165,1,116,1,254,141,254,137,248,33,31,36,28,32,32,36,27,61,1,153,14,1,252,233,154,54,28,2,84,98,90,171,100, + 149,166,253,195,250,1,1,233,243,3,1,84,1,183,214,1,1,235,1,137,254,176,145,1,2,2,209,69,109,77,100,0,0,3,0,127,255,232,6,25, + 4,153,0,6,0,13,0,57,0,0,0,34,21,6,51,50,55,36,34,21,6,51,50,55,1,36,17,16,55,38,55,54,23,22,7,6,7,6,19,22, + 37,36,53,17,6,43,1,38,55,54,23,50,23,54,23,22,25,1,35,17,52,7,6,7,6,7,19,16,1,168,128,1,65,63,1,1,224,128,1,65, + 63,1,254,249,254,28,163,194,1,1,229,238,2,1,117,138,12,7,1,28,1,0,20,29,2,230,1,1,211,162,53,114,151,253,184,82,88,54,38,36, + 1,4,4,64,64,64,64,64,64,64,252,36,1,1,45,1,10,211,47,153,215,1,1,212,139,117,138,254,234,159,1,1,181,1,178,9,6,238,201,1, + 99,100,1,2,254,192,252,169,3,87,131,1,1,55,39,28,253,214,254,179,0,3,0,115,255,227,4,118,4,123,0,7,0,32,0,40,0,60,64,14, + 33,18,14,8,31,6,24,2,37,18,10,20,69,41,16,252,60,236,196,220,196,220,252,236,49,0,64,6,4,28,135,17,140,41,16,244,236,204,64,10, + 0,22,39,135,8,35,135,12,184,41,16,252,236,220,236,220,204,48,1,34,21,20,51,50,53,52,55,32,17,16,33,32,25,1,20,33,34,36,53,52, + 51,50,21,20,7,22,51,32,53,17,6,19,52,33,32,21,20,33,32,1,84,64,64,64,237,253,242,2,21,1,238,253,254,210,254,209,221,237,61,65, + 64,1,53,83,85,254,187,254,184,1,72,1,69,1,71,64,64,64,64,203,1,52,1,53,254,208,253,145,249,130,170,214,217,71,41,35,175,1,31,53, + 1,54,155,155,160,0,0,0,0,2,0,139,255,239,5,120,4,216,0,11,0,52,0,62,64,13,26,39,18,14,9,49,35,18,3,18,45,69,53,16, + 252,60,204,236,212,204,212,252,60,49,0,64,19,12,135,41,140,54,6,0,47,16,135,37,29,135,24,33,135,20,184,54,16,244,236,220,236,212,252,212, + 220,196,16,244,236,48,1,34,6,21,20,22,51,50,54,53,52,38,1,32,17,52,37,36,53,52,33,50,23,22,51,50,19,23,2,35,34,39,38,35, + 34,21,20,5,4,17,16,33,32,39,38,53,52,51,50,21,20,7,22,1,104,36,28,32,32,37,27,32,1,36,1,151,254,123,253,221,1,161,203,97, + 106,106,104,64,148,77,243,167,113,75,157,205,1,121,2,41,253,171,254,199,135,109,225,215,95,156,1,139,32,32,37,27,34,30,37,27,254,249,1,0, + 189,49,69,230,252,89,108,1,4,48,254,148,120,80,94,98,56,82,254,194,254,115,117,95,124,222,218,93,70,28,0,0,0,2,0,203,254,173,5,240, + 4,161,0,3,0,39,0,0,0,34,20,50,3,39,1,0,39,38,15,1,6,39,36,19,18,33,51,50,7,6,39,38,53,52,55,34,17,20,51,50, + 63,1,54,23,22,21,20,1,3,65,128,128,241,129,2,83,1,50,59,57,138,194,146,160,254,104,1,2,1,104,205,212,1,1,211,212,4,164,218,78, + 85,215,126,156,245,254,177,4,13,128,251,32,134,2,43,1,30,59,57,106,150,113,1,1,1,144,1,144,206,214,1,1,208,20,33,254,254,230,66,166, + 97,3,5,166,169,254,200,0,255,255,0,111,255,229,4,182,4,128,16,39,6,59,5,15,253,117,16,7,6,59,5,15,250,201,0,0,0,2,251,96, + 5,28,255,167,7,11,0,19,0,27,0,43,64,11,13,11,15,9,0,18,15,20,9,24,5,47,204,220,204,220,252,17,18,57,57,49,0,64,8,22, + 7,26,2,17,13,18,2,47,252,204,16,204,220,204,48,3,2,33,32,38,55,54,23,50,7,6,7,22,51,36,39,52,39,55,22,5,52,7,34,21, + 6,23,22,89,2,253,199,254,182,195,1,1,229,242,4,1,35,33,65,1,91,1,86,138,168,252,222,66,56,1,63,60,6,29,254,255,168,107,217,1, + 216,80,36,4,1,85,46,70,138,143,77,63,1,62,61,1,1,0,0,0,0,2,0,123,0,0,3,201,4,123,0,16,0,24,0,43,64,9,3,8, + 4,21,11,17,15,69,25,16,252,204,220,204,220,236,49,0,64,11,19,13,0,23,9,7,135,0,184,4,25,16,60,252,236,220,204,16,220,204,48,1, + 32,25,1,35,17,16,35,34,7,50,21,20,35,34,53,16,19,20,51,50,53,52,35,34,2,18,1,183,184,255,110,61,218,229,225,166,59,67,62,64, + 4,123,254,106,253,27,2,203,1,25,86,193,199,199,1,174,254,82,55,55,55,0,0,0,255,255,252,154,0,0,3,201,6,114,16,38,6,82,0,0, + 16,6,6,60,0,0,0,0,0,1,251,64,4,236,255,106,7,105,0,17,0,31,183,0,18,6,2,11,14,18,9,47,236,212,220,212,236,49,0,181, + 16,7,2,12,3,11,47,60,204,50,212,204,48,1,20,33,21,32,17,16,33,32,17,16,33,53,32,55,52,33,32,251,254,1,37,254,29,2,38,2, + 4,254,63,1,1,2,254,186,254,152,6,37,187,126,1,63,1,62,254,194,254,193,126,187,197,0,0,0,0,1,251,64,4,236,0,0,7,105,0,20, + 0,36,64,9,0,18,6,2,14,17,18,12,9,47,204,236,212,220,212,236,49,0,182,19,7,12,2,15,3,14,47,60,204,50,50,212,204,48,1,20, + 33,21,32,17,16,33,32,17,20,7,51,21,33,53,32,55,54,33,32,251,254,1,37,254,29,2,38,2,4,62,212,253,169,1,2,1,1,254,185,254, + 152,6,37,187,126,1,63,1,62,254,194,119,74,126,126,187,197,0,0,0,0,2,251,64,4,236,255,106,7,105,0,17,0,21,0,42,64,10,0,18, + 6,20,2,18,12,14,18,9,47,236,220,196,220,196,220,236,49,0,64,9,16,7,21,160,19,2,12,3,11,47,60,204,50,220,252,220,204,48,1,20, + 33,21,32,17,16,33,32,17,16,33,53,32,55,52,33,32,5,21,35,53,251,254,1,37,254,29,2,38,2,4,254,63,1,1,2,254,186,254,152,1, + 223,238,6,37,187,126,1,63,1,62,254,194,254,193,126,187,197,78,220,220,0,2,251,64,4,236,0,0,7,105,0,20,0,24,0,46,64,11,0,18, + 6,24,2,22,14,17,18,12,9,47,204,236,212,196,220,196,212,236,49,0,64,10,19,7,21,160,23,12,2,15,3,14,47,60,204,50,50,220,252,220, + 204,48,1,20,33,21,32,17,16,33,32,17,20,7,51,21,33,53,32,55,54,33,32,5,21,35,53,251,254,1,37,254,29,2,38,2,4,62,212,253, + 169,1,2,1,1,254,185,254,152,1,223,238,6,37,187,126,1,63,1,62,254,194,119,74,126,126,187,197,84,220,220,0,0,2,252,254,253,51,254,182, + 255,178,0,4,0,21,0,0,4,34,20,51,54,3,54,53,52,39,6,35,34,53,52,51,50,23,22,21,20,7,253,238,130,65,65,92,144,5,40,68, + 179,170,101,78,91,204,188,129,1,254,207,111,91,17,16,36,158,186,78,91,139,117,214,0,0,2,252,167,253,142,254,200,255,175,0,7,0,29,0,37, + 64,8,27,25,6,18,2,14,21,10,47,204,212,204,220,204,220,204,49,0,64,7,4,12,0,16,26,8,23,47,204,204,220,196,220,196,48,5,34,21, + 20,51,50,53,52,19,34,53,52,55,38,53,52,51,50,21,20,6,21,20,51,50,53,17,51,17,20,253,30,22,23,21,114,243,62,74,117,117,109,130, + 158,132,178,22,22,21,23,254,64,146,115,62,10,91,121,117,63,123,69,66,88,1,70,254,186,195,0,0,0,2,251,96,5,28,255,167,7,11,0,20, + 0,27,0,0,3,22,7,39,54,53,54,37,34,7,22,7,6,7,6,39,38,55,54,33,32,0,52,7,34,23,20,51,89,1,168,138,86,1,254,165, + 65,33,46,10,21,217,229,1,1,123,120,1,26,2,57,252,225,60,63,1,56,6,10,95,143,138,70,46,85,1,4,68,87,176,1,1,217,84,95,96, + 254,174,126,1,63,61,0,0,0,2,251,28,253,199,0,13,255,177,0,7,0,26,0,35,64,5,6,17,2,24,13,47,204,196,220,196,49,0,64,10, + 22,135,8,0,15,4,11,135,19,27,16,220,252,196,220,196,60,252,48,1,50,53,52,35,34,21,20,5,34,2,35,22,21,20,35,34,53,16,33,50, + 18,51,50,55,23,6,251,220,48,48,43,2,201,218,172,184,92,196,184,1,76,222,222,96,93,166,134,191,254,78,48,47,46,49,105,1,51,32,114,191, + 167,1,67,254,208,198,114,240,0,2,0,129,254,20,4,244,5,185,0,11,0,50,0,0,5,50,54,53,52,38,35,34,6,21,20,22,1,17,16,33, + 32,17,53,16,33,50,21,20,35,34,39,21,20,33,32,25,1,52,0,53,52,51,50,4,50,55,23,2,35,34,36,35,34,20,0,1,242,36,28,32, + 32,37,27,32,2,177,254,1,253,253,1,109,217,217,142,45,1,81,1,71,253,88,249,117,1,9,94,124,128,116,190,73,254,243,84,75,2,182,63,32, + 32,36,28,32,32,36,28,2,179,253,96,254,64,1,17,127,1,44,200,209,115,107,150,1,69,2,114,125,1,51,216,209,253,196,84,254,251,249,174,254, + 153,0,0,0,0,2,0,122,255,227,2,152,4,123,0,21,0,33,0,42,64,9,25,0,31,11,16,8,7,70,34,16,252,252,204,196,220,196,49,0, + 64,11,14,135,9,184,34,28,20,22,4,140,34,16,244,204,220,204,16,252,252,48,37,6,7,6,35,34,25,1,52,51,50,23,7,38,35,34,21,17, + 62,1,51,50,7,50,54,55,52,38,35,34,6,21,6,22,2,142,1,67,67,155,242,232,204,106,70,80,136,72,11,79,81,178,181,36,27,1,33,31, + 37,27,1,33,162,112,39,40,1,70,2,110,228,74,118,45,79,253,33,51,93,239,32,32,36,28,32,32,36,28,0,0,255,255,0,122,255,227,4,200, + 4,123,16,38,6,71,0,0,16,7,6,71,2,48,0,0,0,2,255,211,255,246,3,48,7,44,0,11,0,40,0,0,1,34,6,21,20,22,51,50, + 54,53,52,38,1,38,7,6,19,23,22,21,17,51,32,7,6,7,35,34,25,1,52,47,1,38,53,52,51,50,23,1,7,2,78,36,28,32,32,37, + 27,32,254,164,115,32,36,203,140,101,23,1,3,1,1,211,2,251,144,139,113,201,152,122,1,109,133,1,18,32,32,37,27,34,30,37,27,5,24,144, + 26,29,254,249,180,131,181,254,29,231,207,1,1,56,2,50,174,186,180,145,121,166,156,254,44,118,0,0,0,2,0,92,255,227,3,235,7,35,0,26, + 0,34,0,54,64,8,3,18,16,7,18,12,69,35,16,252,236,220,236,64,7,33,22,29,19,8,0,12,16,220,236,220,220,204,49,0,64,11,5,135, + 14,152,35,27,20,31,24,140,35,16,244,196,220,196,16,252,252,48,1,52,36,53,52,37,38,21,20,23,7,38,53,16,33,32,17,20,4,21,17,36, + 21,20,35,34,53,55,34,21,20,51,50,53,52,1,194,1,105,254,216,243,160,120,220,1,171,1,228,254,143,1,25,226,239,239,64,64,64,3,231,184, + 220,88,186,1,1,184,52,160,124,236,96,1,80,254,176,164,217,179,253,247,10,229,220,221,63,64,64,64,64,0,0,0,0,2,0,188,255,234,3,144, + 7,22,0,11,0,34,0,0,1,34,6,21,20,22,51,50,54,53,52,38,1,53,38,39,55,22,31,1,33,23,6,21,17,36,7,6,35,34,25,1, + 52,55,35,2,174,36,28,32,32,37,27,32,254,100,2,116,166,132,4,4,1,46,59,224,1,26,1,1,213,251,156,239,1,6,32,32,37,27,34,30, + 37,27,3,200,136,157,196,95,248,112,149,189,172,152,254,137,10,241,208,1,56,2,62,153,117,0,0,0,0,2,0,147,254,37,4,152,4,116,0,47, + 0,59,0,0,1,52,35,34,7,6,35,34,39,38,35,34,29,1,36,7,6,7,35,38,17,53,16,51,50,23,22,51,50,55,54,51,50,25,1,16, + 7,6,33,32,39,38,53,55,22,5,4,17,1,34,6,21,20,22,51,50,54,53,52,38,3,224,34,51,67,50,127,122,55,74,44,34,1,26,1,1, + 211,2,251,182,133,47,73,78,92,61,48,130,182,66,87,254,150,254,161,84,79,189,21,1,51,1,72,253,169,36,28,32,32,37,27,32,3,88,116,92, + 68,68,92,116,93,10,241,207,1,3,1,53,246,1,2,60,92,85,67,254,254,252,170,254,247,102,136,119,112,118,10,202,8,9,1,103,2,72,32,32, + 37,27,34,30,37,27,0,0,0,1,253,18,4,241,253,198,6,86,0,3,0,14,64,5,2,0,2,8,0,47,252,49,0,47,204,48,1,51,17,35, + 253,18,180,180,6,86,254,155,0,2,251,127,4,224,255,163,7,32,0,7,0,27,0,39,64,8,27,8,15,2,21,6,17,12,47,212,204,220,204,204, + 220,204,49,0,64,8,0,15,4,19,27,13,24,12,47,220,60,204,220,196,220,196,48,1,22,39,54,7,34,23,6,37,20,2,41,1,53,54,53,6, + 55,52,23,22,29,1,20,7,32,54,53,252,25,43,2,1,42,43,1,1,3,181,215,254,132,254,85,144,183,1,157,145,71,1,177,243,6,109,1,43, + 43,2,41,44,125,229,254,221,133,46,112,7,157,136,1,1,131,183,92,40,141,250,0,0,0,1,251,62,4,200,0,46,6,243,0,52,0,0,1,34, + 17,16,33,50,22,55,54,55,54,51,50,21,20,7,22,55,54,55,51,6,7,6,33,35,53,54,53,52,35,34,7,6,39,38,39,38,35,34,21,20, + 59,1,38,53,52,51,22,7,6,7,6,252,46,240,1,37,50,126,42,38,73,72,72,220,157,132,66,79,5,153,2,103,40,254,226,197,208,76,24,66, + 67,93,105,37,62,23,146,101,62,46,96,104,2,2,62,51,4,200,1,20,1,23,130,1,1,65,63,215,126,61,4,13,16,104,130,92,36,133,107,98, + 56,58,59,1,1,45,70,144,161,2,95,90,1,107,102,50,41,0,0,0,0,1,252,78,4,224,254,140,7,30,0,11,0,33,64,7,7,5,8,169, + 0,2,11,47,60,204,252,60,220,49,0,64,7,4,2,5,169,9,11,8,47,60,204,252,60,220,48,1,53,51,53,51,21,51,21,35,21,35,53,252, + 78,216,142,216,216,142,5,184,142,216,216,142,216,216,0,0,255,255,251,28,5,23,0,13,7,1,16,7,6,69,0,0,7,80,0,0,0,2,252,154, + 4,246,254,62,6,114,0,7,0,15,0,23,64,4,12,4,8,0,47,204,220,204,49,0,64,4,14,2,10,6,47,204,220,204,48,1,52,51,50,21, + 20,35,34,55,20,51,50,53,52,35,34,252,154,212,208,212,208,132,76,84,80,80,5,190,180,180,200,200,72,72,72,0,0,2,0,135,255,227,4,143, + 4,96,0,13,0,29,0,0,1,34,7,6,21,20,23,22,32,55,54,53,52,38,39,32,23,22,21,20,7,6,33,32,39,38,17,52,55,54,2,139, + 143,94,76,58,78,1,98,88,49,157,157,1,25,136,99,111,140,254,247,254,237,128,113,111,146,3,192,132,104,179,189,96,129,153,87,174,163,252,160,196, + 146,233,253,142,179,165,148,1,5,230,149,196,0,2,0,99,255,103,4,168,4,155,0,3,0,38,0,0,0,20,50,52,3,55,54,17,52,39,38,35, + 34,7,6,7,6,23,54,55,54,21,20,39,38,39,38,53,52,55,54,5,32,23,22,21,16,5,7,1,182,128,10,242,210,112,72,188,146,103,99,1, + 1,47,53,112,216,228,134,73,180,141,117,1,11,1,17,129,166,254,206,246,2,22,128,128,253,234,135,117,1,203,127,112,72,69,67,108,101,92,103,2, + 2,226,212,2,1,85,212,220,154,137,115,1,117,151,200,253,207,168,135,0,0,2,0,99,255,121,4,92,5,177,0,3,0,36,0,0,0,50,52,34, + 3,50,55,6,35,38,53,52,51,50,17,20,7,6,35,32,39,38,53,16,63,1,36,53,23,16,1,7,6,17,20,23,22,3,43,128,128,114,208,37, + 15,51,221,224,237,93,102,220,254,205,129,166,207,211,1,31,184,254,148,217,124,112,72,1,70,128,254,80,182,19,3,198,216,254,228,240,102,111,117,151, + 200,1,84,162,165,224,233,1,254,199,254,229,169,97,254,251,127,112,72,0,0,1,0,22,255,237,5,138,6,164,0,47,0,0,37,50,25,1,52,39, + 36,53,52,51,50,23,22,51,50,55,23,2,35,34,39,38,35,34,21,20,5,22,21,17,16,37,36,39,6,35,34,53,52,51,50,7,50,53,17,51, + 17,16,3,17,226,182,254,182,239,161,51,93,76,47,124,128,116,190,107,90,49,132,65,1,81,189,254,102,254,220,40,51,182,198,156,144,2,41,184,131, + 1,68,1,106,190,82,151,198,230,58,106,196,84,254,251,104,56,75,79,200,112,198,254,116,254,36,2,2,54,56,156,150,123,139,2,145,253,214,254,237, + 0,2,0,99,255,87,4,206,5,177,0,3,0,37,0,0,0,50,52,34,1,36,5,4,39,38,53,16,63,1,36,53,23,16,1,7,6,17,20,23, + 22,51,50,23,38,39,38,51,50,7,6,7,22,23,3,33,128,128,1,173,254,226,254,241,254,190,114,138,207,211,1,31,184,254,148,217,124,84,57,239, + 108,99,217,2,2,212,236,12,11,126,120,162,1,152,128,253,63,76,1,1,118,143,167,1,84,162,165,224,233,1,254,199,254,229,169,97,254,251,109,89, + 60,24,197,208,228,216,201,5,199,75,0,0,0,3,0,99,255,87,4,206,5,177,0,3,0,45,0,50,0,0,0,50,52,34,5,18,55,38,53,38, + 51,50,7,54,53,23,20,7,6,7,6,7,6,17,20,23,22,51,50,23,38,39,38,51,50,7,6,7,22,23,21,36,5,4,39,38,18,20,51,50, + 52,3,33,128,128,253,66,2,229,145,1,228,251,15,156,184,179,125,98,36,143,124,84,57,239,108,99,217,2,2,212,236,12,11,126,120,162,254,226,254, + 241,254,190,114,138,248,61,67,1,152,128,203,1,104,161,40,170,231,173,173,162,1,189,235,164,12,63,102,88,254,242,109,89,60,24,197,208,228,216,201, + 5,199,75,157,76,1,1,118,143,3,200,116,116,0,0,0,0,2,0,89,255,239,5,244,6,127,0,52,0,64,0,0,1,20,6,39,38,39,6,39, + 34,38,53,17,52,51,50,7,6,5,17,20,51,50,53,17,51,3,20,55,54,53,17,16,39,36,53,52,51,50,4,50,55,23,2,35,34,36,35,34, + 21,20,5,22,17,1,34,6,21,20,22,51,50,54,53,52,38,5,7,178,165,148,102,103,180,166,156,253,212,1,1,254,233,165,164,184,1,163,155,217, + 254,172,250,117,1,9,94,124,128,117,189,73,254,242,83,76,1,92,223,252,62,36,28,32,32,37,27,32,1,44,165,153,1,1,73,75,1,163,154,2, + 98,223,235,199,5,254,118,132,132,1,52,254,203,139,5,5,130,1,106,1,69,97,154,216,209,252,195,84,254,251,249,87,56,210,139,254,190,1,26,32, + 32,37,27,34,30,37,27,0,0,3,0,130,254,20,4,219,4,123,0,5,0,11,0,38,0,0,37,34,20,51,50,52,3,34,20,51,50,52,19,20, + 35,34,53,52,33,17,6,35,34,53,52,51,50,23,54,51,32,25,1,35,17,52,35,34,7,1,104,63,63,65,65,63,63,65,184,249,230,1,39,43, + 22,230,230,168,44,76,189,1,150,184,226,137,87,240,128,128,3,7,128,128,252,193,205,201,208,1,112,8,216,183,81,81,254,190,250,219,5,37,170,142, + 0,4,0,150,254,82,5,112,4,116,0,11,0,17,0,77,0,85,0,0,1,34,6,21,20,22,51,50,54,53,52,38,0,50,53,52,34,21,5,6, + 35,38,55,54,55,54,55,37,17,52,35,34,7,6,35,34,39,38,35,34,21,17,36,7,6,7,35,38,25,1,16,51,50,23,22,51,50,55,54,51, + 50,25,1,55,23,7,21,54,23,22,21,20,7,6,7,6,39,6,19,1,6,23,22,55,54,55,1,137,36,28,32,32,37,27,32,2,229,110,110,254, + 180,118,112,134,2,1,43,45,149,1,26,34,50,68,50,127,122,55,74,44,34,1,26,1,1,211,2,251,182,132,48,73,78,92,61,48,130,182,142,74, + 216,37,18,149,46,51,63,173,53,120,118,254,132,39,15,24,170,129,81,1,156,32,32,37,27,34,30,37,27,253,158,57,51,51,185,104,1,107,47,47, + 51,119,225,2,177,116,92,68,68,92,116,254,223,10,241,207,1,3,1,53,1,186,1,2,60,92,85,67,254,254,253,200,114,84,173,171,8,1,8,148, + 70,45,50,1,3,98,71,1,59,254,208,31,21,34,130,98,44,0,0,0,0,2,0,105,255,247,4,247,4,145,0,28,0,32,0,0,1,36,27,1, + 20,23,22,53,17,51,17,20,5,4,53,17,52,35,34,21,17,32,21,20,35,34,53,17,16,18,50,52,34,1,197,1,109,1,1,126,141,184,254,192, + 254,197,182,165,1,24,211,253,172,128,128,4,145,1,254,185,253,169,101,3,3,106,3,141,252,115,251,1,1,254,2,88,176,164,254,92,204,235,223,2, + 124,1,57,252,7,128,0,0,0,3,0,127,255,232,7,147,4,153,0,6,0,13,0,73,0,0,0,34,21,6,51,50,55,36,34,21,6,51,50,55, + 5,17,22,51,54,53,17,51,17,16,37,34,39,6,37,53,50,53,17,52,7,6,7,6,7,19,18,37,36,17,16,55,38,55,54,23,22,7,6,7, + 6,19,22,37,36,53,17,6,35,48,35,38,55,54,23,50,23,54,23,22,1,168,128,1,65,63,1,1,224,128,1,65,63,1,2,145,11,84,99,184, + 254,233,98,42,64,254,214,219,82,88,54,38,36,1,1,254,72,254,28,163,194,1,1,229,238,2,1,117,138,12,7,1,28,1,0,20,29,2,230,1, + 1,211,162,53,114,151,253,4,4,64,64,64,64,64,64,64,109,253,111,54,4,160,3,74,252,182,254,189,1,44,47,3,184,204,1,225,131,1,1,55, + 39,28,253,214,254,179,1,1,1,45,1,10,211,47,153,215,1,1,212,139,117,138,254,234,159,1,1,181,1,178,9,6,238,201,1,99,100,1,2,0, + 0,4,0,127,255,232,7,201,4,153,0,6,0,13,0,76,0,88,0,0,0,34,21,6,51,50,55,36,34,21,6,51,50,55,5,17,22,51,50,53, + 17,51,17,16,33,34,39,6,39,38,55,54,51,50,23,17,52,7,6,7,6,7,19,18,37,36,17,16,55,38,55,54,23,22,7,6,7,6,19,22, + 37,36,53,17,6,35,48,35,38,55,54,23,50,23,54,23,22,3,50,54,53,52,38,39,38,6,21,20,22,1,168,128,1,65,63,1,1,224,128,1, + 65,63,1,2,145,26,102,120,184,254,212,133,36,56,159,217,5,5,196,36,43,82,98,44,19,55,1,1,254,72,254,28,163,194,1,1,229,238,2,1, + 117,138,12,7,1,28,1,0,20,29,2,230,1,1,211,162,53,114,151,253,244,36,28,33,31,37,27,32,4,4,64,64,64,64,64,64,64,109,253,211, + 148,158,3,74,252,182,254,190,99,101,2,3,198,193,8,1,227,147,17,20,36,16,51,253,214,254,179,1,1,1,45,1,10,211,47,153,215,1,1,212, + 139,117,138,254,234,159,1,1,181,1,178,9,6,238,201,1,99,100,1,2,251,234,32,32,36,27,1,1,33,32,36,28,0,1,0,120,255,225,6,134, + 6,159,0,25,0,0,1,16,0,33,32,0,17,16,1,33,53,33,21,33,4,17,16,0,37,54,0,17,52,39,55,22,6,134,254,59,254,183,254,177, + 254,79,1,220,254,116,5,74,253,117,253,175,1,52,1,17,250,1,83,83,155,118,3,16,254,150,254,59,1,248,1,88,1,194,1,4,168,169,231,254, + 34,254,242,254,93,1,1,1,124,1,12,133,191,75,197,0,0,1,0,110,255,255,5,162,6,159,0,21,0,0,5,17,6,35,34,0,53,16,55,33, + 4,21,20,22,51,50,55,17,51,17,33,21,3,193,188,150,226,254,225,190,1,15,254,241,204,113,158,186,180,1,45,1,2,193,74,1,76,223,1,7, + 247,247,248,189,221,88,3,49,250,2,162,0,0,1,0,111,254,209,5,50,6,179,0,23,0,0,1,17,33,17,54,38,35,34,6,21,20,23,7,38, + 53,38,54,51,50,22,21,17,33,17,4,126,254,141,1,112,111,131,126,100,144,145,1,254,183,189,223,1,115,254,209,1,46,5,3,141,134,120,115,103, + 100,123,178,143,174,224,239,176,251,140,254,49,0,2,0,110,255,226,6,63,6,159,0,11,0,28,0,0,1,16,0,35,34,0,17,16,0,51,50,0, + 55,16,0,37,4,0,17,16,37,53,33,53,33,21,33,21,4,5,130,254,162,205,209,254,166,1,73,230,235,1,60,189,254,80,254,204,254,211,254,64, + 2,151,253,208,5,6,253,209,2,147,2,222,1,11,1,61,254,194,254,247,254,253,254,166,1,96,253,254,184,254,73,2,1,1,180,1,73,2,61,156, + 63,169,169,60,165,0,0,0,0,1,0,100,0,0,4,106,6,179,0,19,0,0,33,17,16,38,35,34,6,21,20,23,7,38,17,52,0,51,50,0, + 25,1,3,182,206,130,148,177,138,121,206,1,16,242,228,1,32,4,89,1,4,183,171,145,211,133,141,191,1,29,176,1,52,254,212,254,211,251,166,0, + 0,1,0,80,0,1,5,182,6,179,0,25,0,0,1,17,33,17,35,17,52,38,35,34,6,21,20,23,7,38,53,52,54,51,50,22,29,1,33,17, + 5,2,254,168,181,146,95,107,139,88,132,146,253,181,186,238,2,12,2,8,1,245,252,4,5,35,137,103,105,146,77,107,124,144,160,170,244,232,172,131, + 253,108,0,0,0,2,0,60,255,225,5,143,6,159,0,10,0,25,0,0,1,33,17,30,1,51,62,1,17,52,38,1,2,0,35,34,0,25,1,33, + 53,33,17,33,32,0,3,62,254,254,1,158,179,131,192,225,1,159,2,254,231,230,239,254,234,254,179,2,1,1,1,1,10,1,70,3,253,254,43,251, + 172,1,212,1,12,250,161,254,87,254,223,254,174,1,2,1,53,3,231,160,253,254,254,222,0,2,0,121,255,225,7,20,6,179,0,8,0,23,0,0, + 37,17,35,32,0,17,16,0,33,1,17,33,17,33,4,0,19,16,0,41,1,17,33,17,4,89,128,254,162,254,186,1,70,1,94,2,138,254,172,254, + 214,254,101,254,46,1,1,200,1,164,1,42,2,5,129,5,148,254,122,254,192,254,229,254,77,1,106,2,17,251,229,2,1,225,1,142,1,131,1,226, + 253,233,253,79,0,1,0,60,0,1,3,30,6,253,0,7,0,0,37,17,33,17,51,21,33,17,2,107,253,209,179,2,47,1,5,185,1,67,164,249, + 168,0,0,0,0,2,0,120,0,0,4,125,6,159,0,11,0,27,0,0,1,17,52,38,35,34,7,17,20,22,51,54,19,17,6,35,38,0,25,1, + 51,17,54,51,50,0,21,17,3,202,180,156,149,186,176,159,116,220,195,145,245,254,247,180,222,108,245,1,18,2,6,1,181,125,223,57,254,94,157,228, + 1,254,68,1,111,85,2,1,68,1,3,3,60,254,203,78,254,183,238,252,127,0,0,0,0,2,0,60,255,225,6,70,6,160,0,11,0,28,0,0, + 1,16,38,35,34,7,17,16,22,23,62,1,1,6,0,25,1,33,17,35,17,33,17,54,51,32,0,16,0,5,136,228,130,141,153,182,142,119,207,254, + 193,235,254,237,254,166,179,2,192,164,141,1,5,1,20,254,195,2,56,1,9,187,61,254,128,254,250,181,2,2,164,254,185,1,1,49,1,48,3,191, + 253,235,2,181,253,192,60,254,191,253,156,254,234,0,0,0,0,2,0,120,255,226,6,151,6,159,0,10,0,31,0,0,1,34,6,21,30,1,51,50, + 54,53,17,1,17,33,17,16,2,37,34,0,17,16,0,51,33,17,33,53,33,17,33,17,2,171,130,242,2,187,135,181,154,2,23,254,158,244,254,238, + 199,254,198,1,53,254,1,31,253,76,3,105,2,24,3,252,193,254,219,224,223,220,1,191,252,25,3,231,254,65,254,236,254,184,1,1,45,1,42,1, + 39,1,61,1,88,170,253,254,251,120,0,0,0,1,0,130,0,1,4,135,6,159,0,25,0,0,37,17,52,38,35,34,7,17,35,17,52,54,51,33, + 21,33,38,6,23,21,54,51,50,0,21,17,3,202,189,154,177,140,180,229,241,1,191,254,21,132,116,2,167,170,252,1,4,1,2,119,226,162,97,252, + 102,5,9,204,201,170,1,88,165,173,80,254,210,254,253,145,0,2,0,100,254,169,6,114,6,179,0,11,0,33,0,0,1,16,0,35,34,0,17,16, + 0,51,32,0,19,51,16,33,32,3,7,32,0,17,16,0,33,32,0,17,16,0,7,22,51,54,5,180,254,173,251,239,254,171,1,95,230,1,3,1, + 74,10,180,254,190,254,212,25,129,254,187,254,63,1,203,1,56,1,57,1,210,254,232,190,1,149,140,3,98,1,19,1,159,254,105,254,229,254,202,254, + 86,1,201,253,181,254,169,1,71,14,2,27,1,101,1,106,1,231,254,24,254,150,254,237,254,52,84,240,3,0,0,0,0,1,0,50,255,226,5,189, + 6,179,0,19,0,0,1,22,0,35,34,0,53,17,33,53,33,17,20,22,51,62,1,53,17,51,5,189,1,254,230,228,225,254,216,254,123,2,57,203, + 137,141,190,179,1,255,224,254,195,1,61,234,4,11,159,251,82,173,215,1,213,174,4,174,0,1,0,80,0,1,4,135,6,160,0,22,0,0,37,17, + 6,35,34,0,53,52,55,35,53,33,21,6,3,30,1,51,50,55,17,51,17,3,212,162,173,242,254,240,165,216,1,216,232,1,1,178,147,145,190,179, + 1,2,202,86,1,45,231,159,216,160,147,118,254,230,185,175,86,3,52,249,98,0,0,0,0,1,0,110,255,226,6,211,6,160,0,25,0,0,37,17, + 33,17,16,0,35,34,0,53,16,55,23,6,21,30,1,51,50,54,53,17,51,17,33,17,6,33,254,73,254,230,220,227,254,221,188,115,114,2,199,128, + 174,148,180,2,105,131,3,121,254,56,254,210,254,220,1,47,211,1,28,143,113,117,197,154,200,223,211,4,108,253,251,251,232,0,0,0,0,1,0,130, + 255,226,4,137,6,160,0,19,0,0,1,2,0,35,32,0,53,17,51,17,30,1,51,62,1,53,52,39,55,22,4,137,2,254,208,191,254,244,254,246, + 179,1,194,160,129,177,151,95,246,2,42,254,245,254,195,1,106,235,4,105,251,148,197,238,1,221,219,209,142,144,193,0,0,2,0,130,255,255,4,136, + 6,179,0,8,0,21,0,0,1,54,38,35,33,17,33,62,1,55,20,0,41,1,17,33,21,33,17,33,32,0,3,202,2,219,156,254,224,1,32,157, + 217,189,254,209,254,252,254,224,2,194,252,139,1,211,1,0,1,51,4,139,190,203,253,1,1,182,191,218,254,196,254,43,161,6,180,254,193,0,0,0, + 0,2,0,100,254,139,6,114,6,179,0,11,0,33,0,0,1,16,0,35,34,0,17,16,0,51,50,0,19,16,33,53,50,55,38,39,6,33,32,0, + 17,16,0,33,32,0,17,16,3,22,5,180,254,176,248,250,254,176,1,97,231,245,1,85,190,254,109,230,2,2,125,216,254,252,254,179,254,69,1,194, + 1,73,1,61,1,198,201,201,3,97,1,19,1,160,254,93,254,241,254,211,254,77,1,184,253,168,254,169,158,188,118,56,177,2,34,1,96,1,95,1, + 240,254,18,254,156,254,200,254,216,128,0,0,0,3,0,100,0,1,6,137,6,172,0,8,0,17,0,34,0,0,1,35,17,51,50,18,55,38,2,37, + 35,6,2,21,20,0,59,1,1,16,0,33,35,17,35,17,35,4,0,16,0,41,1,32,0,4,55,98,98,180,220,1,2,212,254,54,101,179,238,0, + 255,162,101,3,97,254,177,254,253,98,173,101,254,252,254,165,1,94,1,1,1,116,1,4,1,78,6,23,252,52,1,32,202,210,1,15,1,2,254,241, + 208,206,254,227,1,235,254,203,254,180,254,76,1,180,1,1,78,2,104,1,66,254,196,0,0,1,0,90,0,1,5,112,6,160,0,15,0,0,1,17, + 33,17,35,17,33,17,51,17,33,17,51,17,33,17,4,180,254,136,179,253,209,189,1,114,179,2,52,2,102,1,81,252,74,3,181,1,217,254,208,2, + 65,253,193,254,5,0,0,0,0,1,0,131,255,225,4,136,6,179,0,17,0,0,5,35,17,52,38,7,34,6,21,17,35,17,38,0,51,50,0,23, + 4,136,180,191,139,138,203,178,1,1,40,225,229,1,23,1,31,4,172,172,220,1,219,172,251,84,4,168,233,1,65,254,184,216,0,0,0,1,0,110, + 0,1,4,117,6,160,0,17,0,0,37,17,6,35,34,2,53,17,51,17,6,22,51,50,55,17,51,17,3,193,210,144,252,245,180,2,150,160,184,179, + 180,1,2,194,77,1,18,219,2,61,253,197,177,158,85,3,53,249,97,0,0,1,0,120,255,225,4,126,6,160,0,31,0,0,1,20,2,5,38,36, + 61,1,51,21,20,22,51,50,54,61,1,6,35,34,2,53,17,51,17,30,1,51,50,55,17,51,4,126,244,254,234,209,254,213,189,182,135,142,203,182, + 169,246,254,180,1,167,166,164,173,179,1,206,184,254,205,2,2,240,224,36,33,144,164,165,167,251,83,1,57,185,2,56,253,200,151,187,88,3,50,0, + 0,1,0,130,0,1,4,135,6,159,0,17,0,0,37,17,54,38,35,34,7,17,35,17,51,17,54,51,50,4,25,1,3,212,1,153,207,135,176,180, + 179,174,156,217,1,47,1,2,171,147,189,48,252,53,6,158,253,205,48,255,254,216,253,140,0,1,0,121,255,225,6,29,6,179,0,25,0,0,5,53, + 6,35,36,0,17,2,0,33,4,23,7,38,35,32,0,17,16,0,37,22,55,17,51,17,5,103,246,163,254,117,254,54,1,1,223,1,119,1,5,246, + 102,219,192,254,252,254,114,1,128,1,20,160,253,182,1,97,127,1,2,7,1,110,1,135,1,213,2,165,176,184,254,145,254,178,254,209,254,88,2,1, + 158,1,247,252,233,0,0,0,0,2,0,120,255,226,6,123,6,160,0,10,0,29,0,0,1,34,2,21,20,22,51,50,54,53,17,1,17,33,17,16, + 0,35,32,0,17,16,0,33,51,17,51,17,33,17,2,199,199,202,199,155,136,160,2,10,254,171,254,245,207,254,251,254,226,1,71,1,8,249,181,2, + 6,3,252,254,244,158,218,246,199,215,1,220,252,23,3,233,254,36,254,218,254,232,1,80,1,32,1,15,1,59,2,4,253,252,251,119,0,2,0,130, + 255,255,4,136,6,159,0,8,0,25,0,0,1,52,38,35,33,17,33,62,1,55,20,6,35,33,21,33,17,35,53,33,17,35,17,33,50,22,3,202, + 112,93,254,57,1,199,80,126,189,210,185,254,57,2,27,179,254,152,180,2,123,185,210,5,18,129,109,254,20,2,127,128,170,247,255,254,123,231,254,40, + 6,160,226,0,0,1,0,100,255,226,4,152,6,179,0,32,0,0,1,20,0,35,32,0,53,51,6,18,51,50,54,53,52,37,36,17,52,18,51,50, + 18,21,35,54,38,35,34,6,23,20,0,4,152,254,235,228,254,244,254,209,191,1,205,172,164,154,254,93,254,96,254,212,226,238,186,1,170,121,128,138, + 2,3,68,1,209,211,254,228,1,101,252,181,254,244,169,154,200,170,170,1,31,160,1,19,254,225,209,198,139,150,118,206,254,162,0,0,0,1,0,130, + 255,255,4,136,6,159,0,19,0,0,1,16,0,35,34,39,17,33,21,33,17,51,17,22,51,50,54,25,1,51,4,136,254,222,240,165,155,2,204,252, + 128,180,141,190,132,207,180,4,210,254,204,254,216,23,254,30,172,6,160,252,141,22,160,1,6,1,227,0,0,2,0,60,0,1,5,144,6,159,0,2, + 0,13,0,0,1,33,9,1,35,3,1,35,9,1,35,53,33,1,4,122,253,158,1,19,1,174,215,235,254,107,220,2,26,254,123,255,5,84,253,239, + 5,246,253,248,252,206,1,246,253,79,3,95,2,150,169,252,156,0,0,0,0,1,0,60,255,226,6,71,6,160,0,21,0,0,1,22,0,35,32,0, + 53,17,33,17,35,17,33,17,30,1,51,50,54,53,17,51,6,71,2,254,213,208,254,255,254,243,254,176,180,2,183,2,179,168,129,195,179,2,12,243, + 254,201,1,90,208,3,244,254,137,2,23,251,94,139,241,209,171,2,158,0,0,1,0,130,0,1,4,136,6,160,0,17,0,0,1,53,52,38,43,1, + 17,35,17,51,17,33,50,22,29,1,51,21,3,15,88,132,253,180,180,1,0,189,215,190,2,55,159,155,139,252,5,6,159,253,252,189,167,98,160,0, + 0,1,0,111,255,226,5,20,6,179,0,33,0,0,1,16,0,35,34,0,17,38,55,23,6,21,20,22,51,50,54,53,18,0,53,52,54,51,50,22, + 21,35,38,35,34,7,22,0,5,20,254,152,244,243,254,170,1,183,137,129,230,168,211,199,2,252,250,195,125,145,195,194,1,145,125,2,2,3,0,2, + 53,254,231,254,198,1,58,1,35,230,195,131,137,159,228,215,231,204,1,28,1,76,246,129,159,159,142,142,125,184,254,197,0,1,0,60,0,1,4,66, + 6,160,0,17,0,0,37,17,35,38,2,61,1,35,53,33,21,6,22,59,1,17,51,17,3,143,238,214,209,190,1,118,13,90,159,241,179,1,2,116, + 1,1,5,180,20,159,109,102,249,3,138,249,97,0,0,0,0,1,0,110,0,1,4,82,6,160,0,21,0,0,1,16,4,7,17,35,17,38,36,25, + 1,51,17,30,1,59,1,62,1,53,17,51,4,82,254,194,76,187,91,254,188,180,1,163,97,131,94,149,181,4,135,254,217,225,1,253,131,2,125,1, + 229,1,35,2,25,253,229,199,169,1,164,203,2,27,0,0,0,3,0,80,255,225,5,152,6,179,0,10,0,21,0,51,0,0,1,35,34,6,7,20, + 22,51,50,54,53,1,52,38,35,34,6,23,21,51,50,54,55,14,1,43,1,17,33,21,33,21,14,1,7,46,1,53,52,54,59,1,17,33,53,33, + 53,62,1,51,50,22,2,156,194,69,133,2,127,72,80,119,2,61,120,88,99,97,1,179,104,120,191,1,222,192,179,1,90,254,166,2,214,148,176,218, + 213,181,194,254,130,1,126,2,184,161,190,226,2,57,93,126,125,95,104,96,4,13,100,89,135,90,181,121,100,159,211,254,231,151,239,156,203,2,2,199, + 178,147,225,1,25,149,181,190,194,188,0,0,0,1,0,100,255,226,3,172,4,189,0,17,0,0,1,16,33,32,17,55,51,7,16,51,50,17,38,0, + 53,51,22,0,3,172,254,91,254,93,38,176,34,242,239,1,254,122,187,1,1,126,1,170,254,56,1,210,207,207,254,186,1,60,212,1,107,212,164,254, + 150,0,0,0,0,2,0,100,255,227,3,192,6,179,0,18,0,26,0,0,1,16,33,32,17,16,37,55,54,39,38,53,51,20,23,22,15,1,4,3, + 16,39,6,17,16,33,50,3,192,254,89,254,75,1,139,19,47,147,147,183,129,130,48,19,1,62,180,246,254,1,1,243,2,33,253,194,2,60,2,8, + 65,67,167,105,106,142,65,136,133,180,73,123,254,50,1,183,21,20,254,72,254,80,0,0,0,2,0,90,254,30,4,76,4,105,0,24,0,36,0,0, + 37,20,0,35,34,0,53,16,37,54,55,52,35,34,31,1,7,39,16,33,32,3,20,7,4,3,52,38,39,6,2,21,20,22,51,50,54,4,76,254, + 255,243,232,254,234,1,210,171,1,179,156,2,6,160,15,1,69,1,83,2,169,1,125,180,145,167,169,170,183,145,132,191,42,215,254,203,1,54,214,1, + 166,141,119,130,147,134,49,40,87,1,8,254,228,127,130,169,254,135,149,246,29,28,254,255,137,174,212,213,0,2,0,100,254,40,6,19,4,97,0,31, + 0,39,0,0,1,2,33,32,17,52,55,38,35,34,17,16,5,4,23,35,38,37,6,7,39,54,55,36,17,16,33,50,23,54,33,32,3,16,35,32, + 17,16,33,50,6,19,1,254,94,254,78,28,87,117,246,1,101,2,43,5,199,11,254,104,150,116,122,107,156,254,158,1,133,179,111,102,0,255,1,163, + 180,239,254,245,1,11,239,2,80,253,227,2,40,142,66,164,254,173,254,11,193,202,212,158,99,3,162,108,113,47,253,1,227,1,236,172,177,253,249,1, + 122,254,135,254,98,0,0,0,0,1,0,100,254,29,3,152,4,96,0,23,0,0,5,16,33,32,17,55,51,7,16,51,50,25,1,16,35,34,21,23, + 35,39,16,33,32,17,3,152,254,116,254,88,33,172,25,244,226,225,200,55,172,49,1,110,1,139,63,254,92,1,166,225,227,254,232,1,22,3,19,1, + 2,244,226,220,1,134,254,111,0,1,0,100,254,29,3,172,4,96,0,34,0,0,5,16,33,32,17,55,51,7,16,33,22,17,53,52,39,35,53,51, + 54,53,52,35,34,21,23,35,39,16,33,32,17,20,7,22,21,3,172,254,111,254,73,37,174,32,1,4,221,170,166,129,200,235,200,22,176,23,1,121, + 1,159,211,218,61,254,90,1,160,229,229,254,236,2,1,26,134,216,26,152,92,217,207,191,165,155,1,84,254,162,210,133,104,254,0,0,0,3,0,41, + 255,227,3,157,6,180,0,15,0,23,0,31,0,0,1,16,33,32,17,16,55,38,19,16,37,4,17,6,7,4,3,16,7,38,17,16,51,50,3,54, + 35,34,23,2,23,54,3,157,254,92,254,90,193,236,1,1,91,1,70,1,120,1,76,180,242,241,243,238,188,1,171,177,1,1,175,174,2,13,253,214, + 2,42,1,113,97,113,1,14,1,69,17,17,254,172,177,116,68,254,39,1,165,1,1,254,92,254,97,4,201,250,220,254,229,1,1,0,0,2,0,100, + 255,227,6,4,4,96,0,22,0,30,0,0,19,16,33,50,23,54,51,32,17,2,3,35,0,17,18,35,34,7,22,21,2,33,32,1,16,35,34,17, + 16,51,50,100,1,164,245,104,126,146,1,143,2,229,224,1,19,2,232,101,111,23,28,254,115,254,96,2,148,242,238,236,244,2,11,2,85,188,183,253, + 236,254,192,254,230,1,21,1,64,1,142,186,74,189,253,212,2,40,1,202,254,54,254,100,0,1,0,100,0,0,3,192,4,96,0,15,0,0,1,16, + 3,35,18,17,16,32,17,16,19,35,2,17,16,32,3,192,143,183,146,254,12,145,184,141,3,92,2,68,254,244,254,201,1,32,1,35,1,144,254,109, + 254,224,254,223,1,56,1,15,2,25,0,0,0,1,0,90,254,29,3,165,4,86,0,28,0,0,5,18,33,32,17,55,51,7,16,33,22,17,53,52, + 43,1,53,51,36,53,52,39,51,22,21,20,7,4,17,3,165,2,254,109,254,70,50,170,40,1,9,218,232,180,103,1,41,182,233,121,239,1,3,62, + 254,91,1,152,239,230,254,235,2,1,27,157,254,148,70,192,179,172,168,183,207,97,91,254,243,0,0,0,0,1,0,100,254,40,8,32,4,106,0,48, + 0,0,1,6,3,35,18,53,16,35,34,3,7,35,39,16,35,34,17,7,35,39,16,35,34,17,16,5,4,19,35,38,37,4,7,39,54,55,36,17, + 16,33,50,23,54,51,50,23,54,51,32,8,32,1,199,215,236,219,216,2,11,151,12,202,197,10,150,10,222,219,3,8,1,178,67,175,49,254,67,254, + 176,132,109,130,230,253,197,1,143,213,92,96,188,205,88,94,206,1,143,2,170,236,254,244,1,4,244,1,43,254,249,225,225,1,12,254,244,225,225,1, + 7,254,163,254,62,224,102,254,184,231,84,30,152,128,111,39,229,1,213,1,227,203,213,217,207,0,0,0,0,2,0,100,255,226,3,172,6,179,0,20, + 0,29,0,0,1,16,33,32,17,16,33,22,23,17,52,35,34,29,1,35,53,16,33,32,17,3,38,39,32,17,16,33,50,17,3,172,254,111,254,73, + 1,186,127,101,208,217,183,1,144,1,122,170,68,150,254,240,1,7,227,1,188,254,38,2,63,2,33,11,49,1,78,211,200,47,47,1,84,254,160,254, + 45,44,10,254,106,254,78,1,89,0,0,0,0,2,0,130,255,225,3,202,6,169,0,16,0,25,0,0,1,16,33,32,25,1,16,41,1,21,33,34, + 21,17,54,55,32,3,16,35,6,7,17,16,51,50,3,202,254,82,254,102,1,78,1,162,254,48,118,139,146,1,129,180,251,123,116,237,253,2,25,253, + 200,1,241,3,123,1,92,146,142,254,110,64,11,253,215,1,157,10,59,254,107,254,145,0,0,1,0,100,255,255,5,229,4,96,0,28,0,0,1,18, + 1,35,0,17,2,35,34,17,21,35,53,16,35,34,17,2,1,35,0,17,16,33,50,23,54,51,32,5,229,1,254,237,209,1,47,1,210,231,165,231, + 211,1,1,56,209,254,230,1,136,225,87,97,220,1,133,2,86,254,210,254,216,1,22,1,64,1,126,254,167,210,210,1,89,254,130,254,206,254,219,1, + 36,1,51,2,10,227,227,0,0,1,0,100,255,226,3,172,6,169,0,28,0,0,1,16,33,32,17,55,51,7,16,51,50,17,16,43,1,53,51,50, + 55,52,36,53,51,20,4,21,20,7,22,3,172,254,91,254,93,18,178,16,239,241,199,174,129,194,28,254,175,193,1,45,180,225,2,1,253,225,1,217, + 200,198,254,177,1,147,1,109,150,171,159,153,194,100,200,168,175,72,148,0,0,1,0,100,254,29,3,171,4,105,0,24,0,0,5,18,33,32,3,55, + 51,7,16,51,50,25,1,5,22,21,16,5,53,32,39,54,37,53,37,3,171,1,254,99,254,87,2,20,180,20,242,247,254,100,227,254,57,1,41,1, + 1,254,215,3,42,64,254,93,1,162,148,148,254,234,1,25,3,247,79,135,114,254,220,2,164,150,117,71,118,178,0,0,0,1,0,100,0,0,5,250, + 6,169,0,35,0,0,1,16,1,35,0,17,2,35,34,17,21,35,53,18,35,34,17,16,1,35,0,17,16,19,18,37,21,4,1,21,55,50,23,54, + 51,32,5,250,254,226,229,1,79,2,228,222,167,1,220,232,1,80,238,254,234,254,254,1,168,254,118,254,196,182,217,91,96,220,1,146,2,75,254,219, + 254,219,1,8,1,66,1,137,254,158,195,195,1,98,254,119,254,190,254,247,1,43,1,32,1,141,1,73,1,72,64,167,23,254,81,41,77,253,253,0, + 0,1,0,130,255,226,3,202,6,158,0,19,0,0,1,16,33,32,25,1,51,17,16,33,50,17,54,2,53,55,51,7,20,18,3,202,254,102,254,82, + 170,1,4,230,1,200,6,182,27,218,1,227,253,255,2,16,4,172,251,84,254,124,1,117,169,1,16,127,170,164,93,254,204,0,0,0,0,2,0,90, + 254,29,4,226,5,112,0,12,0,25,0,0,19,16,37,3,51,3,4,17,16,0,33,32,0,19,2,18,51,50,18,17,16,37,19,35,19,4,90,2, + 5,23,178,23,1,255,254,197,254,251,254,248,254,192,180,1,220,184,173,230,254,175,23,177,22,254,175,1,58,2,200,95,1,15,254,237,92,253,50,254, + 193,254,41,1,210,1,75,254,210,254,157,1,91,1,54,2,48,146,253,129,2,126,144,0,0,1,0,10,254,29,3,182,4,146,0,32,0,0,5,16, + 33,32,17,55,51,7,16,33,50,25,1,38,35,34,21,3,35,3,52,43,1,39,55,23,51,50,23,54,51,32,17,3,182,254,110,254,71,25,178,23, + 1,5,232,2,135,123,10,143,10,156,82,109,20,87,80,143,79,67,160,1,48,64,254,93,1,163,227,227,254,233,1,23,3,103,182,140,254,165,1,91, + 120,40,161,50,187,187,254,199,0,2,0,100,254,29,6,33,4,96,0,50,0,58,0,0,19,16,33,32,23,54,51,32,3,20,7,22,29,1,6,4, + 33,32,36,61,1,52,54,22,29,1,20,22,51,50,54,61,1,52,43,1,53,51,50,54,39,16,35,34,7,30,1,21,16,33,32,1,16,35,34,17, + 16,51,50,100,1,161,1,3,93,120,188,1,137,1,251,223,1,254,216,254,234,254,226,254,232,99,100,153,214,235,160,183,80,27,83,185,3,212,159,97, + 10,10,254,93,254,89,2,150,245,237,237,245,2,101,1,251,198,193,254,82,250,163,106,152,92,180,225,188,119,29,31,67,68,30,29,52,115,154,111,88, + 167,151,181,155,1,55,174,60,92,34,254,23,1,229,1,113,254,145,254,166,0,1,0,100,254,29,3,152,6,159,0,25,0,0,5,16,33,32,17,55, + 51,7,16,51,50,25,1,38,39,34,21,23,35,39,16,33,22,23,17,51,3,152,254,119,254,85,33,182,35,247,223,103,173,164,50,177,42,1,62,167, + 124,170,63,254,92,1,164,225,225,254,232,1,24,3,190,75,11,201,246,206,1,124,10,80,2,153,0,0,0,1,0,100,254,41,5,230,4,95,0,37, + 0,0,5,54,55,0,17,16,33,50,23,54,51,32,17,20,7,35,18,53,2,35,34,17,7,35,39,16,35,34,17,16,5,4,21,35,52,39,38,7, + 1,16,80,179,254,81,1,140,216,96,91,202,1,153,168,201,192,2,224,219,3,158,5,224,218,2,2,1,110,179,230,191,194,179,60,53,1,41,1,149, + 1,227,231,231,254,53,217,250,1,3,208,1,65,254,233,196,196,1,23,254,167,254,41,225,170,241,167,113,43,173,0,0,0,1,0,100,254,29,3,172, + 4,78,0,27,0,0,5,16,33,32,17,55,51,7,16,51,50,25,1,6,7,32,17,52,55,51,6,21,16,51,54,55,17,51,3,172,254,103,254,81, + 18,184,22,253,237,124,128,254,122,175,207,203,211,145,107,170,66,254,95,1,160,150,147,254,233,1,25,1,118,63,10,1,173,220,214,224,210,254,222,11, + 62,2,138,0,0,2,0,60,255,226,3,162,6,179,0,30,0,40,0,0,1,16,33,32,17,16,33,22,23,17,52,35,34,29,1,20,6,38,61,1, + 54,35,7,53,51,50,23,54,51,32,17,3,17,46,1,39,34,17,16,51,50,3,162,254,131,254,53,1,162,135,122,164,128,71,78,1,126,139,134,90, + 88,82,164,1,56,170,54,122,72,242,254,236,1,169,254,57,2,33,2,63,10,44,1,153,140,150,86,53,39,39,53,88,128,52,202,184,184,254,238,251, + 228,2,6,17,21,5,254,77,254,107,0,0,0,1,0,130,0,0,3,202,6,179,0,27,0,0,1,55,52,35,34,21,17,54,51,32,17,16,3,35, + 18,17,16,35,34,7,17,35,17,16,33,32,21,7,2,90,22,160,164,148,116,1,150,173,211,203,239,132,118,170,1,78,1,65,17,5,37,152,116,207, + 254,153,71,254,52,254,219,254,176,1,83,1,30,1,68,57,252,131,5,83,1,96,245,153,0,1,0,90,254,29,4,56,4,65,0,32,0,0,1,20, + 7,22,17,2,33,32,17,53,16,19,51,2,17,21,16,33,32,17,2,43,1,53,51,50,39,54,38,39,51,30,1,4,26,199,229,1,254,20,254,15, + 116,187,123,1,62,1,64,2,215,173,166,199,2,2,215,10,186,10,196,2,171,167,96,87,254,204,254,4,3,30,163,1,40,1,59,254,204,254,198,152, + 253,110,1,108,1,61,135,206,87,141,182,132,149,0,0,0,0,2,0,100,255,227,3,171,6,159,0,10,0,19,0,0,1,18,33,32,17,16,33,54, + 23,17,51,3,17,38,35,34,17,16,51,50,3,171,1,254,91,254,93,1,163,92,159,169,169,132,120,238,239,251,1,247,253,236,2,52,2,43,1,71, + 2,163,251,46,1,167,66,254,97,254,88,0,0,2,0,131,255,226,3,232,6,179,0,30,0,39,0,0,19,2,33,50,23,54,59,1,21,39,34,23, + 21,20,6,38,61,1,52,35,34,21,17,54,51,32,17,16,33,32,17,23,16,51,32,17,16,35,38,7,131,1,1,57,164,82,88,90,133,138,126,1, + 78,71,128,159,127,125,1,162,254,43,254,141,170,226,1,8,242,127,121,5,161,1,18,184,184,202,52,128,88,53,39,40,52,86,150,150,254,96,71,253, + 213,253,203,1,249,36,254,183,1,169,1,159,1,62,0,0,0,1,0,100,254,29,3,197,6,158,0,37,0,0,1,51,17,33,21,33,21,22,0,21, + 16,33,32,3,55,51,7,16,51,50,19,52,0,3,53,35,34,21,20,59,1,21,35,4,17,16,33,51,2,10,168,1,19,254,237,2,1,12,254,94, + 254,91,1,32,175,27,242,238,1,255,0,3,86,190,154,47,47,254,212,1,85,81,6,158,253,164,130,75,250,254,17,206,254,95,1,161,229,239,254,245, + 1,24,166,2,12,1,2,75,183,166,134,1,1,43,1,59,0,2,0,130,255,226,3,202,6,158,0,10,0,19,0,0,1,16,33,32,25,1,51,17, + 54,51,32,3,16,35,34,7,17,16,51,50,3,202,254,98,254,86,170,137,127,1,150,180,239,96,155,254,236,2,40,253,186,2,47,4,141,253,131,63, + 253,200,1,172,59,254,76,254,137,0,0,0,0,1,0,20,254,30,3,142,4,147,0,35,0,0,1,7,37,3,4,23,6,4,35,53,50,54,53,38, + 47,1,19,37,55,5,55,54,53,52,38,43,1,53,51,50,23,22,21,20,15,1,3,142,81,254,232,143,1,9,1,1,254,179,238,160,230,1,192,115, + 214,254,136,81,1,102,86,19,63,76,69,68,145,79,82,35,92,1,213,128,176,254,210,120,181,188,208,150,115,112,152,50,69,1,160,186,140,194,154,34, + 37,45,52,135,46,45,140,85,65,156,0,0,0,1,0,100,255,226,3,172,6,179,0,39,0,0,1,16,33,32,17,55,51,7,16,51,50,17,52,39, + 35,53,51,50,53,54,43,1,53,51,50,55,52,36,53,51,20,4,21,20,7,22,21,20,7,22,3,172,254,97,254,87,40,180,40,239,241,113,163,163, + 101,2,103,163,162,90,2,254,130,167,1,129,163,183,177,189,1,129,254,97,1,179,148,148,254,217,1,11,220,2,130,156,128,133,146,109,149,165,86,138, + 183,160,61,69,136,145,72,113,0,1,0,120,255,226,3,192,6,179,0,39,0,0,1,16,33,32,25,1,51,17,16,51,50,17,52,43,1,53,51,50, + 53,54,43,1,53,51,50,55,52,38,53,51,20,22,23,20,7,22,21,20,7,22,3,192,254,91,254,93,170,243,247,119,183,183,111,2,113,183,182,100, + 2,252,186,239,4,173,183,177,188,1,129,254,97,1,239,4,184,251,72,254,157,1,11,227,120,151,143,123,191,109,81,193,136,89,162,179,62,69,146,135, + 72,113,0,0,0,2,0,100,254,224,3,170,4,96,0,17,0,25,0,0,23,50,55,36,17,16,33,32,17,18,5,22,51,21,38,39,6,7,19,16, + 23,54,17,16,35,34,141,151,70,254,250,1,166,1,160,2,254,237,82,145,225,145,158,223,139,242,236,238,240,84,115,178,1,95,2,48,253,208,254,162, + 179,115,204,73,209,207,75,3,83,254,157,122,121,1,100,1,161,0,0,0,0,1,0,100,254,29,3,172,4,95,0,29,0,0,5,16,33,32,17,55, + 51,7,18,51,50,17,53,16,7,35,53,51,36,61,1,5,21,35,17,37,16,5,4,17,3,172,254,89,254,95,31,187,39,1,242,239,221,181,111,1, + 35,254,66,174,3,31,254,218,1,38,61,254,90,1,164,226,221,254,227,1,31,164,1,30,2,131,90,244,121,19,244,1,117,31,253,211,63,128,254,244, + 0,1,0,100,254,29,3,171,6,179,0,37,0,0,5,16,33,32,17,55,51,7,16,51,50,17,53,52,43,1,53,51,36,17,6,35,36,17,16,33, + 21,32,21,20,55,50,55,17,18,5,4,21,3,171,254,95,254,90,32,180,32,242,236,242,157,67,1,77,92,142,254,87,1,169,255,0,253,196,221,1, + 254,228,1,27,65,254,94,1,168,222,226,254,221,1,33,209,253,138,17,1,181,41,2,1,135,1,118,132,242,252,1,176,254,229,254,128,84,119,252,0, + 0,3,0,100,255,226,4,31,6,179,0,23,0,31,0,39,0,0,1,21,16,33,32,17,16,37,33,17,33,32,17,16,33,32,17,21,51,21,35,17, + 51,21,5,33,34,21,20,51,50,53,1,20,51,33,53,52,35,34,3,173,254,89,254,94,1,159,1,10,254,246,254,97,1,166,1,163,114,114,114,254, + 233,254,251,235,246,250,254,16,235,1,5,250,246,2,54,238,254,154,1,102,1,119,1,1,19,1,119,1,105,254,151,239,136,254,237,138,1,230,226,237, + 3,238,237,239,221,0,0,0,0,2,0,100,254,29,6,57,4,96,0,27,0,36,0,0,1,18,33,34,39,21,16,33,53,50,53,17,16,35,34,17, + 16,33,21,36,17,16,33,50,23,54,51,32,3,16,35,34,17,21,16,55,50,6,57,2,254,89,136,96,254,94,248,248,242,1,4,254,72,1,166,231, + 93,89,237,1,167,181,247,227,232,242,2,39,253,187,136,199,254,122,140,248,2,147,1,161,254,83,254,101,138,3,2,34,2,56,236,236,253,199,1,174, + 254,197,231,254,185,1,0,0,0,1,0,90,254,29,4,16,4,96,0,31,0,0,5,16,33,32,17,16,37,36,53,52,35,34,7,23,35,39,16,33, + 32,19,20,5,4,21,16,33,32,17,52,39,51,22,4,16,254,20,254,54,1,55,1,54,159,191,2,5,156,10,1,98,1,79,2,254,203,254,202,1, + 26,1,52,96,190,86,25,254,54,1,202,1,57,188,189,141,175,170,60,47,1,66,254,207,222,185,184,240,254,185,1,76,129,152,158,0,0,1,0,100, + 254,29,3,172,4,78,0,27,0,0,19,51,17,22,23,50,17,52,39,51,22,21,16,33,34,39,17,16,51,50,17,39,51,23,16,33,32,17,100,170, + 108,144,211,223,217,185,254,122,130,122,251,239,29,180,29,254,95,254,89,4,77,253,108,62,1,1,34,181,253,215,219,254,83,43,254,174,254,225,1,27, + 141,144,254,92,1,167,0,0,0,2,0,80,254,29,4,66,4,104,0,24,0,36,0,0,19,52,18,51,32,18,21,16,5,6,7,20,51,50,47,1, + 55,23,16,33,32,19,52,55,36,19,20,18,51,50,18,53,52,38,35,34,6,80,245,253,1,8,248,254,4,131,1,179,156,2,6,160,15,254,187,254, + 173,2,149,254,153,180,147,168,194,142,152,178,141,180,2,72,227,1,61,254,190,222,254,70,101,119,130,147,134,49,40,87,254,248,1,28,126,131,170,1, + 100,128,254,246,1,9,127,186,220,221,0,0,0,1,0,100,255,99,3,172,4,97,0,27,0,0,5,53,52,39,38,35,34,7,39,54,55,36,17,16, + 37,32,17,7,35,55,16,35,34,17,16,5,22,23,2,233,59,59,95,131,67,131,67,136,254,206,1,175,1,153,11,195,26,226,254,1,66,141,124,157, + 1,3,77,75,144,79,109,48,193,1,132,1,191,2,254,84,203,199,1,36,254,188,254,169,151,44,157,0,0,3,0,110,255,236,3,39,3,224,0,3, + 0,7,0,11,0,0,19,51,21,35,5,51,21,35,5,51,21,35,110,205,205,1,242,199,199,254,14,202,202,3,224,189,202,186,248,187,0,2,0,100, + 3,92,2,40,6,179,0,15,0,23,0,0,1,50,3,16,7,34,25,1,52,59,1,21,33,34,29,1,23,52,35,34,7,20,51,50,1,74,223,1, + 228,224,198,251,254,236,65,234,123,110,1,116,118,5,178,254,220,254,207,1,1,50,1,99,194,96,76,169,208,183,189,195,0,2,0,16,0,3,5,104, + 5,216,0,2,0,6,0,61,64,12,66,0,149,6,129,1,149,5,8,3,6,7,16,212,196,196,49,0,47,236,244,236,48,75,83,88,64,18,1,17, + 4,6,5,2,17,3,4,3,1,17,5,0,17,6,5,6,5,7,16,236,16,236,7,16,236,8,16,236,89,9,2,37,1,35,1,1,35,1,153,1, + 156,1,16,253,199,229,253,198,5,46,251,156,4,100,170,250,43,5,213,0,255,255,0,16,0,0,5,104,8,75,16,39,2,156,0,192,1,69,18,6, + 6,180,0,0,255,255,0,16,0,0,5,104,5,213,18,6,3,41,0,0,255,255,0,16,0,0,5,104,7,79,16,39,22,193,4,192,1,116,18,6, + 6,180,0,0,0,2,0,201,0,0,5,176,5,213,0,2,0,6,0,64,183,2,28,5,0,28,3,4,7,16,252,236,212,236,49,0,181,66,0,1, + 4,175,3,47,236,57,57,48,75,83,88,64,18,2,17,5,4,6,1,17,3,6,3,2,17,5,0,17,4,5,4,4,7,16,237,16,237,7,16,237, + 16,8,237,89,1,17,9,1,17,1,21,1,115,3,163,251,179,4,231,4,194,252,78,1,218,253,22,5,213,253,135,228,255,255,0,201,0,0,5,176, + 7,79,16,39,22,193,4,41,1,116,18,6,6,182,0,0,255,255,0,201,0,0,5,176,7,78,16,39,22,185,4,41,1,117,18,6,6,182,0,0, + 255,255,0,201,0,0,5,176,5,213,16,39,6,214,1,101,0,0,18,6,6,182,0,0,0,2,0,119,0,0,5,94,5,213,0,2,0,6,0,63, + 182,2,28,3,1,28,4,7,16,220,236,212,236,49,0,181,66,0,2,6,175,3,47,236,57,57,48,75,83,88,64,18,1,17,5,6,4,2,17,3, + 4,3,1,17,5,0,17,6,5,6,4,7,16,237,16,237,7,16,237,16,8,237,89,9,2,19,1,53,1,4,180,252,93,3,163,170,251,25,4,231, + 4,194,254,40,254,38,254,240,2,120,228,2,121,0,0,0,255,255,0,119,0,0,5,94,7,79,16,39,22,193,5,49,1,116,18,6,6,186,0,0, + 255,255,0,201,0,3,6,157,5,216,16,39,6,178,1,53,0,0,16,6,6,214,0,0,255,255,0,16,0,3,6,54,5,216,16,39,6,214,4,161, + 0,0,16,6,6,178,0,0,255,255,0,201,0,0,6,157,5,213,16,38,6,214,0,0,16,7,6,180,1,53,0,0,255,255,0,16,0,0,6,54, + 5,213,16,39,6,214,4,161,0,0,16,6,6,180,0,0,255,255,0,201,0,0,6,157,7,79,16,39,6,181,1,53,0,0,16,6,6,214,0,0, + 255,255,0,16,0,0,6,54,7,79,16,38,6,181,0,0,16,7,6,214,4,161,0,0,255,255,0,201,0,0,7,69,5,213,16,39,6,182,1,149, + 0,0,16,6,6,214,0,0,255,255,0,201,0,0,7,69,5,213,16,39,6,214,5,176,0,0,16,6,6,182,0,0,255,255,0,201,0,0,7,69, + 7,79,16,39,6,183,1,149,0,0,16,6,6,214,0,0,255,255,0,201,0,0,7,69,7,79,16,38,6,183,0,0,16,7,6,214,5,176,0,0, + 255,255,0,201,0,0,5,176,7,79,16,39,22,193,6,201,0,48,18,6,6,183,0,0,255,255,0,201,0,0,6,243,5,213,16,39,6,186,1,149, + 0,0,16,6,6,214,0,0,255,255,0,119,0,0,7,69,5,213,16,38,6,186,0,0,16,7,6,214,5,176,0,0,255,255,0,201,0,0,6,243, + 7,79,16,39,6,187,1,149,0,0,16,6,6,214,0,0,255,255,0,119,0,0,7,69,7,79,16,38,6,187,0,0,16,7,6,214,5,176,0,0, + 255,255,0,119,0,0,5,94,7,79,16,39,22,193,3,63,0,48,18,6,6,187,0,0,0,1,0,201,5,9,1,149,5,213,0,3,0,0,19,51, + 21,35,201,204,204,5,213,204,0,2,0,137,2,156,3,231,5,223,0,2,0,6,0,0,1,3,33,5,1,51,1,2,56,246,1,238,253,89,1,103, + 144,1,103,5,96,253,170,110,3,67,252,189,0,1,0,94,2,218,2,229,5,183,0,3,0,0,19,1,23,1,94,2,25,110,253,231,3,55,2,128, + 93,253,128,0,0,1,0,94,2,218,2,229,5,183,0,3,0,0,1,7,1,55,2,229,110,253,231,110,3,55,93,2,128,93,0,0,0,1,0,137, + 3,48,2,173,5,100,0,17,0,0,1,20,6,34,38,53,17,51,17,20,22,51,50,54,53,52,53,51,2,173,159,230,159,122,87,65,64,88,122,4, + 67,115,160,160,115,1,33,254,223,65,87,88,64,43,246,0,0,1,0,137,3,33,2,173,5,85,0,17,0,0,1,17,35,52,53,52,38,35,34,6, + 21,17,35,17,52,54,50,22,2,173,122,88,64,65,87,122,159,230,159,4,66,254,223,246,43,64,88,87,65,254,223,1,33,115,160,160,0,1,0,137, + 3,48,2,181,5,85,0,16,0,0,1,33,53,33,50,54,53,52,38,35,33,53,33,50,22,20,6,1,163,254,230,1,26,64,88,88,64,254,230,1, + 26,115,159,159,3,48,123,88,64,63,88,123,159,230,160,0,0,2,0,137,3,48,2,173,5,85,0,11,0,19,0,0,1,52,38,35,34,6,21,20, + 22,51,50,62,1,20,6,34,38,52,54,50,2,51,88,64,65,87,87,65,64,88,122,159,230,159,159,230,4,67,63,88,87,64,65,87,88,179,230,160, + 160,230,159,0,0,2,0,72,2,157,3,62,5,222,0,3,0,7,0,0,9,1,23,1,37,1,23,1,1,153,1,30,135,254,227,254,39,1,29,135, + 254,227,2,206,3,16,49,252,240,49,3,16,49,252,240,0,0,2,0,137,2,156,2,165,5,223,0,3,0,7,0,31,183,9,3,93,0,7,93,4, + 8,16,220,236,220,236,196,49,0,182,3,4,247,1,5,145,8,16,244,60,236,50,48,1,17,51,17,33,17,51,17,2,21,144,253,228,144,2,156,3, + 67,252,189,3,67,252,189,0,0,1,0,201,2,126,1,149,3,75,0,3,0,0,19,51,21,35,201,204,204,3,75,205,0,1,0,137,4,6,2,173, + 4,129,0,3,0,0,1,33,53,33,2,173,253,220,2,36,4,6,123,0,0,1,0,137,3,49,2,173,5,86,0,11,0,0,1,21,35,53,35,53, + 51,53,51,21,51,21,1,216,122,213,213,122,213,4,6,213,213,123,213,213,123,0,0,0,0,1,0,137,3,49,2,173,5,135,0,7,0,0,1,17, + 35,17,35,53,33,21,1,216,122,213,2,36,5,12,254,37,1,219,123,123,255,255,0,16,0,3,8,58,5,216,16,39,6,207,5,85,0,0,16,6, + 6,178,0,0,255,255,0,16,0,0,6,199,5,213,16,39,6,207,3,226,0,0,16,6,6,180,0,0,255,255,0,201,0,0,7,34,5,213,16,39, + 6,207,4,61,0,0,16,6,6,182,0,0,255,255,0,119,0,0,8,113,5,213,16,39,6,207,5,140,0,0,16,6,6,186,0,0,255,255,0,16, + 0,0,5,104,5,213,18,6,0,57,0,0,255,255,0,16,0,0,5,104,8,75,16,39,2,156,0,192,1,69,18,6,6,224,0,0,255,255,0,16, + 0,0,5,104,5,213,18,6,3,48,0,0,255,255,0,16,0,0,5,104,7,79,16,39,22,193,4,192,1,116,18,6,6,224,0,0,0,1,0,119, + 0,0,5,94,5,213,0,6,0,58,181,1,28,4,3,0,7,16,220,60,212,236,49,0,179,66,3,175,6,47,236,48,75,83,88,64,18,1,17,3, + 4,5,0,17,6,6,5,1,17,4,2,17,3,3,4,4,7,16,237,16,237,7,16,237,16,8,237,89,55,9,1,53,1,21,1,119,4,77,251,179, + 4,231,251,25,182,2,52,2,48,187,253,135,228,253,136,0,255,255,0,119,0,0,5,94,7,79,16,39,22,193,4,41,1,116,18,6,6,226,0,0, + 255,255,0,119,0,0,5,94,7,78,16,39,22,185,4,41,1,117,18,6,6,226,0,0,255,255,0,119,0,0,5,94,5,213,16,39,6,214,0,182, + 0,0,18,6,6,226,0,0,0,1,0,119,0,0,5,94,5,213,0,6,0,58,181,5,0,6,28,3,7,16,220,236,204,50,49,0,179,66,4,175, + 1,47,236,48,75,83,88,64,18,6,17,4,3,2,0,17,1,1,2,6,17,3,5,17,4,4,3,4,7,16,237,16,237,7,16,237,16,8,237,89, + 37,21,1,53,1,21,1,5,94,251,25,4,231,251,179,182,182,2,120,228,2,121,187,253,208,0,0,0,255,255,0,119,0,0,5,94,7,79,16,39, + 22,193,5,49,1,116,18,6,6,230,0,0,255,255,0,201,0,0,6,157,5,213,16,39,6,222,1,53,0,0,16,6,6,214,0,0,255,255,0,16, + 0,0,6,54,5,213,18,38,0,57,0,0,16,7,6,214,4,161,0,0,255,255,0,201,0,0,6,157,5,213,16,39,6,224,1,53,0,0,16,6, + 6,214,0,0,255,255,0,16,0,0,6,54,5,213,16,38,6,224,0,0,16,7,6,214,4,161,0,0,255,255,0,201,0,0,6,157,7,79,16,39, + 6,225,1,53,0,0,16,6,6,214,0,0,255,255,0,16,0,0,6,54,7,79,16,38,6,225,0,0,16,7,6,214,4,161,0,0,255,255,0,201, + 0,0,6,243,5,213,16,39,6,226,1,149,0,0,16,6,6,214,0,0,255,255,0,119,0,0,7,69,5,213,16,38,6,226,0,0,16,7,6,214, + 5,176,0,0,255,255,0,201,0,0,6,243,7,79,16,39,6,227,1,149,0,0,16,6,6,214,0,0,255,255,0,119,0,0,7,69,7,79,16,38, + 6,227,0,0,16,7,6,214,5,176,0,0,255,255,0,201,0,0,6,243,5,213,16,39,6,230,1,149,0,0,16,6,6,214,0,0,255,255,0,119, + 0,0,7,69,5,213,16,38,6,230,0,0,16,7,6,214,5,176,0,0,255,255,0,201,0,0,6,243,7,79,16,39,6,231,1,149,0,0,16,6, + 6,214,0,0,255,255,0,119,0,0,7,69,7,79,16,38,6,231,0,0,16,7,6,214,5,176,0,0,255,255,0,119,0,0,5,94,7,78,16,39, + 22,185,5,49,1,117,18,6,6,230,0,0,0,1,0,137,2,155,3,160,5,223,0,6,0,60,180,1,5,0,3,7,16,220,204,50,57,49,0,181, + 66,1,247,4,145,7,16,244,228,48,75,83,88,64,18,6,125,4,3,2,0,125,1,1,2,6,125,3,5,125,4,4,3,4,7,16,237,16,237,7, + 16,237,16,8,237,89,1,21,1,53,1,21,1,3,160,252,233,3,23,253,96,3,14,115,1,98,128,1,98,115,254,209,0,1,0,137,2,156,1,25, + 5,223,0,3,0,20,179,2,93,0,4,16,220,236,49,0,180,3,247,1,145,4,16,244,236,48,19,17,51,17,137,144,2,156,3,67,252,189,0,0, + 255,255,0,178,255,227,5,41,5,213,18,6,0,56,0,0,255,255,0,178,0,0,5,41,8,75,16,39,2,156,0,240,1,69,18,6,6,251,0,0, + 0,1,0,178,0,0,5,41,5,242,0,17,0,42,64,9,10,28,8,56,17,28,0,65,18,16,252,75,176,16,84,88,185,0,0,255,192,56,89,236, + 252,236,49,0,181,13,149,4,145,9,0,47,60,244,236,48,51,17,16,0,33,32,0,25,1,35,17,52,38,35,34,6,21,17,178,1,33,1,27,1, + 26,1,33,203,174,194,195,174,3,164,1,36,1,42,254,214,254,220,252,92,3,139,240,211,211,240,252,117,255,255,0,178,0,0,5,41,7,79,16,39, + 22,193,4,231,1,116,18,6,6,251,0,0,0,1,0,119,0,0,5,94,5,213,0,17,0,28,182,4,25,13,50,0,9,18,16,220,60,244,236,49, + 0,182,7,149,9,129,1,149,16,47,236,244,236,48,55,33,32,0,17,16,0,41,1,53,33,32,0,17,16,0,41,1,119,1,190,1,53,1,31,254, + 225,254,203,254,66,1,159,1,178,1,150,254,104,254,80,254,97,166,1,24,1,46,1,44,1,23,166,254,151,254,128,254,126,254,150,0,255,255,0,119, + 0,0,5,94,7,79,16,39,22,193,4,199,1,116,18,6,6,253,0,0,255,255,0,119,0,0,5,94,7,78,16,39,22,185,4,199,1,117,18,6, + 6,253,0,0,255,255,0,119,0,0,5,94,5,213,16,39,6,214,0,182,0,0,18,6,6,253,0,0,0,1,0,121,0,0,5,96,5,213,0,17, + 0,29,183,0,9,50,14,25,5,16,18,16,252,236,244,60,49,0,182,11,149,8,129,17,149,2,47,236,244,236,48,37,21,33,32,0,17,16,0,41, + 1,21,33,32,0,17,16,0,33,5,96,254,97,254,80,254,104,1,150,1,178,1,159,254,66,254,203,254,225,1,31,1,53,166,166,1,106,1,130,1, + 128,1,105,166,254,233,254,212,254,210,254,232,255,255,0,121,0,0,5,96,7,79,16,39,22,193,5,34,1,116,18,6,7,1,0,0,255,255,0,201, + 255,227,6,172,5,213,16,38,6,214,0,0,16,7,6,249,1,131,0,0,255,255,0,178,255,227,6,165,5,213,16,39,6,214,5,16,0,0,16,6, + 6,249,0,0,255,255,0,201,0,0,6,172,5,242,16,39,6,251,1,131,0,0,16,6,6,214,0,0,255,255,0,178,0,0,6,165,5,242,16,38, + 6,251,0,0,16,7,6,214,5,16,0,0,255,255,0,201,0,0,6,172,7,79,16,39,6,252,1,131,0,0,16,6,6,214,0,0,255,255,0,178, + 0,0,6,165,7,79,16,38,6,252,0,0,16,7,6,214,5,16,0,0,255,255,0,201,0,0,6,243,5,213,16,39,6,253,1,149,0,0,16,6, + 6,214,0,0,255,255,0,119,0,0,6,189,5,213,16,39,6,214,5,40,0,0,16,6,6,253,0,0,255,255,0,201,0,0,6,243,7,79,16,39, + 6,254,1,149,0,0,16,6,6,214,0,0,255,255,0,119,0,0,6,189,7,79,16,38,6,254,0,0,16,7,6,214,5,40,0,0,255,255,0,201, + 0,0,7,29,5,213,16,39,7,1,1,189,0,0,16,6,6,214,0,0,255,255,0,121,0,0,6,189,5,213,16,39,6,214,5,40,0,0,16,6, + 7,1,0,0,255,255,0,201,0,0,7,29,7,79,16,39,7,2,1,189,0,0,16,6,6,214,0,0,255,255,0,121,0,0,6,189,7,79,16,38, + 7,2,0,0,16,7,6,214,5,40,0,0,255,255,0,240,0,0,7,29,5,213,16,39,7,1,1,189,0,0,16,6,23,21,0,0,0,1,0,137, + 2,156,3,8,5,223,0,17,0,31,181,9,0,14,126,5,18,16,220,236,204,50,49,0,64,9,17,221,1,247,11,221,8,145,18,16,244,236,244,236, + 48,1,21,35,32,36,53,52,36,33,51,21,35,34,6,21,20,22,51,3,8,110,254,240,254,255,1,0,1,17,110,129,205,153,190,168,3,10,110,203, + 215,215,202,110,147,160,185,123,255,255,0,178,255,227,6,149,5,223,16,39,6,248,5,124,0,0,16,6,6,249,0,0,255,255,0,178,0,0,6,149, + 5,242,16,39,6,248,5,124,0,0,16,6,6,251,0,0,255,255,0,119,0,0,6,125,5,223,16,39,6,248,5,100,0,0,16,6,6,253,0,0, + 255,255,0,121,0,0,6,175,5,223,16,39,6,248,5,150,0,0,16,6,7,1,0,0,0,2,0,70,0,0,4,62,5,242,0,11,0,25,0,37, + 64,9,12,9,28,23,3,25,17,16,26,16,252,236,220,236,50,49,0,64,9,6,149,12,14,0,149,20,145,24,47,244,236,220,57,238,48,1,34,6, + 21,20,22,51,50,54,53,52,38,19,6,7,34,36,53,52,36,51,50,4,21,17,35,2,66,122,173,200,95,128,178,204,204,128,178,235,254,239,1,35, + 217,236,1,16,202,5,82,164,151,168,148,169,147,164,151,253,51,73,1,240,236,250,225,240,236,251,234,0,255,255,0,201,0,0,4,193,8,75,16,39, + 2,156,0,192,1,69,18,6,7,25,0,0,0,2,0,201,0,0,4,193,5,242,0,11,0,25,0,37,64,9,9,25,21,13,3,28,15,4,26,16, + 252,236,50,220,236,49,0,64,9,6,149,12,24,0,149,18,145,14,47,244,236,220,57,238,48,1,34,6,21,20,22,51,50,54,53,52,38,1,17,35, + 17,52,36,51,50,4,21,20,4,35,38,2,197,102,204,178,128,95,200,173,254,84,202,1,16,236,217,1,35,254,239,235,178,5,82,151,164,147,169,148, + 168,151,164,253,51,253,123,4,22,236,240,225,250,236,240,1,255,255,0,201,0,0,4,193,7,79,16,39,22,193,4,192,1,116,18,6,7,25,0,0, + 0,2,0,70,255,227,4,62,5,213,0,11,0,25,0,40,64,9,12,3,28,15,9,25,21,16,26,16,252,236,220,236,50,49,0,64,11,6,149,12, + 24,0,149,18,140,14,145,26,16,236,244,238,212,57,236,48,37,50,54,53,52,38,35,34,6,21,20,22,1,17,51,17,20,4,35,34,36,53,52,36, + 51,22,2,66,102,204,178,128,95,200,173,1,172,202,254,240,236,217,254,221,1,17,235,178,131,151,164,147,169,148,168,151,164,2,205,2,133,251,234,236, + 240,225,250,236,240,1,0,0,255,255,0,70,255,227,4,62,7,79,16,39,22,193,5,211,1,116,18,6,7,27,0,0,255,255,0,70,255,227,4,252, + 7,78,16,39,22,185,5,211,1,117,18,6,7,27,0,0,0,2,0,201,255,227,4,193,5,213,0,11,0,25,0,40,64,9,3,25,17,25,9,28, + 23,4,26,16,252,236,50,220,236,49,0,64,11,6,149,12,14,0,149,20,140,24,145,26,16,236,244,238,212,57,236,48,37,50,54,53,52,38,35,34, + 6,21,20,22,3,54,55,50,4,21,20,4,35,34,36,53,17,51,2,197,122,173,200,95,128,178,204,204,128,178,235,1,17,254,221,217,236,254,240,202, + 131,164,151,168,148,169,147,164,151,2,205,73,1,240,236,250,225,240,236,4,22,0,0,0,255,255,0,201,255,227,4,193,7,79,16,39,22,193,3,53, + 1,116,18,6,7,30,0,0,255,255,0,201,0,0,6,24,5,242,16,39,7,23,1,218,0,0,16,6,6,214,0,0,255,255,0,70,0,0,5,179, + 5,242,16,39,6,214,4,30,0,0,16,6,7,23,0,0,255,255,0,201,0,0,6,63,5,242,16,39,7,25,1,126,0,0,16,6,6,214,0,0, + 255,255,0,201,0,0,6,17,5,242,16,39,6,214,4,124,0,0,16,6,7,25,0,0,255,255,0,201,0,0,6,63,7,79,16,38,6,214,0,0, + 16,7,7,26,1,126,0,0,255,255,0,201,0,0,6,17,7,79,16,38,7,26,0,0,16,7,6,214,4,124,0,0,255,255,0,201,255,227,6,24, + 5,213,16,39,7,27,1,218,0,0,16,6,6,214,0,0,255,255,0,70,255,227,5,179,5,213,16,38,7,27,0,0,16,7,6,214,4,30,0,0, + 255,255,0,201,255,227,6,24,7,79,16,39,7,28,1,218,0,0,16,6,6,214,0,0,255,255,0,70,255,227,5,179,7,79,16,38,7,28,0,0, + 16,7,6,214,4,30,0,0,255,255,0,201,255,227,6,63,5,213,16,39,7,30,1,126,0,0,16,6,6,214,0,0,255,255,0,201,255,227,6,17, + 5,213,16,38,7,30,0,0,16,7,6,214,4,124,0,0,255,255,0,201,255,227,6,63,7,79,16,39,7,31,1,126,0,0,16,6,6,214,0,0, + 255,255,0,201,255,227,6,17,7,79,16,38,7,31,0,0,16,7,6,214,4,124,0,0,255,255,0,240,255,227,6,63,5,213,16,38,23,21,0,0, + 16,7,7,30,1,126,0,0,0,2,0,137,2,139,3,9,5,223,0,11,0,25,0,36,183,3,126,17,9,25,93,24,26,16,220,236,50,212,236,49, + 0,64,10,6,221,14,0,221,20,247,24,145,26,16,244,244,252,212,236,48,1,50,54,53,52,38,35,34,6,21,20,22,3,54,51,50,22,21,20,6, + 35,34,38,53,17,51,1,201,88,80,94,74,92,84,97,97,81,95,148,172,183,137,149,171,144,2,249,86,70,84,72,85,71,81,75,1,125,41,134,132, + 140,126,134,132,2,74,0,0,0,2,0,56,2,139,2,184,5,223,0,11,0,26,0,0,1,50,54,53,52,38,35,34,6,21,20,22,1,48,17,51, + 17,20,6,35,34,38,53,52,54,51,50,1,120,79,97,84,92,74,94,80,1,8,144,171,149,137,183,172,148,95,2,249,75,81,71,85,72,84,70,86, + 1,125,1,105,253,182,132,134,126,140,132,134,255,255,0,70,0,0,5,145,5,242,16,39,6,248,4,120,0,0,16,6,7,23,0,0,255,255,0,201, + 0,0,5,195,5,242,16,39,6,248,4,170,0,0,16,6,7,25,0,0,255,255,0,70,255,227,5,145,5,223,16,39,6,248,4,120,0,0,16,6, + 7,27,0,0,255,255,0,201,255,227,5,195,5,223,16,39,6,248,4,170,0,0,16,6,7,30,0,0,0,1,0,70,0,0,4,62,5,242,0,15, + 0,27,182,10,28,7,0,28,1,16,16,220,236,220,236,49,0,181,0,13,149,4,145,8,47,244,236,204,48,1,35,52,36,51,50,4,21,17,35,17, + 52,38,35,34,6,1,16,202,1,35,217,236,1,16,202,204,102,128,178,4,23,250,225,240,236,251,234,4,23,164,151,169,255,255,0,201,0,0,4,193, + 8,75,16,39,2,156,0,192,1,69,18,6,7,55,0,0,0,1,0,201,0,0,4,193,5,242,0,15,0,28,183,0,28,15,6,28,9,4,16,16, + 252,236,220,236,49,0,181,15,3,149,12,145,8,47,244,236,204,48,1,52,38,35,34,6,21,17,35,17,52,36,51,50,4,21,3,247,178,128,102,204, + 202,1,16,236,217,1,35,4,23,146,169,151,164,251,233,4,22,236,240,225,250,0,0,0,255,255,0,201,0,0,4,193,7,79,16,39,22,193,4,192, + 1,116,18,6,7,55,0,0,0,1,0,70,255,227,4,62,5,213,0,15,0,30,182,6,28,9,0,28,15,16,16,220,236,220,236,49,0,183,0,3, + 149,12,140,7,145,16,16,228,244,238,204,48,1,20,22,51,50,54,53,17,51,17,20,4,35,34,36,53,1,16,178,128,102,204,202,254,240,236,217,254, + 221,1,190,146,169,151,164,4,23,251,234,236,240,225,250,0,255,255,0,70,255,227,4,62,7,79,16,39,22,193,5,211,1,116,18,6,7,57,0,0, + 255,255,0,70,255,227,4,252,7,78,16,39,22,185,5,211,1,117,18,6,7,57,0,0,0,1,0,201,255,227,4,193,5,213,0,15,0,31,183,0, + 28,1,10,28,7,4,16,16,252,236,220,236,49,0,183,0,13,149,4,140,8,145,16,16,228,244,238,204,48,1,51,20,4,35,34,36,53,17,51,17, + 20,22,51,50,54,3,247,202,254,221,217,236,254,240,202,204,102,128,178,1,190,250,225,240,236,4,22,251,233,164,151,169,255,255,0,201,255,227,4,193, + 7,79,16,39,22,193,3,53,1,116,16,6,7,60,0,0,255,255,0,201,0,0,6,24,5,242,16,39,7,53,1,218,0,0,16,6,6,214,0,0, + 255,255,0,70,0,0,5,179,5,242,16,38,7,53,0,0,16,7,6,214,4,30,0,0,255,255,0,201,0,0,6,63,5,242,16,39,7,55,1,126, + 0,0,16,6,6,214,0,0,255,255,0,201,0,0,6,17,5,242,16,38,7,55,0,0,16,7,6,214,4,124,0,0,255,255,0,201,0,0,6,63, + 7,79,16,39,7,56,1,126,0,0,16,6,6,214,0,0,255,255,0,201,0,0,6,17,7,79,16,38,7,56,0,0,16,7,6,214,4,124,0,0, + 255,255,0,201,255,227,6,24,5,213,16,39,7,57,1,218,0,0,16,6,6,214,0,0,255,255,0,70,255,227,5,179,5,213,16,38,7,57,0,0, + 16,7,6,214,4,30,0,0,255,255,0,201,255,227,6,24,7,79,16,39,7,58,1,218,0,0,16,6,6,214,0,0,255,255,0,70,255,227,5,179, + 7,79,16,38,7,58,0,0,16,7,6,214,4,30,0,0,255,255,0,201,255,227,6,63,5,213,16,39,7,60,1,126,0,0,16,6,6,214,0,0, + 255,255,0,201,255,227,6,17,5,213,16,38,7,60,0,0,16,7,6,214,4,124,0,0,255,255,0,201,255,227,6,63,7,79,16,39,7,61,1,126, + 0,0,16,6,6,214,0,0,255,255,0,201,255,227,6,17,7,79,16,38,7,61,0,0,16,7,6,214,4,124,0,0,255,255,0,240,255,227,6,63, + 5,213,16,38,23,21,0,0,16,7,7,60,1,126,0,0,0,1,0,137,2,139,3,9,5,223,0,15,0,30,182,0,93,1,10,93,7,16,16,220, + 236,212,236,49,0,183,0,13,221,4,247,8,145,16,16,244,244,252,204,48,1,51,20,6,35,34,38,53,17,51,17,20,22,51,50,54,2,121,144,183, + 137,149,171,144,97,79,92,84,3,149,140,126,134,132,2,74,253,182,80,77,76,0,0,0,0,1,0,137,2,139,3,9,5,223,0,15,0,0,1,20, + 22,51,50,54,53,17,51,17,20,6,35,34,38,53,1,25,84,92,79,97,144,171,149,137,183,3,149,81,76,77,80,2,74,253,182,132,134,126,140,0, + 0,1,0,119,0,0,4,24,5,213,0,5,0,23,181,2,28,0,58,3,6,16,220,252,236,49,0,180,3,149,4,129,1,47,244,236,48,33,35,17, + 33,53,33,4,24,202,253,41,3,161,5,43,170,0,0,0,255,255,0,201,0,0,4,106,8,75,16,39,2,156,0,169,1,69,18,6,7,81,0,0, + 0,1,0,201,0,0,4,106,5,213,0,5,0,24,64,12,4,149,1,129,0,4,28,2,58,0,4,6,16,252,236,236,49,0,47,244,236,48,51,17, + 33,21,33,17,201,3,161,253,41,5,213,170,250,213,0,0,255,255,0,201,0,0,4,106,7,79,16,39,22,193,4,169,1,116,18,6,7,81,0,0, + 0,1,0,119,0,0,4,24,5,213,0,5,0,23,181,4,28,1,58,3,6,16,220,252,236,49,0,180,3,149,0,129,2,47,228,236,48,1,17,33, + 53,33,17,4,24,252,95,2,215,5,213,250,43,170,5,43,255,255,0,119,0,0,4,25,7,79,16,39,22,193,5,179,1,116,18,6,7,83,0,0, + 255,255,0,119,0,0,4,220,7,78,16,39,22,185,5,179,1,117,18,6,7,83,0,0,255,255,0,201,0,0,4,106,5,213,18,6,0,47,0,0, + 255,255,0,201,0,0,4,106,7,79,16,39,22,193,3,53,1,116,18,6,7,86,0,0,255,255,0,201,0,0,5,53,5,213,16,38,6,214,0,0, + 16,7,7,79,1,29,0,0,255,255,0,119,0,0,5,175,5,213,16,39,6,214,4,26,0,0,16,6,7,79,0,0,255,255,0,201,0,0,5,237, + 5,213,16,38,6,214,0,0,16,7,7,81,1,131,0,0,255,255,0,201,0,0,5,165,5,213,16,39,6,214,4,16,0,0,16,6,7,81,0,0, + 255,255,0,201,0,0,5,237,7,79,16,39,7,82,1,131,0,0,16,6,6,214,0,0,255,255,0,201,0,0,5,165,7,79,16,38,7,82,0,0, + 16,7,6,214,4,16,0,0,255,255,0,201,0,0,5,53,5,213,16,39,7,83,1,29,0,0,16,6,6,214,0,0,255,255,0,119,0,0,5,175, + 5,213,16,38,7,83,0,0,16,7,6,214,4,26,0,0,255,255,0,201,0,0,5,54,7,79,16,39,7,84,1,29,0,0,16,6,6,214,0,0, + 255,255,0,119,0,0,5,175,7,79,16,38,7,84,0,0,16,7,6,214,4,26,0,0,255,255,0,201,0,0,5,237,5,213,16,39,7,86,1,131, + 0,0,16,6,6,214,0,0,255,255,0,201,0,0,5,165,5,213,16,38,7,86,0,0,16,7,6,214,4,16,0,0,255,255,0,201,0,0,5,237, + 7,79,16,39,7,87,1,131,0,0,16,6,6,214,0,0,255,255,0,201,0,0,5,165,7,79,16,38,7,87,0,0,16,7,6,214,4,16,0,0, + 255,255,0,240,0,0,5,237,5,213,16,38,23,21,0,0,16,7,7,86,1,131,0,0,0,1,0,137,2,156,2,165,5,223,0,5,0,25,180,1, + 0,93,3,6,16,220,236,204,49,0,182,0,221,2,247,4,145,6,16,244,244,236,48,1,33,21,33,17,51,1,25,1,140,253,228,144,3,10,110,3, + 67,0,0,0,0,1,0,137,2,156,3,160,5,223,0,17,0,31,181,9,0,14,126,5,18,16,220,236,204,50,49,0,64,9,17,221,1,247,11,221, + 8,145,18,16,244,236,244,236,48,1,21,33,32,36,53,52,36,41,1,21,33,34,6,21,20,22,51,3,160,254,250,254,240,254,255,1,0,1,17,1, + 6,254,231,205,153,190,168,3,10,110,203,215,215,202,110,147,160,185,123,0,0,1,0,137,2,156,2,165,5,223,0,5,0,0,1,17,51,17,33,53, + 2,21,144,253,228,3,10,2,213,252,189,110,0,2,0,119,255,227,6,138,3,125,0,11,0,25,0,40,64,9,3,25,23,21,9,25,15,25,26,16, + 220,212,236,212,57,236,49,0,64,10,6,149,18,140,26,23,0,149,12,26,16,212,236,50,16,244,238,48,1,34,6,21,20,22,51,50,54,53,52,38, + 39,50,4,21,20,4,35,34,36,53,52,55,33,53,4,141,156,139,200,95,95,200,152,143,250,1,3,254,239,236,235,254,239,76,253,154,2,211,166,110, + 168,148,148,168,131,145,170,225,221,236,240,240,236,170,106,170,255,255,0,70,255,227,6,89,6,10,16,39,2,156,0,105,255,4,18,6,7,108,0,0, + 0,2,0,70,255,227,6,89,3,125,0,11,0,25,0,41,64,10,9,25,15,17,3,25,13,23,16,26,16,252,196,236,212,57,236,49,0,64,10,6, + 149,20,140,26,15,0,149,12,26,16,212,236,50,16,244,238,48,1,34,6,21,20,22,51,50,54,53,52,38,39,33,21,33,22,21,20,4,35,34,36, + 53,52,36,2,67,143,153,200,96,94,200,139,155,4,22,253,153,77,254,239,235,236,254,239,1,3,2,211,145,131,168,148,148,168,110,166,170,170,106,170, + 236,240,240,236,221,225,0,0,255,255,0,11,255,227,6,30,5,23,16,39,22,193,4,105,255,60,18,6,7,108,197,0,0,2,0,119,0,0,6,138, + 3,154,0,11,0,25,0,34,64,9,9,25,15,17,3,25,23,13,26,16,220,212,236,212,57,236,49,0,182,6,149,19,0,15,149,12,47,236,50,212, + 236,48,37,50,54,53,52,38,35,34,6,21,20,22,23,33,53,33,38,53,52,36,51,50,4,21,20,4,4,141,143,152,200,95,95,200,139,156,251,234, + 2,102,76,1,17,235,236,1,17,254,253,170,145,131,168,148,148,168,110,166,170,170,106,170,236,240,240,236,221,225,0,0,255,255,0,119,0,0,6,138, + 5,23,16,39,22,193,6,170,255,60,18,6,7,110,0,0,255,255,0,119,0,0,6,138,5,21,16,39,22,185,6,170,255,60,18,6,7,110,0,0, + 0,2,0,70,0,0,6,89,3,154,0,11,0,25,0,35,64,10,3,25,23,21,9,25,24,15,16,26,16,252,196,236,212,57,236,49,0,182,6,149, + 18,0,24,149,12,47,236,50,212,236,48,37,50,54,53,52,38,35,34,6,21,20,22,23,34,36,53,52,36,51,50,4,21,20,7,33,21,2,67,155, + 139,200,94,96,200,153,143,250,254,253,1,17,236,235,1,17,77,2,103,170,166,110,168,148,148,168,131,145,170,225,221,236,240,240,236,170,106,170,0,0, + 255,255,0,70,0,0,6,89,5,23,16,39,22,193,4,84,255,60,18,6,7,113,0,0,255,255,0,201,255,227,8,72,3,125,16,39,7,106,1,190, + 0,0,16,6,6,214,0,0,255,255,0,119,255,227,7,208,3,125,16,39,6,214,6,59,0,0,16,6,7,106,0,0,255,255,0,201,0,0,8,51, + 3,154,16,39,7,113,1,218,0,0,16,6,6,214,0,0,255,255,0,70,0,0,6,89,3,154,16,39,6,214,4,121,0,0,18,6,7,113,0,0, + 255,255,0,201,0,0,8,51,5,23,16,39,7,114,1,218,0,0,16,6,6,214,0,0,255,255,0,70,0,0,6,89,5,23,18,38,7,114,0,0, + 16,7,6,214,4,121,0,0,255,255,0,70,0,0,6,89,5,21,16,39,22,185,4,84,255,60,18,6,7,113,0,0,0,2,0,137,3,223,4,92, + 5,228,0,11,0,24,0,0,1,50,54,53,52,38,35,34,6,21,20,22,23,34,38,53,52,54,32,22,21,20,7,33,21,1,201,106,62,95,73,69, + 99,73,95,157,163,172,1,40,172,48,1,131,4,77,74,66,83,75,70,88,67,73,110,126,124,132,135,135,132,81,59,110,0,1,0,137,2,139,3,46, + 5,223,0,17,0,0,1,34,38,53,17,51,17,20,22,51,50,54,53,17,51,17,20,6,1,220,168,171,144,97,98,97,97,144,171,2,139,134,132,2, + 74,253,182,80,77,77,80,2,74,253,182,132,134,0,0,0,0,2,0,137,3,223,4,92,5,228,0,11,0,25,0,0,1,50,54,53,52,38,35,34, + 6,21,20,22,23,48,33,53,33,38,53,52,54,32,22,21,20,6,3,28,95,73,99,69,73,95,62,106,253,109,1,131,48,172,1,40,172,163,4,77, + 73,67,88,70,75,83,66,74,110,110,59,81,132,135,135,132,124,126,0,0,0,1,0,119,0,0,6,138,3,154,0,15,0,26,181,0,3,25,12,8, + 16,16,220,212,236,204,49,0,181,6,149,9,0,149,15,47,236,212,236,48,37,50,54,53,52,38,35,33,53,33,50,4,21,20,4,35,4,141,98,197, + 152,143,251,234,4,22,250,1,3,254,239,236,165,146,165,131,145,170,225,221,236,240,0,0,255,255,0,70,0,0,6,89,6,10,16,39,2,156,0,164, + 255,4,18,6,7,127,0,0,0,1,0,70,0,0,6,89,3,154,0,15,0,27,182,0,13,25,8,4,16,16,16,252,196,236,204,49,0,181,10,149, + 7,0,149,1,47,236,212,236,48,37,21,34,36,53,52,36,51,33,21,33,34,6,21,20,22,2,67,236,254,239,1,3,250,4,22,251,234,143,153,198, + 165,165,240,236,221,225,170,145,131,165,146,0,255,255,0,70,0,0,6,89,5,23,16,39,22,193,4,164,255,60,18,6,7,127,0,0,0,1,0,119, + 0,0,6,138,3,154,0,15,0,26,181,0,13,25,4,9,16,16,220,212,236,204,49,0,181,0,149,1,10,149,7,47,236,212,236,48,1,53,50,4, + 21,20,4,35,33,53,33,50,54,53,52,38,4,141,236,1,17,254,253,250,251,234,4,22,143,152,197,2,245,165,240,236,221,225,170,145,131,165,146,0, + 255,255,0,119,0,0,6,138,5,23,16,39,22,193,6,170,255,60,18,6,7,129,0,0,255,255,0,119,0,0,6,138,5,21,16,39,22,185,6,170, + 255,60,18,6,7,129,0,0,0,1,0,70,0,0,6,89,3,154,0,15,0,27,182,0,3,25,8,12,16,16,16,252,196,236,204,49,0,181,0,149, + 15,6,149,9,47,236,212,236,48,1,34,6,21,20,22,51,33,21,33,34,36,53,52,36,51,2,67,98,198,153,143,4,22,251,234,250,254,253,1,17, + 236,2,245,146,165,131,145,170,225,221,236,240,255,255,0,70,0,0,6,89,5,23,16,39,22,193,4,164,255,60,18,6,7,132,0,0,255,255,0,201, + 0,0,8,72,3,154,16,39,7,125,1,190,0,0,16,6,6,214,0,0,255,255,0,119,0,0,7,208,3,154,16,38,7,125,0,0,16,7,6,214, + 6,59,0,0,255,255,0,201,0,0,8,51,3,154,16,39,7,127,1,218,0,0,16,6,6,214,0,0,255,255,0,70,0,0,7,198,3,154,16,38, + 7,127,0,0,16,7,6,214,6,49,0,0,255,255,0,201,0,0,8,51,5,23,16,39,7,128,1,218,0,0,16,6,6,214,0,0,255,255,0,70, + 0,0,7,198,5,23,16,38,7,128,0,0,16,7,6,214,6,49,0,0,255,255,0,201,0,0,8,72,3,154,16,39,7,129,1,190,0,0,16,6, + 6,214,0,0,255,255,0,119,0,0,7,208,3,154,16,38,7,129,0,0,16,7,6,214,6,59,0,0,255,255,0,201,0,0,8,72,5,23,16,39, + 7,130,1,190,0,0,16,6,6,214,0,0,255,255,0,119,0,0,7,208,5,23,16,38,7,130,0,0,16,7,6,214,6,59,0,0,255,255,0,201, + 0,0,8,51,3,154,16,39,7,132,1,218,0,0,16,6,6,214,0,0,255,255,0,70,0,0,7,198,3,154,16,38,7,132,0,0,16,7,6,214, + 6,49,0,0,255,255,0,201,0,0,8,51,5,23,16,39,7,133,1,218,0,0,16,6,6,214,0,0,255,255,0,70,0,0,7,198,5,23,16,38, + 7,133,0,0,16,7,6,214,6,49,0,0,0,1,0,137,3,223,4,92,5,228,0,15,0,0,1,34,6,21,20,22,51,33,21,33,34,38,53,52, + 54,51,1,220,82,105,80,89,2,146,253,110,158,163,172,167,5,118,68,90,72,67,110,126,131,125,135,0,0,1,0,119,0,0,5,94,5,213,0,12, + 0,0,37,21,1,53,45,1,53,1,21,13,1,21,5,5,94,251,25,3,106,252,150,4,231,252,20,3,236,252,20,182,182,1,50,228,212,213,228,1, + 50,187,233,236,184,233,0,0,0,1,0,70,0,0,4,10,5,213,0,12,0,28,183,7,28,4,63,0,28,11,13,16,220,236,252,236,49,0,181,3, + 149,7,11,129,6,47,244,212,236,48,1,16,0,33,51,17,35,17,36,0,17,53,51,1,16,1,84,1,67,99,202,254,250,254,12,202,5,168,254,153, + 254,189,253,2,2,88,3,1,111,1,157,110,255,255,0,201,0,0,5,50,8,75,16,39,2,156,2,32,1,69,18,6,7,152,0,0,0,1,0,201, + 0,0,4,141,5,213,0,12,0,30,64,9,1,28,2,63,6,28,8,4,13,16,252,236,252,236,49,0,181,10,149,6,1,129,8,47,244,212,236,48, + 1,53,51,21,16,0,5,17,35,17,51,32,0,3,195,202,254,12,254,250,202,99,1,67,1,84,5,168,45,110,254,99,254,145,3,253,168,2,254,1, + 67,0,0,0,255,255,0,201,0,0,4,141,7,79,16,39,22,193,6,32,1,116,18,6,7,152,0,0,0,1,0,70,0,0,4,10,5,213,0,12, + 0,28,183,6,28,9,63,0,28,3,13,16,220,236,252,236,49,0,181,10,149,6,7,129,2,47,228,212,236,48,37,21,35,53,16,0,37,17,51,17, + 35,32,0,1,16,202,1,244,1,6,202,99,254,189,254,172,45,45,110,1,157,1,111,3,2,88,253,2,254,189,0,0,255,255,0,70,0,0,4,10, + 7,79,16,39,22,193,5,163,1,116,18,6,7,154,0,0,255,255,0,70,0,0,4,204,7,78,16,39,22,185,5,163,1,117,18,6,7,154,0,0, + 0,1,0,201,0,0,4,141,5,213,0,12,0,30,64,9,0,28,10,63,6,28,5,4,13,16,252,236,252,236,49,0,181,3,149,7,5,129,11,47, + 228,212,236,48,37,16,0,33,35,17,51,17,4,0,17,21,35,3,195,254,172,254,189,99,202,1,6,1,244,202,45,1,103,1,67,2,254,253,168,3, + 254,145,254,99,110,0,0,0,255,255,0,201,0,0,4,141,7,79,16,39,22,193,3,51,1,116,18,6,7,157,0,0,255,255,0,201,0,0,5,228, + 5,213,16,39,7,150,1,218,0,0,16,6,6,214,0,0,255,255,0,70,0,0,5,145,5,213,16,39,6,214,3,252,0,0,16,6,7,150,0,0, + 255,255,0,201,0,0,6,16,5,213,16,39,7,152,1,131,0,0,16,6,6,214,0,0,255,255,0,201,0,0,5,180,5,213,16,39,6,214,4,31, + 0,0,16,6,7,152,0,0,255,255,0,201,0,0,6,16,7,79,16,39,7,153,1,131,0,0,16,6,6,214,0,0,255,255,0,201,0,0,5,180, + 7,79,16,38,7,153,0,0,16,7,6,214,4,31,0,0,255,255,0,201,0,0,5,228,5,213,16,39,7,154,1,218,0,0,16,6,6,214,0,0, + 255,255,0,70,0,0,5,145,5,213,16,38,7,154,0,0,16,7,6,214,3,252,0,0,255,255,0,201,0,0,5,228,7,79,16,39,7,155,1,218, + 0,0,16,6,6,214,0,0,255,255,0,70,0,0,5,145,7,79,16,38,7,155,0,0,16,7,6,214,3,252,0,0,255,255,0,201,0,0,6,16, + 5,213,16,39,7,157,1,131,0,0,16,6,6,214,0,0,255,255,0,201,0,0,5,180,5,213,16,38,7,157,0,0,16,7,6,214,4,31,0,0, + 255,255,0,201,0,0,6,16,7,79,16,39,7,158,1,131,0,0,16,6,6,214,0,0,255,255,0,201,0,0,5,180,7,79,16,38,7,158,0,0, + 16,7,6,214,4,31,0,0,255,255,0,240,0,0,6,16,5,213,16,38,23,21,0,0,16,7,7,157,1,131,0,0,0,1,0,137,2,156,2,232, + 5,223,0,12,0,30,182,12,93,11,7,93,4,13,16,220,236,212,236,49,0,183,7,221,4,12,247,5,145,13,16,244,244,220,236,48,1,52,38,43, + 1,17,51,17,30,1,29,1,35,2,88,184,207,72,144,227,236,144,2,198,199,156,1,182,254,185,21,229,172,86,0,0,0,1,0,137,2,139,2,236, + 5,238,0,43,0,0,1,21,46,1,35,34,6,21,20,23,22,31,1,22,23,22,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,39,38,47, + 1,38,39,38,53,52,54,51,50,22,2,184,67,119,55,66,104,35,45,56,71,127,67,62,169,164,61,139,74,71,137,66,65,109,39,46,47,71,127,63, + 59,162,143,61,126,5,195,135,31,30,72,41,64,19,28,15,14,24,64,60,102,121,126,27,26,132,39,39,76,56,61,35,40,9,13,23,59,54,95,111, + 128,22,0,0,0,1,0,137,2,156,2,232,5,223,0,14,0,0,1,48,21,35,53,52,54,55,48,17,51,17,35,34,6,1,25,144,236,227,144,72, + 207,184,2,198,42,86,172,229,21,1,71,254,74,156,0,0,0,1,0,70,255,227,5,108,5,242,0,27,0,0,1,20,22,51,50,54,53,51,16,6, + 35,34,38,25,1,52,38,35,34,6,21,35,16,54,51,50,22,17,3,62,86,92,96,82,202,186,194,170,210,86,92,96,82,202,186,194,170,210,1,190, + 211,104,90,225,254,231,194,183,1,37,2,88,211,104,90,225,1,25,194,183,254,219,0,0,0,1,0,70,255,227,5,108,5,242,0,27,0,0,1,17, + 16,54,51,50,22,17,35,52,38,35,34,6,21,17,16,6,35,34,38,17,51,20,22,51,50,54,2,116,210,170,194,186,202,82,96,92,86,210,170,194, + 186,202,82,96,92,86,1,190,2,88,1,37,183,194,254,231,225,90,104,211,253,168,254,219,183,194,1,25,225,90,104,0,255,255,0,70,255,227,5,108, + 7,79,16,39,22,193,5,243,1,116,16,6,7,178,0,0,0,1,0,70,255,227,6,220,3,183,0,39,0,0,1,30,1,51,50,54,53,52,38,35, + 53,32,18,21,6,2,33,34,2,47,1,46,1,35,34,6,21,20,22,51,21,34,2,53,52,18,33,50,18,23,3,250,33,132,114,122,124,75,171,1, + 3,200,1,163,254,217,172,215,52,50,32,132,115,127,119,85,161,249,210,164,1,39,173,214,52,1,176,88,203,167,124,96,229,165,254,195,173,149,254,200, + 1,25,126,112,88,203,167,124,96,229,165,1,74,160,154,1,51,254,231,126,255,255,0,70,255,227,6,220,5,23,16,39,22,193,5,139,255,60,16,6, + 7,180,0,0,0,1,0,70,255,227,6,220,3,183,0,39,0,0,1,55,54,18,51,32,18,23,20,2,35,53,50,54,53,52,38,35,34,6,15,1, + 6,2,35,32,2,39,52,18,33,21,34,6,21,20,22,51,50,54,3,40,50,52,215,172,1,39,163,1,210,249,161,85,118,128,114,132,33,50,52,214, + 173,254,217,163,1,200,1,3,171,75,124,122,115,132,1,176,112,126,1,25,254,200,149,166,254,188,165,229,96,124,167,203,88,112,126,254,231,1,56,149, + 173,1,61,165,229,96,124,167,203,0,0,0,255,255,0,70,255,227,6,220,5,23,16,39,22,193,5,139,255,60,16,6,7,182,0,0,255,255,0,201, + 255,227,7,1,5,242,16,38,6,214,0,0,16,7,7,177,1,149,0,0,255,255,0,70,255,227,6,131,5,242,16,38,7,177,0,0,16,7,6,214, + 4,238,0,0,255,255,0,201,255,227,7,1,5,242,16,39,7,178,1,149,0,0,16,6,6,214,0,0,255,255,0,70,255,227,6,131,5,242,16,38, + 7,178,0,0,16,7,6,214,4,238,0,0,255,255,0,201,255,227,7,1,7,79,16,39,7,179,1,149,0,0,16,6,6,214,0,0,255,255,0,70, + 255,227,6,131,7,79,16,38,7,179,0,0,16,7,6,214,4,238,0,0,255,255,0,201,255,227,8,217,3,183,16,39,7,180,1,253,0,0,16,6, + 6,214,0,0,255,255,0,70,255,227,8,85,3,183,16,39,6,214,6,192,0,0,16,6,7,180,0,0,255,255,0,201,255,227,8,217,5,23,16,39, + 7,181,1,253,0,0,16,6,6,214,0,0,255,255,0,70,255,227,8,85,5,23,16,38,7,181,0,0,16,7,6,214,6,192,0,0,255,255,0,201, + 255,227,8,217,3,183,16,39,7,182,1,253,0,0,16,6,6,214,0,0,255,255,0,70,255,227,8,85,3,183,16,38,7,182,0,0,16,7,6,214, + 6,192,0,0,255,255,0,201,255,227,8,217,5,23,16,39,7,183,1,253,0,0,16,6,6,214,0,0,255,255,0,70,255,227,8,85,5,23,16,38, + 7,183,0,0,16,7,6,214,6,192,0,0,0,1,0,137,3,207,4,175,5,230,0,39,0,0,1,62,2,55,50,22,23,20,6,35,53,50,54,53, + 52,38,35,34,6,15,1,14,1,35,34,38,39,52,54,51,21,34,6,21,20,22,51,50,54,2,91,42,39,115,111,190,98,1,132,157,73,61,74,60, + 75,50,23,65,11,145,115,186,102,1,126,163,77,56,75,58,66,69,4,204,70,61,150,1,168,77,93,181,110,119,45,27,108,65,35,118,21,186,174,84, + 97,177,107,121,46,49,101,77,0,1,0,119,0,0,4,59,5,213,0,8,0,46,181,2,28,8,6,4,9,16,220,204,212,236,49,0,182,66,8,149, + 2,6,129,0,47,244,212,236,48,75,83,88,183,6,17,5,7,17,4,4,5,5,7,16,237,16,237,89,33,35,17,33,53,1,51,1,33,4,59,202, + 253,6,2,61,202,253,195,2,250,2,88,173,2,208,253,45,255,255,0,201,0,0,4,141,8,75,16,39,2,156,255,226,1,69,18,6,7,201,0,0, + 0,1,0,201,0,0,4,141,5,213,0,8,0,47,182,4,5,7,28,0,4,9,16,252,236,212,204,49,0,182,66,1,149,7,3,129,0,47,244,212, + 236,48,75,83,88,183,2,17,5,3,17,4,4,5,5,7,16,237,16,237,89,51,17,33,1,51,1,21,33,17,201,2,250,253,195,202,2,61,253,6, + 3,2,2,211,253,48,173,253,168,0,0,0,255,255,0,201,0,0,4,141,7,79,16,39,22,193,3,226,1,116,18,6,7,201,0,0,0,1,0,119, + 0,0,4,59,5,213,0,8,0,46,181,7,28,1,3,6,9,16,220,204,212,236,49,0,182,66,2,149,7,0,129,4,47,228,212,236,48,75,83,88, + 183,2,17,5,3,17,4,4,5,5,7,16,237,16,237,89,1,17,33,1,35,1,53,33,17,4,59,253,6,2,61,202,253,195,2,250,5,213,252,254, + 253,45,2,208,173,2,88,0,255,255,0,119,0,0,4,64,7,79,16,39,22,193,5,218,1,116,18,6,7,203,0,0,255,255,0,119,0,0,5,3, + 7,78,16,39,22,185,5,218,1,117,18,6,7,203,0,0,0,1,0,201,0,0,4,141,5,213,0,8,0,47,182,5,4,1,28,0,4,9,16,252, + 236,212,204,49,0,182,66,7,149,3,0,129,6,47,228,212,236,48,75,83,88,183,6,17,5,7,17,4,4,5,5,7,16,237,16,237,89,19,51,17, + 33,21,1,35,1,33,201,202,2,250,253,195,202,2,61,253,6,5,213,253,168,173,253,48,2,211,0,0,255,255,0,201,0,0,4,141,7,79,16,39, + 22,193,3,53,1,116,18,6,7,206,0,0,255,255,0,201,0,0,5,248,5,213,16,39,7,199,1,189,0,0,16,6,6,214,0,0,255,255,0,119, + 0,0,5,200,5,213,16,39,6,214,4,51,0,0,16,6,7,199,0,0,255,255,0,201,0,0,6,16,5,213,16,39,7,201,1,131,0,0,16,6, + 6,214,0,0,255,255,0,201,0,0,6,21,5,213,16,39,6,214,4,128,0,0,16,6,7,201,0,0,255,255,0,201,0,0,6,16,7,79,16,39, + 7,202,1,131,0,0,16,6,6,214,0,0,255,255,0,201,0,0,6,21,7,79,16,38,7,202,0,0,16,7,6,214,4,128,0,0,255,255,0,201, + 0,0,5,248,5,213,16,39,7,203,1,189,0,0,16,6,6,214,0,0,255,255,0,119,0,0,5,200,5,213,16,38,7,203,0,0,16,7,6,214, + 4,51,0,0,255,255,0,201,0,0,5,253,7,79,16,39,7,204,1,189,0,0,16,6,6,214,0,0,255,255,0,119,0,0,5,200,7,79,16,38, + 7,204,0,0,16,7,6,214,4,51,0,0,255,255,0,201,0,0,6,16,5,213,16,39,7,206,1,131,0,0,16,6,6,214,0,0,255,255,0,201, + 0,0,6,21,5,213,16,38,7,206,0,0,16,7,6,214,4,128,0,0,255,255,0,201,0,0,6,16,7,79,16,39,7,207,1,131,0,0,16,6, + 6,214,0,0,255,255,0,201,0,0,6,21,7,79,16,38,7,207,0,0,16,7,6,214,4,128,0,0,255,255,0,240,0,0,6,16,5,213,16,38, + 23,21,0,0,16,7,7,206,1,131,0,0,0,1,0,137,2,155,2,232,5,223,0,8,0,52,182,5,7,3,2,93,8,9,16,220,236,212,57,204, + 49,0,64,9,66,2,221,8,5,247,0,145,9,16,244,244,220,236,48,75,83,88,183,6,125,5,7,125,4,4,5,7,16,5,237,16,237,89,19,51, + 17,33,21,1,35,1,33,137,144,1,207,254,165,145,1,109,254,32,5,223,254,183,121,254,126,1,141,0,255,255,0,137,3,49,2,173,5,86,18,6, + 6,216,0,0,0,1,0,137,2,156,3,111,5,223,0,11,0,0,19,51,27,1,51,9,1,35,11,1,35,1,176,145,197,198,145,254,237,1,37,145, + 225,227,145,1,47,5,223,254,222,1,34,254,121,254,68,1,82,254,174,1,188,0,0,0,0,1,0,201,255,227,6,220,3,125,0,19,0,39,64,9, + 9,28,12,1,28,10,0,4,20,16,252,196,236,212,236,49,0,64,10,5,149,16,140,20,12,149,9,0,20,16,212,60,236,16,244,238,48,19,51,17, + 20,22,51,50,54,53,17,33,21,33,17,20,4,35,34,36,53,201,202,206,101,94,212,2,228,253,230,254,239,235,236,254,239,3,125,254,66,164,152,148, + 168,1,190,170,254,236,236,240,240,236,0,0,0,1,0,119,255,227,6,138,3,125,0,19,0,37,183,11,28,8,19,28,0,10,20,16,220,212,236,212, + 236,49,0,64,10,15,149,4,140,20,8,149,10,0,20,16,212,60,236,16,244,238,48,1,17,20,4,35,34,36,53,17,33,53,33,17,20,22,51,50, + 54,53,17,6,138,254,239,236,235,254,239,253,230,2,228,211,95,101,206,3,125,254,66,236,240,240,236,1,20,170,254,66,168,148,152,164,1,190,0,0, + 0,1,0,119,0,0,6,138,3,154,0,19,0,31,183,9,28,13,1,28,0,10,20,16,220,212,236,212,236,49,0,182,5,149,16,12,149,10,0,47, + 60,236,212,236,48,33,35,17,52,38,35,34,6,21,17,33,53,33,17,52,36,51,50,4,21,6,138,202,206,101,95,211,253,28,2,26,1,17,235,236, + 1,17,1,190,164,152,148,168,254,66,170,1,20,236,240,240,236,0,0,0,255,255,0,201,0,0,6,220,6,10,16,39,2,156,0,192,255,4,16,6, + 7,230,0,0,0,1,0,201,0,0,6,220,3,154,0,19,0,33,64,9,11,28,7,19,28,9,0,4,20,16,252,196,236,212,236,49,0,182,15,149, + 4,8,149,10,0,47,60,236,212,236,48,51,17,52,36,51,50,4,21,17,33,21,33,17,52,38,35,34,6,21,17,201,1,17,236,235,1,17,2,26, + 253,28,212,94,101,206,1,190,236,240,240,236,254,236,170,1,190,168,148,152,164,254,66,0,255,255,0,201,0,0,6,220,5,23,16,39,22,193,4,192, + 255,60,18,6,7,230,0,0,0,1,0,201,0,0,4,141,5,213,0,19,0,35,64,10,16,25,5,63,10,28,0,11,4,20,16,252,60,236,252,236, + 49,0,183,13,149,8,0,149,1,129,11,47,244,236,212,236,48,19,53,33,50,4,21,20,4,43,1,17,35,17,33,50,54,53,52,38,35,201,1,200, + 251,1,1,254,255,251,254,202,1,200,141,154,154,141,5,47,166,227,219,221,226,253,168,2,254,146,135,134,146,0,0,0,255,255,0,201,0,0,4,141, + 7,79,16,39,22,193,4,22,1,116,18,6,7,232,0,0,0,1,0,201,0,0,4,141,5,213,0,19,0,35,64,10,4,25,15,63,10,28,0,9, + 4,20,16,252,60,236,252,236,49,0,183,7,149,11,0,149,9,129,19,47,228,236,212,236,48,55,33,50,54,53,52,38,35,33,17,51,17,51,50,4, + 21,20,4,35,33,201,1,200,141,154,154,141,254,56,202,254,251,1,1,254,255,251,254,56,166,146,134,135,146,2,254,253,168,226,221,219,227,0,0,0, + 0,1,0,70,0,0,4,10,5,213,0,19,0,34,64,9,11,28,19,8,63,4,25,15,20,16,220,236,252,60,236,49,0,183,7,149,11,0,149,19, + 129,10,47,244,236,212,236,48,1,33,34,6,21,20,22,51,33,17,35,17,35,34,36,53,52,36,51,33,4,10,254,56,141,154,154,141,1,200,202,254, + 251,254,255,1,1,251,1,200,5,47,146,134,135,146,253,2,2,88,226,221,219,227,0,0,255,255,0,70,0,0,4,10,7,79,16,39,22,193,4,132, + 1,116,18,6,7,235,0,0,0,1,0,70,0,0,4,10,5,213,0,19,0,34,64,9,9,28,12,0,63,16,25,5,20,16,220,236,252,60,236,49, + 0,183,13,149,9,0,149,10,129,1,47,228,236,212,236,48,37,21,33,34,36,53,52,36,59,1,17,51,17,33,34,6,21,20,22,51,4,10,254,56, + 251,254,255,1,1,251,254,202,254,56,141,154,154,141,166,166,227,219,221,226,2,88,253,2,146,135,134,146,255,255,0,201,0,0,5,228,7,79,16,39, + 7,236,1,218,0,0,16,6,6,214,0,0,255,255,0,70,0,0,5,145,7,79,16,39,6,214,3,252,0,0,16,6,7,236,0,0,0,1,0,137, + 2,155,2,232,5,223,0,20,0,36,183,11,93,8,0,4,126,16,21,16,220,236,212,60,236,49,0,64,10,8,221,11,0,221,9,247,20,145,21,16, + 244,228,252,212,236,48,1,33,34,6,21,20,22,51,33,17,35,17,35,34,39,38,53,52,54,51,33,2,232,254,225,86,82,88,80,1,31,144,143,148, + 91,81,162,158,1,31,5,113,69,80,66,74,254,75,1,72,71,63,124,123,127,0,0,0,0,1,0,119,0,0,5,94,5,213,0,12,0,0,55,45, + 1,53,45,1,53,1,21,13,1,21,1,119,3,236,252,20,3,236,252,20,4,231,252,150,3,106,251,25,182,238,233,184,236,233,187,254,206,228,213,212, + 228,254,206,0,0,2,0,150,0,0,5,104,5,243,0,11,0,28,0,80,182,9,23,20,3,26,14,29,16,212,196,204,212,57,204,49,0,64,9,66, + 6,23,0,17,24,25,175,28,47,252,57,212,204,212,204,48,75,83,88,64,22,22,21,23,20,24,17,27,12,28,25,17,26,27,26,24,17,28,23,17, + 12,12,28,5,7,16,237,16,237,7,16,237,8,16,237,17,18,57,57,89,1,34,6,21,20,22,51,50,54,53,52,38,1,38,53,52,54,23,50,22, + 21,20,6,7,9,1,51,1,35,1,166,52,60,60,50,44,66,58,254,231,41,176,96,106,167,159,126,1,34,1,218,210,253,199,229,5,78,47,48,64, + 46,66,44,34,61,254,190,106,121,105,156,1,145,115,102,156,8,252,226,5,14,250,43,0,255,255,0,150,255,226,5,104,8,75,16,39,2,156,0,192, + 1,69,18,6,7,244,0,0,0,2,0,150,255,226,5,104,5,213,0,11,0,28,0,80,182,9,3,21,9,15,27,29,16,212,196,204,212,57,204,49, + 0,64,9,66,6,18,0,24,17,13,175,16,47,236,57,212,204,212,204,48,75,83,88,64,22,20,19,28,21,17,17,14,12,13,16,17,15,15,14,17, + 17,13,18,17,12,12,13,5,7,16,237,16,237,7,16,237,8,16,237,17,18,57,57,89,37,50,54,53,52,38,35,34,6,21,20,22,3,1,51,1, + 35,9,1,30,1,21,20,6,35,6,38,53,52,1,166,50,58,66,44,50,60,60,179,1,139,229,2,57,210,254,38,254,222,126,159,167,106,96,176,135, + 61,34,44,66,46,64,48,47,1,66,4,12,250,43,5,14,252,226,8,156,102,115,145,1,156,105,121,0,255,255,0,150,255,226,5,104,7,79,16,39, + 22,193,4,192,1,116,18,6,7,244,0,0,0,2,0,77,0,0,5,88,5,75,0,11,0,28,0,84,64,10,3,12,9,18,28,28,25,18,27,29, + 16,220,196,212,236,16,204,212,204,49,0,183,66,0,12,15,6,28,21,26,47,220,57,204,212,57,204,48,75,83,88,64,22,14,13,15,12,28,17,25, + 26,24,12,17,23,24,23,28,17,25,27,17,26,25,26,4,7,16,237,16,237,7,16,237,16,8,237,17,18,57,57,89,1,50,54,53,52,38,35,34, + 6,21,20,22,37,14,1,35,34,38,53,52,54,51,50,23,1,21,1,53,1,1,93,50,58,66,44,50,60,60,1,68,12,164,96,109,163,174,71,65, + 74,3,139,251,25,4,77,3,221,61,34,44,66,46,64,48,47,59,97,127,161,99,142,129,37,254,54,228,253,136,182,2,52,0,0,0,255,255,0,77, + 0,0,5,88,7,79,16,39,22,193,4,174,1,116,18,6,7,246,0,0,0,2,0,119,0,0,5,130,5,75,0,11,0,28,0,82,64,9,9,12, + 3,23,15,13,28,16,29,16,220,236,212,212,204,212,204,49,0,183,66,0,12,26,6,13,20,15,47,220,57,204,212,57,204,48,75,83,88,64,22,28, + 27,26,12,13,17,16,15,17,12,17,18,17,18,13,17,16,14,17,15,16,15,4,7,16,237,16,237,7,16,237,16,8,237,17,18,57,57,89,1,50, + 54,53,52,38,35,34,6,21,20,22,39,9,1,21,1,53,1,54,51,50,22,21,20,6,35,34,38,4,114,52,60,60,50,44,66,58,222,253,175,4, + 77,251,25,3,139,74,65,71,174,180,90,110,153,3,221,47,48,64,46,66,44,34,61,59,254,210,253,204,182,2,120,228,1,202,37,129,142,109,151,135, + 255,255,0,119,0,0,5,130,7,79,16,39,22,193,5,49,1,116,18,6,7,248,0,0,255,255,0,201,0,0,7,23,7,79,16,39,7,249,1,149, + 0,0,16,6,6,214,0,0,255,255,0,119,0,0,7,69,7,79,16,38,7,249,0,0,16,7,6,214,5,176,0,0,0,2,0,137,2,155,3,178, + 5,144,0,11,0,32,0,0,1,50,54,53,52,38,35,34,6,21,20,22,39,5,1,21,1,53,37,54,51,50,23,22,21,20,7,6,35,34,35,34, + 38,3,6,33,38,38,31,28,42,37,136,254,161,2,160,252,233,2,55,46,41,44,39,72,50,48,71,1,2,64,98,4,194,27,27,36,25,37,24,19, + 35,25,158,254,209,115,1,98,128,254,20,25,47,79,59,44,43,73,0,0,0,2,0,178,255,227,5,41,5,242,0,10,0,39,0,0,1,50,54,53, + 52,38,34,6,21,20,22,7,17,20,22,51,50,54,53,17,51,17,16,0,33,32,0,25,1,52,54,51,50,22,21,20,7,6,35,34,1,235,40,66, + 58,100,58,66,66,174,195,194,174,203,254,223,254,230,254,229,254,223,173,138,106,167,73,74,126,60,4,128,66,44,34,62,62,34,44,66,136,254,82,240, + 211,211,240,3,139,252,92,254,220,254,214,1,42,1,36,2,178,106,165,144,116,95,85,86,0,2,0,178,255,227,5,41,5,242,0,10,0,39,0,0, + 1,50,54,53,52,38,34,6,21,20,22,23,6,35,34,39,38,53,52,54,51,50,22,21,17,16,0,33,32,0,25,1,51,17,20,22,51,50,54,53, + 3,240,44,66,58,100,58,66,150,48,60,126,74,73,167,106,138,173,254,223,254,229,254,230,254,223,203,174,194,195,174,4,128,66,44,34,62,62,34,44, + 66,136,20,86,85,95,116,144,165,106,253,78,254,220,254,214,1,42,1,36,3,164,252,117,240,211,211,240,0,2,0,178,255,227,5,41,5,242,0,10, + 0,39,0,0,1,34,6,21,20,22,50,54,53,52,38,39,54,51,50,23,22,21,20,6,35,34,38,53,17,16,0,33,32,0,25,1,35,17,52,38, + 35,34,6,21,1,235,44,66,58,100,58,66,150,48,60,126,74,73,167,106,138,173,1,33,1,27,1,26,1,33,203,174,194,195,174,1,85,66,44,34, + 62,62,34,44,66,136,20,86,85,95,116,144,165,106,2,178,1,36,1,42,254,214,254,220,252,92,3,139,240,211,211,240,0,2,0,178,255,227,5,41, + 5,242,0,10,0,39,0,0,1,34,6,21,20,22,50,54,53,52,38,55,17,52,38,35,34,6,21,17,35,17,16,0,33,32,0,25,1,20,6,35, + 34,38,53,52,55,54,51,50,3,240,40,66,58,100,58,66,66,174,195,194,174,203,1,33,1,26,1,27,1,33,173,138,106,167,73,74,126,60,1,85, + 66,44,34,62,62,34,44,66,136,1,174,240,211,211,240,252,117,3,164,1,36,1,42,254,214,254,220,253,78,106,165,144,116,95,85,86,255,255,0,178, + 255,227,5,41,7,79,16,39,22,193,4,231,1,116,18,6,7,255,0,0,255,255,0,178,255,227,5,41,7,79,16,39,22,193,4,231,1,116,18,6, + 8,0,0,0,0,2,0,83,0,0,5,94,5,213,0,8,0,36,0,0,18,20,22,50,54,52,38,7,34,5,22,21,20,6,7,6,38,53,52,54, + 59,1,32,0,17,16,0,41,1,53,33,32,0,17,16,39,38,243,60,104,60,59,53,53,1,49,20,139,133,115,157,163,109,179,1,178,1,150,254,104, + 254,80,254,97,1,190,1,53,1,31,143,134,5,1,96,47,47,96,47,1,1,44,49,106,151,3,3,151,112,99,161,254,151,254,128,254,126,254,150,166, + 1,24,1,46,1,44,140,129,255,255,0,83,0,0,5,94,7,79,16,39,22,193,4,199,1,116,18,6,8,3,0,0,0,2,0,121,0,0,5,132, + 5,213,0,8,0,36,0,0,0,52,38,35,38,6,20,22,50,37,4,7,6,17,16,0,41,1,21,33,32,0,17,16,0,33,51,50,22,21,20,6, + 39,46,1,53,52,4,228,59,53,53,59,60,104,254,208,254,235,133,144,1,31,1,53,1,190,254,97,254,80,254,104,1,150,1,178,179,109,163,157,115, + 133,139,4,161,96,46,1,47,96,47,188,9,129,140,254,212,254,210,254,232,166,1,106,1,130,1,128,1,105,161,99,112,151,3,3,151,106,49,0,0, + 255,255,0,121,0,0,5,132,7,79,16,39,22,193,5,34,1,116,18,6,8,5,0,0,255,255,0,201,0,0,7,65,7,79,16,39,8,6,1,189, + 0,0,16,6,6,214,0,0,255,255,0,121,0,0,6,189,7,79,16,38,8,6,0,0,16,7,6,214,5,40,0,0,0,2,0,137,2,156,3,189, + 5,223,0,11,0,38,0,0,1,34,6,21,20,22,51,50,54,53,52,38,7,34,38,53,52,55,6,7,6,21,20,22,51,33,21,33,32,36,16,36, + 33,51,50,22,21,20,6,3,21,31,38,38,33,27,38,38,30,70,99,13,193,73,77,190,168,1,25,254,250,254,240,254,255,1,0,1,17,114,82,95, + 98,5,113,25,36,27,27,27,27,36,25,207,86,60,33,28,3,70,74,160,185,123,110,203,1,174,202,89,82,59,87,0,0,2,0,70,0,0,6,46, + 5,242,0,11,0,28,0,0,1,34,6,21,20,22,51,50,54,53,52,38,19,17,6,7,34,36,53,52,36,51,50,4,21,17,1,23,1,2,66,122, + 173,200,95,128,178,204,204,128,178,235,254,239,1,35,217,236,1,16,1,86,154,254,104,5,82,164,151,168,148,169,147,164,151,250,174,2,133,73,1,240, + 236,250,225,240,236,252,168,2,12,102,253,156,0,2,0,119,0,0,6,95,5,242,0,11,0,28,0,0,1,34,6,21,20,22,51,50,54,53,52,38, + 1,33,1,55,1,17,52,36,51,50,4,21,20,4,35,38,39,4,99,102,204,178,128,95,200,173,254,84,254,222,254,104,154,1,86,1,16,236,217,1, + 35,254,239,235,178,128,5,82,151,164,147,169,148,168,151,164,250,174,2,100,102,253,244,3,88,236,240,225,250,236,240,1,73,0,0,0,255,255,0,119, + 0,0,6,95,7,79,16,39,22,193,6,94,1,116,18,6,8,11,0,0,0,2,0,70,255,227,6,46,5,213,0,11,0,28,0,0,37,50,54,53, + 52,38,35,34,6,21,20,22,1,33,1,7,1,17,20,4,35,34,36,53,52,36,51,22,23,2,66,102,204,178,128,95,200,173,1,172,1,34,1,152, + 154,254,170,254,240,236,217,254,221,1,17,235,178,128,131,151,164,147,169,148,168,151,164,5,82,253,156,102,2,12,252,168,236,240,225,250,236,240,1,73, + 255,255,0,70,255,227,6,46,7,79,16,39,22,193,5,211,1,116,18,6,8,13,0,0,0,2,0,119,255,227,6,95,5,213,0,11,0,28,0,0, + 37,50,54,53,52,38,35,34,6,21,20,22,3,17,54,55,50,4,21,20,4,35,34,36,53,17,1,39,1,4,99,122,173,200,95,128,178,204,204,128, + 178,235,1,17,254,221,217,236,254,240,254,170,154,1,152,131,164,151,168,148,169,147,164,151,5,82,253,123,73,1,240,236,250,225,240,236,3,88,253,244, + 102,2,100,0,255,255,0,119,255,227,6,95,7,79,16,39,22,193,4,211,1,116,18,6,8,15,0,0,0,2,0,137,2,139,4,17,5,223,0,16, + 0,28,0,0,1,17,3,39,19,51,17,54,51,50,22,21,20,6,35,34,38,5,50,54,53,52,38,35,34,6,21,20,22,1,145,198,66,247,161,81, + 95,148,172,183,137,149,171,1,64,88,80,94,74,92,84,97,3,149,1,192,254,254,61,1,79,254,151,41,134,132,140,126,134,24,86,70,84,72,85,71, + 81,75,0,0,255,255,0,201,0,0,5,59,5,213,18,6,0,43,0,0,255,255,0,137,2,156,3,111,5,223,18,6,7,225,0,0,255,255,0,137, + 0,0,8,26,8,75,16,39,7,24,3,89,0,0,16,6,7,240,0,0,255,255,0,137,0,0,8,26,5,242,16,38,7,240,0,0,16,7,7,25, + 3,89,0,0,255,255,0,137,0,0,8,26,7,79,16,38,7,240,0,0,16,7,7,26,3,89,0,0,255,255,0,137,255,227,7,151,5,223,16,38, + 7,240,0,0,16,7,7,27,3,89,0,0,255,255,0,137,255,227,7,151,7,79,16,38,7,240,0,0,16,7,7,28,3,89,0,0,255,255,0,137, + 255,227,8,26,5,223,16,38,7,240,0,0,16,7,7,30,3,89,0,0,255,255,0,137,255,227,8,26,7,79,16,38,7,240,0,0,16,7,7,31, + 3,89,0,0,255,255,0,137,2,139,6,98,5,223,16,39,7,47,3,89,0,0,16,6,7,240,0,0,0,1,0,70,0,0,6,46,5,242,0,18, + 0,58,64,9,3,2,5,28,18,11,28,12,19,16,220,236,220,236,204,57,49,0,64,9,66,11,8,149,0,15,145,1,4,47,204,244,57,236,204,48, + 75,83,88,183,1,17,2,0,17,3,3,2,4,7,16,237,16,14,237,89,37,1,23,1,33,17,52,38,35,34,6,21,35,52,36,51,50,4,21,4, + 62,1,86,154,254,104,254,222,204,102,128,178,202,1,35,217,236,1,16,190,2,12,102,253,156,4,23,164,151,169,146,250,225,240,236,0,0,1,0,119, + 0,0,6,95,5,242,0,18,0,58,64,9,8,28,7,15,28,16,0,17,19,16,220,220,57,236,220,236,49,0,64,9,66,7,11,149,0,4,145,18, + 15,47,204,244,57,236,204,48,75,83,88,183,18,17,17,0,17,16,17,16,4,7,16,237,16,14,237,89,37,17,52,36,51,50,4,21,35,52,38,35, + 34,6,21,17,33,1,55,2,103,1,16,236,217,1,35,202,178,128,102,204,254,222,254,104,154,190,3,88,236,240,225,250,146,169,151,164,251,233,2,100, + 102,0,0,0,0,1,0,70,255,227,6,46,5,213,0,18,0,61,64,9,16,17,14,28,1,8,28,7,19,16,220,236,220,236,49,0,64,12,66,18, + 15,7,11,149,4,140,0,15,145,19,16,228,57,244,238,204,16,204,48,75,83,88,183,18,17,17,0,17,16,17,16,4,7,16,237,16,14,237,89,1, + 17,20,4,35,34,36,53,51,20,22,51,50,54,53,17,33,1,7,4,62,254,240,236,217,254,221,202,178,128,102,204,1,34,1,152,154,5,23,252,168, + 236,240,225,250,146,169,151,164,4,23,253,156,102,0,0,0,0,1,0,119,255,227,6,95,5,213,0,18,0,63,64,9,11,28,12,5,28,3,0,2, + 19,16,220,220,57,236,220,236,49,0,64,12,66,1,4,12,8,149,15,140,0,4,145,19,16,228,57,244,238,204,16,204,48,75,83,88,183,1,17,2, + 0,17,3,3,2,4,7,16,237,16,14,237,89,9,1,39,1,33,17,20,22,51,50,54,53,51,20,4,35,34,36,53,2,103,254,170,154,1,152,1, + 34,204,102,128,178,202,254,221,217,236,254,240,5,23,253,244,102,2,100,251,233,164,151,169,146,250,225,240,236,0,0,0,255,255,0,137,0,0,9,205, + 8,75,16,39,7,54,5,12,0,0,16,6,8,39,0,0,255,255,0,137,0,0,9,205,5,242,16,39,7,55,5,12,0,0,16,6,8,39,0,0, + 255,255,0,137,0,0,9,205,7,79,16,39,7,56,5,12,0,0,16,6,8,39,0,0,255,255,0,137,255,227,7,59,5,228,16,39,7,57,2,253, + 0,0,16,6,8,39,0,0,255,255,0,137,255,227,7,59,7,79,16,39,7,58,2,253,0,0,16,6,8,39,0,0,255,255,0,137,255,227,9,205, + 5,228,16,39,7,60,5,12,0,0,16,6,8,39,0,0,255,255,0,137,255,227,9,205,7,79,16,39,7,61,5,12,0,0,16,6,8,39,0,0, + 0,2,0,137,2,168,5,40,5,228,0,10,0,40,0,0,1,50,54,53,52,38,34,6,21,20,22,23,34,38,53,52,54,51,50,22,21,20,7,51, + 21,20,22,51,50,54,61,1,51,21,20,6,35,34,38,61,1,1,201,98,70,110,116,110,80,88,148,172,172,148,149,171,47,185,81,44,67,69,144,171, + 109,97,172,4,90,84,58,75,77,77,75,70,72,110,133,124,112,135,135,112,88,59,167,111,66,71,106,167,167,132,135,136,131,57,0,0,0,3,0,137, + 2,168,8,36,5,228,0,10,0,51,0,62,0,0,1,50,54,53,52,38,34,6,21,20,22,33,38,53,52,54,51,50,22,21,20,7,51,21,20,22, + 51,50,54,61,1,51,21,20,6,35,34,38,61,1,33,34,38,53,52,54,51,50,22,21,20,7,33,50,54,53,52,38,34,6,21,20,22,1,201,98, + 70,110,116,110,80,2,63,43,172,148,149,171,47,185,81,44,67,69,144,171,109,97,172,251,202,148,172,172,148,149,171,47,1,235,98,70,110,116,110,80, + 4,90,84,58,75,77,77,75,70,72,59,88,112,135,135,112,88,59,167,111,66,71,106,167,167,132,135,136,131,57,133,124,112,135,135,112,88,59,84,58, + 75,77,77,75,70,72,0,0,0,1,0,70,0,0,6,89,5,137,0,18,0,60,64,10,16,18,1,9,5,25,1,12,16,19,16,252,196,236,204,16, + 204,57,49,0,183,66,18,2,149,15,8,149,9,47,236,212,236,204,48,75,83,88,64,10,17,17,17,18,18,16,17,0,18,0,5,7,16,237,16,8, + 237,89,1,17,33,34,6,21,20,22,51,21,34,36,53,52,36,51,33,1,55,6,89,251,234,143,153,198,98,236,254,239,1,3,250,3,88,253,242,104, + 3,242,254,254,145,131,165,146,165,240,236,221,225,1,85,154,255,255,0,70,0,0,6,89,5,137,16,39,22,193,4,164,255,60,18,6,8,41,0,0, + 0,1,0,119,254,17,6,138,3,154,0,18,0,56,183,9,5,25,12,16,18,0,19,16,204,57,220,212,236,204,49,0,183,66,8,149,9,1,149,18, + 16,47,204,236,212,236,48,75,83,88,64,10,17,17,17,18,18,16,17,0,18,0,5,7,16,237,16,8,237,89,23,17,33,50,54,53,52,38,35,53, + 50,4,21,20,4,35,33,1,7,119,4,22,143,153,198,98,236,1,17,254,253,250,252,168,2,13,103,88,1,2,145,131,165,146,165,240,236,221,225,254, + 171,154,0,0,255,255,0,119,254,17,6,138,5,23,16,39,22,193,6,92,255,60,18,6,8,43,0,0,0,1,0,70,254,17,6,89,3,154,0,18, + 0,58,64,9,3,1,18,14,25,10,7,16,19,16,252,204,236,212,204,57,49,0,183,66,11,149,10,17,149,1,3,47,204,236,212,236,48,75,83,88, + 64,10,2,17,1,1,1,3,17,0,1,0,5,7,16,237,16,8,237,89,5,1,39,1,33,34,36,53,52,36,51,21,34,6,21,20,22,51,33,6, + 89,253,156,104,2,14,252,168,250,254,253,1,17,236,98,198,153,143,4,22,88,254,105,154,1,85,225,221,236,240,165,146,165,131,145,0,255,255,0,70, + 254,17,6,89,5,23,16,39,22,193,4,105,255,60,18,6,8,45,0,0,0,1,0,137,2,181,4,92,5,228,0,18,0,0,1,5,39,37,33,34, + 38,53,52,54,51,21,34,6,21,20,22,51,33,4,92,254,177,61,1,46,253,204,158,163,172,167,82,105,80,89,2,146,3,172,247,66,232,126,131,125, + 135,110,68,90,72,67,0,0,0,1,0,119,0,0,5,4,5,213,0,16,0,0,37,35,53,51,53,33,53,1,51,1,33,17,51,21,35,21,35,3, + 113,201,201,253,6,2,61,202,253,195,2,250,201,201,202,224,164,212,173,2,208,253,45,254,130,164,224,0,0,1,0,33,0,0,4,174,5,213,0,16, + 0,0,37,21,35,53,35,53,51,17,33,1,51,1,21,33,21,51,21,1,180,202,201,201,2,250,253,195,202,2,61,253,6,201,224,224,224,164,1,126, + 2,211,253,48,173,212,164,0,255,255,0,33,0,0,4,174,7,79,16,39,22,193,4,3,1,116,18,6,8,49,0,0,0,1,0,119,0,0,5,4, + 5,213,0,16,0,0,1,53,51,21,51,21,35,17,33,1,35,1,53,33,53,35,53,3,113,202,201,201,253,6,2,61,202,253,195,2,250,201,4,245, + 224,224,164,254,130,253,45,2,208,173,212,164,255,255,0,119,0,0,5,4,7,79,16,39,22,193,5,218,1,116,18,6,8,51,0,0,0,1,0,33, + 0,0,4,174,5,213,0,16,0,0,1,51,21,35,21,33,21,1,35,1,33,17,35,53,51,53,51,1,180,201,201,2,250,253,195,202,2,61,253,6, + 201,201,202,4,245,164,212,173,253,48,2,211,1,126,164,224,255,255,0,33,0,0,4,174,7,79,16,39,22,193,3,86,1,116,18,6,8,53,0,0, + 0,1,0,10,2,155,2,232,5,223,0,16,0,0,19,51,21,51,21,35,21,33,21,1,35,1,33,53,35,53,51,137,144,127,127,1,207,254,165,145, + 1,109,254,32,127,127,5,223,117,110,102,121,254,126,1,141,212,110,0,0,0,2,0,201,255,227,4,193,5,213,0,11,0,27,0,44,64,10,3,25, + 17,22,27,9,28,25,4,28,16,252,236,50,50,220,236,49,0,64,12,6,149,22,12,14,0,149,20,140,26,145,25,47,236,244,238,212,57,57,236,48, + 37,50,54,53,52,38,35,34,6,21,20,22,3,54,55,50,4,21,20,4,35,34,39,21,34,35,17,51,2,197,122,173,200,95,128,178,204,204,128,178, + 235,1,17,254,221,217,183,123,79,123,202,131,164,151,168,148,169,147,164,151,2,205,73,1,240,236,250,225,72,43,5,213,255,255,0,201,0,0,5,176, + 5,213,18,6,0,39,0,0,0,2,0,115,0,0,5,90,5,213,0,8,0,17,0,31,64,9,0,28,10,50,4,25,14,16,18,16,252,236,244,236, + 49,0,182,0,149,9,129,7,149,11,47,236,244,236,48,1,35,32,0,17,16,0,33,51,19,17,33,32,0,17,16,0,33,4,144,244,254,203,254,225, + 1,31,1,53,244,202,254,97,254,80,254,104,1,150,1,178,5,47,254,233,254,212,254,210,254,232,5,47,250,43,1,106,1,130,1,128,1,105,0,0, + 0,1,0,137,2,156,3,78,5,223,0,9,0,0,19,33,21,1,33,21,33,53,1,33,151,2,169,253,249,2,21,253,59,2,8,254,6,5,223,86, + 253,129,110,86,2,127,0,0,0,3,0,137,1,236,3,78,6,143,0,19,0,22,0,25,0,0,1,21,35,53,33,53,1,17,33,53,33,53,51,21, + 33,21,1,17,33,21,1,21,55,3,53,7,2,36,105,254,206,1,50,254,220,1,36,105,1,28,254,228,1,42,254,214,109,214,130,2,156,176,176,86, + 1,120,1,7,110,176,176,86,254,162,254,223,110,2,213,134,134,253,153,160,160,0,0,0,0,1,0,117,0,0,3,33,2,115,0,11,0,0,1,3, + 1,35,39,7,35,1,3,51,23,55,3,20,255,1,12,137,205,205,137,1,18,251,137,187,187,2,115,254,207,254,190,246,246,1,72,1,43,223,223,0, + 255,255,0,137,0,0,7,151,5,242,16,39,7,23,3,89,0,0,16,6,7,240,0,0,255,255,0,137,0,0,9,177,5,242,16,38,8,39,0,0, + 16,7,7,53,5,115,0,0,255,255,0,137,0,0,12,201,5,242,16,38,8,40,0,0,16,7,7,55,8,8,0,0,255,255,0,137,0,0,12,201, + 7,79,16,38,8,40,0,0,16,7,7,56,8,8,0,0,255,255,0,137,255,227,10,55,5,228,16,38,8,40,0,0,16,7,7,57,5,249,0,0, + 255,255,0,137,255,227,10,55,7,79,16,38,8,40,0,0,16,7,7,58,5,249,0,0,255,255,0,137,255,227,12,201,5,228,16,38,8,40,0,0, + 16,7,7,60,8,8,0,0,255,255,0,137,255,227,12,201,7,79,16,38,8,40,0,0,16,7,7,61,8,8,0,0,0,1,255,236,1,247,3,229, + 2,159,0,3,0,0,3,33,21,33,20,3,249,252,7,2,159,168,0,0,0,1,255,236,255,1,4,5,2,159,0,7,0,0,3,33,21,33,17,35, + 17,33,20,4,25,254,89,202,254,88,2,159,168,253,10,2,246,0,0,0,0,1,255,236,255,1,5,198,2,159,0,11,0,0,3,33,21,33,17,35, + 17,35,17,35,17,33,20,5,218,254,89,202,247,202,254,88,2,159,168,253,10,2,246,253,10,2,246,0,0,1,255,236,255,1,7,135,2,159,0,15, + 0,0,3,33,21,33,17,35,17,35,17,35,17,35,17,35,17,33,20,7,155,254,89,202,247,202,247,202,254,88,2,159,168,253,10,2,246,253,10,2, + 246,253,10,2,246,0,0,0,0,1,255,236,255,1,9,72,2,159,0,19,0,0,3,33,21,33,17,35,17,35,17,35,17,35,17,35,17,35,17,35, + 17,33,20,9,92,254,89,202,247,202,247,202,247,202,254,88,2,159,168,253,10,2,246,253,10,2,246,253,10,2,246,253,10,2,246,0,0,1,255,236, + 255,1,11,9,2,159,0,23,0,0,3,33,21,33,17,35,17,35,17,35,17,35,17,35,17,35,17,35,17,35,17,35,17,33,20,11,29,254,89,202, + 247,202,247,202,247,202,247,202,254,88,2,159,168,253,10,2,246,253,10,2,246,253,10,2,246,253,10,2,246,253,10,2,246,0,0,0,0,1,255,236, + 1,247,4,5,5,148,0,7,0,0,3,33,17,51,17,33,21,33,20,1,168,202,1,167,251,231,2,159,2,245,253,11,168,0,0,0,0,1,255,236, + 1,247,5,198,5,148,0,11,0,0,3,33,17,51,17,51,17,51,17,33,21,33,20,1,168,202,247,202,1,167,250,38,2,159,2,245,253,11,2,245, + 253,11,168,0,0,1,255,236,1,247,7,135,5,148,0,15,0,0,3,33,17,51,17,51,17,51,17,51,17,51,17,33,21,33,20,1,168,202,247,202, + 247,202,1,167,248,101,2,159,2,245,253,11,2,245,253,11,2,245,253,11,168,0,0,0,0,1,255,236,1,247,9,71,5,148,0,19,0,0,3,33, + 17,51,17,51,17,51,17,51,17,51,17,51,17,51,17,33,21,33,20,1,168,202,247,202,247,202,247,202,1,166,246,165,2,159,2,245,253,11,2,245, + 253,11,2,245,253,11,2,245,253,11,168,0,0,1,255,236,1,247,11,9,5,148,0,23,0,0,3,33,17,51,17,51,17,51,17,51,17,51,17,51, + 17,51,17,51,17,51,17,33,21,33,20,1,168,202,247,202,247,202,247,202,247,202,1,167,244,227,2,159,2,245,253,11,2,245,253,11,2,245,253,11, + 2,245,253,11,2,245,253,11,168,0,0,0,0,1,255,236,255,1,4,16,5,148,0,11,0,0,3,33,19,51,3,33,21,33,3,35,19,33,20,1, + 194,234,213,234,1,141,254,63,234,213,234,254,114,2,159,2,245,253,11,168,253,10,2,246,0,1,255,236,255,1,5,211,5,148,0,19,0,0,3,33, + 19,51,3,51,19,51,3,33,21,33,3,35,19,35,3,35,19,33,20,1,194,234,213,234,238,234,213,234,1,141,254,63,234,213,234,238,234,213,234,254, + 114,2,159,2,245,253,11,2,245,253,11,168,253,10,2,246,253,10,2,246,0,1,255,236,255,1,7,150,5,148,0,27,0,0,3,33,19,51,3,51, + 19,51,3,51,19,51,3,33,21,33,3,35,19,35,3,35,19,35,3,35,19,33,20,1,194,234,213,234,238,234,213,234,238,234,213,234,1,141,254,63, + 234,213,234,238,234,213,234,238,234,213,234,254,114,2,159,2,245,253,11,2,245,253,11,2,245,253,11,168,253,10,2,246,253,10,2,246,253,10,2,246, + 0,1,255,236,255,1,9,89,5,148,0,35,0,0,3,33,19,51,3,51,19,51,3,51,19,51,3,51,19,51,3,33,21,33,3,35,19,35,3,35, + 19,35,3,35,19,35,3,35,19,33,20,1,194,234,213,234,238,234,213,234,238,234,213,234,238,234,213,234,1,141,254,63,234,213,234,238,234,213,234,238, + 234,213,234,238,234,213,234,254,114,2,159,2,245,253,11,2,245,253,11,2,245,253,11,2,245,253,11,168,253,10,2,246,253,10,2,246,253,10,2,246, + 253,10,2,246,0,1,255,236,255,1,11,28,5,148,0,43,0,0,3,33,19,51,3,51,19,51,3,51,19,51,3,51,19,51,3,51,19,51,3,33, + 21,33,3,35,19,35,3,35,19,35,3,35,19,35,3,35,19,35,3,35,19,33,20,1,194,234,213,234,238,234,213,234,238,234,213,234,238,234,213,234, + 238,234,213,234,1,141,254,63,234,213,234,238,234,213,234,238,234,213,234,238,234,213,234,238,234,213,234,254,114,2,159,2,245,253,11,2,245,253,11,2, + 245,253,11,2,245,253,11,2,245,253,11,168,253,10,2,246,253,10,2,246,253,10,2,246,253,10,2,246,253,10,2,246,0,1,255,236,0,83,4,5, + 4,67,0,11,0,0,3,33,17,51,17,33,21,33,17,35,17,33,20,1,168,202,1,167,254,89,202,254,88,2,159,1,164,254,92,168,254,92,1,164, + 0,1,255,236,0,83,5,198,4,67,0,19,0,0,3,33,17,51,17,51,17,51,17,33,21,33,17,35,17,35,17,35,17,33,20,1,168,202,246,202, + 1,168,254,88,202,246,202,254,88,2,159,1,164,254,92,1,164,254,92,168,254,92,1,164,254,92,1,164,0,1,255,236,0,83,7,132,4,67,0,27, + 0,0,3,33,17,51,17,51,17,51,17,51,17,51,17,33,21,33,17,35,17,35,17,35,17,35,17,35,17,33,20,1,168,202,246,202,248,202,1,164, + 254,92,202,248,202,246,202,254,88,2,159,1,164,254,92,1,164,254,92,1,164,254,92,168,254,92,1,164,254,92,1,164,254,92,1,164,0,1,255,236, + 0,83,9,70,4,67,0,35,0,0,3,33,17,51,17,51,17,51,17,51,17,51,17,51,17,51,17,33,21,33,17,35,17,35,17,35,17,35,17,35, + 17,35,17,35,17,33,20,1,168,202,246,202,248,202,246,202,1,166,254,90,202,246,202,248,202,246,202,254,88,2,159,1,164,254,92,1,164,254,92,1, + 164,254,92,1,164,254,92,168,254,92,1,164,254,92,1,164,254,92,1,164,254,92,1,164,0,1,255,236,0,83,11,9,4,67,0,43,0,0,3,33, + 17,51,17,51,17,51,17,51,17,51,17,51,17,51,17,51,17,51,17,33,21,33,17,35,17,35,17,35,17,35,17,35,17,35,17,35,17,35,17,35, + 17,33,20,1,168,202,246,202,248,202,246,202,248,202,1,167,254,89,202,248,202,246,202,248,202,246,202,254,88,2,159,1,164,254,92,1,164,254,92,1, + 164,254,92,1,164,254,92,1,164,254,92,168,254,92,1,164,254,92,1,164,254,92,1,164,254,92,1,164,254,92,1,164,0,1,255,236,255,1,4,16, + 5,148,0,17,0,0,3,33,3,51,27,1,51,3,33,21,33,19,35,11,1,35,19,33,20,1,141,234,213,154,154,213,234,1,141,254,114,234,213,153, + 153,213,234,254,114,2,159,2,245,254,14,1,242,253,11,168,253,10,1,239,254,17,2,246,0,3,255,236,255,1,6,25,5,148,0,2,0,14,0,17, + 0,0,1,27,1,37,33,1,51,1,33,21,33,1,35,1,33,1,3,33,2,50,208,209,252,25,1,94,1,68,233,1,68,1,94,254,163,254,187,233, + 254,187,254,163,3,22,207,1,159,1,247,254,26,1,230,168,2,245,253,11,168,253,10,2,246,2,141,254,27,0,0,0,0,1,255,236,255,87,6,99, + 2,159,0,13,0,0,3,33,21,33,17,33,53,33,53,33,17,33,17,33,20,6,119,251,251,1,249,254,209,1,249,252,115,254,88,2,159,168,254,8, + 168,168,254,8,2,160,0,0,0,5,255,236,254,21,9,183,2,159,0,20,0,24,0,27,0,31,0,35,0,0,3,53,33,21,33,9,1,33,1,7, + 5,33,39,7,33,37,39,1,33,9,1,33,1,55,37,33,23,55,1,23,55,39,55,23,1,33,20,9,203,254,186,253,244,2,12,254,250,254,119,131, + 1,6,254,250,131,131,254,250,1,6,131,254,119,254,250,2,12,253,244,1,6,1,137,131,254,250,1,6,131,131,254,250,131,131,131,131,131,1,137,254, + 250,1,247,168,168,254,15,254,15,1,117,124,249,124,124,249,124,254,139,1,241,1,241,254,139,124,249,124,124,254,15,124,124,124,124,124,1,117,0,0, + 0,10,255,236,1,247,9,71,7,55,0,43,0,47,0,51,0,55,0,59,0,63,0,67,0,71,0,75,0,79,0,0,3,33,53,35,53,51,53,35, + 53,51,53,35,53,51,53,51,21,51,53,51,21,51,53,51,21,51,53,51,21,51,21,35,21,51,21,35,21,51,21,35,21,33,21,33,1,35,21,51, + 37,35,21,51,37,35,21,51,5,35,21,51,37,35,21,51,37,35,21,51,5,35,21,51,37,35,21,51,37,35,21,51,20,1,168,202,202,202,202,202, + 202,202,247,202,247,202,247,202,202,202,202,202,202,202,1,166,246,165,6,235,247,247,254,63,247,247,254,63,247,247,3,130,247,247,254,63,247,247,254,63, + 247,247,3,130,247,247,254,63,247,247,254,63,247,247,2,159,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,3,240,168, + 168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,0,2,255,236,0,167,5,139,2,159,0,3,0,7,0,0,19,33,21,33,3,33,21,33, + 182,3,248,252,8,202,5,159,250,97,1,79,168,1,248,168,0,1,0,113,0,58,4,35,4,91,0,8,0,0,1,21,33,1,39,9,1,55,1,4, + 35,254,125,254,67,114,1,159,254,97,114,1,188,2,159,168,254,67,114,1,159,1,158,114,254,68,0,0,0,1,255,236,0,58,3,158,4,91,0,8, + 0,0,3,33,1,23,9,1,7,1,33,20,1,132,1,188,114,254,97,1,159,114,254,67,254,125,2,159,1,188,114,254,98,254,97,114,1,189,0,0, + 0,2,0,61,0,0,4,127,4,96,0,7,0,10,0,0,33,35,3,33,3,35,1,51,1,33,3,4,127,195,102,254,16,102,195,1,164,250,254,195, + 1,128,192,1,19,254,237,4,96,253,71,2,5,0,0,0,0,2,0,11,0,0,5,91,4,96,0,15,0,19,0,0,51,1,33,21,33,17,33,21, + 33,17,33,21,33,17,33,3,1,3,33,17,11,1,217,3,106,253,246,1,243,254,13,2,23,253,47,254,190,116,1,154,232,1,4,4,96,148,254,211, + 148,254,136,147,1,19,254,237,3,205,253,218,2,38,0,0,0,3,0,123,255,227,7,111,4,123,0,52,0,61,0,74,0,0,37,14,1,35,34,39, + 38,61,1,33,46,1,35,34,7,6,7,53,62,1,51,50,23,22,23,62,1,51,50,23,22,21,20,7,6,35,33,21,20,23,22,51,50,54,55,21, + 6,7,6,35,34,39,38,1,22,23,22,51,50,55,54,55,37,50,54,53,52,39,38,35,34,7,6,29,1,4,7,74,212,132,226,132,132,3,78,12, + 204,183,104,100,100,100,100,208,106,167,124,124,77,73,216,143,189,105,105,127,126,251,254,254,83,84,151,96,182,84,101,95,95,90,142,106,107,252,247,1, + 83,82,137,153,92,93,14,1,105,223,172,65,64,111,153,92,93,155,90,94,145,146,250,90,191,200,27,26,53,174,42,44,61,60,119,120,120,93,94,168, + 189,96,96,18,127,70,69,46,46,170,39,20,19,48,48,1,135,151,90,90,87,87,158,96,102,123,98,58,57,109,108,180,41,0,0,0,0,3,0,62, + 0,0,4,62,4,96,0,10,0,17,0,35,0,0,37,32,53,52,41,1,21,51,21,35,21,1,52,43,1,17,51,50,55,20,7,30,1,21,20,6, + 35,33,53,35,53,51,17,33,50,22,2,120,1,2,254,254,254,250,220,220,1,222,236,242,242,236,185,214,127,140,231,214,254,57,124,124,1,182,197,212, + 153,181,180,102,164,95,2,157,145,254,218,170,208,31,24,152,114,150,164,248,164,2,196,144,255,255,0,113,255,227,3,231,4,123,16,6,0,70,0,0, + 0,2,0,186,0,0,4,103,4,96,0,8,0,17,0,0,1,17,51,50,54,53,52,38,35,37,33,32,0,17,16,0,41,1,1,115,141,217,203,203, + 217,254,186,1,55,1,70,1,48,254,206,254,188,254,201,3,205,252,199,199,214,213,199,147,254,241,254,224,254,223,254,240,0,2,0,36,0,0,4,103, + 4,96,0,12,0,25,0,0,19,33,32,0,17,16,0,41,1,17,35,53,51,33,21,35,17,51,50,54,53,52,38,43,1,17,186,1,55,1,70,1, + 48,254,206,254,188,254,201,150,150,1,122,193,141,217,203,203,217,141,4,96,254,241,254,224,254,223,254,240,1,245,164,164,254,159,199,214,213,199,254,204, + 0,1,0,186,0,0,3,139,4,96,0,11,0,0,19,33,21,33,17,33,21,33,17,33,21,33,186,2,196,253,246,1,243,254,13,2,23,253,47,4, + 96,148,254,211,148,254,136,147,0,1,0,130,255,227,3,197,4,124,0,49,0,0,1,22,23,22,21,20,7,6,35,34,38,39,53,22,23,22,51,50, + 55,54,53,52,39,38,43,1,53,51,50,55,54,53,52,39,38,35,34,7,6,7,53,54,55,54,51,50,4,21,20,6,2,191,112,60,60,114,113,196, + 76,170,98,97,80,81,71,119,69,70,68,67,116,155,148,137,72,78,84,85,151,93,85,85,71,90,84,85,80,238,1,2,138,2,3,24,65,64,93,141, + 79,78,24,24,167,29,13,13,46,46,64,70,45,44,152,51,56,88,90,56,56,18,19,37,171,28,14,14,182,173,108,146,0,2,0,193,254,76,1,121, + 4,96,0,3,0,7,0,0,19,51,17,35,17,53,51,21,193,184,184,184,4,96,251,160,254,76,233,233,0,1,0,0,255,227,2,123,4,96,0,16, + 0,0,61,1,30,1,51,50,55,54,53,17,51,17,16,6,35,34,38,68,146,78,103,46,43,151,158,186,71,143,61,185,60,61,77,70,215,2,121,253, + 135,254,230,234,44,0,0,0,255,255,0,186,0,0,4,156,4,96,16,6,0,250,0,0,0,1,0,2,0,0,3,252,4,123,0,13,0,0,19,51, + 17,55,23,7,17,33,21,33,17,7,39,55,186,185,137,76,213,2,137,252,190,110,74,184,4,123,254,100,97,106,151,254,107,170,1,188,78,106,131,0, + 255,255,0,186,0,0,5,79,4,96,16,6,3,208,0,0,255,255,0,186,0,0,4,121,4,96,16,6,3,204,0,0,255,255,0,113,255,227,4,117, + 4,123,16,6,0,82,0,0,255,255,0,127,255,227,3,245,4,123,16,6,2,22,0,0,0,2,0,113,0,45,5,9,4,49,0,10,0,22,0,0, + 1,52,38,32,6,21,20,22,51,50,54,55,20,0,33,32,0,53,52,0,33,32,0,4,109,231,254,110,231,232,200,199,233,156,254,200,254,236,254,237, + 254,199,1,57,1,19,1,20,1,56,2,47,148,172,171,149,147,172,172,147,240,254,238,1,18,240,241,1,17,254,239,0,0,1,0,113,0,116,5,9, + 3,234,0,24,0,0,37,35,62,1,53,52,38,32,6,21,20,22,23,35,46,1,53,52,0,33,32,0,17,20,6,4,195,172,43,43,227,254,102,227, + 43,43,170,36,36,1,62,1,14,1,18,1,58,35,116,78,157,80,179,198,198,179,80,157,78,77,165,93,253,1,42,254,211,254,250,85,162,0,0,0, + 0,3,0,51,0,5,5,77,4,89,0,9,0,19,0,43,0,0,9,1,14,1,21,20,22,51,50,54,55,62,1,53,52,38,35,34,6,7,39,62, + 1,51,32,0,21,20,6,7,23,7,39,14,1,35,32,0,53,52,54,55,39,55,3,178,253,176,42,40,232,200,79,117,154,41,41,235,211,72,110,46, + 151,77,197,119,1,20,1,56,51,52,168,79,179,77,198,120,254,237,254,199,52,51,168,78,1,24,1,231,41,103,65,147,172,20,92,42,103,62,151,169, + 19,20,125,54,54,254,239,241,93,159,67,139,95,146,53,54,1,18,240,96,161,63,139,96,0,3,0,113,255,227,7,195,4,123,0,38,0,47,0,61, + 0,0,19,53,33,38,39,38,35,34,6,7,53,62,1,51,50,22,23,54,55,54,51,50,23,22,17,16,7,6,35,34,39,38,39,14,1,35,34,39, + 38,55,22,23,22,51,50,55,54,55,1,50,55,54,16,39,38,35,34,6,21,20,23,22,113,3,78,12,102,102,183,106,200,98,100,208,106,160,242,81, + 71,104,105,140,241,136,137,137,136,241,140,105,106,66,78,232,143,226,132,132,185,2,82,82,137,153,92,93,14,2,8,148,86,86,85,86,149,147,172,86, + 86,2,0,90,190,100,99,52,52,174,42,44,110,109,110,54,55,157,156,254,237,254,236,156,156,55,56,108,107,112,145,146,196,152,90,89,87,87,158,254, + 180,115,116,1,146,116,115,232,200,199,116,117,0,1,0,113,2,47,4,117,4,123,0,13,0,0,1,52,38,35,34,6,21,35,16,0,51,50,0,17, + 3,178,172,147,148,172,194,1,17,241,240,1,18,2,47,199,233,231,201,1,20,1,56,254,200,254,236,0,0,1,0,113,255,227,4,117,2,47,0,13, + 0,0,1,20,22,51,50,54,53,51,16,0,35,34,0,17,1,52,172,147,148,172,194,254,239,241,240,254,238,2,47,199,233,231,201,254,236,254,200,1, + 56,1,20,0,0,2,0,151,0,0,3,204,4,96,0,7,0,17,0,0,1,17,33,50,54,52,38,35,37,33,50,22,16,6,35,33,17,35,1,78, + 1,1,91,99,99,91,254,72,1,184,188,193,193,188,254,255,183,3,197,254,152,94,172,94,155,170,254,182,170,254,62,0,0,2,0,50,0,0,4,15, + 4,96,0,22,0,33,0,0,1,46,1,53,52,55,54,51,33,17,35,17,35,34,7,6,7,3,35,19,54,55,54,1,35,34,7,6,21,20,23,22, + 59,1,1,181,106,112,107,108,217,1,132,185,169,97,59,59,63,162,195,174,53,52,53,1,216,198,119,63,64,64,63,119,198,2,13,27,140,105,162,81, + 80,251,160,1,217,37,36,113,254,225,1,50,94,54,54,1,201,42,42,84,83,43,43,0,0,2,0,50,0,0,4,15,4,96,0,22,0,33,0,0, + 1,38,39,38,39,3,51,19,22,23,22,59,1,17,51,17,33,34,39,38,53,52,54,1,17,35,34,7,6,21,20,23,22,51,1,181,55,53,52,53, + 174,195,162,63,59,59,97,169,185,254,124,217,108,107,112,2,11,198,119,63,64,64,63,119,2,83,17,54,54,94,1,50,254,225,113,36,37,1,217,251, + 160,80,81,162,105,140,254,99,1,81,43,43,83,84,42,42,255,255,0,60,0,0,4,109,4,96,16,6,3,214,0,0,0,1,0,186,255,224,4,20, + 4,96,0,15,0,0,36,32,54,53,17,51,17,20,6,32,38,53,17,51,17,20,1,230,1,2,115,185,217,254,88,217,185,125,142,162,2,179,253,59, + 219,224,224,219,2,197,253,77,162,0,0,0,0,1,0,174,0,76,5,43,3,246,0,19,0,0,37,33,53,33,50,54,53,52,38,35,33,53,33,21, + 35,30,1,21,20,6,3,84,253,90,2,159,159,159,190,164,253,133,4,96,172,102,99,240,76,184,124,124,150,172,184,184,66,178,116,194,200,0,0,0, + 0,3,0,174,0,78,6,219,3,248,0,3,0,7,0,27,0,0,19,53,51,21,3,53,51,21,5,33,53,33,50,54,53,52,38,35,33,53,33,21, + 35,30,1,21,20,6,174,202,202,202,3,140,253,90,2,159,159,159,190,164,253,133,4,96,172,102,99,240,2,120,204,204,254,122,202,202,164,184,124,124, + 148,174,184,184,68,176,118,192,200,0,0,0,0,1,0,47,254,24,4,170,4,123,0,38,0,0,1,30,1,21,20,7,6,35,33,53,33,50,54,53, + 52,38,35,33,53,33,50,55,54,53,52,39,38,35,33,53,33,21,35,30,1,21,20,7,6,3,184,124,118,122,123,226,253,92,2,158,161,156,190,164, + 253,135,2,158,162,77,78,96,95,163,253,135,4,96,174,103,98,62,62,1,12,69,192,130,175,95,95,185,114,117,143,166,185,57,57,119,141,83,83,185, + 185,63,176,121,122,86,85,0,255,255,0,61,0,0,4,127,4,96,16,6,0,89,0,0,255,255,0,86,0,0,6,53,4,96,16,6,0,90,0,0, + 255,255,0,88,0,0,3,219,4,96,16,6,0,93,0,0,0,1,0,120,255,227,3,186,4,96,0,23,0,0,55,22,51,50,54,52,38,43,1,53, + 1,37,53,33,21,1,50,30,1,21,20,6,32,39,138,161,211,128,132,123,110,127,1,10,253,212,3,0,254,246,70,151,111,228,254,125,201,189,66,100, + 187,100,144,1,62,1,147,147,254,194,74,159,109,160,182,55,0,1,0,179,0,0,3,252,4,123,0,5,0,0,51,17,33,21,33,17,179,3,73,253, + 129,4,123,170,252,47,0,0,255,255,0,61,0,0,4,127,4,96,16,6,2,78,0,0,0,1,0,151,0,0,3,236,4,96,0,7,0,0,1,17, + 35,17,33,17,35,17,3,236,182,254,23,182,4,96,251,160,3,183,252,73,4,96,0,0,255,255,0,151,0,0,3,204,4,96,16,6,8,122,0,0, + 0,1,0,90,0,0,4,94,4,96,0,27,0,0,1,51,17,54,55,54,53,17,51,17,16,7,6,7,21,35,53,38,39,38,25,1,51,17,20,23, + 22,23,2,0,184,85,57,86,194,136,109,177,184,175,109,138,196,86,57,83,4,96,253,49,26,77,115,201,1,44,254,212,254,236,156,125,25,238,238,25, + 125,156,1,20,1,44,254,212,199,117,77,26,255,255,0,76,0,0,4,115,4,96,16,6,3,207,0,0,0,2,0,10,2,156,3,104,5,224,0,2, + 0,10,0,0,1,3,33,3,51,1,35,39,33,7,35,1,185,173,1,90,245,144,1,103,132,86,254,88,86,134,5,113,254,96,2,15,252,188,214,214, + 0,2,0,5,2,156,4,150,5,224,0,15,0,19,0,0,1,21,33,21,33,21,33,17,33,21,33,53,33,7,35,1,23,3,33,17,4,138,254,46, + 1,191,254,65,1,222,253,162,254,179,101,129,1,138,87,208,1,34,5,224,95,248,95,254,209,95,214,214,3,68,88,254,73,1,183,0,0,3,0,127, + 2,156,3,26,5,224,0,10,0,21,0,38,0,0,19,17,51,50,55,54,53,52,39,38,35,3,21,51,50,55,54,53,52,39,38,35,37,33,50,23, + 22,21,20,7,6,7,30,1,21,20,6,35,33,254,204,103,49,50,50,49,103,204,188,94,45,46,46,45,94,254,197,1,69,145,79,79,41,40,78,94, + 104,172,158,254,175,4,43,254,206,38,38,77,79,37,37,1,88,252,31,31,64,63,32,31,93,54,53,100,76,46,45,11,18,114,85,112,122,0,0,0, + 0,2,0,127,2,156,3,149,5,224,0,10,0,21,0,0,19,17,51,50,55,54,53,52,39,38,35,37,33,32,23,22,21,20,7,6,41,1,254,154, + 194,91,90,90,91,194,254,231,1,5,1,18,127,128,128,129,254,240,254,251,5,131,253,118,78,79,169,168,78,78,93,101,101,215,216,102,101,0,0,0, + 0,1,0,127,2,156,2,221,5,224,0,11,0,0,19,33,21,33,21,33,21,33,17,33,21,33,127,2,82,254,45,1,192,254,64,1,223,253,162,5, + 224,95,248,95,254,209,95,0,0,1,0,83,2,156,2,177,5,224,0,11,0,0,1,17,33,53,33,17,33,53,33,53,33,53,2,177,253,162,1,222, + 254,64,1,192,254,45,5,224,252,188,95,1,47,95,248,95,0,1,0,72,2,140,3,126,5,239,0,36,0,0,1,53,35,53,33,17,6,7,6,35, + 34,39,38,53,52,55,54,51,50,23,22,23,21,38,39,38,35,34,7,6,21,20,23,22,51,50,54,3,0,208,1,78,74,89,88,101,221,124,125,125, + 124,221,92,83,82,70,70,80,79,87,173,87,86,86,87,173,67,106,3,19,225,93,254,153,47,23,24,114,115,204,205,115,114,20,20,39,121,53,27,27, + 85,86,170,169,86,85,20,0,0,1,0,127,2,156,3,76,5,224,0,11,0,0,19,51,17,33,17,51,17,35,17,33,17,35,127,127,1,206,128,128, + 254,50,127,5,224,254,169,1,87,252,188,1,142,254,114,0,0,1,0,127,2,156,0,254,5,224,0,3,0,0,19,51,17,35,127,127,127,5,224,252, + 188,0,0,0,0,1,255,189,1,182,0,254,5,224,0,12,0,0,19,51,17,20,7,6,43,1,53,51,50,54,53,127,127,65,64,143,49,40,84,70, + 5,224,252,246,151,68,69,96,84,108,0,0,0,1,0,127,2,156,3,105,5,224,0,10,0,0,19,51,17,1,51,9,1,35,1,17,35,127,127,1, + 166,164,254,45,1,244,167,254,60,127,5,224,254,159,1,97,254,122,254,66,1,147,254,109,0,1,0,127,2,156,2,200,5,224,0,5,0,0,19,51, + 17,33,21,33,127,127,1,202,253,183,5,224,253,27,95,0,0,1,0,127,2,156,3,219,5,224,0,12,0,0,19,51,27,1,51,17,35,17,3,35, + 3,17,35,127,189,240,242,189,124,242,128,243,123,5,224,253,199,2,57,252,188,2,222,253,195,2,61,253,34,0,0,0,0,1,0,127,2,156,3,71, + 5,224,0,9,0,0,19,51,1,17,51,17,35,1,17,35,127,171,1,161,124,172,254,95,123,5,224,253,69,2,187,252,188,2,187,253,69,0,0,0, + 0,1,0,127,2,156,3,71,5,224,0,9,0,0,1,17,35,17,1,35,17,51,17,1,3,71,124,254,95,171,123,1,161,5,224,252,188,2,187,253, + 69,3,68,253,69,2,187,0,0,2,0,72,2,140,3,175,5,239,0,15,0,27,0,0,1,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, + 36,32,23,22,21,20,7,6,32,39,38,16,1,252,138,82,81,81,82,138,139,81,81,81,81,254,175,1,140,119,118,118,119,254,116,119,119,5,147,91, + 92,159,158,92,91,91,92,158,159,92,91,92,118,118,198,197,118,118,117,118,1,140,0,0,0,2,0,71,2,140,3,62,5,239,0,15,0,64,0,0, + 1,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,3,6,7,6,21,20,23,22,51,50,55,54,53,52,39,38,39,53,50,23,22,21,20,7, + 6,7,22,23,22,21,20,7,6,35,34,38,53,52,55,54,55,38,39,38,53,52,55,54,51,1,194,115,67,68,68,67,115,116,68,67,67,66,154,82, + 54,53,60,37,128,106,60,61,48,69,82,144,94,88,54,53,96,108,60,61,99,97,184,183,196,61,61,108,108,42,54,82,73,162,4,41,43,43,76,75, + 44,43,43,44,75,76,43,43,1,53,2,35,35,44,38,41,25,36,37,76,89,24,43,4,56,58,54,105,71,50,50,18,19,55,56,80,121,65,65,130, + 121,80,56,55,19,18,39,50,49,73,46,42,0,2,0,127,2,156,2,222,5,224,0,9,0,21,0,0,19,17,51,50,55,54,52,39,38,35,37,33, + 50,23,22,20,7,6,43,1,17,35,254,160,89,48,49,49,48,89,254,225,1,31,158,81,81,81,81,158,160,127,5,131,254,198,41,41,150,41,41,93, + 63,64,246,64,63,254,176,0,0,2,0,127,2,156,3,91,5,224,0,23,0,32,0,0,1,22,23,22,31,1,35,39,38,39,38,43,1,17,35,17, + 33,50,23,22,21,20,7,6,1,17,51,50,54,53,52,38,35,2,61,41,38,39,39,129,136,121,46,44,44,76,138,127,1,31,161,80,79,41,42,254, + 115,160,92,94,94,92,4,36,12,41,40,71,228,214,84,28,27,254,159,3,68,60,60,121,79,52,52,1,75,254,215,76,73,74,74,0,0,1,255,252, + 2,156,3,24,5,224,0,7,0,0,3,33,21,33,17,35,17,33,4,3,28,254,178,128,254,178,5,224,95,253,27,2,229,0,0,0,0,1,0,112, + 2,140,3,64,5,224,0,19,0,0,19,51,17,20,22,51,50,55,54,53,17,51,17,20,7,6,32,39,38,53,112,128,110,122,123,55,54,128,91,91, + 254,156,91,91,5,224,254,4,134,118,59,59,134,1,252,253,246,163,84,83,83,84,163,0,0,1,0,43,2,156,4,210,5,224,0,12,0,0,19,51, + 27,1,51,27,1,51,3,35,11,1,35,43,128,198,197,143,198,197,130,237,160,198,201,160,5,224,253,61,2,195,253,61,2,195,252,188,2,214,253,42, + 0,2,0,77,2,140,2,161,5,30,0,12,0,43,0,0,1,34,7,6,21,20,22,51,50,55,54,61,1,55,17,35,53,6,7,6,35,34,38,53, + 52,54,59,1,53,52,38,35,34,7,6,7,53,54,55,54,51,50,23,22,1,186,140,54,55,82,70,96,58,59,115,115,40,59,60,85,109,128,160,158, + 163,106,95,60,58,57,53,64,60,59,57,153,76,75,3,215,28,29,69,55,64,61,61,100,23,43,254,154,95,57,27,27,108,91,105,108,10,71,78,13, + 13,26,96,21,11,11,70,71,0,2,0,77,2,140,2,161,5,30,0,12,0,45,0,0,1,50,55,54,53,52,38,35,34,7,6,29,1,7,17,51, + 21,54,55,54,51,50,23,22,21,20,7,6,43,1,21,20,22,51,50,55,54,55,21,6,7,6,35,34,39,38,1,53,140,54,55,82,70,96,58,59, + 116,116,40,59,60,85,109,64,63,80,79,158,163,106,95,60,58,57,53,64,60,60,56,153,76,76,3,211,28,29,69,55,64,61,60,101,23,43,1,102, + 95,57,27,27,54,54,90,106,54,54,10,71,78,13,13,26,96,21,12,10,70,71,0,0,0,2,0,71,2,140,2,190,5,30,0,19,0,31,0,0, + 1,53,51,17,35,53,6,7,6,35,34,39,38,16,55,54,51,50,23,22,4,20,23,22,50,55,54,52,39,38,34,7,2,74,116,116,37,55,56,78, + 128,81,80,80,81,128,78,56,55,254,154,52,53,184,53,53,53,53,184,53,4,176,95,253,141,94,56,27,27,90,91,1,40,91,90,27,27,161,228,65, + 64,64,65,228,65,64,64,0,0,3,0,77,2,140,4,175,5,30,0,51,0,60,0,74,0,0,1,14,1,35,34,39,38,61,1,33,38,39,38,35, + 34,6,7,53,54,55,54,51,50,23,22,23,54,55,54,51,50,22,21,20,7,6,43,1,21,20,23,22,51,50,54,55,21,14,1,35,34,38,37,22, + 23,22,51,50,55,54,63,1,50,55,54,53,52,39,38,35,34,7,6,29,1,2,138,47,134,83,142,83,84,2,21,7,64,65,115,65,126,63,63,65, + 66,66,106,78,78,48,46,68,68,91,119,132,80,79,159,162,52,53,95,61,114,53,63,120,57,89,134,254,22,1,52,52,86,96,59,58,9,227,141,54, + 54,41,40,70,97,58,58,2,243,51,52,81,82,140,50,107,56,56,30,29,97,24,12,12,34,33,67,67,34,33,104,94,106,54,54,10,71,39,39,26, + 26,96,21,22,54,218,84,50,51,49,49,88,54,28,29,69,55,32,32,61,60,101,23,0,0,2,0,117,2,140,2,236,6,3,0,11,0,29,0,0, + 0,52,39,38,34,7,6,20,23,22,50,55,1,62,1,51,50,23,22,16,7,6,35,34,38,39,21,35,17,51,2,116,52,53,184,53,52,52,53,184, + 53,254,170,36,112,77,129,80,80,80,80,129,77,112,36,117,117,3,99,228,64,65,65,64,228,64,65,65,1,141,56,54,90,91,254,216,91,90,54,56, + 94,3,103,0,0,2,0,71,2,140,2,190,6,3,0,19,0,31,0,0,1,17,51,17,35,53,6,7,6,35,34,39,38,16,55,54,51,50,23,22, + 4,20,23,22,50,55,54,52,39,38,34,7,2,74,116,116,37,55,56,78,128,80,81,81,80,128,78,56,55,254,154,52,53,184,53,53,53,53,184,53, + 4,176,1,83,252,153,94,56,27,27,90,91,1,40,91,90,27,27,161,228,64,65,65,64,228,64,65,65,0,2,0,71,2,140,2,213,5,30,0,26, + 0,35,0,0,1,21,33,22,23,22,51,50,55,54,55,21,6,7,6,35,34,39,38,53,52,55,54,51,50,23,22,7,38,39,38,35,34,7,6,7, + 2,213,253,235,8,64,65,115,67,63,62,62,62,66,65,68,169,98,99,94,93,159,142,83,83,116,1,52,52,86,97,58,58,9,3,239,50,106,56,56, + 15,14,29,97,24,12,12,87,87,149,154,91,90,81,82,109,84,51,50,49,48,88,0,0,0,2,0,71,2,140,2,213,5,30,0,20,0,27,0,77, + 75,176,12,83,88,64,7,2,27,15,9,21,0,28,16,212,204,196,212,204,50,75,176,21,83,75,176,24,81,90,75,176,17,84,91,88,189,0,2,255, + 192,0,15,255,192,0,27,255,192,56,56,56,89,49,0,64,9,3,9,21,2,5,12,24,18,28,16,212,204,47,204,212,204,212,204,48,89,19,53,33, + 46,1,35,34,6,7,53,62,1,51,50,22,21,20,6,35,34,38,55,30,1,51,50,54,55,71,2,21,7,130,115,67,125,62,63,131,67,169,197,187, + 159,142,166,116,1,104,86,97,117,8,3,187,50,107,111,29,29,97,24,24,174,149,154,181,163,109,84,101,98,88,0,0,0,1,0,84,2,140,2,98, + 5,31,0,50,0,0,19,38,39,38,53,52,55,54,51,50,23,22,23,21,46,1,35,34,7,6,21,20,23,22,59,1,21,35,34,7,6,21,20,23, + 22,51,50,55,54,55,21,6,7,6,35,34,38,53,52,55,54,249,71,38,37,72,71,123,48,54,53,62,61,102,44,75,44,44,43,42,73,98,93,87, + 45,49,53,53,95,59,54,53,45,57,53,53,51,150,162,43,44,3,238,14,36,36,52,79,44,44,7,7,13,94,17,14,25,26,36,39,25,25,85,29, + 31,49,51,31,32,11,10,21,96,16,7,8,102,97,60,41,41,0,0,0,0,1,0,82,2,140,2,96,5,31,0,49,0,0,1,30,1,21,20,7, + 6,35,34,39,38,39,53,22,23,22,51,50,54,53,52,39,38,43,1,53,51,50,55,54,53,52,39,38,35,34,7,6,7,53,62,1,51,50,23,22, + 21,20,7,6,1,187,70,76,72,71,123,48,54,53,62,61,50,51,45,75,88,43,42,73,98,93,86,46,49,53,54,95,58,54,53,45,57,106,50,150, + 82,81,44,43,3,188,13,72,52,79,45,43,6,7,14,93,16,7,8,52,36,39,25,25,85,28,32,49,50,32,31,10,11,20,96,15,16,51,51,97, + 60,41,41,0,0,2,0,71,1,173,2,190,5,30,0,13,0,49,0,0,0,52,39,38,35,34,7,6,20,23,22,51,50,55,23,20,7,6,35,34, + 39,38,39,53,22,23,22,51,50,55,54,61,1,6,7,6,35,34,39,38,16,55,54,51,50,23,22,23,53,51,2,74,52,52,94,93,52,52,52,52, + 93,94,52,168,80,80,165,61,55,54,51,51,50,50,51,114,57,57,36,56,56,78,130,79,80,80,79,130,78,56,56,36,116,3,109,224,61,62,62,61, + 224,61,62,62,70,160,78,79,9,8,16,101,25,12,11,52,53,107,51,55,28,27,88,88,1,34,88,88,27,28,55,95,0,2,0,122,1,168,0,238, + 5,15,0,3,0,7,0,0,19,51,17,35,21,53,51,21,122,116,116,116,5,15,253,141,244,130,130,0,0,1,0,117,2,156,2,231,6,3,0,10, + 0,0,19,51,17,1,51,9,1,35,1,17,35,117,117,1,90,148,254,137,1,134,151,254,154,117,6,3,253,254,1,14,254,219,254,178,1,50,254,206, + 0,1,0,117,2,156,4,123,5,30,0,34,0,52,64,10,36,27,28,20,0,3,14,10,11,35,16,212,220,60,47,204,57,47,220,204,49,178,127,36, + 1,93,0,64,10,32,6,12,23,17,35,28,2,11,35,16,212,60,60,16,212,60,196,204,50,48,1,17,35,17,52,38,35,34,6,21,17,35,17,51, + 21,62,1,51,50,22,23,62,1,51,50,22,21,17,35,17,52,38,35,34,6,2,178,116,72,75,89,104,117,117,39,111,77,76,108,26,43,121,82,111, + 119,116,72,74,90,105,3,254,254,158,1,119,91,87,107,92,254,158,2,115,97,57,55,69,66,69,66,137,126,254,133,1,119,90,88,107,0,1,0,117, + 1,173,2,196,5,30,0,30,0,52,64,7,7,0,12,23,19,20,31,16,212,220,60,47,204,204,75,176,13,81,88,177,32,64,56,89,49,178,127,32, + 1,93,0,64,8,15,21,27,31,7,6,20,31,16,212,212,204,16,212,196,204,48,1,17,20,7,6,43,1,53,51,50,54,53,17,52,38,35,34,6, + 21,17,35,17,51,21,54,55,54,51,50,23,22,2,196,52,51,114,160,147,66,48,78,78,94,108,117,117,41,56,57,74,121,63,62,4,23,254,122,120, + 54,54,88,54,86,1,130,89,89,107,92,254,158,2,115,97,56,28,28,66,68,0,0,0,0,2,0,71,2,140,2,207,5,30,0,11,0,23,0,54, + 64,5,9,15,3,21,24,16,212,204,212,204,75,176,21,83,75,176,24,81,90,75,176,17,84,91,88,187,0,15,255,192,0,9,255,192,56,56,89,49, + 0,64,5,0,12,6,18,24,16,212,204,47,204,48,1,34,6,21,20,22,51,50,54,53,52,38,39,50,22,21,20,6,35,34,38,53,52,54,1,139, + 93,109,108,94,93,108,108,93,151,173,173,151,152,172,172,4,199,129,113,113,129,130,112,111,131,87,174,155,154,175,175,154,155,174,0,0,0,1,0,71, + 2,140,2,117,5,30,0,32,0,0,19,54,55,54,51,50,23,22,21,20,7,6,35,34,39,38,39,53,22,23,22,51,50,55,54,52,39,38,35,34, + 7,6,7,71,48,51,51,54,165,94,95,93,94,160,58,53,51,49,49,50,49,51,112,63,62,62,63,112,51,49,50,49,4,247,20,10,9,88,88,153, + 151,89,89,10,10,20,95,24,12,12,63,64,230,64,63,12,12,24,0,0,0,1,0,71,3,213,2,207,5,30,0,16,0,0,1,52,39,38,34,7, + 6,21,35,52,54,51,50,23,22,21,48,2,84,54,54,186,54,55,122,172,152,151,87,86,3,213,111,66,65,65,64,113,155,174,87,87,155,0,0,0, + 0,1,0,71,2,140,2,207,3,213,0,16,0,0,19,20,23,22,50,55,54,53,51,20,6,35,34,39,38,53,48,194,54,54,186,54,55,122,172,152, + 151,86,87,3,213,111,66,65,65,64,113,155,174,87,87,155,0,2,0,117,1,173,2,236,5,30,0,17,0,29,0,0,19,17,35,17,51,21,62,1, + 51,50,23,22,16,7,6,35,34,38,36,52,39,38,34,7,6,20,23,22,50,55,234,117,117,36,112,77,129,80,80,80,80,129,77,112,1,102,52,53, + 184,53,52,52,53,184,53,2,250,254,179,3,98,95,56,54,90,91,254,216,91,90,54,161,228,64,65,65,64,228,64,65,65,0,0,0,0,1,0,35, + 2,156,1,219,5,193,0,20,0,0,19,21,51,21,35,17,20,22,59,1,21,35,34,39,38,53,17,35,53,51,53,236,239,239,48,72,119,119,134,51, + 51,85,85,5,193,178,80,254,172,77,44,86,45,44,118,1,84,80,178,0,0,1,0,110,2,140,2,189,5,15,0,22,0,0,19,17,51,17,20,23, + 22,51,50,55,54,53,17,51,17,35,53,6,7,6,35,34,38,110,116,39,39,78,94,54,55,116,116,43,55,56,74,121,126,3,148,1,123,254,136,89, + 44,45,54,53,92,1,99,253,141,96,57,28,27,134,0,0,0,1,0,110,2,199,3,65,4,212,0,22,0,0,1,33,53,33,50,55,54,53,52,39, + 38,35,33,53,33,21,35,30,1,21,20,7,6,2,25,254,85,1,166,101,50,50,60,60,103,254,112,2,193,108,64,62,75,76,2,199,103,35,34,70, + 83,49,48,103,103,37,100,65,108,56,56,0,0,1,0,117,2,141,4,123,5,16,0,40,0,0,1,6,7,6,35,34,38,53,17,51,17,20,23,22, + 51,50,55,54,53,17,51,17,20,23,22,51,50,55,54,53,17,51,17,35,53,6,7,6,35,34,38,2,81,43,60,61,82,110,120,117,36,36,73,90, + 53,52,116,36,36,75,89,52,53,116,116,40,55,56,76,77,108,3,21,69,33,34,138,127,1,122,254,137,91,43,44,54,52,92,1,99,254,137,91,43, + 44,54,54,90,1,99,253,141,98,59,27,28,70,0,0,0,0,1,0,38,2,156,2,213,5,15,0,6,0,0,19,51,27,1,51,1,35,38,123,221, + 220,123,254,248,158,5,15,253,242,2,14,253,141,0,0,0,0,2,0,121,1,173,2,219,6,11,0,14,0,28,0,0,19,17,35,17,16,33,32,23, + 22,7,22,23,18,33,38,39,22,51,50,53,52,5,53,22,53,52,35,34,21,237,116,1,12,1,17,1,1,110,176,1,1,254,207,133,57,70,125,181, + 254,219,230,148,165,2,195,254,234,3,94,1,0,216,153,56,51,149,254,246,1,184,97,176,158,12,95,4,183,123,175,0,0,1,0,20,1,173,2,213, + 5,15,0,14,0,0,27,2,51,1,21,35,53,3,38,43,1,53,51,50,227,155,220,123,254,227,116,185,28,60,31,44,124,4,173,254,124,1,230,253, + 141,239,239,1,212,71,88,0,0,2,0,71,2,140,2,207,5,239,0,27,0,43,0,0,1,38,35,34,21,20,23,22,23,22,21,20,7,6,32,39, + 38,53,52,55,54,55,38,53,52,33,50,23,1,6,7,6,20,23,22,51,50,54,53,52,39,38,39,38,2,121,65,150,160,167,130,74,90,86,87,254, + 210,86,87,87,33,47,98,1,22,139,76,254,204,43,34,55,54,54,94,93,108,57,61,80,40,5,114,40,66,52,26,21,63,75,156,148,87,88,88,87, + 154,114,93,36,20,44,79,152,39,254,248,17,40,64,228,63,65,130,106,112,54,57,6,4,0,2,0,71,1,173,3,9,5,20,0,10,0,41,0,0, + 1,34,21,17,50,55,54,53,52,39,38,39,50,23,22,21,20,7,6,35,21,35,53,34,39,38,53,52,55,54,55,21,6,7,6,21,20,23,22,51, + 17,52,2,10,41,61,59,54,55,45,33,88,81,86,86,81,129,115,126,83,86,86,64,104,41,37,54,54,49,70,4,188,81,254,127,58,53,125,116,63, + 51,88,74,79,165,152,90,85,226,225,85,88,154,160,82,61,16,92,12,44,65,106,113,64,58,1,129,169,0,1,0,37,1,173,2,196,5,16,0,23, + 0,0,1,39,3,35,1,3,38,43,1,53,23,22,31,1,19,51,1,19,22,59,1,21,39,38,1,205,94,193,137,1,18,115,31,97,31,44,163,40, + 94,193,137,254,239,114,31,97,31,44,163,2,16,215,254,198,1,188,1,7,71,88,1,4,93,215,1,58,254,68,254,248,70,89,2,4,255,255,0,122, + 0,0,0,238,3,103,18,7,11,74,0,0,253,100,0,0,255,255,0,117,0,0,2,18,2,130,18,7,2,117,0,0,253,100,0,0,255,255,0,110, + 255,240,2,189,2,115,18,7,8,183,0,0,253,100,0,0,255,255,0,38,0,0,2,213,2,115,18,7,8,186,0,0,253,100,0,0,255,255,0,121, + 255,17,2,219,3,111,18,7,8,187,0,0,253,100,0,0,255,255,0,20,255,17,2,213,2,115,18,7,8,188,0,0,253,100,0,0,0,2,0,121, + 255,17,2,239,2,130,0,16,0,28,0,0,19,54,55,54,51,50,22,16,6,35,34,38,39,17,35,17,52,5,52,38,35,34,6,21,20,22,51,50, + 54,178,38,95,37,115,128,160,160,128,78,111,37,116,1,254,105,92,91,106,106,91,92,105,2,3,57,50,20,181,254,216,182,55,56,254,179,2,34,129, + 123,113,130,130,113,114,129,129,255,255,0,71,255,17,3,9,2,120,18,7,8,190,0,0,253,100,0,0,255,255,0,37,255,17,2,196,2,116,18,7, + 8,191,0,0,253,100,0,0,0,2,0,186,254,86,4,163,4,123,0,28,0,40,0,0,19,16,18,33,50,22,23,21,46,1,35,34,6,29,1,62, + 1,51,50,18,17,16,2,35,34,38,39,21,35,19,20,22,51,50,54,53,52,38,35,34,6,186,254,1,6,97,172,81,81,158,82,181,180,57,178,124, + 206,252,252,206,124,178,57,184,184,165,149,148,165,165,148,149,165,2,70,1,30,1,23,29,30,179,44,42,189,191,91,99,98,254,198,254,253,254,252,254, + 198,98,99,170,2,35,200,220,220,200,199,220,220,0,0,0,255,255,0,127,2,156,3,76,5,224,16,6,8,147,0,0,0,1,0,116,0,0,2,132, + 4,96,0,19,0,0,19,53,33,21,35,17,51,21,35,17,51,21,33,53,51,17,35,53,51,17,116,2,16,168,168,168,168,253,240,176,176,176,3,188, + 164,164,254,172,164,254,224,164,164,1,32,164,1,84,0,0,0,3,0,50,254,86,5,36,4,123,0,25,0,34,0,43,0,0,37,17,35,17,35,53, + 51,17,51,21,62,1,51,50,23,22,23,51,21,35,6,7,6,35,34,38,1,33,22,23,22,51,50,55,54,1,33,38,39,38,35,34,7,6,1,115, + 185,136,136,185,58,177,123,203,128,102,21,133,129,11,116,128,203,123,177,2,55,253,144,8,74,84,146,146,84,74,253,157,2,102,15,62,84,146,146,84, + 62,168,253,174,3,174,144,1,204,170,100,97,162,130,195,144,234,149,162,97,1,192,174,102,116,116,102,1,62,132,86,116,116,86,0,0,0,1,0,145, + 254,86,2,47,6,20,0,16,0,0,37,21,20,6,43,1,53,51,50,55,54,39,55,35,17,51,17,2,47,164,180,70,48,106,38,42,4,2,184,184, + 154,174,214,192,156,48,54,148,20,6,20,250,134,0,0,0,0,2,0,71,2,140,2,190,5,30,0,19,0,31,0,0,19,21,35,17,51,21,54,55, + 54,51,50,23,22,16,7,6,35,34,39,38,36,52,39,38,34,7,6,20,23,22,50,55,187,116,116,37,56,55,78,128,80,81,81,80,128,78,55,56, + 1,102,53,52,184,53,53,53,53,184,52,2,250,95,2,115,94,56,27,27,90,91,254,216,91,90,27,27,161,228,65,64,64,65,228,65,64,64,0,0, + 0,1,0,71,2,140,2,117,5,30,0,29,0,0,1,21,38,39,38,35,34,7,6,20,23,22,51,50,55,54,55,21,14,1,35,34,38,53,52,54, + 51,50,23,22,2,117,49,49,50,50,113,62,63,63,62,113,50,50,49,49,48,104,59,159,188,190,165,53,51,51,4,247,96,24,12,12,64,63,230,63, + 64,12,12,24,95,20,20,178,151,153,176,9,10,0,0,0,0,2,0,71,2,75,2,117,5,30,0,7,0,43,0,0,1,22,51,50,53,38,35,34, + 7,6,21,7,52,55,38,39,38,53,52,54,51,50,23,22,23,21,38,39,38,35,34,7,6,20,23,22,23,54,51,50,23,22,35,34,1,90,37,48, + 92,1,82,64,53,4,96,8,36,30,94,190,165,52,52,49,50,47,52,49,50,113,62,63,63,2,6,53,123,188,1,1,210,51,2,238,11,32,42,154, + 32,38,2,59,47,19,29,90,150,153,176,9,10,20,96,23,13,12,63,64,230,64,2,5,98,138,105,0,0,2,0,71,2,140,2,207,6,3,0,17, + 0,46,0,0,1,38,39,38,35,34,7,6,21,20,22,51,50,54,53,52,39,38,55,22,23,22,21,20,7,6,35,34,38,53,52,54,51,50,23,22, + 23,39,7,39,55,39,51,23,55,23,7,2,16,32,27,28,26,105,58,59,110,92,91,110,17,17,6,79,36,36,90,89,145,146,178,174,139,12,16,16, + 27,100,201,21,177,114,144,80,209,21,186,4,156,10,4,5,61,60,109,106,124,124,106,68,53,52,165,80,81,80,97,143,87,87,174,143,140,174,2,1, + 3,101,60,56,51,114,81,62,54,55,0,0,0,1,0,84,2,140,2,98,5,31,0,49,0,0,1,22,23,22,21,20,7,6,35,34,39,38,39,53, + 22,23,22,51,50,55,54,53,52,39,38,43,1,53,51,50,54,53,52,39,38,35,34,7,6,7,53,62,1,51,50,23,22,21,20,6,1,189,78,43, + 44,81,82,150,50,54,53,56,45,53,54,58,95,54,53,49,46,86,93,97,73,86,45,43,75,45,51,50,61,61,108,47,124,71,72,76,3,238,13,41, + 41,60,97,51,51,8,7,16,96,21,10,11,32,31,51,49,31,29,85,50,39,36,26,25,7,7,17,94,13,14,44,44,79,52,72,0,0,1,0,30, + 2,156,1,223,6,3,0,21,0,0,1,21,35,34,7,6,29,1,51,21,35,17,35,17,35,53,51,53,52,55,54,51,1,223,111,62,25,24,191,191, + 117,110,110,55,55,119,6,3,85,23,22,58,56,80,253,221,2,35,80,44,105,47,48,0,0,1,255,233,1,173,1,92,5,15,0,21,0,0,19,21, + 20,7,6,43,1,53,51,50,55,54,61,1,35,53,51,17,51,17,51,21,238,52,51,114,44,31,66,24,24,114,114,116,110,2,156,11,120,54,54,88, + 27,28,85,11,80,2,35,253,221,80,0,0,0,2,0,71,1,173,2,190,5,15,0,12,0,44,0,0,1,53,35,34,7,6,20,23,22,51,50,55, + 54,19,17,20,7,6,35,34,39,38,39,53,22,23,22,51,50,55,54,61,1,6,7,6,35,34,39,38,53,52,55,54,51,2,74,198,93,52,52,52, + 52,93,94,52,52,116,80,80,165,61,55,54,51,51,50,50,51,114,57,57,36,56,56,78,130,79,80,80,79,130,3,221,235,62,61,224,61,62,62,61, + 1,162,253,219,160,78,79,8,9,16,101,25,12,11,52,53,107,51,55,28,27,88,88,145,130,88,88,0,0,1,0,110,1,173,2,189,5,15,0,22, + 0,0,19,17,51,17,20,23,22,51,50,55,54,53,17,51,17,35,17,6,7,6,35,34,38,110,116,39,39,78,94,54,55,116,116,43,56,55,74,121, + 126,3,148,1,123,254,136,89,44,45,54,53,92,1,99,252,158,1,79,57,28,27,134,0,0,2,0,73,2,156,1,150,6,3,0,11,0,15,0,0, + 19,53,51,17,51,17,51,21,35,21,35,53,17,51,21,35,73,114,116,103,103,116,116,116,3,153,92,1,26,254,230,92,253,253,2,106,130,0,0,0, + 0,1,0,122,2,156,1,126,5,15,0,12,0,0,19,17,20,23,22,59,1,21,35,34,38,53,17,238,23,24,67,30,44,114,102,5,15,254,112,85, + 28,27,87,108,119,1,144,0,0,1,0,73,2,156,1,150,5,15,0,11,0,0,19,53,33,21,35,17,51,21,33,53,51,17,73,1,77,106,106,254, + 179,111,4,179,92,92,254,69,92,92,1,187,0,1,0,73,2,156,1,150,5,15,0,19,0,0,19,53,33,21,35,21,51,21,35,21,51,21,33,53, + 51,53,35,53,51,53,73,1,77,106,106,106,106,254,179,111,111,111,4,179,92,92,190,92,161,92,92,161,92,190,0,0,0,3,255,86,1,173,1,96, + 6,3,0,3,0,18,0,27,0,0,19,51,21,35,3,34,53,52,59,1,17,51,17,51,21,35,6,7,6,39,35,34,23,22,51,50,55,54,122,116, + 116,101,191,170,122,116,114,121,11,34,51,20,114,75,2,2,78,66,24,11,6,3,130,252,44,124,115,2,115,253,141,87,63,35,53,152,29,36,27,13, + 0,1,0,122,1,173,1,126,6,3,0,14,0,0,19,17,51,17,21,20,23,22,59,1,21,35,34,38,53,122,116,23,24,67,30,44,114,102,2,228, + 3,31,252,225,83,86,27,27,88,108,120,0,0,1,0,91,1,173,1,96,6,3,0,17,0,0,1,21,20,7,6,43,1,53,51,50,55,54,39,55, + 35,17,51,17,1,96,51,52,114,44,31,66,24,27,3,2,116,116,2,242,97,120,54,54,88,27,30,83,11,3,103,252,239,0,0,0,0,1,0,113, + 2,156,2,131,5,30,0,5,0,0,19,51,17,33,21,33,113,127,1,147,253,238,5,30,253,221,95,0,0,1,0,117,1,173,4,123,5,30,0,52, + 0,0,1,54,55,54,51,50,23,22,21,17,20,6,43,1,53,51,50,54,53,38,55,52,53,52,38,35,34,7,6,21,17,35,17,52,39,38,35,34, + 7,6,21,17,35,17,51,21,54,55,54,51,50,23,22,2,159,43,61,60,82,111,59,60,102,114,161,147,66,48,1,1,72,74,90,52,53,116,36,36, + 75,89,52,52,117,117,39,56,55,77,76,54,54,4,151,69,33,33,69,68,126,254,122,120,108,88,54,86,48,232,61,45,90,88,53,54,92,254,158,1, + 119,91,44,43,53,54,92,254,158,2,115,97,57,28,27,34,35,0,0,0,0,1,0,117,1,173,4,123,5,16,0,40,0,0,1,6,7,6,35,34, + 38,53,17,51,17,20,23,22,51,50,55,54,53,17,51,17,20,23,22,51,50,55,54,53,17,51,17,35,17,6,7,6,35,34,38,2,81,43,60,61, + 82,110,120,117,36,36,73,90,53,52,116,36,36,75,89,52,53,116,116,40,55,56,76,77,108,3,21,69,34,33,138,126,1,123,254,137,91,43,44,53, + 53,92,1,99,254,137,91,43,44,54,53,91,1,99,252,157,1,81,58,27,28,70,0,0,0,1,255,233,1,173,2,201,5,30,0,31,0,0,19,20, + 7,6,43,1,53,51,50,54,53,17,51,21,62,1,51,50,23,22,21,17,35,17,52,39,38,35,34,7,6,21,238,52,51,114,44,31,66,48,116,42, + 112,74,122,62,63,116,39,40,78,94,54,54,2,145,120,54,54,88,54,86,2,126,97,56,56,66,68,129,254,133,1,119,89,44,45,53,54,92,0,0, + 0,1,0,117,1,173,3,85,5,30,0,32,0,0,1,52,39,38,35,34,7,6,21,17,35,17,51,21,54,55,54,51,50,23,22,21,17,20,22,59, + 1,21,35,34,39,38,53,2,80,39,39,78,94,54,54,117,117,41,56,57,74,121,63,62,48,66,31,44,114,51,52,4,19,89,44,45,53,54,92,254, + 158,2,115,97,56,28,28,66,68,129,254,122,86,54,88,54,54,120,0,0,0,1,0,113,2,156,2,196,5,30,0,9,0,0,19,51,1,17,51,17, + 35,1,17,35,113,171,1,45,123,171,254,211,123,5,30,254,7,1,249,253,126,1,250,254,6,0,0,0,0,3,0,71,2,140,2,207,5,30,0,15, + 0,23,0,32,0,0,1,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54,22,34,7,6,7,33,38,39,23,33,22,23,22,51,50,55,54,1, + 139,151,87,86,86,87,151,152,85,87,87,85,245,186,54,47,7,1,145,6,47,49,254,119,11,38,54,94,93,54,38,5,30,87,87,155,154,87,88,88, + 87,154,155,87,87,87,64,57,92,91,56,239,69,45,65,65,46,0,0,0,0,3,0,71,1,174,2,207,6,3,0,29,0,38,0,46,0,0,1,35, + 53,33,21,35,21,22,23,22,21,20,7,6,7,21,51,21,33,53,51,53,38,39,38,53,52,55,54,55,23,17,54,55,54,53,52,39,38,3,17,6, + 7,6,20,23,22,1,79,151,1,162,151,112,70,86,86,70,112,151,254,94,151,110,67,87,87,67,110,116,54,37,54,54,37,170,52,35,55,54,36,5, + 167,92,92,140,14,70,87,155,154,87,71,14,133,92,92,134,14,70,87,154,155,87,69,15,91,254,42,14,44,65,112,111,65,45,254,57,1,212,14,42, + 65,226,64,43,0,1,0,70,1,173,2,97,5,30,0,58,0,0,1,21,46,1,35,34,7,6,21,20,23,22,31,1,22,23,22,21,20,7,6,35, + 34,47,1,21,20,22,59,1,21,35,34,39,38,61,2,22,23,22,51,50,54,53,52,39,38,47,1,46,1,53,52,55,54,51,50,22,2,59,49,106, + 56,87,42,44,31,31,93,40,123,52,52,77,78,136,57,62,13,48,66,147,160,114,51,52,64,63,62,61,82,88,31,32,108,41,107,96,71,70,130,64, + 114,4,253,98,23,22,23,24,47,36,21,20,18,8,24,43,42,77,87,51,51,9,3,7,86,54,88,54,54,120,34,106,29,15,15,50,45,42,23,22, + 21,8,20,84,73,88,48,48,16,0,0,0,0,1,255,233,1,173,1,202,6,3,0,23,0,0,19,2,3,52,55,54,59,1,21,35,34,7,6,21, + 19,20,7,6,43,1,53,51,50,54,122,1,1,55,51,122,110,111,62,24,25,2,52,51,114,44,31,66,48,2,145,1,93,1,77,101,51,48,85,23, + 22,58,253,74,120,54,54,88,54,0,0,0,0,1,0,35,1,173,1,219,5,193,0,31,0,0,19,21,51,21,35,17,20,22,59,1,21,20,7,6, + 43,1,53,51,50,54,61,1,35,34,39,38,53,17,35,53,51,53,236,239,239,48,72,119,52,51,114,44,31,66,48,3,134,51,51,85,85,5,193,178, + 80,254,172,77,44,97,120,54,54,88,54,86,11,45,44,118,1,84,80,178,0,2,0,94,2,140,3,144,5,15,0,23,0,33,0,0,19,53,51,17, + 51,17,33,17,51,17,51,21,35,21,35,53,6,7,6,35,34,38,61,1,41,1,21,20,23,22,51,50,55,54,94,110,116,1,103,116,117,117,116,43, + 56,55,74,121,126,1,218,254,154,39,39,78,94,54,49,3,153,92,1,26,254,230,1,26,254,230,92,253,96,57,28,27,134,130,5,2,89,44,45,54, + 47,0,0,0,0,1,0,71,2,139,2,216,5,15,0,38,0,0,19,53,33,21,6,7,6,21,20,23,22,51,50,55,54,53,52,39,38,39,53,33, + 21,35,22,23,22,21,20,7,6,32,39,38,53,52,55,54,55,71,1,23,69,40,41,55,56,90,91,55,56,42,44,63,1,18,148,71,36,34,90,89, + 254,228,89,90,33,34,74,4,179,92,123,39,58,63,75,89,55,54,54,55,89,82,56,62,35,123,92,56,63,62,76,131,82,82,81,82,128,82,60,61, + 58,0,0,0,0,1,0,117,2,138,2,146,5,15,0,19,0,0,1,50,54,53,17,51,17,20,7,6,35,34,39,38,53,17,51,17,20,22,1,132, + 81,72,117,68,69,133,134,69,68,117,72,2,226,80,90,1,131,254,115,123,62,63,63,62,123,1,141,254,125,90,80,0,0,1,0,122,2,156,2,191, + 5,15,0,30,0,0,1,51,22,23,22,21,20,7,6,43,1,34,38,53,17,51,17,20,23,22,63,1,50,55,54,53,52,39,38,39,38,1,103,203, + 72,35,34,89,90,142,44,114,102,116,23,26,65,32,90,56,55,41,50,58,48,4,196,56,63,62,76,131,82,82,108,119,1,144,254,112,85,28,28,1, + 1,54,55,89,81,56,67,31,24,0,0,0,0,1,0,38,2,156,2,213,5,15,0,6,0,0,1,35,11,1,35,1,51,2,213,123,220,221,123,1, + 9,158,2,156,2,14,253,242,2,115,0,0,0,1,0,55,2,156,2,110,5,15,0,9,0,0,19,33,21,1,33,21,33,53,1,33,71,2,39,254, + 76,1,180,253,201,1,180,254,92,5,15,94,254,61,82,94,1,195,0,0,0,1,0,55,1,173,2,253,5,15,0,22,0,0,19,33,21,1,33,21, + 35,21,20,23,22,59,1,21,35,34,38,61,1,33,53,1,33,71,2,39,254,76,1,180,1,23,24,67,30,44,114,102,254,62,1,180,254,92,5,15, + 94,254,61,82,11,86,27,27,88,108,120,11,94,1,195,0,0,2,0,55,2,94,2,110,5,15,0,20,0,27,0,0,1,6,21,35,52,55,35,53, + 1,33,53,33,21,1,51,54,51,50,23,20,35,39,51,50,53,52,35,6,1,124,2,96,2,229,1,180,254,92,2,39,254,76,110,38,138,143,1,210, + 13,13,109,44,55,2,156,29,33,33,29,94,1,195,82,94,254,61,162,138,106,82,31,51,1,0,0,0,0,1,0,55,1,168,2,163,5,15,0,33, + 0,0,1,50,23,22,23,22,21,20,7,6,35,34,39,38,39,53,30,1,51,50,55,54,53,52,39,38,43,1,53,1,33,53,33,21,1,104,67,81, + 62,54,51,96,96,176,59,63,63,67,53,126,69,120,62,63,58,58,104,110,1,15,254,92,2,38,3,167,32,23,61,59,77,124,67,68,10,11,20,109, + 27,28,42,42,80,74,42,41,93,1,24,82,94,0,0,0,0,3,0,71,2,143,2,207,6,12,0,8,0,16,0,29,0,0,1,33,22,23,22,51, + 50,55,54,55,38,39,38,34,7,6,7,19,50,23,22,16,7,6,35,34,38,16,55,54,2,83,254,111,6,47,54,94,93,54,47,5,9,43,54,186, + 54,44,8,199,151,87,86,86,87,151,152,172,86,86,4,42,128,77,87,88,77,222,109,71,89,88,70,111,1,131,118,119,254,94,119,119,238,1,162,119, + 118,0,0,0,0,1,252,91,4,238,255,165,6,102,0,5,0,0,1,33,53,33,55,51,254,176,253,171,2,23,168,139,4,238,148,228,0,1,252,91, + 4,238,255,165,6,102,0,5,0,0,1,3,51,23,33,21,253,80,245,139,168,2,23,4,238,1,120,228,148,0,0,0,0,1,252,91,4,238,255,165, + 6,102,0,5,0,0,1,19,35,39,33,53,254,176,245,139,168,253,233,6,102,254,136,228,148,0,0,0,0,1,252,91,4,238,255,165,6,102,0,5, + 0,0,1,33,21,33,7,35,253,80,2,85,253,233,168,139,6,102,148,228,0,1,252,66,4,238,255,190,6,102,0,9,0,0,1,51,19,35,39,7, + 35,3,51,23,254,53,148,245,139,180,180,148,245,139,180,6,102,254,136,245,245,1,120,245,0,1,252,66,4,238,255,190,6,102,0,9,0,0,1,23, + 55,51,3,35,39,7,35,19,253,203,180,180,139,245,148,180,180,139,245,6,102,245,245,254,136,245,245,1,120,0,0,0,255,255,0,16,254,19,5,104, + 5,213,16,39,2,214,4,188,0,1,18,6,0,36,0,0,255,255,0,123,254,19,4,45,4,123,16,39,2,214,4,84,0,1,18,6,0,68,0,0, + 255,255,0,201,0,0,4,236,7,80,16,39,22,193,4,188,1,117,18,6,0,37,0,0,255,255,0,184,255,227,4,164,7,82,16,39,2,184,3,22, + 1,62,18,6,0,69,0,0,255,255,0,201,254,137,4,236,5,213,18,38,0,37,0,0,16,7,2,212,4,165,0,0,255,255,0,186,254,137,4,164, + 6,20,18,38,0,69,0,0,16,7,2,212,4,154,0,0,255,255,0,201,254,192,4,236,5,213,18,38,0,37,0,0,16,7,2,143,0,151,0,0, + 255,255,0,186,254,192,4,164,6,20,18,38,0,69,0,0,16,7,2,143,0,143,0,0,255,255,0,115,254,117,5,39,7,108,16,39,22,186,5,76, + 1,118,18,6,0,137,0,0,255,255,0,113,254,117,3,231,6,102,18,38,0,169,0,0,16,6,0,118,67,0,0,0,255,255,0,201,0,0,5,176, + 7,80,16,39,22,193,4,236,1,117,18,6,0,39,0,0,255,255,0,113,255,227,4,90,7,137,16,39,2,184,5,254,1,117,18,6,0,71,0,0, + 255,255,0,201,254,138,5,176,5,213,16,39,2,212,4,236,0,1,18,6,0,39,0,0,255,255,0,113,254,138,4,90,6,20,16,39,2,212,4,102, + 0,1,18,6,0,71,0,0,255,255,0,201,254,193,5,176,5,213,16,39,2,226,4,236,0,1,18,6,0,39,0,0,255,255,0,113,254,193,4,90, + 6,20,16,39,2,226,4,102,0,1,18,6,0,71,0,0,255,255,0,201,254,119,5,176,5,213,18,38,0,39,0,0,16,6,0,122,91,2,0,0, + 255,255,0,113,254,117,4,90,6,20,18,38,0,71,0,0,16,6,0,122,246,0,0,0,255,255,0,201,254,21,5,176,5,213,16,39,2,222,4,236, + 0,1,18,6,0,39,0,0,255,255,0,113,254,21,4,90,6,20,16,39,2,222,4,102,0,1,18,6,0,71,0,0,255,255,0,201,0,0,4,139, + 8,90,18,38,0,40,0,0,16,6,22,242,238,0,0,0,255,255,0,113,255,227,4,127,7,94,16,39,22,242,255,217,255,4,18,6,0,72,0,0, + 255,255,0,201,0,0,4,139,8,90,18,38,0,40,0,0,16,6,22,241,236,0,0,0,255,255,0,113,255,227,4,127,7,94,18,38,0,72,0,0, + 16,7,22,241,255,215,255,4,255,255,0,201,254,75,4,139,5,213,18,38,0,40,0,0,16,7,2,222,4,177,0,55,255,255,0,113,254,75,4,127, + 4,123,18,38,0,72,0,0,16,7,2,222,4,176,0,55,255,255,0,201,254,118,4,139,5,213,18,38,0,40,0,0,16,7,2,176,0,179,0,0, + 255,255,0,113,254,118,4,127,4,123,18,38,0,72,0,0,16,7,2,176,0,155,0,0,255,255,0,201,254,117,4,139,7,109,16,39,22,192,4,161, + 1,117,18,38,0,40,0,0,16,7,0,122,0,190,0,0,255,255,0,113,254,117,4,127,6,72,18,38,0,72,0,0,16,39,2,154,0,135,0,0, + 16,6,0,122,75,0,0,0,255,255,0,201,0,0,4,35,7,79,16,39,22,193,4,118,1,116,18,6,0,41,0,0,255,255,0,47,0,0,2,248, + 7,137,16,39,2,184,3,224,1,117,18,6,0,73,0,0,255,255,0,115,255,227,5,139,7,24,18,38,0,42,0,0,16,7,2,139,1,50,1,34, + 255,255,0,113,254,86,4,90,5,246,18,38,0,74,0,0,16,6,2,139,73,0,0,0,255,255,0,201,0,0,5,59,7,78,16,39,22,193,5,20, + 1,115,18,6,0,43,0,0,255,255,0,184,0,0,4,100,7,82,16,39,2,184,3,22,1,62,18,6,0,75,0,0,255,255,0,201,254,137,5,59, + 5,213,16,39,2,212,5,2,0,0,18,6,0,43,0,0,255,255,0,186,254,137,4,100,6,20,16,39,2,212,4,143,0,0,18,6,0,75,0,0, + 255,255,0,201,0,0,5,59,7,80,18,38,0,43,0,0,16,7,0,106,1,8,1,64,255,255,255,237,0,0,4,100,7,78,16,39,2,185,3,22, + 1,62,18,6,0,75,0,0,255,255,0,17,254,116,5,59,5,213,18,38,0,43,0,0,16,7,0,122,254,238,255,255,255,255,0,2,254,116,4,100, + 6,20,18,38,0,75,0,0,16,7,0,122,254,223,255,255,255,255,0,201,254,57,5,59,5,213,18,38,0,43,0,0,16,7,2,223,5,10,0,0, + 255,255,0,186,254,57,4,100,6,20,18,38,0,75,0,0,16,7,2,223,4,149,0,0,255,255,0,0,254,118,2,148,5,213,18,38,0,44,0,0, + 16,7,2,176,255,74,0,0,255,255,255,211,254,118,2,103,6,20,16,39,2,176,255,29,0,0,18,6,0,76,0,0,255,255,0,7,0,0,2,89, + 8,90,18,38,0,44,0,0,16,7,22,239,254,116,0,0,255,255,255,244,0,0,2,70,7,22,18,38,0,243,0,0,16,7,22,239,254,97,254,188, + 255,255,0,201,0,0,5,106,7,108,16,39,22,186,4,226,1,118,18,6,0,46,0,0,255,255,0,186,0,0,4,156,7,108,16,39,22,186,3,90, + 1,118,18,6,0,78,0,0,255,255,0,201,254,137,5,106,5,213,18,38,0,46,0,0,16,7,2,212,4,220,0,0,255,255,0,186,254,137,4,156, + 6,20,18,38,0,78,0,0,16,7,2,212,4,145,0,0,255,255,0,201,254,192,5,106,5,213,18,38,0,46,0,0,16,7,2,143,1,13,0,0, + 255,255,0,186,254,192,4,156,6,20,18,38,0,78,0,0,16,6,2,143,118,0,0,0,255,255,0,201,254,137,4,106,5,213,16,39,2,212,4,154, + 0,0,16,6,0,47,0,0,255,255,0,201,254,137,1,132,6,20,16,39,2,212,3,39,0,0,16,6,0,79,11,0,255,255,0,3,254,138,4,106, + 7,107,16,39,2,181,3,42,1,117,16,39,2,212,4,153,0,1,18,6,0,47,0,0,255,255,255,253,254,137,2,83,7,49,16,39,0,113,255,40, + 1,59,16,6,9,48,0,0,255,255,0,201,254,192,4,106,5,213,18,38,0,47,0,0,16,7,2,143,0,142,0,0,255,255,255,244,254,192,2,74, + 6,20,16,39,2,143,255,31,0,0,18,6,0,79,0,0,255,255,0,201,254,20,4,106,5,213,16,39,2,136,0,151,249,38,18,6,0,47,0,0, + 255,255,255,222,254,20,2,92,6,20,16,39,2,136,255,29,249,38,18,6,0,79,0,0,255,255,0,201,0,0,6,31,7,108,16,39,22,186,5,115, + 1,118,18,6,0,48,0,0,255,255,0,186,0,0,7,29,6,102,18,38,0,80,0,0,16,7,0,118,1,148,0,0,255,255,0,201,0,0,6,31, + 7,79,16,39,22,193,5,119,1,116,18,6,0,48,0,0,255,255,0,186,0,0,7,29,6,20,16,39,2,184,5,233,0,0,18,6,0,80,0,0, + 255,255,0,201,254,137,6,31,5,213,16,39,2,212,5,116,0,0,16,6,0,48,0,0,255,255,0,186,254,137,7,29,4,123,16,39,2,212,5,230, + 0,0,16,6,0,80,0,0,255,255,0,201,0,0,5,51,7,80,16,39,22,193,4,245,1,117,18,6,0,49,0,0,255,255,0,186,0,0,4,100, + 6,20,16,39,2,184,4,137,0,0,18,6,0,81,0,0,255,255,0,201,254,137,5,51,5,213,16,39,2,212,4,254,0,0,16,6,0,49,0,0, + 255,255,0,186,254,137,4,100,4,123,16,39,2,212,4,143,0,0,16,6,0,81,0,0,255,255,0,201,254,192,5,51,5,213,18,38,0,49,0,0, + 16,7,2,143,0,247,0,0,255,255,0,186,254,192,4,100,4,123,18,38,0,81,0,0,16,7,2,143,0,140,0,0,255,255,0,201,254,20,5,51, + 5,213,16,39,2,136,0,254,249,38,18,6,0,49,0,0,255,255,0,186,254,20,4,100,4,123,16,39,2,136,0,149,249,38,18,6,0,81,0,0, + 255,255,0,115,255,227,5,217,8,90,18,38,0,50,0,0,16,6,22,247,102,0,0,0,255,255,0,113,255,227,4,117,7,12,18,38,0,82,0,0, + 16,7,22,247,255,178,254,178,255,255,0,115,255,227,5,217,8,86,18,38,0,50,0,0,16,6,22,245,108,0,0,0,255,255,0,113,255,227,4,117, + 7,15,18,38,0,82,0,0,16,39,0,106,0,111,0,255,16,7,22,187,4,114,0,18,255,255,0,115,255,227,5,217,8,90,18,38,0,50,0,0, + 16,6,22,242,106,0,0,0,255,255,0,113,255,227,4,117,7,94,16,38,0,82,0,0,16,7,22,242,255,181,255,4,255,255,0,115,255,227,5,217, + 8,90,18,38,0,50,0,0,16,6,22,241,104,0,0,0,255,255,0,113,255,227,4,117,7,94,16,39,22,241,255,185,255,4,16,6,0,82,0,0, + 255,255,0,201,0,0,4,141,7,108,16,39,22,186,4,158,1,118,18,6,0,51,0,0,255,255,0,186,254,86,4,164,6,102,18,38,0,83,0,0, + 16,6,0,118,50,0,0,0,255,255,0,201,0,0,4,141,7,79,16,39,22,193,4,132,1,116,18,6,0,51,0,0,255,255,0,186,254,86,4,164, + 6,20,16,39,2,184,4,166,0,0,18,6,0,83,0,0,255,255,0,201,0,0,5,84,7,78,16,39,22,193,4,131,1,115,18,6,0,53,0,0, + 255,255,0,186,0,0,3,74,6,20,16,39,2,184,4,23,0,0,18,6,0,85,0,0,255,255,0,201,254,137,5,84,5,213,16,39,2,212,4,125, + 0,0,16,6,0,53,0,0,255,255,0,186,254,137,3,74,4,123,16,39,2,212,3,32,0,0,16,6,0,85,0,0,255,255,0,201,254,137,5,84, + 7,49,16,39,0,113,0,125,1,59,16,6,9,83,0,0,255,255,0,186,254,137,3,74,5,245,16,38,0,113,24,255,16,6,9,84,0,0,0,0, + 255,255,0,201,254,192,5,84,5,213,18,38,0,53,0,0,16,7,2,143,0,229,0,0,255,255,0,84,254,192,3,74,4,123,18,38,0,85,0,0, + 16,7,2,143,255,127,0,0,255,255,0,135,255,227,4,162,7,79,16,39,22,193,4,184,1,116,18,6,0,54,0,0,255,255,0,111,255,227,3,199, + 6,20,16,39,2,184,4,39,0,0,18,6,0,86,0,0,255,255,0,135,254,137,4,162,5,240,16,39,2,212,4,138,0,0,16,6,0,54,0,0, + 255,255,0,111,254,138,3,199,4,123,16,39,2,212,4,37,0,1,18,6,0,86,0,0,255,255,0,135,255,227,4,162,7,109,16,39,22,186,4,226, + 1,118,16,39,22,193,3,164,1,146,18,6,0,54,0,0,255,255,0,111,255,227,3,226,6,102,18,38,0,86,0,0,16,38,2,155,140,86,16,7, + 0,118,0,144,0,0,0,0,255,255,0,135,255,227,4,162,8,87,16,38,22,246,228,0,18,6,0,54,0,0,0,0,255,255,0,111,255,227,3,199, + 7,201,16,39,2,184,4,45,1,181,18,6,1,35,0,0,255,255,0,135,254,137,4,162,7,79,16,39,22,193,4,155,1,116,18,6,9,91,0,0, + 255,255,0,111,254,138,3,199,5,222,16,39,2,184,4,39,255,202,18,6,9,92,0,0,255,255,255,250,0,0,4,233,7,79,16,39,22,193,4,114, + 1,116,18,6,0,55,0,0,255,255,0,55,0,0,2,242,7,137,16,39,2,184,3,26,1,117,18,6,0,87,0,0,255,255,255,250,254,137,4,233, + 5,213,16,39,2,212,4,113,0,0,16,6,0,55,0,0,255,255,0,55,254,137,2,242,5,158,16,39,2,212,3,232,0,0,16,6,0,87,0,0, + 255,255,255,250,254,192,4,233,5,213,18,38,0,55,0,0,16,6,2,143,98,0,0,0,255,255,0,55,254,192,3,31,5,158,16,38,2,143,244,0, + 18,6,0,87,0,0,0,0,255,255,255,250,254,20,4,233,5,213,16,39,2,136,0,114,249,38,18,6,0,55,0,0,255,255,0,55,254,20,3,39, + 5,158,16,39,2,136,255,232,249,38,18,6,0,87,0,0,255,255,0,178,254,137,5,41,5,213,16,39,2,213,4,240,0,0,18,6,0,56,0,0, + 255,255,0,174,254,137,4,88,4,123,16,39,2,213,4,123,0,0,18,6,0,88,0,0,255,255,0,178,254,118,5,41,5,213,18,38,0,56,0,0, + 16,7,2,176,0,242,0,0,255,255,0,174,254,118,4,88,4,123,18,38,0,88,0,0,16,7,2,176,0,143,0,0,255,255,0,178,254,75,5,41, + 5,213,18,38,0,56,0,0,16,7,2,222,4,224,0,55,255,255,0,174,254,75,4,88,4,123,18,38,0,88,0,0,16,7,2,222,4,117,0,55, + 255,255,0,178,255,227,5,41,8,90,16,38,22,247,46,0,18,6,0,56,0,0,0,0,255,255,0,174,255,227,4,88,7,236,16,38,1,43,0,0, + 16,7,0,118,0,150,1,134,255,255,0,178,255,227,5,41,8,52,16,38,22,237,50,0,18,6,0,56,0,0,0,0,255,255,0,174,255,227,4,88, + 6,244,16,39,22,237,255,200,254,192,18,6,0,88,0,0,255,255,0,16,0,0,5,104,7,125,18,38,0,57,0,0,16,7,2,158,0,237,1,70, + 255,255,0,61,0,0,4,127,6,55,18,38,0,89,0,0,16,6,2,158,109,0,0,0,255,255,0,16,254,137,5,104,5,213,16,38,0,57,0,0, + 16,7,2,212,4,188,0,0,255,255,0,61,254,137,4,127,4,96,16,38,0,89,0,0,16,7,2,212,4,94,0,0,255,255,0,68,0,0,7,166, + 7,114,16,39,22,188,5,245,1,124,18,6,0,58,0,0,255,255,0,86,0,0,6,53,6,107,16,39,0,67,1,9,0,5,18,6,0,90,0,0, + 255,255,0,68,0,0,7,166,7,114,16,39,22,186,5,245,1,124,18,6,0,58,0,0,255,255,0,86,0,0,6,53,6,109,16,39,0,118,1,134, + 0,7,18,6,0,90,0,0,255,255,0,68,0,0,7,166,7,78,16,39,0,106,1,245,1,62,18,6,0,58,0,0,255,255,0,86,0,0,6,53, + 6,16,16,39,0,106,1,69,0,0,18,6,0,90,0,0,255,255,0,68,0,0,7,166,7,78,16,39,22,193,5,245,1,115,18,6,0,58,0,0, + 255,255,0,86,0,0,6,53,6,20,16,39,2,184,5,71,0,0,18,6,0,90,0,0,255,255,0,68,254,137,7,166,5,213,18,38,0,58,0,0, + 16,7,2,212,5,251,0,0,255,255,0,86,254,137,6,53,4,96,18,38,0,90,0,0,16,7,2,212,5,74,0,0,255,255,0,61,0,0,5,59, + 7,79,16,39,22,193,4,202,1,115,18,6,0,59,0,0,255,255,0,59,0,0,4,121,6,20,16,39,2,184,4,98,0,0,18,6,0,91,0,0, + 255,255,0,61,0,0,5,59,7,78,18,38,0,59,0,0,16,7,0,106,0,202,1,62,255,255,0,59,0,0,4,121,6,16,18,38,0,91,0,0, + 16,6,0,106,102,0,0,0,255,255,255,252,0,0,4,231,7,80,16,39,22,193,4,114,1,117,18,6,0,60,0,0,255,255,0,61,254,86,4,127, + 6,20,16,39,2,184,4,96,0,0,18,6,0,92,0,0,255,255,0,92,0,0,5,31,7,109,16,39,22,189,4,190,1,117,18,6,0,61,0,0, + 255,255,0,88,0,0,3,219,6,102,18,38,0,93,0,0,16,6,2,136,26,0,0,0,255,255,0,92,254,137,5,31,5,213,18,38,0,61,0,0, + 16,7,2,212,4,217,0,0,255,255,0,88,254,137,3,219,4,96,18,38,0,93,0,0,16,7,2,212,4,49,0,0,255,255,0,92,254,192,5,31, + 5,213,18,38,0,61,0,0,16,7,2,143,0,199,0,0,255,255,0,88,254,192,3,219,4,96,18,38,0,93,0,0,16,6,2,143,27,0,0,0, + 255,255,0,186,254,192,4,100,6,20,18,38,0,75,0,0,16,6,2,143,102,0,0,0,255,255,0,4,0,0,2,242,7,78,18,38,0,87,0,0, + 16,7,0,106,255,45,1,62,255,255,0,86,0,0,6,53,7,6,18,38,0,90,0,0,16,7,2,156,1,66,0,0,255,255,0,61,254,86,4,127, + 7,6,18,38,0,92,0,0,16,7,2,156,0,129,0,0,255,255,0,123,255,227,5,97,6,20,18,38,0,68,0,0,16,7,2,128,3,218,0,0, + 255,255,0,47,0,0,2,248,7,137,16,39,2,184,3,224,1,117,18,6,1,65,0,0,0,1,0,2,0,0,2,248,6,20,0,24,0,0,33,35, + 17,7,39,55,17,35,53,51,53,52,54,59,1,21,35,34,7,6,21,17,55,23,5,1,152,185,147,74,221,176,176,174,189,174,176,100,38,38,214,75, + 254,223,2,20,104,106,157,1,30,143,78,187,171,153,40,41,103,254,116,152,105,207,0,0,0,1,0,47,0,0,2,248,6,20,0,23,0,0,33,35, + 17,35,53,51,53,35,53,51,54,55,54,59,1,21,35,34,7,6,7,51,21,35,1,152,185,176,176,176,179,13,71,87,189,174,176,100,38,30,6,253, + 255,3,69,143,140,143,137,70,86,153,40,32,68,143,0,0,0,1,0,178,255,227,5,180,5,242,0,55,0,0,1,38,35,34,14,3,21,17,35,17, + 52,62,3,51,50,4,23,34,4,21,20,30,5,21,20,4,35,34,39,53,30,1,51,50,54,53,52,46,7,53,52,54,4,3,109,174,64,102,95,64, + 38,203,57,100,144,166,99,217,1,48,55,207,254,255,67,106,129,129,106,67,254,247,211,180,201,109,177,111,98,151,41,70,91,100,100,91,70,41,223,4, + 244,90,24,64,104,167,111,252,136,3,145,131,207,139,92,40,197,189,125,95,45,67,45,45,62,84,140,92,164,201,95,208,69,70,118,88,53,80,51,41, + 32,36,50,66,103,67,143,187,255,255,0,113,255,227,4,117,5,240,16,6,3,72,0,0,255,255,0,16,254,137,5,104,5,213,16,39,2,212,4,183, + 0,0,18,6,0,36,0,0,255,255,0,123,254,137,4,45,4,123,16,39,2,212,4,33,0,0,18,6,0,68,0,0,255,255,0,16,0,0,5,104, + 7,240,18,38,0,36,0,0,16,7,2,186,4,188,1,117,255,255,0,123,255,227,4,45,6,123,18,38,0,68,0,0,16,7,2,186,4,84,0,0, + 255,255,0,16,0,0,5,104,8,58,18,38,0,36,0,0,16,6,22,248,0,0,0,0,255,255,0,123,255,227,4,175,6,197,16,39,22,248,255,151, + 254,139,16,6,0,68,0,0,255,255,0,16,0,0,5,104,8,58,18,38,0,36,0,0,16,6,22,249,0,0,0,0,255,255,0,123,255,227,4,45, + 6,198,16,38,0,68,0,0,16,7,22,249,255,148,254,140,255,255,0,16,0,0,5,104,8,91,18,38,0,36,0,0,16,6,22,255,0,0,0,0, + 255,255,0,123,255,227,4,157,6,230,16,39,22,255,255,150,254,139,16,6,0,68,0,0,255,255,0,16,0,0,5,104,8,117,18,38,0,36,0,0, + 16,6,22,250,0,0,0,0,255,255,0,123,255,227,4,45,7,0,16,39,22,250,255,150,254,139,16,6,0,68,0,0,255,255,0,16,254,137,5,104, + 7,109,18,38,0,132,0,0,16,7,2,212,4,175,0,0,255,255,0,123,254,137,4,45,6,102,18,38,0,164,0,0,16,7,2,212,4,34,0,0, + 255,255,0,16,0,0,5,104,8,90,18,38,0,36,0,0,16,6,22,252,0,0,0,0,255,255,0,123,255,227,4,45,7,4,16,39,22,252,255,145, + 254,170,16,6,0,68,0,0,255,255,0,16,0,0,5,104,8,90,18,38,0,36,0,0,16,6,22,253,0,0,0,0,255,255,0,123,255,227,4,45, + 7,4,16,39,22,253,255,146,254,170,16,6,0,68,0,0,255,255,0,16,0,0,5,104,8,139,18,38,0,36,0,0,16,6,22,254,0,0,0,0, + 255,255,0,123,255,227,4,45,7,53,16,39,22,254,255,148,254,170,16,6,0,68,0,0,255,255,0,16,0,0,5,104,8,89,18,38,0,36,0,0, + 16,6,22,251,0,0,0,0,255,255,0,123,255,227,4,45,7,3,16,38,0,68,0,0,16,7,22,251,255,146,254,170,255,255,0,16,254,137,5,104, + 7,146,18,38,0,196,0,0,16,7,2,212,4,192,0,0,255,255,0,123,254,137,4,45,6,31,18,38,0,197,0,0,16,7,2,212,4,51,0,0, + 255,255,0,201,254,137,4,139,5,213,16,38,0,40,0,0,16,7,2,212,4,158,0,0,255,255,0,113,254,137,4,127,4,123,16,38,0,72,0,0, + 16,7,2,212,4,139,0,0,255,255,0,201,0,0,4,139,7,240,18,38,0,40,0,0,16,7,2,186,4,158,1,117,255,255,0,113,255,227,4,127, + 6,123,18,38,0,72,0,0,16,7,2,186,4,141,0,0,255,255,0,201,0,0,4,139,7,94,16,39,22,187,4,158,1,117,18,6,0,40,0,0, + 255,255,0,113,255,227,4,127,6,55,16,39,2,158,0,151,0,0,18,6,0,72,0,0,255,255,0,201,0,0,5,24,8,58,18,38,0,40,0,0, + 16,6,22,248,0,0,0,0,255,255,0,113,255,227,4,232,6,197,16,39,22,248,255,208,254,139,16,6,0,72,0,0,255,255,0,201,0,0,4,139, + 8,58,18,38,0,40,0,0,16,6,22,249,238,0,0,0,255,255,0,113,255,227,4,127,6,198,16,39,22,249,255,208,254,140,16,6,0,72,0,0, + 255,255,0,201,0,0,4,245,8,91,18,38,0,40,0,0,16,6,22,255,238,0,0,0,255,255,0,113,255,227,4,215,6,230,16,38,0,72,0,0, + 16,7,22,255,255,208,254,139,255,255,0,201,0,0,4,139,8,117,18,38,0,40,0,0,16,6,22,250,234,0,0,0,255,255,0,113,255,227,4,127, + 7,0,16,39,22,250,255,209,254,139,16,6,0,72,0,0,255,255,0,201,254,137,4,139,7,109,18,38,0,140,0,0,16,7,2,212,4,158,0,0, + 255,255,0,113,254,137,4,127,6,102,16,39,2,212,4,139,0,0,16,38,9,178,0,0,16,7,2,136,0,139,0,0,255,255,0,90,0,0,2,26, + 7,240,18,38,0,44,0,0,16,7,2,186,3,35,1,117,255,255,0,68,0,0,2,4,6,124,18,38,0,243,0,0,16,7,2,186,3,13,0,1, + 255,255,0,201,254,137,1,147,5,213,16,38,0,44,0,0,16,7,2,212,3,46,0,0,255,255,0,191,254,137,1,121,6,20,16,38,0,76,0,0, + 16,7,2,212,3,29,0,0,255,255,0,115,254,137,5,217,5,240,16,38,0,50,0,0,16,7,2,212,5,39,0,0,255,255,0,113,254,137,4,117, + 4,123,16,38,0,82,0,0,16,7,2,212,4,115,0,0,255,255,0,115,255,227,5,217,7,240,18,38,0,50,0,0,16,7,2,186,5,39,1,117, + 255,255,0,113,255,227,4,117,6,123,18,38,0,82,0,0,16,7,2,186,4,125,0,0,255,255,0,115,255,227,5,217,8,58,18,38,0,50,0,0, + 16,6,22,248,108,0,0,0,255,255,0,113,255,227,4,206,6,197,16,39,22,248,255,182,254,139,16,6,0,82,0,0,255,255,0,115,255,227,5,217, + 8,58,18,38,0,50,0,0,16,6,22,249,106,0,0,0,255,255,0,113,255,227,4,117,6,198,16,39,22,249,255,181,254,140,16,6,0,82,0,0, + 255,255,0,115,255,227,5,217,8,91,18,38,0,50,0,0,16,6,22,255,106,0,0,0,255,255,0,113,255,227,4,189,6,230,16,39,22,255,255,182, + 254,139,16,6,0,82,0,0,255,255,0,115,255,227,5,217,8,117,18,38,0,50,0,0,16,6,22,250,101,0,0,0,255,255,0,113,255,227,4,117, + 7,0,16,39,22,250,255,182,254,139,16,6,0,82,0,0,255,255,0,115,254,137,5,217,7,109,18,38,0,150,0,0,16,7,2,212,5,39,0,0, + 255,255,0,113,254,137,4,117,6,102,16,39,2,212,4,115,0,0,16,38,9,198,0,0,16,6,2,136,115,0,0,0,255,255,0,103,255,227,6,29, + 7,107,16,39,22,186,5,39,1,117,18,6,1,98,0,0,255,255,0,118,255,227,4,211,6,102,16,38,0,118,115,0,18,6,1,99,0,0,0,0, + 255,255,0,103,255,227,6,29,7,107,16,39,22,188,5,39,1,117,18,6,1,98,0,0,255,255,0,118,255,227,4,211,6,102,16,38,0,67,115,0, + 18,6,1,99,0,0,0,0,255,255,0,103,255,227,6,29,7,240,18,38,1,98,0,0,16,7,2,186,5,39,1,117,255,255,0,118,255,227,4,211, + 6,123,18,38,1,99,0,0,16,7,2,186,4,125,0,0,255,255,0,103,255,227,6,29,7,94,16,39,22,187,5,39,1,117,18,6,1,98,0,0, + 255,255,0,118,255,227,4,211,6,55,16,38,2,158,115,0,18,6,1,99,0,0,0,0,255,255,0,103,254,137,6,29,6,20,18,38,1,98,0,0, + 16,7,2,212,5,39,0,0,255,255,0,118,254,137,4,211,4,235,18,38,1,99,0,0,16,7,2,212,4,115,0,0,255,255,0,178,254,137,5,41, + 5,213,16,38,0,56,0,0,16,7,2,212,4,245,0,0,255,255,0,174,254,137,4,88,4,123,16,38,0,88,0,0,16,7,2,212,4,123,0,0, + 255,255,0,178,255,227,5,41,7,240,18,38,0,56,0,0,16,7,2,186,4,238,1,117,255,255,0,174,255,227,4,88,6,123,18,38,0,88,0,0, + 16,7,2,186,4,125,0,0,255,255,0,173,255,247,6,95,7,107,16,39,22,186,4,238,1,117,18,6,1,113,0,0,255,255,0,176,255,227,5,105, + 6,102,16,38,0,118,123,0,18,6,1,114,0,0,0,0,255,255,0,173,255,247,6,95,7,107,16,39,22,188,4,238,1,117,18,6,1,113,0,0, + 255,255,0,176,255,227,5,105,6,102,16,38,0,67,123,0,18,6,1,114,0,0,0,0,255,255,0,173,255,247,6,95,7,240,18,38,1,113,0,0, + 16,7,2,186,4,238,1,117,255,255,0,176,255,227,5,105,6,123,18,38,1,114,0,0,16,7,2,186,4,125,0,0,255,255,0,173,255,247,6,95, + 7,94,16,39,22,187,4,238,1,117,18,6,1,113,0,0,255,255,0,176,255,227,5,105,6,55,16,39,2,158,0,128,0,0,18,6,1,114,0,0, + 255,255,0,173,254,137,6,95,6,20,18,38,1,113,0,0,16,7,2,212,4,245,0,0,255,255,0,176,254,137,5,105,4,235,18,38,1,114,0,0, + 16,7,2,212,4,123,0,0,255,255,255,252,0,0,4,231,7,114,18,38,0,60,0,0,16,7,22,188,4,114,1,124,255,255,0,61,254,86,4,127, + 6,107,18,38,0,92,0,0,16,6,0,67,33,5,0,0,255,255,255,252,254,137,4,231,5,213,16,39,2,212,4,118,0,0,18,6,0,60,0,0, + 255,255,0,61,254,86,4,127,4,96,16,39,2,212,5,116,0,0,18,6,0,92,0,0,255,255,255,252,0,0,4,231,7,247,18,38,0,60,0,0, + 16,7,2,186,4,114,1,124,255,255,0,61,254,86,4,127,6,130,18,38,0,92,0,0,16,7,2,186,4,96,0,7,255,255,255,252,0,0,4,231, + 7,94,16,39,22,187,4,114,1,117,18,6,0,60,0,0,255,255,0,61,254,86,4,127,6,55,16,38,2,158,119,0,18,6,0,92,0,0,0,0, + 0,1,0,201,0,0,6,28,5,213,0,9,0,0,19,51,17,51,17,51,17,33,21,33,201,202,232,202,2,215,250,173,5,213,250,213,5,43,250,213, + 170,0,0,0,0,1,0,32,0,0,3,178,6,20,0,19,0,0,19,51,21,51,53,51,21,51,21,35,17,35,17,35,17,35,17,35,53,51,193,184, + 224,184,161,161,184,224,184,161,161,6,20,147,147,147,125,250,252,5,4,250,252,5,4,125,255,255,0,113,255,231,4,228,6,97,16,38,3,69,0,0, + 16,6,10,165,112,0,0,0,255,255,0,113,255,231,4,228,6,97,16,38,3,69,0,0,16,6,10,221,72,0,0,0,255,255,0,113,255,231,4,228, + 6,102,16,38,3,69,0,0,16,7,10,178,0,148,0,0,255,255,0,113,255,231,4,228,6,102,16,38,3,69,0,0,16,7,10,191,0,132,0,0, + 255,255,0,113,255,231,4,228,6,102,16,38,3,69,0,0,16,7,10,179,0,132,0,0,255,255,0,113,255,231,4,228,6,102,16,38,3,69,0,0, + 16,7,10,192,0,160,0,0,255,255,0,113,255,231,4,228,7,109,16,38,3,69,0,0,16,6,10,180,118,0,0,0,255,255,0,113,255,231,4,228, + 7,109,16,38,3,69,0,0,16,6,10,193,68,0,0,0,255,255,0,16,0,0,5,104,6,97,16,38,3,38,0,0,16,7,10,165,255,35,0,0, + 255,255,0,16,0,0,5,104,6,97,16,38,3,38,0,0,16,7,10,221,254,243,0,0,255,255,0,5,0,0,6,244,6,102,16,39,3,38,1,140, + 0,0,16,7,10,178,255,124,0,0,0,0,255,255,0,6,0,0,6,244,6,102,16,39,3,38,1,140,0,0,16,6,10,191,136,0,255,255,0,7, + 0,0,6,22,6,102,16,39,3,38,0,174,0,0,16,7,10,179,255,83,0,0,0,0,255,255,0,4,0,0,6,88,6,102,16,39,3,38,0,240, + 0,0,16,7,10,192,255,111,0,0,0,0,255,255,0,7,0,0,5,153,7,109,16,38,3,38,49,0,16,7,10,180,255,81,0,0,255,255,0,4, + 0,0,5,224,7,109,16,38,3,38,120,0,16,7,10,193,255,78,0,0,255,255,0,133,255,227,3,200,6,97,16,38,3,73,0,0,16,6,10,165, + 68,0,0,0,255,255,0,133,255,227,3,200,6,97,16,38,3,73,0,0,16,6,10,221,57,0,0,0,255,255,0,133,255,227,3,200,6,102,16,38, + 3,73,0,0,16,6,10,178,32,0,0,0,255,255,0,133,255,227,3,200,6,102,16,38,3,73,0,0,16,6,10,191,37,0,0,0,255,255,0,133, + 255,227,3,227,6,102,16,38,3,73,0,0,16,6,10,179,79,0,0,0,255,255,0,133,255,227,4,3,6,102,16,38,3,73,0,0,16,6,10,192, + 82,0,0,0,255,255,0,7,0,0,5,45,6,97,16,39,3,42,0,162,0,0,16,7,10,165,254,129,0,0,0,0,255,255,0,7,0,0,5,45, + 6,97,16,39,3,42,0,162,0,0,16,7,10,221,254,129,0,0,0,0,255,255,0,5,0,0,7,55,6,102,16,39,3,42,2,172,0,0,16,7, + 10,178,255,124,0,0,0,0,255,255,0,6,0,0,7,73,6,102,16,39,3,42,2,190,0,0,16,6,10,191,136,0,255,255,0,7,0,0,6,173, + 6,102,16,39,3,42,2,34,0,0,16,7,10,179,255,83,0,0,0,0,255,255,0,4,0,0,6,233,6,102,16,39,3,42,2,94,0,0,16,7, + 10,192,255,111,0,0,0,0,255,255,0,186,254,86,4,100,6,97,16,38,3,75,0,0,16,7,10,165,0,166,0,0,255,255,0,186,254,86,4,100, + 6,97,16,38,3,75,0,0,16,7,10,221,0,162,0,0,255,255,0,186,254,86,4,100,6,102,16,38,3,75,0,0,16,7,10,178,0,128,0,0, + 255,255,0,186,254,86,4,100,6,102,16,38,3,75,0,0,16,6,10,191,112,0,0,0,255,255,0,186,254,86,4,100,6,102,16,38,3,75,0,0, + 16,7,10,179,0,132,0,0,255,255,0,186,254,86,4,100,6,102,16,38,3,75,0,0,16,7,10,192,0,174,0,0,255,255,0,186,254,86,4,100, + 7,109,16,38,3,75,0,0,16,7,10,180,0,156,0,0,255,255,0,186,254,86,4,100,7,109,16,38,3,75,0,0,16,7,10,193,0,135,0,0, + 255,255,0,7,0,0,5,233,6,97,16,39,3,44,0,174,0,0,16,7,10,165,254,129,0,0,0,0,255,255,0,7,0,0,5,230,6,97,16,39, + 3,44,0,171,0,0,16,7,10,221,254,129,0,0,0,0,255,255,0,5,0,0,7,231,6,102,16,39,3,44,2,172,0,0,16,7,10,178,255,124, + 0,0,0,0,255,255,0,6,0,0,7,237,6,102,16,39,3,44,2,178,0,0,16,6,10,191,136,0,255,255,0,7,0,0,7,110,6,102,16,39, + 3,44,2,51,0,0,16,7,10,179,255,83,0,0,0,0,255,255,0,4,0,0,7,159,6,102,16,39,3,44,2,100,0,0,16,7,10,192,255,111, + 0,0,0,0,255,255,0,7,0,0,6,175,7,109,16,39,3,44,1,116,0,0,16,7,10,180,255,81,0,0,0,0,255,255,0,4,0,0,6,202, + 7,109,16,39,3,44,1,143,0,0,16,7,10,193,255,78,0,0,0,0,255,255,0,155,0,0,2,110,6,97,16,38,3,77,0,0,16,7,10,165, + 255,21,0,0,255,255,0,145,0,0,2,110,6,97,16,38,3,77,0,0,16,7,10,221,255,11,0,0,255,255,255,176,0,0,2,185,6,102,16,38, + 3,77,0,0,16,7,10,178,255,39,0,0,255,255,255,186,0,0,2,199,6,102,16,38,3,77,0,0,16,7,10,191,255,60,0,0,255,255,0,5, + 0,0,2,229,6,102,16,38,3,77,0,0,16,7,10,179,255,81,0,0,255,255,255,210,0,0,2,238,6,102,16,38,3,77,0,0,16,7,10,192, + 255,61,0,0,255,255,255,203,0,0,2,110,7,109,16,38,3,77,0,0,16,7,10,180,255,21,0,0,255,255,255,198,0,0,2,110,7,109,16,38, + 3,77,0,0,16,7,10,193,255,16,0,0,255,255,0,7,0,0,2,65,6,97,16,39,3,46,0,174,0,0,16,7,10,165,254,129,0,0,0,0, + 255,255,0,7,0,0,2,53,6,97,16,39,3,46,0,162,0,0,16,7,10,221,254,129,0,0,0,0,255,255,0,5,0,0,4,75,6,102,16,39, + 3,46,2,184,0,0,16,7,10,178,255,124,0,0,0,0,255,255,0,6,0,0,4,75,6,102,16,39,3,46,2,184,0,0,16,6,10,191,136,0, + 255,255,0,7,0,0,3,199,6,102,16,39,3,46,2,52,0,0,16,7,10,179,255,83,0,0,0,0,255,255,0,4,0,0,4,3,6,102,16,39, + 3,46,2,112,0,0,16,7,10,192,255,111,0,0,0,0,255,255,0,7,0,0,3,34,7,109,16,39,3,46,1,143,0,0,16,7,10,180,255,81, + 0,0,0,0,255,255,0,4,0,0,3,41,7,109,16,39,3,46,1,150,0,0,16,7,10,193,255,78,0,0,0,0,255,255,0,113,255,227,4,117, + 6,97,16,38,3,83,0,0,16,6,10,165,120,0,0,0,255,255,0,113,255,227,4,117,6,97,16,38,3,83,0,0,16,6,10,221,110,0,0,0, + 255,255,0,113,255,227,4,117,6,102,16,38,3,83,0,0,16,6,10,178,101,0,0,0,255,255,0,113,255,227,4,117,6,102,16,38,3,83,0,0, + 16,6,10,191,84,0,0,0,255,255,0,113,255,227,4,117,6,102,16,38,3,83,0,0,16,7,10,179,0,136,0,0,255,255,0,113,255,227,4,117, + 6,102,16,38,3,83,0,0,16,7,10,192,0,145,0,0,255,255,0,7,255,227,5,252,6,97,16,38,3,52,35,0,16,7,10,165,254,129,0,0, + 255,255,0,7,255,227,6,86,6,97,16,38,3,52,125,0,16,7,10,221,254,129,0,0,255,255,0,5,255,227,8,79,6,102,16,39,3,52,2,118, + 0,0,16,7,10,178,255,124,0,0,0,0,255,255,0,6,255,227,8,89,6,102,16,39,3,52,2,128,0,0,16,6,10,191,136,0,255,255,0,7, + 255,227,7,15,6,102,16,39,3,52,1,54,0,0,16,7,10,179,255,83,0,0,0,0,255,255,0,4,255,227,7,80,6,102,16,39,3,52,1,119, + 0,0,16,7,10,192,255,111,0,0,0,0,255,255,0,149,255,227,4,42,6,97,16,38,3,89,0,0,16,6,10,165,61,0,0,0,255,255,0,149, + 255,227,4,42,6,97,16,38,3,89,0,0,16,6,10,221,27,0,0,0,255,255,0,149,255,227,4,42,6,102,16,38,3,89,0,0,16,6,10,178, + 39,0,0,0,255,255,0,149,255,227,4,42,6,102,16,38,3,89,0,0,16,6,10,191,33,0,0,0,255,255,0,149,255,227,4,42,6,102,16,38, + 3,89,0,0,16,6,10,179,96,0,0,0,255,255,0,149,255,227,4,42,6,102,16,38,3,89,0,0,16,6,10,192,87,0,0,0,255,255,0,149, + 255,227,4,42,7,109,16,38,3,89,0,0,16,6,10,180,56,0,0,0,255,255,0,149,255,227,4,42,7,109,16,38,3,89,0,0,16,6,10,193, + 24,0,0,0,255,255,0,7,0,0,6,73,6,97,16,39,3,57,1,98,0,0,16,7,10,221,254,129,0,0,0,0,255,255,0,6,0,0,7,255, + 6,102,16,39,3,57,3,24,0,0,16,6,10,191,136,0,255,255,0,4,0,0,8,29,6,102,16,39,3,57,3,54,0,0,16,7,10,192,255,111, + 0,0,0,0,255,255,0,4,0,0,7,51,7,109,16,39,3,57,2,76,0,0,16,7,10,193,255,78,0,0,0,0,255,255,0,135,255,227,6,39, + 6,97,16,38,3,93,0,0,16,7,10,165,1,94,0,0,255,255,0,135,255,227,6,39,6,97,16,38,3,93,0,0,16,7,10,221,1,84,0,0, + 255,255,0,135,255,227,6,39,6,102,16,38,3,93,0,0,16,7,10,178,1,89,0,0,255,255,0,135,255,227,6,39,6,102,16,38,3,93,0,0, + 16,7,10,191,1,94,0,0,255,255,0,135,255,227,6,39,6,102,16,38,3,93,0,0,16,7,10,179,1,164,0,0,255,255,0,135,255,227,6,39, + 6,102,16,38,3,93,0,0,16,7,10,192,1,139,0,0,255,255,0,135,255,227,6,39,7,109,16,38,3,93,0,0,16,7,10,180,1,99,0,0, + 255,255,0,135,255,227,6,39,7,109,16,38,3,93,0,0,16,7,10,193,1,94,0,0,255,255,0,7,0,0,6,29,6,97,16,38,3,61,78,0, + 16,7,10,165,254,129,0,0,255,255,0,7,0,0,6,113,6,97,16,39,3,61,0,162,0,0,16,7,10,221,254,129,0,0,0,0,255,255,0,5, + 0,0,8,105,6,102,16,39,3,61,2,154,0,0,16,7,10,178,255,124,0,0,0,0,255,255,0,6,0,0,8,117,6,102,16,39,3,61,2,166, + 0,0,16,6,10,191,136,0,255,255,0,7,0,0,7,67,6,102,16,39,3,61,1,116,0,0,16,7,10,179,255,83,0,0,0,0,255,255,0,4, + 0,0,7,121,6,102,16,39,3,61,1,170,0,0,16,7,10,192,255,111,0,0,0,0,255,255,0,7,0,0,7,17,7,109,16,39,3,61,1,66, + 0,0,16,7,10,180,255,81,0,0,0,0,255,255,0,4,0,0,7,80,7,109,16,39,3,61,1,129,0,0,16,7,10,193,255,78,0,0,0,0, + 255,255,0,113,255,231,4,228,6,102,16,38,3,69,0,0,16,6,10,209,116,0,0,0,255,255,0,113,255,231,4,228,6,102,16,6,3,64,0,0, + 255,255,0,133,255,227,3,200,6,102,16,38,3,73,0,0,16,6,10,209,84,0,0,0,255,255,0,133,255,227,3,200,6,102,16,6,3,65,0,0, + 255,255,0,186,254,86,4,100,6,102,16,38,3,75,0,0,16,7,10,209,0,198,0,0,255,255,0,186,254,86,4,100,6,102,16,6,3,66,0,0, + 255,255,255,141,0,0,2,110,6,102,16,38,3,77,0,0,16,7,10,209,254,227,0,0,255,255,0,166,0,0,2,152,6,102,16,6,3,67,0,0, + 255,255,0,113,255,227,4,117,6,102,16,38,3,83,0,0,16,6,10,209,123,0,0,0,255,255,0,113,255,227,4,117,6,102,16,6,3,96,0,0, + 255,255,0,149,255,227,4,42,6,102,16,38,3,89,0,0,16,6,10,209,48,0,0,0,255,255,0,149,255,227,4,42,6,102,16,6,3,97,0,0, + 255,255,0,135,255,227,6,39,6,102,16,38,3,93,0,0,16,7,10,209,1,77,0,0,255,255,0,135,255,227,6,39,6,102,16,6,3,98,0,0, + 255,255,0,113,254,86,4,228,6,97,16,38,9,245,0,0,16,6,3,22,72,0,0,0,255,255,0,113,254,86,4,228,6,97,16,38,9,246,0,0, + 16,6,3,22,72,0,0,0,255,255,0,113,254,86,4,228,6,102,16,38,9,247,0,0,16,6,3,22,72,0,0,0,255,255,0,113,254,86,4,228, + 6,102,16,38,9,248,0,0,16,6,3,22,72,0,0,0,255,255,0,113,254,86,4,228,6,102,16,38,9,249,0,0,16,6,3,22,72,0,0,0, + 255,255,0,113,254,86,4,228,6,102,16,38,9,250,0,0,16,6,3,22,72,0,0,0,255,255,0,113,254,86,4,228,7,109,16,38,9,251,0,0, + 16,6,3,22,72,0,0,0,255,255,0,113,254,86,4,228,7,109,16,38,9,252,0,0,16,6,3,22,72,0,0,0,255,255,0,16,254,86,5,104, + 6,97,16,38,9,253,0,0,16,7,10,164,0,186,0,0,255,255,0,16,254,86,5,104,6,97,16,38,9,254,0,0,16,7,10,164,0,186,0,0, + 255,255,0,5,254,86,6,244,6,102,16,38,9,255,0,0,16,7,10,164,2,70,0,0,255,255,0,6,254,86,6,244,6,102,16,38,10,0,0,0, + 16,7,10,164,2,70,0,0,255,255,0,7,254,86,6,22,6,102,16,38,10,1,0,0,16,7,10,164,1,104,0,0,255,255,0,4,254,86,6,88, + 6,102,16,38,10,2,0,0,16,7,10,164,1,170,0,0,255,255,0,7,254,86,5,153,7,109,16,38,10,3,0,0,16,7,10,164,0,235,0,0, + 255,255,0,4,254,86,5,224,7,109,16,38,10,4,0,0,16,7,10,164,1,50,0,0,255,255,0,186,254,86,4,100,6,97,16,38,10,17,0,0, + 16,7,3,22,255,56,0,0,255,255,0,186,254,86,4,100,6,97,16,38,10,18,0,0,16,7,3,22,255,56,0,0,255,255,0,186,254,86,4,100, + 6,102,16,38,10,19,0,0,16,7,3,22,255,56,0,0,255,255,0,186,254,86,4,100,6,102,16,38,10,20,0,0,16,7,3,22,255,56,0,0, + 255,255,0,186,254,86,4,100,6,102,16,38,10,21,0,0,16,7,3,22,255,56,0,0,255,255,0,186,254,86,4,100,6,102,16,38,10,22,0,0, + 16,7,3,22,255,56,0,0,255,255,0,186,254,86,4,100,7,109,16,38,10,23,0,0,16,7,3,22,255,56,0,0,255,255,0,186,254,86,4,100, + 7,109,16,38,10,24,0,0,16,7,3,22,255,56,0,0,255,255,0,7,254,86,5,233,6,97,16,38,10,25,0,0,16,7,10,164,1,158,0,0, + 255,255,0,7,254,86,5,230,6,97,16,38,10,26,0,0,16,7,10,164,1,155,0,0,255,255,0,5,254,86,7,231,6,102,16,38,10,27,0,0, + 16,7,10,164,3,156,0,0,255,255,0,6,254,86,7,237,6,102,16,38,10,28,0,0,16,7,10,164,3,162,0,0,255,255,0,7,254,86,7,110, + 6,102,16,38,10,29,0,0,16,7,10,164,3,35,0,0,255,255,0,4,254,86,7,159,6,102,16,38,10,30,0,0,16,7,10,164,3,84,0,0, + 255,255,0,7,254,86,6,175,7,109,16,38,10,31,0,0,16,7,10,164,2,100,0,0,255,255,0,4,254,86,6,202,7,109,16,38,10,32,0,0, + 16,7,10,164,2,127,0,0,255,255,0,135,254,86,6,39,6,97,16,38,10,73,0,0,16,7,3,22,1,89,0,0,255,255,0,135,254,86,6,39, + 6,97,16,38,10,74,0,0,16,7,3,22,1,89,0,0,255,255,0,135,254,86,6,39,6,102,16,38,10,75,0,0,16,7,3,22,1,89,0,0, + 255,255,0,135,254,86,6,39,6,102,16,38,10,76,0,0,16,7,3,22,1,89,0,0,255,255,0,135,254,86,6,39,6,102,16,38,10,77,0,0, + 16,7,3,22,1,89,0,0,255,255,0,135,254,86,6,39,6,102,16,38,10,78,0,0,16,7,3,22,1,89,0,0,255,255,0,135,254,86,6,39, + 7,109,16,38,10,79,0,0,16,7,3,22,1,89,0,0,255,255,0,135,254,86,6,39,7,109,16,38,10,80,0,0,16,7,3,22,1,89,0,0, + 255,255,0,7,254,86,6,29,6,97,16,38,10,81,0,0,16,7,10,164,1,92,0,0,255,255,0,7,254,86,6,113,6,97,16,38,10,82,0,0, + 16,7,10,164,1,176,0,0,255,255,0,5,254,86,8,105,6,102,16,38,10,83,0,0,16,7,10,164,3,168,0,0,255,255,0,6,254,86,8,117, + 6,102,16,38,10,84,0,0,16,7,10,164,3,180,0,0,255,255,0,7,254,86,7,67,6,102,16,38,10,85,0,0,16,7,10,164,2,130,0,0, + 255,255,0,4,254,86,7,121,6,102,16,38,10,86,0,0,16,7,10,164,2,184,0,0,255,255,0,7,254,86,7,17,7,109,16,38,10,87,0,0, + 16,7,10,164,2,80,0,0,255,255,0,4,254,86,7,80,7,109,16,38,10,88,0,0,16,7,10,164,2,143,0,0,255,255,0,113,255,231,4,228, + 6,72,16,38,3,69,0,0,16,6,2,154,122,0,0,0,255,255,0,113,255,231,4,228,5,246,16,38,3,69,0,0,16,6,0,113,121,0,0,0, + 255,255,0,113,254,86,4,228,6,102,16,38,10,89,0,0,16,6,3,22,72,0,0,0,255,255,0,113,254,86,4,228,4,121,16,38,3,69,0,0, + 16,6,3,22,72,0,0,0,255,255,0,113,254,86,4,228,6,102,16,38,3,64,0,0,16,6,3,22,72,0,0,0,255,255,0,113,255,231,4,228, + 6,55,16,38,3,69,0,0,16,6,10,166,110,0,0,0,255,255,0,113,254,86,4,228,6,55,16,38,10,156,0,0,16,6,3,22,72,0,0,0, + 255,255,0,16,0,0,5,104,7,109,16,38,3,38,0,0,16,7,22,192,4,186,1,117,255,255,0,16,0,0,5,104,7,49,16,38,3,38,0,0, + 16,7,0,113,0,188,1,59,255,255,255,252,0,0,5,170,6,102,16,38,3,38,66,0,16,7,10,209,255,82,0,0,255,255,0,16,0,0,5,104, + 6,102,16,6,3,29,0,0,255,255,0,16,254,86,5,104,5,213,16,38,3,38,0,0,16,7,10,164,0,186,0,0,255,255,1,134,4,194,2,120, + 6,97,16,6,10,165,0,0,255,255,1,182,254,86,2,146,255,164,16,6,3,22,0,0,0,1,1,134,4,194,2,120,6,97,0,8,0,72,180,5, + 8,7,2,9,16,212,60,220,178,63,8,1,93,192,49,182,0,6,7,6,3,2,9,0,16,212,180,63,2,95,2,2,93,176,17,75,80,88,204,27, + 192,89,204,204,178,63,7,1,93,17,57,48,177,6,3,73,177,7,6,73,80,88,179,5,64,6,64,56,56,89,1,16,35,53,22,53,35,53,51,2, + 120,242,134,133,241,5,205,254,245,103,3,157,158,0,0,0,255,255,0,182,5,29,3,74,6,55,16,6,2,158,0,0,255,255,0,182,5,70,3,74, + 7,109,16,39,22,187,4,0,1,132,18,6,0,106,0,0,255,255,0,186,254,86,4,100,6,102,16,38,10,93,0,0,16,7,3,22,255,56,0,0, + 255,255,0,186,254,86,4,100,4,123,16,38,3,75,0,0,16,7,3,22,255,56,0,0,255,255,0,186,254,86,4,100,6,102,16,38,3,66,0,0, + 16,7,3,22,255,56,0,0,255,255,0,186,254,86,4,100,6,55,16,38,3,75,0,0,16,7,10,166,0,144,0,0,255,255,0,186,254,86,4,100, + 6,55,16,38,10,171,0,0,16,7,3,22,255,56,0,0,255,255,255,252,0,0,5,237,6,102,16,39,3,42,1,98,0,0,16,7,10,209,255,82, + 0,0,0,0,255,255,255,231,0,0,5,117,6,102,16,6,3,31,0,0,255,255,255,252,0,0,6,169,6,102,16,39,3,44,1,110,0,0,16,7, + 10,209,255,82,0,0,0,0,255,255,255,243,0,0,6,31,6,102,16,6,3,32,0,0,255,255,0,201,254,86,5,59,5,213,16,38,3,44,0,0, + 16,7,10,164,0,255,0,0,255,255,0,137,4,194,3,146,6,102,16,39,10,165,255,3,0,0,16,7,10,209,1,9,0,0,0,0,255,255,0,180, + 4,194,3,148,6,102,16,39,10,165,255,46,0,0,16,6,10,220,66,0,255,255,0,182,4,194,3,74,7,109,16,39,22,187,4,0,1,132,16,6, + 10,165,0,0,255,255,255,235,0,0,2,110,6,72,16,38,3,77,0,0,16,7,2,154,255,36,0,0,255,255,255,227,0,0,2,110,5,246,16,38, + 3,77,0,0,16,7,0,113,255,14,0,0,255,255,255,216,0,0,2,110,7,210,16,38,3,77,0,0,16,7,10,207,255,46,0,0,255,255,0,5, + 0,0,2,128,7,210,16,6,3,37,0,0,255,255,255,228,0,0,2,120,6,55,16,38,3,77,0,0,16,7,10,166,255,46,0,0,255,255,255,230, + 0,0,2,122,7,109,16,38,3,77,0,0,16,7,10,167,255,48,0,0,255,255,255,245,0,0,2,103,7,109,16,38,3,46,0,0,16,7,22,192, + 3,46,1,117,255,255,0,3,0,0,2,89,7,49,16,38,3,46,0,0,16,7,0,113,255,46,1,59,255,255,255,252,0,0,3,4,6,102,16,39, + 3,46,1,113,0,0,16,7,10,209,255,82,0,0,0,0,255,255,255,237,0,0,2,125,6,102,16,6,3,33,0,0,255,255,0,126,4,194,3,139, + 6,102,16,39,10,221,254,248,0,0,16,7,10,209,1,2,0,0,0,0,255,255,0,149,4,194,3,177,6,102,16,39,10,221,255,15,0,0,16,6, + 10,220,95,0,255,255,0,182,4,194,3,74,7,109,16,39,22,187,4,0,1,132,16,6,10,221,0,0,255,255,0,149,255,227,4,42,6,72,16,38, + 3,89,0,0,16,6,2,154,39,0,0,0,255,255,0,149,255,227,4,42,5,246,16,38,3,89,0,0,16,6,0,113,36,0,0,0,255,255,0,149, + 255,227,4,42,7,210,16,38,3,89,0,0,16,6,10,207,27,0,0,0,255,255,0,149,255,227,4,42,7,210,16,6,3,68,0,0,255,255,0,186, + 254,86,4,164,6,97,16,38,3,85,0,0,16,7,10,165,0,187,0,0,255,255,0,186,254,86,4,164,6,97,16,38,3,85,0,0,16,7,10,221, + 0,177,0,0,255,255,0,149,255,227,4,42,6,55,16,38,3,89,0,0,16,6,10,166,39,0,0,0,255,255,0,149,255,227,4,42,7,109,16,38, + 3,89,0,0,16,6,10,167,26,0,0,0,255,255,255,252,0,0,4,231,7,109,16,38,3,57,0,0,16,7,22,192,4,118,1,117,255,255,255,252, + 0,0,4,231,7,49,16,38,3,57,0,0,16,7,0,113,0,128,1,59,255,255,255,252,0,0,6,199,6,102,16,39,3,57,1,224,0,0,16,7, + 10,209,255,82,0,0,0,0,255,255,255,225,0,0,6,145,6,102,16,6,3,35,0,0,255,255,0,7,0,0,5,53,6,97,16,39,3,54,0,168, + 0,0,16,7,10,221,254,129,0,0,0,0,255,255,0,170,5,70,3,41,7,210,18,38,0,106,0,0,16,7,10,209,0,0,1,108,255,255,0,215, + 5,70,3,82,7,210,16,6,3,28,0,0,255,255,0,170,4,240,2,137,6,102,16,6,0,67,0,0,255,255,0,135,254,86,6,39,6,102,16,38, + 10,101,0,0,16,7,3,22,1,89,0,0,255,255,0,135,254,86,6,39,4,96,16,38,3,93,0,0,16,7,3,22,1,89,0,0,255,255,0,135, + 254,86,6,39,6,102,16,38,3,98,0,0,16,7,3,22,1,89,0,0,255,255,0,135,255,227,6,39,6,55,16,38,3,93,0,0,16,7,10,166, + 1,79,0,0,255,255,0,135,254,86,6,39,6,55,16,38,10,213,0,0,16,7,3,22,1,89,0,0,255,255,255,252,255,227,7,20,6,102,16,39, + 3,52,1,59,0,0,16,7,10,209,255,82,0,0,0,0,255,255,255,242,255,227,6,1,6,102,16,6,3,34,0,0,255,255,255,252,0,0,7,19, + 6,102,16,39,3,61,1,68,0,0,16,7,10,209,255,82,0,0,0,0,255,255,255,219,0,0,6,5,6,102,16,6,3,36,0,0,255,255,0,78, + 254,86,5,207,5,231,16,38,3,61,0,0,16,7,10,164,1,14,0,0,255,255,1,115,4,238,3,82,6,102,16,6,0,118,0,0,0,1,1,134, + 4,194,2,120,6,97,0,8,0,72,180,2,7,4,0,9,16,212,192,220,178,63,7,1,93,60,49,182,0,3,2,3,6,7,9,0,16,212,180,63, + 7,95,7,2,93,176,17,75,80,88,204,27,192,89,204,204,178,63,2,1,93,17,57,48,177,3,6,73,177,2,3,73,80,88,179,3,64,4,64,56, + 56,89,1,53,51,21,35,20,55,21,34,1,134,242,134,134,242,5,205,148,158,157,3,103,0,1,0,100,1,223,2,127,2,131,0,3,0,17,182,0, + 156,2,4,1,0,4,16,220,204,49,0,16,212,236,48,19,33,21,33,100,2,27,253,229,2,131,164,0,255,255,0,100,1,223,2,127,2,131,18,6, + 10,238,0,0,0,1,0,100,1,233,4,179,2,121,0,3,0,16,182,2,169,0,233,4,1,0,47,198,49,0,16,252,236,48,19,33,21,33,100,4, + 79,251,177,2,121,144,0,0,0,1,0,100,1,233,3,156,2,121,0,3,0,16,182,2,169,0,233,4,1,0,47,198,49,0,16,252,236,48,19,33, + 21,33,100,3,56,252,200,2,121,144,0,0,0,1,0,100,1,233,7,156,2,121,0,3,0,15,181,2,169,0,4,1,0,47,204,49,0,16,212,236, + 48,19,33,21,33,100,7,56,248,200,2,121,144,0,0,0,0,1,0,0,1,233,8,0,2,121,0,3,0,15,181,2,169,0,4,1,0,47,204,49, + 0,16,212,236,48,17,33,21,33,8,0,248,0,2,121,144,255,255,1,4,254,29,2,248,6,29,16,38,0,95,0,0,16,7,0,95,1,74,0,0, + 255,255,255,236,254,29,4,20,255,238,16,38,0,66,0,0,16,7,0,66,0,0,1,66,0,1,0,174,3,233,1,211,5,213,0,5,0,24,64,11, + 0,158,3,129,6,3,4,0,25,1,6,16,220,252,212,204,49,0,16,244,236,48,1,35,53,19,51,3,1,129,211,164,129,82,3,233,173,1,63,254, + 193,0,0,0,0,1,0,178,3,254,1,215,5,213,0,5,0,24,64,11,3,158,0,129,6,3,4,1,25,0,6,16,220,236,212,204,49,0,16,244, + 236,48,1,51,21,3,35,19,1,4,211,164,129,82,5,213,152,254,193,1,63,0,0,0,0,1,0,174,255,18,1,211,0,254,0,5,0,24,64,11, + 3,158,0,131,6,3,4,1,25,0,6,16,212,236,212,204,49,0,16,252,236,48,37,51,21,3,35,19,1,0,211,164,129,82,254,172,254,192,1,64, + 0,1,0,178,3,254,1,215,5,213,0,5,0,0,1,21,19,35,3,53,1,133,82,129,164,5,213,152,254,193,1,63,152,0,0,0,0,2,0,174, + 3,233,3,109,5,213,0,5,0,11,0,39,64,19,6,0,158,9,3,129,12,9,10,6,25,7,3,4,7,0,25,1,12,16,220,252,204,212,204,16, + 254,212,206,49,0,16,244,60,236,50,48,1,35,53,19,51,3,5,35,53,19,51,3,1,129,211,164,129,82,1,154,211,164,129,82,3,233,173,1,63, + 254,193,173,173,1,63,254,193,0,2,0,174,3,233,3,109,5,213,0,5,0,11,0,39,64,19,9,3,158,6,0,129,12,9,10,7,25,6,1,3, + 4,1,25,0,12,16,220,236,212,204,16,220,238,212,206,49,0,16,244,60,236,50,48,1,51,21,3,35,19,37,51,21,3,35,19,1,0,211,164,129, + 82,1,154,211,164,129,82,5,213,172,254,192,1,64,172,172,254,192,1,64,0,2,0,174,255,18,3,109,0,254,0,5,0,11,0,39,64,19,9,3, + 158,6,0,131,12,3,4,1,25,0,7,9,10,7,25,6,12,16,220,236,212,204,16,220,238,212,206,49,0,16,252,60,236,50,48,37,51,21,3,35, + 19,37,51,21,3,35,19,2,154,211,164,129,82,254,102,211,164,129,82,254,172,254,192,1,64,172,172,254,192,1,64,0,0,2,0,174,3,233,3,109, + 5,213,0,5,0,11,0,0,1,21,19,35,3,53,33,21,19,35,3,53,1,129,82,129,164,2,109,82,129,164,5,213,173,254,193,1,63,173,173,254, + 193,1,63,173,0,1,0,57,255,59,3,199,5,213,0,11,0,39,64,20,8,4,185,10,2,0,129,6,194,12,3,89,5,1,87,9,89,7,0,12, + 16,212,60,236,252,60,236,49,0,16,228,244,212,60,236,50,48,1,51,17,33,21,33,17,35,17,33,53,33,1,168,176,1,111,254,145,176,254,145,1, + 111,5,213,254,92,153,251,163,4,93,153,0,0,1,0,57,255,59,3,199,5,213,0,19,0,62,64,32,18,6,185,0,16,8,185,10,4,0,2,14, + 10,12,129,2,194,20,15,0,89,17,13,1,87,9,5,89,11,7,3,20,16,212,60,60,236,50,252,60,60,236,50,49,0,16,228,244,196,50,16,196, + 50,16,238,50,16,238,50,48,37,33,17,35,17,33,53,33,17,33,53,33,17,51,17,33,21,33,17,33,3,199,254,145,176,254,145,1,111,254,145,1, + 111,176,1,111,254,145,1,111,223,254,92,1,164,154,2,31,153,1,164,254,92,153,253,225,0,1,1,51,1,209,3,133,4,33,0,11,0,18,183,9, + 199,3,12,6,92,0,12,16,212,236,49,0,16,212,236,48,1,52,54,51,50,22,21,20,6,35,34,38,1,51,173,126,124,171,172,125,125,172,2,250, + 124,171,171,124,125,172,172,0,0,1,1,51,1,129,3,213,4,113,0,2,0,0,1,17,1,1,51,2,162,1,129,2,240,254,136,0,0,1,0,236, + 0,0,1,193,0,254,0,3,0,17,179,1,25,0,4,16,212,236,49,0,178,0,131,2,47,236,48,55,51,21,35,236,213,213,254,254,0,2,0,236, + 0,0,4,107,0,254,0,3,0,7,0,26,182,0,25,1,5,25,4,8,16,212,252,212,236,49,0,180,4,0,131,6,2,47,60,236,50,48,37,51, + 21,35,37,51,21,35,3,150,213,213,253,86,213,213,254,254,254,254,0,0,0,3,0,236,0,0,7,20,0,254,0,3,0,7,0,11,0,35,64,17, + 8,4,0,131,10,6,2,4,25,5,0,25,1,9,25,8,12,16,212,252,212,236,212,236,49,0,47,60,60,236,50,50,48,37,51,21,35,37,51,21, + 35,37,51,21,35,3,150,212,212,2,169,213,213,250,173,213,213,254,254,254,254,254,254,0,0,1,0,220,2,107,1,175,3,105,0,3,0,0,19,51, + 21,35,220,211,211,3,105,254,0,7,0,113,255,227,10,76,5,240,0,11,0,23,0,35,0,39,0,51,0,63,0,75,0,174,64,68,36,15,37,38, + 37,38,15,39,36,39,66,64,0,146,12,46,146,30,141,40,146,24,70,6,146,52,12,141,58,38,18,140,36,24,145,76,37,73,67,39,49,43,67,13, + 61,9,13,15,14,3,13,21,49,13,27,61,14,73,13,21,55,43,13,27,14,33,11,76,16,252,228,236,212,196,236,228,16,238,16,238,246,238,16,238, + 17,18,57,17,18,57,49,0,16,228,50,244,60,60,228,50,236,50,16,238,246,238,16,238,50,48,75,83,88,7,16,5,237,7,16,5,237,89,34,1, + 75,176,20,84,75,176,9,84,91,75,176,11,84,91,75,176,12,84,91,75,176,13,84,91,75,176,14,84,91,88,189,0,76,0,64,0,1,0,76,0, + 76,255,192,56,17,55,56,89,1,34,6,21,20,22,51,50,54,53,52,38,39,50,22,21,20,6,35,34,38,53,52,54,1,50,22,21,20,6,35,34, + 38,53,52,54,33,51,1,35,19,34,6,21,20,22,51,50,54,53,52,38,1,50,22,21,20,6,35,34,38,53,52,54,23,34,6,21,20,22,51,50, + 54,53,52,38,8,244,87,100,100,87,85,99,99,85,158,186,187,157,160,186,187,249,116,158,188,187,159,159,185,186,4,37,160,252,90,160,31,86,99,98, + 87,87,99,100,3,178,158,186,187,157,160,186,187,159,87,99,99,87,85,99,99,2,145,148,132,130,149,149,130,131,149,127,220,187,187,219,219,187,188,219, + 2,224,219,187,189,218,219,188,186,220,249,243,5,142,149,130,132,148,148,132,129,150,253,159,220,187,187,219,219,187,188,219,127,148,132,130,149,149,130,131, + 149,0,0,0,0,9,0,113,255,227,13,114,5,240,0,11,0,22,0,34,0,45,0,55,0,59,0,69,0,80,0,92,0,0,1,34,6,21,20,22, + 51,50,54,53,52,38,39,50,22,16,6,35,34,38,53,52,54,5,34,6,21,20,22,51,50,54,53,52,38,39,50,22,16,6,35,34,38,53,52,54, + 0,32,22,21,20,6,32,38,53,52,37,51,1,35,18,34,6,21,20,22,50,54,53,52,1,50,22,16,6,35,34,38,53,52,54,23,34,6,21,20, + 22,51,50,54,53,52,38,12,26,87,100,100,87,85,99,99,85,158,186,187,157,160,186,187,253,121,87,100,100,87,85,99,99,85,158,186,187,157,160,186, + 187,248,214,1,60,188,187,254,194,185,4,223,160,252,90,160,117,172,99,98,174,99,3,78,158,186,187,157,160,186,187,159,87,99,99,87,85,99,99,2, + 145,148,132,130,149,149,130,131,149,127,220,254,138,219,219,187,188,219,127,148,132,130,149,149,130,131,149,127,220,254,138,219,219,187,188,219,2,224,219,187, + 189,218,219,188,186,220,249,243,5,142,149,130,132,148,148,132,129,254,53,220,254,138,219,219,187,188,219,127,148,132,130,149,149,130,131,149,0,1,0,40, + 4,96,1,160,5,213,0,3,0,0,27,1,51,1,40,173,203,254,223,4,96,1,117,254,139,0,0,0,255,255,0,40,4,96,2,204,5,213,16,38, + 11,16,0,0,16,7,11,16,1,44,0,0,255,255,0,40,4,96,3,248,5,213,16,39,11,16,1,44,0,0,16,38,11,16,0,0,16,7,11,16, + 2,88,0,0,0,1,0,40,4,96,1,160,5,213,0,3,0,0,1,35,1,51,1,160,87,254,223,203,4,96,1,117,255,255,0,40,4,96,2,204, + 5,213,16,38,11,19,0,0,16,7,11,19,1,44,0,0,255,255,0,40,4,96,3,248,5,213,16,38,11,19,0,0,16,39,11,19,2,88,0,0, + 16,7,11,19,1,44,0,0,0,1,0,11,254,29,2,171,255,195,0,5,0,0,1,35,39,7,35,1,2,171,148,187,188,149,1,82,254,29,249,249, + 1,166,0,0,0,1,0,158,0,141,2,115,4,35,0,6,0,71,64,37,3,232,4,5,4,2,232,1,2,5,5,4,2,232,3,2,6,0,6,1, + 232,0,6,66,2,4,231,0,166,7,2,3,0,111,5,110,7,16,252,236,50,57,49,0,16,244,236,57,48,75,83,88,7,4,237,7,16,8,237,7, + 16,8,237,7,16,4,237,89,34,1,21,9,1,21,1,53,2,115,254,211,1,45,254,43,4,35,191,254,244,254,244,191,1,162,82,0,0,1,0,193, + 0,141,2,150,4,35,0,6,0,73,64,38,5,232,6,5,2,3,2,4,232,3,3,2,6,232,0,1,0,5,232,4,5,1,1,0,66,5,3,231, + 0,166,7,5,1,111,3,0,112,7,16,252,60,236,57,49,0,16,244,236,57,48,75,83,88,7,16,8,237,7,16,4,237,7,16,4,237,7,16,8, + 237,89,34,19,1,21,1,53,9,1,193,1,213,254,43,1,45,254,211,4,35,254,94,82,254,94,191,1,12,1,12,0,255,255,0,195,0,4,5,235, + 5,204,18,38,0,153,0,75,16,39,0,17,255,232,2,78,16,39,0,17,2,22,0,4,16,39,0,17,4,61,2,78,16,7,0,17,2,22,4,206, + 255,255,0,147,0,0,3,79,5,213,16,39,0,4,255,94,0,0,16,7,0,4,1,79,0,0,0,0,0,3,0,147,0,0,3,176,5,240,0,23, + 0,27,0,36,0,0,1,35,17,6,7,6,7,53,62,1,51,50,22,21,20,6,15,1,14,1,7,14,1,21,3,51,21,35,19,17,55,62,1,53, + 52,39,38,2,76,191,31,32,90,97,94,193,103,184,223,72,90,88,47,39,8,6,6,197,203,203,197,45,57,51,65,37,1,145,3,173,8,13,35,67, + 188,57,56,194,159,76,137,86,86,47,53,25,21,60,52,254,242,254,5,66,254,82,45,53,94,49,89,55,31,0,0,0,255,255,255,236,5,124,4,20, + 6,11,16,7,0,66,0,0,7,95,0,0,0,1,255,167,254,27,6,199,255,133,0,13,0,37,179,4,15,10,14,16,196,212,196,179,7,0,15,14, + 17,18,57,57,49,64,7,11,3,10,4,7,0,14,0,16,212,220,220,60,204,50,48,1,50,36,55,21,6,4,35,34,36,39,53,22,4,3,54,231, + 1,197,229,235,254,58,224,223,254,60,236,230,1,194,254,181,104,104,126,118,118,117,119,126,105,103,0,0,0,1,255,167,6,4,6,199,7,110,0,13, + 0,37,179,4,15,10,14,16,196,212,196,179,7,0,15,14,17,18,57,57,49,64,7,10,4,11,3,0,7,14,0,16,212,220,220,60,204,50,48,1, + 50,4,23,21,38,36,35,34,4,7,53,54,36,3,54,224,1,198,235,229,254,59,231,231,254,62,230,236,1,196,7,110,118,118,126,104,104,103,105,126, + 119,117,0,0,0,1,255,170,254,29,2,73,1,213,0,7,0,0,1,51,9,1,35,11,1,35,1,231,98,254,226,1,30,98,237,237,99,1,213,254, + 36,254,36,1,138,254,118,0,255,255,0,61,255,197,7,195,6,131,16,39,0,13,0,0,253,123,16,39,0,13,4,0,253,123,16,7,0,13,2,0, + 0,147,0,0,0,1,0,221,2,129,3,51,3,95,0,3,0,0,19,33,21,33,221,2,86,253,170,3,95,222,0,0,0,1,254,137,255,227,2,205, + 5,240,0,3,0,43,64,19,0,15,1,2,1,2,15,3,0,3,66,2,140,0,145,4,1,3,4,16,212,204,49,0,16,228,228,48,75,83,88,7, + 16,5,237,7,16,5,237,89,34,1,51,1,35,2,45,160,252,92,160,5,240,249,243,0,0,1,0,176,254,242,2,88,6,20,0,11,0,0,1,17, + 51,21,33,17,33,21,35,17,51,21,1,104,240,254,88,1,168,240,240,2,94,253,35,143,7,34,143,253,35,74,0,0,0,1,0,176,254,242,2,88, + 6,20,0,11,0,0,19,53,51,17,35,53,33,17,33,53,51,17,176,240,240,1,168,254,88,240,2,94,74,2,221,143,248,222,143,2,221,0,0,0, + 255,255,0,74,0,0,7,23,5,240,16,38,0,34,183,0,16,7,0,34,3,103,0,0,255,255,0,147,0,0,5,74,5,240,16,38,0,34,0,0, + 16,7,0,4,3,74,0,0,255,255,0,147,0,0,5,74,5,240,16,39,0,4,255,94,0,0,16,7,0,34,1,154,0,0,0,0,0,1,0,100, + 255,5,3,150,4,93,0,11,0,55,183,5,6,7,8,4,4,0,12,16,220,212,23,57,49,0,64,10,66,11,8,169,2,4,0,188,6,12,16,204, + 244,60,196,236,50,48,75,83,88,183,8,17,5,7,17,6,5,6,7,5,16,236,16,236,89,19,22,51,50,55,7,1,35,1,6,32,39,100,154,234, + 251,179,8,254,224,152,1,8,117,254,195,200,4,93,16,16,128,251,40,4,174,15,15,0,0,1,0,236,255,59,4,135,5,213,0,13,0,0,1,50, + 4,21,20,6,7,17,35,17,35,17,35,17,2,172,215,1,4,235,215,142,190,141,5,213,232,190,184,221,17,252,178,6,31,249,225,6,154,0,0,0, + 0,2,0,216,1,194,3,40,4,18,0,3,0,11,0,0,1,51,17,7,43,1,34,38,53,52,54,51,2,121,175,175,118,2,125,172,173,126,4,18, + 253,177,1,172,125,124,171,0,0,2,0,216,1,194,3,40,4,18,0,3,0,11,0,0,1,39,17,59,1,50,22,21,20,6,43,1,1,135,175,175, + 118,126,173,172,125,2,1,194,1,2,79,171,124,125,172,0,255,255,0,61,255,197,3,195,3,107,18,7,0,13,0,0,253,123,0,0,0,2,1,29, + 255,18,2,66,4,35,0,3,0,9,0,0,1,21,35,53,19,21,19,35,3,53,1,240,211,211,82,129,164,4,35,254,254,252,219,172,254,192,1,64, + 172,0,0,0,255,255,255,167,254,27,6,199,7,110,16,38,11,29,0,0,16,6,11,30,0,0,0,0,255,255,0,61,255,242,3,195,7,111,18,39, + 0,13,0,0,253,168,16,7,0,13,0,0,1,127,0,0,255,255,0,145,255,66,3,67,5,213,16,39,0,18,0,145,0,0,16,39,0,17,1,142, + 0,0,16,7,0,17,255,217,4,72,0,0,0,1,0,100,1,211,7,156,3,49,0,29,0,0,1,21,14,1,35,34,39,38,39,38,39,38,35,34, + 6,7,53,62,1,51,50,23,22,23,22,23,22,51,50,54,7,156,158,230,146,148,236,16,8,10,23,233,140,132,220,148,158,230,146,176,210,14,8,12, + 21,233,140,130,215,3,49,178,79,68,59,4,2,2,6,62,77,83,178,79,69,60,4,2,3,5,62,76,255,255,255,167,254,20,6,199,255,126,16,7, + 11,30,0,0,248,16,0,0,0,1,1,56,0,200,5,124,5,13,0,23,0,0,1,17,35,17,7,39,55,33,53,33,39,55,23,17,51,17,55,23, + 7,33,21,33,23,7,3,170,160,249,113,249,254,159,1,97,250,113,250,160,250,113,250,1,97,254,159,250,113,2,41,254,159,1,96,249,114,249,160,250, + 114,251,1,98,254,158,250,113,250,160,249,114,0,3,0,250,1,50,3,182,4,182,0,3,0,7,0,11,0,0,19,53,51,21,1,53,51,21,3,53, + 51,21,250,200,1,44,200,200,200,2,144,200,200,254,162,200,200,2,188,200,200,0,0,0,255,255,0,40,4,96,5,36,5,213,16,39,11,16,1,44, + 0,0,16,38,11,16,0,0,16,39,11,16,3,132,0,0,16,7,11,16,2,88,0,0,0,4,1,102,1,0,5,78,4,232,0,3,0,7,0,11, + 0,15,0,0,1,53,51,21,33,53,51,21,1,53,51,21,3,53,51,21,1,102,200,2,88,200,253,168,200,200,200,2,144,200,200,200,200,254,112,200, + 200,3,32,200,200,0,0,0,0,5,1,102,0,246,5,78,4,222,0,3,0,7,0,11,0,15,0,19,0,0,1,53,51,21,19,53,51,21,3,53, + 51,21,1,53,51,21,3,53,51,21,2,246,200,200,200,200,200,252,44,200,220,200,2,134,200,200,254,112,200,200,3,32,200,200,252,244,200,200,3,12, + 200,200,0,0,0,2,0,219,0,0,1,174,5,213,0,3,0,7,0,0,19,51,21,35,17,51,21,35,219,211,211,211,211,5,213,254,252,39,254,0, + 0,4,0,100,254,229,5,253,6,239,0,3,0,7,0,11,0,15,0,0,19,51,21,35,37,51,21,35,1,51,21,35,17,51,21,35,100,211,211,4, + 198,211,211,253,157,211,211,211,211,3,105,254,254,254,4,132,254,249,242,254,0,5,0,112,0,0,6,68,5,213,0,3,0,7,0,11,0,15,0,27, + 0,0,37,53,51,21,3,53,51,21,1,53,51,21,3,53,51,21,1,17,35,17,33,53,33,17,51,17,33,21,4,134,200,200,200,252,44,200,220,200, + 1,124,160,253,102,2,154,160,2,154,246,200,200,3,32,200,200,252,244,200,200,3,12,200,200,254,132,253,102,2,154,160,2,155,253,101,160,0,0,0, + 0,3,0,219,0,80,1,174,5,62,0,3,0,7,0,11,0,0,19,51,21,35,17,51,21,35,17,51,21,35,219,211,211,211,211,211,211,5,62,254, + 253,14,254,2,246,254,0,0,0,4,0,219,0,17,1,174,5,119,0,3,0,7,0,11,0,15,0,0,19,51,21,35,17,51,21,35,17,51,21,35, + 17,51,21,35,219,211,211,211,211,211,211,211,211,2,137,254,3,236,254,252,150,254,3,240,254,0,0,0,0,2,0,87,2,141,2,238,5,240,0,13, + 0,25,0,0,0,34,7,6,21,20,23,22,50,55,54,53,52,47,1,50,22,21,20,6,35,34,38,53,52,54,2,8,202,50,51,51,50,202,50,51, + 51,151,161,170,170,161,162,170,170,5,151,86,86,172,173,86,86,86,86,173,172,86,175,222,211,212,222,222,212,211,222,0,0,2,0,122,2,156,0,238, + 6,3,0,3,0,7,0,31,64,6,9,5,1,4,0,8,16,220,60,220,60,204,49,0,64,6,4,7,0,3,0,8,16,212,196,16,220,204,48,19, + 51,17,35,17,51,21,35,122,116,116,116,116,5,15,253,141,3,103,130,0,0,2,0,63,2,156,2,244,5,223,0,2,0,13,0,212,64,22,0,3, + 11,7,221,5,1,9,247,3,145,14,1,12,10,0,93,6,8,4,12,14,16,220,212,60,196,236,50,17,57,49,0,16,244,252,212,60,236,50,18,57, + 48,1,75,176,14,84,75,176,15,84,91,75,176,16,84,91,75,176,17,84,91,75,176,11,84,91,75,176,10,84,91,88,189,0,14,0,64,0,1,0, + 14,0,14,255,192,56,17,55,56,89,0,75,176,17,84,75,176,14,84,91,88,189,0,14,255,192,0,1,0,14,0,14,0,64,56,17,55,56,89,64, + 84,11,1,29,1,47,1,57,1,73,1,70,3,89,3,105,3,139,3,171,3,187,3,11,1,0,15,1,15,2,15,5,15,6,15,7,15,8,15,11, + 15,12,15,13,19,0,31,1,31,2,31,5,31,6,31,7,31,8,31,11,31,12,31,13,34,0,53,0,71,0,75,13,83,0,91,13,101,0,132,0, + 165,0,181,0,30,93,1,93,9,1,33,3,51,17,51,21,35,21,35,53,33,53,1,221,254,203,1,53,22,166,135,135,144,254,98,5,102,254,93,2, + 28,253,228,109,186,186,121,0,0,1,0,102,2,141,2,211,5,223,0,32,0,0,19,33,21,33,21,54,55,54,51,50,23,22,21,20,7,6,35,34, + 38,39,53,22,23,22,51,50,54,52,38,35,34,6,7,142,1,254,254,121,28,29,28,28,161,94,94,97,96,176,60,126,66,57,62,62,69,111,130,130, + 111,52,104,54,5,223,95,204,9,4,4,77,76,131,135,75,74,18,18,113,27,14,13,102,174,102,20,21,0,2,0,92,2,141,2,243,5,240,0,15, + 0,47,0,0,1,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,19,21,38,39,38,35,34,7,6,7,54,55,54,51,50,23,22,21,20,7, + 6,35,34,38,53,52,55,54,51,50,23,22,1,179,88,51,51,51,51,88,87,51,51,51,51,171,49,50,50,49,128,68,68,10,38,57,58,68,145,84, + 84,88,87,145,167,176,108,108,182,49,50,50,4,109,52,53,91,90,52,53,53,52,90,91,53,52,1,98,103,20,10,11,75,76,153,49,26,26,76,77, + 132,127,79,78,222,212,198,117,118,8,9,0,0,1,0,108,2,156,2,213,5,223,0,6,0,0,19,33,21,1,35,1,33,108,2,105,254,164,136,1, + 72,254,51,5,223,48,252,237,2,228,0,0,0,3,0,89,2,141,2,236,5,240,0,12,0,42,0,58,0,0,0,34,7,6,21,20,22,51,50,55, + 54,52,39,37,38,39,38,53,52,54,32,23,22,21,20,7,6,7,22,23,22,21,20,7,6,35,34,39,38,53,52,55,54,55,20,23,22,51,50,55, + 54,53,52,39,38,35,34,7,6,2,0,186,53,53,106,93,92,54,53,53,254,236,84,46,47,164,1,30,82,81,46,47,83,90,56,53,85,86,158,159, + 85,86,53,54,45,47,46,85,81,49,48,48,47,83,83,48,47,4,42,44,43,75,76,86,44,43,150,43,93,18,49,50,72,100,116,58,58,100,74,48, + 49,18,18,58,55,80,121,65,65,65,65,121,78,57,56,198,63,38,37,37,36,65,63,38,37,37,36,0,0,2,0,83,2,141,2,233,5,240,0,31, + 0,46,0,0,19,53,22,23,22,51,50,55,54,55,6,7,6,35,34,38,53,52,55,54,51,50,23,22,21,20,7,6,35,34,39,38,19,50,54,53, + 52,39,38,35,34,7,6,21,20,23,22,145,49,50,50,48,129,68,67,10,35,60,57,69,144,168,87,88,145,167,87,88,107,108,182,49,50,50,204,88, + 102,51,51,88,85,53,52,52,51,2,174,103,20,11,10,75,75,154,47,27,26,152,132,129,77,78,111,111,212,198,117,118,8,9,1,114,104,92,90,52, + 53,53,52,90,92,52,52,0,0,1,0,137,2,156,3,176,5,107,0,11,0,0,1,17,33,21,33,17,35,17,33,53,33,17,2,81,1,95,254,161, + 105,254,161,1,95,5,107,254,200,95,254,200,1,56,95,1,56,0,0,0,0,1,0,137,3,212,3,176,4,51,0,3,0,0,19,33,21,33,137,3, + 39,252,217,4,51,95,0,0,0,2,0,137,3,97,3,176,4,165,0,3,0,7,0,0,19,33,21,33,21,33,21,33,137,3,39,252,217,3,39,252, + 217,4,165,94,135,95,0,0,0,1,0,111,2,5,1,144,6,2,0,13,0,0,1,14,1,16,22,23,35,38,39,38,52,55,54,55,1,144,84,82, + 82,84,101,94,47,47,47,46,95,6,2,129,252,254,254,254,128,131,128,127,250,127,126,132,0,1,0,103,2,5,1,136,6,2,0,15,0,0,19,51, + 22,23,22,20,7,6,7,35,54,55,54,16,39,38,103,101,95,47,46,46,47,95,101,84,41,42,42,41,6,2,132,126,127,250,127,128,131,128,127,127, + 1,2,126,126,0,1,0,117,2,156,2,196,5,30,0,19,0,48,64,7,21,0,3,14,10,11,20,16,212,220,60,47,204,204,75,176,13,81,88,177, + 21,64,56,89,49,178,127,21,1,93,0,64,6,6,17,12,2,11,20,16,212,60,196,212,204,48,1,17,35,17,52,38,35,34,6,21,17,35,17,51, + 21,62,1,51,50,22,2,196,116,78,78,94,108,117,117,41,113,74,121,125,4,23,254,133,1,119,89,89,107,92,254,158,2,115,97,56,56,134,0,0, + 255,255,0,87,255,241,2,238,3,84,18,7,11,73,0,0,253,100,0,0,255,255,0,137,0,0,2,197,3,67,18,7,0,123,0,0,253,100,0,0, + 255,255,0,94,0,0,2,180,3,84,18,7,0,116,0,0,253,100,0,0,255,255,0,98,255,241,2,205,3,84,18,7,0,117,0,0,253,100,0,0, + 255,255,0,63,0,0,2,244,3,67,18,7,11,75,0,0,253,100,0,0,255,255,0,102,255,241,2,211,3,67,18,7,11,76,0,0,253,100,0,0, + 255,255,0,92,255,241,2,243,3,84,18,7,11,77,0,0,253,100,0,0,255,255,0,108,0,0,2,213,3,67,18,7,11,78,0,0,253,100,0,0, + 255,255,0,89,255,241,2,236,3,84,18,7,11,79,0,0,253,100,0,0,255,255,0,83,255,241,2,233,3,84,18,7,11,80,0,0,253,100,0,0, + 255,255,0,137,0,0,3,176,2,207,18,7,11,81,0,0,253,100,0,0,255,255,0,137,1,56,3,176,1,151,18,7,11,82,0,0,253,100,0,0, + 255,255,0,137,0,197,3,176,2,9,18,7,11,83,0,0,253,100,0,0,255,255,0,111,255,105,1,144,3,102,18,7,11,84,0,0,253,100,0,0, + 255,255,0,103,255,105,1,136,3,102,18,7,11,85,0,0,253,100,0,0,255,255,0,77,255,240,2,161,2,130,18,7,8,162,0,0,253,100,0,0, + 255,255,0,71,255,240,2,213,2,130,18,7,8,168,0,0,253,100,0,0,255,255,0,71,255,240,2,207,2,130,18,7,8,177,0,0,253,100,0,0, + 255,255,0,117,0,0,3,33,2,115,18,7,2,165,0,0,253,100,0,0,255,255,0,71,255,240,2,213,2,130,18,7,8,169,0,0,253,100,0,0, + 255,255,0,117,0,0,2,196,3,103,18,7,2,114,0,0,253,100,0,0,255,255,0,117,0,0,2,231,3,103,18,7,8,174,0,0,253,100,0,0, + 255,255,0,122,0,0,0,238,3,103,18,7,2,163,0,0,253,100,0,0,255,255,0,117,0,0,4,123,2,130,18,7,8,175,0,0,253,100,0,0, + 255,255,0,117,0,0,2,196,2,130,18,7,11,86,0,0,253,100,0,0,255,255,0,117,255,17,2,236,2,130,18,7,8,181,0,0,253,100,0,0, + 255,255,0,117,0,0,2,144,2,147,18,7,2,164,0,0,253,100,0,0,255,255,0,35,0,0,1,219,3,37,18,7,8,182,0,0,253,100,0,0, + 0,1,0,86,0,0,6,174,5,214,0,35,0,0,1,14,1,35,34,0,16,0,51,50,22,23,21,46,1,35,34,6,16,22,51,50,54,55,17,33, + 21,33,17,33,21,33,17,33,21,33,3,221,79,178,99,254,254,219,1,37,254,101,177,78,76,173,98,192,204,204,192,98,173,76,2,196,253,211,2,22, + 253,234,2,58,253,47,1,184,54,54,1,55,2,28,1,55,53,54,159,71,70,234,254,68,234,70,71,2,10,128,254,181,128,254,107,128,0,3,0,115, + 255,166,4,190,6,57,0,39,0,46,0,52,0,0,1,22,23,55,51,7,22,23,21,38,39,1,51,50,54,55,21,14,1,35,34,39,7,35,55,38, + 39,7,35,55,38,39,38,17,16,55,54,37,55,51,7,6,7,6,17,20,23,1,38,39,1,22,23,3,104,65,62,30,155,47,40,37,58,64,254,193, + 18,119,211,93,97,216,121,27,26,18,155,25,65,57,38,155,65,19,17,178,178,160,1,8,21,156,227,145,88,125,82,2,52,62,67,254,193,53,65,5, + 235,8,19,105,165,22,28,213,60,41,251,151,94,95,211,72,72,2,63,87,18,30,135,230,18,21,207,1,103,1,104,208,185,20,75,252,31,112,157,254, + 216,238,148,3,203,19,4,251,149,40,21,0,0,1,0,96,255,228,4,179,5,240,0,44,0,0,37,54,55,54,55,21,14,1,35,32,0,17,16,0, + 33,50,22,23,21,46,1,35,34,2,17,16,23,22,23,17,51,21,62,1,51,50,22,31,1,46,1,35,34,6,21,3,46,97,88,106,93,97,217,121, + 254,202,254,155,1,101,1,54,123,217,95,93,212,119,234,249,124,94,153,152,48,154,110,15,38,23,1,26,60,36,128,139,138,7,39,47,95,211,72,71, + 1,158,1,103,1,104,1,159,71,71,213,95,94,254,199,254,216,254,217,156,117,30,3,93,157,92,89,4,5,170,16,15,182,171,0,0,0,1,0,133, + 0,0,4,203,5,213,0,17,0,0,1,17,33,21,33,17,33,21,33,17,51,21,35,17,35,17,35,53,1,113,3,90,253,112,2,80,253,176,250,250, + 202,236,1,126,4,87,170,254,72,170,254,181,69,254,199,1,57,69,0,0,0,1,0,129,0,0,4,98,5,240,0,35,0,0,1,17,33,21,33,53, + 51,17,35,53,51,53,35,53,51,53,16,54,51,50,22,23,21,46,1,35,34,6,29,1,33,21,33,21,33,21,2,53,2,45,252,31,236,191,191,199, + 199,214,232,61,151,79,76,136,61,148,116,1,135,254,121,1,143,1,236,254,190,170,170,1,66,143,143,143,95,1,5,243,31,29,182,41,41,155,212,72, + 143,143,143,0,0,1,0,186,255,66,7,29,5,30,0,43,0,0,5,35,1,38,39,38,35,34,7,6,21,17,35,17,51,21,54,55,54,51,50,23, + 22,23,19,51,7,54,51,50,22,21,17,35,17,52,38,35,34,6,21,17,35,17,2,204,170,1,109,5,52,57,119,141,83,83,185,185,62,89,88,121, + 122,85,54,37,133,170,88,92,120,175,190,185,114,117,143,166,185,190,3,120,141,71,77,95,97,162,253,135,4,96,174,102,50,49,62,38,62,1,69,214, + 51,246,225,253,92,2,158,161,156,190,164,253,135,1,29,0,0,5,0,117,0,0,5,135,5,213,0,2,0,6,0,34,0,38,0,41,0,0,1,39, + 21,19,39,35,21,3,33,19,51,17,51,17,51,21,35,21,51,21,35,17,33,3,35,17,35,17,35,53,51,53,35,53,51,5,23,51,53,3,23,53, + 2,75,79,182,56,126,196,1,16,211,229,196,195,195,195,195,254,240,211,229,196,195,195,195,195,2,18,56,126,79,79,3,175,206,206,254,242,147,147,3, + 52,253,218,2,38,253,218,123,147,123,253,218,2,38,253,218,2,38,123,147,123,123,147,147,254,242,206,206,0,2,0,201,255,227,9,206,5,213,0,8, + 0,80,0,0,1,17,51,50,54,53,52,38,35,1,6,7,6,43,1,17,35,17,33,50,23,22,23,51,17,51,17,33,21,33,17,20,22,59,1,53, + 30,1,51,50,54,53,52,38,47,1,46,1,53,52,54,51,50,22,23,21,46,1,35,34,6,21,20,22,31,1,30,1,21,20,6,35,34,38,39,53, + 35,34,38,53,17,1,135,239,133,145,145,133,1,221,6,113,122,236,239,190,1,173,236,122,87,24,81,174,1,101,254,155,71,108,171,96,187,91,122,132, + 95,161,60,161,143,211,194,96,169,72,74,158,85,129,129,93,139,59,185,155,233,203,85,183,102,171,201,152,5,47,253,207,146,135,134,146,254,204,200,106, + 113,253,168,5,213,113,82,136,1,62,254,194,143,253,160,137,78,35,53,53,89,81,75,80,37,15,36,149,130,158,172,30,30,174,40,40,84,84,64,73, + 33,14,42,153,137,156,182,35,35,1,159,210,2,96,0,0,0,2,0,201,255,227,8,51,5,213,0,7,0,69,0,0,1,17,51,50,54,16,38,35, + 1,23,35,3,46,1,43,1,17,35,17,33,32,22,21,20,6,7,30,1,31,1,22,23,22,51,50,54,53,52,38,47,1,46,1,53,52,54,51,50, + 22,23,21,46,1,35,34,6,21,20,22,31,1,30,1,21,20,6,35,34,39,38,1,147,254,146,149,149,146,2,191,4,217,191,74,139,120,220,202,1, + 200,1,0,252,131,125,65,123,62,91,98,96,99,97,130,140,101,171,64,171,152,224,206,102,180,76,78,168,90,137,137,98,148,63,196,165,247,216,90,97, + 44,5,47,253,238,135,1,6,133,250,216,7,1,127,150,98,253,137,5,213,214,216,141,186,36,22,144,126,180,51,25,27,89,81,75,80,37,15,36,149, + 130,158,172,30,30,174,40,40,84,84,64,73,33,14,42,153,137,156,182,18,8,0,0,0,0,6,0,59,0,0,7,174,5,213,0,31,0,34,0,38, + 0,41,0,45,0,49,0,0,19,39,35,53,51,39,51,23,33,55,51,23,33,55,51,7,51,21,35,7,51,21,35,3,35,3,35,3,35,3,35,53, + 5,27,1,1,23,33,55,1,27,2,7,51,39,33,23,33,55,182,30,93,58,49,204,48,2,19,48,227,48,2,19,48,205,49,57,93,29,122,158,225, + 254,218,195,220,254,224,159,4,192,165,165,254,117,29,1,145,29,251,32,165,165,229,29,125,28,253,76,29,1,145,29,4,15,117,143,194,194,194,194,194, + 194,143,117,143,252,128,3,128,252,128,3,128,143,143,253,103,2,153,1,4,117,117,254,252,253,103,2,153,1,4,117,117,117,117,0,0,0,2,0,95, + 255,227,5,241,5,213,0,13,0,27,0,0,19,37,32,0,25,1,35,17,52,38,35,33,17,35,41,1,34,0,25,1,51,17,20,22,51,33,3,51, + 95,2,7,0,255,1,6,184,157,176,254,177,184,5,142,253,253,255,254,250,184,157,176,1,83,4,184,5,210,3,254,214,254,220,254,145,1,86,240,211, + 250,178,1,42,1,36,1,111,254,170,240,211,5,78,0,0,255,255,0,113,254,192,4,244,6,20,16,38,0,211,0,0,16,7,2,143,0,138,0,0, + 0,1,0,0,255,227,4,143,5,240,0,49,1,28,64,58,32,18,211,34,16,43,7,211,9,25,161,26,174,22,149,29,1,161,0,174,4,149,47,145, + 29,140,41,9,50,43,34,33,41,35,38,18,16,10,3,13,9,17,8,44,32,38,19,7,17,8,17,13,28,25,0,38,42,33,47,60,212,196,50,252, + 196,196,18,57,57,18,57,57,17,18,57,17,23,57,18,57,57,17,57,57,49,0,16,196,50,228,244,236,244,236,16,238,246,238,16,238,50,221,60,238, + 50,48,1,75,176,9,84,75,176,12,84,91,75,176,13,84,91,75,176,15,84,91,75,176,23,84,91,75,176,24,84,91,88,189,0,50,255,192,0,1, + 0,50,0,50,0,64,56,17,55,56,89,64,122,14,0,14,1,11,2,11,49,84,20,105,12,108,14,110,15,111,16,111,17,111,18,111,19,105,20,107, + 31,111,32,111,33,111,34,111,35,110,36,108,37,105,39,105,45,159,7,159,8,159,9,159,10,159,11,159,12,159,13,159,14,159,15,159,16,159,17,159, + 18,159,19,150,31,159,32,159,33,159,34,159,35,159,36,159,37,159,38,159,39,159,40,159,41,159,42,159,43,159,44,157,45,50,0,8,0,9,16,8, + 16,9,32,8,32,9,85,21,83,30,106,21,103,31,10,93,0,93,1,21,46,1,35,34,6,7,33,7,33,14,1,21,20,22,23,33,7,33,30,1, + 51,50,54,55,21,14,1,35,34,0,3,35,55,51,52,38,53,52,54,53,35,55,51,18,0,51,50,22,4,143,91,169,102,157,202,32,2,65,55,253, + 230,2,1,1,2,1,190,56,254,138,32,202,157,102,169,91,89,185,96,237,254,203,40,211,55,139,1,1,194,55,156,40,1,54,236,98,185,5,98,213, + 105,90,200,187,123,24,46,35,32,46,24,123,187,202,90,105,211,72,72,1,34,1,3,123,23,47,32,35,47,23,123,1,1,1,34,71,0,1,0,40, + 0,0,5,22,5,213,0,17,0,0,19,17,51,17,1,51,1,33,21,33,1,35,1,17,35,17,35,53,191,189,2,117,243,253,128,1,170,254,88,2, + 176,249,253,95,189,151,3,84,2,129,253,137,2,119,253,127,115,253,31,2,207,253,49,2,225,115,0,0,0,1,0,20,0,0,5,3,5,213,0,23, + 0,0,1,17,33,53,33,21,33,17,55,23,5,21,55,23,5,17,35,17,7,39,37,53,7,39,2,38,253,238,4,239,253,238,229,80,254,203,230,80, + 254,202,203,231,77,1,52,232,77,3,141,1,158,170,170,254,241,161,111,216,136,162,111,217,253,184,1,186,161,110,217,136,162,110,0,0,0,5,0,208, + 254,57,9,164,5,240,0,22,0,45,0,98,0,119,0,131,0,0,1,39,19,54,55,62,1,51,50,22,23,22,21,20,7,6,7,6,35,34,39,38, + 39,19,34,7,6,7,6,21,20,23,22,51,50,54,55,54,55,54,53,52,39,38,39,38,5,54,55,19,6,7,6,7,6,7,39,62,1,55,54,51, + 50,4,23,30,1,21,20,7,6,7,14,1,7,6,7,6,35,34,39,46,1,39,38,47,1,6,7,6,35,34,39,38,53,52,54,51,50,1,3,6, + 7,23,22,23,22,51,50,54,55,54,55,54,53,52,39,38,39,38,1,38,35,34,7,6,21,20,23,22,51,50,7,8,185,162,34,62,49,150,97,74, + 123,37,65,48,49,81,91,87,55,62,47,30,247,87,49,12,16,10,23,32,62,36,60,24,20,19,17,29,12,24,20,249,185,12,11,180,46,32,35,24, + 21,17,174,26,100,67,119,175,203,1,45,94,85,82,28,26,66,36,96,62,68,76,95,75,62,46,51,98,32,64,15,15,18,21,78,92,117,76,77,132, + 105,73,1,228,177,25,21,40,83,51,57,53,108,154,57,44,28,24,30,31,56,132,253,71,40,47,38,14,13,23,23,32,45,254,57,41,2,208,151,105, + 82,109,58,51,88,146,119,100,103,55,63,32,23,50,1,248,106,26,55,35,61,53,40,54,36,32,27,54,50,57,84,47,20,12,11,183,40,50,3,77, + 10,20,22,33,29,58,53,83,125,36,64,123,109,98,245,129,113,140,130,126,69,115,47,52,24,29,9,10,45,19,38,10,10,34,23,84,65,66,96,93, + 133,3,146,252,155,124,64,27,56,22,25,134,110,82,128,107,99,100,93,97,67,156,251,160,34,14,14,15,24,15,14,0,0,2,0,46,255,227,4,142, + 5,240,0,41,0,53,0,0,19,39,54,51,50,23,22,51,50,55,38,53,52,55,54,51,50,23,22,21,20,7,22,21,20,7,6,35,53,50,55,54, + 53,52,39,6,35,34,39,38,35,34,37,54,53,52,39,38,35,34,7,6,21,20,185,139,147,111,124,64,88,34,48,55,227,80,89,136,116,97,84,107, + 181,126,106,252,134,91,73,119,137,109,113,74,50,53,51,2,48,68,27,35,50,52,33,25,2,4,96,240,78,107,66,177,254,172,88,96,96,83,177,227, + 171,163,191,194,134,113,162,74,60,147,88,114,126,104,70,217,108,175,86,49,63,63,48,87,166,0,0,0,0,4,0,68,0,0,4,162,5,213,0,29, + 0,36,0,43,0,49,0,0,19,53,35,53,51,17,33,50,23,22,23,51,21,35,22,20,7,51,21,35,6,7,6,43,1,17,35,17,35,53,5,33, + 21,51,50,55,54,1,33,38,39,38,43,1,5,33,21,33,54,52,151,82,82,1,200,251,129,76,31,92,72,1,1,71,90,31,77,129,251,254,202,83, + 3,28,254,1,254,141,77,23,254,17,1,255,16,23,77,141,254,2,35,253,221,2,35,2,3,236,86,116,1,31,113,68,106,116,21,44,21,116,107,68, + 113,253,168,3,120,116,116,122,73,22,1,89,27,21,73,237,86,21,44,0,0,2,0,93,255,91,4,177,6,120,0,36,0,45,0,0,5,35,53,38, + 39,38,17,16,55,54,55,53,51,21,22,23,22,23,21,38,39,38,39,17,54,55,54,55,17,35,53,33,17,6,7,6,7,39,17,6,7,6,17,16, + 23,22,2,249,140,223,137,168,168,137,223,140,105,96,112,94,95,107,98,107,78,63,72,57,120,1,34,99,120,104,117,140,133,79,111,111,79,165,143,31, + 167,204,1,109,1,110,205,166,31,143,137,4,31,36,70,215,95,48,44,4,251,63,2,17,18,39,1,145,166,253,127,83,42,37,5,178,4,167,32,108, + 153,254,209,254,210,153,108,0,0,3,0,16,0,0,5,5,5,213,0,23,0,27,0,30,0,0,19,53,33,19,51,19,33,21,33,23,51,21,35,19, + 35,3,33,3,35,19,35,53,51,55,51,7,33,47,1,51,3,51,1,49,181,229,181,1,48,254,251,71,190,147,181,210,170,254,6,170,213,181,146,189, + 73,193,67,1,169,68,250,210,105,3,82,123,2,8,253,248,123,207,123,253,248,2,8,253,248,2,8,123,207,207,207,123,1,65,0,0,0,1,0,117, + 255,227,5,188,5,240,0,54,0,0,1,54,55,54,55,33,53,33,54,55,54,53,52,38,35,34,6,7,53,62,1,51,50,4,21,20,7,51,21,33, + 6,15,1,33,21,33,6,21,20,22,51,50,54,55,21,14,1,35,32,36,53,52,55,35,53,1,92,4,22,74,128,254,53,3,146,12,13,59,179,165, + 95,204,115,114,218,105,245,1,23,25,175,254,253,103,216,67,2,133,252,83,49,188,173,114,236,123,128,239,106,254,231,254,221,18,168,2,161,7,22,74, + 44,123,8,9,43,107,118,128,54,55,197,38,38,228,198,85,66,123,92,42,13,123,59,94,126,136,70,69,208,47,48,224,217,75,63,123,0,2,0,165, + 254,211,4,114,6,20,0,31,0,42,0,0,1,21,46,1,35,17,50,54,55,21,6,7,6,7,17,35,17,38,39,38,19,53,16,55,54,55,53,51, + 21,22,23,22,1,3,6,7,6,7,6,23,22,23,22,4,114,92,168,101,101,168,92,90,92,88,91,100,185,116,212,1,212,121,178,101,93,88,92,254, + 139,1,91,67,118,15,14,14,25,108,67,4,164,213,105,90,251,241,90,105,211,72,36,34,2,254,240,1,21,22,118,214,1,57,17,1,66,203,116,23, + 232,226,2,34,36,251,164,3,249,22,67,117,170,161,102,180,108,67,0,0,0,2,0,20,0,0,5,3,5,213,0,3,0,11,0,0,19,33,21,33, + 21,33,21,33,17,35,17,33,20,4,239,251,17,4,239,253,238,203,253,238,5,213,170,120,170,251,247,4,9,0,0,0,0,1,0,106,0,0,4,175, + 5,213,0,38,0,0,19,55,33,7,33,22,23,33,7,35,6,7,6,7,22,23,22,23,19,35,3,38,39,38,43,1,53,51,50,55,54,55,33,55, + 33,38,39,38,35,106,55,4,14,55,254,158,79,21,1,53,55,246,5,61,65,125,65,61,59,65,205,217,191,75,68,70,120,220,254,146,74,68,6,253, + 190,55,2,0,18,45,74,146,5,90,123,123,78,129,123,126,85,93,36,22,72,68,130,254,104,1,127,151,48,49,166,67,62,114,123,67,52,88,0,0, + 0,1,0,10,0,5,5,50,5,218,0,27,0,0,1,16,7,6,33,35,17,7,39,37,53,7,39,37,17,51,17,55,23,5,21,55,23,5,17,32, + 0,17,5,50,204,204,254,80,172,230,78,1,52,232,76,1,52,202,230,80,254,202,232,80,254,200,1,53,1,31,2,241,254,126,181,181,2,30,161,110, + 216,137,162,110,217,1,228,254,170,162,111,217,136,163,111,218,253,251,1,24,1,46,0,0,0,1,252,18,5,21,255,203,6,20,0,5,0,0,1,19, + 51,7,33,21,252,18,218,126,132,2,229,5,21,0,255,155,100,0,0,0,0,1,252,61,5,21,255,246,6,20,0,5,0,0,3,33,53,33,39,51, + 10,252,71,2,229,132,126,5,21,100,155,0,0,1,252,61,4,122,255,203,6,20,0,8,0,0,3,33,23,35,39,55,51,7,33,53,253,27,132,126, + 175,175,126,132,2,229,5,21,155,205,205,155,0,1,252,61,4,122,255,203,6,20,0,8,0,0,1,53,33,39,51,23,7,35,55,252,61,2,229,132, + 126,175,175,126,132,5,21,100,155,205,205,155,0,4,252,19,4,123,255,236,6,16,0,3,0,7,0,11,0,12,0,0,1,51,21,35,37,51,21,35, + 37,51,21,35,23,252,19,203,203,3,14,203,203,254,121,203,203,102,6,16,202,202,202,202,202,203,0,0,0,5,251,80,4,123,0,176,6,16,0,3, + 0,7,0,11,0,15,0,16,0,0,3,51,21,35,37,51,21,35,37,51,21,35,37,51,21,35,5,27,203,203,251,107,203,203,3,14,203,203,254,121, + 203,203,1,41,6,16,202,202,202,202,202,202,202,203,0,0,0,1,252,61,4,122,255,203,6,20,0,13,0,0,1,23,35,39,55,51,7,33,39,51, + 23,7,35,55,252,230,132,126,175,175,126,132,2,60,132,126,175,175,126,132,5,21,155,205,205,155,155,205,205,155,0,0,0,4,0,67,255,207,7,216, + 6,4,0,10,0,36,0,40,0,66,0,0,1,34,6,21,20,22,51,50,54,61,1,55,17,35,53,14,1,35,34,38,53,52,54,51,23,52,38,35, + 34,6,7,53,62,1,51,50,22,37,51,1,35,1,21,46,1,35,34,6,21,20,22,51,50,54,55,21,14,1,35,34,38,53,52,54,51,50,22,2, + 15,160,112,83,72,102,127,188,188,3,153,109,141,166,205,198,169,111,103,68,129,99,92,148,71,194,193,2,176,216,252,68,216,5,169,94,111,56,121,137, + 137,121,56,111,94,73,130,73,202,236,238,209,67,128,3,246,66,82,67,73,148,130,10,77,254,13,62,5,79,158,129,150,155,6,87,92,32,55,178,36, + 30,202,250,249,203,3,132,178,52,30,156,148,147,157,31,52,177,34,27,250,209,212,249,27,0,4,0,67,255,207,7,254,6,4,0,32,0,43,0,69, + 0,73,0,0,1,46,1,52,54,4,23,21,39,38,35,34,21,20,22,31,1,30,1,20,6,35,38,39,53,23,22,51,50,53,52,38,39,1,34,6, + 21,20,22,51,50,54,61,1,55,17,35,53,14,1,35,34,38,53,52,54,51,23,52,38,35,34,6,7,53,62,1,51,50,22,37,51,1,35,6,86, + 135,127,185,1,78,122,36,112,129,180,59,105,48,153,137,202,170,175,145,37,147,139,177,61,123,251,137,160,112,83,72,102,127,188,188,3,153,109,141,166, + 205,198,169,111,103,68,129,99,92,148,71,194,193,2,176,216,252,68,216,1,125,28,124,239,142,1,52,188,18,57,100,36,44,24,10,33,127,243,149,6, + 53,202,19,76,102,44,49,27,2,132,66,82,67,73,148,130,10,77,254,13,62,5,79,158,129,150,155,6,87,92,32,55,178,36,30,202,250,249,203,0, + 0,2,0,115,255,227,5,39,5,240,0,24,0,33,0,0,1,21,46,1,35,34,7,17,22,51,50,54,55,21,14,1,35,32,0,17,16,0,33,50, + 22,1,17,6,7,6,17,16,23,22,5,39,89,232,151,163,121,121,163,151,232,89,106,237,132,254,173,254,122,1,134,1,83,134,237,253,11,35,31,157, + 157,31,5,98,118,65,90,52,251,45,52,90,66,117,72,72,1,159,1,103,1,104,1,159,71,251,19,4,91,27,33,172,254,186,254,187,172,33,0,0, + 255,255,0,195,255,227,8,109,5,240,16,38,0,114,0,0,16,7,0,38,3,70,0,0,0,2,255,214,0,0,5,24,5,213,0,8,0,43,0,153, + 184,0,44,47,184,0,45,47,184,0,21,220,184,0,0,220,184,0,44,16,184,0,40,208,184,0,40,47,184,0,4,220,65,27,0,22,0,4,0,38, + 0,4,0,54,0,4,0,70,0,4,0,86,0,4,0,102,0,4,0,118,0,4,0,134,0,4,0,150,0,4,0,166,0,4,0,182,0,4,0,198, + 0,4,0,214,0,4,0,13,93,65,5,0,229,0,4,0,245,0,4,0,2,93,184,0,0,16,184,0,9,208,184,0,21,16,184,0,11,208,184,0, + 21,16,184,0,31,208,184,0,0,16,184,0,35,208,0,184,0,10,47,186,0,33,0,34,0,3,43,184,0,33,16,48,49,1,6,7,6,21,20,23, + 22,23,17,53,51,21,22,23,22,23,21,38,39,38,39,17,54,55,54,55,21,6,7,6,7,21,33,21,33,53,38,39,38,17,16,55,54,1,119,73, + 51,99,99,51,73,202,56,54,81,76,78,78,55,56,56,55,78,78,77,82,52,56,2,215,252,95,161,107,149,151,105,4,179,29,58,114,205,205,113,59, + 29,3,212,122,110,4,11,18,35,172,43,22,15,4,252,164,4,16,21,43,170,36,18,11,4,42,170,222,32,114,159,1,14,1,18,157,110,0,0,0, + 0,4,0,60,255,207,7,229,6,4,0,25,0,29,0,40,0,50,0,0,1,21,46,1,35,34,6,21,20,22,51,50,54,55,21,14,1,35,34,38, + 53,52,54,51,50,22,37,51,1,35,1,34,6,21,20,22,51,50,54,16,38,36,32,22,21,20,6,32,38,53,52,3,6,94,111,56,121,137,137,121, + 56,111,94,73,130,73,202,236,238,209,67,128,2,221,216,252,68,216,4,107,97,118,118,97,96,119,119,254,223,1,130,218,218,254,126,217,5,151,178,52, + 30,156,148,147,157,31,52,177,34,29,252,209,212,249,27,75,249,203,3,4,158,146,145,159,160,1,32,160,157,248,213,212,248,248,212,213,0,3,0,60, + 255,207,8,77,6,4,0,19,0,45,0,49,0,0,1,17,51,17,20,22,51,50,54,53,17,51,17,35,53,14,1,35,34,38,1,21,46,1,35,34, + 6,21,20,22,51,50,54,55,21,14,1,35,34,38,53,52,54,51,50,22,37,51,1,35,5,92,188,81,80,99,117,188,188,6,144,96,158,161,253,170, + 94,111,56,121,137,137,121,56,111,94,73,130,73,202,236,238,209,67,128,2,221,216,252,68,216,1,76,2,16,253,245,114,105,129,117,1,240,252,144,68, + 9,80,193,4,255,178,52,30,156,148,147,157,31,52,177,34,29,252,209,212,249,27,75,249,203,0,0,0,255,255,0,164,255,227,4,123,5,240,16,6, + 1,82,0,0,255,255,0,111,254,214,5,35,4,227,16,7,3,193,0,0,254,243,0,0,255,255,0,195,0,0,7,38,5,240,16,38,0,114,0,0, + 16,7,0,41,3,3,0,0,0,1,0,73,255,227,7,140,5,251,0,111,0,0,1,15,1,17,33,54,55,54,55,54,51,50,23,22,21,20,7,6, + 35,34,39,38,35,34,7,6,7,6,7,6,17,20,23,22,23,22,51,50,55,54,55,23,6,7,6,35,34,39,38,39,38,53,52,55,33,20,7,6, + 7,6,35,34,39,38,53,52,54,51,50,23,22,23,22,23,22,51,50,55,54,55,54,25,1,34,7,6,7,6,21,20,23,22,31,1,20,7,6,35, + 34,39,38,39,38,53,52,55,54,55,54,51,50,22,3,191,2,108,1,248,40,57,66,75,99,123,61,20,38,27,37,20,22,29,37,48,51,33,40,26, + 22,26,40,26,33,44,22,55,29,51,57,31,37,55,29,96,108,71,59,55,29,28,13,254,19,50,53,93,173,185,104,66,52,44,39,53,15,18,11,22, + 9,39,66,91,81,70,36,37,136,93,99,39,71,9,2,9,9,18,37,33,24,29,20,9,8,125,75,114,126,147,44,167,5,234,31,49,253,188,209,140, + 152,73,103,20,41,29,42,26,33,28,38,33,40,68,59,119,214,254,189,165,130,125,44,22,55,53,59,33,95,39,93,55,58,121,125,169,91,180,207,158, + 163,92,174,64,52,62,35,44,15,18,33,44,11,39,81,70,170,167,0,255,2,106,22,26,40,74,71,31,52,16,36,36,44,16,42,29,18,41,47,57, + 132,121,75,35,37,6,0,0,0,1,0,2,254,249,5,139,5,217,0,80,0,0,5,55,22,51,50,55,54,55,54,55,54,53,52,39,38,39,38,35, + 34,6,7,22,23,22,7,2,7,38,39,38,34,7,39,54,51,50,23,54,53,52,39,38,39,38,53,52,55,54,55,22,23,22,55,54,55,21,14,2, + 35,34,39,38,39,6,7,6,21,20,23,54,55,50,23,22,21,16,7,0,35,34,3,42,105,40,88,37,31,35,27,26,18,13,27,28,49,70,130,83, + 176,69,47,11,13,24,203,79,46,53,53,70,117,22,189,80,85,91,81,70,91,48,48,114,108,211,126,156,27,34,5,145,75,73,125,33,59,73,70,115, + 59,31,31,110,161,237,242,157,59,95,254,233,84,94,205,140,81,31,31,55,57,125,119,178,150,94,108,46,71,137,121,114,92,91,52,254,250,79,57,37, + 35,105,35,222,94,77,88,59,128,165,121,118,64,99,141,132,147,125,7,1,26,2,101,46,73,68,92,26,22,55,73,59,62,50,86,231,167,137,117,211, + 176,254,162,211,254,254,0,0,0,3,0,201,0,0,6,3,5,213,0,3,0,7,0,19,0,0,1,17,51,17,33,17,51,17,37,33,17,33,17,33, + 17,33,17,33,17,33,4,213,202,251,142,202,254,210,1,146,2,22,1,146,254,110,253,234,254,110,5,113,250,243,5,13,250,243,5,13,100,253,136,2, + 120,250,43,2,219,253,37,0,0,1,0,72,0,0,4,135,6,20,0,25,0,0,1,3,35,19,62,1,53,52,38,35,34,6,7,3,35,1,51,3, + 62,1,51,50,22,21,20,6,4,117,131,185,131,9,10,106,95,148,217,32,121,184,1,47,184,119,70,218,120,148,163,9,2,164,253,92,2,157,47,72, + 21,84,94,200,166,253,147,6,20,253,156,94,109,160,145,36,82,0,0,0,0,1,0,90,0,0,4,135,6,20,0,25,0,0,1,51,7,37,23,5, + 3,54,51,50,22,7,3,35,19,18,35,34,6,7,3,35,19,7,39,55,1,136,185,45,1,141,14,254,80,52,170,231,193,151,45,131,184,130,62,248, + 149,209,32,123,185,223,209,14,245,6,20,234,124,97,136,254,245,201,239,232,253,92,2,158,1,61,190,164,253,135,4,127,66,99,76,0,0,1,0,59, + 255,225,3,116,5,240,0,57,0,0,1,15,1,17,16,7,6,35,34,39,38,53,52,55,54,51,50,23,22,23,22,23,22,51,50,55,54,55,54,53, + 17,34,7,6,7,6,21,20,23,20,22,21,20,7,6,35,34,39,38,53,52,55,54,55,54,51,50,22,3,116,30,104,193,130,143,110,60,55,16,26, + 35,27,31,8,11,11,27,20,59,75,81,62,33,31,124,90,97,44,52,6,20,31,22,24,26,22,40,88,77,139,149,181,33,125,5,227,44,22,252,254, + 254,134,194,130,60,55,68,57,15,27,35,7,55,46,27,19,77,61,134,132,190,3,17,26,29,46,49,63,27,22,4,64,9,39,31,18,22,40,77,127, + 88,73,40,39,13,0,0,0,0,2,0,106,255,227,5,70,5,240,0,33,0,50,0,0,63,1,54,51,50,23,22,51,50,55,54,53,52,39,38,53, + 52,63,1,6,21,20,23,22,21,20,7,6,35,34,39,38,35,34,19,54,51,50,23,22,51,50,55,7,6,35,34,38,35,34,7,106,140,111,117,57, + 132,144,33,121,100,71,62,80,80,213,80,80,53,202,186,242,54,129,133,56,94,110,109,141,123,127,122,128,125,125,200,139,111,143,214,143,122,128,90,165, + 39,80,86,137,97,75,126,112,146,109,100,160,140,139,121,107,148,98,188,94,242,222,79,80,5,54,56,49,47,58,170,58,98,58,0,0,0,1,0,68, + 255,227,5,110,5,242,0,74,0,0,1,5,22,23,22,51,50,55,54,53,52,39,55,22,21,20,7,6,35,34,39,38,39,36,35,53,34,7,6,7, + 39,52,55,54,55,54,55,54,19,54,55,54,55,54,51,50,23,22,21,20,7,6,35,34,39,38,39,38,39,38,35,34,7,14,1,7,6,7,6,7, + 6,7,23,51,50,1,219,1,2,110,90,83,60,103,86,66,9,44,24,110,121,121,52,102,88,143,254,251,82,68,55,53,13,53,73,26,49,37,48,55, + 11,5,35,33,64,99,209,114,71,66,14,41,31,44,29,13,11,7,41,51,57,75,46,35,36,4,4,20,22,38,55,66,3,15,62,1,95,110,48,24, + 25,86,66,154,82,30,14,132,14,228,110,121,35,31,72,137,8,66,63,132,24,193,88,33,36,24,57,66,1,127,169,132,128,77,119,62,55,108,26,16, + 46,27,11,59,55,37,44,59,40,211,167,189,117,121,44,68,48,3,0,0,0,2,255,228,255,227,2,210,5,240,0,28,0,38,0,0,1,22,51,50, + 55,51,6,7,6,35,34,39,7,35,54,55,38,53,52,55,18,55,54,51,50,21,6,7,2,1,18,19,54,53,52,35,6,3,6,1,48,41,87,58, + 75,133,60,70,76,70,156,63,75,156,108,80,10,31,117,104,72,123,125,1,18,72,254,184,187,57,30,25,109,97,27,1,12,200,115,102,53,57,139,110, + 147,137,78,85,152,152,2,59,117,81,173,78,93,254,131,254,247,1,92,1,22,147,38,69,87,253,250,145,0,2,0,32,255,227,6,27,6,20,0,31, + 0,39,0,0,19,51,21,51,53,51,21,33,21,33,17,62,1,51,50,0,16,2,35,34,38,39,21,35,17,35,17,35,17,35,53,51,0,16,38,32, + 6,16,22,32,193,184,184,185,2,177,253,79,58,177,123,204,0,255,255,204,123,177,58,185,184,184,161,161,4,155,167,254,220,167,167,1,36,6,20,147, + 147,147,125,254,178,100,97,254,188,253,240,254,188,97,100,168,5,4,250,252,5,4,125,251,227,1,150,231,231,254,106,231,0,2,0,198,0,0,5,162, + 5,213,0,3,0,13,0,0,37,1,35,9,1,33,1,17,51,17,33,1,17,35,5,32,253,22,238,2,234,252,148,1,168,2,208,100,254,88,253,48, + 100,100,5,13,250,243,5,113,251,31,4,225,250,43,4,225,251,31,0,0,0,4,0,54,0,0,7,193,5,213,0,19,0,31,0,43,0,47,2,22, + 177,146,151,66,176,147,176,152,66,0,176,0,47,179,14,15,44,47,176,4,23,60,177,1,149,237,176,0,176,45,221,176,46,60,176,45,176,29,222,176, + 35,205,16,16,177,4,129,63,177,5,10,176,2,23,60,177,11,149,237,176,35,17,176,11,18,176,23,57,176,23,32,70,104,72,176,23,16,176,41,176, + 35,176,29,35,73,105,59,177,128,2,66,177,129,0,66,61,176,29,176,23,35,73,176,128,98,105,176,29,70,96,176,20,70,97,176,146,67,176,1,96, + 35,66,176,146,67,176,1,96,67,176,0,85,88,176,20,176,146,67,176,1,96,67,56,89,176,20,16,178,26,38,32,176,3,23,60,177,128,0,66,177, + 129,0,66,24,48,1,176,48,16,177,3,4,254,176,4,60,176,0,196,176,3,177,17,28,253,176,16,60,16,176,3,177,13,54,252,176,14,60,176,13, + 177,6,28,253,176,7,60,176,15,57,176,15,32,70,104,72,16,176,13,176,10,176,0,176,3,35,73,104,59,176,11,60,16,176,13,176,20,214,176,20, + 176,32,221,176,44,57,176,44,32,70,104,72,176,32,176,38,214,176,38,176,26,176,20,176,32,35,73,105,59,176,47,176,44,176,20,35,73,104,58,16, + 16,16,16,16,176,26,176,49,35,73,176,146,67,176,1,96,35,66,176,146,67,176,1,96,67,176,0,80,88,181,38,26,20,32,44,47,176,146,67,176, + 1,96,67,176,6,23,56,75,176,10,82,88,176,13,176,20,35,73,176,146,67,176,1,96,35,66,176,146,67,176,1,96,67,176,64,80,88,176,146,67, + 176,1,96,67,176,64,97,176,146,67,176,1,96,35,66,180,6,7,13,14,15,176,146,67,176,1,96,67,176,5,23,56,89,89,89,177,128,2,66,177, + 129,0,66,61,176,20,176,26,35,73,176,128,98,105,176,20,70,96,176,23,70,97,176,146,67,176,1,96,35,66,176,146,67,176,1,96,67,176,0,85, + 88,176,23,176,146,67,176,1,96,67,56,89,176,23,16,178,29,35,41,176,3,23,60,177,128,0,66,177,129,0,66,24,49,176,4,176,7,35,73,176, + 0,82,88,12,177,16,15,7,176,15,16,177,6,17,237,176,16,16,177,5,17,253,10,12,2,13,177,5,6,8,176,4,16,176,5,60,11,10,12,3, + 13,177,5,6,8,176,7,16,176,6,60,11,10,89,51,53,50,53,17,33,1,17,52,54,51,21,34,21,17,33,1,17,20,6,1,52,54,51,50,22, + 21,20,6,35,34,38,55,20,22,51,50,54,53,52,38,35,34,6,3,53,33,21,54,147,1,16,2,150,157,186,147,254,240,253,106,157,4,227,144,103, + 103,144,144,103,103,144,140,57,50,50,57,57,50,50,57,140,1,238,170,107,4,192,251,31,3,204,128,149,170,107,251,64,4,225,252,52,128,149,2,110, + 138,191,191,138,138,191,191,138,78,103,103,78,78,103,103,253,68,123,123,0,0,4,1,27,0,0,6,229,5,202,0,12,0,25,0,34,0,45,0,0, + 1,22,17,16,0,33,32,0,3,16,0,33,32,6,33,32,0,17,18,0,33,32,0,17,16,39,5,17,51,50,54,53,52,38,35,37,33,50,22,21, + 20,6,43,1,17,35,6,11,218,254,74,254,209,254,207,254,82,6,1,180,1,49,1,50,41,254,247,254,250,254,134,5,1,117,1,6,1,7,1,121, + 187,253,211,178,99,107,107,99,254,193,1,63,176,180,180,176,178,141,4,241,219,254,206,254,208,254,76,1,180,1,48,1,48,1,182,101,254,133,254,249, + 254,251,254,135,1,121,1,5,1,9,187,119,254,175,88,81,80,88,100,137,131,133,135,254,152,0,0,0,0,2,0,110,254,59,5,67,3,246,0,48, + 0,60,0,0,1,6,21,20,23,54,55,54,51,50,23,22,21,20,7,6,35,34,39,54,55,22,51,50,55,54,53,52,39,38,35,34,1,18,21,20, + 7,6,35,34,39,38,53,16,55,38,53,52,55,3,6,21,20,23,22,23,50,55,54,53,52,2,53,136,31,91,171,219,132,131,70,73,156,121,174,101, + 76,18,9,41,113,122,93,69,38,32,74,189,254,159,135,69,89,131,113,58,63,223,46,232,148,129,31,48,46,65,28,32,3,198,130,190,77,107,101,148, + 189,76,80,171,218,215,167,60,43,29,40,140,104,195,124,72,61,254,121,254,222,124,157,110,142,61,66,134,1,11,252,158,127,238,164,252,239,198,123,117, + 46,70,1,47,52,95,78,0,0,4,0,200,0,0,5,84,5,213,0,3,0,11,0,22,0,31,0,0,1,17,51,17,51,17,33,50,55,17,38,35, + 37,33,50,4,21,20,4,43,1,17,33,1,17,54,55,54,53,52,39,38,1,44,202,100,1,46,24,23,23,24,253,64,2,145,250,1,1,254,255,251, + 254,254,110,3,88,60,45,93,92,44,5,113,250,243,5,13,253,106,2,2,146,2,100,219,211,213,218,253,136,5,90,253,153,22,41,86,159,158,86,41, + 0,4,0,115,254,248,5,217,5,240,0,17,0,25,0,33,0,41,0,0,37,1,35,39,7,6,35,32,0,17,16,0,33,32,0,17,16,2,37,22, + 32,55,17,38,32,7,3,17,6,7,6,16,23,22,1,17,54,55,54,16,39,38,4,66,1,10,244,221,51,17,16,254,197,254,135,1,121,1,59,1, + 58,1,120,209,253,43,108,1,16,108,108,254,240,108,105,36,32,155,155,32,2,222,35,31,155,155,31,27,254,221,239,3,1,1,165,1,97,1,98,1, + 165,254,91,254,158,254,252,254,142,11,50,50,4,215,50,50,251,106,4,84,29,37,182,253,156,181,37,4,53,251,175,29,36,182,2,99,182,36,0,0, + 0,2,0,66,255,238,6,28,6,50,0,12,0,95,0,0,1,17,22,51,50,55,54,53,52,39,38,39,38,19,3,39,6,7,6,7,6,35,34,39, + 38,53,52,55,54,51,50,23,22,23,22,23,22,51,50,55,54,55,54,53,17,34,7,6,21,20,23,30,1,21,20,7,6,34,39,38,53,52,55,54, + 33,54,63,1,21,50,23,22,23,22,21,20,7,6,7,23,22,23,22,51,50,55,54,55,23,6,7,6,35,34,39,38,3,66,31,61,143,93,105,83, + 27,92,90,151,206,86,31,51,48,70,159,185,110,55,59,26,25,35,26,22,27,17,22,16,26,70,102,83,57,33,33,231,129,60,9,2,16,29,35,53, + 29,44,104,189,1,34,29,59,60,182,137,132,50,88,110,103,154,90,82,123,26,44,29,31,35,17,31,35,57,62,59,75,33,81,5,161,253,73,7,97, + 103,194,163,83,27,20,15,251,22,1,230,9,192,136,137,68,163,53,64,55,42,26,24,22,26,31,39,16,26,83,58,121,125,158,3,42,130,55,72,25, + 48,9,53,15,35,33,31,24,44,73,145,108,187,13,29,28,64,28,31,51,88,167,191,110,104,48,222,205,123,31,31,40,50,24,114,58,61,31,79,0, + 0,2,0,83,255,227,6,108,5,241,0,73,0,88,0,0,5,38,53,52,39,38,35,34,15,1,21,20,7,6,35,34,39,38,53,22,23,20,23,22, + 50,55,54,53,17,52,39,38,35,34,7,6,20,23,22,51,23,34,39,38,53,52,55,54,51,50,23,22,23,55,54,51,50,23,22,21,20,7,6,7, + 50,23,22,23,22,21,20,23,55,23,1,22,21,17,55,54,55,54,53,52,39,38,35,34,7,5,2,82,22,40,79,42,92,120,103,103,140,141,102,103, + 45,46,64,64,144,63,64,64,63,92,81,65,64,64,64,83,54,151,102,103,103,102,151,162,101,30,16,211,187,112,47,36,126,65,66,125,58,49,36,27, + 32,45,144,42,252,164,21,154,144,77,74,74,24,31,64,102,29,183,159,140,91,166,43,56,199,206,118,117,117,118,176,12,12,122,86,87,87,87,150,2, + 155,149,88,87,87,86,202,86,87,92,117,118,156,157,117,117,117,35,32,98,87,14,49,177,87,123,124,94,49,36,104,123,131,128,118,67,91,4,83,75, + 92,254,149,71,67,104,102,121,151,32,10,47,0,5,0,200,0,0,6,50,5,213,0,9,0,30,0,38,0,46,0,50,0,0,1,38,39,38,43,1, + 22,23,19,51,1,30,1,23,19,33,3,46,1,43,1,17,33,17,33,32,22,21,20,7,6,1,17,33,50,55,17,38,35,23,17,54,55,54,16,39, + 38,37,17,51,17,4,251,76,68,69,120,45,77,101,143,199,254,248,53,113,62,205,254,72,191,74,139,120,20,254,110,2,167,1,0,252,117,49,253,149, + 1,69,24,23,23,24,152,65,43,90,89,42,252,178,202,1,127,151,48,49,47,201,254,229,2,79,25,132,126,254,104,1,127,150,98,253,137,5,213,214, + 216,208,98,41,2,165,253,106,2,2,146,2,23,253,153,22,41,86,1,62,85,41,45,250,243,5,13,0,0,2,0,169,0,0,6,131,5,213,0,8, + 0,31,0,167,184,0,32,47,184,0,33,47,184,0,32,16,184,0,14,208,184,0,14,47,184,0,13,220,184,0,0,208,184,0,33,16,184,0,19,220, + 184,0,5,220,65,5,0,234,0,5,0,250,0,5,0,2,93,65,27,0,25,0,5,0,41,0,5,0,57,0,5,0,73,0,5,0,89,0,5,0, + 105,0,5,0,121,0,5,0,137,0,5,0,153,0,5,0,169,0,5,0,185,0,5,0,201,0,5,0,217,0,5,0,13,93,184,0,9,208,184,0, + 9,47,186,0,30,0,14,0,19,17,18,57,0,184,0,13,47,184,0,26,47,184,0,29,47,186,0,15,0,0,0,3,43,184,0,15,16,186,0,2, + 0,11,0,3,43,184,0,2,16,48,49,1,17,51,50,54,53,52,38,35,1,6,43,1,17,35,17,33,50,4,21,20,7,23,55,51,9,1,35,11, + 1,35,1,1,115,254,141,154,154,141,1,32,115,173,254,202,1,200,251,1,1,78,174,190,232,254,205,1,67,233,207,212,232,1,73,5,47,253,207,146, + 135,134,146,253,95,54,253,168,5,213,227,219,172,107,219,234,254,134,254,107,1,4,254,252,1,149,0,0,0,4,0,201,255,37,5,84,6,199,0,5, + 0,36,0,43,0,46,0,0,1,17,51,19,38,35,19,22,23,22,23,19,35,3,38,39,38,39,1,39,55,35,17,33,50,23,55,37,55,5,7,22, + 23,22,21,20,6,11,1,54,55,54,53,52,1,19,35,1,147,209,200,63,92,252,65,62,58,65,205,217,191,75,69,54,84,254,174,111,70,94,1,200, + 126,95,11,254,186,44,1,182,56,27,23,126,131,124,167,84,51,74,253,219,143,143,5,47,253,238,1,248,26,253,141,22,72,68,130,254,104,1,127,151, + 48,38,9,252,176,44,175,5,213,26,27,130,111,174,140,16,19,107,216,141,186,1,231,254,93,15,45,68,131,98,252,135,1,103,0,0,0,2,1,3, + 3,139,6,40,5,216,0,39,0,52,0,0,1,21,46,1,35,34,6,21,20,22,31,1,30,1,21,20,6,35,34,38,39,53,30,1,51,50,54,53, + 52,38,47,1,46,1,53,52,54,51,50,22,55,51,27,1,51,17,35,17,3,35,3,17,35,2,230,85,87,39,65,71,47,69,56,112,105,144,140,52, + 115,71,91,100,47,69,75,55,63,56,112,99,138,124,51,105,208,184,161,162,184,138,140,135,141,137,5,183,89,34,19,42,47,40,32,11,9,18,86,65, + 79,91,19,21,96,42,24,44,50,44,42,10,9,18,77,61,72,92,15,5,254,172,1,84,253,200,1,148,254,216,1,40,254,108,0,0,0,3,255,252, + 0,0,8,48,4,96,0,7,0,19,0,25,0,0,3,33,21,33,17,35,17,33,5,33,21,33,17,33,21,33,17,33,21,33,1,51,17,33,21,33, + 4,3,179,254,114,152,254,115,2,224,2,111,254,22,1,213,254,43,1,246,253,133,2,239,133,1,224,253,155,4,96,128,252,32,3,224,96,102,254,247, + 102,254,187,102,3,128,252,230,102,0,0,0,0,2,1,39,3,147,6,70,5,213,0,12,0,20,0,62,64,33,1,6,7,16,10,4,18,14,9,3, + 6,201,13,2,0,129,21,1,9,5,98,3,9,98,11,13,99,15,98,19,99,17,21,16,212,228,252,228,212,236,212,236,17,57,49,0,16,244,60,60, + 236,23,50,212,60,60,196,17,57,48,1,27,1,51,17,35,17,3,35,3,17,35,17,35,21,35,17,35,17,35,53,4,74,174,164,170,113,195,55,203, + 114,113,203,114,201,5,213,255,0,1,0,253,190,1,228,254,209,1,47,254,28,2,66,94,254,28,1,228,94,0,0,0,0,1,0,16,255,34,5,104, + 6,196,0,16,0,0,9,1,37,55,5,1,19,1,51,1,35,11,1,39,9,1,51,1,215,1,1,254,186,44,1,182,254,162,166,1,218,210,253,199, + 229,158,253,111,1,45,254,163,211,3,77,2,134,130,111,174,252,144,254,70,4,233,250,43,1,158,253,132,44,2,245,3,146,0,0,0,0,2,0,92, + 0,0,5,153,5,213,0,3,0,13,0,0,37,1,35,1,3,33,21,1,33,21,33,53,1,33,1,200,3,56,234,252,200,107,5,15,252,200,3,79, + 250,195,3,56,252,223,100,5,13,250,243,5,113,100,250,243,100,100,5,13,0,1,0,88,254,76,4,47,6,20,0,31,0,0,23,22,32,54,53,52, + 38,35,33,53,1,33,53,1,33,53,33,21,1,33,21,1,50,30,1,21,16,7,6,33,34,39,88,170,1,163,193,185,165,254,240,1,247,254,9,1, + 247,253,196,3,36,254,39,1,217,254,39,172,223,166,141,185,254,254,187,212,167,99,163,204,134,147,166,1,101,147,1,101,147,168,254,176,168,254,176,97, + 212,138,254,211,102,134,74,0,255,255,0,78,0,0,5,207,5,231,16,6,3,61,0,0,255,255,0,78,255,227,5,207,5,202,16,6,1,115,0,0, + 0,1,0,24,254,206,4,149,6,68,0,85,0,0,1,55,54,55,54,53,52,39,38,35,34,7,6,35,34,39,38,53,55,51,6,23,22,51,50,55, + 50,54,51,50,22,23,22,21,20,7,6,7,23,54,51,50,23,22,21,16,3,6,33,34,39,52,39,38,39,38,35,34,7,39,54,55,54,51,50,23, + 22,21,20,23,22,51,50,55,54,55,54,53,52,39,38,39,38,35,34,7,1,142,95,125,121,106,35,49,81,24,128,150,26,92,36,24,152,35,35,35, + 35,130,44,84,17,71,17,71,92,24,60,130,132,108,2,71,50,251,101,36,176,242,254,215,115,97,2,4,16,24,35,48,69,24,75,88,81,60,77,17, + 11,25,30,64,152,117,74,38,39,17,20,33,103,176,108,93,2,168,138,9,121,106,141,46,35,46,11,11,35,25,33,211,60,35,33,5,6,22,24,59, + 71,163,129,132,66,3,14,152,119,128,254,235,254,250,200,24,135,28,44,16,24,60,36,61,44,35,35,22,119,85,25,30,116,75,121,121,152,86,63,64, + 33,106,46,0,0,1,0,68,0,0,2,10,4,96,0,13,0,0,33,17,52,39,38,43,1,53,51,50,23,22,21,17,1,78,34,36,108,88,110,182, + 80,82,2,213,145,46,48,156,96,98,212,253,54,0,0,0,255,255,0,201,0,0,5,106,5,213,16,6,0,46,0,0,255,255,0,16,0,0,5,104, + 7,109,16,6,0,135,0,0,0,3,0,92,0,0,5,223,6,46,0,50,0,63,0,82,0,0,1,23,50,23,22,21,20,7,6,41,1,55,50,55, + 54,55,54,53,17,34,7,6,21,20,23,20,22,21,20,7,6,35,34,39,38,53,52,55,54,37,55,23,50,23,22,23,22,21,20,7,6,5,50,55, + 54,53,52,39,38,39,38,35,17,20,1,5,50,55,54,55,54,53,52,39,38,39,38,35,34,7,6,7,6,4,113,7,169,95,95,121,220,254,179,253, + 115,59,150,134,57,29,31,185,130,77,11,13,19,33,44,25,17,38,113,160,1,8,152,9,198,145,143,48,73,103,75,254,138,204,113,83,70,42,101,108, + 134,254,232,1,92,136,108,104,48,88,86,46,84,77,118,75,73,31,46,88,3,84,16,97,94,128,174,125,218,117,134,59,139,132,211,2,131,130,73,77, + 11,61,5,44,13,51,19,33,22,35,86,134,116,159,39,73,64,28,31,51,72,108,154,104,74,51,112,82,129,117,70,42,27,24,253,194,29,253,40,2, + 26,29,48,88,185,114,86,44,24,24,6,236,110,206,0,0,0,1,0,130,255,232,5,55,5,240,0,61,0,0,1,23,54,37,30,1,23,22,23,22, + 55,21,6,7,38,39,6,7,6,21,20,23,22,23,30,1,21,20,7,6,7,39,54,55,54,53,52,39,38,55,34,7,6,21,16,23,22,45,1,21, + 6,7,6,36,39,38,39,38,53,52,55,54,2,75,71,152,1,47,11,40,11,17,16,22,105,140,104,59,117,41,29,24,11,3,15,15,15,70,115,198, + 26,90,73,35,46,33,19,125,73,105,176,222,1,107,1,1,215,101,192,254,143,130,93,46,48,94,192,5,53,35,108,114,28,119,31,40,15,22,33,46, + 68,14,36,187,13,34,28,57,66,71,22,51,50,75,37,141,70,110,31,35,22,73,35,116,51,185,116,82,93,134,218,254,185,176,225,38,127,57,136,75, + 40,86,130,92,143,145,181,209,189,147,0,0,0,2,0,125,255,231,6,89,5,45,0,26,0,41,0,0,37,22,23,22,32,55,54,55,51,6,7,6, + 32,36,2,53,52,18,36,51,50,4,18,21,33,34,21,53,20,51,33,50,53,17,38,39,38,35,34,7,6,7,1,144,67,93,150,1,74,152,106,77, + 111,95,142,179,254,122,254,155,198,201,1,103,190,189,1,103,202,251,74,19,19,3,144,20,70,95,152,159,160,152,95,68,228,77,51,84,84,60,96,120, + 71,90,179,1,65,175,176,1,69,174,174,254,187,176,19,73,19,19,1,112,80,51,82,81,52,79,0,0,0,2,0,87,255,227,4,96,4,68,0,28, + 0,37,0,0,1,6,21,20,23,22,51,50,55,54,55,51,6,7,6,32,39,38,53,52,55,54,0,51,32,17,20,7,6,55,54,53,52,35,34,6, + 3,32,1,44,4,34,59,158,116,57,102,24,135,40,149,104,254,100,111,78,15,49,1,82,240,1,135,205,209,107,112,227,134,186,57,1,65,1,152,38, + 34,94,62,110,35,63,81,127,89,62,153,107,155,68,77,253,1,52,254,235,199,103,105,224,77,113,171,204,254,237,0,0,0,1,0,162,255,227,4,134, + 5,240,0,69,0,0,1,23,6,7,6,35,34,39,38,39,38,53,52,55,54,63,1,38,39,38,53,52,55,54,51,50,23,22,21,20,7,6,35,34, + 39,38,53,52,55,54,53,52,39,38,35,34,7,6,21,20,23,22,23,22,51,21,34,7,6,7,6,21,20,23,22,51,50,55,54,55,4,39,95,31, + 16,178,251,143,105,108,69,95,134,109,178,2,108,61,79,99,123,241,136,84,51,45,50,34,41,23,13,28,26,37,43,102,97,64,97,80,47,90,95,124, + 171,123,119,58,109,97,90,194,129,117,62,13,1,73,104,65,17,172,34,37,64,95,169,174,138,108,24,21,36,61,80,148,139,99,122,83,50,86,78,45, + 50,22,14,33,28,36,43,31,37,36,43,64,101,151,125,78,48,23,26,54,30,29,57,110,153,166,97,91,117,62,95,0,0,1,0,84,255,223,6,17, + 6,11,0,77,0,0,1,23,7,6,35,34,39,38,39,17,33,7,35,21,20,7,6,7,6,33,34,39,38,53,52,55,54,51,50,23,22,23,22,23, + 22,51,50,55,54,55,54,61,1,33,55,33,17,38,35,34,7,6,21,20,31,1,20,7,6,35,34,39,38,53,52,55,54,33,50,23,55,21,22,23, + 22,51,50,55,5,238,35,88,39,58,39,55,225,63,1,60,61,255,42,42,77,198,254,244,128,95,52,30,27,46,31,13,18,22,19,27,66,94,108,123, + 62,29,33,254,151,39,1,66,97,62,193,110,71,7,20,25,35,26,38,35,31,119,167,1,52,36,66,154,187,143,48,22,48,33,5,242,19,163,75,20, + 61,25,253,220,68,99,152,132,128,75,202,95,52,66,40,31,26,11,20,48,51,26,66,123,62,99,101,130,185,68,2,73,24,110,70,84,61,31,73,44, + 26,31,31,31,70,180,119,167,8,55,75,46,22,9,48,0,0,1,0,201,0,0,4,35,5,213,0,9,0,0,41,1,53,33,17,33,53,33,17,51, + 4,35,252,166,2,144,253,176,2,80,202,170,1,184,170,2,201,0,0,0,0,1,0,57,255,199,8,66,6,2,0,107,0,0,1,17,20,23,22,23, + 22,51,50,55,54,55,23,6,7,6,34,39,38,39,38,17,52,2,55,6,3,2,3,7,39,2,3,38,39,38,39,17,20,7,6,7,6,35,34,39, + 38,53,52,55,54,51,50,23,22,51,50,54,55,54,53,17,38,35,34,7,6,15,1,54,55,54,55,54,51,50,23,51,22,19,18,19,23,18,55,18, + 55,54,51,50,23,22,21,20,7,6,35,34,39,38,39,38,39,38,35,34,7,6,6,215,22,22,44,27,28,53,40,46,39,42,39,69,96,159,57,55, + 18,6,7,5,174,121,123,55,97,20,59,102,55,59,62,70,51,46,94,80,101,77,68,42,29,24,35,55,29,28,64,44,106,33,28,72,104,72,60,61, + 20,46,15,24,27,37,95,121,143,105,7,165,112,112,51,11,84,125,128,156,152,178,66,39,29,18,30,44,36,8,22,7,11,4,25,26,29,26,42,5, + 29,253,53,220,128,129,47,22,44,44,64,33,59,68,97,57,55,158,84,2,1,30,1,145,31,179,254,196,254,201,254,86,77,15,1,230,1,59,169,110, + 119,70,254,15,237,187,179,94,79,63,47,44,37,33,24,59,62,106,121,116,159,2,214,88,60,59,125,3,102,63,69,39,95,110,165,254,250,254,244,254, + 177,11,1,72,244,1,2,151,152,39,29,29,39,16,35,9,22,13,29,4,24,22,46,0,0,2,0,104,255,231,3,74,3,41,0,11,0,23,0,0, + 1,52,38,35,34,2,21,20,22,51,50,18,3,50,22,21,20,2,35,34,38,53,52,18,2,169,87,79,109,141,86,80,109,141,194,152,203,221,162,152, + 203,221,1,247,116,125,254,254,207,116,123,1,4,1,253,216,163,198,254,255,216,163,198,1,1,0,0,0,0,1,0,103,255,227,5,178,5,240,0,52, + 0,0,9,1,22,21,20,7,52,39,1,7,6,31,1,22,20,7,6,43,1,53,54,53,52,47,1,38,52,63,1,39,38,53,52,55,20,23,9,1, + 39,38,53,52,55,20,31,1,22,21,20,7,52,47,1,3,196,1,139,99,144,50,252,251,155,62,66,172,100,61,86,69,245,196,47,98,53,140,154,241, + 99,144,50,2,108,1,25,116,99,144,50,182,99,144,50,18,2,208,254,117,99,49,130,76,83,50,3,5,156,63,66,172,100,214,44,62,56,63,93,29, + 47,99,54,188,141,155,241,99,49,130,76,83,50,253,150,1,25,116,99,49,130,76,83,50,182,99,49,130,76,83,50,18,0,1,255,251,255,227,5,57, + 5,241,0,48,0,0,1,17,51,22,21,20,15,1,14,1,35,33,34,46,1,53,52,63,1,62,1,51,33,17,52,39,46,1,35,33,34,46,3,53, + 52,62,1,51,50,23,30,2,51,33,50,22,4,190,79,44,30,135,17,20,34,251,244,22,24,24,34,133,17,20,36,3,132,20,20,37,64,253,127,59, + 53,72,29,22,4,16,20,25,12,12,42,31,28,2,214,89,91,4,182,252,35,4,36,20,27,135,18,6,2,20,18,16,34,134,16,6,3,120,50,13, + 16,6,4,24,49,91,71,40,32,20,32,30,31,4,87,0,0,1,0,27,255,184,3,65,5,240,0,44,0,0,1,33,50,23,22,20,14,1,7,30, + 1,18,16,7,6,35,34,38,47,1,14,1,35,33,34,53,52,63,1,62,1,51,33,17,33,34,38,53,52,54,50,23,22,23,22,1,84,1,80,108, + 30,19,12,48,37,2,2,61,10,24,45,22,18,6,14,100,18,44,254,109,70,34,133,17,20,36,1,133,254,186,109,71,20,45,12,23,46,16,5,143, + 55,35,42,40,47,10,26,130,253,36,254,251,34,83,30,31,97,101,14,40,16,33,135,16,6,3,205,113,126,66,25,30,59,6,2,0,0,1,0,86, + 255,184,4,186,5,240,0,38,0,0,1,33,34,38,53,52,62,1,51,50,23,30,2,51,33,50,30,2,21,20,14,1,7,30,1,23,18,21,20,7, + 6,35,34,38,39,38,53,4,10,253,0,109,71,4,16,20,25,12,12,42,31,28,3,10,53,71,26,6,12,48,37,2,2,4,57,10,23,46,24,17, + 12,12,4,166,113,126,40,31,20,31,30,32,4,31,48,26,11,16,40,47,10,26,130,38,253,74,147,115,33,83,39,68,81,73,0,0,0,2,0,70, + 0,0,2,215,6,20,0,11,0,21,0,0,19,52,54,51,50,22,21,20,6,35,34,38,1,51,21,33,53,51,17,35,53,33,188,112,81,79,111,111, + 79,81,112,1,131,152,253,111,151,151,1,249,5,84,81,111,111,81,79,111,110,251,117,121,121,3,53,121,0,2,0,90,255,213,7,82,5,59,0,9, + 0,27,0,0,18,16,0,33,32,0,16,0,33,32,5,1,21,7,30,1,21,16,0,33,32,0,17,16,0,33,32,4,254,1,72,1,27,1,26,1, + 72,254,184,254,230,254,229,3,233,1,35,239,2,2,254,91,254,159,254,158,254,91,1,165,1,98,1,4,1,114,3,101,254,72,254,253,1,3,1,184, + 1,1,194,1,10,244,221,33,35,16,254,197,254,135,1,121,1,59,1,58,1,120,209,0,0,4,0,151,0,0,9,76,4,96,0,9,0,12,0,20, + 0,32,0,0,19,33,21,33,17,33,21,33,17,35,1,3,33,1,51,1,35,39,33,7,35,1,51,27,1,51,9,1,35,9,1,35,1,151,2,131, + 254,20,1,188,254,68,151,3,131,181,1,106,255,0,151,1,119,138,90,254,68,90,140,3,214,143,245,246,144,254,195,1,82,144,254,235,254,233,144,1, + 96,4,96,128,254,182,127,253,233,3,8,254,67,2,53,252,128,230,230,3,128,254,179,1,77,254,82,254,46,1,125,254,131,1,222,0,0,3,0,36, + 255,240,5,122,4,96,0,15,0,45,0,49,0,0,37,53,34,39,38,39,38,53,17,35,17,20,22,23,22,50,3,22,51,50,55,21,6,35,34,39, + 38,53,17,35,17,33,17,35,34,6,21,35,52,54,51,33,21,35,17,20,1,51,17,35,5,22,137,44,26,9,14,134,23,20,57,225,89,8,108,40, + 72,116,132,253,42,21,167,254,178,61,90,50,100,114,165,4,15,182,253,33,134,134,90,52,64,39,33,56,162,2,12,253,214,166,122,25,69,1,66,175, + 10,241,16,202,98,253,1,227,252,4,3,252,76,115,168,123,100,254,18,89,254,175,3,152,0,2,0,0,254,115,5,90,4,123,0,8,0,29,0,0, + 1,22,19,18,17,51,16,3,2,3,16,3,2,35,34,7,35,52,55,54,51,32,19,18,19,51,2,3,2,17,1,215,174,85,69,130,69,108,52,70, + 140,197,169,24,100,71,81,245,1,180,137,110,160,130,203,67,70,4,29,193,254,92,254,167,254,120,1,159,1,66,1,253,250,190,2,27,1,42,2,87, + 159,98,79,90,253,61,1,154,1,14,254,143,254,201,254,190,253,253,0,0,0,2,0,200,0,0,5,48,5,213,0,3,0,9,0,0,1,17,51,17, + 37,21,33,17,33,17,1,44,202,3,58,253,42,254,110,5,113,250,243,5,13,100,100,250,143,5,213,0,0,3,0,201,0,0,6,1,5,213,0,3, + 0,7,0,15,0,0,1,17,51,17,33,17,51,17,1,33,17,33,17,33,17,33,4,211,202,251,144,202,4,10,254,110,253,236,254,110,5,56,5,113, + 250,243,5,13,250,243,5,13,250,143,5,113,250,143,5,213,0,2,0,25,254,119,6,83,5,193,0,5,0,17,0,0,9,2,33,9,2,21,33,9, + 1,33,21,33,53,9,1,53,1,166,3,16,253,6,254,252,2,250,252,240,5,151,252,25,2,250,252,240,4,23,249,198,3,7,253,23,254,218,3,89, + 3,42,252,214,252,167,6,231,100,252,214,252,167,99,99,3,83,3,21,127,0,1,0,163,255,227,5,187,5,240,0,29,0,0,1,17,33,21,33,17, + 54,36,51,32,0,17,16,0,33,34,36,39,53,30,1,51,32,0,17,16,0,33,34,6,1,107,1,74,253,238,117,1,26,160,1,94,1,139,254,117, + 254,162,146,254,249,111,112,252,139,1,18,1,19,254,237,254,238,107,168,4,254,254,111,166,2,129,83,85,254,103,254,147,254,146,254,103,72,70,215,95, + 96,1,50,1,47,1,46,1,50,37,0,0,0,1,0,8,0,0,3,169,5,213,0,5,0,23,181,2,28,0,58,3,6,16,220,252,236,49,0,180, + 3,149,4,129,1,47,244,236,48,33,35,17,33,53,33,3,169,202,253,41,3,161,5,43,170,0,0,0,0,1,0,7,0,0,3,168,5,213,0,5, + 0,23,181,4,28,1,58,3,6,16,220,252,236,49,0,180,3,149,0,129,2,47,228,236,48,1,17,33,53,33,17,3,168,252,95,2,215,5,213,250, + 43,170,5,43,0,1,255,252,0,0,4,231,5,213,0,8,0,0,33,35,9,1,35,1,17,51,17,4,231,217,254,98,254,101,217,2,16,203,2,102, + 253,154,3,14,2,199,253,57,0,4,0,87,0,0,6,74,5,213,0,11,0,19,0,23,0,34,0,0,1,32,23,22,21,20,7,2,0,41,1,1, + 5,3,51,50,55,19,38,35,33,3,51,19,5,3,54,55,54,19,54,53,52,39,38,3,124,1,178,168,116,23,75,254,34,254,80,253,253,1,34,1, + 127,251,99,245,173,226,147,246,254,111,251,202,251,2,175,205,27,25,208,65,20,102,18,5,213,181,124,223,99,118,254,126,254,150,5,213,100,250,243,65, + 4,139,65,250,243,5,13,120,251,227,16,19,157,1,80,102,85,194,109,19,0,4,0,90,255,227,5,173,6,20,0,10,0,31,0,35,0,50,0,0, + 19,6,21,20,23,22,23,19,6,7,6,1,33,55,6,7,6,35,34,2,53,52,55,54,0,51,50,23,22,23,19,33,7,1,51,9,1,3,22,51, + 50,55,54,55,54,53,52,39,38,35,34,231,31,42,32,54,175,66,56,119,3,120,254,178,33,78,98,98,124,203,158,34,35,1,62,203,124,79,79,39, + 118,1,78,254,254,247,134,1,9,253,50,189,24,26,165,119,120,31,31,56,55,165,26,2,116,158,75,115,79,61,32,3,134,32,61,130,252,237,168,100, + 48,49,1,12,148,80,178,178,1,68,49,48,100,2,94,100,250,172,5,84,254,100,252,54,3,130,130,159,158,74,116,104,105,0,0,0,0,3,0,91, + 255,227,4,147,4,123,0,10,0,40,0,50,0,0,19,6,21,20,23,22,23,19,6,7,6,19,22,51,50,55,54,55,7,6,7,6,35,32,39,38, + 53,52,55,18,55,54,51,50,23,22,21,20,15,1,33,55,33,54,53,52,39,38,35,34,7,218,12,78,22,30,161,38,35,160,168,71,95,121,127,90, + 92,23,107,108,109,107,254,244,125,90,15,53,181,179,252,228,102,70,16,18,253,143,20,2,1,10,57,78,169,74,67,2,48,60,55,141,104,29,22,3, + 58,21,28,130,253,74,21,31,22,40,117,42,22,22,156,111,166,68,77,1,19,162,161,145,99,147,70,80,90,100,56,50,118,82,115,17,0,3,0,79, + 0,0,2,129,6,20,0,3,0,7,0,11,0,0,1,51,7,35,3,51,19,35,19,33,19,33,1,201,184,46,184,212,134,178,134,36,254,178,218,1, + 78,6,20,233,251,57,3,152,252,4,4,96,0,3,255,22,254,86,2,129,6,20,0,3,0,12,0,26,0,0,1,51,7,35,3,19,35,3,6,7, + 54,55,54,5,35,55,51,50,55,54,55,19,33,3,6,7,6,1,201,184,46,184,102,202,134,208,35,53,72,50,75,254,220,220,20,49,105,48,47,29, + 233,1,78,222,41,100,101,6,20,233,250,191,4,18,251,208,181,84,15,48,72,244,100,48,49,153,4,172,251,140,214,96,96,0,0,0,0,2,0,59, + 255,227,5,184,5,240,0,38,0,48,0,0,9,1,14,1,21,35,52,18,55,1,51,23,62,1,51,50,0,21,20,6,7,30,1,21,20,6,35,34, + 38,39,53,30,1,51,50,54,53,52,38,55,62,1,53,52,38,35,34,6,7,3,186,254,4,59,72,186,116,93,254,233,252,143,104,228,131,241,1,50, + 134,134,48,50,222,184,83,165,85,87,158,68,105,131,59,50,91,85,212,160,95,166,73,2,64,2,8,89,203,114,132,1,2,126,1,31,149,89,87,254, + 237,215,128,225,99,63,125,60,162,197,36,36,182,47,49,111,88,51,103,206,81,161,88,146,194,63,64,0,0,1,0,81,0,0,3,136,4,96,0,9, + 0,36,64,9,5,9,8,11,70,0,6,2,10,16,196,196,212,236,236,50,49,0,64,8,7,135,6,3,135,0,188,2,47,228,236,212,236,48,1,17, + 33,53,33,17,33,53,33,17,3,136,252,201,2,127,254,7,1,249,4,96,251,160,147,1,111,147,1,203,255,255,0,137,255,227,7,96,5,240,16,39, + 11,34,3,53,0,0,16,38,0,123,0,0,16,7,11,78,4,139,253,100,255,255,0,137,255,227,7,116,5,240,16,39,11,34,3,53,0,0,16,38, + 0,123,0,0,16,7,11,80,4,139,253,100,255,255,0,137,255,227,10,174,5,240,16,39,11,34,3,53,0,0,16,38,0,123,0,0,16,39,0,123, + 4,139,253,100,16,7,11,73,7,192,253,100,255,255,0,137,255,227,7,88,5,240,16,38,0,123,0,0,16,39,11,34,3,53,0,0,16,7,0,117, + 4,139,253,100,255,255,0,94,255,227,7,88,5,240,16,38,0,116,0,0,16,39,11,34,3,53,0,0,16,7,0,117,4,139,253,100,255,255,0,137, + 255,227,7,94,5,240,16,38,0,123,0,0,16,39,11,34,3,53,0,0,16,7,11,76,4,139,253,100,255,255,0,94,255,227,7,94,5,240,16,38, + 0,116,0,0,16,39,11,34,3,53,0,0,16,7,11,76,4,139,253,100,255,255,0,98,255,227,7,94,5,240,16,38,0,117,0,0,16,39,11,34, + 3,53,0,0,16,7,11,76,4,139,253,100,255,255,0,63,255,227,7,94,5,240,16,38,11,75,0,0,16,39,11,34,3,53,0,0,16,7,11,76, + 4,139,253,100,255,255,0,137,255,227,7,126,5,240,16,38,0,123,0,0,16,39,11,34,3,53,0,0,16,7,11,77,4,139,253,100,255,255,0,102, + 255,227,7,126,5,240,16,38,11,76,0,0,16,39,11,34,3,53,0,0,16,7,11,77,4,139,253,100,255,255,0,137,255,227,7,119,5,240,16,38, + 0,123,0,0,16,39,11,34,3,53,0,0,16,7,11,79,4,139,253,100,255,255,0,98,255,227,7,119,5,240,16,38,0,117,0,0,16,39,11,34, + 3,53,0,0,16,7,11,79,4,139,253,100,255,255,0,102,255,227,7,119,5,240,16,38,11,76,0,0,16,39,11,34,3,53,0,0,16,7,11,79, + 4,139,253,100,255,255,0,108,255,227,7,119,5,240,16,38,11,78,0,0,16,39,11,34,3,53,0,0,16,7,11,79,4,139,253,100,255,255,0,137, + 255,227,6,2,5,240,16,38,0,123,0,0,16,7,11,34,3,53,0,0,255,255,0,201,0,0,1,147,5,213,16,6,0,44,0,0,255,255,0,201, + 0,0,3,39,5,213,16,38,0,44,0,0,16,7,0,44,1,148,0,0,255,255,0,201,0,0,4,187,5,213,16,38,0,44,0,0,16,39,0,44, + 1,148,0,0,16,7,0,44,3,40,0,0,255,255,0,201,0,0,7,81,5,213,16,38,0,44,0,0,16,7,0,57,1,233,0,0,255,255,0,16, + 0,0,5,104,5,213,16,6,0,57,0,0,255,255,0,16,0,0,6,152,5,213,16,38,0,57,0,0,16,7,0,44,5,5,0,0,255,255,0,16, + 0,0,8,44,5,213,16,38,0,57,0,0,16,39,0,44,5,5,0,0,16,7,0,44,6,153,0,0,255,255,0,16,0,0,9,192,5,213,16,38, + 0,57,0,0,16,39,0,44,5,5,0,0,16,39,0,44,6,153,0,0,16,7,0,44,8,45,0,0,255,255,0,201,0,0,7,23,5,213,16,38, + 0,44,0,0,16,7,0,59,1,220,0,0,255,255,0,61,0,0,5,59,5,213,16,6,0,59,0,0,255,255,0,61,0,0,6,174,5,213,16,38, + 0,59,0,0,16,7,0,44,5,27,0,0,255,255,0,61,0,0,8,66,5,213,16,38,0,59,0,0,16,39,0,44,5,27,0,0,16,7,0,44, + 6,175,0,0,255,255,0,201,0,0,4,106,5,213,16,6,0,47,0,0,255,255,0,115,255,227,5,39,5,240,16,6,0,38,0,0,255,255,0,201, + 0,0,5,176,5,213,16,6,0,39,0,0,255,255,0,201,0,0,6,31,5,213,16,6,0,48,0,0,255,255,0,193,0,0,1,121,6,20,16,6, + 0,76,0,0,255,255,0,193,0,0,2,233,6,20,16,38,0,76,0,0,16,7,0,76,1,112,0,0,255,255,0,193,0,0,4,89,6,20,16,38, + 0,76,0,0,16,39,0,76,1,112,0,0,16,7,0,76,2,224,0,0,255,255,0,193,0,0,6,65,6,20,16,38,0,76,0,0,16,7,0,89, + 1,194,0,0,255,255,0,61,0,0,4,127,4,96,16,6,0,89,0,0,255,255,0,61,0,0,5,189,6,20,16,38,0,89,0,0,16,7,0,76, + 4,68,0,0,255,255,0,61,0,0,7,45,6,20,16,38,0,89,0,0,16,39,0,76,4,68,0,0,16,7,0,76,5,180,0,0,255,255,0,61, + 0,0,8,157,6,20,16,38,0,89,0,0,16,39,0,76,4,68,0,0,16,39,0,76,5,180,0,0,16,7,0,76,7,36,0,0,255,255,0,193, + 0,0,6,74,6,20,16,38,0,76,0,0,16,7,0,91,1,209,0,0,255,255,0,59,0,0,4,121,4,96,16,6,0,91,0,0,255,255,0,59, + 0,0,5,212,6,20,16,38,0,91,0,0,16,7,0,76,4,91,0,0,255,255,0,59,0,0,7,68,6,20,16,38,0,91,0,0,16,39,0,76, + 4,91,0,0,16,7,0,76,5,203,0,0,255,255,0,193,0,0,1,121,6,20,16,6,0,79,0,0,255,255,0,113,255,227,3,231,4,123,16,6, + 0,70,0,0,255,255,0,113,255,227,4,90,6,20,16,6,0,71,0,0,255,255,0,186,0,0,7,29,4,123,16,6,0,80,0,0,0,3,0,121, + 0,0,9,125,5,213,0,13,0,22,0,31,0,0,1,32,0,17,16,0,41,1,32,0,17,16,0,33,1,51,32,0,17,16,0,33,35,3,17,35, + 32,0,17,16,0,33,6,53,1,178,1,150,254,104,254,80,253,140,254,80,254,104,1,150,1,178,1,159,244,1,53,1,31,254,225,254,203,244,202,244, + 254,203,254,225,1,31,1,53,5,213,254,151,254,128,254,126,254,150,1,106,1,130,1,128,1,105,250,209,1,24,1,46,1,44,1,23,251,119,4,137, + 254,233,254,212,254,210,254,232,0,3,0,201,0,0,5,176,5,213,0,17,0,26,0,35,0,251,186,0,9,0,27,0,3,43,184,0,9,16,186,0, + 14,0,23,0,3,43,184,0,14,16,186,0,31,0,5,0,3,43,184,0,31,16,184,0,9,16,184,0,0,208,65,5,0,234,0,5,0,250,0,5, + 0,2,93,65,27,0,25,0,5,0,41,0,5,0,57,0,5,0,73,0,5,0,89,0,5,0,105,0,5,0,121,0,5,0,137,0,5,0,153,0, + 5,0,169,0,5,0,185,0,5,0,201,0,5,0,217,0,5,0,13,93,184,0,9,16,184,0,18,208,65,5,0,234,0,23,0,250,0,23,0,2, + 93,65,27,0,25,0,23,0,41,0,23,0,57,0,23,0,73,0,23,0,89,0,23,0,105,0,23,0,121,0,23,0,137,0,23,0,153,0,23,0, + 169,0,23,0,185,0,23,0,201,0,23,0,217,0,23,0,13,93,184,0,31,16,184,0,37,220,0,186,0,2,0,34,0,3,43,184,0,2,16,186, + 0,28,0,8,0,3,43,184,0,28,16,186,0,19,0,0,0,3,43,184,0,19,16,186,0,10,0,18,0,3,43,184,0,10,16,48,49,1,21,51, + 32,0,17,16,0,33,35,21,51,32,22,21,20,6,35,3,17,51,50,54,53,52,38,35,1,33,32,0,17,16,0,41,1,1,147,244,1,53,1,31, + 254,225,254,203,244,72,1,0,240,241,255,72,78,159,147,147,159,254,232,1,159,1,178,1,150,254,104,254,80,254,97,1,89,179,1,24,1,46,1,44, + 1,23,178,194,207,208,195,2,158,253,232,129,140,138,129,1,222,254,151,254,128,254,126,254,150,0,0,0,0,5,0,121,0,0,9,125,5,213,0,17, + 0,26,0,40,0,49,0,67,0,0,1,21,51,32,22,21,20,6,43,1,21,51,32,0,17,16,0,33,3,51,50,54,53,52,38,43,1,19,33,32, + 0,17,16,0,41,1,32,0,17,16,0,1,17,35,34,6,21,20,22,51,19,53,35,32,0,17,16,0,33,51,53,35,34,38,53,52,54,33,5,96, + 72,1,0,240,241,255,72,244,1,53,1,31,254,225,254,203,244,78,159,147,147,159,78,213,253,140,254,80,254,104,1,150,1,178,2,116,1,178,1,150, + 254,104,252,177,78,159,147,147,159,78,244,254,203,254,225,1,31,1,53,244,72,255,241,240,1,0,5,47,178,194,207,208,195,179,1,24,1,46,1,44, + 1,23,252,176,129,140,138,129,252,9,1,106,1,130,1,128,1,105,254,151,254,128,254,126,254,150,1,223,2,24,129,138,140,129,2,158,178,254,233,254, + 212,254,210,254,232,179,195,208,207,194,0,0,255,255,0,115,255,227,5,39,5,240,16,6,1,72,0,0,255,255,0,127,255,227,3,245,4,123,16,6, + 2,22,0,0,0,1,0,115,254,86,5,39,5,240,0,28,0,0,1,21,46,1,35,32,0,17,16,0,33,50,54,55,17,35,17,6,7,6,35,32, + 0,17,16,0,33,50,22,5,39,102,231,130,255,0,254,240,1,16,1,0,130,231,102,201,12,12,118,132,254,173,254,122,1,134,1,83,134,237,5,98, + 213,95,94,254,199,254,216,254,217,254,199,94,95,253,16,1,185,4,4,36,1,159,1,103,1,104,1,159,71,0,0,0,255,255,0,87,255,227,7,88, + 5,240,16,39,11,34,3,53,0,0,16,39,0,117,4,139,253,100,16,6,11,73,0,0,0,1,0,100,0,204,6,63,4,56,0,9,0,129,180,2, + 9,6,0,10,16,212,212,204,50,64,9,64,2,64,9,48,2,48,9,4,93,49,64,10,2,5,9,1,0,6,5,156,6,10,0,16,212,236,17,57, + 57,204,16,204,48,64,12,8,9,9,0,8,7,8,7,156,0,9,0,7,5,16,252,60,8,6,16,60,64,12,3,2,2,1,3,4,3,4,156,1, + 2,1,7,5,16,252,60,8,6,16,60,176,16,75,83,88,0,179,3,2,8,9,16,60,16,60,180,8,156,9,9,0,7,5,16,236,180,3,156,2, + 2,1,7,5,16,236,89,19,53,1,23,7,33,21,33,23,7,100,1,137,120,233,4,195,251,61,233,120,2,85,90,1,137,120,233,170,233,120,0,0, + 0,1,1,163,0,0,5,15,5,220,0,9,0,129,64,10,2,5,9,1,0,6,5,156,6,10,16,212,236,17,57,57,204,16,204,49,0,180,2,9, + 6,0,10,16,212,212,204,50,64,9,79,2,79,9,63,2,63,9,4,93,48,64,12,8,9,9,0,8,7,8,7,156,0,9,0,7,4,16,252,60, + 8,6,16,60,64,12,3,2,2,1,3,4,3,4,156,1,2,1,7,4,16,252,60,8,6,16,60,176,16,75,83,88,1,179,3,2,8,9,16,60, + 16,60,180,8,156,9,9,0,7,4,16,236,180,3,156,2,2,1,7,4,16,236,89,1,51,1,7,39,17,35,17,7,39,3,45,90,1,136,120,232, + 170,234,120,5,220,254,118,120,234,251,60,4,196,234,120,0,0,1,0,117,0,204,6,80,4,56,0,9,0,129,180,2,9,0,6,10,16,212,212,204, + 50,64,9,79,2,79,9,95,2,95,9,4,93,49,64,10,9,6,2,1,0,5,6,156,5,10,0,16,212,236,17,57,57,204,16,204,48,64,12,8, + 9,9,0,8,7,8,7,156,0,9,0,7,5,16,252,60,8,6,16,60,64,12,3,2,2,1,3,4,3,4,156,1,2,1,7,5,16,252,60,8, + 6,16,60,176,16,75,83,88,0,179,3,2,8,9,16,60,16,60,180,8,156,9,9,0,7,5,16,236,180,3,156,2,2,1,7,5,16,236,89,1, + 21,1,39,55,33,53,33,39,55,6,80,254,119,120,233,251,61,4,195,233,120,2,175,90,254,119,120,233,170,233,120,0,0,1,1,163,255,249,5,15, + 5,213,0,9,0,129,64,10,9,6,2,1,0,5,6,156,5,10,16,212,236,17,57,57,204,16,204,49,0,180,2,9,0,6,10,16,212,212,204,50, + 64,9,64,2,64,9,80,2,80,9,4,93,48,64,12,8,9,9,0,8,7,8,7,156,0,9,0,7,4,16,252,60,8,6,16,60,64,12,3,2, + 2,1,3,4,3,4,156,1,2,1,7,4,16,252,60,8,6,16,60,176,16,75,83,88,1,179,3,2,8,9,16,60,16,60,180,8,156,9,9,0, + 7,4,16,236,180,3,156,2,2,1,7,4,16,236,89,5,35,1,55,23,17,51,17,55,23,3,135,90,254,118,120,234,170,232,120,7,1,138,120,234, + 4,196,251,60,234,120,0,0,0,1,0,100,0,204,6,80,4,56,0,15,0,218,182,7,10,9,2,15,0,16,16,212,204,50,212,204,50,64,13,80, + 2,80,15,95,10,95,7,79,10,79,7,6,93,49,0,64,15,7,2,4,10,15,0,1,8,9,4,13,4,156,13,16,16,212,236,17,23,57,204,50, + 16,204,50,48,64,12,14,15,15,0,14,13,14,13,156,0,15,0,7,5,16,252,60,8,6,16,60,64,12,3,2,2,1,3,4,3,4,156,1,2, + 1,7,5,16,252,60,8,6,16,60,64,12,11,10,10,9,11,12,11,12,156,9,9,10,7,5,16,252,60,8,6,16,60,64,12,6,7,7,8,6, + 5,6,5,156,8,7,8,7,5,16,252,60,8,6,16,60,176,16,75,83,88,0,183,11,10,6,7,3,2,14,15,16,60,16,60,16,60,16,60,180, + 14,156,15,15,0,7,5,16,236,180,3,156,2,2,1,7,5,16,236,180,11,156,10,10,9,7,5,16,236,180,6,156,7,7,8,7,5,16,236,89, + 19,53,1,23,7,33,39,55,1,21,1,39,55,33,23,7,100,1,137,120,233,3,188,233,120,1,137,254,119,120,233,252,68,233,120,2,85,90,1,137, + 120,233,233,120,254,119,90,254,119,120,233,233,120,0,0,0,0,1,1,163,255,239,5,15,5,220,0,15,0,222,64,15,7,2,4,10,15,0,1,8, + 9,4,13,4,156,13,16,16,212,236,17,23,57,204,50,16,204,50,49,0,182,7,10,9,2,15,0,16,16,212,204,50,212,204,50,64,17,95,2,95, + 15,80,10,80,7,79,2,79,15,64,10,64,7,8,93,48,64,12,14,15,15,0,14,13,14,13,156,0,15,0,7,4,16,252,60,8,6,16,60,64, + 12,3,2,2,1,3,4,3,4,156,1,2,1,7,4,16,252,60,8,6,16,60,64,12,11,10,10,9,11,12,11,12,156,9,9,10,7,4,16,252, + 60,8,6,16,60,64,12,6,7,7,8,6,5,6,5,156,8,7,8,7,4,16,252,60,8,6,16,60,176,16,75,83,88,1,183,11,10,6,7,3, + 2,14,15,16,60,16,60,16,60,16,60,180,14,156,15,15,0,7,4,16,236,180,3,156,2,2,1,7,4,16,236,180,11,156,10,10,9,7,4,16, + 236,180,6,156,7,7,8,7,4,16,236,89,1,51,1,7,39,17,55,23,1,35,1,55,23,17,7,39,3,45,90,1,136,120,232,232,120,254,120,90, + 254,118,120,234,234,120,5,220,254,118,120,234,252,67,234,120,254,118,1,138,120,234,3,189,234,120,0,0,0,1,1,32,0,52,5,159,4,179,0,9, + 0,0,1,55,33,21,33,1,7,1,17,35,1,32,63,2,44,254,182,3,94,120,252,162,169,4,116,63,169,252,162,120,3,94,254,182,0,1,1,32, + 0,52,5,159,4,179,0,9,0,0,1,23,17,35,17,1,39,1,33,53,5,96,63,169,252,162,120,3,94,254,182,4,179,63,253,212,1,74,252,162, + 120,3,94,169,0,1,1,32,0,52,5,159,4,179,0,9,0,0,37,7,33,53,33,1,55,1,17,51,5,159,63,253,212,1,74,252,162,120,3,94, + 169,115,63,169,3,94,120,252,162,1,74,0,0,1,1,32,0,52,5,159,4,179,0,9,0,0,37,39,17,51,17,1,23,1,33,21,1,95,63,169, + 3,94,120,252,162,1,74,52,63,2,44,254,182,3,94,120,252,162,169,0,0,1,0,100,0,204,6,63,4,56,0,17,0,0,1,3,39,19,33,23, + 7,1,53,1,23,7,33,19,23,3,33,21,4,66,200,148,151,253,255,233,120,254,119,1,137,120,233,2,100,200,148,151,1,154,2,45,254,165,85,1, + 6,233,120,1,137,90,1,137,120,233,1,91,85,254,250,170,0,1,0,117,0,204,6,80,4,56,0,17,0,0,1,19,23,3,33,39,55,1,21,1, + 39,55,33,3,39,19,33,53,2,114,200,148,151,2,1,233,120,1,137,254,119,120,233,253,156,200,148,151,254,102,2,215,1,91,85,254,250,233,120,254, + 119,90,254,119,120,233,254,165,85,1,6,170,0,1,0,44,0,211,6,158,3,80,0,52,0,0,1,22,23,22,51,50,55,62,1,55,54,55,54,55, + 54,51,50,23,22,23,22,23,7,38,39,38,39,38,35,34,7,6,7,6,7,6,7,6,7,6,35,34,39,38,47,1,17,35,17,55,33,21,5,1, + 237,35,47,41,56,53,44,48,70,21,34,60,59,78,74,88,91,71,82,55,60,34,157,21,35,33,50,41,56,53,44,47,36,35,21,31,63,50,87,71, + 91,88,74,78,59,160,169,63,2,44,254,182,1,244,33,21,19,19,21,70,48,79,60,58,34,32,32,37,55,60,79,65,48,35,33,23,19,19,20,36, + 35,48,73,66,53,39,32,32,34,58,160,254,182,2,44,63,169,1,0,0,0,1,0,22,0,211,6,136,3,80,0,52,0,0,1,55,37,53,33,23, + 17,35,17,7,6,7,6,35,34,39,38,39,38,39,38,39,38,39,38,35,34,7,6,7,6,7,39,54,55,54,55,54,51,50,23,22,23,22,23,30, + 1,23,22,51,50,55,54,4,199,160,254,182,2,44,63,169,160,59,78,74,88,91,71,87,50,63,31,21,35,36,47,44,53,56,41,50,33,35,21,157, + 34,60,55,82,71,91,88,74,78,59,60,34,21,70,48,44,53,56,41,47,1,244,160,1,169,63,253,212,1,74,160,58,34,32,32,39,53,66,73,48, + 35,36,20,19,19,23,33,35,48,65,79,60,55,37,32,32,34,58,60,79,48,70,21,19,19,21,0,0,0,1,0,100,0,204,6,63,4,56,0,17, + 0,0,19,1,23,7,51,1,23,7,33,21,33,23,7,1,35,23,7,1,100,1,137,120,233,240,1,97,120,233,2,227,253,29,233,120,254,159,240,233, + 120,254,119,2,175,1,137,120,233,1,97,120,233,170,233,120,1,97,233,120,1,137,0,0,0,1,1,165,0,0,5,17,5,220,0,17,0,0,9,1, + 7,39,21,1,7,39,17,35,17,7,39,1,53,7,39,1,3,135,1,138,120,234,1,98,120,234,170,232,120,1,96,232,120,1,136,5,220,254,118,120, + 234,240,254,158,120,234,253,28,2,228,234,120,1,98,240,234,120,1,138,0,0,1,0,117,0,204,6,80,4,56,0,17,0,0,9,1,39,55,35,1, + 39,55,33,53,33,39,55,1,51,39,55,1,6,80,254,119,120,233,240,254,159,120,233,253,29,2,227,233,120,1,97,240,233,120,1,137,2,85,254,119, + 120,233,254,159,120,233,170,233,120,254,159,233,120,254,119,0,0,1,1,165,255,249,5,17,5,213,0,17,0,0,5,1,55,23,53,1,55,23,17,51, + 17,55,23,1,21,55,23,1,3,47,254,118,120,234,254,158,120,234,170,232,120,254,160,232,120,254,120,7,1,138,120,234,240,1,98,120,234,2,228,253, + 28,234,120,254,158,240,234,120,254,118,0,0,0,1,0,100,0,204,6,63,4,56,0,14,0,0,19,53,1,23,7,33,1,23,9,1,7,1,33,23, + 7,100,1,137,120,233,2,234,1,97,120,254,194,1,62,120,254,159,253,22,233,120,2,85,90,1,137,120,233,1,97,120,254,194,254,194,120,1,97,233, + 120,0,0,0,0,1,0,117,0,204,6,80,4,56,0,14,0,0,9,1,39,55,33,1,39,9,1,55,1,33,39,55,1,6,80,254,119,120,233,253, + 22,254,159,120,1,62,254,194,120,1,97,2,234,233,120,1,137,2,85,254,119,120,233,254,159,120,1,62,1,62,120,254,159,233,120,254,119,0,0,0, + 0,1,0,100,0,204,6,63,4,56,0,13,0,0,1,33,23,7,1,53,1,23,7,33,17,51,17,35,5,149,251,231,233,120,254,119,1,137,120,233, + 4,25,170,170,2,45,233,120,1,137,90,1,137,120,233,1,89,252,164,0,0,1,1,165,0,0,5,15,5,220,0,13,0,0,37,17,7,39,1,51, + 1,7,39,17,33,21,33,53,3,5,232,120,1,136,90,1,136,120,232,1,90,252,164,170,4,26,234,120,1,138,254,118,120,234,251,230,170,170,0,0, + 0,1,0,117,0,204,6,80,4,56,0,13,0,134,183,12,9,10,6,2,156,4,14,16,212,236,50,212,204,50,64,9,79,9,79,12,95,9,95,12, + 4,93,49,64,10,9,5,11,10,6,156,12,3,1,14,0,16,212,204,204,252,57,57,204,204,48,64,12,8,9,9,10,8,7,8,7,156,10,9,10, + 7,5,16,252,60,8,6,16,60,64,12,13,12,12,11,13,0,13,0,156,11,12,11,7,5,16,252,60,8,6,16,60,176,16,75,83,88,0,179,13, + 12,8,9,16,60,16,60,180,8,156,9,9,10,7,5,16,236,180,13,156,12,12,11,7,5,16,236,89,1,33,17,35,17,51,17,33,39,55,1,21, + 1,39,5,56,251,231,170,170,4,25,233,120,1,137,254,119,120,2,45,254,167,3,92,254,167,233,120,254,119,90,254,119,120,0,0,0,0,1,1,165, + 255,249,5,15,5,213,0,13,0,0,1,33,53,33,21,33,17,55,23,1,35,1,55,23,3,5,254,168,3,92,254,166,232,120,254,120,90,254,120,120, + 232,5,43,170,170,251,230,234,120,254,118,1,138,120,234,0,0,1,1,165,0,0,5,15,5,220,0,19,0,0,1,55,23,1,33,21,33,53,33,1, + 55,23,17,7,39,1,51,1,7,39,3,175,232,120,254,120,1,130,252,164,1,128,254,120,120,232,232,120,1,136,90,1,136,120,232,1,194,234,120,254, + 118,170,170,1,138,120,234,3,2,234,120,1,138,254,118,120,234,0,0,0,0,1,0,100,0,204,6,62,4,134,0,37,0,0,1,53,50,23,22,23, + 30,1,21,20,6,7,6,7,6,35,33,23,7,1,53,1,23,7,33,32,55,54,55,62,1,53,52,38,39,38,39,38,5,19,62,52,50,47,43,45, + 43,45,39,58,49,32,252,72,233,120,254,119,1,137,120,233,1,217,1,217,22,24,19,18,20,19,19,19,24,22,3,220,170,22,21,45,41,111,61,60, + 106,46,40,26,22,233,120,1,137,90,1,137,120,233,10,10,18,17,49,26,27,46,20,18,10,10,0,0,0,1,0,118,0,204,6,80,4,134,0,41, + 0,0,1,34,7,6,7,6,7,6,21,20,23,22,23,22,23,22,51,33,39,55,1,21,1,39,55,33,34,39,38,39,38,39,38,53,52,55,54,55, + 54,55,54,51,1,161,27,22,24,19,18,10,10,10,12,16,19,24,22,27,3,151,233,120,1,137,254,119,120,233,252,105,65,49,58,39,45,21,22,22, + 23,43,47,50,52,62,3,220,10,10,18,17,26,23,27,26,23,28,15,18,10,10,233,120,254,119,90,254,119,120,233,22,26,40,46,52,54,60,61,54, + 57,41,45,21,22,0,0,0,0,2,0,100,0,204,6,62,4,134,0,24,0,62,0,0,1,51,50,55,54,55,54,55,54,53,52,39,38,39,38,39, + 38,34,7,6,7,6,7,6,21,7,53,52,55,54,55,54,55,54,51,50,23,22,23,22,23,22,21,20,7,6,7,6,7,6,43,1,21,35,53,33, + 23,7,1,53,1,23,7,4,145,130,27,22,24,19,18,10,10,10,10,18,19,24,22,54,22,24,19,16,12,10,169,22,23,43,47,50,52,62,65,49, + 58,39,45,21,22,22,23,43,47,50,52,62,130,169,253,148,233,120,254,119,1,137,120,233,2,215,10,10,18,17,26,23,26,27,23,26,17,18,10,10, + 10,10,18,15,28,23,27,130,130,61,54,57,41,45,21,22,22,26,40,46,52,54,61,60,54,57,41,45,21,22,220,220,233,120,1,137,90,1,137,120, + 233,0,0,0,0,2,0,118,0,204,6,80,4,134,0,24,0,62,0,0,1,53,52,39,38,39,38,39,38,34,7,6,7,6,7,6,21,20,23,22, + 23,22,23,22,51,41,1,39,55,1,21,1,39,55,33,21,35,53,35,34,39,38,39,38,39,38,53,52,55,54,55,54,55,54,51,50,23,22,23,22, + 23,22,21,2,35,10,12,16,19,24,22,54,22,24,19,18,10,10,10,10,18,19,24,22,27,1,43,2,108,233,120,1,137,254,119,120,233,253,148,169, + 130,62,52,50,47,43,23,22,22,21,45,39,58,49,65,62,52,50,47,43,23,22,2,215,130,27,23,28,15,18,10,10,10,10,18,17,26,23,27,26, + 23,26,17,18,10,10,233,120,254,119,90,254,119,120,233,220,220,22,21,45,41,57,54,60,61,54,52,46,40,26,22,22,21,45,41,57,54,61,0,0, + 0,1,0,100,0,204,6,80,4,56,0,88,0,0,1,35,23,7,1,53,1,23,7,51,50,23,22,23,30,1,50,54,55,54,55,54,55,54,55,54, + 51,50,23,22,23,22,23,22,23,30,1,50,54,55,54,55,54,59,1,39,55,1,21,1,39,55,35,34,7,6,7,6,7,6,34,39,38,39,38,39, + 38,39,38,39,38,34,7,6,7,6,7,6,7,6,7,6,34,39,38,39,38,39,38,1,134,10,233,120,254,119,1,137,120,233,10,48,36,35,36,10, + 24,27,24,10,10,5,16,32,34,37,39,45,48,36,39,32,33,15,5,10,10,24,27,24,10,39,32,39,45,10,233,120,1,137,254,119,120,233,10,14, + 11,13,10,31,40,39,90,38,40,31,34,15,4,10,10,13,11,28,11,13,10,9,5,15,34,31,40,38,90,39,40,31,10,13,11,2,45,233,120,1, + 137,90,1,137,120,233,18,18,36,10,12,12,10,12,13,45,35,37,17,18,18,20,34,38,42,13,12,10,12,12,10,39,15,18,233,120,254,119,90,254, + 119,120,233,6,6,10,34,20,18,18,20,34,38,42,13,12,10,6,6,6,6,10,9,16,42,38,34,20,18,18,20,34,10,6,6,0,0,1,0,100, + 0,190,6,80,4,70,0,23,0,0,37,39,19,33,23,7,1,53,1,23,7,33,19,23,3,33,39,55,1,21,1,39,55,33,3,16,160,112,254,156, + 233,120,254,119,1,137,120,233,1,162,134,160,112,1,100,233,120,1,137,254,119,120,233,254,94,190,58,1,53,233,120,1,137,90,1,137,120,233,1,111, + 58,254,203,233,120,254,119,90,254,119,120,233,0,1,1,42,255,252,5,157,5,216,0,13,0,0,9,1,19,23,3,1,3,37,23,1,39,1,55,19, + 4,9,253,33,157,167,94,2,223,193,1,13,98,254,57,89,254,193,139,190,4,8,254,88,3,120,29,253,238,1,168,251,184,190,139,254,192,16,1,200, + 98,254,241,0,0,1,1,90,0,0,5,9,5,242,0,11,0,0,1,17,35,17,33,23,7,1,53,1,23,7,5,9,170,254,19,233,120,254,119,1, + 137,120,233,4,145,251,111,3,231,233,120,1,137,90,1,137,120,233,0,0,0,1,1,172,0,0,5,91,5,242,0,11,0,0,1,33,39,55,1,21, + 1,39,55,33,17,35,1,172,2,151,233,120,1,137,254,119,120,233,254,19,170,4,145,233,120,254,119,90,254,119,120,233,252,25,0,0,0,1,1,90, + 255,227,5,9,5,213,0,11,0,0,1,33,23,7,1,53,1,23,7,33,17,51,5,9,253,105,233,120,254,119,1,137,120,233,1,237,170,1,68,233, + 120,1,137,90,1,137,120,233,3,231,0,0,0,1,1,172,255,227,5,91,5,213,0,11,0,0,1,17,51,17,33,39,55,1,21,1,39,55,1,172, + 170,1,237,233,120,1,137,254,119,120,233,1,68,4,145,252,25,233,120,254,119,90,254,119,120,233,0,0,0,1,1,221,255,249,6,20,4,212,0,11, + 0,0,1,17,55,23,1,35,1,55,23,17,33,53,4,179,233,120,254,119,90,254,119,120,233,253,212,4,212,252,61,233,120,254,119,1,137,120,233,3, + 25,170,0,0,0,1,0,100,0,204,5,63,5,3,0,11,0,0,1,33,23,7,1,53,1,23,7,33,17,51,5,63,252,61,233,120,254,119,1,137, + 120,233,3,25,170,2,45,233,120,1,137,90,1,137,120,233,2,44,0,0,0,1,0,45,1,160,6,101,5,88,0,38,0,0,1,55,23,1,35,1, + 55,23,53,52,55,54,55,54,55,54,32,23,22,23,22,23,22,21,35,52,38,39,38,39,38,34,7,6,7,6,7,6,21,2,57,232,120,254,120,90, + 254,118,120,234,46,45,92,90,110,108,1,0,108,110,90,92,45,46,170,66,66,60,86,74,190,78,82,64,64,35,33,2,184,234,120,254,118,1,138,120, + 234,50,127,112,107,95,86,49,46,46,49,86,95,107,112,127,93,162,66,59,39,33,33,35,63,64,83,81,93,0,0,0,0,1,0,79,1,160,6,135, + 5,88,0,38,0,0,1,53,52,39,38,39,38,39,38,34,7,6,7,14,1,21,35,52,55,54,55,54,55,54,32,23,22,23,22,23,22,29,1,55, + 23,1,35,1,55,4,123,33,35,64,64,82,78,190,74,86,60,66,66,170,46,45,92,90,110,108,1,0,108,110,90,92,45,46,234,120,254,118,90,254, + 120,120,2,184,50,93,81,83,64,63,35,33,33,39,59,66,162,93,127,112,107,95,86,49,46,46,49,86,95,107,112,127,50,234,120,254,118,1,138,120, + 0,2,0,222,0,52,6,77,5,213,0,3,0,13,0,0,19,53,33,21,5,55,33,21,33,1,7,1,17,35,222,5,111,250,211,63,2,44,254,182, + 3,94,120,252,162,169,5,114,99,99,254,63,169,252,162,120,3,94,254,182,0,2,0,112,255,161,6,68,5,99,0,13,0,27,0,0,19,53,33,39, + 55,1,17,51,17,35,17,1,39,55,1,33,23,7,1,17,35,17,51,17,1,23,7,33,112,4,18,234,120,1,138,170,170,254,118,120,234,1,194,251, + 238,234,120,254,118,170,170,1,138,120,234,4,18,1,1,170,232,120,254,120,1,78,253,8,1,80,254,120,120,232,2,88,232,120,1,136,254,176,2,248, + 254,178,1,136,120,232,0,0,0,1,0,211,0,127,6,25,5,112,0,54,0,0,1,6,7,6,21,20,22,23,22,23,22,50,55,54,55,62,1,53, + 52,39,38,47,1,17,35,17,55,33,21,33,23,22,23,22,21,20,7,6,7,6,7,6,35,34,39,38,39,38,39,38,53,52,55,54,55,2,2,68, + 32,33,66,66,60,86,74,190,78,82,64,66,66,33,34,66,35,170,64,2,44,254,182,35,90,47,46,46,48,89,84,116,103,133,128,108,112,88,89,48, + 46,46,45,92,4,43,66,81,81,93,90,162,66,59,39,33,33,35,63,66,162,90,93,81,81,66,35,254,182,2,44,64,170,35,90,112,112,127,124,112, + 113,89,83,52,46,46,48,87,89,113,112,124,127,112,107,95,0,1,0,157,0,127,5,227,5,112,0,54,0,0,1,55,22,23,22,21,20,7,6,7, + 6,7,6,35,34,39,38,39,38,39,38,53,52,55,54,63,1,33,53,33,23,17,35,17,7,6,7,6,21,20,22,23,22,23,22,50,55,54,55,62, + 1,53,52,39,38,4,180,120,92,45,46,46,48,89,88,112,108,128,133,103,116,84,89,48,46,46,47,90,35,254,182,2,44,64,170,35,66,34,33,66, + 66,64,82,78,190,74,86,60,66,66,33,32,4,43,120,95,107,112,127,124,112,113,89,87,48,46,46,52,83,89,113,112,124,127,112,112,90,35,170,64, + 253,212,1,74,35,66,81,81,93,90,162,66,63,35,33,33,39,59,66,162,90,93,81,81,0,1,0,100,2,45,6,63,4,56,0,6,0,75,179,2, + 6,0,7,16,212,204,204,180,64,5,80,5,2,93,49,181,2,1,5,156,6,7,0,16,212,252,57,204,48,64,12,3,2,2,1,3,4,3,4,156, + 1,2,1,7,5,16,252,60,8,6,16,60,176,16,75,83,88,0,182,3,156,2,2,1,3,2,16,60,7,5,16,236,89,19,53,1,23,7,33,21, + 100,1,137,120,233,4,195,2,45,130,1,137,120,233,170,0,0,1,0,100,0,204,6,63,2,215,0,6,0,75,179,5,2,0,7,16,212,204,204,180, + 64,5,80,5,2,93,49,181,5,6,1,156,2,7,0,16,212,236,57,204,48,64,12,4,5,5,6,4,3,4,3,156,6,5,6,7,5,16,252,60, + 8,6,16,60,176,16,75,83,88,0,182,4,156,5,5,6,4,5,16,60,7,5,16,236,89,19,33,21,33,23,7,1,100,5,219,251,61,233,120,254, + 119,2,215,170,233,120,1,137,0,1,3,5,0,0,5,15,5,220,0,6,0,0,1,51,1,7,39,17,35,3,5,130,1,136,120,232,170,5,220,254, + 118,120,234,251,60,0,0,0,0,1,1,163,0,0,3,175,5,220,0,6,0,0,1,17,35,17,7,39,1,3,175,170,234,120,1,138,5,220,250,36, + 4,196,234,120,1,138,0,0,0,1,0,117,2,45,6,80,4,56,0,6,0,75,179,5,6,2,7,16,212,212,204,180,79,5,95,5,2,93,49,181, + 5,6,2,156,1,7,0,16,212,252,57,204,48,64,12,4,5,5,6,4,3,4,3,156,6,5,6,7,5,16,252,60,8,6,16,60,176,16,75,83, + 88,0,182,4,156,5,5,6,4,5,16,60,7,5,16,236,89,1,33,53,33,39,55,1,6,80,250,37,4,195,233,120,1,137,2,45,170,233,120,254, + 119,0,0,0,0,1,0,117,0,204,6,80,2,215,0,6,0,75,179,2,0,6,7,16,212,212,204,180,79,5,95,5,2,93,49,181,2,1,6,156, + 5,7,0,16,212,236,57,204,48,64,12,3,2,2,1,3,4,3,4,156,1,2,1,7,5,16,252,60,9,7,16,60,176,16,75,83,88,0,182,3, + 156,2,2,1,3,2,16,60,7,5,16,236,89,1,21,1,39,55,33,53,6,80,254,119,120,233,251,61,2,215,130,254,119,120,233,170,0,1,3,5, + 0,0,5,15,5,220,0,6,0,0,33,17,51,17,55,23,1,3,5,170,232,120,254,120,5,220,251,60,234,120,254,118,0,1,1,163,0,0,3,175, + 5,220,0,6,0,0,33,35,1,55,23,17,51,3,175,130,254,118,120,234,170,1,138,120,234,4,196,0,255,255,0,100,255,160,6,80,5,100,16,39, + 12,21,0,0,254,212,16,7,12,23,0,0,1,44,0,0,255,255,0,119,255,249,6,59,5,220,16,39,12,24,1,44,0,0,16,7,12,22,254,212, + 0,0,0,0,255,255,0,100,255,160,6,80,5,100,16,39,12,23,0,0,254,212,16,7,12,21,0,0,1,44,0,0,0,1,0,100,255,160,6,63, + 5,100,0,17,0,0,1,3,53,1,23,7,33,21,33,23,7,33,21,33,23,7,1,53,1,99,255,1,137,120,233,4,195,251,61,215,215,4,195,251, + 61,233,120,254,119,2,130,0,255,90,1,137,120,233,170,215,215,170,233,120,1,137,90,0,0,1,0,120,0,0,6,60,5,220,0,17,0,0,1,19, + 51,1,7,39,17,35,17,7,39,17,35,17,7,39,1,51,3,90,254,90,1,138,120,234,170,214,216,170,232,120,1,136,90,4,220,1,0,254,118,120, + 234,251,60,4,196,216,216,251,60,4,196,234,120,1,138,0,0,1,0,118,255,160,6,81,5,100,0,17,0,0,1,5,21,1,39,55,33,53,33,39, + 55,33,53,33,39,55,1,21,5,82,0,255,254,119,120,233,251,61,4,195,215,215,251,61,4,195,233,120,1,137,2,130,255,90,254,119,120,233,170,215, + 215,170,233,120,254,119,90,0,0,1,0,120,255,249,6,60,5,213,0,17,0,0,37,1,35,1,55,23,17,51,17,55,23,17,51,17,55,23,1,35, + 3,90,255,0,90,254,120,120,232,170,216,214,170,234,120,254,118,90,249,255,0,1,138,120,234,4,196,251,60,216,216,4,196,251,60,234,120,254,118,0, + 255,255,0,100,0,14,6,80,4,246,16,39,12,70,0,0,255,66,16,7,12,65,0,0,0,190,0,0,255,255,0,100,0,14,6,80,4,246,16,39, + 12,66,0,0,255,66,16,7,12,69,0,0,0,190,0,0,0,2,0,100,0,204,6,63,4,56,0,4,0,26,0,0,1,33,7,23,33,37,7,33, + 21,33,7,39,55,33,23,7,1,53,1,23,7,33,55,23,7,33,21,3,247,253,153,105,105,1,238,1,38,121,2,20,253,167,117,130,73,254,208,93, + 120,254,119,1,137,120,93,2,52,117,130,73,1,85,2,235,105,105,210,210,120,202,75,127,93,120,1,137,90,1,137,120,93,202,75,127,120,0,0,0, + 0,3,0,100,0,193,6,80,4,67,0,23,0,28,0,33,0,0,37,39,55,35,23,7,1,53,1,23,7,33,55,23,7,51,39,55,1,21,1,39, + 55,33,19,7,33,55,39,41,1,7,23,33,3,7,141,62,176,93,120,254,119,1,137,120,93,1,84,81,141,62,176,93,120,1,137,254,119,120,93,254, + 172,120,76,1,160,105,105,254,12,254,96,105,105,1,84,193,52,172,93,120,1,137,90,1,137,120,93,224,52,172,93,120,254,119,90,254,119,120,93,1, + 74,210,105,105,105,105,0,0,0,2,0,117,0,204,6,80,4,56,0,4,0,26,0,0,1,33,55,39,33,5,55,33,53,33,55,23,7,33,39,55, + 1,21,1,39,55,33,7,39,55,33,53,2,189,2,103,105,105,254,18,254,218,121,253,236,2,89,117,130,73,1,48,93,120,1,137,254,119,120,93,253, + 204,117,130,73,254,171,2,25,105,105,210,210,120,202,75,127,93,120,254,119,90,254,119,120,93,202,75,127,120,0,0,0,0,1,0,100,0,204,6,63, + 4,56,0,14,0,0,1,33,21,33,23,7,1,53,1,23,7,33,21,33,7,1,144,4,175,251,201,93,120,254,119,1,137,120,93,4,55,251,81,105, + 2,25,120,93,120,1,137,90,1,137,120,93,120,105,0,0,0,1,1,165,0,0,5,17,5,220,0,14,0,0,1,17,35,17,7,39,1,51,1,7, + 39,17,35,17,39,2,241,120,92,120,1,136,90,1,138,120,94,120,104,4,176,251,80,4,56,94,120,1,138,254,118,120,94,251,200,4,176,104,0,0, + 0,1,0,117,0,204,6,80,4,56,0,14,0,0,1,55,39,33,53,33,39,55,1,21,1,39,55,33,53,5,36,105,105,251,81,4,55,93,120,1, + 137,254,119,120,93,251,201,2,25,105,105,120,93,120,254,119,90,254,119,120,93,120,0,0,0,1,1,165,255,249,5,17,5,213,0,14,0,0,1,23, + 55,17,51,17,55,23,1,35,1,55,23,17,51,2,241,106,104,120,94,120,254,118,90,254,120,120,92,120,1,37,104,104,4,176,251,200,94,120,254,118, + 1,138,120,94,4,56,0,0,0,2,0,100,0,204,6,80,4,56,0,5,0,21,0,0,1,33,55,39,33,7,5,33,23,7,1,53,1,23,7,33, + 39,55,1,21,1,39,1,144,3,148,105,105,252,108,105,3,133,253,92,93,120,254,119,1,137,120,93,2,164,93,120,1,137,254,119,120,2,25,105,105, + 105,225,93,120,1,137,90,1,137,120,93,93,120,254,119,90,254,119,120,0,0,2,1,164,255,240,5,16,5,220,0,5,0,21,0,0,1,17,23,55, + 17,39,3,17,7,39,1,51,1,7,39,17,55,23,1,35,1,55,2,241,105,105,105,225,93,120,1,137,90,1,137,120,93,93,120,254,119,90,254,119, + 120,4,176,252,108,105,105,3,148,105,252,123,2,164,93,120,1,137,254,119,120,93,253,92,93,120,254,119,1,137,120,0,0,1,1,32,255,209,6,3, + 4,179,0,14,0,0,9,1,7,1,21,35,17,55,33,21,35,1,7,1,35,1,201,3,80,85,253,5,169,63,2,44,131,2,251,85,252,176,149,3, + 118,252,176,85,2,251,132,2,44,63,169,253,5,85,3,80,0,1,0,188,255,209,5,159,4,179,0,14,0,0,1,53,35,1,39,1,35,53,33,23, + 17,35,53,1,39,4,246,149,252,176,85,2,251,131,2,44,63,169,253,5,85,3,118,148,252,176,85,2,251,169,63,253,212,132,253,5,85,0,0,0, + 0,1,0,188,0,52,5,159,5,22,0,14,0,0,9,1,55,1,53,51,17,7,33,53,51,1,55,1,51,4,246,252,176,85,2,251,169,63,253,212, + 131,253,5,85,3,80,149,1,113,3,80,85,253,5,132,253,212,63,169,2,251,85,252,176,0,1,1,32,0,52,6,3,5,22,0,14,0,0,1,21, + 51,1,23,1,51,21,33,39,17,51,21,1,23,1,201,149,3,80,85,253,5,131,253,212,63,169,2,251,85,1,113,148,3,80,85,253,5,169,63,2, + 44,132,2,251,85,0,0,0,0,1,0,100,0,204,6,63,4,56,0,15,0,0,1,33,21,33,23,33,21,33,7,1,53,1,23,33,21,33,1,99, + 4,220,251,36,138,4,82,252,38,120,254,119,1,137,120,3,218,251,174,2,190,120,138,120,120,1,137,90,1,137,120,120,0,1,0,117,0,204,6,80, + 4,56,0,15,0,0,1,33,53,33,39,33,53,33,55,1,21,1,39,33,53,33,5,81,251,36,4,220,138,251,174,3,218,120,1,137,254,119,120,252, + 38,4,82,2,70,120,138,120,120,254,119,90,254,119,120,120,0,1,0,100,0,204,6,63,4,56,0,24,0,0,1,35,39,7,39,7,39,7,39,35, + 23,7,1,53,1,23,7,51,23,55,23,55,23,55,23,6,63,40,70,180,180,180,180,180,110,99,233,120,254,119,1,137,120,233,139,70,180,180,180,180, + 180,110,2,45,70,180,180,180,180,180,110,233,120,1,137,90,1,137,120,233,70,180,180,180,180,180,110,0,0,1,0,117,0,204,6,80,4,56,0,24, + 0,0,19,53,55,23,55,23,55,23,55,51,39,55,1,21,1,39,55,35,7,39,7,39,7,39,7,117,110,180,180,180,180,180,70,139,233,120,1,137, + 254,119,120,233,99,110,180,180,180,180,180,70,2,45,170,110,180,180,180,180,180,70,233,120,254,119,90,254,119,120,233,110,180,180,180,180,180,70,0,0, + 0,1,1,163,0,0,5,15,5,220,0,25,0,0,1,51,1,7,39,17,33,21,33,21,33,21,33,17,35,17,33,53,33,53,33,53,33,17,7,39, + 3,45,90,1,136,120,232,1,40,254,216,1,40,254,216,170,254,218,1,38,254,218,1,38,234,120,5,220,254,118,120,234,254,142,170,170,170,254,172,1, + 84,170,170,170,1,114,234,120,0,1,1,163,255,249,5,15,5,213,0,25,0,0,5,35,1,55,23,17,33,53,33,53,33,53,33,17,51,17,33,21, + 33,21,33,21,33,17,55,23,3,133,90,254,120,120,232,254,216,1,40,254,216,1,40,170,1,38,254,218,1,38,254,218,234,120,7,1,138,120,234,1, + 114,170,170,170,1,84,254,172,170,170,170,254,142,234,120,0,0,3,0,100,0,204,6,63,4,56,0,9,0,13,0,17,0,0,19,53,1,23,7,33, + 21,33,23,7,1,53,33,21,51,53,33,21,100,1,137,120,233,1,113,254,143,233,120,1,170,0,255,170,0,255,2,85,90,1,137,120,233,170,233,120, + 1,97,170,170,170,170,0,0,0,3,1,163,0,0,5,17,5,220,0,9,0,13,0,17,0,0,1,51,1,7,39,17,35,17,7,39,1,51,21,35, + 21,51,17,35,3,45,90,1,138,120,234,170,234,120,1,98,170,170,170,170,5,220,254,118,120,234,254,142,1,114,234,120,254,86,254,170,255,0,0,0, + 0,3,0,117,0,204,6,80,4,56,0,9,0,13,0,17,0,0,9,1,39,55,33,53,33,39,55,1,37,33,21,35,39,21,35,53,6,80,254,119, + 120,233,254,143,1,113,233,120,1,137,251,206,0,255,255,170,255,2,85,254,119,120,233,170,233,120,254,119,40,170,170,170,170,0,0,0,0,3,1,163, + 255,249,5,17,5,213,0,9,0,13,0,17,0,0,5,1,55,23,17,51,17,55,23,1,3,53,51,21,3,17,51,17,3,45,254,118,120,234,170,234, + 120,254,118,130,170,170,170,7,1,138,120,234,1,114,254,142,234,120,254,118,3,52,254,254,1,168,1,0,255,0,0,0,0,1,0,107,0,203,6,63, + 4,57,0,13,0,0,1,21,33,23,7,1,17,35,17,51,17,1,23,7,6,63,251,238,234,120,254,118,170,170,1,138,120,234,2,215,170,234,120,1, + 138,254,126,3,92,254,128,1,138,120,234,0,0,1,0,117,0,203,6,73,4,57,0,13,0,0,19,33,39,55,1,17,51,17,35,17,1,39,55,33, + 117,4,18,234,120,1,138,170,170,254,118,120,234,251,238,2,215,234,120,254,118,1,128,252,164,1,130,254,118,120,234,0,0,2,0,55,0,134,6,63, + 4,126,0,6,0,13,0,0,9,2,53,33,17,33,19,9,1,17,33,17,33,1,207,254,246,1,10,4,12,251,244,100,254,4,1,252,4,12,251,244, + 3,140,254,246,254,246,131,1,14,253,125,1,252,1,252,254,239,254,42,0,0,2,1,94,0,0,5,86,6,8,0,6,0,13,0,0,9,2,51,17, + 33,17,5,9,1,33,17,33,17,4,100,254,246,254,246,131,1,14,253,125,1,252,1,252,254,239,254,42,4,112,1,10,254,246,251,244,4,12,100,1, + 252,254,4,251,244,4,12,0,0,2,0,72,0,134,6,80,4,126,0,6,0,13,0,0,1,21,33,17,33,21,9,1,17,33,17,33,17,1,4,184, + 251,244,4,12,1,10,254,146,251,244,4,12,1,252,3,140,131,254,242,131,1,10,254,4,1,17,1,214,1,17,254,4,0,2,1,94,255,205,5,86, + 5,213,0,6,0,13,0,0,1,35,17,33,17,35,9,1,33,17,33,17,33,1,4,100,131,254,242,131,1,10,254,4,1,17,1,214,1,17,254,4, + 1,101,4,12,251,244,254,246,1,110,4,12,251,244,254,4,0,4,1,94,0,0,5,86,6,8,0,6,0,13,0,17,0,21,0,0,1,33,17,33, + 9,1,33,3,17,51,9,1,51,17,1,17,33,17,5,33,21,33,4,69,254,42,254,239,1,252,1,252,254,239,100,131,254,246,254,246,131,1,114,254, + 42,1,114,254,242,1,14,2,36,1,232,1,252,254,4,254,124,1,232,1,10,254,246,254,24,254,212,254,164,1,92,100,148,0,0,0,0,2,1,94, + 0,0,5,86,6,8,0,10,0,21,0,0,41,1,17,51,17,33,9,1,33,17,51,5,35,21,33,53,35,17,51,9,1,51,5,13,252,154,200,254, + 239,1,252,1,252,254,239,200,253,198,200,2,158,200,131,254,246,254,246,131,1,92,2,176,1,252,254,4,253,80,100,148,148,3,120,1,10,254,246,0, + 0,3,1,64,0,0,5,116,6,8,0,11,0,22,0,25,0,0,37,35,21,33,53,35,17,51,39,33,7,51,1,33,17,51,17,33,9,1,33,17, + 51,1,51,39,2,211,200,2,158,200,161,100,254,120,100,161,2,58,252,154,200,254,209,2,26,2,26,254,209,200,253,217,232,116,248,148,148,3,90,100, + 100,251,174,1,92,2,146,2,26,253,230,253,110,3,170,116,0,3,1,94,0,0,5,86,6,8,0,6,0,17,0,24,0,0,37,35,21,33,17,7, + 51,1,33,17,51,17,33,9,1,33,17,51,1,17,33,53,35,17,51,2,196,185,1,29,216,116,2,73,252,154,185,254,254,1,252,1,252,254,254,185, + 254,127,1,29,185,116,248,148,4,228,216,251,144,1,92,2,176,1,252,254,4,253,80,3,236,251,28,148,3,120,0,0,0,3,1,94,0,0,5,86, + 6,8,0,6,0,17,0,23,0,0,37,17,51,9,1,51,17,5,33,17,33,1,33,9,1,33,1,33,3,51,9,1,51,55,3,225,131,254,246,254, + 246,131,1,114,254,42,254,239,1,24,254,232,1,252,1,252,254,232,1,24,254,239,107,138,254,246,254,246,138,128,100,2,244,1,10,254,246,253,12,100, + 2,244,1,24,1,252,254,4,254,232,1,124,1,10,254,246,128,0,0,0,0,3,1,94,0,0,5,86,6,8,0,10,0,25,0,31,0,0,37,35, + 21,33,53,35,17,51,9,1,51,1,33,17,51,17,33,1,33,9,1,33,1,33,17,51,1,51,9,1,51,55,2,211,200,2,158,200,131,254,246,254, + 246,131,2,58,252,154,200,254,239,1,24,254,232,1,252,1,252,254,232,1,24,254,239,200,254,205,138,254,246,254,246,138,128,248,148,148,2,96,1,10, + 254,246,252,168,1,92,1,152,1,24,1,252,254,4,254,232,254,104,3,20,1,10,254,246,128,0,0,0,0,2,0,117,0,134,6,125,4,126,0,10, + 0,21,0,0,55,17,33,21,33,17,9,1,17,33,21,3,53,35,17,51,53,33,21,9,1,21,117,1,92,2,176,1,252,254,4,253,80,100,148,148, + 3,120,1,10,254,246,207,3,102,200,1,17,254,4,254,4,1,17,200,2,58,200,253,98,200,131,1,10,1,10,131,0,0,2,0,122,0,0,6,77, + 5,213,0,5,0,15,0,0,1,21,33,17,35,17,1,55,33,21,33,1,7,1,17,35,6,77,250,144,99,1,34,63,2,44,254,182,3,94,120,252, + 162,169,5,213,99,250,142,5,213,254,159,63,169,252,162,120,3,94,254,182,0,2,0,122,0,0,6,77,5,213,0,5,0,15,0,0,51,53,33,17, + 51,17,1,7,33,53,33,1,55,1,17,51,122,5,112,99,254,222,63,253,212,1,74,252,162,120,3,94,169,99,5,114,250,43,1,97,63,169,3,94, + 120,252,162,1,74,0,0,0,0,2,1,94,255,205,5,86,6,8,0,9,0,19,0,0,1,17,51,9,1,51,17,35,9,1,39,33,9,1,33,17, + 33,9,1,33,3,225,131,254,246,254,246,131,131,1,10,1,10,31,1,17,254,4,254,4,1,17,254,239,1,252,1,252,254,239,1,101,3,11,1,10, + 254,246,252,245,254,246,1,10,100,254,4,1,252,2,67,1,252,254,4,0,0,3,0,117,0,204,6,80,4,56,0,41,0,53,0,65,0,0,9,1, + 39,55,33,6,7,6,7,6,7,6,34,39,38,39,38,39,38,39,35,53,51,54,55,54,55,54,55,54,50,23,22,23,22,23,22,23,33,39,55,1, + 36,34,7,6,7,6,7,33,38,39,38,39,19,33,22,23,22,23,22,50,55,54,55,54,6,80,254,119,120,233,254,161,6,10,27,50,49,64,61,147, + 58,67,46,50,27,10,6,190,190,6,10,27,50,49,64,61,147,58,67,46,50,27,10,6,1,95,233,120,1,137,252,95,82,35,41,24,26,15,1,108, + 17,24,29,36,104,254,152,14,25,29,36,35,82,35,36,29,25,2,85,254,119,120,233,24,24,64,50,49,27,26,26,30,46,50,64,24,24,170,26,25, + 64,50,49,27,26,26,30,46,50,64,25,26,233,120,254,119,157,15,18,26,28,30,35,23,28,16,254,240,29,26,28,16,15,15,16,28,26,0,0,0, + 255,255,0,119,255,249,6,59,5,220,16,39,12,22,1,44,0,0,16,7,12,24,254,212,0,0,0,0,0,1,0,117,254,116,6,80,6,144,0,25, + 0,0,1,7,5,21,1,39,55,33,53,33,39,55,33,53,33,39,55,33,53,33,39,55,1,21,7,5,6,80,255,0,255,254,119,120,233,251,61,4, + 195,215,215,251,61,4,195,215,215,251,61,4,195,233,120,1,137,255,0,255,2,85,255,255,90,254,119,120,233,170,215,215,170,215,215,170,233,120,254,119, + 90,255,255,0,0,1,0,100,0,192,6,63,4,68,0,17,0,0,19,53,1,23,7,33,17,51,17,33,21,33,17,35,17,33,23,7,100,1,137,120, + 233,2,51,170,1,230,254,26,170,253,205,233,120,2,85,90,1,137,120,233,1,109,254,147,170,254,147,1,109,233,120,0,0,1,0,117,0,192,6,80, + 4,68,0,17,0,0,9,1,39,55,33,17,35,17,33,53,33,17,51,17,33,39,55,1,6,80,254,119,120,233,253,205,170,254,26,1,230,170,2,51, + 233,120,1,137,2,85,254,119,120,233,254,147,1,109,170,1,109,254,147,233,120,254,119,0,0,1,0,100,0,192,6,80,4,68,0,23,0,0,1,17, + 51,17,33,39,55,1,21,1,39,55,33,17,35,17,33,23,7,1,53,1,23,7,3,5,170,1,137,233,120,1,137,254,119,120,233,254,119,170,254,119, + 233,120,254,119,1,137,120,233,2,215,1,109,254,147,233,120,254,119,90,254,119,120,233,254,147,1,109,233,120,1,137,90,1,137,120,233,0,1,0,100, + 0,192,6,63,4,68,0,25,0,0,19,53,1,23,7,33,17,51,17,51,17,51,17,33,21,33,17,35,17,35,17,35,17,33,23,7,100,1,137,120, + 233,1,167,170,170,170,1,30,254,226,170,170,170,254,89,233,120,2,85,90,1,137,120,233,1,109,254,147,1,109,254,147,170,254,147,1,109,254,147,1, + 109,233,120,0,0,1,0,117,0,192,6,80,4,68,0,25,0,0,9,1,39,55,33,17,35,17,35,17,35,17,33,53,33,17,51,17,51,17,51,17, + 33,39,55,1,6,80,254,119,120,233,254,89,170,170,170,254,226,1,30,170,170,170,1,167,233,120,1,137,2,85,254,119,120,233,254,147,1,109,254,147, + 1,109,170,1,109,254,147,1,109,254,147,233,120,254,119,0,0,1,0,100,0,192,6,80,4,68,0,31,0,0,1,17,51,17,51,17,51,17,33,39, + 55,1,21,1,39,55,33,17,35,17,35,17,35,17,33,23,7,1,53,1,23,7,2,156,140,100,140,1,32,233,120,1,137,254,119,120,233,254,224,140, + 100,140,254,224,233,120,254,119,1,137,120,233,2,215,1,109,254,147,1,109,254,147,233,120,254,119,90,254,119,120,233,254,147,1,109,254,147,1,109,233, + 120,1,137,90,1,137,120,233,0,2,0,55,0,196,6,63,4,64,0,2,0,9,0,0,1,17,7,5,17,9,1,17,33,21,1,165,250,1,74,254, + 66,1,190,4,74,1,136,1,244,250,65,254,131,1,190,1,190,254,131,130,0,2,0,117,0,196,6,125,4,64,0,2,0,9,0,0,1,55,39,3, + 33,53,33,17,9,1,5,15,250,250,80,251,182,4,74,1,190,254,66,1,136,250,250,254,197,130,1,125,254,66,254,66,0,3,0,55,0,196,6,125, + 4,64,0,2,0,5,0,15,0,0,1,55,39,1,17,7,5,33,17,9,1,17,33,17,9,1,5,15,250,250,252,150,250,4,20,253,54,254,66,1, + 190,2,202,1,190,254,66,1,136,250,250,254,12,1,244,250,65,254,131,1,190,1,190,254,131,1,125,254,66,254,66,0,0,2,0,16,0,0,5,104, + 5,213,0,2,0,10,0,0,37,1,33,19,1,51,19,33,19,51,1,2,188,1,19,253,219,160,253,198,213,136,2,161,136,210,253,199,199,2,231,252, + 82,5,213,254,129,1,127,250,43,0,0,0,0,1,0,135,255,227,4,110,5,240,0,29,0,109,186,0,15,0,0,0,3,43,184,0,15,16,65,27, + 0,22,0,15,0,38,0,15,0,54,0,15,0,70,0,15,0,86,0,15,0,102,0,15,0,118,0,15,0,134,0,15,0,150,0,15,0,166,0,15, + 0,182,0,15,0,198,0,15,0,214,0,15,0,13,93,65,5,0,229,0,15,0,245,0,15,0,2,93,0,186,0,18,0,27,0,3,43,184,0,18, + 16,186,0,3,0,12,0,3,43,184,0,3,16,48,49,19,16,0,51,50,23,22,23,35,38,39,38,35,34,2,17,16,18,51,50,55,54,55,51,6, + 7,6,35,34,0,135,1,9,251,251,133,66,33,202,18,27,79,157,156,157,157,156,157,79,27,18,202,33,66,133,251,251,254,247,2,233,1,122,1,141, + 198,99,144,73,55,153,254,205,254,204,254,204,254,205,153,55,73,144,99,197,1,140,0,0,0,2,0,95,255,227,3,196,5,76,0,32,0,48,0,0, + 5,34,39,38,53,52,55,54,51,50,23,22,23,54,53,52,39,38,35,34,7,53,54,51,32,23,22,21,20,7,2,7,6,1,20,23,22,51,50,55, + 54,55,54,55,38,35,34,7,6,1,181,141,92,109,96,99,178,117,92,54,37,13,32,71,188,71,110,116,104,1,12,114,53,25,63,163,128,254,193,44, + 47,72,64,51,72,53,44,22,89,154,132,58,36,29,85,101,183,190,148,152,73,43,72,81,92,135,78,173,44,168,31,246,116,173,113,131,254,184,156,122, + 1,83,100,54,57,45,62,101,83,89,215,174,108,0,0,0,0,1,0,201,0,0,4,139,5,213,0,11,0,0,1,17,33,53,33,17,33,53,33,17, + 33,53,4,139,252,62,2,248,253,8,2,248,253,8,5,213,250,43,170,1,236,170,1,235,170,0,0,0,0,3,0,201,255,162,4,139,6,53,0,19, + 0,23,0,27,0,0,1,17,33,7,35,55,35,53,51,19,33,53,33,19,33,53,33,55,51,15,1,3,51,17,1,3,33,17,4,139,253,75,29,170, + 29,99,152,152,254,208,1,100,152,254,4,2,48,30,170,30,52,152,234,254,226,152,1,182,5,213,250,43,94,94,170,1,236,170,1,235,170,96,96,170, + 254,21,1,235,253,107,254,20,1,236,0,0,0,3,0,155,255,236,6,93,5,174,0,27,0,40,0,54,0,0,1,55,51,7,22,23,22,16,2,4, + 35,34,39,38,39,7,35,55,38,39,38,16,18,36,51,50,23,22,9,1,39,38,35,34,4,7,6,7,22,23,22,9,1,22,23,22,51,50,36,55, + 54,55,38,39,38,5,8,89,106,128,105,69,100,200,254,160,185,187,176,56,48,126,105,170,63,47,99,198,1,96,187,185,176,18,252,201,2,244,14,145, + 153,154,254,221,82,81,1,1,81,36,3,103,253,5,39,45,145,154,153,1,34,83,82,1,1,82,58,5,59,110,157,83,122,178,254,128,254,157,190,95, + 30,39,156,210,66,84,177,1,128,1,99,190,95,10,251,233,3,165,8,78,157,147,145,155,155,145,64,3,68,252,82,31,24,79,157,147,145,155,155,145, + 103,0,0,0,0,2,255,250,0,0,5,96,5,193,0,2,0,6,0,56,64,15,0,3,1,3,5,4,3,2,1,0,5,7,5,6,7,16,212,204, + 17,23,57,49,0,47,196,204,17,57,48,64,20,99,1,109,2,112,1,120,2,127,2,121,5,118,6,7,110,0,127,0,2,93,1,93,9,1,33,1, + 51,1,33,2,172,254,94,3,68,253,239,224,2,67,250,154,4,238,251,196,5,15,250,63,0,2,255,250,0,0,5,96,5,193,0,2,0,6,0,0, + 37,1,33,9,1,33,1,2,172,1,162,252,188,1,51,253,189,5,102,253,189,211,4,60,250,241,5,193,250,63,0,0,0,1,0,175,255,236,6,73, + 5,174,0,28,0,0,1,22,23,22,23,22,23,33,21,33,34,36,2,53,52,18,36,51,33,21,33,6,7,6,7,6,7,33,21,1,87,7,63,74, + 140,137,148,2,185,253,71,192,254,157,190,190,1,99,192,2,185,253,71,148,137,139,75,64,9,4,245,2,115,74,120,139,78,76,1,159,198,1,96,187, + 185,1,96,200,159,1,77,79,138,120,93,160,0,3,0,175,254,229,6,73,6,175,0,30,0,38,0,47,0,0,1,23,7,33,21,33,3,33,21,33, + 3,22,51,33,21,33,34,39,3,39,19,38,39,38,2,53,52,18,36,59,1,1,20,23,22,23,22,23,19,55,19,35,34,7,6,7,6,21,4,216, + 150,73,1,36,254,162,185,2,23,253,175,176,36,36,2,185,253,71,65,63,100,150,96,44,44,177,190,190,1,99,192,234,252,221,70,85,129,29,29,160, + 59,184,176,147,138,125,89,73,6,175,55,202,159,254,4,160,254,29,5,159,11,254,238,55,1,8,19,24,99,1,96,187,185,1,96,200,252,197,74,120, + 145,72,16,13,1,184,160,1,252,78,71,146,120,93,0,0,0,1,0,217,0,155,4,229,4,103,0,22,0,0,37,32,36,53,52,36,41,1,21,5, + 6,7,6,7,33,21,33,22,23,22,51,33,21,3,43,254,216,254,214,1,42,1,40,1,186,254,70,232,105,78,29,3,118,252,138,37,70,114,223,1, + 186,155,246,240,240,246,142,1,1,79,58,133,142,145,48,81,142,0,0,0,0,1,0,175,255,236,6,73,5,174,0,28,0,0,1,38,39,38,39,38, + 39,33,53,33,50,4,18,21,20,2,4,35,33,53,33,54,55,54,55,54,55,33,53,5,161,7,63,74,140,137,148,253,71,2,185,192,1,99,190,190, + 254,157,192,253,71,2,185,148,137,139,75,64,9,251,11,3,39,74,120,139,78,76,1,159,198,254,160,187,185,254,160,200,159,1,77,79,138,120,93,160, + 0,3,0,175,254,229,6,73,6,175,0,30,0,38,0,47,0,0,1,39,55,33,53,33,19,33,53,33,19,38,35,33,53,33,50,23,19,23,3,22, + 23,22,18,21,20,2,4,43,1,1,52,39,38,39,38,39,3,7,3,51,50,55,54,55,54,53,2,32,150,73,254,220,1,94,185,253,233,2,81,176, + 36,36,253,71,2,185,65,63,100,150,96,44,44,177,190,190,254,157,192,234,3,35,70,84,130,29,29,160,59,184,176,147,138,125,89,73,254,229,55,202, + 159,1,252,160,1,227,5,159,11,1,18,55,254,248,19,24,99,254,160,187,185,254,160,200,3,59,74,120,145,72,16,13,254,72,160,254,4,78,71,146, + 120,93,0,0,0,1,0,217,0,155,4,229,4,103,0,22,0,0,1,32,4,21,20,4,41,1,53,37,50,55,54,55,33,53,5,38,39,38,7,33, + 53,2,147,1,40,1,42,254,214,254,216,254,70,1,186,232,105,78,29,252,138,3,118,37,70,116,221,254,70,4,103,246,241,239,246,142,1,80,58,133, + 142,1,145,49,82,1,142,0,0,1,1,44,0,0,3,235,3,226,0,3,0,11,0,184,0,1,47,184,0,0,47,48,49,33,17,33,17,1,44,2, + 191,3,226,252,30,0,0,0,0,1,0,156,254,119,5,113,5,193,0,7,0,30,64,15,6,2,215,4,214,0,175,8,3,103,1,5,103,0,8,16, + 212,236,212,236,49,0,16,252,236,236,50,48,19,33,17,35,17,33,17,35,156,4,213,240,253,10,239,5,193,248,182,6,125,249,131,0,0,1,0,156, + 254,119,5,113,5,193,0,7,0,30,64,15,3,214,7,215,5,1,175,8,5,103,7,3,103,1,8,16,212,236,212,236,49,0,16,252,60,252,252,48, + 19,17,51,17,33,17,51,17,156,239,2,246,240,254,119,7,74,249,131,6,125,248,182,0,0,1,0,25,254,119,5,59,5,193,0,11,0,93,64,20, + 10,4,12,2,5,7,2,0,7,12,10,5,4,3,1,0,6,6,8,12,16,212,196,23,57,49,0,16,196,212,204,16,206,17,18,57,57,48,64,48, + 81,3,86,5,80,5,90,10,115,3,112,3,118,4,117,5,112,5,122,10,128,3,128,5,12,90,9,127,2,127,3,112,5,112,6,123,9,116,11,143, + 2,143,3,128,5,128,6,11,93,1,93,19,33,21,33,9,1,33,21,33,53,9,1,55,4,234,252,65,2,160,253,74,3,239,250,222,2,213,253,73, + 5,193,193,253,51,253,4,192,149,3,33,2,227,0,0,0,0,1,0,217,2,45,5,219,2,215,0,3,0,17,182,0,156,2,4,1,0,4,16,212, + 196,49,0,16,212,236,48,19,33,21,33,217,5,2,250,254,2,215,170,0,0,2,0,217,0,0,5,219,5,4,0,11,0,15,0,0,33,35,17,33, + 53,33,17,51,17,33,21,33,1,53,33,21,3,174,168,253,211,2,45,168,2,45,253,211,253,43,5,2,1,131,170,1,131,254,125,170,2,215,170,170, + 0,2,0,217,0,0,5,219,5,213,0,11,0,15,0,87,186,0,5,0,6,0,3,43,184,0,5,16,184,0,0,208,184,0,6,16,184,0,10,208, + 184,0,6,16,184,0,12,208,184,0,5,16,184,0,13,208,0,184,0,5,47,186,0,13,0,14,0,3,43,184,0,13,16,186,0,2,0,3,0,3, + 43,184,0,2,16,184,0,3,16,184,0,7,208,184,0,2,16,184,0,9,208,48,49,1,17,33,21,33,17,35,17,33,53,33,25,1,51,21,35,3, + 174,2,45,253,211,168,253,211,2,45,168,168,4,160,254,5,170,254,5,1,251,170,1,251,1,53,204,0,255,255,0,0,255,66,2,178,5,213,16,6, + 0,18,0,0,255,255,1,138,255,146,4,60,6,37,16,7,0,63,1,138,0,80,0,0,0,1,1,5,0,0,5,175,5,4,0,17,0,0,1,37, + 55,5,17,51,17,37,23,13,1,7,37,17,35,17,5,39,2,177,254,84,85,1,172,168,1,172,85,254,84,1,172,85,254,84,168,254,84,85,2,130, + 247,147,247,1,239,254,17,247,147,247,247,147,247,254,17,1,239,247,147,0,255,255,1,68,1,71,3,190,3,194,16,7,0,114,0,129,253,210,0,0, + 255,255,1,88,1,89,3,170,3,169,16,6,11,0,37,136,0,1,0,61,255,215,5,25,6,125,0,10,0,42,64,24,10,9,8,7,6,5,11,2, + 4,2,0,11,10,9,7,6,5,4,3,0,8,1,8,11,16,212,204,23,57,49,0,16,212,204,196,17,18,23,57,48,1,51,21,35,1,35,1,7, + 39,37,1,4,92,189,115,253,174,66,254,193,125,25,1,27,1,0,6,125,96,249,186,3,115,45,80,98,253,59,0,0,255,255,0,61,255,215,5,25, + 7,118,18,38,12,159,0,0,16,7,0,117,0,115,1,134,255,255,0,61,255,215,5,25,7,101,18,38,12,159,0,0,16,7,11,75,0,115,1,134, + 0,2,0,220,0,229,4,219,3,229,0,11,0,49,0,0,1,50,55,2,35,34,7,6,21,20,23,22,5,21,35,34,39,38,39,38,39,6,7,6, + 35,34,39,38,53,52,55,54,51,50,23,22,23,22,23,54,55,54,59,1,21,35,34,7,18,51,2,15,165,99,127,137,100,51,54,54,56,3,43,77, + 73,54,54,52,31,49,67,59,73,116,135,89,94,94,83,143,73,54,63,43,40,40,67,59,73,116,75,64,148,116,127,137,1,107,240,1,6,72,77,102, + 112,69,70,2,132,30,27,63,36,84,120,53,64,101,106,175,168,114,101,30,33,57,51,69,120,53,64,131,240,254,250,0,0,3,0,220,0,229,5,206, + 3,229,0,35,0,47,0,59,0,0,1,38,39,6,7,6,35,34,39,38,53,52,55,54,51,50,23,22,23,22,23,54,55,54,51,50,23,22,21,20, + 7,6,35,34,39,38,37,50,55,2,35,34,7,6,21,20,23,22,1,34,7,18,51,50,55,54,53,52,39,38,3,165,31,49,67,59,74,115,135,89, + 94,94,84,142,73,54,63,43,40,40,67,59,74,115,135,89,94,94,84,142,73,54,54,254,54,165,99,127,137,100,51,55,55,56,2,235,149,115,126,138, + 100,51,55,55,56,1,93,36,84,120,53,64,101,106,175,168,114,101,30,33,57,51,69,120,53,64,101,106,175,168,114,101,30,27,77,240,1,6,72,77, + 102,112,69,70,1,244,240,254,250,72,77,102,112,69,70,0,0,1,1,27,0,203,5,153,5,73,0,5,0,0,37,33,17,51,17,33,5,153,251,130, + 170,3,212,203,4,126,252,44,0,1,0,175,0,0,6,73,5,213,0,5,0,0,37,21,33,1,51,1,6,73,250,102,3,185,242,252,203,202,202,5, + 213,250,245,0,0,2,0,175,255,148,6,73,5,213,0,5,0,27,0,65,0,184,0,7,47,184,0,18,47,186,0,14,0,15,0,3,43,184,0,14, + 16,184,0,0,208,186,0,4,0,18,0,7,17,18,57,186,0,5,0,18,0,7,17,18,57,184,0,15,16,184,0,21,208,186,0,22,0,18,0,7, + 17,18,57,48,49,37,38,39,38,39,1,19,1,51,1,22,23,22,23,33,21,33,22,21,35,52,39,33,1,38,39,55,22,4,96,39,74,65,87,254, + 206,227,1,96,242,254,76,113,82,93,43,1,88,254,201,4,140,5,252,42,2,13,30,31,80,29,202,139,134,115,94,254,30,2,227,2,40,253,82,115, + 147,167,176,202,53,55,55,53,3,54,21,20,117,19,0,0,0,2,0,237,255,250,5,220,5,209,0,23,0,29,0,53,186,0,13,0,28,0,3,43, + 184,0,13,16,0,184,0,9,47,184,0,18,47,186,0,5,0,18,0,9,17,18,57,186,0,22,0,18,0,9,17,18,57,186,0,25,0,18,0,9, + 17,18,57,48,49,9,1,55,1,38,39,55,22,23,37,21,5,22,7,21,6,7,5,21,37,6,7,39,54,19,9,1,54,55,54,3,114,253,123,2, + 2,142,25,29,139,29,25,1,212,254,138,69,6,7,71,1,133,254,37,28,30,134,31,121,253,221,2,26,52,4,7,1,52,1,82,192,1,87,33,30, + 76,33,36,238,210,190,179,198,9,161,147,191,210,241,38,33,76,32,2,233,254,231,254,240,123,129,158,0,0,1,1,176,254,74,2,80,6,43,0,3, + 0,0,1,51,17,35,1,176,160,160,6,43,248,31,0,0,0,1,0,102,254,74,3,155,6,43,0,11,0,55,186,0,6,0,0,0,3,43,184,0, + 6,16,184,0,2,208,184,0,0,16,184,0,8,208,0,184,0,1,47,184,0,7,47,186,0,3,0,7,0,1,17,18,57,186,0,9,0,7,0,1, + 17,18,57,48,49,1,17,51,17,55,23,5,17,35,17,7,39,1,176,160,251,80,254,181,160,253,77,2,86,3,213,252,156,176,111,231,252,41,3,103, + 177,110,0,0,0,2,1,16,254,74,2,240,6,43,0,3,0,7,0,0,1,51,17,35,1,51,17,35,1,16,160,160,1,64,160,160,6,43,248,31, + 7,225,248,31,0,1,0,102,254,74,3,155,6,43,0,19,0,123,184,0,20,47,184,0,21,47,184,0,20,16,184,0,0,208,184,0,0,47,184,0, + 14,220,184,0,2,208,184,0,21,16,184,0,10,220,184,0,4,220,184,0,10,16,184,0,6,208,184,0,4,16,184,0,12,208,184,0,0,16,184,0, + 16,208,0,184,0,1,47,184,0,5,47,184,0,11,47,184,0,15,47,186,0,3,0,11,0,1,17,18,57,186,0,7,0,11,0,1,17,18,57,186, + 0,13,0,11,0,1,17,18,57,186,0,17,0,11,0,1,17,18,57,48,49,1,17,51,17,55,17,51,17,55,23,7,17,35,17,7,17,35,17,7, + 39,1,16,160,160,160,91,80,171,160,160,160,93,77,1,230,4,69,252,43,113,3,100,253,12,64,111,120,251,186,3,215,112,252,153,2,247,65,110,0, + 0,1,1,8,0,0,4,211,4,162,0,6,0,0,33,1,51,1,35,9,1,1,8,1,105,250,1,104,195,254,222,254,221,4,162,251,94,3,172,252, + 84,0,0,0,0,1,1,8,0,0,4,211,4,162,0,6,0,0,1,51,9,1,51,1,35,1,8,195,1,35,1,34,195,254,152,250,4,162,252,84, + 3,172,251,94,0,1,1,8,0,0,4,211,4,162,0,17,0,0,1,16,18,51,50,18,25,1,35,17,52,38,35,34,6,21,17,35,1,8,245,241, + 240,245,172,148,165,166,148,172,2,80,1,40,1,42,254,214,254,216,253,176,2,55,244,211,211,244,253,201,0,1,1,8,0,0,4,211,4,162,0,17, + 0,0,1,17,51,17,20,22,51,50,54,53,17,51,17,16,2,35,34,2,1,8,172,148,166,165,148,172,245,240,241,245,2,82,2,80,253,201,244,211, + 211,244,2,55,253,176,254,216,254,214,1,42,0,1,0,117,254,77,3,182,6,14,0,21,0,0,1,62,1,50,22,23,7,38,35,34,7,3,14,1, + 34,38,39,55,22,51,50,55,1,227,8,162,151,126,20,148,17,57,71,8,65,8,162,151,126,20,148,17,57,71,8,4,226,167,133,125,140,15,130,175, + 250,176,167,133,125,140,15,130,175,0,0,0,255,255,0,117,254,77,5,219,6,14,16,38,12,176,0,0,16,7,12,176,2,37,0,0,255,255,0,117, + 254,77,8,0,6,14,16,38,12,176,0,0,16,39,12,176,2,37,0,0,16,7,12,176,4,74,0,0,0,3,0,117,254,77,3,182,6,14,0,45, + 0,54,0,63,0,0,1,54,55,54,51,50,23,22,23,7,38,35,34,7,3,22,23,22,21,20,7,6,7,3,6,7,6,35,34,39,38,39,55,22, + 51,50,55,19,38,39,38,53,52,55,54,55,19,54,55,54,53,52,39,38,39,3,19,6,7,6,21,20,23,22,1,227,8,83,79,74,77,71,55,20, + 148,17,57,71,8,14,99,66,110,110,86,115,15,8,83,79,74,77,71,55,20,148,17,57,71,8,15,93,73,110,111,83,117,138,61,44,69,71,37,44, + 189,22,61,44,72,75,37,4,226,167,68,65,70,55,140,15,130,175,254,214,24,75,124,146,156,111,85,19,254,190,167,68,65,70,55,140,15,130,175,1, + 49,24,73,111,155,156,115,86,19,253,155,16,47,72,103,106,71,36,18,254,52,1,214,17,46,74,104,103,72,36,0,0,0,4,0,117,254,77,5,219, + 6,14,0,77,0,81,0,90,0,99,0,0,1,54,55,54,51,50,23,22,23,7,38,35,34,7,3,33,19,54,55,54,51,50,23,22,23,7,38,35, + 34,7,3,22,23,22,21,20,7,6,7,3,6,7,6,35,34,39,38,39,55,22,51,50,55,19,33,3,6,7,6,35,34,39,38,39,55,22,51,50, + 55,19,38,39,38,53,52,55,54,55,19,33,19,33,3,19,6,7,6,21,20,23,22,1,3,54,55,54,53,52,39,38,1,227,8,83,79,74,77,71, + 55,20,148,17,57,71,8,14,1,126,15,8,83,79,74,77,71,55,20,148,17,57,71,8,14,99,66,110,110,86,115,15,8,83,79,74,77,71,55,20, + 148,17,57,71,8,14,254,130,15,8,83,79,74,77,71,55,20,148,17,57,71,8,15,93,73,110,111,83,117,137,1,126,24,254,130,190,22,61,44,72, + 75,37,3,13,22,61,44,69,71,37,4,226,167,68,65,70,55,140,15,130,175,254,226,1,55,167,68,65,70,55,140,15,130,175,254,214,24,75,124,146, + 156,111,85,19,254,190,167,68,65,70,55,140,15,130,175,1,36,254,195,167,68,65,70,55,140,15,130,175,1,48,25,73,111,155,156,115,86,19,253,146, + 1,241,254,33,1,214,17,46,74,104,103,72,36,1,186,254,43,16,47,72,103,106,71,36,0,5,0,117,254,77,8,0,6,14,0,109,0,113,0,117, + 0,126,0,135,0,0,1,54,55,54,51,50,23,22,23,7,38,35,34,7,3,33,19,54,55,54,51,50,23,22,23,7,38,35,34,7,3,33,19,54, + 55,54,51,50,23,22,23,7,38,35,34,7,3,22,23,22,21,20,7,6,7,3,6,7,6,35,34,39,38,39,55,22,51,50,55,19,33,3,6,7, + 6,35,34,39,38,39,55,22,51,50,55,19,33,3,6,7,6,35,34,39,38,39,55,22,51,50,55,19,38,39,38,53,52,55,54,55,1,19,33,3, + 41,1,19,33,3,19,6,7,6,21,20,23,22,1,3,54,55,54,53,52,39,38,1,227,8,83,79,74,77,71,55,20,148,17,57,71,8,14,1,126, + 15,8,83,79,74,77,71,55,20,148,17,57,71,8,14,1,126,15,8,83,79,74,77,71,55,20,148,17,57,71,8,14,99,66,110,110,86,115,15,8, + 83,79,74,77,71,55,20,148,17,57,71,8,14,254,130,15,8,83,79,74,77,71,55,20,148,17,57,71,8,14,254,130,15,8,83,79,74,77,71,55, + 20,148,17,57,71,8,15,93,73,110,111,83,117,4,44,24,254,130,24,253,219,1,126,24,254,130,190,22,61,44,72,75,37,5,50,22,61,44,69,71, + 37,4,226,167,68,65,70,55,140,15,130,175,254,226,1,55,167,68,65,70,55,140,15,130,175,254,226,1,55,167,68,65,70,55,140,15,130,175,254,214, + 24,75,124,146,156,111,85,19,254,190,167,68,65,70,55,140,15,130,175,1,36,254,195,167,68,65,70,55,140,15,130,175,1,36,254,195,167,68,65,70, + 55,140,15,130,175,1,48,25,73,111,155,156,115,86,19,253,146,1,241,254,15,1,241,254,33,1,214,17,46,74,104,103,72,36,1,186,254,43,16,47, + 72,103,106,71,36,0,0,0,0,1,0,117,254,76,4,46,6,15,0,51,0,0,1,38,35,34,7,3,22,23,22,29,1,55,23,7,35,39,55,23, + 53,52,39,38,39,3,14,1,35,34,38,39,55,22,51,50,55,19,6,7,6,21,35,52,55,54,55,19,62,1,51,50,22,23,3,34,17,59,69,8, + 16,89,63,119,94,72,190,54,188,72,92,79,51,44,44,8,160,72,79,128,20,148,17,59,69,8,43,64,47,86,102,109,86,109,17,8,160,72,79,128, + 20,4,246,130,175,254,179,24,63,117,156,30,93,72,189,189,72,93,30,115,77,51,11,252,103,165,135,122,143,15,130,175,3,136,16,46,86,114,155,109, + 86,17,1,95,165,135,122,143,0,3,0,117,254,77,4,29,6,14,0,8,0,17,0,60,0,0,1,19,6,7,6,21,20,23,22,37,52,39,3,62, + 1,55,39,55,19,38,35,34,7,3,22,23,22,21,55,23,7,6,7,6,7,3,14,1,34,38,39,55,22,51,50,55,19,38,39,38,53,52,55,54, + 55,19,62,1,50,22,23,1,183,22,61,44,72,75,37,1,128,152,22,61,81,9,135,72,108,17,59,69,8,14,89,76,109,72,72,167,26,60,86,115, + 15,8,159,152,128,20,148,17,59,69,8,15,93,73,110,111,83,117,15,8,159,152,128,20,1,74,1,214,17,46,74,103,104,72,36,230,153,59,254,43, + 16,101,19,136,72,2,93,130,175,254,214,22,77,111,124,72,72,167,67,63,90,19,254,190,165,135,122,143,15,130,175,1,49,24,73,111,155,156,115,86, + 19,1,60,164,136,122,143,0,0,3,0,117,254,77,4,31,6,14,0,8,0,18,0,59,0,0,1,19,6,7,6,21,20,23,22,1,46,1,39,3, + 62,1,55,7,39,19,38,35,34,7,3,30,1,31,1,7,39,20,6,7,3,14,1,34,38,39,55,22,51,50,55,19,38,39,38,53,52,55,54,55, + 19,62,1,50,22,23,1,183,22,61,44,72,75,37,1,109,35,54,44,22,61,105,7,83,72,178,17,59,69,8,14,99,139,18,164,72,75,194,115,15, + 8,159,152,128,20,148,17,59,69,8,15,93,73,110,111,83,117,15,8,159,152,128,20,1,74,1,214,17,46,74,103,104,72,36,1,54,66,48,18,254, + 43,16,130,64,84,72,2,239,130,175,254,214,24,157,63,164,72,75,124,192,19,254,190,165,135,122,143,15,130,175,1,49,24,73,111,155,156,115,86,19, + 1,60,164,136,122,143,0,0,255,255,0,121,0,205,4,158,4,213,16,39,13,74,255,158,254,133,16,39,13,74,2,240,254,133,16,7,13,74,1,71, + 1,143,0,0,255,255,0,121,0,205,4,158,4,213,16,39,13,74,1,71,254,133,16,39,13,74,2,240,1,143,16,7,13,74,255,158,1,143,0,0, + 255,255,0,161,0,205,1,116,4,214,16,39,13,74,255,198,1,144,16,7,13,74,255,198,254,133,0,0,255,255,0,121,0,205,4,158,4,213,16,39, + 13,74,2,240,1,143,16,39,13,74,255,158,1,143,16,39,13,74,2,240,254,133,16,7,13,74,255,158,254,133,0,0,255,255,0,217,2,45,5,219, + 4,106,16,39,13,74,2,20,1,36,16,6,12,151,0,0,0,3,0,217,0,159,5,220,4,106,0,3,0,7,0,11,0,0,1,51,21,35,19,51, + 21,35,5,33,21,33,5,8,211,211,1,211,211,251,208,3,88,252,168,1,157,254,3,203,254,149,170,0,255,255,0,216,0,159,5,220,4,106,16,38, + 12,151,0,0,16,39,13,74,255,253,254,87,16,39,13,74,255,254,1,36,16,39,13,74,4,45,254,87,16,7,13,74,4,46,1,36,255,255,0,217, + 0,159,5,219,4,106,16,38,12,193,0,0,16,39,13,74,2,19,254,87,16,7,13,74,2,20,1,36,0,1,0,217,1,211,5,219,3,50,0,29, + 0,0,1,21,14,1,35,34,39,38,39,38,39,38,35,34,6,7,53,62,1,51,50,23,22,23,22,23,22,51,50,54,5,219,105,179,97,110,146,10, + 7,6,15,155,94,88,172,98,105,179,97,110,147,11,5,6,15,155,94,86,169,3,50,179,78,69,59,4,3,2,6,61,76,84,179,78,69,59,5,2, + 2,6,61,75,0,1,0,217,1,211,5,219,3,50,0,29,0,0,19,30,1,51,50,55,54,55,54,55,54,51,50,22,23,21,46,1,35,34,7,6, + 7,6,7,6,35,34,38,39,217,103,169,86,94,155,15,6,5,11,147,110,97,179,105,98,172,88,94,155,15,6,7,10,146,110,97,179,105,3,50,85, + 75,61,6,2,2,5,59,69,78,179,84,76,61,6,2,3,4,59,69,78,0,1,0,162,1,49,6,18,3,212,0,41,0,0,1,46,1,35,34,6, + 21,30,1,51,7,34,46,1,53,52,62,1,51,50,22,23,30,1,51,50,54,53,46,1,35,55,50,30,1,21,20,14,1,35,34,38,3,58,81,159, + 72,82,100,2,104,78,1,105,156,92,100,142,110,120,194,62,64,176,72,82,100,2,104,78,1,105,156,92,100,142,110,120,196,2,46,116,116,108,72,61, + 89,155,79,154,72,76,162,92,125,88,91,141,108,72,61,89,155,79,154,72,76,162,92,125,0,1,0,217,0,87,5,219,4,173,0,17,0,0,1,2, + 35,34,3,2,39,34,3,35,18,51,50,19,18,23,50,19,5,219,123,251,230,100,102,102,116,88,170,123,251,230,100,102,102,116,88,2,215,253,128,1, + 214,1,220,1,254,35,2,128,254,42,254,36,1,1,221,0,0,1,0,208,0,0,2,48,5,2,0,29,0,0,33,35,46,1,53,52,55,54,55,54, + 55,54,53,52,38,39,51,30,1,21,20,7,6,7,6,7,6,21,20,22,2,48,180,78,68,58,4,4,2,6,60,76,84,180,78,68,58,6,2,2, + 6,60,74,104,180,96,110,146,10,8,6,14,156,94,88,172,98,106,178,98,110,146,12,4,6,16,154,94,86,170,0,0,0,1,0,217,0,157,5,219, + 4,108,0,27,0,0,1,38,35,34,6,7,53,62,1,51,50,23,19,23,3,22,51,50,54,55,21,14,1,35,34,39,3,39,2,230,99,68,88,172, + 98,105,179,97,93,121,172,155,168,101,69,86,169,103,105,179,97,96,121,171,155,2,83,32,76,84,179,78,69,43,1,126,70,254,140,32,75,85,179,78, + 69,44,254,133,70,0,0,0,0,2,0,217,1,16,5,219,3,162,0,28,0,32,0,0,1,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53, + 62,1,51,50,23,22,23,22,23,22,51,50,54,1,33,21,33,5,219,105,179,97,110,146,17,6,15,155,94,88,172,98,105,179,97,110,147,11,5,6, + 15,155,94,86,169,251,101,5,2,250,254,2,111,179,78,69,59,7,2,6,61,76,84,179,78,69,59,5,2,2,6,61,75,1,136,168,0,2,0,217, + 1,96,5,219,3,244,0,26,0,30,0,0,1,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1,51,50,31,2,22,51,50,54,1,33, + 21,33,5,219,105,179,97,110,146,17,6,15,155,94,88,172,98,105,179,97,110,147,15,22,155,94,86,169,251,101,5,2,250,254,3,244,178,79,69,59, + 7,2,6,61,76,83,178,78,69,59,6,9,61,75,254,107,170,0,0,0,0,2,0,217,0,98,5,219,4,211,0,37,0,38,0,0,1,3,22,51, + 50,55,54,55,21,14,1,35,34,39,7,33,21,33,7,39,55,33,53,33,55,38,35,34,6,7,53,62,1,51,50,31,1,19,1,5,3,203,31,37, + 72,92,175,12,105,179,97,66,80,144,2,159,252,239,185,137,108,254,229,1,153,184,145,90,88,172,98,105,179,97,110,147,51,239,253,125,4,111,254,233, + 11,45,88,34,178,79,69,22,186,170,254,100,154,170,243,56,76,83,178,78,69,59,22,1,73,252,141,0,0,3,0,217,0,184,5,219,4,193,0,26, + 0,30,0,34,0,0,1,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1,51,50,31,2,22,51,50,54,1,33,21,33,21,33,21,33, + 5,219,105,179,97,110,146,17,6,15,155,94,88,172,98,105,179,97,110,147,15,22,155,94,86,169,251,101,5,2,250,254,5,2,250,254,4,193,178,79, + 69,59,7,2,6,61,76,83,178,78,69,59,6,7,63,75,254,107,170,203,170,0,0,0,0,2,0,217,0,24,5,219,4,193,0,26,0,46,0,0, + 1,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1,51,50,31,2,22,51,50,54,1,35,53,33,55,33,53,33,55,23,7,33,21,33, + 7,33,21,33,7,39,5,219,105,179,97,110,146,17,6,15,155,94,88,172,98,105,179,97,110,147,15,22,155,94,86,169,252,76,231,1,149,209,253,154, + 3,25,140,111,19,1,1,254,75,208,2,133,252,201,166,111,4,193,178,79,69,59,7,2,6,61,76,83,178,78,69,59,6,7,63,75,252,76,170,203, + 170,138,115,23,170,203,170,160,115,0,0,0,0,1,0,217,255,246,5,219,5,66,0,46,0,0,1,22,51,50,55,54,55,21,14,1,35,34,39,7, + 33,21,33,7,33,21,33,7,39,55,35,53,33,55,33,53,33,55,39,38,35,34,6,7,53,62,1,51,50,31,1,55,23,4,98,10,9,75,96,74, + 113,105,179,97,39,43,92,2,43,253,122,108,2,242,252,179,104,146,62,249,1,84,109,254,63,2,28,117,50,155,94,88,172,98,105,179,97,110,147,99, + 134,146,4,34,1,37,30,93,178,79,69,7,171,170,203,170,194,78,116,170,203,170,218,20,61,76,83,178,78,69,59,37,250,78,0,0,0,2,0,217, + 1,16,5,219,3,244,0,29,0,59,0,63,64,31,46,31,57,42,0,45,34,19,1,16,27,12,30,42,156,49,57,156,34,4,156,27,12,156,19,60, + 30,0,45,15,60,16,212,60,196,50,49,0,16,212,236,212,236,220,252,212,236,192,17,18,57,57,17,18,57,57,17,18,57,57,48,1,21,14,1,35, + 34,39,38,39,38,39,38,35,34,6,7,53,62,1,51,50,23,22,23,22,23,22,51,50,54,19,21,14,1,35,34,39,38,39,38,39,38,35,34,6, + 7,53,62,1,51,50,23,22,23,22,23,22,51,50,54,5,219,105,179,97,110,146,10,7,6,15,155,94,88,172,98,105,179,97,110,147,11,5,6,15, + 155,94,86,169,103,105,179,97,110,146,10,7,6,15,155,94,88,172,98,105,179,97,110,147,10,5,7,15,155,94,86,169,2,111,179,78,69,59,4,3, + 2,6,61,76,84,179,78,69,59,5,2,2,6,61,75,1,218,178,79,69,59,4,3,2,6,61,76,83,178,78,69,59,4,2,3,6,61,75,0,0, + 0,1,0,217,0,5,5,219,4,255,0,52,0,0,1,22,51,50,54,55,21,14,1,35,34,39,7,22,51,50,54,55,21,14,1,35,34,47,1,3, + 39,19,38,35,34,6,7,53,62,1,51,50,23,55,38,35,34,6,7,53,62,1,50,31,1,19,23,4,17,57,43,86,169,103,105,179,97,64,76,74, + 147,90,86,169,103,105,179,97,131,125,19,141,164,137,57,43,88,172,98,105,179,97,64,77,72,146,90,88,172,98,105,179,194,160,18,141,164,3,97,13, + 75,85,178,79,69,20,187,56,75,85,179,78,69,59,9,254,152,64,1,94,13,76,84,179,78,69,20,187,56,76,83,178,78,69,59,7,1,102,64,0, + 0,3,0,217,0,184,5,219,4,201,0,26,0,53,0,57,0,0,1,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1,51,50,31,2, + 22,51,50,54,19,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1,51,50,31,2,22,51,50,54,1,33,21,33,5,219,105,179,97,110, + 146,17,6,15,155,94,88,172,98,105,179,97,110,147,15,22,155,94,86,169,103,105,179,97,113,143,17,6,15,155,94,88,172,98,105,179,97,110,147,15, + 22,198,51,86,169,251,101,5,2,250,254,3,76,178,79,69,59,7,2,6,61,76,83,178,78,69,59,6,7,63,75,1,210,178,79,69,59,7,2,6, + 61,76,83,178,78,69,59,6,7,63,75,252,238,170,0,0,0,3,0,217,0,121,5,219,4,209,0,26,0,53,0,80,0,0,1,21,14,1,35,34, + 47,1,38,39,38,35,34,6,7,53,62,1,51,50,31,2,22,51,50,54,19,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1,51,50, + 31,2,22,51,50,54,19,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1,51,50,31,2,22,51,50,54,5,219,105,179,97,110,146,17, + 6,15,155,94,88,172,98,105,179,97,110,147,15,22,155,94,86,169,103,105,179,97,110,146,17,6,15,155,94,88,172,98,105,179,97,110,147,15,22,155, + 94,86,169,103,105,179,97,113,143,17,6,15,155,94,88,172,98,105,179,97,110,147,15,22,198,51,86,169,1,215,178,79,69,59,7,2,6,61,76,83, + 178,78,69,59,6,7,63,75,1,210,178,79,69,59,7,2,6,61,76,83,178,78,69,59,6,7,63,75,1,210,178,79,69,59,7,2,6,61,76,83, + 178,78,69,59,6,7,63,75,0,3,0,217,0,184,5,219,4,193,0,26,0,30,0,34,0,0,19,30,1,51,50,63,2,54,51,50,22,23,21,46, + 1,35,34,7,6,15,1,6,35,34,38,39,1,21,33,53,1,21,33,53,217,103,169,86,94,155,22,15,147,110,97,179,105,98,172,88,94,155,15,6, + 17,146,110,97,179,105,5,2,250,254,5,2,250,254,4,193,85,75,63,7,6,59,69,78,178,83,76,61,6,2,7,59,69,79,254,200,170,170,254,139, + 170,170,0,0,0,2,0,216,0,215,5,219,4,43,0,9,0,19,0,0,1,32,37,53,4,5,32,37,21,4,5,32,5,21,36,37,4,5,53,36, + 3,91,254,225,254,156,1,103,1,28,1,38,1,89,254,162,254,224,1,37,1,90,254,163,254,222,254,224,254,157,1,104,2,211,166,178,149,17,166,178, + 151,179,166,178,151,15,2,164,178,151,0,0,0,2,0,217,0,54,5,219,4,206,0,28,0,57,0,0,37,54,55,54,55,54,55,33,21,33,6,7, + 6,7,6,34,39,38,39,38,39,33,53,33,22,23,22,23,22,19,6,7,6,7,6,7,33,53,33,54,55,54,55,54,50,23,22,23,22,23,33,21, + 33,38,39,38,39,38,3,91,67,45,56,30,27,4,1,155,254,246,14,28,55,86,89,206,89,87,54,30,12,254,246,1,156,4,27,30,56,46,67,67, + 46,56,30,27,4,254,100,1,10,12,30,54,87,89,206,89,86,55,28,14,1,10,254,101,4,27,30,56,45,217,4,30,44,67,69,91,168,60,48,91, + 50,51,51,50,91,51,57,168,92,68,68,43,30,3,78,4,30,43,68,68,92,168,57,51,91,50,51,51,50,91,48,60,168,91,69,67,44,30,0,0, + 0,2,0,217,1,96,5,219,4,206,0,28,0,32,0,0,1,6,7,6,7,6,7,33,53,33,54,55,54,55,54,50,23,22,23,22,23,33,21,33, + 38,39,38,39,38,1,33,21,33,3,91,67,46,56,30,27,4,254,100,1,10,12,30,54,87,89,206,89,86,55,28,14,1,10,254,101,4,27,30,56, + 45,253,59,5,2,250,254,4,43,4,30,43,68,68,92,168,57,51,91,50,51,51,50,91,48,60,168,91,69,67,44,30,253,227,170,0,255,255,0,217, + 1,96,5,219,4,255,16,39,13,74,2,21,1,185,16,6,0,32,0,0,255,255,0,217,0,2,5,219,4,255,16,39,13,74,2,19,253,186,16,38, + 0,32,0,0,16,7,13,74,2,20,1,185,255,255,0,217,0,5,5,222,4,255,16,39,13,74,255,254,1,185,16,38,0,32,0,0,16,7,13,74, + 4,48,253,189,255,255,0,217,0,5,5,221,4,255,16,39,13,74,255,254,253,189,16,38,0,32,2,0,16,7,13,74,4,46,1,185,255,255,0,207, + 1,54,7,50,3,207,16,39,13,74,255,244,254,238,16,39,13,74,255,244,0,137,16,7,0,32,1,87,0,0,0,0,255,255,0,205,1,54,7,51, + 3,204,16,38,0,32,244,0,16,39,13,74,5,133,0,134,16,7,13,74,5,133,254,238,0,2,0,217,1,96,5,219,3,162,0,9,0,27,0,0, + 1,6,21,20,23,51,54,53,52,39,23,33,21,33,53,33,38,53,52,55,33,53,33,21,33,22,23,20,2,230,52,52,242,51,52,141,1,119,250,254, + 1,126,25,27,254,128,5,2,254,137,26,1,2,250,48,73,71,48,48,71,71,50,240,170,170,63,56,62,59,168,168,26,95,56,0,0,0,4,0,217, + 1,96,5,219,6,21,0,3,0,7,0,17,0,32,0,0,19,33,21,33,21,33,21,33,1,34,6,21,20,22,50,54,52,38,39,50,22,23,30,1, + 21,20,6,35,34,38,53,52,54,217,5,2,250,254,5,2,250,254,2,133,72,100,100,145,100,101,72,59,107,39,42,42,168,122,123,164,167,3,162,168, + 240,170,4,68,98,70,69,96,96,139,98,113,43,40,40,100,58,115,161,158,118,118,163,0,0,3,0,217,1,96,5,219,5,75,0,3,0,7,0,17, + 0,0,19,33,21,33,21,33,21,33,1,32,23,21,38,33,6,7,53,54,217,5,2,250,254,5,2,250,254,2,130,1,0,225,224,254,255,254,230,233, + 3,162,168,240,170,3,235,151,178,151,2,149,178,151,0,0,0,3,0,217,1,96,5,219,6,127,0,3,0,7,0,14,0,0,19,33,21,33,21,33, + 21,33,9,1,51,1,35,11,1,217,5,2,250,254,5,2,250,254,1,36,1,4,180,1,3,159,190,184,3,162,168,240,170,2,130,2,157,253,99,1, + 217,254,39,0,0,3,0,217,1,96,5,219,6,127,0,3,0,7,0,14,0,0,19,33,21,33,21,33,21,33,1,51,27,1,51,1,35,217,5,2, + 250,254,5,2,250,254,1,36,166,184,190,159,254,253,180,3,162,168,240,170,5,31,254,39,1,217,253,99,0,3,0,217,1,96,5,219,6,202,0,3, + 0,7,0,17,0,0,19,33,21,33,21,33,21,33,19,33,27,1,33,7,19,39,7,19,217,5,2,250,254,5,2,250,254,250,1,43,93,94,1,42, + 242,94,244,243,93,3,162,168,240,170,4,78,1,28,254,228,176,254,228,176,176,1,28,0,0,4,0,217,1,96,5,219,6,212,0,3,0,7,0,10, + 0,14,0,0,19,33,21,33,21,33,21,33,1,3,33,3,51,1,33,217,5,2,250,254,5,2,250,254,2,130,166,1,78,223,112,1,33,253,78,3, + 162,168,240,170,4,192,254,78,2,102,253,31,0,7,0,217,1,96,5,219,6,28,0,3,0,7,0,27,0,48,0,55,0,71,0,79,0,0,19,33, + 21,33,21,33,21,33,1,21,35,34,6,29,1,51,21,35,17,35,17,35,53,51,53,52,54,51,3,21,33,20,22,51,50,54,55,21,14,1,35,34, + 38,53,52,54,51,50,22,7,52,38,35,34,6,21,39,53,51,17,35,53,14,1,35,34,38,52,54,51,50,22,6,20,22,50,54,52,38,34,217,5, + 2,250,254,5,2,250,254,4,164,63,36,27,109,109,67,63,63,63,68,237,254,207,78,66,38,72,35,36,74,39,96,113,107,91,81,95,67,60,49,55, + 72,198,66,66,21,64,44,73,92,92,73,44,64,205,60,105,61,61,105,3,162,168,240,170,4,188,55,30,36,36,51,254,160,1,96,51,28,68,61,254, + 170,32,68,72,19,18,62,15,16,112,96,99,116,105,71,54,66,63,57,105,218,253,208,61,36,35,116,190,117,35,103,147,83,83,147,83,0,3,0,217, + 1,96,5,219,6,20,0,3,0,7,0,42,0,0,19,33,21,33,21,33,21,33,1,62,1,51,50,22,21,17,35,17,52,38,35,34,6,21,17,35, + 17,52,38,35,34,6,21,17,35,17,51,21,62,1,51,50,22,217,5,2,250,254,5,2,250,254,2,159,33,93,63,85,92,90,55,57,69,80,90,55, + 58,68,80,90,90,30,86,58,59,83,3,162,168,240,170,4,61,61,58,120,111,254,181,1,72,79,77,93,81,254,202,1,72,80,76,94,80,254,202,2, + 37,85,50,48,61,0,0,0,0,4,0,217,1,96,5,219,6,218,0,3,0,7,0,11,0,44,0,0,19,33,21,33,21,33,21,33,1,51,21,35, + 55,35,53,52,54,63,1,62,1,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,6,15,1,14,1,7,14,1,21,217,5,2,250,254,5,2, + 250,254,2,52,101,101,98,95,28,45,45,28,26,66,54,39,90,48,47,96,52,92,111,36,45,44,23,20,4,3,3,3,162,168,240,170,3,1,127,200, + 78,50,65,43,44,27,47,24,45,55,35,33,94,28,28,97,79,38,69,43,43,23,27,13,10,30,26,0,0,1,0,217,0,39,5,219,4,221,0,19, + 0,62,64,34,13,12,10,3,2,207,4,0,156,6,12,207,14,10,156,18,6,16,8,20,18,14,13,12,8,4,3,2,8,9,5,15,0,20,16,220, + 60,196,50,23,57,49,0,16,212,60,204,50,252,60,236,16,254,60,236,57,17,18,57,48,19,33,1,23,7,33,21,33,7,33,21,33,1,39,55,33, + 53,33,55,33,217,3,4,1,0,125,174,1,47,254,72,195,2,123,252,250,254,254,125,174,254,213,1,182,195,253,135,3,162,1,59,102,213,168,240,170, + 254,199,102,211,170,240,0,0,0,3,0,217,0,184,5,219,4,76,0,3,0,7,0,11,0,33,64,14,4,6,0,2,8,10,12,10,6,2,8,4, + 0,12,16,220,60,60,220,60,60,49,0,16,212,220,220,220,220,220,48,19,33,21,33,17,33,21,33,17,33,21,33,217,5,2,250,254,5,2,250,254, + 5,2,250,254,2,215,170,2,31,170,253,192,170,0,0,0,0,1,0,217,255,206,5,219,5,52,0,27,0,0,1,33,53,33,55,23,7,33,21,33, + 7,33,21,33,7,33,21,33,7,39,55,33,53,33,55,33,53,33,3,149,253,68,3,24,128,153,81,1,34,254,129,114,1,241,253,181,110,2,185,252, + 233,129,153,82,254,221,1,129,111,254,16,2,76,3,162,170,232,84,148,170,203,170,203,170,234,84,150,170,203,170,0,0,0,4,0,217,0,0,5,219, + 5,9,0,3,0,7,0,11,0,15,0,41,64,20,4,6,0,2,12,14,8,10,16,14,10,6,3,2,12,8,4,3,0,16,16,220,23,60,220,23, + 60,49,0,16,212,220,220,220,220,220,220,220,48,19,33,21,33,17,33,21,33,17,33,21,33,17,33,21,33,217,5,2,250,254,5,2,250,254,5,2, + 250,254,5,2,250,254,3,148,170,2,31,170,252,75,170,2,31,170,0,0,0,2,0,217,0,0,5,219,4,168,0,6,0,10,0,84,64,46,2,156, + 3,4,3,1,156,0,1,4,4,3,1,156,2,1,5,6,5,0,156,6,5,66,5,4,2,1,0,5,3,209,6,167,7,156,9,1,8,2,0,36, + 7,4,35,11,16,252,60,236,50,50,57,49,0,47,236,244,236,23,57,48,75,83,88,7,4,237,7,16,8,237,7,16,8,237,7,16,4,237,89,34, + 9,2,21,1,53,9,1,33,21,33,5,219,252,64,3,192,250,254,5,2,250,254,5,2,250,254,3,248,254,235,254,238,178,1,112,170,1,111,252,2, + 170,0,0,0,0,2,0,217,0,0,5,219,4,168,0,6,0,10,0,86,64,47,6,156,0,6,3,4,3,5,156,4,4,3,0,156,1,2,1,6, + 156,5,6,2,2,1,66,6,5,3,2,0,5,4,209,1,167,7,156,8,6,7,2,36,9,4,0,35,11,16,252,60,60,236,50,57,49,0,47,236, + 244,236,23,57,48,75,83,88,7,16,8,237,7,16,4,237,7,16,4,237,7,16,8,237,89,34,19,53,1,21,1,53,9,1,21,33,53,217,5,2, + 250,254,3,193,1,65,250,254,3,248,176,254,145,170,254,144,178,1,18,253,199,170,170,0,0,3,0,218,255,86,5,220,5,27,0,3,0,10,0,14, + 0,0,51,33,21,33,9,2,21,1,53,9,1,33,21,33,218,5,2,250,254,5,2,252,64,3,192,250,254,5,2,250,254,5,2,250,254,170,5,21, + 254,235,254,238,178,1,112,170,1,111,252,2,170,0,0,0,0,3,0,218,255,86,5,220,5,27,0,3,0,10,0,14,0,0,33,21,33,53,17,53, + 1,21,1,53,9,1,21,33,53,5,220,250,254,5,2,250,254,3,192,1,66,250,254,170,170,4,107,176,254,145,170,254,144,178,1,18,253,199,170,170, + 0,2,0,218,254,177,5,220,5,27,0,19,0,26,0,0,5,33,53,33,55,33,53,33,55,23,7,33,21,33,7,33,21,33,7,39,9,2,21,1, + 53,1,2,39,254,179,1,218,96,253,198,2,200,137,138,41,1,80,254,34,95,2,61,253,54,138,138,3,222,252,64,3,192,250,254,5,2,170,170,115, + 170,164,115,49,170,115,170,165,116,5,70,254,235,254,238,178,1,112,170,1,111,0,0,0,0,2,0,218,254,177,5,220,5,27,0,19,0,26,0,0, + 5,33,53,33,55,33,53,33,55,23,7,33,21,33,7,33,21,33,7,39,1,53,1,21,1,53,1,2,39,254,179,1,218,96,253,198,2,200,137,138, + 41,1,80,254,34,95,2,61,253,54,138,138,254,220,5,2,250,254,3,192,170,170,115,170,164,115,49,170,115,170,165,116,5,70,176,254,145,170,254,144, + 178,1,18,0,0,2,0,148,0,46,7,204,4,223,0,6,0,13,0,0,9,2,21,1,53,1,5,9,1,21,1,53,1,7,204,252,198,3,58,251, + 202,4,54,252,254,252,198,3,58,251,202,4,54,4,17,254,112,254,114,197,2,8,159,2,10,206,254,112,254,114,197,2,8,159,2,10,0,2,0,148, + 0,46,7,204,4,223,0,6,0,13,0,0,19,53,1,21,1,53,1,3,53,1,21,1,53,1,148,4,54,251,202,3,58,56,4,54,251,202,3,58, + 4,17,206,253,246,159,253,248,197,1,142,1,144,206,253,246,159,253,248,197,1,142,0,0,0,2,0,176,254,242,3,6,6,18,0,25,0,39,0,0, + 1,6,7,22,23,22,21,20,7,6,7,22,23,33,54,55,38,39,38,53,52,55,54,55,38,39,19,54,55,54,16,39,38,39,6,7,6,16,23,22, + 2,123,41,35,89,52,74,74,52,89,35,41,254,192,41,35,89,52,74,74,52,89,35,41,160,22,17,65,65,17,22,22,17,65,65,17,6,18,71,70, + 163,158,226,223,224,227,158,162,71,71,71,71,162,158,227,224,223,226,158,163,70,71,250,50,59,59,226,1,206,225,59,60,60,59,225,254,50,226,59,0, + 0,1,0,216,0,26,5,220,4,232,0,27,0,0,1,6,7,53,36,63,1,36,37,53,4,37,19,23,7,54,55,21,4,15,1,4,5,21,36,5, + 3,39,2,87,180,201,1,9,223,101,254,246,254,187,1,178,1,0,196,148,135,183,200,254,251,228,100,1,16,1,63,254,78,255,0,196,148,1,93,41, + 93,178,111,38,182,14,151,178,175,10,1,98,82,244,41,96,178,113,37,181,13,152,178,175,11,254,159,82,0,2,0,217,0,5,5,219,5,100,0,15, + 0,18,0,0,1,5,21,37,3,39,19,37,53,1,19,23,7,37,21,5,7,13,1,3,157,2,62,253,122,153,135,147,254,17,3,27,173,136,109,1, + 31,254,122,200,254,70,1,60,1,223,203,182,234,254,189,64,1,54,180,166,1,32,1,111,64,230,104,182,139,71,157,112,0,2,0,217,255,160,5,219, + 4,255,0,15,0,18,0,0,1,37,53,5,19,23,3,5,21,1,3,39,55,5,53,37,55,45,1,3,23,253,194,2,134,153,135,147,1,239,252,229, + 173,136,109,254,225,1,134,200,1,186,254,196,3,37,203,182,234,1,67,64,254,202,180,166,254,224,254,145,64,230,104,182,139,71,157,112,0,2,0,217, + 255,47,5,219,5,86,0,2,0,26,0,0,1,13,1,3,33,53,33,19,37,53,37,19,23,7,37,21,5,3,5,21,37,3,33,21,33,7,39,3, + 146,254,137,1,47,244,254,131,1,189,120,253,203,3,3,118,164,72,1,45,254,137,114,1,233,253,219,102,2,139,253,53,76,164,3,79,108,85,253,114, + 170,1,67,162,170,221,1,64,61,199,86,176,108,254,209,140,178,158,254,237,170,209,61,0,0,2,0,217,255,47,5,219,5,86,0,2,0,26,0,0, + 1,37,39,1,33,53,33,55,5,53,37,55,37,53,5,19,23,3,5,21,5,3,33,21,33,7,39,3,145,1,9,214,254,29,254,248,1,71,87,254, + 98,1,232,91,253,189,2,127,132,164,127,1,218,253,109,109,3,0,252,193,78,164,2,151,76,62,252,223,170,236,119,178,139,245,167,176,183,1,101,61, + 254,168,136,170,189,254,216,170,209,61,0,0,0,2,0,217,255,144,5,220,4,168,0,29,0,36,0,0,37,21,14,1,35,34,39,38,39,38,39,38, + 35,34,6,7,53,62,1,51,50,23,22,23,22,23,22,51,50,54,19,9,1,21,1,53,1,5,220,106,178,98,110,146,10,6,6,16,154,94,88,172, + 98,104,180,96,110,148,10,6,6,14,156,94,86,168,103,252,64,3,192,250,254,5,2,240,180,78,68,58,4,4,2,6,60,76,84,180,78,68,58,6, + 2,2,6,60,74,3,94,254,235,254,238,178,1,112,170,1,111,0,0,0,0,2,0,218,255,176,5,220,4,168,0,27,0,34,0,0,1,21,14,1, + 35,34,39,46,1,39,38,35,34,6,7,53,62,1,51,50,23,30,1,23,22,51,50,54,1,53,1,21,1,53,1,5,220,106,178,98,110,146,10,12, + 16,154,94,88,172,98,104,180,96,110,148,10,12,14,156,94,86,168,251,102,5,2,250,254,3,193,1,14,178,78,70,60,4,4,6,62,76,84,178,78, + 70,60,4,4,6,62,76,3,62,176,254,145,170,254,144,178,1,18,0,0,0,2,0,217,255,41,5,220,5,80,0,49,0,52,0,0,37,38,35,34, + 6,7,53,62,1,51,50,23,19,37,53,37,19,23,7,37,21,5,3,5,21,37,3,23,22,23,22,23,22,51,50,54,55,21,14,1,35,34,39,38, + 39,38,47,1,7,39,1,13,1,2,107,30,13,88,172,98,104,180,96,39,43,107,253,198,3,8,117,165,69,1,37,254,143,115,1,228,253,225,107,7, + 10,6,6,14,156,94,86,168,104,106,178,98,110,146,10,6,6,16,34,80,165,1,118,254,132,1,49,45,3,76,84,180,78,68,7,1,29,163,170,222, + 1,57,65,187,84,176,106,254,205,138,178,156,254,227,2,6,2,2,6,60,74,86,180,78,68,58,4,4,2,6,13,216,60,3,236,110,87,0,0,0, + 0,2,0,217,255,47,5,220,5,86,0,49,0,52,0,0,1,5,21,5,7,22,23,22,23,22,23,22,51,50,54,55,21,14,1,35,34,39,38,39, + 38,39,38,39,3,39,55,6,7,6,7,53,54,55,54,63,1,5,53,37,55,37,53,5,19,23,3,37,39,4,8,1,211,253,117,94,48,54,10,6, + 6,14,156,94,86,168,104,106,178,98,110,146,10,6,6,16,71,59,104,164,86,56,54,86,98,104,90,77,83,60,254,97,1,233,94,253,185,2,131,128, + 164,232,1,2,206,3,191,134,170,187,247,13,22,4,2,2,6,62,76,84,178,78,70,60,4,2,2,6,29,15,254,241,61,223,9,24,38,84,178,78, + 35,30,4,161,119,178,139,244,168,176,184,1,102,61,253,128,74,59,0,0,0,2,0,208,255,78,5,220,5,125,0,6,0,13,0,0,19,53,1,21, + 1,53,9,3,21,1,53,1,218,5,2,250,254,3,192,1,56,252,64,3,192,250,254,5,2,2,39,176,254,145,170,254,144,178,1,18,3,187,254,235, + 254,238,178,1,112,170,1,111,0,2,0,208,255,78,5,220,5,125,0,6,0,13,0,0,9,2,21,1,53,9,1,53,1,21,1,53,1,5,210,252, + 64,3,192,250,254,5,2,251,8,5,2,250,254,3,192,2,39,254,235,254,238,178,1,112,170,1,111,1,246,176,254,145,170,254,144,178,1,18,0,0, + 0,3,0,208,254,109,5,220,6,96,0,2,0,30,0,33,0,0,45,2,3,37,53,37,19,23,3,37,21,5,3,5,21,37,7,5,21,5,3,39, + 19,5,53,37,19,37,53,5,19,13,1,3,77,1,77,254,220,96,253,186,2,194,90,166,68,1,132,254,79,65,1,242,253,232,30,2,64,253,70,90, + 166,68,254,116,1,184,64,254,8,2,31,109,254,172,1,42,179,95,84,1,87,167,170,202,1,136,38,254,212,111,176,125,254,228,142,178,154,129,165,170, + 200,254,119,38,1,45,114,178,126,1,24,145,176,155,1,222,98,85,0,0,0,3,0,208,254,109,5,220,6,96,0,2,0,5,0,33,0,0,1,7, + 23,1,55,47,1,37,53,5,19,23,3,5,21,5,7,37,21,5,7,5,21,37,3,39,19,37,53,37,55,5,53,37,2,192,174,152,1,74,166,146, + 164,253,118,2,177,97,166,100,1,174,253,236,34,2,44,253,169,44,2,131,253,86,96,166,98,254,76,2,28,34,253,204,2,95,1,68,50,44,2,163, + 47,42,47,188,176,197,1,168,38,254,79,123,170,152,148,159,176,173,194,184,178,196,254,91,38,1,174,125,170,154,148,162,178,173,0,0,0,1,0,217, + 255,178,5,219,5,80,0,10,0,0,1,0,5,4,1,21,0,37,53,36,1,5,219,254,114,253,243,2,9,1,146,254,111,252,143,3,115,1,143,4, + 97,254,129,97,94,254,126,239,2,0,124,166,124,2,0,0,0,1,0,217,255,178,5,219,5,80,0,10,0,0,19,53,0,5,21,4,1,53,0,37, + 36,217,1,143,3,115,252,143,254,111,1,146,2,9,253,243,4,97,239,254,0,124,166,124,254,0,239,1,130,94,97,0,0,2,0,217,255,41,5,219, + 5,87,0,5,0,16,0,0,33,21,0,37,53,4,1,0,5,4,1,21,0,37,53,36,1,5,219,254,103,252,151,3,86,1,172,254,129,254,36,1, + 220,1,127,254,129,252,125,3,131,1,127,215,1,190,145,174,133,2,223,254,229,93,93,254,229,215,1,120,132,166,124,1,128,0,0,0,0,2,0,217, + 255,41,5,219,5,87,0,5,0,16,0,0,51,0,37,21,4,1,17,53,0,5,21,4,1,53,0,37,36,217,1,172,3,86,252,151,254,103,1,127, + 3,131,252,125,254,129,1,127,1,220,254,36,1,161,133,174,145,254,66,5,87,215,254,128,124,166,132,254,136,215,1,27,93,93,0,0,0,2,0,217, + 255,82,5,219,5,87,0,29,0,40,0,0,37,21,14,1,35,34,39,38,39,38,39,38,35,34,6,7,53,62,1,51,50,23,22,23,22,23,22,51, + 50,54,19,0,5,4,1,21,0,37,53,36,1,5,219,105,179,97,110,146,10,7,6,15,155,94,88,172,98,105,179,97,110,147,11,5,6,15,155,94, + 86,169,103,254,129,254,36,1,220,1,127,254,129,252,125,3,131,1,127,177,179,78,69,59,4,3,2,6,61,76,84,179,78,69,59,5,2,2,6,61, + 75,4,36,254,229,93,93,254,229,215,1,120,132,166,124,1,128,0,0,0,0,2,0,217,255,82,5,219,5,87,0,29,0,40,0,0,37,21,14,1, + 35,34,39,38,39,38,39,38,35,34,6,7,53,62,1,51,50,23,22,23,22,23,22,51,50,54,1,53,0,5,21,4,1,53,0,37,36,5,219,105, + 179,97,110,146,10,7,6,15,155,94,88,172,98,105,179,97,110,147,11,5,6,15,155,94,86,169,251,101,1,127,3,131,252,125,254,129,1,127,1,220, + 254,36,177,179,78,69,59,4,3,2,6,61,76,84,179,78,69,59,5,2,2,6,61,75,4,36,215,254,128,124,166,132,254,136,215,1,27,93,93,0, + 0,2,0,217,255,131,5,219,6,29,0,21,0,26,0,0,1,38,37,53,36,37,1,23,3,54,55,21,6,7,3,4,23,21,2,37,3,39,1,6, + 7,22,23,2,238,240,254,219,1,195,1,69,1,30,131,185,158,116,186,214,139,1,36,247,227,254,130,235,130,1,107,151,161,125,117,1,176,85,41,166, + 63,165,2,101,75,254,116,117,149,239,179,117,254,212,127,237,239,1,34,166,254,9,75,3,10,57,30,23,39,0,0,0,0,2,0,217,254,229,5,219, + 5,127,0,21,0,26,0,0,1,22,5,21,4,5,1,39,19,6,7,53,54,55,19,36,39,53,18,5,19,23,1,54,55,38,39,3,198,240,1,37, + 254,61,254,187,254,226,131,185,158,116,186,214,139,254,220,247,227,1,126,235,130,254,149,151,161,125,117,3,82,85,41,166,63,165,253,155,75,1,140,117, + 149,239,179,117,1,44,127,237,239,254,222,166,1,247,75,252,246,57,30,23,39,0,0,0,0,1,0,204,0,163,5,232,4,95,0,19,0,0,37,33, + 34,0,53,52,55,54,51,33,21,33,34,6,21,20,23,22,51,33,5,232,252,194,202,254,236,138,138,200,3,64,252,192,136,190,94,96,136,3,64,163, + 1,22,200,198,141,139,150,192,136,138,94,96,0,1,0,204,0,163,5,232,4,95,0,19,0,0,55,53,33,50,55,54,53,52,38,35,33,53,33,50, + 23,22,21,20,0,35,204,3,64,136,96,94,190,136,252,192,3,64,200,138,138,254,236,202,163,150,96,94,138,136,192,150,139,141,198,200,254,234,0,0, + 0,2,0,204,255,59,5,232,5,207,0,9,0,30,0,0,1,35,34,6,21,20,23,22,59,1,27,1,51,3,33,21,33,3,33,21,33,3,35,19, + 34,0,53,52,55,54,51,3,162,250,136,190,94,96,136,48,248,114,170,114,1,110,254,100,202,2,102,253,108,112,170,112,200,254,234,138,138,200,3,201, + 192,136,138,94,96,3,38,1,112,254,144,150,253,112,150,254,152,1,104,1,22,200,198,141,139,0,0,0,0,2,0,204,255,51,5,232,5,199,0,9, + 0,30,0,0,1,51,50,54,53,52,39,38,43,1,11,1,35,19,33,53,33,19,33,53,33,19,51,3,50,0,21,20,7,6,35,3,18,250,136,190, + 94,96,136,48,248,114,170,114,254,146,1,156,202,253,154,2,148,112,170,112,200,1,22,138,138,200,1,57,192,136,138,94,96,252,218,254,144,1,112,150, + 2,144,150,1,104,254,152,254,234,200,198,141,139,0,0,0,0,2,0,190,0,0,5,219,4,232,0,3,0,24,0,0,55,33,21,33,1,33,34,39, + 38,53,52,55,54,51,33,21,33,34,6,21,20,23,22,51,33,242,4,233,251,23,4,233,252,193,201,138,139,139,138,200,3,64,252,192,137,190,95,96, + 136,3,64,150,150,1,44,139,139,200,198,141,139,150,192,136,138,94,96,0,0,2,0,217,0,0,5,246,4,232,0,3,0,24,0,0,55,33,21,33, + 17,53,33,50,55,54,53,52,38,35,33,53,33,50,23,22,21,20,7,6,35,217,4,233,251,23,3,64,136,96,95,190,137,252,192,3,64,200,138,139, + 139,138,201,150,150,1,44,150,96,94,138,136,192,150,139,141,198,200,139,139,0,2,0,190,255,19,5,219,5,215,0,9,0,39,0,0,1,33,34,6, + 21,20,23,22,59,2,33,21,33,7,33,21,33,7,39,55,33,53,33,55,38,39,38,53,52,55,54,51,33,55,23,7,33,21,33,3,209,254,202,137, + 190,95,96,136,39,156,2,125,253,69,61,2,248,252,201,97,134,76,254,233,1,84,62,185,130,139,139,138,200,1,115,99,134,76,1,48,254,146,4,82, + 192,136,138,94,96,150,150,150,237,53,184,150,150,8,131,139,200,198,141,139,239,55,184,150,0,2,0,217,255,19,5,246,5,215,0,9,0,39,0,0, + 1,51,50,55,54,53,52,39,38,47,1,33,53,33,55,23,7,22,23,22,21,20,7,6,43,1,7,33,21,33,7,39,55,33,53,33,55,33,53,33, + 3,94,187,136,96,95,95,66,86,153,253,9,3,53,99,134,84,112,88,139,139,138,201,247,63,2,224,252,227,98,134,76,254,208,1,109,62,254,85,1, + 233,1,194,96,94,138,136,96,67,20,9,150,239,55,203,32,88,141,198,200,139,139,150,150,237,53,184,150,150,150,0,0,0,2,0,190,255,106,5,219, + 4,233,0,11,0,32,0,0,41,1,53,33,55,23,7,33,21,33,7,39,1,33,34,39,38,53,52,55,54,51,33,21,33,34,6,21,20,23,22,51, + 33,2,196,254,46,2,66,113,120,45,1,235,253,165,113,120,3,68,252,193,201,138,139,139,138,200,3,64,252,192,137,190,95,96,136,3,64,150,150,90, + 60,150,150,90,1,105,139,139,200,198,141,139,150,192,136,138,94,96,0,0,0,2,0,190,255,106,5,219,4,233,0,11,0,32,0,0,41,1,53,33, + 55,23,7,33,21,33,7,39,1,53,33,50,55,54,53,52,38,35,33,53,33,50,23,22,21,20,7,6,35,2,196,254,46,2,66,113,120,45,1,235, + 253,165,113,120,254,39,3,64,136,96,95,190,137,252,192,3,64,200,138,139,139,138,201,150,150,90,60,150,150,90,1,105,150,96,94,138,136,192,150,139, + 141,198,200,139,139,0,0,0,0,2,1,8,0,0,4,211,4,162,0,17,0,27,0,0,1,17,51,17,20,22,51,50,54,53,17,51,17,16,2,35, + 34,2,55,53,55,23,7,33,21,33,23,7,1,8,172,148,166,165,148,172,245,240,241,245,238,196,60,116,1,99,254,157,116,60,2,82,2,80,253,201, + 244,211,211,244,2,55,253,176,254,216,254,214,1,42,202,45,197,60,117,85,116,60,0,0,255,255,1,8,0,0,4,211,4,162,16,38,12,175,0,0, + 16,7,13,74,1,169,255,51,0,2,1,8,0,5,4,211,4,167,0,17,0,29,0,0,1,17,51,17,20,22,51,50,54,53,17,51,17,16,2,35, + 34,2,1,21,51,21,35,21,35,53,35,53,51,53,1,8,172,148,166,165,148,172,245,240,241,245,2,24,170,170,101,170,170,2,87,2,80,253,201,244, + 211,211,244,2,55,253,176,254,216,254,214,1,42,1,225,171,100,171,171,100,171,0,0,0,0,1,0,217,0,0,5,219,4,139,0,7,0,27,64,5, + 1,5,3,7,8,16,220,220,220,60,49,0,64,5,1,3,5,7,8,16,212,220,220,220,48,19,33,21,33,17,33,21,33,217,5,2,251,168,4,88, + 250,254,4,139,170,252,201,170,0,1,0,217,0,0,5,219,4,139,0,7,0,27,64,5,1,5,3,7,8,16,220,60,220,220,49,0,64,5,7,5, + 3,1,8,16,212,220,220,220,48,1,17,33,53,33,17,33,53,5,219,250,254,4,88,251,168,4,139,251,117,170,3,55,170,0,0,0,0,2,0,217, + 255,86,5,219,5,11,0,7,0,11,0,0,19,33,21,33,17,33,21,33,21,33,21,33,217,5,2,251,168,4,88,250,254,5,2,250,254,5,11,170, + 252,201,170,128,170,0,0,0,0,2,0,217,255,86,5,219,5,11,0,7,0,11,0,0,1,17,33,53,33,17,33,53,1,21,33,53,5,219,250,254, + 4,88,251,168,5,2,250,254,5,11,251,117,170,3,55,170,250,245,170,170,0,1,0,217,0,0,5,101,5,2,0,7,0,0,1,17,35,17,33,17, + 35,17,5,101,170,252,200,170,5,2,250,254,4,88,251,168,5,2,0,0,0,1,0,217,0,0,5,101,5,2,0,7,0,0,51,17,51,17,33,17, + 51,17,217,170,3,56,170,5,2,251,168,4,88,250,254,0,0,3,0,187,255,227,5,249,5,36,0,25,0,51,0,63,0,0,0,34,7,6,7,14, + 1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52,38,39,38,39,36,32,22,23,22,23,22,21,20,7,6,7,14,1,32,38,39,38,39,38, + 53,52,55,54,55,54,5,17,33,21,33,17,35,17,33,53,33,17,3,197,214,93,92,76,77,76,76,77,76,92,93,214,93,92,76,77,76,76,77,76, + 92,254,174,1,20,238,98,99,49,49,49,49,99,98,238,254,236,238,98,99,49,49,49,49,99,98,1,205,1,100,254,156,170,254,156,1,100,4,142,39, + 39,76,77,184,109,106,184,77,76,39,39,39,39,76,77,184,106,109,184,77,76,39,189,100,98,99,119,118,140,137,119,118,99,98,100,100,98,99,118,119, + 137,140,118,119,99,98,132,254,155,170,254,155,1,101,170,1,101,0,0,0,0,3,0,187,255,227,5,249,5,36,0,3,0,29,0,55,0,0,1,33, + 21,33,0,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52,38,39,38,39,36,32,22,23,22,23,22,21,20,7,6,7, + 14,1,32,38,39,38,39,38,53,52,55,54,55,54,1,161,3,114,252,142,2,36,214,93,92,76,77,76,76,77,76,92,93,214,93,92,76,77,76,76, + 77,76,92,254,174,1,20,238,98,99,49,49,49,49,99,98,238,254,236,238,98,99,49,49,49,49,99,98,2,215,170,2,97,39,39,76,77,184,109,106, + 184,77,76,39,39,39,39,76,77,184,106,109,184,77,76,39,189,100,98,99,119,118,140,137,119,118,99,98,100,100,98,99,118,119,137,140,118,119,99,98, + 0,3,0,187,255,227,5,249,5,36,0,25,0,51,0,63,0,0,0,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52, + 38,39,38,39,36,32,22,23,22,23,22,21,20,7,6,7,14,1,32,38,39,38,39,38,53,52,55,54,55,54,1,7,23,7,39,7,39,55,39,55, + 23,55,3,197,214,93,92,76,77,76,76,77,76,92,93,214,93,92,76,77,76,76,77,76,92,254,174,1,20,238,98,99,49,49,49,49,99,98,238,254, + 236,238,98,99,49,49,49,49,99,98,2,237,253,252,120,252,252,121,253,252,120,252,252,4,142,39,39,76,77,184,109,106,184,77,76,39,39,39,39,76, + 77,184,106,109,184,77,76,39,189,100,98,99,119,118,140,137,119,118,99,98,100,100,98,99,118,119,137,140,118,119,99,98,254,190,252,252,120,252,253,121, + 252,252,120,252,253,0,0,0,0,3,0,187,255,227,5,249,5,36,0,3,0,29,0,55,0,0,9,1,23,1,0,34,7,6,7,14,1,21,20,22, + 23,22,23,22,50,55,54,55,62,1,53,52,38,39,38,39,36,32,22,23,22,23,22,21,20,7,6,7,14,1,32,38,39,38,39,38,53,52,55,54, + 55,54,1,230,2,112,120,253,144,1,103,214,93,92,76,77,76,76,77,76,92,93,214,93,92,76,77,76,76,77,76,92,254,174,1,20,238,98,99,49, + 49,49,49,99,98,238,254,236,238,98,99,49,49,49,49,99,98,1,134,2,112,120,253,144,3,128,39,39,76,77,184,109,106,184,77,76,39,39,39,39, + 76,77,184,106,109,184,77,76,39,189,100,98,99,119,118,140,137,119,118,99,98,100,100,98,99,118,119,137,140,118,119,99,98,0,0,0,0,3,0,187, + 255,227,5,249,5,36,0,3,0,29,0,55,0,0,1,51,21,35,18,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52, + 38,39,38,39,36,32,22,23,22,23,22,21,20,7,6,7,14,1,32,38,39,38,39,38,53,52,55,54,55,54,2,240,212,212,213,214,93,92,76,77, + 76,76,77,76,92,93,214,93,92,76,77,76,76,77,76,92,254,174,1,20,238,98,99,49,49,49,49,99,98,238,254,236,238,98,99,49,49,49,49,99, + 98,3,1,254,2,139,39,39,76,77,184,109,106,184,77,76,39,39,39,39,76,77,184,106,109,184,77,76,39,189,100,98,99,119,118,140,137,119,118,99, + 98,100,100,98,99,118,119,137,140,118,119,99,98,0,0,0,0,4,0,187,255,227,5,249,5,36,0,9,0,24,0,50,0,76,0,0,1,34,6,21, + 20,22,50,54,52,38,39,50,22,23,30,1,21,20,6,35,34,38,53,52,62,1,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62, + 1,53,52,38,39,38,39,36,32,22,23,22,23,22,21,20,7,6,7,14,1,32,38,39,38,39,38,53,52,55,54,55,54,3,90,80,110,110,160,110, + 111,79,64,118,43,46,46,185,134,135,180,184,240,214,93,92,76,77,76,76,77,76,92,93,214,93,92,76,77,76,76,77,76,92,254,174,1,20,238,98, + 99,49,49,49,49,99,98,238,254,236,238,98,99,49,49,49,49,99,98,3,65,111,80,79,109,109,158,112,129,49,46,45,114,66,132,183,180,135,134,186, + 204,39,39,76,77,184,109,106,184,77,76,39,39,39,39,76,77,184,106,109,184,77,76,39,189,100,98,99,119,118,140,137,119,118,99,98,100,100,98,99, + 118,119,137,140,118,119,99,98,0,3,0,187,255,227,5,249,5,36,0,17,0,43,0,69,0,0,1,13,1,7,37,17,35,17,5,39,45,1,55,5, + 17,51,17,37,2,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52,38,39,38,39,36,32,22,23,22,23,22,21,20,7, + 6,7,14,1,32,38,39,38,39,38,53,52,55,54,55,54,4,240,254,189,1,67,52,254,209,102,254,209,52,1,67,254,189,52,1,47,102,1,47,247, + 214,93,92,76,77,76,76,77,76,92,93,214,93,92,76,77,76,76,77,76,92,254,174,1,20,238,98,99,49,49,49,49,99,98,238,254,236,238,98,99, + 49,49,49,49,99,98,3,49,175,176,88,183,254,173,1,83,183,88,176,175,89,183,1,83,254,173,183,1,4,39,39,76,77,184,109,106,184,77,76,39, + 39,39,39,76,77,184,106,109,184,77,76,39,189,100,98,99,119,118,140,137,119,118,99,98,100,100,98,99,118,119,137,140,118,119,99,98,0,4,0,187, + 255,227,5,249,5,36,0,3,0,7,0,33,0,59,0,0,1,33,21,33,21,33,21,33,0,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55, + 54,55,62,1,53,52,38,39,38,39,36,32,22,23,22,23,22,21,20,7,6,7,14,1,32,38,39,38,39,38,53,52,55,54,55,54,2,26,2,128, + 253,128,2,128,253,128,1,171,214,93,92,76,77,76,76,77,76,92,93,214,93,92,76,77,76,76,77,76,92,254,174,1,20,238,98,99,49,49,49,49, + 99,98,238,254,236,238,98,99,49,49,49,49,99,98,3,106,136,192,136,2,244,39,39,76,77,184,109,106,184,77,76,39,39,39,39,76,77,184,106,109, + 184,77,76,39,189,100,98,99,119,118,140,137,119,118,99,98,100,100,98,99,118,119,137,140,118,119,99,98,0,3,0,187,255,227,5,249,5,36,0,25, + 0,51,0,55,0,0,0,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52,38,39,38,39,36,32,22,23,22,23,22,21, + 20,7,6,7,14,1,32,38,39,38,39,38,53,52,55,54,55,54,19,33,21,33,3,197,214,93,92,76,77,76,76,77,76,92,93,214,93,92,76,77, + 76,76,77,76,92,254,174,1,20,238,98,99,49,49,49,49,99,98,238,254,236,238,98,99,49,49,49,49,99,98,56,2,128,253,128,4,142,39,39,76, + 77,184,109,106,184,77,76,39,39,39,39,76,77,184,106,109,184,77,76,39,189,100,98,99,119,118,140,137,119,118,99,98,100,100,98,99,118,119,137,140, + 118,119,99,98,254,23,170,0,0,3,0,187,255,227,5,249,5,36,0,3,0,7,0,19,0,0,1,17,33,17,37,33,17,33,1,17,33,21,33,17, + 35,17,33,53,33,17,1,81,4,18,251,88,5,62,250,194,2,244,1,100,254,156,170,254,156,1,100,4,137,251,240,4,16,155,250,191,4,89,254,155, + 170,254,155,1,101,170,1,101,0,3,0,187,255,227,5,249,5,36,0,3,0,7,0,11,0,0,1,33,21,33,3,17,33,17,37,33,17,33,1,161, + 3,114,252,142,80,4,18,251,88,5,62,250,194,2,215,170,2,92,251,240,4,16,155,250,191,0,0,0,0,3,0,187,255,227,5,249,5,36,0,11, + 0,15,0,19,0,0,9,2,7,9,1,39,9,1,55,9,1,37,17,33,17,37,33,17,33,5,61,254,149,1,107,121,254,150,254,150,121,1,107,254, + 149,121,1,106,1,106,252,141,4,18,251,88,5,62,250,194,3,236,254,150,254,150,120,1,106,254,149,121,1,106,1,106,121,254,149,1,107,36,251,240, + 4,16,155,250,191,0,0,0,0,3,0,187,255,227,5,249,5,36,0,3,0,7,0,11,0,0,1,51,21,35,1,17,33,17,37,33,17,33,2,240, + 212,212,254,97,4,18,251,88,5,62,250,194,3,1,254,2,134,251,240,4,16,155,250,191,0,1,0,175,0,0,6,74,5,154,0,7,0,25,64,10, + 2,4,6,0,8,4,6,2,0,8,16,220,220,60,220,49,0,16,60,220,220,220,48,51,17,51,17,33,21,33,17,175,127,5,28,250,228,5,154,253, + 117,127,253,112,0,1,0,175,0,0,6,74,5,154,0,7,0,0,33,35,17,33,53,33,17,51,6,74,127,250,228,5,28,127,2,144,127,2,139,0, + 0,1,0,175,0,0,6,73,5,154,0,7,0,0,1,21,33,17,35,17,33,53,6,73,253,115,128,253,115,5,154,127,250,229,5,27,127,0,0,0, + 0,1,0,175,0,0,6,73,5,154,0,7,0,0,51,53,33,17,51,17,33,21,175,2,141,128,2,141,127,5,27,250,229,127,0,0,0,1,0,175, + 0,0,3,124,5,154,0,7,0,0,51,17,51,17,33,21,33,17,175,127,2,78,253,178,5,154,253,117,127,253,112,0,0,1,0,175,0,0,3,124, + 5,154,0,11,0,0,33,35,17,51,17,33,21,33,21,33,21,33,1,46,127,127,2,78,253,178,2,78,253,178,5,154,254,36,127,228,127,0,0,0, + 0,1,0,175,0,0,6,74,5,154,0,11,0,0,33,35,17,51,17,33,21,33,21,33,21,33,1,46,127,127,5,28,250,228,5,28,250,228,5,154, + 254,36,127,228,127,0,0,0,0,2,0,175,0,0,6,74,5,154,0,7,0,11,0,0,33,17,51,17,33,21,33,17,33,35,17,51,2,18,127,3, + 185,252,71,254,157,127,127,5,154,253,117,127,253,112,5,154,0,3,0,175,0,0,6,74,5,154,0,3,0,11,0,15,0,0,33,35,17,51,1,17, + 51,17,33,21,33,17,33,35,17,51,1,46,127,127,2,71,127,2,86,253,170,254,157,127,127,5,154,250,102,5,154,253,117,127,253,112,5,154,0,0, + 0,2,0,175,0,0,6,74,5,154,0,3,0,15,0,0,33,35,17,51,1,35,17,51,17,33,21,33,21,33,21,33,1,46,127,127,1,99,127,127, + 3,185,252,71,3,185,252,71,5,154,250,102,5,154,254,36,127,228,127,0,0,1,0,175,255,175,6,74,5,235,0,15,0,0,51,17,51,17,33,1, + 23,1,33,21,33,1,39,1,33,17,175,127,2,39,1,83,115,254,197,2,106,253,92,254,170,115,1,61,254,20,5,154,253,117,2,220,53,253,89,127, + 253,31,54,2,171,253,112,0,0,2,0,175,255,175,6,74,5,235,0,19,0,23,0,0,1,23,3,33,21,33,7,33,21,33,1,39,19,33,17,35, + 17,51,17,33,3,55,33,21,4,168,115,234,2,25,253,173,106,2,189,253,8,254,254,115,233,254,104,127,127,2,120,165,106,253,195,5,235,53,254,8, + 127,228,127,253,211,54,1,247,254,36,5,154,254,36,254,157,228,228,0,0,0,2,0,175,255,175,6,74,5,235,0,15,0,19,0,0,1,23,1,33, + 21,33,1,39,1,33,17,35,17,51,17,33,1,35,17,51,5,130,115,254,197,1,144,254,54,254,170,115,1,61,254,157,127,127,1,158,252,255,127,127, + 5,235,53,253,89,127,253,31,54,2,171,253,112,5,154,253,117,252,241,5,154,0,0,0,0,3,0,175,255,175,6,74,5,235,0,19,0,23,0,27, + 0,0,33,35,17,51,17,33,1,23,3,33,21,33,7,33,21,33,1,39,19,33,1,35,17,51,1,55,33,21,2,145,127,127,1,244,1,2,115,234, + 1,58,254,140,106,1,222,253,231,254,254,115,233,254,236,254,157,127,127,2,178,106,254,71,5,154,254,36,2,45,53,254,8,127,228,127,253,211,54,1, + 247,254,36,5,154,252,193,228,228,0,0,0,0,1,0,217,255,167,5,203,5,93,0,42,0,0,19,53,36,37,54,55,54,53,52,38,35,34,7,39, + 54,51,50,22,21,20,7,6,5,4,23,22,21,20,6,35,34,39,55,22,51,50,54,53,52,39,38,39,36,217,1,155,1,64,200,101,61,77,62,80, + 55,115,90,160,136,176,148,227,254,137,1,119,227,148,176,136,160,90,115,55,80,62,77,61,101,200,254,192,2,46,168,40,89,55,79,48,60,48,58,62, + 126,106,160,121,159,91,140,60,60,140,91,159,121,160,106,126,62,58,48,60,48,79,55,89,0,1,0,217,255,167,5,203,5,93,0,42,0,0,1,4, + 5,6,7,6,21,20,22,51,50,55,23,6,35,34,38,53,52,55,54,37,36,39,38,53,52,54,51,50,23,7,38,35,34,6,21,20,23,22,23,4, + 5,5,203,254,101,254,192,200,101,61,77,62,80,55,115,90,160,136,176,148,227,1,119,254,137,227,148,176,136,160,90,115,55,80,62,77,61,101,200,1, + 64,1,155,2,46,40,89,55,79,48,60,48,58,62,126,106,160,121,159,91,140,60,60,140,91,159,121,160,106,126,62,58,48,60,48,79,55,89,40,0, + 0,2,0,217,0,30,5,219,4,230,0,2,0,6,0,0,1,17,9,2,53,1,5,49,252,162,4,8,250,254,5,2,1,32,2,196,254,158,253,156, + 2,17,166,2,17,0,0,0,0,2,0,217,0,30,5,219,4,230,0,2,0,6,0,0,9,2,3,17,1,21,1,131,3,94,252,162,170,5,2,1, + 32,1,98,1,98,252,58,4,200,253,239,166,0,3,0,217,255,158,5,219,5,100,0,3,0,6,0,10,0,0,23,53,33,21,3,17,9,2,53,1, + 217,5,2,170,252,162,4,8,250,254,5,2,98,170,170,2,0,2,196,254,158,253,156,2,17,166,2,17,0,3,0,217,255,158,5,219,5,100,0,3, + 0,6,0,10,0,0,23,53,33,21,9,2,3,17,1,21,217,5,2,251,168,3,94,252,162,170,5,2,98,170,170,2,0,1,98,1,98,252,58,4, + 200,253,239,166,0,2,0,121,1,103,7,135,3,162,0,23,0,31,0,0,1,54,50,22,20,6,34,39,38,39,33,6,7,6,34,38,52,54,50,23, + 22,23,33,54,4,34,6,20,22,50,54,52,5,159,83,235,170,167,242,81,51,19,253,81,20,51,84,242,162,166,235,87,52,19,2,175,20,252,100,114, + 79,79,115,79,3,79,83,168,239,164,81,51,67,66,51,82,162,242,167,85,52,67,68,14,80,114,79,79,113,0,0,0,0,2,0,121,1,103,7,135, + 3,162,0,23,0,31,0,0,1,6,34,38,52,54,50,23,22,23,33,54,55,54,50,22,20,6,34,39,38,39,33,6,36,50,54,52,38,34,6,20, + 2,97,83,235,170,167,242,81,51,19,2,175,20,51,84,242,162,166,235,87,52,19,253,81,20,3,156,114,79,79,115,79,1,186,83,168,239,164,81,51, + 67,66,51,82,162,242,167,85,52,67,68,14,80,114,79,79,113,0,0,0,0,2,0,98,1,103,6,82,3,162,0,13,0,21,0,0,19,55,33,54, + 55,54,50,22,20,6,34,39,38,39,36,38,34,6,20,22,50,54,98,1,3,192,19,49,91,235,165,162,242,83,52,19,1,154,79,115,80,79,116,79, + 2,46,168,68,47,89,167,242,162,82,51,66,142,80,81,113,79,79,0,0,0,4,0,121,255,160,6,59,5,100,0,3,0,7,0,11,0,15,0,0, + 1,51,17,35,5,33,21,33,3,35,17,51,37,33,53,33,3,6,168,168,1,40,2,13,253,243,128,168,168,254,216,253,243,2,13,5,100,253,243,128, + 170,253,115,2,13,128,170,0,0,1,0,238,0,0,3,60,5,155,0,7,0,0,33,35,17,35,53,33,21,35,2,84,126,232,2,78,232,5,28,127, + 127,0,0,0,0,2,0,200,0,0,5,19,5,236,0,3,0,10,0,0,51,53,33,21,1,51,9,1,51,1,35,200,4,75,251,245,195,1,35,1, + 34,195,254,152,250,170,170,5,236,252,84,3,172,251,94,0,0,2,0,200,0,0,5,19,5,236,0,3,0,10,0,0,19,33,21,33,19,1,51,1, + 35,9,1,200,4,75,251,181,64,1,105,250,1,104,195,254,222,254,221,5,236,170,250,190,4,162,251,94,3,172,252,84,0,2,0,200,0,0,5,19, + 5,236,0,3,0,10,0,0,19,33,21,33,23,51,9,1,51,1,35,200,4,75,251,181,64,195,1,35,1,34,195,254,152,250,5,236,170,160,252,84, + 3,172,251,94,0,2,1,27,0,0,5,153,4,126,0,12,0,21,0,0,41,1,17,51,17,22,23,30,1,23,22,23,33,1,17,33,38,39,46,1, + 39,38,5,153,251,130,170,90,86,165,238,70,37,18,1,20,252,44,2,69,15,27,61,206,143,63,4,126,254,235,18,37,70,238,164,86,90,2,68,253, + 188,65,63,143,206,61,27,0,0,2,1,27,0,0,5,153,4,126,0,2,0,7,0,0,9,1,33,5,53,1,51,17,4,239,252,214,3,42,252,44, + 3,212,170,3,212,252,214,170,170,3,212,251,130,0,0,0,0,1,255,250,254,119,6,150,5,193,0,6,0,0,9,1,35,9,1,35,1,3,183,2, + 223,203,253,125,253,125,203,2,221,5,193,248,182,6,119,249,137,7,74,0,0,1,255,250,254,119,6,150,5,193,0,6,0,0,9,1,51,9,1,51, + 1,2,217,253,33,203,2,131,2,131,203,253,35,254,119,7,74,249,137,6,119,248,182,0,0,1,0,140,254,119,6,4,5,193,0,16,0,29,64,6, + 12,14,18,5,3,17,16,220,220,16,220,220,49,0,64,5,13,18,8,0,17,16,220,204,16,204,48,1,34,4,21,17,35,17,16,0,32,0,25,1, + 35,17,52,36,3,72,219,254,204,173,1,189,1,254,1,189,173,254,207,5,29,227,252,251,57,4,224,1,66,1,40,254,216,254,190,251,32,4,199,250, + 229,0,0,0,0,1,0,140,254,119,6,4,5,193,0,16,0,29,64,6,12,14,17,5,3,18,16,220,220,16,220,220,49,0,64,5,13,18,8,0, + 17,16,220,204,16,204,48,5,50,36,53,17,51,17,16,0,32,0,25,1,51,17,20,4,3,72,219,1,52,173,254,67,254,2,254,67,173,1,49,229, + 227,252,4,199,251,32,254,190,254,216,1,40,1,66,4,224,251,57,250,229,255,255,0,6,254,35,3,238,6,117,18,6,14,156,0,0,0,1,0,219, + 2,72,1,174,3,70,0,3,0,18,183,2,131,0,4,1,25,0,4,16,212,236,49,0,16,212,236,48,19,51,21,35,219,211,211,3,70,254,0,0, + 0,1,0,249,1,49,4,9,4,25,0,9,0,0,19,33,27,1,33,7,19,39,7,19,249,1,43,93,94,1,42,242,94,244,243,93,2,253,1,28, + 254,228,176,254,228,176,176,1,28,0,0,0,0,3,0,217,0,30,5,219,4,231,0,3,0,7,0,25,0,0,1,51,21,35,17,51,21,35,3,33, + 53,33,1,55,9,1,23,1,33,21,33,1,7,9,1,39,2,223,246,246,246,246,82,254,76,1,180,254,139,120,1,202,1,202,120,254,139,1,180,254, + 76,1,117,120,254,54,254,54,120,1,19,245,4,201,246,254,60,170,1,117,120,254,54,1,202,120,254,139,170,254,139,120,1,202,254,54,120,0,0,0, + 0,3,0,217,255,194,7,39,5,66,0,5,0,8,0,11,0,0,23,17,9,1,17,1,39,1,17,9,1,17,217,3,39,3,39,252,217,155,254,30, + 3,24,1,226,62,5,128,253,176,2,80,250,128,2,78,113,1,94,253,68,1,94,254,162,2,198,0,0,0,2,0,217,255,194,7,39,5,66,0,8, + 0,11,0,0,37,21,9,1,17,9,1,21,1,33,1,17,7,39,252,217,252,217,3,39,3,39,253,116,254,202,254,30,162,224,2,78,253,178,5,128, + 253,176,2,80,221,254,28,1,94,253,68,0,0,2,0,217,255,194,7,39,5,66,0,8,0,11,0,0,19,53,9,1,17,9,1,53,1,33,1,17, + 217,3,39,3,39,252,217,252,217,2,140,1,54,1,226,4,98,224,253,178,2,78,250,128,2,80,253,176,221,1,228,254,162,2,188,0,0,1,0,217, + 255,194,7,39,5,66,0,7,0,0,23,53,9,1,53,1,21,1,217,2,140,253,116,6,78,252,217,62,224,1,225,1,226,221,251,93,221,2,80,0, + 0,1,0,217,255,194,7,39,5,66,0,7,0,0,5,9,1,53,1,21,9,1,7,39,252,217,252,217,6,78,253,116,2,140,62,2,80,253,176,221, + 4,163,221,254,30,254,31,0,0,2,0,217,1,96,5,219,3,244,0,26,0,30,0,0,19,30,1,51,50,63,2,54,51,50,22,23,21,46,1,35, + 34,7,6,15,1,6,35,34,38,39,1,21,33,53,217,103,169,86,94,155,22,15,147,110,97,179,105,98,172,88,94,155,15,6,17,146,110,97,179,105, + 5,2,250,254,3,244,85,75,61,9,6,59,69,78,178,83,76,61,6,2,7,59,69,79,254,200,170,170,0,1,0,99,0,0,5,121,4,162,0,10, + 0,0,19,51,0,19,18,1,51,0,3,35,2,99,215,1,117,63,73,1,107,215,254,56,102,186,102,4,162,254,144,254,37,1,218,1,113,254,129,252, + 221,3,35,0,0,1,0,99,0,0,5,121,4,162,0,10,0,0,51,0,19,51,18,1,35,0,3,2,1,99,1,200,102,186,102,1,200,215,254,149, + 73,63,254,139,1,127,3,35,252,221,254,129,1,113,1,218,254,37,254,144,0,2,0,190,255,250,5,219,5,10,0,19,0,41,0,0,1,33,34,7, + 6,21,20,22,51,33,21,33,34,39,38,53,52,54,51,33,17,33,32,39,38,17,16,55,54,41,1,21,33,34,7,6,21,20,23,22,51,33,5,219, + 253,107,58,40,40,80,58,2,149,253,106,128,90,89,178,129,2,150,253,107,254,241,188,189,189,186,1,15,2,151,253,106,200,138,139,139,138,201,2,149, + 3,12,40,41,57,58,80,170,90,88,130,128,180,252,68,189,190,1,13,1,12,191,189,170,139,141,198,200,139,139,0,0,0,2,0,217,255,250,5,246, + 5,10,0,19,0,41,0,0,19,53,33,50,22,21,20,7,6,35,33,53,33,50,54,53,52,39,38,35,1,53,33,50,55,54,53,52,39,38,35,33, + 53,33,32,23,22,17,16,7,6,33,217,2,150,129,178,89,90,128,253,106,2,149,58,80,40,40,58,253,107,2,149,201,138,139,139,138,200,253,106,2, + 151,1,15,186,189,189,188,254,241,3,12,170,180,128,130,88,90,170,80,58,57,41,40,252,238,170,139,139,200,198,141,139,170,189,191,254,244,254,243,190, + 189,0,0,0,0,2,0,210,0,0,5,226,5,78,0,17,0,36,0,0,33,17,52,38,34,6,21,17,35,17,52,55,54,51,50,22,21,17,33,17, + 16,0,32,23,22,25,1,35,17,52,39,38,32,7,6,21,17,3,228,80,116,80,170,90,88,130,128,180,252,68,1,124,2,24,192,188,170,138,140,254, + 112,138,140,2,198,58,80,80,58,253,58,2,200,128,90,88,178,128,253,56,2,198,1,16,1,120,188,186,254,240,253,56,2,200,200,138,138,138,138,202, + 253,58,0,0,0,2,0,210,255,227,5,226,5,49,0,17,0,36,0,0,1,17,20,22,50,54,53,17,51,17,20,7,6,35,34,38,53,17,33,17, + 16,0,32,39,38,25,1,51,17,20,23,22,32,55,54,53,17,2,208,80,116,80,170,90,88,130,128,180,3,188,254,132,253,232,192,188,170,138,140,1, + 144,138,140,5,49,253,58,58,80,80,58,2,198,253,56,128,90,88,178,128,2,200,253,58,254,240,254,136,188,186,1,16,2,200,253,56,200,138,138,138, + 138,202,2,198,0,1,1,124,0,0,5,56,5,213,0,27,0,0,1,52,39,38,39,17,35,17,6,7,6,21,17,35,17,52,55,54,55,17,51,17, + 22,23,22,21,17,35,4,142,90,58,75,170,75,58,90,170,140,108,145,170,147,108,138,170,2,159,128,89,58,20,252,58,3,198,19,58,90,128,253,97, + 2,157,200,140,108,23,1,97,254,159,23,108,138,200,253,97,0,2,0,217,255,52,5,219,5,213,0,27,0,31,0,0,5,35,17,35,17,35,17,33, + 53,33,53,33,53,33,17,51,17,51,17,51,17,33,21,33,21,33,21,33,39,53,35,21,4,89,170,170,170,254,126,1,130,254,126,1,130,170,170,170, + 1,130,254,126,1,130,254,126,170,170,204,2,44,253,212,2,44,170,240,168,2,51,253,205,2,51,253,205,168,240,170,170,240,240,0,0,0,2,0,217, + 0,94,5,219,4,166,0,3,0,10,0,0,1,51,21,35,9,2,21,1,53,1,4,164,211,211,1,55,251,248,4,8,250,254,5,2,3,0,254,1, + 238,254,145,254,147,182,1,209,166,1,209,0,0,2,0,217,0,94,5,219,4,166,0,3,0,10,0,0,1,51,21,35,3,53,1,21,1,53,1,1, + 61,211,211,100,5,2,250,254,4,6,3,0,254,1,238,182,254,47,166,254,47,182,1,109,0,3,0,148,0,46,10,204,4,223,0,6,0,13,0,20, + 0,0,9,2,21,1,53,1,5,9,1,21,1,53,1,5,9,1,21,1,53,1,10,204,252,198,3,58,251,202,4,54,253,0,252,198,3,58,251,202, + 4,54,252,254,252,198,3,58,251,202,4,54,4,17,254,112,254,114,197,2,8,159,2,10,206,254,112,254,114,197,2,8,159,2,10,206,254,112,254,114, + 197,2,8,159,2,10,0,0,0,3,0,148,0,46,10,204,4,223,0,6,0,13,0,20,0,0,19,53,1,21,1,53,1,3,53,1,21,1,53,1, + 3,53,1,21,1,53,1,148,4,54,251,202,3,58,56,4,54,251,202,3,58,58,4,54,251,202,3,58,4,17,206,253,246,159,253,248,197,1,142,1, + 144,206,253,246,159,253,248,197,1,142,1,144,206,253,246,159,253,248,197,1,142,0,0,0,0,3,0,217,254,46,5,219,6,212,0,6,0,10,0,17, + 0,0,19,9,1,53,1,21,9,1,33,53,33,17,9,1,21,1,53,1,217,3,193,252,63,5,2,250,254,5,2,250,254,5,2,252,64,3,192,250, + 254,5,2,254,222,1,21,1,18,178,254,144,170,254,145,3,254,170,3,78,254,235,254,238,178,1,112,170,1,111,0,0,0,3,0,217,254,46,5,219, + 6,212,0,6,0,10,0,17,0,0,1,21,1,53,1,21,9,1,53,33,21,1,53,1,21,1,53,1,5,219,250,254,5,2,252,63,254,191,5,2, + 250,254,5,2,250,254,3,192,254,222,176,1,111,170,1,112,178,254,238,2,57,170,170,3,248,176,254,145,170,254,144,178,1,18,0,0,0,2,0,217, + 0,0,5,219,4,168,0,6,0,10,0,0,37,21,1,53,1,21,9,1,53,33,21,5,219,250,254,5,2,252,64,254,190,5,2,176,176,1,111,170, + 1,112,178,254,238,2,57,170,170,0,0,0,0,2,0,217,0,0,5,219,4,168,0,6,0,10,0,0,55,9,1,53,1,21,9,1,33,53,33,217, + 3,193,252,63,5,2,250,254,5,2,250,254,5,2,176,1,21,1,18,178,254,144,170,254,145,3,254,170,0,2,0,217,255,41,5,219,5,87,0,5, + 0,16,0,0,1,0,5,53,36,1,17,21,0,37,53,36,1,21,0,5,4,5,219,254,84,252,170,3,105,1,153,254,129,252,125,3,131,1,127,254, + 129,254,36,1,220,4,128,254,95,133,174,145,1,190,250,169,215,1,128,124,166,132,1,120,215,254,229,93,93,0,0,0,0,2,0,217,255,41,5,219, + 5,87,0,5,0,16,0,0,19,53,0,5,21,36,1,0,37,36,1,53,0,5,21,4,1,217,1,153,3,105,252,170,254,84,1,127,1,220,254,36, + 254,129,1,127,3,131,252,125,254,129,4,128,215,254,66,145,174,133,253,33,1,27,93,93,1,27,215,254,136,132,166,124,254,128,0,0,0,2,0,217, + 254,147,5,219,6,29,0,33,0,38,0,0,33,21,0,37,1,39,1,38,39,53,4,23,55,38,37,53,36,37,19,23,3,54,55,21,6,15,1,4, + 23,21,38,37,7,4,1,55,6,7,22,5,219,254,243,254,42,254,227,130,1,15,186,213,0,255,218,63,240,254,216,1,181,1,59,246,131,166,189,130, + 200,226,105,1,29,246,218,254,128,64,1,154,254,93,48,113,119,94,215,1,37,164,253,161,75,2,65,54,35,174,40,65,135,70,43,166,60,122,2,12, + 75,254,159,100,130,215,148,96,223,103,182,215,214,135,136,148,1,226,102,35,23,18,0,0,0,2,0,217,254,147,5,219,6,29,0,33,0,38,0,0, + 19,53,22,5,1,23,1,22,23,21,4,5,7,36,37,21,4,5,3,39,19,6,7,53,54,63,1,4,7,53,36,37,55,36,5,7,54,55,38,217, + 250,1,216,1,20,131,254,252,191,222,254,184,254,252,88,1,39,1,125,254,56,254,182,238,130,143,154,117,166,230,99,254,204,187,1,18,1,66,56,254, + 158,1,246,13,35,37,30,4,128,215,251,140,2,77,75,253,214,46,31,166,48,81,189,116,59,174,76,158,254,5,75,1,49,103,127,215,162,118,213,125, + 183,215,203,105,119,105,144,27,8,7,6,0,0,2,0,217,254,223,5,219,6,35,0,23,0,27,0,0,1,23,7,33,21,33,3,33,21,33,7,33, + 21,33,3,39,55,33,53,33,55,33,17,33,1,19,33,17,4,77,160,88,1,70,254,125,221,2,96,253,99,46,2,203,252,248,109,160,88,254,187,1, + 130,46,254,80,3,7,254,230,221,253,224,6,35,58,245,170,253,152,170,128,170,254,209,58,245,170,128,3,188,252,238,2,104,253,152,0,0,2,0,217, + 254,223,5,219,6,35,0,23,0,27,0,0,1,23,7,33,17,33,7,33,21,33,3,39,55,33,53,33,55,33,53,33,19,33,53,33,23,3,33,17, + 4,77,160,88,1,70,253,99,46,2,203,252,248,109,160,88,254,187,1,130,46,254,80,1,237,221,253,54,3,7,120,221,1,182,6,35,58,245,252,68, + 128,170,254,209,58,245,170,128,170,2,104,170,170,253,152,2,104,0,0,0,0,1,0,217,255,63,5,219,4,244,0,20,0,0,19,33,21,33,17,33, + 21,33,23,7,33,21,33,7,39,55,33,53,33,55,33,217,5,2,251,168,4,88,254,85,27,77,1,221,253,171,146,139,77,254,35,2,85,90,253,81, + 4,244,170,253,152,170,19,109,170,207,98,109,170,128,0,0,0,1,0,217,255,63,5,219,4,244,0,20,0,0,37,21,33,7,39,55,33,53,33,55, + 33,53,33,17,33,53,33,17,33,23,7,5,219,253,171,146,139,77,254,35,2,85,90,253,81,4,88,251,168,5,2,254,85,27,77,184,170,207,98,109, + 170,128,170,2,104,170,252,68,19,109,0,0,0,2,0,217,254,229,5,220,4,168,0,27,0,34,0,0,37,38,35,34,6,7,53,62,1,51,50,23, + 55,23,7,22,51,50,54,55,21,14,1,35,34,39,7,39,9,2,21,1,53,1,2,230,99,67,88,172,98,104,180,96,94,120,110,155,105,101,69,86, + 168,104,106,178,98,95,122,108,155,3,93,252,64,3,192,250,254,5,2,17,31,76,84,180,78,68,42,243,70,233,32,74,86,180,78,68,43,240,70,4, + 205,254,235,254,238,178,1,112,170,1,111,0,0,2,0,217,254,229,5,220,4,168,0,27,0,34,0,0,37,38,35,34,6,7,53,62,1,51,50,23, + 55,23,7,22,51,50,54,55,21,14,1,35,34,39,7,39,1,53,1,21,1,53,1,2,230,99,67,88,172,98,104,180,96,94,120,110,155,105,101,69, + 86,168,104,106,178,98,95,122,108,155,254,91,5,2,250,254,3,192,17,31,76,84,180,78,68,42,243,70,233,32,74,86,180,78,68,43,240,70,4,205, + 176,254,145,170,254,144,178,1,18,0,0,0,0,2,0,217,254,166,5,219,5,87,0,27,0,38,0,0,5,38,35,34,6,7,53,62,1,51,50,23, + 55,23,7,22,51,50,54,55,21,14,1,35,34,39,7,39,1,0,5,4,1,21,0,37,53,36,1,2,230,99,68,88,172,98,105,179,97,93,121,109, + 155,105,101,69,86,169,103,105,179,97,96,121,108,155,3,93,254,129,254,36,1,220,1,127,254,129,252,125,3,131,1,127,46,32,76,84,179,78,69,43, + 243,70,233,32,75,85,179,78,69,44,241,70,5,148,254,229,93,93,254,229,215,1,120,132,166,124,1,128,0,2,0,225,254,162,5,227,5,87,0,27, + 0,38,0,0,5,38,35,34,6,7,53,62,1,51,50,23,55,23,7,22,51,50,54,55,21,14,1,35,34,39,7,39,1,53,0,5,21,4,1,53, + 0,37,36,2,238,99,68,88,172,98,105,179,97,93,121,109,155,105,101,69,86,169,103,105,179,97,96,121,108,155,254,91,1,127,3,131,252,125,254,129, + 1,127,1,220,254,36,51,32,76,84,179,78,69,43,244,70,234,32,75,85,179,78,69,44,240,70,5,152,215,254,128,124,166,132,254,136,215,1,27,93, + 93,0,0,0,0,3,0,217,254,246,5,219,6,12,0,11,0,15,0,18,0,0,1,23,3,55,17,37,3,39,19,37,53,9,1,17,7,3,39,19, + 5,4,231,158,131,217,253,185,219,158,220,253,226,3,76,1,12,139,208,158,145,254,10,6,12,64,254,193,89,251,56,240,253,232,64,2,25,224,166,1, + 92,252,239,2,196,57,254,4,64,1,97,206,0,3,0,217,254,246,5,219,6,12,0,11,0,15,0,18,0,0,1,39,19,7,17,5,19,23,3,5, + 21,9,1,17,55,19,23,3,37,1,205,158,131,217,2,71,219,158,220,2,30,252,180,254,244,139,208,158,145,1,246,254,246,64,1,63,89,4,200,240, + 2,24,64,253,231,224,166,254,164,3,17,253,60,57,1,252,64,254,159,206,0,3,0,217,254,125,5,219,6,133,0,3,0,23,0,26,0,0,1,17, + 7,3,1,53,33,19,37,53,1,19,23,3,55,17,37,3,33,21,33,3,39,55,1,19,5,5,49,142,207,253,5,1,124,160,253,228,3,73,193,158, + 129,219,253,183,133,2,206,252,236,118,158,92,1,39,144,254,13,1,158,2,196,58,254,5,253,113,170,1,134,223,166,1,91,1,215,64,254,197,90,251, + 56,241,254,187,170,254,223,64,225,2,208,1,95,205,0,0,0,3,0,213,254,125,5,215,6,133,0,19,0,23,0,26,0,0,55,17,1,19,23,3, + 5,21,1,3,33,21,33,3,39,55,35,53,33,55,1,37,17,37,1,3,37,213,2,165,233,158,233,1,191,253,57,131,3,74,252,112,118,158,92,186, + 1,0,93,1,7,254,70,1,16,1,71,106,1,113,156,4,200,254,233,2,56,64,253,199,185,166,254,219,254,192,170,254,223,64,225,170,228,2,129,181, + 253,60,112,1,94,254,252,152,255,255,3,150,255,66,4,105,5,184,16,39,13,74,2,187,252,250,16,39,13,74,2,187,2,114,16,7,13,74,2,187, + 255,182,0,0,255,255,0,236,1,254,7,19,2,252,16,38,13,74,17,182,16,39,13,74,2,187,255,182,16,7,13,74,5,101,255,182,255,255,0,236, + 255,66,7,19,5,184,16,39,13,74,0,17,252,250,16,39,13,74,5,101,2,114,16,7,13,74,2,187,255,182,0,0,255,255,0,236,255,66,7,19, + 5,184,16,39,13,74,5,101,252,250,16,39,13,74,0,17,2,114,16,7,13,74,2,187,255,182,0,0,0,1,0,88,255,236,7,168,5,174,0,33, + 0,0,1,33,53,33,54,55,54,36,51,33,21,33,6,7,6,7,6,7,33,21,33,22,23,22,23,22,23,33,21,33,34,36,39,38,2,20,254,68, + 1,186,15,77,94,1,100,192,2,184,253,71,147,138,138,75,65,8,4,244,251,14,7,64,74,139,138,147,2,185,253,72,192,254,156,94,72,2,115,160, + 148,143,176,200,159,1,77,79,138,120,93,160,74,120,139,78,76,1,159,198,176,133,0,0,0,1,0,175,255,236,6,73,5,174,0,27,0,0,1,22, + 18,4,23,33,21,33,34,36,2,16,18,36,51,33,21,33,6,4,2,7,33,17,51,17,35,17,1,87,7,137,1,22,147,2,185,253,71,192,254,157, + 190,190,1,99,192,2,185,253,71,147,254,235,139,9,4,85,160,160,2,115,74,254,253,154,1,159,198,1,96,1,116,1,96,200,159,1,156,254,254,93, + 1,16,253,64,1,16,0,0,0,1,0,217,0,155,4,229,4,103,0,25,0,0,37,32,36,16,36,41,1,21,33,34,7,6,7,33,53,51,17,35, + 53,33,22,23,22,51,33,21,3,43,254,216,254,214,1,42,1,40,1,186,254,70,230,107,78,29,2,232,142,142,253,24,37,70,114,223,1,186,155,246, + 1,224,246,142,81,59,132,172,254,26,172,145,48,81,142,0,255,255,0,175,255,236,6,73,7,72,16,38,12,141,0,0,16,7,13,74,2,56,4,2, + 0,2,0,175,255,236,6,73,6,210,0,28,0,32,0,0,1,22,23,22,23,22,23,33,21,33,34,36,2,53,52,18,36,51,33,21,33,6,7,6, + 7,6,7,33,21,17,33,53,33,1,87,7,63,74,140,137,148,2,185,253,71,192,254,157,190,190,1,99,192,2,185,253,71,148,137,139,75,64,9,4, + 245,250,165,5,91,2,115,74,120,139,78,76,1,159,198,1,96,187,185,1,96,200,159,1,77,79,138,120,93,160,3,191,160,0,0,0,0,2,0,217, + 0,155,4,229,5,125,0,22,0,26,0,0,37,32,36,53,52,36,41,1,21,5,6,7,6,7,33,21,33,22,23,22,51,33,21,17,33,53,33,3, + 43,254,216,254,214,1,42,1,40,1,186,254,70,232,105,78,29,3,118,252,138,37,70,114,223,1,186,252,27,3,229,155,246,240,240,246,142,1,1,79, + 58,133,142,145,48,81,142,4,86,140,0,0,0,2,0,175,254,218,6,73,5,174,0,28,0,32,0,0,1,22,23,22,23,22,23,33,21,33,34,36, + 2,53,52,18,36,51,33,21,33,6,7,6,7,6,7,33,21,17,33,53,33,1,87,7,63,74,140,137,148,2,185,253,71,192,254,157,190,190,1,99, + 192,2,185,253,71,148,137,139,75,64,9,4,245,250,165,5,91,2,115,74,120,139,78,76,1,159,198,1,96,187,185,1,96,200,159,1,77,79,138,120, + 93,160,252,103,160,0,0,0,0,1,0,175,255,236,6,73,5,174,0,31,0,0,1,33,21,33,23,22,23,22,23,33,21,33,34,36,2,53,52,18, + 36,51,33,21,33,6,7,6,7,6,7,33,21,33,1,87,4,242,251,67,17,74,140,138,147,2,185,253,71,192,254,157,190,190,1,99,192,2,185,253, + 71,147,138,139,75,14,12,4,198,251,14,2,115,160,34,139,78,76,1,159,198,1,96,187,185,1,96,200,159,1,77,79,138,27,26,160,0,1,0,88, + 255,236,7,168,5,174,0,33,0,0,1,33,21,33,6,7,6,4,35,33,53,33,54,55,54,55,54,55,33,53,33,38,39,38,39,38,39,33,53,33, + 50,4,23,22,5,236,1,188,254,70,15,77,94,254,156,192,253,72,2,185,147,138,138,75,65,8,251,12,4,242,7,64,74,139,138,147,253,71,2,184, + 192,1,100,94,72,3,39,160,148,143,176,200,159,1,77,79,138,120,93,160,74,120,139,78,76,1,159,198,176,133,0,0,0,1,0,175,255,236,6,73, + 5,174,0,27,0,0,1,38,2,36,39,33,53,33,50,4,18,16,2,4,35,33,53,33,54,36,18,55,33,17,35,17,51,17,5,161,7,137,254,234, + 147,253,71,2,185,192,1,99,190,190,254,157,192,253,71,2,185,147,1,21,139,9,251,171,160,160,3,39,74,1,3,154,1,159,198,254,160,254,140,254, + 160,200,159,1,156,1,2,93,254,240,2,192,254,240,0,0,0,1,0,217,0,155,4,229,4,103,0,25,0,0,1,32,4,16,4,41,1,53,33,50, + 55,54,55,33,21,35,17,51,21,33,38,39,38,35,37,53,2,147,1,40,1,42,254,214,254,216,254,70,1,186,230,107,78,29,253,24,142,142,2,232, + 37,70,114,223,254,70,4,103,246,254,32,246,142,81,58,133,172,1,230,172,145,48,80,1,142,0,0,0,0,2,0,175,255,236,6,73,6,210,0,28, + 0,32,0,0,1,38,39,38,39,38,39,33,53,33,50,4,18,21,20,2,4,35,33,53,33,54,55,54,55,54,55,33,53,1,33,53,33,5,161,7, + 63,74,140,137,148,253,71,2,185,192,1,99,190,190,254,157,192,253,71,2,185,148,137,139,75,64,9,251,11,5,91,250,165,5,91,3,39,74,120,139, + 78,76,1,159,198,254,160,187,185,254,160,200,159,1,77,79,138,120,93,160,3,11,160,0,0,2,0,217,0,155,4,229,5,125,0,22,0,26,0,0, + 1,32,4,21,20,4,41,1,53,37,50,55,54,55,33,53,5,38,39,38,7,33,53,37,33,53,33,2,147,1,40,1,42,254,214,254,216,254,70,1, + 186,232,105,78,29,252,138,3,118,37,70,116,221,254,70,3,229,252,27,3,229,4,103,246,241,239,246,142,1,80,58,133,142,1,145,49,82,1,142,138, + 140,0,0,0,0,1,0,217,0,0,6,31,5,194,0,11,0,0,1,33,17,33,21,33,17,33,21,33,17,33,6,31,251,100,4,156,250,186,5,70, + 251,100,4,156,2,130,254,40,170,5,194,170,254,20,0,0,0,3,0,74,255,220,4,137,4,28,0,19,0,27,0,35,0,0,1,50,23,55,23,7, + 22,21,20,0,35,34,39,7,39,55,38,53,52,0,5,38,35,34,6,21,20,31,1,22,51,50,54,53,52,39,2,104,186,143,117,99,118,110,254,196, + 221,184,141,118,99,117,111,1,60,1,192,100,128,162,233,71,99,99,126,163,233,69,4,23,113,118,99,118,141,186,221,254,196,111,118,99,118,141,186,223, + 1,60,213,72,233,165,128,99,98,71,233,163,128,98,0,0,0,1,0,114,1,76,4,82,3,140,0,7,0,0,1,17,1,53,5,17,1,21,2,162, + 253,208,1,176,2,48,2,122,254,210,1,74,194,250,1,46,254,182,194,0,0,2,0,146,0,0,4,130,4,196,0,4,0,9,0,0,51,17,9,1, + 17,37,33,17,9,1,146,1,248,1,248,252,182,2,164,254,174,254,174,2,160,2,36,253,220,253,96,170,1,213,1,121,254,135,0,0,0,1,1,163, + 3,218,5,15,5,220,0,7,0,0,9,1,39,1,51,1,7,1,3,45,254,238,120,1,138,90,1,136,120,254,240,4,234,254,240,120,1,138,254,118, + 120,1,16,0,0,1,1,163,0,0,5,15,2,2,0,7,0,0,37,51,1,23,1,35,1,55,3,45,90,1,16,120,254,120,90,254,118,120,242,1, + 16,120,254,118,1,138,120,0,255,255,1,163,0,0,5,15,3,63,16,38,23,23,0,0,16,7,13,136,0,0,252,38,255,255,1,163,0,0,5,15, + 4,27,16,39,23,23,0,0,0,220,16,38,23,23,0,215,16,7,13,136,0,0,252,38,0,1,1,59,255,197,2,173,6,78,0,25,0,0,1,23, + 6,20,23,22,20,7,6,20,23,22,20,7,39,54,52,39,38,52,55,54,52,39,38,52,1,183,122,76,76,124,124,76,76,124,124,122,76,76,124,124, + 76,76,124,6,78,118,79,112,80,129,248,129,80,111,80,129,249,129,118,79,112,80,129,248,129,80,112,80,129,248,0,0,0,1,0,176,254,242,2,88, + 6,20,0,5,0,0,19,33,21,35,17,35,176,1,168,240,184,6,20,143,249,109,0,0,0,1,0,199,254,242,2,111,6,20,0,5,0,0,1,17, + 35,17,35,53,2,111,184,240,6,20,248,222,6,147,143,0,0,1,0,176,254,242,2,88,6,20,0,5,0,0,19,17,51,17,51,21,176,184,240,254, + 242,7,34,249,109,143,0,0,0,1,0,199,254,242,2,111,6,20,0,5,0,0,1,33,53,51,17,51,2,111,254,88,240,184,254,242,143,6,147,0, + 0,2,2,244,255,98,6,19,2,130,0,3,0,7,0,0,1,51,17,35,19,53,33,21,2,244,144,144,200,2,87,1,186,253,168,2,144,144,144,0, + 0,2,0,100,255,98,3,132,2,130,0,3,0,7,0,0,1,21,33,53,5,51,17,35,2,188,253,168,2,144,144,144,2,130,144,144,200,253,168,0, + 0,2,2,244,1,242,6,19,5,18,0,3,0,7,0,0,1,53,33,21,37,35,17,51,3,188,2,87,253,113,144,144,1,242,144,144,200,2,88,0, + 0,2,0,100,1,242,3,132,5,18,0,3,0,7,0,0,1,21,33,53,37,35,17,51,2,188,253,168,3,32,144,144,2,130,144,144,56,2,88,0, + 0,1,0,217,1,31,5,219,3,94,0,5,0,0,1,21,33,17,35,17,5,219,251,166,168,3,94,170,254,107,2,63,0,2,0,6,1,2,4,21, + 5,18,0,7,0,15,0,0,19,36,5,2,19,4,37,18,1,18,3,4,37,2,19,36,140,1,129,1,129,137,137,254,127,254,127,137,254,241,184,184, + 2,7,2,8,184,184,253,248,1,138,137,137,1,128,1,130,138,138,254,126,253,248,1,244,2,28,177,177,254,12,253,229,177,0,0,0,0,6,0,247, + 0,1,7,9,6,19,0,3,0,49,0,59,0,70,0,79,0,89,0,0,1,33,17,33,17,21,20,6,32,38,53,52,54,59,1,17,35,34,38,53, + 52,54,32,22,29,1,33,53,52,54,51,50,22,21,20,6,43,1,17,51,50,22,21,20,6,35,34,38,61,1,1,53,52,38,35,34,6,20,22,51, + 19,35,34,6,21,20,22,51,50,54,53,1,51,50,54,52,38,34,6,21,17,21,20,22,50,54,53,52,38,35,3,108,1,40,254,216,185,254,252,184, + 184,127,170,170,127,184,184,1,4,185,1,40,185,130,131,183,183,128,170,170,128,183,183,131,130,185,254,68,98,69,68,98,98,69,166,166,69,98,98,69, + 68,98,2,80,167,68,98,97,138,98,98,138,97,98,68,2,118,1,40,254,68,170,128,183,184,131,128,186,1,40,186,129,130,184,183,128,170,170,128,183, + 184,130,129,186,254,216,186,128,131,184,183,128,170,2,80,167,69,97,97,138,98,253,176,98,68,69,98,98,68,2,247,98,138,97,97,69,253,9,167,68, + 98,98,69,68,98,0,0,0,0,1,0,217,1,31,5,219,3,94,0,5,0,0,1,33,17,51,17,33,5,219,250,254,168,4,90,1,31,2,63,254, + 107,0,0,0,0,1,0,176,3,103,3,58,6,20,0,5,0,0,1,33,17,35,17,33,3,58,254,6,144,2,138,5,132,253,227,2,173,0,0,0, + 0,1,0,134,3,103,3,16,6,20,0,5,0,0,19,53,33,17,35,17,134,2,138,144,5,132,144,253,83,2,29,0,0,1,0,176,255,112,3,58, + 2,29,0,5,0,0,33,21,33,17,51,17,3,58,253,118,144,144,2,173,253,227,0,0,0,1,0,134,255,112,3,16,2,29,0,5,0,0,51,33, + 17,51,17,33,134,1,250,144,253,118,2,29,253,83,0,0,0,1,1,175,254,0,3,250,7,108,0,25,0,0,1,17,52,55,26,1,51,50,22,21, + 20,6,35,34,39,38,39,46,1,35,34,3,2,21,48,17,1,175,3,12,190,202,80,100,64,55,43,28,24,15,6,9,16,104,17,8,254,0,5,8, + 36,129,2,3,1,188,84,65,54,63,19,16,38,15,72,253,149,254,211,2,250,152,0,0,0,1,0,42,254,26,2,117,7,137,0,25,0,0,1,17, + 20,7,10,1,35,34,38,53,52,54,51,50,23,22,23,30,1,51,50,19,18,53,48,17,2,117,3,12,190,202,80,100,64,55,43,28,24,15,6,9, + 16,104,17,8,7,137,250,245,36,129,253,253,254,68,84,65,54,63,19,16,38,15,72,2,107,1,45,2,5,107,0,0,0,3,0,156,1,208,8,156, + 4,154,0,7,0,11,0,15,0,0,9,1,39,1,51,1,7,1,37,33,53,41,2,21,33,4,111,254,38,120,2,82,90,2,80,120,254,40,254,141, + 253,70,2,186,2,138,2,188,253,68,3,168,254,40,120,2,82,253,174,120,1,216,72,170,170,0,0,0,0,2,0,156,0,0,8,156,4,154,0,7, + 0,11,0,0,19,33,1,33,21,33,1,33,37,33,21,33,156,2,186,2,228,2,98,253,70,253,28,253,158,5,68,2,188,253,68,4,154,252,16,170, + 3,240,170,170,0,5,0,156,0,0,11,79,6,20,0,4,0,9,0,12,0,15,0,21,0,0,51,17,33,9,2,17,51,9,1,41,1,9,1,33, + 9,3,51,9,1,156,7,169,3,10,252,246,248,235,141,2,118,253,138,4,237,251,230,2,13,253,243,4,26,253,243,2,221,253,138,2,118,142,2,118, + 253,138,6,20,252,246,252,246,5,128,251,20,2,118,2,118,253,243,253,33,2,13,2,223,253,138,253,138,2,116,2,120,0,5,0,156,0,0,8,156, + 6,20,0,3,0,8,0,11,0,14,0,19,0,0,51,17,33,17,1,17,51,9,1,41,1,9,1,33,9,3,51,17,156,8,0,248,148,141,2,118, + 253,138,4,237,251,230,2,13,253,243,4,26,253,243,2,221,253,138,2,118,142,6,20,249,236,5,128,251,20,2,118,2,118,253,243,253,33,2,13,2, + 223,253,138,253,138,4,236,0,0,43,0,120,0,0,11,20,5,213,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,95,0,107,0,119,0,131, + 0,143,0,155,0,167,0,179,0,191,0,203,0,215,0,227,0,239,0,251,1,7,1,19,1,31,1,43,1,55,1,67,1,79,1,91,1,103,1,115, + 1,127,1,139,1,151,1,163,1,175,1,187,1,199,1,211,1,228,1,240,1,252,2,8,0,0,1,33,50,21,17,20,35,33,34,53,17,52,23,17, + 20,51,33,50,53,17,52,35,33,34,1,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,37,21,20,43,1,34, + 61,1,52,59,1,50,5,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,5,21,20,43,1,34,61,1,52,59, + 1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21, + 20,43,1,34,61,1,52,59,1,50,5,21,20,43,1,34,61,1,52,59,1,50,37,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34, + 61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59, + 1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,39,21, + 20,43,1,34,61,1,52,59,1,50,7,21,20,43,1,34,61,1,52,59,1,50,7,21,20,43,1,34,61,1,52,59,1,50,7,21,20,43,1,34, + 61,1,52,59,1,50,7,21,20,43,1,34,61,1,52,59,1,50,7,21,20,43,1,34,61,1,52,59,1,50,7,21,20,43,1,34,61,1,52,59, + 1,50,7,21,20,43,1,34,61,1,52,59,1,50,39,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21, + 20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34, + 61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,23,21,20,43,1,34,61,1,52,59, + 1,50,5,21,20,43,1,34,61,1,52,59,1,50,7,50,21,17,20,43,1,34,61,1,52,35,34,61,1,52,51,19,21,20,43,1,34,61,1,52, + 59,1,50,23,21,20,43,1,34,61,1,52,59,1,50,5,34,61,1,52,51,33,50,29,1,20,35,1,85,8,226,221,221,247,30,221,147,74,8,226, + 73,73,247,30,74,1,3,37,74,37,37,74,37,223,37,75,36,36,75,37,1,74,37,74,37,37,74,37,254,70,37,74,37,37,74,37,221,37,74,37, + 37,74,37,1,185,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,1, + 142,37,251,37,37,251,37,248,67,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,220,37,74,37,37,74,37,221,37,74,37, + 37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,36,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37, + 74,37,37,74,37,221,37,74,37,37,74,37,220,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37, + 36,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,220,37,74,37,37,74,37,221,37,74,37,37, + 74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,221,37,74,37,37,74,37,1,30,37,139,37,37,139,37,37,37,37,246,42,36,37,37,148, + 37,74,37,37,74,37,223,37,75,36,36,75,37,249,165,37,37,4,4,37,37,5,213,221,251,229,221,221,4,27,221,221,251,229,74,74,4,27,74,252, + 28,73,37,37,73,38,37,74,37,37,74,37,183,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37, + 74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,183,74,37,37,74,37,37,74,37,37,74,37,37,74, + 37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,183,74,37,37,74,37, + 37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37, + 74,37,180,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74, + 37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,37,74,37,219,37,254,222,37,37,149,32,37,73,37,253,72,74,37,37,74,37, + 37,74,37,37,74,37,148,37,74,37,37,74,37,0,0,0,0,5,0,1,0,0,10,180,6,20,0,4,0,9,0,12,0,15,0,21,0,0,41,1, + 9,1,33,7,35,9,1,51,9,2,17,9,1,3,35,9,1,51,1,10,180,248,87,252,246,3,10,7,169,148,141,253,138,2,118,141,250,134,2,13, + 2,13,253,243,253,243,208,142,253,138,2,118,142,2,118,3,10,3,10,148,253,138,253,138,4,236,253,243,2,13,251,20,2,13,253,243,4,236,253,136, + 253,140,2,118,0,5,0,150,255,70,6,102,5,252,0,5,0,11,0,15,0,19,0,23,0,0,9,2,17,9,1,3,17,9,1,17,1,3,55,1, + 7,17,23,1,39,1,51,17,35,1,8,2,118,2,118,253,138,253,138,114,2,232,2,232,253,24,38,57,1,222,57,57,254,34,57,254,34,114,114,1, + 53,254,149,1,107,2,216,1,107,254,149,252,230,3,92,1,173,254,83,252,164,254,83,5,65,99,254,236,99,254,92,99,254,236,99,2,250,253,216,0, + 255,255,0,166,0,0,2,110,4,96,16,6,3,77,0,0,255,255,0,186,254,86,4,164,4,123,16,6,3,85,0,0,255,255,0,135,255,227,6,39, + 4,96,16,6,3,93,0,0,255,255,0,113,255,231,4,228,4,121,16,6,3,69,0,0,0,1,0,26,254,46,5,245,0,208,0,11,0,0,1,33, + 17,33,21,35,17,33,17,35,53,33,1,184,2,160,1,157,245,252,16,246,1,158,254,216,1,248,170,254,8,1,248,170,0,2,0,156,0,0,8,197, + 5,251,0,13,0,17,0,0,1,33,39,55,1,21,1,39,55,33,1,33,53,33,5,53,33,21,5,226,1,203,233,120,1,137,254,119,120,233,254,141, + 253,28,253,70,2,98,2,226,2,188,4,154,233,120,254,119,90,254,119,120,233,252,16,170,170,170,170,0,0,2,0,35,0,0,6,217,5,208,0,5, + 0,11,0,0,37,33,9,1,33,9,3,33,9,1,2,18,2,216,1,108,254,148,253,40,254,148,1,43,254,82,1,173,3,91,1,174,254,83,114,2, + 118,2,118,253,138,253,24,2,232,2,232,253,24,253,24,0,0,1,0,176,253,252,3,80,7,146,0,11,0,0,1,35,53,16,19,18,19,51,0,3, + 2,17,1,115,195,160,186,166,160,254,252,90,127,253,252,234,3,151,1,226,2,48,1,3,253,243,254,134,253,238,252,237,0,1,0,176,253,252,1,115, + 7,137,0,3,0,0,19,51,17,35,176,195,195,7,137,246,115,0,0,0,0,1,0,176,254,20,3,80,7,137,0,11,0,0,1,21,16,19,18,19, + 35,2,3,2,17,53,1,115,127,147,203,160,208,144,160,7,137,234,252,165,254,87,254,20,254,101,1,69,1,238,2,38,3,50,234,0,0,1,0,176, + 253,252,3,80,7,146,0,11,0,0,1,53,16,3,2,1,51,18,19,18,17,21,2,141,127,90,254,252,160,166,186,160,253,252,234,3,19,2,18,1, + 121,2,14,254,253,253,208,254,30,252,105,234,0,1,2,141,253,252,3,80,7,137,0,4,0,0,1,17,35,17,48,3,80,195,7,137,246,115,9,141, + 0,1,0,176,254,20,3,80,7,137,0,11,0,0,1,51,21,16,3,2,3,35,18,19,18,17,2,141,195,160,144,208,160,203,147,127,7,137,234,252, + 205,253,219,254,18,254,187,1,155,1,236,1,169,3,91,0,0,1,0,176,253,252,3,80,7,109,0,5,0,0,1,35,17,33,21,33,1,115,195,2, + 160,254,35,253,252,9,113,195,0,1,0,176,253,252,1,115,7,137,0,3,0,0,19,51,17,35,176,195,195,7,137,246,115,0,0,0,0,1,0,176, + 254,20,3,80,7,137,0,5,0,0,1,17,33,21,33,17,1,115,1,221,253,96,7,137,247,78,195,9,117,0,0,0,0,1,0,176,253,252,3,80, + 7,109,0,5,0,0,1,17,33,53,33,17,2,141,254,35,2,160,253,252,8,174,195,246,143,0,0,0,0,1,2,141,253,252,3,80,7,122,0,3, + 0,0,1,51,17,35,2,141,195,195,7,122,246,130,0,0,0,1,0,176,254,20,3,80,7,122,0,5,0,0,1,51,17,33,53,33,2,141,195,253, + 96,1,221,7,122,246,154,195,0,1,2,163,253,234,5,88,7,109,0,13,0,0,1,35,17,52,55,54,51,33,21,33,34,7,6,21,3,93,186,111, + 121,186,1,19,254,231,101,68,57,253,234,7,117,223,145,158,176,102,87,153,0,1,0,168,253,252,3,93,7,134,0,24,0,0,1,22,23,22,25,1, + 35,17,16,39,38,37,39,53,51,32,55,54,25,1,51,17,16,7,6,2,148,58,42,101,186,110,75,254,251,61,61,1,3,77,110,186,101,40,2,193, + 32,61,147,254,67,253,232,2,12,1,183,95,65,4,1,187,69,99,1,179,2,12,253,232,254,72,152,60,0,1,2,163,254,20,5,88,7,134,0,13, + 0,0,1,17,20,23,22,51,33,21,33,34,39,38,53,17,3,93,57,68,101,1,25,254,237,184,123,111,7,134,248,148,154,86,102,176,158,143,225,7, + 100,0,0,0,0,1,2,163,253,244,3,93,7,140,0,3,0,0,1,35,17,51,3,93,186,186,253,244,9,152,0,0,0,1,0,168,253,234,3,93, + 7,109,0,13,0,0,1,17,52,39,38,35,33,53,33,50,23,22,21,17,2,163,57,68,101,254,231,1,19,186,121,111,253,234,7,125,153,87,102,176, + 158,145,223,248,139,0,0,0,0,1,2,163,253,252,5,88,7,134,0,24,0,0,1,38,39,38,25,1,51,17,16,23,22,33,51,21,7,4,7,6, + 25,1,35,17,16,55,54,3,108,60,40,101,186,110,77,1,3,61,61,254,251,75,110,186,101,42,2,193,33,60,152,1,184,2,24,253,244,254,77,99, + 69,187,1,4,65,95,254,73,253,244,2,24,1,189,147,61,0,1,0,168,254,20,3,93,7,134,0,13,0,0,1,51,17,20,7,6,35,33,53,33, + 50,55,54,53,2,163,186,111,123,184,254,237,1,25,101,68,57,7,134,248,156,225,143,158,176,102,86,154,0,1,1,175,254,0,2,117,7,137,0,3, + 0,0,1,17,51,17,1,175,198,254,0,9,137,246,119,0,0,2,0,55,0,134,6,64,5,213,0,8,0,17,0,0,37,9,1,17,33,17,33,3, + 33,3,53,9,1,53,33,19,33,3,2,51,254,4,1,252,2,55,1,214,1,251,244,100,254,246,1,10,4,12,1,254,242,1,134,1,252,1,252,254, + 239,2,104,251,194,1,114,131,254,246,254,246,131,3,118,253,152,0,0,0,0,2,0,186,0,0,6,213,4,196,0,2,0,6,0,0,1,33,9,1, + 33,17,33,6,213,249,229,3,13,3,14,249,229,6,27,2,160,2,36,251,60,1,248,0,0,4,0,150,255,70,6,102,5,252,0,5,0,11,0,31, + 0,43,0,0,9,2,17,9,1,3,17,9,1,17,1,0,20,23,22,23,22,50,55,54,55,54,52,39,38,39,38,34,7,6,7,2,16,62,1,32, + 30,1,16,14,1,32,38,1,8,2,118,2,118,253,138,253,138,114,2,232,2,232,253,24,254,110,54,54,92,93,218,93,92,54,54,54,54,92,93,218, + 93,92,54,168,138,238,1,24,238,138,138,238,254,232,238,1,53,254,149,1,107,2,216,1,107,254,149,252,230,3,92,1,173,254,83,252,164,254,83,3, + 200,218,93,92,54,54,54,54,92,93,218,93,92,54,54,54,54,92,254,170,1,24,238,138,138,238,254,232,238,138,138,0,255,255,0,6,0,154,6,33, + 3,142,16,6,14,131,0,0,0,3,0,89,254,247,4,207,2,90,0,13,0,25,0,32,0,0,0,34,7,6,21,20,23,22,50,55,54,53,52,47, + 1,50,22,21,20,6,35,34,38,53,52,54,1,17,7,53,55,51,17,3,233,202,50,51,51,50,202,50,51,51,151,161,170,170,161,162,170,170,254,86, + 223,230,137,2,1,86,86,172,173,86,86,86,86,173,172,86,175,222,211,212,222,222,212,211,222,252,172,2,209,41,116,39,252,189,0,0,0,2,255,130, + 255,227,4,164,6,20,0,23,0,31,0,0,1,62,1,51,50,0,16,2,35,34,38,39,21,35,17,5,39,37,53,51,21,37,23,5,0,16,38,32, + 6,16,22,32,1,115,58,177,123,204,0,255,255,204,123,177,58,185,254,233,33,1,56,185,1,35,33,254,188,2,114,167,254,220,167,167,1,36,3,182, + 100,97,254,188,253,240,254,188,97,100,168,4,230,93,99,104,192,131,97,97,109,252,64,1,150,231,231,254,106,231,0,0,0,1,0,146,254,46,4,130, + 0,208,0,7,0,0,1,33,17,51,17,33,17,51,1,58,2,160,168,252,16,168,254,216,1,248,253,94,2,162,0,0,0,3,0,152,255,236,6,148, + 5,232,0,13,0,27,0,38,0,219,186,0,14,0,6,0,3,43,184,0,14,16,186,0,35,0,29,0,3,43,184,0,35,16,186,0,0,0,20,0, + 3,43,184,0,0,16,65,27,0,22,0,14,0,38,0,14,0,54,0,14,0,70,0,14,0,86,0,14,0,102,0,14,0,118,0,14,0,134,0,14, + 0,150,0,14,0,166,0,14,0,182,0,14,0,198,0,14,0,214,0,14,0,13,93,65,5,0,229,0,14,0,245,0,14,0,2,93,65,5,0,234, + 0,20,0,250,0,20,0,2,93,65,27,0,25,0,20,0,41,0,20,0,57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0,121,0,20,0, + 137,0,20,0,153,0,20,0,169,0,20,0,185,0,20,0,201,0,20,0,217,0,20,0,13,93,0,186,0,17,0,3,0,3,43,184,0,17,16,186, + 0,10,0,24,0,3,43,184,0,10,16,186,0,36,0,37,0,3,43,184,0,36,16,184,0,28,208,48,49,1,16,0,33,32,0,17,52,18,36,51, + 50,4,18,5,16,0,33,32,0,17,52,2,36,35,34,4,2,1,51,17,7,53,37,51,17,51,21,33,6,148,254,63,254,194,254,196,254,63,206,1, + 113,190,193,1,113,205,250,87,1,143,1,28,1,28,1,143,182,254,184,173,173,254,184,182,1,124,217,236,1,1,161,218,253,151,2,234,254,193,254,65, + 1,191,1,63,198,1,114,198,198,254,144,200,254,228,254,112,1,144,1,28,179,1,71,177,177,254,185,253,255,2,126,43,152,47,252,230,142,0,0,0, + 0,3,0,152,255,236,6,148,5,232,0,13,0,27,0,56,1,63,186,0,14,0,6,0,3,43,184,0,14,16,186,0,51,0,38,0,3,43,184,0, + 51,16,186,0,0,0,20,0,3,43,184,0,0,16,65,27,0,22,0,14,0,38,0,14,0,54,0,14,0,70,0,14,0,86,0,14,0,102,0,14, + 0,118,0,14,0,134,0,14,0,150,0,14,0,166,0,14,0,182,0,14,0,198,0,14,0,214,0,14,0,13,93,65,5,0,229,0,14,0,245,0, + 14,0,2,93,65,5,0,234,0,20,0,250,0,20,0,2,93,65,27,0,25,0,20,0,41,0,20,0,57,0,20,0,73,0,20,0,89,0,20,0, + 105,0,20,0,121,0,20,0,137,0,20,0,153,0,20,0,169,0,20,0,185,0,20,0,201,0,20,0,217,0,20,0,13,93,184,0,51,16,184,0, + 29,208,184,0,29,47,65,5,0,234,0,38,0,250,0,38,0,2,93,65,27,0,25,0,38,0,41,0,38,0,57,0,38,0,73,0,38,0,89,0, + 38,0,105,0,38,0,121,0,38,0,137,0,38,0,153,0,38,0,169,0,38,0,185,0,38,0,201,0,38,0,217,0,38,0,13,93,186,0,44,0, + 6,0,0,17,18,57,0,186,0,17,0,3,0,3,43,184,0,17,16,186,0,10,0,24,0,3,43,184,0,10,16,186,0,29,0,30,0,3,43,184, + 0,29,16,186,0,48,0,41,0,3,43,184,0,48,16,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,5,16,0,33,32,0,17,52,2, + 36,35,34,4,2,1,33,21,33,53,54,36,55,62,1,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,6,7,14,1,6,148,254,63,254,194, + 254,196,254,63,206,1,113,190,193,1,113,205,250,87,1,143,1,28,1,28,1,143,182,254,184,173,173,254,184,182,2,79,1,180,253,92,82,1,6,33, + 62,47,95,78,59,132,115,97,145,61,163,197,48,62,17,178,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,200,254,228,254,112,1,144, + 1,28,179,1,71,177,177,254,185,253,255,142,129,77,241,34,63,85,40,63,78,38,58,171,36,31,151,125,58,105,70,18,167,0,0,0,0,3,0,152, + 255,236,6,148,5,232,0,13,0,27,0,68,1,181,186,0,14,0,6,0,3,43,184,0,14,16,186,0,66,0,53,0,3,43,184,0,66,16,186,0, + 0,0,20,0,3,43,184,0,0,16,65,27,0,22,0,14,0,38,0,14,0,54,0,14,0,70,0,14,0,86,0,14,0,102,0,14,0,118,0,14, + 0,134,0,14,0,150,0,14,0,166,0,14,0,182,0,14,0,198,0,14,0,214,0,14,0,13,93,65,5,0,229,0,14,0,245,0,14,0,2,93, + 65,5,0,234,0,20,0,250,0,20,0,2,93,65,27,0,25,0,20,0,41,0,20,0,57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0, + 121,0,20,0,137,0,20,0,153,0,20,0,169,0,20,0,185,0,20,0,201,0,20,0,217,0,20,0,13,93,65,5,0,234,0,53,0,250,0,53, + 0,2,93,65,27,0,25,0,53,0,41,0,53,0,57,0,53,0,73,0,53,0,89,0,53,0,105,0,53,0,121,0,53,0,137,0,53,0,153,0, + 53,0,169,0,53,0,185,0,53,0,201,0,53,0,217,0,53,0,13,93,186,0,28,0,53,0,66,17,18,57,186,0,44,0,53,0,66,17,18,57, + 184,0,44,47,65,5,0,234,0,44,0,250,0,44,0,2,93,65,27,0,25,0,44,0,41,0,44,0,57,0,44,0,73,0,44,0,89,0,44,0, + 105,0,44,0,121,0,44,0,137,0,44,0,153,0,44,0,169,0,44,0,185,0,44,0,201,0,44,0,217,0,44,0,13,93,184,0,31,220,186,0, + 38,0,6,0,0,17,18,57,186,0,59,0,6,0,0,17,18,57,0,186,0,17,0,3,0,3,43,184,0,17,16,186,0,10,0,24,0,3,43,184, + 0,10,16,186,0,41,0,34,0,3,43,184,0,41,16,186,0,63,0,56,0,3,43,184,0,63,16,186,0,50,0,47,0,3,43,184,0,50,16,186, + 0,28,0,47,0,50,17,18,57,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,5,16,0,33,32,0,17,52,2,36,35,34,4,2,5, + 30,1,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,6, + 6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,250,87,1,143,1,28,1,28,1,143,182,254,184,173,173,254,184,182,3,185,13,118, + 216,195,64,136,88,91,125,68,117,115,107,99,140,145,90,88,92,91,52,121,107,95,136,61,161,193,104,2,234,254,193,254,65,1,191,1,63,198,1,114, + 198,198,254,144,200,254,228,254,112,1,144,1,28,179,1,71,177,177,254,185,150,3,129,93,141,156,23,27,168,48,28,79,76,71,78,140,60,58,60,63, + 21,32,151,24,20,137,115,81,114,0,0,0,0,4,0,152,255,236,6,148,5,232,0,13,0,27,0,30,0,41,0,243,186,0,14,0,6,0,3,43, + 184,0,14,16,186,0,32,0,28,0,3,43,184,0,32,16,186,0,0,0,20,0,3,43,184,0,0,16,65,27,0,22,0,14,0,38,0,14,0,54, + 0,14,0,70,0,14,0,86,0,14,0,102,0,14,0,118,0,14,0,134,0,14,0,150,0,14,0,166,0,14,0,182,0,14,0,198,0,14,0,214, + 0,14,0,13,93,65,5,0,229,0,14,0,245,0,14,0,2,93,65,5,0,234,0,20,0,250,0,20,0,2,93,65,27,0,25,0,20,0,41,0, + 20,0,57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0,121,0,20,0,137,0,20,0,153,0,20,0,169,0,20,0,185,0,20,0,201,0, + 20,0,217,0,20,0,13,93,184,0,32,16,184,0,36,208,184,0,28,16,184,0,38,208,0,186,0,17,0,3,0,3,43,184,0,17,16,186,0,10, + 0,24,0,3,43,184,0,10,16,186,0,34,0,35,0,3,43,184,0,34,16,184,0,29,208,184,0,35,16,184,0,39,208,48,49,1,16,0,33,32, + 0,17,52,18,36,51,50,4,18,5,16,0,33,32,0,17,52,2,36,35,34,4,2,37,1,33,3,51,17,51,21,35,21,35,53,33,53,6,148,254, + 63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,250,87,1,143,1,28,1,28,1,143,182,254,184,173,173,254,184,182,2,191,254,243,1,13,24, + 206,141,141,182,254,67,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,200,254,228,254,112,1,144,1,28,179,1,71,177,177,254,185,79, + 254,130,2,72,253,184,141,211,211,142,0,0,0,3,0,152,255,236,6,148,5,232,0,13,0,27,0,57,1,75,186,0,14,0,6,0,3,43,184,0, + 14,16,186,0,31,0,28,0,3,43,184,0,31,16,186,0,38,0,51,0,3,43,184,0,38,16,186,0,0,0,20,0,3,43,184,0,0,16,65,27, + 0,22,0,14,0,38,0,14,0,54,0,14,0,70,0,14,0,86,0,14,0,102,0,14,0,118,0,14,0,134,0,14,0,150,0,14,0,166,0,14, + 0,182,0,14,0,198,0,14,0,214,0,14,0,13,93,65,5,0,229,0,14,0,245,0,14,0,2,93,65,5,0,234,0,20,0,250,0,20,0,2, + 93,65,27,0,25,0,20,0,41,0,20,0,57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0,121,0,20,0,137,0,20,0,153,0,20,0, + 169,0,20,0,185,0,20,0,201,0,20,0,217,0,20,0,13,93,186,0,45,0,6,0,0,17,18,57,65,5,0,234,0,51,0,250,0,51,0,2, + 93,65,27,0,25,0,51,0,41,0,51,0,57,0,51,0,73,0,51,0,89,0,51,0,105,0,51,0,121,0,51,0,137,0,51,0,153,0,51,0, + 169,0,51,0,185,0,51,0,201,0,51,0,217,0,51,0,13,93,0,186,0,17,0,3,0,3,43,184,0,17,16,186,0,10,0,24,0,3,43,184, + 0,10,16,186,0,48,0,41,0,3,43,184,0,48,16,186,0,29,0,30,0,3,43,184,0,29,16,186,0,35,0,54,0,3,43,184,0,35,16,48, + 49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,5,16,0,33,32,0,17,52,2,36,35,34,4,2,1,33,21,33,21,6,54,51,50,22,21, + 20,6,35,34,38,39,53,30,1,51,50,54,53,52,38,35,34,6,7,6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,250,87,1, + 143,1,28,1,28,1,143,182,254,184,173,173,254,184,182,1,152,2,61,254,111,3,63,31,176,207,213,190,64,133,88,95,119,68,104,118,118,104,50,101, + 89,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,200,254,228,254,112,1,144,1,28,179,1,71,177,177,254,185,1,25,142,171,1,10, + 176,149,152,172,20,24,172,47,27,97,85,86,97,20,37,0,0,4,0,152,255,236,6,148,5,232,0,13,0,27,0,39,0,64,1,145,186,0,14,0, + 6,0,3,43,184,0,14,16,186,0,31,0,59,0,3,43,184,0,31,16,186,0,53,0,37,0,3,43,184,0,53,16,186,0,0,0,20,0,3,43, + 184,0,0,16,65,27,0,22,0,14,0,38,0,14,0,54,0,14,0,70,0,14,0,86,0,14,0,102,0,14,0,118,0,14,0,134,0,14,0,150, + 0,14,0,166,0,14,0,182,0,14,0,198,0,14,0,214,0,14,0,13,93,65,5,0,229,0,14,0,245,0,14,0,2,93,65,5,0,234,0,20, + 0,250,0,20,0,2,93,65,27,0,25,0,20,0,41,0,20,0,57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0,121,0,20,0,137,0, + 20,0,153,0,20,0,169,0,20,0,185,0,20,0,201,0,20,0,217,0,20,0,13,93,65,27,0,22,0,31,0,38,0,31,0,54,0,31,0,70, + 0,31,0,86,0,31,0,102,0,31,0,118,0,31,0,134,0,31,0,150,0,31,0,166,0,31,0,182,0,31,0,198,0,31,0,214,0,31,0,13, + 93,65,5,0,229,0,31,0,245,0,31,0,2,93,65,5,0,234,0,37,0,250,0,37,0,2,93,65,27,0,25,0,37,0,41,0,37,0,57,0, + 37,0,73,0,37,0,89,0,37,0,105,0,37,0,121,0,37,0,137,0,37,0,153,0,37,0,169,0,37,0,185,0,37,0,201,0,37,0,217,0, + 37,0,13,93,186,0,41,0,37,0,53,17,18,57,0,186,0,17,0,3,0,3,43,184,0,17,16,186,0,10,0,24,0,3,43,184,0,10,16,186, + 0,34,0,56,0,3,43,184,0,34,16,186,0,62,0,44,0,3,43,184,0,62,16,186,0,50,0,28,0,3,43,184,0,50,16,48,49,1,16,0, + 33,32,0,17,52,18,36,51,50,4,18,5,16,0,33,32,0,17,52,2,36,35,34,4,2,5,34,6,21,20,22,51,50,54,53,52,38,19,21,46, + 1,35,34,6,7,6,54,51,50,22,21,20,6,35,34,38,53,52,18,51,50,22,6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205, + 250,87,1,143,1,28,1,28,1,143,182,254,184,173,173,254,184,182,2,161,78,92,92,78,78,92,92,212,84,97,47,119,127,5,9,128,78,160,186,194, + 160,185,192,234,200,53,106,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,200,254,228,254,112,1,144,1,28,179,1,71,177,177,254,185, + 159,98,91,90,98,98,90,91,98,1,157,156,35,22,148,80,11,61,177,148,145,179,253,231,218,1,11,19,0,3,0,152,255,236,6,148,5,232,0,13, + 0,27,0,34,0,235,184,0,35,47,184,0,36,47,184,0,0,220,184,0,35,16,184,0,6,208,184,0,6,47,184,0,14,220,65,27,0,22,0,14, + 0,38,0,14,0,54,0,14,0,70,0,14,0,86,0,14,0,102,0,14,0,118,0,14,0,134,0,14,0,150,0,14,0,166,0,14,0,182,0,14, + 0,198,0,14,0,214,0,14,0,13,93,65,5,0,229,0,14,0,245,0,14,0,2,93,184,0,0,16,184,0,20,220,65,5,0,234,0,20,0,250, + 0,20,0,2,93,65,27,0,25,0,20,0,41,0,20,0,57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0,121,0,20,0,137,0,20,0, + 153,0,20,0,169,0,20,0,185,0,20,0,201,0,20,0,217,0,20,0,13,93,186,0,32,0,6,0,0,17,18,57,186,0,33,0,6,0,0,17, + 18,57,0,186,0,17,0,3,0,3,43,184,0,17,16,186,0,10,0,24,0,3,43,184,0,10,16,186,0,29,0,33,0,3,43,184,0,29,16,48, + 49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,5,16,0,33,32,0,17,52,2,36,35,34,4,2,1,33,21,1,35,1,33,6,148,254,63, + 254,194,254,196,254,63,206,1,113,190,193,1,113,205,250,87,1,143,1,28,1,28,1,143,182,254,184,173,173,254,184,182,1,107,2,171,254,148,193,1, + 81,254,49,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,200,254,228,254,112,1,144,1,28,179,1,71,177,177,254,185,1,25,75,252, + 163,3,26,0,0,5,0,152,255,236,6,148,5,232,0,13,0,27,0,39,0,63,0,75,2,13,186,0,14,0,6,0,3,43,184,0,14,16,186,0, + 31,0,61,0,3,43,184,0,31,16,186,0,49,0,70,0,3,43,184,0,49,16,186,0,0,0,20,0,3,43,184,0,0,16,65,27,0,22,0,14, + 0,38,0,14,0,54,0,14,0,70,0,14,0,86,0,14,0,102,0,14,0,118,0,14,0,134,0,14,0,150,0,14,0,166,0,14,0,182,0,14, + 0,198,0,14,0,214,0,14,0,13,93,65,5,0,229,0,14,0,245,0,14,0,2,93,65,5,0,234,0,20,0,250,0,20,0,2,93,65,27,0, + 25,0,20,0,41,0,20,0,57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0,121,0,20,0,137,0,20,0,153,0,20,0,169,0,20,0, + 185,0,20,0,201,0,20,0,217,0,20,0,13,93,65,27,0,22,0,31,0,38,0,31,0,54,0,31,0,70,0,31,0,86,0,31,0,102,0,31, + 0,118,0,31,0,134,0,31,0,150,0,31,0,166,0,31,0,182,0,31,0,198,0,31,0,214,0,31,0,13,93,65,5,0,229,0,31,0,245,0, + 31,0,2,93,65,5,0,234,0,70,0,250,0,70,0,2,93,65,27,0,25,0,70,0,41,0,70,0,57,0,70,0,73,0,70,0,89,0,70,0, + 105,0,70,0,121,0,70,0,137,0,70,0,153,0,70,0,169,0,70,0,185,0,70,0,201,0,70,0,217,0,70,0,13,93,186,0,37,0,70,0, + 49,17,18,57,184,0,37,47,65,5,0,234,0,37,0,250,0,37,0,2,93,65,27,0,25,0,37,0,41,0,37,0,57,0,37,0,73,0,37,0, + 89,0,37,0,105,0,37,0,121,0,37,0,137,0,37,0,153,0,37,0,169,0,37,0,185,0,37,0,201,0,37,0,217,0,37,0,13,93,186,0, + 43,0,61,0,31,17,18,57,184,0,43,47,186,0,52,0,70,0,49,17,18,57,184,0,37,16,184,0,55,220,184,0,43,16,184,0,64,220,0,186, + 0,17,0,3,0,3,43,184,0,17,16,186,0,10,0,24,0,3,43,184,0,10,16,186,0,34,0,58,0,3,43,184,0,34,16,186,0,46,0,73, + 0,3,43,184,0,46,16,186,0,67,0,28,0,3,43,184,0,67,16,186,0,52,0,28,0,67,17,18,57,48,49,1,16,0,33,32,0,17,52,18, + 36,51,50,4,18,5,16,0,33,32,0,17,52,2,36,35,34,4,2,5,34,6,21,20,22,51,50,54,53,52,38,37,46,1,53,52,54,51,50,22, + 21,20,6,7,30,1,21,20,6,35,34,38,53,52,54,55,20,22,51,50,54,53,52,38,35,34,6,6,148,254,63,254,194,254,196,254,63,206,1,113, + 190,193,1,113,205,250,87,1,143,1,28,1,28,1,143,182,254,184,173,173,254,184,182,2,175,84,95,95,84,84,95,95,254,198,4,106,183,157,157,182, + 105,4,15,118,190,173,173,190,118,87,81,77,75,82,82,75,77,81,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,200,254,228,254,112, + 1,144,1,28,179,1,71,177,177,254,185,230,80,73,73,80,81,72,73,80,73,1,118,83,116,136,136,116,83,118,1,3,131,92,138,151,151,138,92,131, + 193,61,66,66,61,62,66,66,0,4,0,152,255,236,6,148,5,232,0,13,0,27,0,52,0,64,1,145,186,0,14,0,6,0,3,43,184,0,14,16, + 186,0,62,0,41,0,3,43,184,0,62,16,186,0,0,0,20,0,3,43,184,0,0,16,186,0,47,0,56,0,3,43,184,0,47,16,65,27,0,22, + 0,14,0,38,0,14,0,54,0,14,0,70,0,14,0,86,0,14,0,102,0,14,0,118,0,14,0,134,0,14,0,150,0,14,0,166,0,14,0,182, + 0,14,0,198,0,14,0,214,0,14,0,13,93,65,5,0,229,0,14,0,245,0,14,0,2,93,65,5,0,234,0,20,0,250,0,20,0,2,93,65, + 27,0,25,0,20,0,41,0,20,0,57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0,121,0,20,0,137,0,20,0,153,0,20,0,169,0, + 20,0,185,0,20,0,201,0,20,0,217,0,20,0,13,93,65,27,0,22,0,62,0,38,0,62,0,54,0,62,0,70,0,62,0,86,0,62,0,102, + 0,62,0,118,0,62,0,134,0,62,0,150,0,62,0,166,0,62,0,182,0,62,0,198,0,62,0,214,0,62,0,13,93,65,5,0,229,0,62,0, + 245,0,62,0,2,93,186,0,29,0,41,0,62,17,18,57,65,5,0,234,0,56,0,250,0,56,0,2,93,65,27,0,25,0,56,0,41,0,56,0, + 57,0,56,0,73,0,56,0,89,0,56,0,105,0,56,0,121,0,56,0,137,0,56,0,153,0,56,0,169,0,56,0,185,0,56,0,201,0,56,0, + 217,0,56,0,13,93,0,186,0,17,0,3,0,3,43,184,0,17,16,186,0,10,0,24,0,3,43,184,0,10,16,186,0,32,0,50,0,3,43,184, + 0,32,16,186,0,44,0,59,0,3,43,184,0,44,16,186,0,53,0,38,0,3,43,184,0,53,16,48,49,1,16,0,33,32,0,17,52,18,36,51, + 50,4,18,5,16,0,33,32,0,17,52,2,36,35,34,4,2,1,53,30,1,51,50,54,55,54,6,35,34,38,53,52,54,51,50,22,21,20,2,35, + 34,38,19,50,54,53,52,38,35,34,6,21,20,22,6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,250,87,1,143,1,28,1,28, + 1,143,182,254,184,173,173,254,184,182,1,144,85,97,46,119,127,5,10,128,79,159,186,194,160,185,191,233,200,53,107,217,78,91,91,78,78,92,92,2, + 234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,200,254,228,254,112,1,144,1,28,179,1,71,177,177,254,185,253,139,156,36,21,147,79,13, + 60,175,148,145,180,253,232,218,254,246,19,1,180,98,91,91,98,98,91,91,98,0,0,0,0,5,0,152,255,236,6,148,5,232,0,13,0,27,0,38, + 0,50,0,62,1,155,186,0,14,0,6,0,3,43,184,0,14,16,186,0,35,0,29,0,3,43,184,0,35,16,186,0,42,0,60,0,3,43,184,0, + 42,16,186,0,54,0,48,0,3,43,184,0,54,16,186,0,0,0,20,0,3,43,184,0,0,16,65,27,0,22,0,14,0,38,0,14,0,54,0,14, + 0,70,0,14,0,86,0,14,0,102,0,14,0,118,0,14,0,134,0,14,0,150,0,14,0,166,0,14,0,182,0,14,0,198,0,14,0,214,0,14, + 0,13,93,65,5,0,229,0,14,0,245,0,14,0,2,93,65,5,0,234,0,20,0,250,0,20,0,2,93,65,27,0,25,0,20,0,41,0,20,0, + 57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0,121,0,20,0,137,0,20,0,153,0,20,0,169,0,20,0,185,0,20,0,201,0,20,0, + 217,0,20,0,13,93,65,5,0,234,0,48,0,250,0,48,0,2,93,65,27,0,25,0,48,0,41,0,48,0,57,0,48,0,73,0,48,0,89,0, + 48,0,105,0,48,0,121,0,48,0,137,0,48,0,153,0,48,0,169,0,48,0,185,0,48,0,201,0,48,0,217,0,48,0,13,93,65,5,0,234, + 0,60,0,250,0,60,0,2,93,65,27,0,25,0,60,0,41,0,60,0,57,0,60,0,73,0,60,0,89,0,60,0,105,0,60,0,121,0,60,0, + 137,0,60,0,153,0,60,0,169,0,60,0,185,0,60,0,201,0,60,0,217,0,60,0,13,93,0,186,0,17,0,3,0,3,43,184,0,17,16,186, + 0,10,0,24,0,3,43,184,0,10,16,186,0,45,0,57,0,3,43,184,0,45,16,186,0,36,0,37,0,3,43,184,0,36,16,186,0,51,0,39, + 0,3,43,184,0,51,16,184,0,36,16,184,0,28,208,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,5,16,0,33,32,0,17,52,2, + 36,35,34,4,2,19,51,17,7,53,55,51,17,51,21,33,1,34,6,21,20,22,51,50,54,53,52,38,39,50,22,21,20,6,35,34,38,53,52,54, + 6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,250,87,1,143,1,28,1,28,1,143,182,254,184,173,173,254,184,182,205,158,172,188, + 117,159,254,62,3,4,64,69,69,64,63,70,70,63,130,136,136,130,131,136,136,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,200,254, + 228,254,112,1,144,1,28,179,1,71,177,177,254,185,254,62,2,62,39,137,42,253,54,128,2,222,151,163,162,151,151,162,163,151,123,228,209,208,228,228, + 208,209,228,0,0,1,255,236,1,240,4,229,2,156,0,3,0,0,3,53,33,21,20,4,249,1,240,172,172,0,0,0,0,1,255,236,1,154,4,229, + 2,242,0,3,0,0,3,17,33,17,20,4,249,1,154,1,88,254,168,0,0,1,2,24,253,150,2,184,7,200,0,3,0,0,1,17,51,17,2,24, + 160,253,150,10,50,245,206,0,0,1,1,200,253,150,3,8,7,200,0,3,0,0,1,17,33,17,1,200,1,64,253,150,10,50,245,206,0,3,255,236, + 1,240,4,229,2,156,0,3,0,7,0,11,0,0,1,53,33,21,33,53,33,21,33,53,33,21,3,177,1,52,252,239,1,41,252,239,1,52,1,240, + 172,172,172,172,172,172,0,0,0,3,255,236,1,154,4,229,2,242,0,3,0,7,0,11,0,0,1,17,33,17,33,17,33,17,33,17,33,17,3,177, + 1,52,252,239,1,41,252,239,1,52,1,154,1,88,254,168,1,88,254,168,1,88,254,168,0,3,2,24,253,150,2,184,7,200,0,3,0,7,0,11, + 0,0,1,17,51,17,3,17,51,17,3,17,51,17,2,24,160,160,160,160,160,253,150,3,12,252,244,3,192,2,178,253,78,3,102,3,12,252,244,0, + 0,3,1,200,253,150,3,8,7,200,0,3,0,7,0,11,0,0,1,17,33,17,1,17,33,17,1,17,33,17,1,200,1,64,254,192,1,64,254,192, + 1,64,253,150,3,12,252,244,3,192,2,178,253,78,3,102,3,12,252,244,0,4,255,235,1,240,4,229,2,156,0,3,0,7,0,11,0,15,0,0, + 3,53,51,21,51,53,51,21,51,53,51,21,51,53,51,21,21,188,180,179,180,178,180,189,1,240,172,172,172,172,172,172,172,172,0,0,0,4,255,236, + 1,154,4,230,2,242,0,3,0,7,0,11,0,15,0,0,3,17,51,17,51,17,51,17,51,17,51,17,51,17,51,17,20,188,180,179,180,178,180,189, + 1,154,1,88,254,168,1,88,254,168,1,88,254,168,1,88,254,168,0,0,0,4,2,24,253,150,2,184,7,200,0,3,0,7,0,11,0,15,0,0, + 1,17,51,17,3,17,51,17,3,17,51,17,3,17,51,17,2,24,160,160,160,160,160,160,160,5,150,2,50,253,206,248,0,2,50,253,206,5,115,1, + 217,254,39,253,115,1,217,254,39,0,0,0,0,4,1,200,253,150,3,8,7,200,0,3,0,7,0,11,0,15,0,0,1,17,33,17,1,17,33,17, + 1,17,33,17,1,17,33,17,1,200,1,64,254,192,1,64,254,192,1,64,254,192,1,64,5,150,2,50,253,206,248,0,2,50,253,206,5,115,1,217, + 254,39,253,115,1,217,254,39,0,1,2,24,253,150,4,229,2,156,0,5,0,0,1,17,33,21,33,17,2,24,2,205,253,211,253,150,5,6,172,251, + 166,0,0,0,0,1,2,24,253,150,4,229,2,242,0,5,0,0,1,17,33,17,33,17,2,24,2,205,253,211,253,150,5,92,254,168,251,252,0,0, + 0,1,1,200,253,150,4,229,2,156,0,5,0,0,1,17,33,21,33,17,1,200,3,29,254,35,253,150,5,6,172,251,166,0,0,0,0,1,1,200, + 253,150,4,229,2,242,0,5,0,0,1,17,33,17,33,17,1,200,3,29,254,35,253,150,5,92,254,168,251,252,0,0,0,1,255,236,253,150,2,184, + 2,156,0,5,0,0,1,17,33,53,33,17,2,24,253,212,2,204,253,150,4,90,172,250,250,0,0,0,0,1,255,236,253,150,2,184,2,242,0,5, + 0,0,1,17,33,17,33,17,2,24,253,212,2,204,253,150,4,4,1,88,250,164,0,0,0,1,255,236,253,150,3,8,2,156,0,5,0,0,1,17, + 33,53,33,17,1,200,254,36,3,28,253,150,4,90,172,250,250,0,0,0,0,1,255,236,253,150,3,8,2,242,0,5,0,0,1,17,33,17,33,17, + 1,200,254,36,3,28,253,150,4,4,1,88,250,164,0,0,0,1,2,24,1,240,4,229,7,200,0,5,0,0,1,17,51,17,33,21,2,24,160,2, + 45,1,240,5,216,250,212,172,0,1,2,24,1,154,4,229,7,200,0,5,0,0,1,17,51,17,33,17,2,24,160,2,45,1,154,6,46,251,42,254, + 168,0,0,0,0,1,1,200,1,240,4,229,7,200,0,5,0,0,1,17,33,17,33,21,1,200,1,64,1,221,1,240,5,216,250,212,172,0,0,0, + 0,1,1,200,1,154,4,229,7,200,0,5,0,0,1,17,33,17,33,17,1,200,1,64,1,221,1,154,6,46,251,42,254,168,0,0,0,1,255,236, + 1,240,2,184,7,200,0,5,0,0,3,53,33,17,51,17,20,2,44,160,1,240,172,5,44,250,40,0,0,1,255,236,1,154,2,184,7,200,0,5, + 0,0,3,17,33,17,51,17,20,2,44,160,1,154,1,88,4,214,249,210,0,1,255,236,1,240,3,8,7,200,0,5,0,0,3,53,33,17,33,17, + 20,1,220,1,64,1,240,172,5,44,250,40,0,1,255,236,1,154,3,8,7,200,0,5,0,0,3,17,33,17,33,17,20,1,220,1,64,1,154,1, + 88,4,214,249,210,0,0,0,0,1,2,24,253,150,4,229,7,200,0,7,0,0,1,17,51,17,33,21,33,17,2,24,160,2,45,253,211,253,150,10, + 50,250,212,172,251,166,0,0,0,1,2,24,253,150,4,229,7,200,0,7,0,0,1,17,51,17,33,17,33,17,2,24,160,2,45,253,211,253,150,10, + 50,251,42,254,168,251,252,0,0,1,1,200,253,150,4,229,7,200,0,9,0,0,1,17,35,17,33,17,33,21,33,17,2,24,80,1,64,1,221,253, + 211,253,150,4,90,5,216,250,212,172,251,166,0,1,1,200,253,150,4,229,7,200,0,9,0,0,1,17,51,17,51,17,33,21,33,17,1,200,80,160, + 2,45,254,35,253,150,5,6,5,44,250,212,172,251,166,0,0,1,1,200,253,150,4,229,7,200,0,7,0,0,1,17,33,17,33,21,33,17,1,200, + 1,64,1,221,254,35,253,150,10,50,250,212,172,251,166,0,0,1,1,200,253,150,4,229,7,200,0,9,0,0,1,17,35,17,33,17,33,17,33,17, + 2,24,80,1,64,1,221,253,211,253,150,4,4,6,46,251,42,254,168,251,252,0,0,0,0,1,1,200,253,150,4,229,7,200,0,9,0,0,1,17, + 51,17,51,17,33,17,33,17,1,200,80,160,2,45,254,35,253,150,5,92,4,214,251,42,254,168,251,252,0,1,1,200,253,150,4,229,7,200,0,7, + 0,0,1,17,33,17,33,17,33,17,1,200,1,64,1,221,254,35,253,150,10,50,251,42,254,168,251,252,0,1,255,236,253,150,2,184,7,200,0,7, + 0,0,1,17,33,53,33,17,51,17,2,24,253,212,2,44,160,253,150,4,90,172,5,44,245,206,0,0,0,1,255,236,253,150,2,184,7,200,0,7, + 0,0,1,17,33,17,33,17,51,17,2,24,253,212,2,44,160,253,150,4,4,1,88,4,214,245,206,0,0,1,255,236,253,150,3,8,7,200,0,9, + 0,0,1,17,33,53,33,17,33,17,35,17,2,24,253,212,1,220,1,64,80,253,150,4,90,172,5,44,250,40,251,166,0,1,255,236,253,150,3,8, + 7,200,0,9,0,0,1,17,33,53,33,17,51,17,51,17,1,200,254,36,2,44,160,80,253,150,4,90,172,5,44,250,212,250,250,0,0,1,255,236, + 253,150,3,8,7,200,0,7,0,0,1,17,33,53,33,17,33,17,1,200,254,36,1,220,1,64,253,150,4,90,172,5,44,245,206,0,0,1,255,236, + 253,150,3,8,7,200,0,9,0,0,1,17,33,17,33,17,33,17,35,17,2,24,253,212,1,220,1,64,80,253,150,4,4,1,88,4,214,249,210,251, + 252,0,0,0,0,1,255,236,253,150,3,8,7,200,0,9,0,0,1,17,33,17,33,17,51,17,51,17,1,200,254,36,2,44,160,80,253,150,4,4, + 1,88,4,214,251,42,250,164,0,1,255,236,253,150,3,8,7,200,0,7,0,0,1,17,33,17,33,17,33,17,1,200,254,36,1,220,1,64,253,150, + 4,4,1,88,4,214,245,206,0,1,255,236,253,150,4,229,2,156,0,7,0,0,1,17,33,53,33,21,33,17,2,24,253,212,4,249,253,211,253,150, + 4,90,172,172,251,166,0,0,0,1,255,236,253,150,4,229,2,242,0,9,0,0,1,17,33,17,33,21,33,21,33,17,2,24,253,212,2,204,2,45, + 253,211,253,150,4,4,1,88,86,172,251,166,0,1,255,236,253,150,4,229,2,242,0,9,0,0,1,17,33,53,33,53,33,17,33,17,2,24,253,212, + 2,44,2,205,253,211,253,150,4,90,172,86,254,168,251,252,0,1,255,236,253,150,4,229,2,242,0,7,0,0,1,17,33,17,33,17,33,17,2,24, + 253,212,4,249,253,211,253,150,4,4,1,88,254,168,251,252,0,1,255,236,253,150,4,229,2,156,0,7,0,0,1,17,33,53,33,21,33,17,1,200, + 254,36,4,249,254,35,253,150,4,90,172,172,251,166,0,0,0,1,255,236,253,150,4,229,2,242,0,9,0,0,1,17,33,17,33,21,33,21,33,17, + 1,200,254,36,3,28,1,221,254,35,253,150,4,4,1,88,86,172,251,166,0,1,255,236,253,150,4,229,2,242,0,9,0,0,1,17,33,53,33,53, + 33,17,33,17,1,200,254,36,1,220,3,29,254,35,253,150,4,90,172,86,254,168,251,252,0,1,255,236,253,150,4,229,2,242,0,7,0,0,1,17, + 33,17,33,17,33,17,1,200,254,36,4,249,254,35,253,150,4,4,1,88,254,168,251,252,0,1,255,236,1,240,4,229,7,200,0,7,0,0,3,53, + 33,17,51,17,33,21,20,2,44,160,2,45,1,240,172,5,44,250,212,172,0,1,255,236,1,154,4,229,7,200,0,9,0,0,3,17,33,17,51,17, + 33,21,33,21,20,2,44,160,2,45,253,211,1,154,1,88,4,214,250,212,172,86,0,0,0,1,255,236,1,154,4,229,7,200,0,9,0,0,3,53, + 33,17,51,17,33,17,33,53,20,2,44,160,2,45,253,51,1,240,172,5,44,251,42,254,168,86,0,0,0,1,255,236,1,154,4,229,7,200,0,7, + 0,0,3,17,33,17,51,17,33,17,20,2,44,160,2,45,1,154,1,88,4,214,251,42,254,168,0,0,0,1,255,236,1,240,4,229,7,200,0,7, + 0,0,3,53,33,17,33,17,33,21,20,1,220,1,64,1,221,1,240,172,5,44,250,212,172,0,0,0,0,1,255,236,1,154,4,229,7,200,0,9, + 0,0,3,17,33,17,33,17,33,21,33,21,20,1,220,1,64,1,221,254,35,1,154,1,88,4,214,250,212,172,86,0,0,1,255,236,1,154,4,229, + 7,200,0,9,0,0,3,53,33,17,33,17,33,17,33,53,20,1,220,1,64,1,221,252,227,1,240,172,5,44,251,42,254,168,86,0,0,1,255,236, + 1,154,4,229,7,200,0,7,0,0,3,17,33,17,33,17,33,17,20,1,220,1,64,1,221,1,154,1,88,4,214,251,42,254,168,0,0,1,255,236, + 253,150,4,229,7,200,0,11,0,0,1,17,35,17,33,53,33,17,51,17,33,21,2,184,160,253,212,2,44,160,2,45,1,240,251,166,4,90,172,5, + 44,250,212,172,0,1,255,236,253,150,4,229,7,200,0,11,0,0,1,17,33,17,33,17,51,17,33,21,33,17,2,24,253,212,2,44,160,2,45,253, + 211,253,150,4,4,1,88,4,214,250,212,172,251,166,0,0,0,1,255,236,253,150,4,229,7,200,0,11,0,0,1,17,33,53,33,17,51,17,33,17, + 33,17,2,24,253,212,2,44,160,2,45,253,211,253,150,4,90,172,5,44,251,42,254,168,251,252,0,0,0,1,255,236,253,150,4,229,7,200,0,11, + 0,0,1,17,33,17,33,17,51,17,33,17,33,17,2,24,253,212,2,44,160,2,45,253,211,253,150,4,4,1,88,4,214,251,42,254,168,251,252,0, + 0,1,255,236,253,150,4,229,7,200,0,11,0,0,1,17,33,53,33,17,33,17,33,21,33,17,2,24,253,212,1,220,1,64,1,221,253,211,253,150, + 4,90,172,5,44,250,212,172,251,166,0,0,0,1,255,236,253,150,4,229,7,200,0,11,0,0,1,17,33,53,33,17,51,17,33,21,33,17,1,200, + 254,36,2,44,160,2,45,254,35,253,150,4,90,172,5,44,250,212,172,251,166,0,0,0,0,1,255,236,253,150,4,229,7,200,0,11,0,0,1,17, + 33,53,33,17,33,17,33,21,33,17,1,200,254,36,1,220,1,64,1,221,254,35,253,150,4,90,172,5,44,250,212,172,251,166,0,0,0,1,255,236, + 253,150,4,229,7,200,0,13,0,0,1,17,33,17,33,17,33,17,33,21,33,21,35,17,2,24,253,212,1,220,1,64,1,221,254,35,80,253,150,4, + 4,1,88,4,214,250,212,172,86,251,252,0,0,1,255,236,253,150,4,229,7,200,0,13,0,0,1,17,35,53,33,53,33,17,33,17,33,17,33,17, + 2,24,80,254,36,1,220,1,64,1,221,253,211,253,150,4,4,86,172,5,44,251,42,254,168,251,252,0,0,1,255,236,253,150,4,229,7,200,0,13, + 0,0,1,17,33,17,33,17,51,17,51,21,33,21,33,17,1,200,254,36,2,44,160,80,1,221,254,35,253,150,4,4,1,88,4,214,251,42,86,172, + 251,166,0,0,0,1,255,236,253,150,4,229,7,200,0,13,0,0,1,17,33,53,33,53,51,17,51,17,33,17,33,17,1,200,254,36,1,220,80,160, + 2,45,254,35,253,150,4,90,172,86,4,214,251,42,254,168,251,252,0,0,0,1,255,236,253,150,4,229,7,200,0,11,0,0,1,17,33,17,33,17, + 33,17,33,17,33,17,2,24,253,212,1,220,1,64,1,221,253,211,253,150,4,4,1,88,4,214,251,42,254,168,251,252,0,1,255,236,253,150,4,229, + 7,200,0,11,0,0,1,17,33,17,33,17,51,17,33,17,33,17,1,200,254,36,2,44,160,2,45,254,35,253,150,4,4,1,88,4,214,251,42,254, + 168,251,252,0,0,1,255,236,253,150,4,229,7,200,0,11,0,0,1,17,33,17,33,17,33,17,33,21,33,17,1,200,254,36,1,220,1,64,1,221, + 254,35,253,150,4,4,1,88,4,214,250,212,172,251,166,0,0,1,255,236,253,150,4,229,7,200,0,11,0,0,1,17,33,53,33,17,33,17,33,17, + 33,17,1,200,254,36,1,220,1,64,1,221,254,35,253,150,4,90,172,5,44,251,42,254,168,251,252,0,0,1,255,236,253,150,4,229,7,200,0,11, + 0,0,1,17,33,17,33,17,33,17,33,17,33,17,1,200,254,36,1,220,1,64,1,221,254,35,253,150,4,4,1,88,4,214,251,42,254,168,251,252, + 0,2,255,236,1,240,4,229,2,156,0,3,0,7,0,0,3,53,33,21,51,53,33,21,20,2,44,160,2,45,1,240,172,172,172,172,0,2,255,236, + 1,154,4,229,2,242,0,3,0,7,0,0,1,17,33,17,33,17,33,17,2,184,2,45,251,7,2,44,1,154,1,88,254,168,1,88,254,168,0,0, + 0,2,2,24,253,150,2,184,7,200,0,3,0,7,0,0,1,17,51,17,3,17,51,17,2,24,160,160,160,2,242,4,214,251,42,250,164,4,4,251, + 252,0,0,0,0,2,1,200,253,150,3,8,7,200,0,3,0,7,0,0,1,17,33,17,1,17,33,17,1,200,1,64,254,192,1,64,2,242,4,214, + 251,42,250,164,4,4,251,252,0,2,255,236,1,68,4,229,3,72,0,3,0,7,0,0,3,53,33,21,1,53,33,21,20,4,249,251,7,4,249,2, + 156,172,172,254,168,172,172,0,0,2,1,120,253,150,3,88,7,200,0,3,0,7,0,0,1,17,51,17,51,17,51,17,1,120,160,160,160,253,150,10, + 50,245,206,10,50,245,206,0,0,1,2,24,253,150,4,229,3,72,0,9,0,0,1,17,33,21,33,21,33,21,33,17,2,24,2,205,253,211,2,45, + 253,211,253,150,5,178,172,172,172,252,82,0,0,1,1,120,253,150,4,229,2,156,0,9,0,0,1,17,33,21,33,17,35,17,35,17,1,120,3,109, + 254,115,160,160,253,150,5,6,172,251,166,4,90,251,166,0,0,2,1,120,253,150,4,229,3,72,0,5,0,11,0,0,1,17,33,21,33,17,51,17, + 33,21,33,17,1,120,3,109,253,51,160,2,45,254,115,253,150,5,178,172,250,250,4,90,172,252,82,0,0,1,255,236,253,150,2,184,3,72,0,9, + 0,0,1,17,33,53,33,53,33,53,33,17,2,24,253,212,2,44,253,212,2,204,253,150,3,174,172,172,172,250,78,0,0,1,255,236,253,150,3,88, + 2,156,0,9,0,0,3,53,33,17,35,17,35,17,35,17,20,3,108,160,160,160,1,240,172,250,250,4,90,251,166,4,90,0,0,0,0,2,255,236, + 253,150,3,88,3,72,0,5,0,11,0,0,1,17,33,53,33,17,33,17,33,53,33,17,2,184,253,52,3,108,254,32,254,116,2,44,253,150,5,6, + 172,250,78,3,174,172,251,166,0,1,2,24,1,68,4,229,7,200,0,9,0,0,1,17,51,17,33,21,33,21,33,21,2,24,160,2,45,253,211,2, + 45,1,68,6,132,251,128,172,172,172,0,0,0,1,1,120,1,240,4,229,7,200,0,9,0,0,1,17,51,17,51,17,51,17,33,21,1,120,160,160, + 160,1,141,1,240,5,216,250,212,5,44,250,212,172,0,0,0,2,1,120,1,68,4,229,7,200,0,5,0,11,0,0,1,17,51,17,33,21,1,17, + 51,17,33,21,2,184,160,1,141,252,147,160,2,205,2,156,5,44,251,128,172,254,168,6,132,250,40,172,0,1,255,236,1,68,2,184,7,200,0,9, + 0,0,3,53,33,53,33,53,33,17,51,17,20,2,44,253,212,2,44,160,1,68,172,172,172,4,128,249,124,0,0,0,0,1,255,236,1,240,3,88, + 7,200,0,9,0,0,3,53,33,17,51,17,51,17,51,17,20,1,140,160,160,160,1,240,172,5,44,250,212,5,44,250,40,0,0,0,0,2,255,236, + 1,68,3,88,7,200,0,5,0,11,0,0,3,53,33,17,51,17,1,53,33,17,51,17,20,1,140,160,253,212,2,204,160,2,156,172,4,128,250,212, + 254,168,172,5,216,249,124,0,0,1,2,24,253,150,4,229,7,200,0,11,0,0,1,17,51,17,33,21,33,21,33,21,33,17,2,24,160,2,45,253, + 211,2,45,253,211,253,150,10,50,251,128,172,172,172,252,82,0,2,1,120,253,150,4,229,7,200,0,3,0,11,0,0,1,17,51,17,51,17,51,17, + 33,21,33,17,1,120,160,160,160,1,141,254,115,253,150,10,50,245,206,10,50,250,212,172,251,166,0,0,0,3,1,120,253,150,4,229,7,200,0,5, + 0,9,0,15,0,0,1,17,51,17,33,21,1,17,51,17,51,17,33,21,33,17,2,184,160,1,141,252,147,160,160,2,45,254,115,2,156,5,44,251, + 128,172,250,250,10,50,245,206,4,90,172,252,82,0,0,0,0,1,255,236,253,150,2,184,7,200,0,11,0,0,1,17,33,53,33,53,33,53,33,17, + 51,17,2,24,253,212,2,44,253,212,2,44,160,253,150,3,174,172,172,172,4,128,245,206,0,2,255,236,253,150,3,88,7,200,0,7,0,11,0,0, + 1,17,33,53,33,17,51,17,51,17,51,17,1,120,254,116,1,140,160,160,160,253,150,4,90,172,5,44,245,206,10,50,245,206,0,0,0,3,255,236, + 253,150,3,88,7,200,0,5,0,11,0,15,0,0,3,53,33,17,51,17,3,17,33,53,33,17,51,17,51,17,20,1,140,160,160,254,116,2,44,160, + 160,2,156,172,4,128,250,212,250,250,3,174,172,251,166,10,50,245,206,0,0,2,255,236,253,150,4,229,3,72,0,7,0,11,0,0,1,17,33,53, + 33,21,33,17,1,53,33,21,2,24,253,212,4,249,253,211,253,52,4,249,253,150,3,174,172,172,252,82,5,6,172,172,0,1,255,236,253,150,4,229, + 2,156,0,11,0,0,3,53,33,21,33,17,35,17,35,17,35,17,20,4,249,254,115,160,160,160,1,240,172,172,251,166,4,90,251,166,4,90,0,0, + 0,3,255,236,253,150,4,229,3,72,0,3,0,9,0,15,0,0,3,53,33,21,1,17,33,53,33,17,51,17,33,21,33,17,20,4,249,252,147,254, + 116,2,44,160,2,45,254,115,2,156,172,172,250,250,3,174,172,251,166,4,90,172,252,82,0,2,255,236,1,68,4,229,7,200,0,3,0,11,0,0, + 3,53,33,21,1,53,33,17,51,17,33,21,20,4,249,251,7,2,44,160,2,45,1,68,172,172,1,88,172,4,128,251,128,172,0,0,0,1,255,236, + 1,240,4,229,7,200,0,11,0,0,3,53,33,17,51,17,51,17,51,17,33,21,20,1,140,160,160,160,1,141,1,240,172,5,44,250,212,5,44,250, + 212,172,0,0,0,3,255,236,1,68,4,229,7,200,0,3,0,9,0,15,0,0,3,53,33,21,1,53,33,17,51,17,51,17,51,17,33,21,20,4, + 249,251,7,1,140,160,160,160,1,141,1,68,172,172,1,88,172,4,128,250,212,5,44,251,128,172,0,0,0,1,255,236,253,150,4,229,7,200,0,19, + 0,0,1,17,33,53,33,53,33,53,33,17,51,17,33,21,33,21,33,21,33,17,2,24,253,212,2,44,253,212,2,44,160,2,45,253,211,2,45,253, + 211,253,150,3,174,172,172,172,4,128,251,128,172,172,172,252,82,0,0,0,0,1,255,236,253,150,4,229,7,200,0,19,0,0,3,53,33,17,51,17, + 51,17,51,17,33,21,33,17,35,17,35,17,35,17,20,1,140,160,160,160,1,141,254,115,160,160,160,1,240,172,5,44,250,212,5,44,250,212,172,251, + 166,4,90,251,166,4,90,0,0,4,255,236,253,150,4,229,7,200,0,5,0,11,0,17,0,23,0,0,1,17,33,21,33,17,33,17,33,53,33,17, + 1,53,33,17,51,17,51,17,51,17,33,21,2,184,2,45,254,115,254,32,254,116,2,44,253,212,1,140,160,160,160,1,141,253,150,4,90,172,252,82, + 3,174,172,251,166,5,6,172,4,128,250,212,5,44,251,128,172,0,0,0,0,1,2,24,253,150,4,229,2,156,0,12,0,0,1,17,52,55,54,51, + 33,21,33,34,6,21,17,2,24,81,91,168,1,121,254,135,89,91,253,150,3,96,161,127,134,172,126,124,252,160,0,0,0,1,255,236,253,150,2,184, + 2,156,0,13,0,0,1,17,52,39,38,35,33,53,33,50,23,22,21,17,2,24,46,45,89,254,136,1,120,168,91,81,253,150,3,96,126,61,63,172, + 134,120,168,252,160,0,0,0,0,1,255,236,1,240,2,184,7,200,0,12,0,0,3,53,33,50,54,53,17,51,17,20,7,6,35,20,1,120,89,91, + 160,81,91,168,1,240,172,126,124,4,50,251,206,168,120,134,0,1,2,24,1,240,4,229,7,200,0,12,0,0,1,33,34,39,38,53,17,51,17,20, + 22,51,33,4,229,254,135,168,91,81,160,91,89,1,121,1,240,134,120,168,4,50,251,206,124,126,0,0,0,1,255,147,253,150,5,62,7,200,0,3, + 0,0,3,1,51,1,109,4,249,178,251,7,253,150,10,50,245,206,0,0,0,1,255,147,253,150,5,62,7,200,0,3,0,0,1,35,1,51,5,62, + 178,251,7,178,253,150,10,50,0,1,255,147,253,150,5,62,7,200,0,11,0,0,1,35,9,1,35,9,1,51,9,1,51,1,5,62,178,253,220,253, + 221,178,2,125,253,131,178,2,35,2,36,178,253,132,253,150,4,99,251,157,5,25,5,25,251,157,4,99,250,231,0,0,0,1,255,236,1,240,2,124, + 2,156,0,3,0,0,3,53,33,21,20,2,144,1,240,172,172,0,0,0,0,1,2,24,2,70,2,184,7,200,0,3,0,0,1,17,51,17,2,24, + 160,2,70,5,130,250,126,0,0,1,2,124,1,240,4,229,2,156,0,3,0,0,1,53,33,21,2,124,2,105,1,240,172,172,0,0,0,1,2,24, + 253,150,2,184,2,70,0,3,0,0,1,17,51,17,2,24,160,253,150,4,176,251,80,0,0,1,255,236,1,154,2,124,2,242,0,3,0,0,3,17, + 33,17,20,2,144,1,154,1,88,254,168,0,0,1,1,200,2,70,3,8,7,200,0,3,0,0,1,17,33,17,1,200,1,64,2,70,5,130,250,126, + 0,1,2,124,1,154,4,229,2,242,0,3,0,0,1,17,33,17,2,124,2,105,1,154,1,88,254,168,0,1,1,200,253,150,3,8,2,70,0,3, + 0,0,1,17,33,17,1,200,1,64,253,150,4,176,251,80,0,1,255,236,1,154,4,229,2,242,0,7,0,0,3,53,33,53,33,17,33,53,20,2, + 144,2,105,253,151,1,240,172,86,254,168,86,0,1,1,200,253,150,3,8,7,200,0,7,0,0,1,17,51,17,51,17,51,17,1,200,80,160,80,253, + 150,4,176,5,130,250,126,251,80,0,0,0,0,1,255,236,1,154,4,229,2,242,0,7,0,0,3,17,33,21,33,21,33,21,20,2,144,2,105,253, + 151,1,154,1,88,86,172,86,0,1,1,200,253,150,3,8,7,200,0,7,0,0,1,17,35,17,33,17,35,17,2,24,80,1,64,80,253,150,4,176, + 5,130,250,126,251,80,0,0,255,255,255,236,2,20,6,59,6,40,16,7,14,86,0,0,4,20,0,0,0,1,255,236,254,0,6,59,255,5,0,3, + 0,0,3,17,33,17,20,6,79,254,0,1,5,254,251,0,0,1,255,236,254,0,6,59,255,246,0,3,0,0,3,17,33,17,20,6,79,254,0,1, + 246,254,10,0,0,1,255,236,254,0,6,59,1,15,0,3,0,0,3,17,33,17,20,6,79,254,0,3,15,252,241,0,0,1,255,236,254,0,6,59, + 2,20,0,3,0,0,3,17,33,17,20,6,79,254,0,4,20,251,236,0,0,1,255,236,254,0,6,59,3,25,0,3,0,0,3,17,33,17,20,6, + 79,254,0,5,25,250,231,0,0,1,255,236,254,0,6,59,4,30,0,3,0,0,3,17,33,17,20,6,79,254,0,6,30,249,226,0,0,1,255,236, + 254,0,6,59,5,35,0,3,0,0,3,17,33,17,20,6,79,254,0,7,35,248,221,0,0,1,255,236,254,0,6,59,6,40,0,3,0,0,3,17, + 33,17,20,6,79,254,0,8,40,247,216,0,0,1,255,236,254,0,5,113,6,40,0,3,0,0,3,17,33,17,20,5,133,254,0,8,40,247,216,0, + 0,1,255,236,254,0,4,167,6,40,0,3,0,0,3,17,33,17,20,4,187,254,0,8,40,247,216,0,0,1,255,236,254,0,3,221,6,40,0,3, + 0,0,3,17,33,17,20,3,241,254,0,8,40,247,216,0,0,1,255,236,254,0,3,19,6,40,0,3,0,0,3,17,33,17,20,3,39,254,0,8, + 40,247,216,0,0,1,255,236,254,0,2,73,6,40,0,3,0,0,3,17,33,17,20,2,93,254,0,8,40,247,216,0,0,1,255,236,254,0,1,127, + 6,40,0,3,0,0,3,17,33,17,20,1,147,254,0,8,40,247,216,0,0,1,255,236,254,0,0,181,6,40,0,3,0,0,3,17,51,17,20,201, + 254,0,8,40,247,216,0,0,255,255,3,19,254,0,6,58,6,40,16,7,14,94,3,39,0,0,0,0,0,12,255,236,254,0,5,113,6,40,0,3, + 0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,0,1,17,51,17,33,17,51,17,19,17,51,17,33,17,51,17, + 1,17,51,17,33,17,51,17,19,17,51,17,33,17,51,17,1,17,51,17,33,17,51,17,19,17,51,17,33,17,51,17,4,167,202,252,14,202,202,202, + 252,15,201,3,242,202,252,14,202,202,202,252,15,201,3,242,202,252,14,202,202,202,252,15,201,254,0,1,5,254,251,1,5,254,251,1,109,1,5,254, + 251,1,5,254,251,1,110,1,5,254,251,1,5,254,251,1,109,1,5,254,251,1,5,254,251,1,110,1,5,254,251,1,5,254,251,1,109,1,5,254, + 251,1,5,254,251,0,0,0,0,32,255,236,254,0,6,52,6,40,0,7,0,15,0,23,0,31,0,39,0,47,0,55,0,63,0,71,0,79,0,87, + 0,95,0,103,0,111,0,119,0,127,0,135,0,143,0,151,0,159,0,167,0,175,0,183,0,191,0,199,0,207,0,215,0,223,0,231,0,239,0,247, + 0,255,0,0,19,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,1,7,35,39, + 53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,1,7,35,39,53,55,51,23,5,7,35,39, + 53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,1,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39, + 53,55,51,23,5,7,35,39,53,55,51,23,1,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39, + 53,55,51,23,1,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,1,7,35,39, + 53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,1,7,35,39,53,55,51,23,5,7,35,39, + 53,55,51,23,5,7,35,39,53,55,51,23,5,7,35,39,53,55,51,23,181,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5, + 5,191,5,1,146,5,191,5,5,191,5,252,19,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5, + 5,191,5,250,129,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5,5,191,5,252,19,5,191,5, + 5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5,5,191,5,250,129,5,191,5,5,191,5,1,146,5,191,5, + 5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5,5,191,5,252,19,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5, + 5,191,5,1,146,5,191,5,5,191,5,250,129,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5, + 5,191,5,252,19,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5,5,191,5,1,146,5,191,5,5,191,5,5,40,5,5,251, + 5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,254,0,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251, + 5,5,251,5,5,254,0,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,254,0,5,5,251,5,5,251,5,5, + 251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,254,0,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5, + 254,0,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,254,0,5,5,251,5,5,251,5,5,251,5,5,251,5, + 5,251,5,5,251,5,5,251,5,5,254,0,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,251,5,5,0,0,7,255,236, + 254,0,6,59,6,40,0,25,0,29,0,33,0,37,0,41,0,45,0,49,0,0,3,17,51,17,35,17,51,17,35,17,51,17,33,17,51,17,33,17, + 35,17,35,17,33,17,35,25,1,51,17,35,1,51,17,35,1,51,17,35,1,51,17,35,1,51,17,35,1,51,17,35,20,201,201,201,201,201,2,94, + 202,2,94,202,202,253,162,202,202,202,3,40,202,202,254,108,202,202,254,108,202,202,3,40,202,202,254,108,202,202,254,0,1,109,1,5,1,214,1,5, + 1,214,1,5,254,251,1,5,247,216,1,5,254,251,1,5,254,251,5,182,1,5,254,251,1,5,253,141,1,5,253,142,1,5,254,251,1,5,253,141, + 1,5,0,0,255,255,255,236,5,35,6,59,6,40,16,7,14,83,0,0,7,35,0,0,255,255,5,113,254,0,6,58,6,40,16,7,14,97,5,133, + 0,0,0,0,0,1,255,236,254,0,3,20,2,20,0,3,0,0,3,17,33,17,20,3,40,254,0,4,20,251,236,0,0,1,3,19,254,0,6,59, + 2,20,0,3,0,0,1,17,33,17,3,19,3,40,254,0,4,20,251,236,0,1,255,236,2,20,3,20,6,40,0,3,0,0,3,17,33,17,20,3, + 40,2,20,4,20,251,236,0,0,1,255,236,254,0,6,59,6,40,0,5,0,0,1,33,17,33,17,33,6,59,249,177,3,40,3,39,254,0,8,40, + 251,236,0,0,0,1,255,236,254,0,6,59,6,40,0,7,0,0,3,17,33,17,33,17,33,17,20,3,40,3,39,252,216,2,20,4,20,251,236,251, + 236,4,20,0,0,1,255,236,254,0,6,59,6,40,0,5,0,0,1,17,33,17,33,17,6,59,252,217,252,216,6,40,251,236,251,236,8,40,0,0, + 0,1,255,236,254,0,6,59,6,40,0,5,0,0,3,33,17,33,17,33,20,6,79,252,216,252,217,6,40,247,216,4,20,0,0,0,0,1,3,19, + 2,20,6,59,6,40,0,3,0,0,1,17,33,17,3,19,3,40,2,20,4,20,251,236,0,1,255,236,254,0,6,59,6,40,0,7,0,0,3,33, + 17,33,17,33,17,33,20,3,39,3,40,252,217,252,216,2,20,4,20,251,236,251,236,0,0,1,255,236,254,0,6,59,6,40,0,5,0,0,3,17, + 33,17,33,17,20,3,39,3,40,254,0,4,20,4,20,247,216,0,0,0,0,1,0,186,255,4,6,213,5,36,0,3,0,0,23,17,33,17,186,6, + 27,252,6,32,249,224,0,0,0,2,0,186,255,4,6,213,5,36,0,3,0,7,0,0,5,33,17,33,3,17,33,17,1,44,5,55,250,201,114,6, + 27,138,5,60,250,82,6,32,249,224,0,0,0,2,0,186,255,4,6,213,5,36,0,11,0,23,0,0,37,20,51,33,50,53,17,52,35,33,34,21, + 3,17,16,41,1,32,25,1,16,41,1,32,1,44,228,3,111,228,228,252,145,228,114,1,86,3,111,1,86,254,170,252,145,254,170,90,228,228,3,116, + 228,228,252,140,3,116,1,86,254,170,252,140,254,170,0,0,255,255,0,186,255,4,6,213,5,36,16,39,14,124,1,17,0,0,16,6,14,115,0,0, + 0,6,0,186,255,4,6,213,5,36,0,3,0,7,0,11,0,15,0,19,0,23,0,0,23,17,33,17,37,33,53,33,53,33,53,33,53,33,53,33, + 53,33,53,33,53,33,53,33,186,6,27,250,87,5,55,250,201,5,55,250,201,5,55,250,201,5,55,250,201,5,55,250,201,252,6,32,249,224,114,176, + 114,178,114,176,114,178,114,176,0,6,0,186,255,4,6,213,5,36,0,3,0,7,0,11,0,15,0,19,0,23,0,0,23,17,33,17,37,51,17,35, + 1,51,17,35,1,51,17,35,1,51,17,35,1,51,17,35,186,6,27,254,225,176,176,254,220,178,178,254,222,176,176,254,220,178,178,254,222,176,176,252, + 6,32,249,224,116,5,56,250,200,5,56,250,200,5,56,250,200,5,56,250,200,5,56,0,0,26,0,186,255,4,6,213,5,36,0,3,0,7,0,11, + 0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,51,0,55,0,59,0,63,0,67,0,71,0,75,0,79,0,83,0,87,0,91, + 0,95,0,99,0,103,0,0,5,51,53,35,5,51,53,35,5,51,53,35,1,51,53,35,17,51,53,35,17,51,53,35,17,51,53,35,17,51,53,35, + 1,51,53,35,17,51,53,35,17,51,53,35,17,51,53,35,1,51,53,35,17,51,53,35,17,51,53,35,17,51,53,35,1,51,53,35,17,51,53,35, + 17,51,53,35,17,51,53,35,1,51,53,35,17,51,53,35,17,51,53,35,17,51,53,35,17,51,53,35,1,17,33,17,2,76,178,178,1,36,176,176, + 1,34,178,178,252,154,174,174,174,174,174,174,174,174,174,174,1,32,178,178,178,178,178,178,178,178,1,36,176,176,176,176,176,176,176,176,1,34,178,178, + 178,178,178,178,178,178,1,36,173,173,173,173,173,173,173,173,173,173,251,4,6,27,136,174,174,174,174,174,3,220,174,254,46,178,254,44,176,254,44,178, + 254,46,174,3,220,174,254,46,178,254,44,176,254,44,178,2,184,174,254,46,178,254,44,176,254,44,178,2,184,174,254,46,178,254,44,176,254,44,178,2, + 184,174,254,46,178,254,44,176,254,44,178,254,46,174,254,222,6,32,249,224,0,8,0,186,255,4,6,213,5,36,0,3,0,6,0,10,0,14,0,20, + 0,24,0,28,0,31,0,0,23,17,33,17,1,21,51,3,21,1,51,1,21,1,55,1,21,1,55,53,1,51,1,53,1,51,1,53,1,51,23,53, + 186,6,27,250,87,226,226,1,132,251,253,129,3,33,251,251,228,4,190,121,251,66,162,4,28,252,223,162,2,127,254,124,162,226,252,6,32,249,224,1, + 84,226,2,127,252,254,125,4,28,252,252,223,1,5,60,127,251,66,1,127,4,189,251,228,252,3,32,253,129,252,1,131,226,226,0,0,0,8,0,186, + 255,4,6,213,5,36,0,3,0,6,0,10,0,14,0,20,0,24,0,28,0,31,0,0,23,17,33,17,37,51,53,5,51,1,53,1,23,1,53,1, + 23,1,53,35,1,53,1,35,1,53,1,35,1,53,55,35,186,6,27,254,172,226,253,129,251,1,132,251,228,251,3,33,250,201,121,4,190,121,251,66, + 4,28,251,252,223,2,127,251,254,124,226,226,252,6,32,249,224,114,226,226,1,131,252,253,129,1,3,33,252,251,228,1,4,190,127,251,67,161,4,28, + 252,224,161,2,127,254,125,161,226,0,0,0,0,26,0,186,255,4,6,213,5,36,0,4,0,9,0,14,0,18,0,23,0,28,0,32,0,36,0,40, + 0,45,0,49,0,53,0,57,0,61,0,65,0,70,0,75,0,79,0,83,0,87,0,92,0,97,0,101,0,106,0,111,0,115,0,0,1,23,55,39, + 35,17,23,55,39,7,1,23,55,39,35,1,23,55,39,3,23,55,39,7,1,23,55,39,35,1,23,55,39,1,23,55,39,1,23,55,39,1,23,55, + 53,35,1,23,55,39,1,23,55,39,1,23,55,39,1,23,55,39,1,23,55,39,1,51,55,39,7,1,23,55,53,39,1,23,55,39,1,23,55,39, + 1,23,55,39,1,23,51,55,39,1,23,55,53,39,1,23,55,39,1,23,51,55,39,5,23,51,53,39,1,17,33,17,1,44,50,124,53,121,50,126, + 126,50,1,79,126,126,53,146,254,254,126,124,126,254,50,126,126,50,2,236,126,126,53,146,254,253,126,125,125,254,181,125,125,126,254,181,126,126,126,3, + 137,125,49,121,254,253,124,126,124,254,179,124,126,124,254,181,125,124,124,254,181,124,126,124,254,179,125,125,124,255,0,122,52,124,50,4,136,126,49,50, + 254,180,126,126,126,254,181,126,124,126,254,182,126,126,126,254,179,53,147,52,126,2,187,125,50,50,254,181,126,125,126,254,181,52,147,53,126,1,31,52, + 122,50,250,137,6,27,4,51,49,124,52,253,228,50,126,126,49,1,79,126,126,52,254,255,126,124,126,252,204,49,126,125,49,2,236,126,126,52,254,253, + 125,125,126,254,181,126,125,125,254,182,126,126,126,1,236,124,49,127,254,253,124,126,124,254,180,125,126,124,254,182,124,124,124,254,181,124,126,124,254,180, + 124,125,125,254,129,52,124,49,2,237,126,50,153,49,254,180,126,126,126,254,181,126,124,126,254,181,126,126,126,254,180,52,52,126,1,30,126,49,153,49, + 254,181,125,124,126,254,181,52,52,126,126,52,127,49,254,222,6,32,249,224,0,1,0,186,0,22,4,178,4,18,0,3,0,0,55,17,33,17,186,3, + 248,22,3,252,252,4,0,0,0,2,0,186,0,22,4,178,4,18,0,3,0,7,0,0,37,33,17,33,3,17,33,17,1,44,3,20,252,236,114,3, + 248,136,3,24,252,118,3,252,252,4,0,0,0,1,0,186,0,154,6,213,3,142,0,3,0,0,37,33,17,33,6,213,249,229,6,27,154,2,244,0, + 0,2,0,186,0,154,6,213,3,142,0,3,0,7,0,0,1,17,33,17,5,33,17,33,6,99,250,201,5,169,249,229,6,27,1,12,2,16,253,240, + 114,2,244,0,0,1,0,186,255,6,3,173,5,34,0,3,0,0,23,17,33,17,186,2,243,250,6,28,249,228,0,0,0,2,0,186,255,6,3,173, + 5,34,0,3,0,7,0,0,5,33,17,33,3,17,33,17,1,44,2,15,253,241,114,2,243,136,5,56,250,86,6,28,249,228,0,0,0,1,0,6, + 0,154,6,33,3,142,0,3,0,0,37,33,1,33,4,152,251,110,1,138,4,145,154,2,244,0,0,0,0,2,0,6,0,154,6,33,3,142,0,3, + 0,7,0,0,9,1,33,1,5,33,1,33,4,98,1,16,252,83,254,239,3,228,251,110,1,138,4,145,1,12,2,16,253,240,114,2,244,0,0,0, + 0,1,0,6,255,4,6,33,5,36,0,2,0,0,23,9,1,6,3,13,3,14,252,6,32,249,224,0,0,2,0,6,255,4,6,33,5,36,0,2, + 0,5,0,0,23,33,9,3,177,4,197,253,157,252,243,3,13,3,14,138,4,202,250,196,6,32,249,224,0,1,0,6,0,22,3,254,4,18,0,2, + 0,0,55,9,1,6,1,252,1,252,22,3,252,252,4,0,0,2,0,6,0,22,3,254,4,18,0,2,0,5,0,0,55,33,9,3,177,2,162,254, + 175,254,4,1,252,1,252,136,2,166,252,232,3,252,252,4,0,1,0,6,255,4,6,33,5,36,0,2,0,0,23,17,1,6,6,27,252,6,32,252, + 240,0,0,0,0,2,0,6,255,4,6,33,5,36,0,2,0,5,0,0,23,9,1,3,17,1,120,4,197,251,59,114,6,27,82,2,102,2,102,250, + 138,6,32,252,240,0,0,0,0,1,0,6,0,22,3,254,4,18,0,2,0,0,55,17,1,6,3,248,22,3,252,254,2,0,0,0,0,2,0,6, + 0,22,3,254,4,18,0,2,0,5,0,0,55,9,1,3,17,1,120,2,162,253,94,114,3,248,193,1,83,1,83,252,175,3,252,254,2,0,0,0, + 0,1,0,6,0,22,6,33,4,18,0,2,0,0,55,17,1,6,6,27,22,3,252,254,2,0,0,0,0,2,0,6,0,22,6,33,4,18,0,2, + 0,5,0,0,55,9,1,3,17,1,120,4,140,251,116,114,6,27,193,1,83,1,83,252,175,3,252,254,2,0,0,0,0,1,0,6,255,4,6,33, + 5,36,0,2,0,0,19,33,1,6,6,27,252,242,5,36,249,224,0,0,0,2,0,6,255,4,6,33,5,36,0,2,0,5,0,0,19,9,1,37, + 33,1,177,2,98,2,99,250,144,6,27,252,242,4,178,251,54,4,202,114,249,224,0,0,0,1,0,6,0,22,3,254,4,18,0,2,0,0,19,33, + 1,6,3,248,254,4,4,18,252,4,0,0,0,2,0,6,0,22,3,254,4,18,0,2,0,5,0,0,19,9,1,37,33,1,177,1,81,1,81,252, + 179,3,248,254,4,3,160,253,90,2,166,114,252,4,0,0,0,1,0,6,255,4,6,33,5,36,0,2,0,0,19,1,17,6,6,27,2,20,3,16, + 249,224,0,0,0,2,0,6,255,4,6,33,5,36,0,2,0,5,0,0,19,1,17,9,1,17,234,4,197,250,87,6,27,2,20,253,154,4,204,253, + 154,3,16,249,224,0,0,0,0,1,0,6,0,22,3,254,4,18,0,2,0,0,19,1,17,6,3,248,2,20,1,254,252,4,0,0,0,2,0,6, + 0,22,3,254,4,18,0,2,0,5,0,0,19,1,17,9,1,17,234,2,162,252,122,3,248,2,20,254,173,2,166,254,173,1,254,252,4,0,0,0, + 0,1,0,6,0,22,6,33,4,18,0,2,0,0,19,1,17,6,6,27,2,20,1,254,252,4,0,0,0,2,0,6,0,22,6,33,4,18,0,2, + 0,5,0,0,9,1,17,9,1,17,1,35,4,140,250,87,6,27,2,20,254,173,2,166,254,173,1,254,252,4,0,0,0,1,0,6,255,4,6,33, + 5,36,0,3,0,0,19,9,2,6,3,13,3,14,252,242,2,20,3,16,252,240,252,240,0,2,0,6,255,4,6,33,5,36,0,3,0,7,0,0, + 19,9,6,158,2,117,2,118,253,138,252,243,3,13,3,14,252,242,2,20,253,136,2,120,2,120,253,136,3,16,252,240,252,240,0,0,0,3,0,6, + 255,4,6,33,5,36,0,3,0,7,0,11,0,0,9,11,1,62,1,213,1,213,254,43,253,139,2,117,2,118,253,138,252,243,3,13,3,14,252,242, + 2,20,1,215,254,41,254,41,1,215,253,136,2,120,2,120,253,136,3,16,252,240,252,240,0,3,0,112,254,255,6,139,5,41,0,13,0,27,0,41, + 0,0,36,16,55,54,51,50,23,22,16,7,6,35,34,39,0,16,5,22,51,50,55,36,16,37,38,35,34,7,0,16,37,54,51,50,23,4,16,5, + 6,35,34,39,1,130,254,126,127,128,126,254,254,126,128,127,126,254,101,1,77,165,166,167,165,1,77,254,179,165,167,166,165,254,62,1,135,195,195,196, + 195,1,135,254,121,195,196,195,195,239,2,74,146,74,74,146,253,182,146,74,74,3,54,253,2,192,96,96,192,2,254,192,96,96,251,255,3,132,226,113, + 113,226,252,124,226,113,113,0,0,2,0,6,254,35,3,238,6,117,0,3,0,7,0,34,64,17,2,6,0,8,4,6,8,6,4,3,2,1,0,6, + 5,7,8,16,212,204,23,57,49,0,16,212,204,17,57,18,57,48,9,7,1,250,254,127,1,129,1,129,254,127,1,244,254,12,254,12,5,129,252,207, + 252,199,3,57,4,37,251,219,251,211,4,45,0,2,0,112,254,255,6,139,5,41,0,13,0,27,0,0,18,16,5,22,51,50,55,36,16,37,38,35, + 34,7,0,16,37,54,51,50,23,4,16,5,6,35,34,39,229,1,77,165,166,167,165,1,77,254,179,165,167,166,165,254,62,1,135,195,195,196,195,1, + 135,254,121,195,196,195,195,3,147,253,2,192,96,96,192,2,254,192,96,96,251,255,3,132,226,113,113,226,252,124,226,113,113,0,0,0,0,8,0,114, + 255,1,6,137,5,39,0,9,0,19,0,29,0,39,0,47,0,55,0,63,0,71,0,0,37,22,23,22,23,7,38,39,38,39,5,54,55,54,55,23, + 6,7,6,7,19,38,39,38,39,55,22,23,22,23,37,6,7,6,7,39,54,55,54,55,19,22,50,55,23,6,34,39,1,54,52,39,55,22,20,7, + 1,38,34,7,39,54,50,23,1,6,20,23,7,38,52,55,1,92,43,59,46,56,49,70,57,75,53,3,218,56,46,52,50,100,59,69,57,71,156,44, + 58,46,56,48,71,57,74,54,252,38,56,46,59,43,100,49,79,57,70,237,76,154,76,38,95,192,96,3,74,16,16,110,20,20,253,161,76,154,76,39, + 96,192,95,252,184,16,16,110,20,20,143,60,49,38,32,106,40,48,61,74,117,32,38,44,65,61,78,58,48,40,4,39,60,49,38,32,106,40,48,61, + 74,117,32,38,49,60,62,69,66,48,40,250,212,22,22,110,27,27,2,95,73,160,73,39,91,202,91,3,74,22,22,110,27,27,253,161,73,160,73,39, + 91,202,91,0,0,6,0,112,254,255,6,139,5,41,0,13,0,23,0,27,0,37,0,47,0,51,0,0,54,16,37,54,51,50,23,4,16,5,6,35, + 34,39,19,17,22,23,22,23,17,6,7,6,7,6,16,23,1,17,22,51,50,55,17,38,35,34,23,17,54,55,54,55,17,38,39,38,23,17,54,16, + 112,1,135,195,195,196,195,1,135,254,121,195,196,195,195,11,23,25,65,65,65,65,25,137,171,171,1,150,44,43,45,44,44,45,43,246,65,64,26,23, + 23,26,64,227,170,82,3,132,226,113,113,226,252,124,226,113,113,4,197,251,190,15,15,37,23,4,246,23,37,15,109,177,253,220,177,4,91,250,208,7, + 7,5,48,7,36,251,10,23,37,15,16,4,64,16,15,37,162,252,124,177,2,34,0,0,0,4,0,112,254,255,6,139,5,41,0,13,0,27,0,41, + 0,55,0,0,0,16,23,22,51,50,55,54,16,39,38,35,34,7,2,16,55,54,51,50,23,22,16,7,6,35,34,39,0,16,5,22,51,50,55,36, + 16,37,38,35,34,7,0,16,37,54,51,50,23,4,16,5,6,35,34,39,2,153,114,57,57,58,57,114,114,57,58,57,57,237,176,88,87,88,88,176, + 176,88,88,87,88,254,23,1,77,165,166,167,165,1,77,254,179,165,167,166,165,254,62,1,135,195,195,196,195,1,135,254,121,195,196,195,195,2,152,254, + 248,66,33,33,66,1,8,66,33,33,254,111,1,150,101,51,51,101,254,106,101,51,51,2,175,253,2,192,96,96,192,2,254,192,96,96,251,255,3,132, + 226,113,113,226,252,124,226,113,113,0,0,0,0,1,0,112,255,4,6,139,5,32,0,23,0,19,64,7,6,18,24,25,12,0,24,16,220,212,204,49, + 0,16,212,196,48,19,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,112,105,104,182,181,210,209,181,182,104,105, + 105,104,182,181,209,210,181,182,104,105,2,18,209,182,181,105,105,105,105,181,182,209,209,182,181,105,105,105,105,181,182,0,0,2,0,112,255,4,6,139, + 5,32,0,13,0,21,0,0,18,16,18,36,51,50,4,18,16,2,4,35,34,36,5,50,55,36,16,37,38,35,112,209,1,107,210,209,1,107,209,209, + 254,149,209,210,254,149,2,60,167,165,1,77,254,179,165,167,1,65,1,162,1,107,210,210,254,149,254,94,254,149,210,210,97,96,192,2,254,192,96,0, + 0,2,0,112,255,4,6,139,5,32,0,13,0,21,0,0,18,16,18,36,51,50,4,18,16,2,4,35,34,36,1,34,7,4,16,5,22,51,112,209, + 1,107,210,209,1,107,209,209,254,149,209,210,254,149,2,60,166,165,254,179,1,77,165,166,1,65,1,162,1,107,210,210,254,149,254,94,254,149,210,210, + 4,221,96,192,253,2,192,96,0,2,0,112,255,4,6,139,5,32,0,13,0,22,0,0,18,16,18,36,51,50,4,18,16,2,4,35,34,36,1,16, + 37,38,35,34,7,4,17,112,209,1,107,210,209,1,107,209,209,254,149,209,210,254,149,4,213,254,179,165,167,166,165,254,179,1,65,1,162,1,107,210, + 210,254,149,254,94,254,149,210,210,2,62,1,127,192,96,96,192,254,129,0,0,2,0,112,255,4,6,139,5,32,0,13,0,22,0,0,18,16,18,36, + 51,50,4,18,16,2,4,35,34,36,3,16,5,22,51,50,55,36,17,112,209,1,107,210,209,1,107,209,209,254,149,209,210,254,149,92,1,77,165,166, + 167,165,1,77,1,65,1,162,1,107,210,210,254,149,254,94,254,149,210,210,2,62,254,129,192,96,96,192,1,127,0,0,0,2,0,112,255,4,6,139, + 5,32,0,11,0,24,0,0,18,16,18,36,32,4,18,16,2,4,32,36,1,34,7,4,16,5,22,51,50,55,36,17,33,112,209,1,107,1,163,1, + 107,209,209,254,149,254,93,254,149,2,60,166,165,254,179,1,77,165,166,167,165,1,77,253,103,1,65,1,162,1,107,210,210,254,149,254,94,254,149,210, + 210,4,221,96,192,253,2,192,96,96,192,1,127,0,0,0,0,2,0,112,255,4,6,139,5,32,0,11,0,17,0,0,18,16,18,36,32,4,18,16, + 2,4,32,36,1,34,7,4,17,33,112,209,1,107,1,163,1,107,209,209,254,149,254,93,254,149,2,60,166,165,254,179,2,152,1,65,1,162,1,107, + 210,210,254,149,254,94,254,149,210,210,4,221,96,192,254,129,0,1,0,112,254,255,3,125,5,41,0,7,0,0,54,16,37,54,51,17,34,39,112,1, + 135,195,195,195,195,82,3,132,226,113,249,214,113,0,0,0,0,1,0,186,254,255,3,199,5,41,0,7,0,0,0,16,5,6,35,17,50,23,3,199, + 254,121,195,195,195,195,3,214,252,124,226,113,6,42,113,0,0,2,0,186,255,236,5,154,6,40,0,10,0,14,0,0,1,20,22,50,54,53,52,38, + 35,34,6,1,17,33,17,2,1,172,250,172,171,124,126,173,254,185,4,224,2,250,125,172,172,125,124,171,171,252,118,6,60,249,196,0,0,3,0,186, + 254,0,7,9,6,40,0,13,0,27,0,31,0,0,36,16,37,54,51,50,23,4,16,5,6,35,34,39,0,16,5,22,51,50,55,36,16,37,38,35, + 34,7,1,17,33,17,1,73,1,77,165,166,167,165,1,77,254,179,165,167,166,165,254,62,1,135,195,195,196,195,1,135,254,121,195,196,195,195,254,95, + 6,79,149,2,254,192,96,96,192,253,2,192,96,96,4,1,252,124,226,113,113,226,3,132,226,113,113,249,72,8,40,247,216,0,0,0,0,2,0,186, + 2,20,7,9,6,40,0,12,0,21,0,0,19,17,33,17,35,16,37,38,35,34,7,4,17,41,1,16,37,54,51,50,23,4,186,6,79,26,254,121, + 195,196,195,195,254,121,5,166,250,207,1,77,166,165,166,166,1,77,2,20,4,20,251,236,1,194,226,113,113,226,254,62,1,126,193,96,96,193,0,0, + 0,2,0,186,254,0,7,9,2,20,0,12,0,21,0,0,19,17,51,16,5,22,51,50,55,36,17,51,17,1,33,16,5,6,35,34,39,36,186,26, + 1,135,195,195,196,195,1,135,26,250,64,5,49,254,179,166,166,165,166,254,179,254,0,4,20,254,62,226,113,113,226,1,194,251,236,4,20,254,130,193, + 96,96,193,0,0,1,0,6,2,20,3,19,5,41,0,9,0,0,19,16,37,54,51,21,34,7,4,17,6,1,135,195,195,166,165,254,179,2,20,1, + 194,226,113,118,96,192,254,129,0,1,0,6,2,20,3,19,5,41,0,9,0,0,19,50,23,4,17,35,16,37,38,35,6,195,195,1,135,117,254,179, + 165,166,5,41,113,226,254,62,1,127,192,96,0,1,0,6,254,255,3,19,2,20,0,9,0,0,19,53,50,55,36,17,51,16,5,6,6,166,165,1, + 77,117,254,121,195,254,255,118,96,192,1,127,254,62,226,113,0,1,0,6,254,255,3,19,2,20,0,9,0,0,1,34,39,36,17,51,16,5,22,51, + 3,19,195,195,254,121,117,1,77,165,166,254,255,113,226,1,194,254,129,192,96,0,0,0,0,1,0,112,2,20,6,139,5,41,0,17,0,0,19,16, + 37,54,51,50,23,4,17,35,16,37,38,35,34,7,4,17,112,1,135,195,195,196,195,1,135,117,254,179,165,167,166,165,254,179,2,20,1,194,226,113, + 113,226,254,62,1,127,192,96,96,192,254,129,0,1,0,112,254,255,6,139,2,20,0,18,0,0,19,48,51,16,5,22,51,50,55,36,17,51,16,5, + 6,35,34,39,36,112,117,1,77,165,166,167,165,1,77,117,254,121,195,196,195,195,254,121,2,20,254,129,192,96,96,192,1,127,254,62,226,113,113,226, + 0,1,0,6,255,4,6,33,5,36,0,2,0,0,23,1,17,6,6,27,252,6,32,249,224,0,0,0,0,1,0,6,255,4,6,33,5,36,0,2, + 0,0,23,17,1,6,6,27,252,6,32,249,224,0,0,0,0,1,0,6,255,4,6,33,5,36,0,2,0,0,23,17,33,6,6,27,252,6,32,0, + 0,1,0,6,255,4,6,33,5,36,0,2,0,0,19,33,17,6,6,27,5,36,249,224,0,2,1,51,1,209,3,133,4,33,0,10,0,21,0,0, + 1,20,22,50,54,53,52,38,35,34,6,7,52,54,51,50,22,21,20,6,34,38,1,110,138,200,138,137,99,101,139,59,173,126,124,171,172,250,172,2, + 250,100,138,138,100,99,137,137,99,124,171,171,124,125,172,172,0,2,0,186,255,4,6,213,5,36,0,3,0,7,0,0,23,17,33,17,37,33,17,33, + 186,6,27,252,242,2,156,253,100,252,6,32,249,224,114,5,60,0,0,0,0,2,0,186,255,4,6,213,5,36,0,3,0,7,0,0,23,17,33,17, + 37,33,17,33,186,6,27,250,87,2,155,253,101,252,6,32,249,224,114,5,60,0,0,0,0,2,0,186,255,4,6,213,5,36,0,3,0,6,0,0, + 23,17,33,17,37,33,17,186,6,27,250,87,5,55,252,6,32,249,224,114,5,60,0,0,0,2,0,186,255,4,6,213,5,36,0,3,0,6,0,0, + 23,17,33,17,37,1,33,186,6,27,250,87,5,55,250,201,252,6,32,249,224,114,5,60,0,3,0,186,255,4,6,213,5,36,0,3,0,7,0,11, + 0,0,23,17,33,17,37,33,17,33,1,33,17,33,186,6,27,253,43,2,99,253,157,253,44,2,98,253,158,252,6,32,249,224,114,5,60,250,196,5, + 60,0,0,0,0,3,0,6,255,4,6,33,5,36,0,7,0,10,0,13,0,0,0,52,54,50,22,20,6,34,1,33,9,3,2,127,87,124,86,86, + 125,253,220,4,197,253,157,252,243,3,13,3,14,1,44,124,86,86,124,86,254,160,4,202,250,196,6,32,249,224,0,0,0,2,0,6,255,4,6,33, + 5,36,0,2,0,5,0,0,5,33,9,3,3,19,2,99,253,157,252,243,3,13,3,14,138,4,202,250,196,6,32,249,224,0,0,0,0,2,0,6, + 255,4,6,33,5,36,0,2,0,5,0,0,23,33,17,9,2,177,2,98,252,243,3,13,3,14,138,4,202,250,196,6,32,249,224,0,0,2,0,112, + 254,0,8,132,6,40,0,11,0,23,0,0,18,16,1,22,32,55,0,16,1,38,32,7,0,16,1,36,32,5,0,16,1,4,32,37,241,1,197,226, + 1,196,226,1,197,254,59,226,254,60,226,253,186,2,5,1,3,2,4,1,3,2,5,253,251,254,253,253,252,254,253,4,30,251,236,254,251,131,131,1, + 5,4,20,1,5,131,131,250,157,4,168,1,42,150,150,254,214,251,88,254,214,150,150,0,0,3,0,186,255,4,6,213,5,36,0,5,0,9,0,13, + 0,0,5,33,17,33,17,33,3,17,33,17,1,33,17,33,1,44,5,55,253,157,253,44,114,6,27,250,87,2,98,253,158,138,5,60,253,41,253,41, + 6,32,249,224,3,73,2,101,0,3,0,186,255,4,6,213,5,36,0,5,0,9,0,13,0,0,1,33,17,33,17,33,3,17,33,17,37,33,17,33, + 1,44,2,212,2,99,250,201,114,6,27,250,87,2,98,253,158,2,77,253,41,5,60,250,82,6,32,249,224,114,2,101,0,3,0,186,255,4,6,213, + 5,36,0,5,0,9,0,13,0,0,5,33,17,33,17,33,3,17,33,17,37,33,17,33,1,44,2,98,2,213,250,201,114,6,27,253,43,2,99,253, + 157,138,2,215,2,101,250,82,6,32,249,224,114,2,101,0,0,3,0,186,255,4,6,213,5,36,0,5,0,9,0,13,0,0,5,33,17,33,17,33, + 3,17,33,17,1,33,17,33,1,44,5,55,253,43,253,158,114,6,27,253,43,2,99,253,157,138,2,101,2,215,250,82,6,32,249,224,3,73,2,101, + 0,3,0,112,255,4,6,139,5,32,0,13,0,19,0,32,0,0,18,16,18,36,51,50,4,18,16,2,4,35,34,36,1,6,7,4,3,33,5,18, + 5,22,51,50,55,36,16,37,38,39,17,112,209,1,107,210,209,1,107,209,209,254,149,209,210,254,149,2,3,137,137,254,204,23,2,93,253,163,23,1, + 52,166,165,166,166,1,77,254,179,137,138,1,65,1,162,1,107,210,210,254,149,254,94,254,149,210,210,4,218,14,79,178,254,172,114,254,172,178,96,96, + 193,2,252,193,79,14,253,43,0,3,0,112,255,4,6,139,5,32,0,13,0,26,0,32,0,0,18,16,18,36,51,50,4,18,16,2,4,35,34,36, + 5,54,55,36,16,37,38,35,34,7,4,3,33,5,18,5,22,23,17,112,209,1,107,210,209,1,107,209,209,254,149,209,210,254,149,2,117,138,137,1, + 77,254,179,166,166,165,166,254,204,23,2,207,253,49,23,1,52,137,137,1,65,1,162,1,107,210,210,254,149,254,94,254,149,210,210,94,14,79,193,2, + 252,193,96,96,178,254,172,114,254,172,178,79,14,2,99,0,0,3,0,112,255,4,6,139,5,32,0,13,0,26,0,32,0,0,18,16,18,36,51,50, + 4,18,16,2,4,35,34,36,2,16,5,22,23,17,33,2,37,38,35,34,7,1,54,55,36,19,33,112,209,1,107,210,209,1,107,209,209,254,149,209, + 210,254,149,92,1,77,137,137,2,208,23,254,204,166,166,165,166,1,132,138,137,1,52,23,253,162,1,65,1,162,1,107,210,210,254,149,254,94,254,149, + 210,210,3,188,253,4,193,79,14,2,213,1,84,178,96,96,251,37,14,79,178,1,84,0,0,3,0,112,255,4,6,139,5,32,0,13,0,26,0,32, + 0,0,18,16,18,36,51,50,4,18,16,2,4,35,34,36,2,16,5,22,51,50,55,36,19,33,17,6,7,1,2,37,38,39,17,112,209,1,107,210, + 209,1,107,209,209,254,149,209,210,254,149,92,1,77,166,165,166,166,1,52,23,253,48,137,137,3,226,23,254,204,137,138,1,65,1,162,1,107,210,210, + 254,149,254,94,254,149,210,210,3,188,253,4,193,96,96,178,1,84,2,213,14,79,253,250,1,84,178,79,14,253,157,0,0,2,0,6,255,4,6,33, + 5,36,0,2,0,5,0,0,55,1,33,3,17,33,120,4,140,251,116,114,6,27,32,4,146,250,82,6,32,0,0,0,0,2,0,6,255,4,6,33, + 5,36,0,2,0,5,0,0,9,1,17,37,33,17,1,35,4,140,250,87,6,27,4,178,251,110,4,146,114,249,224,0,0,2,0,6,255,4,6,33, + 5,36,0,2,0,5,0,0,23,33,1,3,17,1,120,4,140,251,116,114,6,27,138,4,146,250,252,6,32,249,224,0,0,2,0,186,255,121,5,234, + 4,175,0,3,0,7,0,0,5,33,17,33,3,17,33,17,1,44,4,76,251,180,114,5,48,21,4,82,251,60,5,54,250,202,0,0,0,1,0,186, + 255,121,5,234,4,175,0,3,0,0,23,17,33,17,186,5,48,135,5,54,250,202,0,0,0,2,0,186,255,221,5,34,4,75,0,3,0,7,0,0, + 37,33,17,33,3,17,33,17,1,44,3,132,252,124,114,4,104,79,3,138,252,4,4,110,251,146,0,0,0,1,0,186,255,221,5,34,4,75,0,3, + 0,0,23,17,33,17,186,4,104,35,4,110,251,146,0,0,0,2,0,6,255,4,6,33,5,36,0,2,0,5,0,0,5,33,17,9,1,17,1,35, + 4,140,250,87,6,27,138,4,146,250,252,6,32,249,224,0,0,9,0,171,0,0,6,128,5,213,0,7,0,12,0,19,0,34,0,42,0,50,0,58, + 0,65,0,73,0,0,1,51,23,17,7,35,39,17,5,23,21,7,39,37,23,7,35,38,39,53,5,50,31,1,20,7,6,35,34,39,38,53,52,55, + 54,1,33,23,21,7,33,39,53,37,33,23,21,7,33,39,53,3,51,22,23,21,7,39,53,37,51,23,21,7,39,53,37,51,23,17,7,35,39,17, + 3,115,77,6,6,77,6,2,55,58,248,61,252,253,252,61,3,200,45,2,48,208,89,13,190,71,46,175,98,35,183,67,253,75,1,83,6,6,254,173, + 6,4,117,1,89,7,7,254,167,6,71,3,134,114,61,248,253,181,3,59,246,62,2,27,77,6,6,77,6,5,213,6,254,162,6,6,1,94,155,63, + 3,254,63,238,254,64,199,55,4,181,225,96,189,100,23,167,63,92,181,103,27,254,237,6,79,6,6,79,6,6,79,6,6,79,254,232,130,121,3,62, + 253,4,42,60,3,254,63,4,118,6,254,162,6,6,1,94,0,1,0,104,255,251,7,151,2,225,0,34,0,0,1,51,50,31,1,54,51,22,21,20, + 7,22,29,1,6,35,33,53,50,55,54,59,1,39,52,63,1,23,39,52,63,1,50,23,54,4,245,22,217,117,21,39,54,135,34,103,18,80,249,51, + 57,134,46,52,33,12,160,39,42,5,204,67,48,46,120,2,225,232,86,35,27,109,49,52,23,72,26,101,9,174,39,49,108,49,4,4,12,147,90,8, + 43,100,0,0,0,1,0,100,0,0,6,200,5,213,0,63,0,0,1,51,23,21,51,32,1,22,29,1,35,38,39,38,43,1,34,7,21,20,7,39, + 38,35,17,20,15,1,34,47,1,53,55,51,23,21,22,59,1,50,63,1,17,34,7,6,35,39,53,55,35,38,39,35,34,15,1,35,53,54,55,54, + 33,53,3,139,58,6,2,1,184,1,24,43,2,22,19,35,57,44,150,112,8,33,151,136,106,30,91,37,2,6,43,5,11,62,10,55,20,6,211,86, + 17,14,7,7,4,67,197,67,99,34,20,3,58,192,239,1,56,5,213,6,125,254,26,86,13,8,15,46,24,101,51,15,2,66,61,253,83,101,24,2, + 96,28,26,6,6,12,101,57,42,2,164,61,57,6,12,51,64,27,61,18,2,144,218,223,125,0,0,0,0,26,0,170,255,255,6,130,7,107,0,13, + 0,21,0,29,0,37,0,67,0,96,0,140,0,183,0,227,1,14,1,58,1,100,1,144,1,187,1,230,2,15,2,59,2,101,2,109,2,117,2,125, + 2,169,2,211,2,253,3,39,3,83,0,0,1,22,51,50,55,51,6,7,38,39,51,22,51,50,55,38,39,54,55,22,23,6,5,38,39,54,55,22, + 23,6,3,38,39,54,55,22,23,6,39,6,21,20,22,51,50,54,53,52,39,38,39,50,51,50,55,54,53,52,38,35,34,6,21,20,23,22,51,6, + 19,54,55,50,31,1,22,20,7,6,7,22,23,22,21,20,4,32,36,53,52,55,54,55,38,39,38,52,55,1,23,39,38,51,50,15,1,55,54,51, + 50,21,20,15,1,23,22,21,20,35,34,47,1,23,22,35,34,53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50,1,23,39,38,50,15,1, + 55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23,22,35,34,53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50,5,23,39,38, + 51,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23,22,35,34,53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50, + 19,23,39,38,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23,22,35,34,53,55,7,6,35,34,53,52,63,1,39,38,53, + 52,51,50,1,23,39,38,51,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23,20,35,34,53,55,7,6,35,34,53,52,63, + 1,39,38,53,52,51,50,1,23,39,38,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23,20,34,53,55,7,6,35,34,53, + 52,63,1,39,38,53,52,51,50,5,23,39,52,51,50,21,7,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23,22,35,34,53,55,7, + 6,35,34,53,52,63,1,39,38,53,52,51,50,3,23,39,38,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23,22,35,34, + 53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50,5,23,39,38,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23, + 22,35,34,53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50,31,1,39,38,50,15,1,55,54,51,50,21,20,15,1,23,22,20,35,34,47, + 1,23,20,35,34,53,55,7,6,35,34,52,63,1,39,38,53,52,51,50,55,23,39,52,51,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20, + 35,34,47,1,23,22,35,34,53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50,55,23,39,38,50,15,1,55,54,51,50,21,20,15,1,23, + 22,21,20,35,34,47,1,23,22,34,53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50,19,38,39,54,55,22,23,6,5,38,39,54,55,22, + 23,6,23,38,39,54,55,22,23,6,1,23,39,38,51,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23,22,35,34,53,55, + 7,6,35,34,53,52,63,1,39,38,53,52,51,50,1,23,39,38,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23,20,34, + 53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50,5,23,39,38,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47,1,23, + 22,34,53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50,1,23,39,38,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20,35,34,47, + 1,23,22,34,53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50,1,23,39,38,51,50,15,1,55,54,51,50,21,20,15,1,23,22,21,20, + 35,34,47,1,23,22,35,34,53,55,7,6,35,34,53,52,63,1,39,38,53,52,51,50,3,252,8,8,66,25,25,5,128,126,9,24,37,60,7,122, + 42,1,3,43,39,3,3,254,235,41,3,3,43,40,3,3,64,38,2,3,39,36,2,2,202,124,247,175,174,248,124,101,139,2,3,60,45,65,125,93, + 92,138,66,45,55,144,21,26,147,132,49,2,83,76,20,24,111,87,142,254,228,254,106,254,227,143,92,118,21,19,76,76,253,169,41,6,1,15,17,2, + 6,40,4,4,16,8,48,47,9,16,4,4,40,6,1,16,14,5,40,3,5,14,9,46,49,7,15,5,1,40,37,6,2,30,2,6,37,4,4,14, + 7,44,42,7,12,5,3,35,4,1,14,13,5,36,3,4,13,8,41,42,8,14,4,3,102,36,5,2,14,16,2,6,37,3,5,13,7,43,41,8, + 12,6,2,36,5,1,15,12,4,35,4,3,14,8,42,43,8,15,3,102,37,6,2,30,2,6,37,4,4,14,7,44,42,7,12,6,2,36,5,1, + 14,13,5,36,3,4,13,8,41,42,8,14,4,251,203,19,2,1,7,8,1,3,20,1,2,8,3,24,23,4,8,2,1,19,2,7,6,2,19,2, + 3,6,4,23,24,3,8,1,3,23,21,3,1,18,1,4,22,2,2,9,4,26,24,5,8,2,2,22,4,16,3,21,2,2,8,4,25,26,4,9, + 2,252,187,19,4,7,8,4,19,3,2,8,5,22,22,4,7,2,3,19,3,1,8,7,4,19,3,2,7,4,22,22,5,8,2,92,20,4,1,16, + 1,3,19,3,2,7,4,23,22,5,7,2,3,19,3,1,8,7,3,19,2,2,8,5,22,22,5,8,2,1,28,19,2,1,16,1,3,19,1,3, + 8,4,23,22,5,8,3,1,19,3,1,8,7,2,19,2,1,8,5,22,23,4,8,1,111,19,2,2,16,1,3,20,1,2,8,4,23,23,4,8, + 2,1,19,2,7,6,2,19,2,3,6,4,22,23,3,6,3,247,21,3,7,9,1,3,22,1,4,8,5,26,25,6,8,4,2,20,2,1,9,7, + 3,21,3,2,8,5,24,25,4,8,2,91,22,3,1,18,1,4,22,2,2,8,3,26,24,5,8,2,2,22,3,1,16,2,21,1,3,8,5,25, + 26,4,9,2,174,37,2,2,41,35,3,3,254,183,38,2,3,39,37,1,1,252,38,2,2,41,35,3,3,1,96,35,5,1,14,15,1,6,36,3, + 5,13,7,42,41,8,13,5,3,36,4,2,14,13,5,35,4,4,14,8,43,44,7,14,4,252,85,21,3,1,18,1,4,21,3,2,9,5,25,24, + 5,8,2,3,21,4,16,3,21,2,2,8,4,25,26,4,9,2,254,81,23,4,1,18,1,3,21,2,2,8,3,26,25,4,8,2,2,21,2,1, + 16,4,23,1,2,9,6,24,26,4,9,2,4,48,23,4,1,18,1,3,21,2,2,8,3,26,25,4,8,2,2,21,2,1,16,3,22,1,3,8, + 6,24,25,5,9,2,252,69,37,5,2,14,16,3,5,37,3,5,13,7,43,41,8,12,6,2,36,4,2,15,12,4,36,3,3,14,8,42,43,8, + 15,3,3,137,1,38,69,5,7,67,38,86,2,42,44,3,3,41,45,4,2,41,45,3,3,42,44,254,18,2,37,38,2,2,37,38,158,102,147,145, + 208,208,145,147,102,85,32,51,72,104,102,101,101,102,104,72,50,30,1,217,112,24,117,19,94,232,81,24,16,28,70,115,165,163,230,230,163,165,115,75, + 26,15,22,81,232,71,253,104,33,57,15,15,57,33,4,17,11,3,21,22,3,12,15,2,33,55,16,16,55,33,2,15,12,3,22,21,3,11,17,1, + 209,31,52,13,13,52,31,3,16,7,5,20,19,3,9,14,2,30,50,15,15,50,30,2,14,9,3,19,20,5,7,16,75,31,52,14,14,52,31,3, + 16,7,3,21,19,4,9,14,2,30,50,14,14,50,30,2,14,9,4,19,21,3,7,16,1,27,30,50,14,14,50,30,2,14,9,4,19,20,3,9, + 15,3,29,49,14,14,49,29,3,15,9,3,20,19,4,9,14,2,154,16,28,6,6,28,16,1,7,6,2,9,11,2,4,8,2,14,25,7,7,25, + 14,2,8,4,2,11,9,2,6,7,254,227,17,29,10,10,29,17,3,10,5,1,13,10,3,6,7,1,17,30,7,7,30,17,1,7,6,3,10,13, + 1,5,10,168,16,28,7,7,28,16,2,7,6,2,9,11,2,5,8,2,15,26,8,8,26,15,2,8,5,2,11,9,2,6,7,1,24,16,28,6, + 6,28,16,2,8,4,3,10,10,2,5,7,1,15,25,8,8,25,15,1,7,5,2,10,10,3,4,8,24,15,27,7,7,27,15,2,8,5,1,10, + 11,1,6,7,1,16,27,8,8,27,16,1,7,6,1,11,10,1,6,7,161,15,27,7,7,27,15,1,7,4,1,12,10,1,12,1,15,27,7,7, + 27,15,1,12,1,10,12,1,4,7,55,18,31,7,7,31,18,1,8,5,2,12,12,2,5,8,1,18,29,10,10,29,18,1,8,5,2,12,12,2, + 5,8,217,18,31,7,7,31,18,1,8,5,2,11,12,2,5,10,3,16,28,9,9,28,16,3,10,5,2,12,11,2,6,7,250,224,2,37,38,2, + 2,37,38,226,2,37,39,2,3,37,38,2,2,37,39,2,3,37,38,1,129,29,50,14,14,50,29,3,15,9,3,19,20,3,10,14,4,27,47,15, + 15,47,27,4,14,10,3,20,19,3,9,15,2,103,18,30,8,8,30,18,1,10,4,2,11,12,2,6,8,2,17,29,9,9,29,17,2,8,6,2, + 12,11,2,4,10,251,18,31,7,7,31,18,1,8,5,3,11,12,2,5,9,1,18,28,10,10,28,18,1,9,5,2,12,11,3,5,8,1,130,17, + 30,8,8,30,17,2,8,7,1,11,12,2,5,9,1,17,28,9,9,28,17,1,9,5,2,12,11,1,7,8,253,127,31,52,14,14,52,31,3,16, + 7,4,20,19,3,10,14,3,29,50,14,14,50,29,3,14,10,3,19,20,4,7,16,0,0,15,0,131,0,0,6,169,7,11,0,23,0,45,0,62, + 0,79,0,96,0,113,0,130,0,147,0,164,0,181,0,198,0,215,0,232,0,249,1,10,0,0,1,22,21,20,7,6,15,1,6,43,1,38,39,38, + 53,52,63,2,54,51,50,51,22,5,6,21,20,23,22,31,1,22,51,50,63,1,54,53,52,47,1,38,35,34,7,19,50,23,22,29,1,20,7,6, + 35,34,47,1,53,52,55,54,19,50,23,22,29,1,20,7,6,35,34,47,1,53,52,55,54,19,50,23,22,29,1,20,7,6,35,34,47,1,53,52, + 55,54,19,50,23,22,29,1,20,7,6,35,34,47,1,53,52,55,54,19,50,23,22,29,1,20,7,6,35,34,47,1,53,52,55,54,3,50,23,22, + 29,1,20,7,6,35,34,47,1,53,52,55,54,1,50,23,22,29,1,20,7,6,35,34,47,1,53,52,55,54,55,50,23,22,29,1,20,7,6,35, + 34,47,1,53,52,55,54,19,50,23,22,29,1,20,7,6,35,34,47,1,53,52,55,54,1,50,23,22,29,1,20,7,6,35,34,47,1,53,52,55, + 54,37,50,23,22,29,1,20,7,6,35,34,47,1,53,52,55,54,37,50,23,22,29,1,20,7,6,35,34,47,1,53,52,55,54,37,50,23,22,29, + 1,20,7,6,35,34,47,1,53,52,55,54,2,68,46,26,20,50,21,96,123,22,52,38,47,60,41,12,101,136,4,3,62,254,250,79,9,5,14,14, + 30,44,52,72,51,82,4,32,32,48,55,75,247,29,15,7,26,11,13,36,13,1,26,13,168,29,15,7,26,11,13,36,13,1,26,13,138,28,15,7, + 26,10,14,35,14,1,26,13,155,28,15,7,26,10,14,35,14,1,26,13,3,28,15,7,26,10,14,35,14,1,26,13,189,29,15,7,26,11,13,36, + 13,1,26,13,1,138,28,15,7,26,10,14,35,14,1,26,13,194,29,15,7,26,11,13,36,13,1,26,13,194,29,15,7,26,11,13,36,13,1,26, + 13,253,85,29,15,7,26,11,13,36,13,1,26,13,1,18,28,15,7,26,10,14,35,14,1,26,13,1,34,29,15,7,26,11,13,36,13,1,26,13, + 1,3,28,15,7,26,10,14,35,14,1,26,13,2,32,55,81,61,75,71,60,26,115,7,45,56,80,90,121,57,14,122,12,128,95,101,34,34,22,16, + 18,35,47,50,100,116,26,27,48,38,50,1,106,31,12,15,6,31,18,7,44,14,3,31,20,8,1,58,30,12,15,7,30,19,8,46,12,5,30,20, + 8,1,52,31,12,14,7,30,20,7,46,12,5,30,20,8,1,61,31,12,15,6,31,18,7,44,13,4,31,20,8,253,2,31,12,15,6,31,18,7, + 44,14,3,32,19,8,254,252,31,12,14,6,32,18,7,45,13,4,31,19,8,2,7,30,12,15,7,30,19,7,45,12,5,30,21,7,250,30,12,15, + 7,30,19,7,45,12,5,30,21,7,1,4,32,12,14,6,31,18,8,45,13,4,31,19,9,251,12,30,12,15,7,30,19,8,46,12,5,30,20,8, + 211,30,12,14,7,30,20,7,46,12,5,30,20,7,231,31,12,14,6,32,18,7,44,14,3,32,19,8,202,31,12,14,6,32,18,7,45,13,3,32, + 19,8,0,0,0,1,0,133,255,247,6,167,5,201,0,9,0,0,19,33,27,1,33,1,19,9,1,19,133,2,87,186,187,2,86,254,28,186,254,25, + 254,26,185,3,144,2,57,253,199,254,159,253,200,1,96,254,160,2,56,0,0,2,0,133,255,247,6,167,5,201,0,9,0,19,0,0,19,33,27,1, + 33,1,19,9,1,19,55,3,9,1,3,1,33,11,1,33,133,2,87,186,187,2,86,254,28,186,254,25,254,26,185,68,140,1,117,1,128,152,1,143, + 254,26,145,142,254,24,3,144,2,57,253,199,254,159,253,200,1,96,254,160,2,56,21,254,78,1,12,254,230,1,194,1,24,1,183,254,73,0,0,0, + 0,1,0,170,0,4,3,235,5,213,0,17,0,0,1,22,23,20,7,9,1,55,19,37,55,1,38,53,52,55,1,54,3,176,57,2,9,253,125,1, + 238,86,38,254,55,224,253,221,19,65,2,147,11,5,213,2,54,36,12,253,133,253,244,230,254,56,39,94,2,52,23,23,27,63,2,134,10,0,0,0, + 0,1,0,170,0,0,6,129,5,217,0,25,0,0,19,33,50,21,20,7,9,1,55,19,37,55,1,38,53,52,55,1,33,17,6,7,38,39,17,54, + 237,5,73,64,27,253,193,1,231,89,37,254,49,231,253,239,15,52,1,229,251,168,1,72,70,1,1,5,217,83,34,27,253,197,254,27,213,254,61,34, + 108,2,22,16,45,28,50,1,223,250,252,68,1,1,67,5,91,57,0,0,0,3,0,170,0,0,6,130,5,216,0,13,0,25,0,38,0,0,1,16, + 0,33,32,0,17,52,18,36,51,50,4,18,5,16,0,32,0,17,52,2,36,32,4,2,5,20,6,35,34,38,53,52,62,1,50,30,1,6,130,254, + 74,254,201,254,203,254,74,201,1,104,186,189,1,104,200,250,113,1,138,2,48,1,138,180,254,188,254,172,254,188,180,3,94,109,78,77,110,50,90,94, + 90,50,2,236,254,201,254,75,1,181,1,55,194,1,105,193,193,254,153,196,254,232,254,119,1,137,1,24,177,1,66,174,174,254,190,177,78,109,109,78, + 49,90,48,48,90,0,0,0,0,3,0,125,0,0,6,159,5,209,0,10,0,22,0,67,0,0,0,34,6,21,20,22,51,50,54,53,52,37,34,6, + 21,20,22,51,50,54,53,52,38,37,22,23,22,21,20,6,35,34,38,53,52,55,54,55,54,53,52,36,32,4,21,20,23,22,23,22,16,6,35,34, + 38,16,55,54,55,38,53,52,0,33,32,0,21,20,5,177,148,103,103,74,73,104,251,156,73,104,104,73,74,103,103,4,23,25,22,91,182,130,129,182, + 90,81,111,121,254,177,254,32,254,177,121,125,87,90,182,130,128,183,91,18,19,122,1,192,1,65,1,68,1,192,1,233,103,74,73,103,103,73,74,103, + 103,74,73,104,104,73,74,103,85,17,22,92,130,129,183,183,129,130,92,81,9,115,153,180,253,253,180,153,114,4,87,92,254,252,183,183,1,4,92,17, + 15,142,182,248,1,94,254,162,248,177,0,0,0,3,0,125,0,0,6,159,5,201,0,10,0,22,0,65,0,0,1,52,38,35,34,6,21,20,22,50, + 54,37,52,38,35,34,6,21,20,22,51,50,54,1,20,0,33,32,0,53,52,55,38,39,38,16,54,51,50,22,16,7,6,7,6,21,20,4,32,36, + 53,52,39,38,39,38,16,54,51,50,22,16,7,6,7,22,6,24,104,73,74,103,103,148,103,252,77,103,74,73,104,104,73,74,103,4,35,254,64,254, + 188,254,191,254,64,122,19,18,91,183,128,130,182,90,87,125,121,1,79,1,224,1,79,121,111,81,90,182,129,130,182,91,22,25,115,4,145,73,104,104, + 73,74,103,103,74,74,103,103,74,73,103,103,254,12,247,254,163,1,93,247,180,141,15,18,91,1,2,182,182,254,254,91,88,3,114,151,180,251,251,180, + 152,113,9,81,92,1,2,182,182,254,254,92,22,17,139,0,0,2,0,125,255,253,4,226,5,198,0,11,0,27,0,0,1,34,6,21,20,22,51,50, + 54,53,52,38,55,22,23,22,16,0,35,34,0,16,0,51,50,23,1,23,2,134,143,201,201,143,142,201,199,190,19,18,152,254,206,217,215,254,206,1, + 47,218,96,84,1,14,154,3,95,200,144,142,201,201,142,144,200,59,16,19,153,254,80,254,207,1,49,1,176,1,50,29,1,211,89,0,0,3,0,125, + 0,1,7,158,5,201,0,8,0,17,0,49,0,0,1,34,6,20,22,50,54,52,38,0,34,6,20,22,51,50,54,52,1,22,21,20,0,35,34,0, + 53,52,0,51,50,23,22,23,55,38,53,52,0,51,50,0,21,20,0,35,34,39,38,39,2,51,120,169,169,240,169,168,3,179,242,168,168,121,120,169, + 252,190,38,254,255,183,181,254,255,0,255,183,185,128,2,2,220,28,0,255,183,184,1,0,254,255,183,181,129,11,11,2,218,169,240,169,169,240,169,2, + 90,169,240,169,169,240,253,228,84,100,181,254,255,1,1,181,183,1,1,128,3,2,137,73,85,183,1,1,254,255,183,181,254,255,129,11,12,0,0,0, + 0,14,0,140,0,0,9,107,5,213,0,35,0,53,0,65,0,77,0,89,0,101,0,114,0,128,0,141,0,154,0,167,0,181,0,197,0,217,0,0, + 1,51,4,5,4,21,6,35,34,39,37,38,53,52,55,54,53,52,39,33,6,21,20,23,22,21,20,7,5,6,35,34,39,52,37,36,1,53,51,21, + 20,23,22,25,1,33,17,16,55,54,61,1,51,21,3,20,22,51,50,54,53,52,38,35,34,6,5,20,6,35,34,38,53,52,54,51,50,22,39,20, + 6,35,34,38,53,52,54,51,50,22,17,20,6,35,34,38,53,52,54,51,50,22,2,22,6,7,6,38,39,38,54,55,54,51,50,1,22,6,7,6, + 35,34,38,39,38,54,55,54,22,1,30,1,14,1,39,46,1,53,52,55,62,1,4,30,1,21,20,7,14,1,39,46,1,55,54,36,54,22,23,22, + 6,7,6,38,39,38,53,52,37,54,22,23,22,21,20,6,7,6,38,39,38,54,1,62,1,23,30,1,7,14,1,35,34,39,46,1,53,52,1,62, + 1,51,50,23,30,1,21,20,7,14,1,35,34,39,46,1,53,52,4,247,9,2,91,1,1,1,15,36,103,6,7,254,105,60,12,68,34,251,156,34, + 68,12,61,254,105,7,6,102,37,1,16,1,0,3,76,144,241,231,249,87,232,240,145,171,236,165,168,234,233,169,167,234,2,114,131,94,93,131,131,93, + 94,131,159,32,24,23,33,33,23,24,32,32,24,23,33,33,23,24,32,209,26,6,19,19,46,14,14,8,19,15,17,5,1,155,15,7,20,15,17,5, + 27,15,13,7,19,19,46,254,12,24,20,14,42,22,22,18,3,8,41,2,88,44,17,3,8,41,22,22,21,7,8,253,175,44,42,7,7,20,22,24, + 41,8,3,2,127,22,41,8,3,17,22,22,43,6,7,21,254,21,14,46,19,19,8,15,13,28,5,17,15,19,5,1,125,15,27,5,17,15,20,4, + 12,13,27,5,18,15,19,4,5,213,17,155,164,170,153,1,140,18,43,19,25,71,32,23,3,3,23,32,71,24,20,43,18,140,1,153,170,164,153,254, + 118,75,152,75,57,95,254,226,254,22,1,234,1,30,95,57,75,152,75,253,221,167,234,234,167,166,236,236,165,93,132,132,93,95,131,131,222,22,34,34, + 22,24,34,34,253,115,24,33,33,24,23,34,34,2,87,38,46,13,15,7,19,20,45,15,10,253,236,19,46,15,10,4,20,19,45,14,13,6,1,97, + 8,41,44,21,6,7,34,13,9,9,22,21,195,14,34,13,8,9,22,21,8,7,41,23,22,6,14,20,22,24,41,8,6,21,22,9,8,13,236,7, + 21,22,9,8,13,33,8,7,21,22,22,41,254,148,18,7,13,14,47,17,20,4,10,15,28,5,17,2,12,19,4,10,15,27,4,18,16,19,4,12, + 13,28,5,17,0,16,0,145,0,0,9,112,5,213,0,17,0,29,0,37,0,45,0,53,0,65,0,77,0,89,0,100,0,112,0,124,0,136,0,148, + 0,166,0,202,0,240,0,0,1,53,35,21,6,7,6,21,17,33,17,52,39,38,39,53,35,21,5,50,22,21,20,6,35,34,38,53,52,54,4,34, + 6,20,22,50,54,52,2,34,6,20,22,50,54,52,2,34,6,20,22,50,54,52,1,14,1,23,30,1,55,62,1,39,46,1,1,14,1,23,30,1, + 55,62,1,39,46,1,1,6,22,23,22,54,55,54,38,39,38,6,5,6,22,23,22,62,1,38,39,38,6,5,30,1,55,62,1,39,46,1,7,14, + 1,37,30,1,55,62,1,39,46,1,7,14,1,1,22,54,55,54,38,39,38,6,7,6,22,1,22,54,55,54,38,39,38,6,7,6,22,19,53,51, + 21,20,23,22,25,1,33,17,16,55,54,61,1,51,21,37,6,21,20,23,22,21,20,7,5,35,34,39,54,55,54,37,22,50,55,4,23,22,23,6, + 43,1,37,38,53,52,55,54,53,52,39,55,22,21,20,7,6,21,20,23,5,22,51,50,55,38,39,36,37,39,21,35,4,5,6,7,22,51,50,55, + 37,54,53,52,39,38,53,52,55,3,236,49,15,203,195,5,157,196,202,8,56,254,250,166,229,230,165,163,231,230,1,0,184,129,129,184,129,188,46,32, + 32,46,32,32,46,32,32,46,32,254,242,18,8,13,15,45,19,18,6,13,13,45,1,89,19,7,13,14,45,19,19,7,14,13,45,253,252,7,22,21, + 22,41,7,7,20,23,22,41,2,71,7,20,22,21,41,14,20,22,21,41,253,171,7,41,23,22,20,7,7,41,22,21,22,2,85,6,42,21,22,20, + 7,7,41,21,22,20,254,62,19,45,13,15,8,18,19,45,15,13,8,1,126,19,45,13,14,7,19,19,45,14,13,7,86,134,225,216,249,201,216,225, + 134,254,169,26,75,28,59,254,138,10,121,65,13,248,248,2,67,24,48,24,2,66,248,248,13,65,120,10,254,137,59,28,75,25,25,39,54,31,31,1, + 70,15,15,74,62,10,236,254,199,254,36,48,54,254,35,254,199,235,10,62,74,15,15,1,70,31,31,54,38,3,194,64,142,64,49,65,241,254,101,1, + 155,241,65,49,64,142,64,72,231,163,164,230,230,164,163,231,173,129,184,128,128,184,1,20,32,46,32,32,46,253,181,32,46,32,32,46,2,69,13,45, + 19,18,8,13,15,45,19,17,7,253,255,14,45,19,19,7,15,13,44,19,19,7,1,49,22,41,7,7,20,23,22,41,7,7,22,213,21,41,7,7, + 21,44,40,8,7,20,57,23,20,7,7,41,21,22,22,7,8,40,169,21,22,7,7,41,22,21,22,7,7,41,254,117,15,7,19,19,45,13,14,7, + 19,19,44,1,230,13,8,18,19,45,13,15,8,18,19,45,1,32,71,156,55,55,87,254,245,254,54,1,202,1,11,87,55,55,156,71,229,6,18,32, + 68,38,26,38,11,165,203,199,101,139,17,1,1,17,139,101,199,203,165,11,38,26,38,68,32,18,6,28,18,34,40,61,22,21,20,19,136,6,151,157, + 112,129,25,1,1,25,129,112,157,151,6,136,19,20,21,22,61,40,34,18,0,2,0,184,0,0,6,117,5,213,0,7,0,11,0,0,19,33,23,17, + 7,33,39,17,23,17,33,17,190,5,176,7,7,250,80,6,110,4,224,5,213,7,250,56,6,6,5,200,104,251,8,4,248,0,0,0,0,3,0,183, + 0,0,6,118,5,213,0,7,0,11,0,34,0,0,19,33,23,17,7,33,39,17,23,17,33,17,7,21,6,7,0,3,6,35,6,35,2,43,1,53, + 55,50,23,51,54,55,54,55,54,189,5,179,6,6,250,77,6,111,4,224,135,76,41,254,185,62,6,16,117,13,101,205,23,162,151,73,6,51,63,98, + 155,97,5,213,6,250,56,7,7,5,200,104,251,8,4,248,158,6,65,58,254,70,254,189,59,47,1,2,7,73,131,166,116,179,187,120,0,3,0,183, + 0,0,6,118,5,213,0,7,0,11,0,26,0,0,19,33,23,17,7,33,39,17,23,17,33,17,5,9,1,23,9,1,21,7,1,35,1,35,39,9, + 1,189,5,179,6,6,250,77,6,111,4,224,251,247,1,155,1,151,95,254,104,1,152,91,254,101,4,254,105,4,91,1,151,254,105,5,213,6,250,56, + 7,7,5,200,104,251,8,4,248,134,254,105,1,151,91,254,101,254,102,3,91,1,151,254,108,91,1,154,1,155,0,0,0,1,0,154,0,160,3,167, + 5,64,0,20,0,0,19,51,1,54,1,50,55,51,23,9,1,21,7,1,35,1,35,39,1,0,53,241,5,1,41,11,1,26,4,6,4,85,254,210, + 1,46,87,254,212,2,254,210,3,87,1,49,254,207,5,64,254,11,8,1,222,15,85,254,4,254,7,3,83,1,247,254,11,86,1,249,1,245,7,0, + 0,8,0,100,0,0,6,245,7,118,0,8,0,17,0,26,0,35,0,44,0,53,0,62,0,126,0,0,1,51,6,43,1,38,61,1,52,1,51,6, + 43,1,38,61,1,52,37,51,6,43,1,38,61,1,52,23,51,6,43,1,38,61,1,52,1,51,6,43,1,38,61,1,52,5,51,6,43,1,38,61, + 1,52,23,51,6,43,1,38,61,1,52,37,51,23,21,51,32,1,22,29,1,35,38,39,38,43,1,34,7,21,20,7,39,38,35,17,20,15,1,34, + 47,1,53,55,51,23,21,22,59,1,50,63,1,17,34,7,6,35,39,53,55,35,38,39,35,34,15,1,35,53,54,55,54,33,53,1,214,3,30,92, + 6,58,2,86,2,29,92,7,57,2,30,3,30,92,6,58,247,4,30,92,6,58,2,30,3,29,93,6,58,1,38,2,28,93,7,57,91,3,30,92, + 6,58,253,171,58,6,2,1,184,1,24,43,2,22,19,35,57,44,150,112,8,33,151,136,106,30,91,37,2,6,43,5,11,62,10,55,20,6,211,86, + 17,14,7,7,4,67,197,67,99,34,20,3,58,192,239,1,56,6,1,207,10,35,2,56,1,100,207,8,35,3,55,227,207,8,36,3,54,185,207,8, + 36,2,56,1,59,206,7,36,3,55,105,207,7,36,3,55,235,207,9,35,2,57,154,5,112,254,80,76,12,7,13,41,22,90,46,13,2,59,54,253, + 159,90,21,2,86,24,23,6,6,10,90,51,37,2,89,54,51,5,11,46,56,25,55,16,2,128,194,198,112,0,0,0,0,9,0,152,0,0,6,147, + 5,217,0,11,0,17,0,28,0,51,0,68,0,77,0,121,0,127,0,143,0,0,1,20,21,20,23,33,54,55,52,35,33,6,19,22,23,33,54,63, + 1,6,7,54,55,54,53,52,53,38,35,39,6,7,51,50,21,20,7,6,7,6,7,51,50,55,54,55,54,55,54,53,52,35,1,51,20,6,7,20, + 22,23,35,38,39,38,39,52,53,52,54,1,22,51,50,55,54,55,33,22,5,54,55,50,23,21,20,5,7,23,20,7,33,38,61,1,55,53,36,47, + 1,53,54,51,22,23,38,17,52,51,33,22,21,51,50,21,20,7,6,7,6,43,1,39,1,22,23,33,54,55,1,6,7,6,7,35,62,1,53,52, + 38,53,51,30,1,21,1,35,15,4,129,11,3,30,251,160,28,63,5,16,3,244,13,9,73,9,58,87,48,29,1,32,57,2,1,54,59,69,44,81, + 32,50,7,58,38,19,108,54,29,24,120,253,48,9,98,1,136,4,8,19,109,33,10,111,254,219,184,189,174,177,34,92,252,62,37,3,69,254,102,18, + 6,254,153,126,2,16,253,241,17,4,254,101,50,3,4,18,85,214,201,54,4,103,33,54,143,86,35,112,53,67,7,17,252,43,6,10,4,67,11,4, + 254,152,6,19,63,11,6,3,80,57,5,10,64,2,180,6,7,55,72,52,88,22,4,254,205,26,18,22,22,199,109,134,1,77,55,82,6,5,17,86, + 28,32,47,130,77,40,1,61,72,58,13,31,44,113,76,85,68,3,41,56,136,87,113,107,177,146,101,45,80,5,6,101,120,250,243,13,11,16,151,78, + 87,24,10,10,10,16,61,36,10,15,8,7,16,6,2,2,85,18,13,4,11,9,20,254,1,47,48,2,24,99,155,153,41,22,72,4,1,63,26,18, + 19,25,1,245,50,28,64,91,110,68,70,56,84,36,46,74,63,0,0,0,0,2,0,172,0,1,6,129,5,217,0,7,0,12,0,0,9,1,19,7, + 33,39,19,9,1,3,33,3,1,3,158,2,143,84,3,250,52,6,88,2,151,253,205,75,4,243,71,253,207,5,217,254,119,251,180,3,6,4,76,1, + 134,254,53,252,95,3,161,1,75,0,0,0,0,1,0,172,0,0,6,129,5,208,0,9,0,0,9,1,19,23,7,33,39,19,0,55,3,155,2,140, + 87,3,3,250,52,6,90,2,126,20,5,208,254,119,251,191,3,3,6,4,68,1,128,6,0,1,0,159,0,0,6,141,5,212,0,83,0,0,1,3, + 38,53,52,55,54,51,50,22,50,54,51,50,23,22,21,20,7,3,37,54,51,50,23,22,23,22,21,20,7,14,1,21,20,22,21,20,7,6,7,6, + 35,34,39,38,39,3,22,21,16,7,35,54,17,52,39,3,6,7,6,35,34,39,38,39,38,53,52,54,53,52,38,39,38,53,52,55,54,55,54,51, + 50,23,3,120,216,74,88,37,38,88,65,44,66,58,92,56,13,91,199,1,69,77,72,57,53,35,35,70,7,18,108,37,12,11,33,57,64,33,35,106, + 76,207,9,112,95,146,7,206,77,105,35,34,63,56,34,12,11,37,108,18,7,70,35,35,53,56,72,78,3,8,1,52,104,111,107,64,22,82,82,114, + 42,37,127,116,254,235,101,28,17,12,27,66,66,21,21,57,39,29,17,55,42,31,36,37,27,41,12,34,102,1,22,88,83,254,221,231,242,1,53,69, + 73,254,234,102,34,12,41,27,37,35,30,44,55,17,29,39,57,21,20,67,66,27,12,17,28,0,0,0,0,2,0,171,1,30,6,129,4,152,0,62, + 0,69,0,0,1,22,23,20,7,6,7,4,19,51,23,7,35,6,7,34,39,52,51,22,51,50,51,50,55,36,39,35,34,7,22,21,6,5,36,3, + 52,55,22,23,21,7,20,23,50,55,18,37,22,29,1,20,7,54,55,50,53,54,55,54,53,52,38,3,6,21,20,23,53,38,5,167,111,20,74,176, + 20,1,0,55,27,19,46,3,17,152,98,25,20,16,57,2,1,77,13,254,250,7,3,131,68,134,9,254,178,253,153,44,66,51,8,13,113,89,13,53, + 1,42,196,42,93,100,61,72,78,57,37,135,1,229,32,4,152,5,115,87,25,36,44,27,254,240,74,13,174,9,93,84,45,77,77,241,109,64,101,246, + 16,3,1,100,58,9,3,44,23,39,90,12,77,1,222,20,6,160,8,39,99,77,20,38,84,41,36,36,13,60,254,165,8,9,132,73,3,181,0,0, + 0,1,0,172,0,231,6,129,4,141,0,50,0,0,37,33,34,38,53,52,54,55,54,55,51,55,35,38,39,38,53,52,62,1,59,1,55,33,34,38, + 53,52,54,55,54,55,33,55,33,34,38,53,52,62,1,51,33,54,55,54,51,33,50,22,21,6,54,253,80,43,61,28,25,18,19,54,4,136,47,25, + 31,29,50,26,180,1,254,255,68,62,29,25,20,22,1,82,2,253,3,43,62,29,50,26,3,44,8,16,31,43,1,118,42,62,231,62,43,27,50,13, + 10,3,12,2,26,30,44,27,50,28,10,61,44,26,50,14,11,2,10,61,44,27,51,26,22,17,31,62,44,0,0,0,0,1,0,172,0,231,6,129, + 4,141,0,50,0,0,19,52,54,51,33,50,23,22,23,33,50,30,1,21,20,6,35,33,23,33,22,23,30,1,21,20,6,35,33,23,51,50,30,1, + 21,20,7,6,7,35,23,51,22,23,30,1,21,20,6,35,33,172,62,42,1,118,43,30,17,8,3,44,26,49,30,62,43,253,3,2,1,82,22,20, + 25,28,61,68,254,255,1,179,27,50,28,30,25,48,135,4,54,19,18,24,29,61,43,253,80,4,35,44,62,31,17,22,26,51,27,44,61,10,2,11, + 14,50,26,44,61,10,28,50,27,44,30,26,2,12,3,10,13,50,27,43,62,0,0,0,0,2,0,178,0,212,6,123,4,141,0,34,0,68,0,0, + 37,19,52,38,35,33,34,7,33,48,35,34,20,51,33,7,33,34,21,20,51,33,7,35,34,21,20,59,1,7,35,34,21,20,51,7,38,39,54,55, + 51,55,35,38,39,54,55,51,55,33,34,39,54,55,33,55,33,38,39,54,51,33,54,55,33,50,22,21,3,6,8,73,48,33,254,159,54,23,252,217, + 4,79,83,2,255,13,254,158,83,83,1,58,9,221,83,83,174,19,62,83,83,28,93,1,1,93,74,4,171,93,1,1,93,228,2,254,198,93,1,1, + 93,1,104,4,253,4,92,1,1,92,3,44,32,66,1,118,42,62,75,241,3,21,37,51,57,146,76,75,73,79,75,72,76,75,73,29,1,104,103,1, + 14,1,104,103,1,19,104,103,1,15,1,104,103,69,2,63,45,252,179,0,0,2,0,147,0,0,4,76,5,202,0,33,0,68,0,0,55,5,50,54, + 53,17,52,39,17,54,35,34,21,17,39,17,52,35,34,21,17,39,53,52,35,34,29,1,39,53,52,35,34,21,39,54,55,22,23,21,23,53,54,55, + 22,23,21,23,17,52,55,22,23,17,23,17,54,55,22,21,17,22,23,17,20,6,35,37,19,177,3,21,36,52,58,2,74,73,76,76,72,79,75,72, + 76,75,73,29,1,104,103,1,14,1,104,103,1,18,105,103,1,15,1,104,103,68,2,62,45,252,178,1,115,74,49,32,1,98,54,22,3,39,83,83, + 253,2,13,1,99,82,82,254,196,9,223,83,83,174,18,63,83,83,28,92,1,1,92,75,4,172,92,1,1,92,228,3,1,59,92,1,1,92,254,150, + 4,2,253,93,1,1,93,252,212,33,65,254,138,42,62,75,2,155,0,0,0,2,0,177,0,211,6,123,4,141,0,33,0,67,0,0,37,50,53,52, + 43,1,39,51,50,53,52,43,1,39,33,50,53,52,35,33,39,33,50,52,43,1,33,38,35,33,34,6,21,19,7,3,52,54,51,33,22,23,33,50, + 23,6,7,33,23,33,22,23,6,35,33,23,51,22,23,6,7,35,23,51,22,23,6,7,3,193,83,83,63,18,174,83,83,223,9,1,60,82,82,254, + 157,13,2,254,83,79,4,252,217,22,54,254,158,32,49,74,40,75,62,42,1,118,65,33,3,44,93,1,1,93,253,3,4,1,106,92,1,1,92,254, + 197,3,228,92,1,1,92,172,4,75,92,1,1,92,241,73,75,76,72,75,79,73,75,76,146,57,51,37,252,235,30,3,78,45,63,2,69,103,104,1, + 15,1,103,104,19,1,103,104,1,14,1,103,105,1,0,0,0,2,0,147,255,249,4,76,5,194,0,33,0,67,0,0,19,20,51,50,61,1,55,21, + 20,51,50,61,1,55,17,20,51,50,53,17,55,17,20,51,50,39,17,54,53,17,52,38,35,5,39,37,50,22,21,17,6,7,17,20,7,38,39,17, + 7,17,6,7,38,53,17,7,21,6,7,38,39,53,7,21,6,7,38,39,177,73,75,76,72,75,79,72,76,76,73,74,2,58,52,36,252,235,30,3, + 78,45,62,2,68,103,104,1,15,1,103,105,18,1,103,104,1,14,1,103,104,1,2,179,83,83,61,20,174,83,83,221,9,254,198,83,83,1,98,13, + 253,1,83,83,3,39,23,54,1,97,33,48,74,41,75,62,42,254,138,66,32,252,212,92,1,1,92,2,252,4,254,152,93,1,1,93,1,58,2,228, + 93,1,1,93,171,4,74,93,1,1,93,0,0,29,0,125,0,0,6,175,5,216,0,79,0,128,0,139,0,149,0,164,0,179,0,186,0,193,0,214, + 0,220,0,227,0,231,0,235,0,239,0,243,0,247,0,251,0,255,1,3,1,7,1,11,1,26,1,38,1,42,1,46,1,50,1,54,1,58,1,62, + 0,0,1,32,23,22,29,1,20,7,23,21,20,7,51,54,53,54,59,1,50,21,22,29,1,6,35,39,6,7,21,23,55,22,21,20,7,20,43,1, + 34,47,1,6,35,34,39,6,21,6,43,1,34,53,38,53,52,55,23,55,53,37,7,34,39,53,52,55,54,59,1,50,31,1,53,39,55,38,53,54, + 37,54,1,20,23,51,53,38,53,54,59,1,23,7,23,21,7,21,20,23,22,29,1,23,51,55,52,55,54,53,39,55,53,39,55,22,29,1,7,23, + 54,61,1,52,39,38,43,1,32,7,6,5,22,21,20,7,6,43,1,34,39,52,33,22,23,6,35,34,39,52,53,52,19,51,36,51,23,54,53,38, + 53,38,35,6,7,6,21,37,6,35,6,21,23,55,22,23,53,52,39,38,53,38,5,23,21,7,38,53,52,55,22,21,20,7,39,53,1,22,51,54, + 55,38,53,52,55,6,7,6,43,1,38,39,38,39,22,21,20,55,22,23,51,53,38,5,21,50,63,1,34,7,5,21,23,53,37,21,55,53,5,21, + 23,53,51,21,55,39,7,21,55,39,7,21,51,53,51,21,51,53,7,21,23,53,23,21,51,53,7,21,51,53,5,39,7,21,22,21,22,51,50,55, + 54,55,38,53,6,37,7,22,21,20,23,50,63,1,38,35,7,37,7,23,53,7,21,23,53,39,21,23,53,23,21,55,53,55,21,55,53,55,21,55, + 53,3,167,1,49,146,58,101,6,25,6,160,44,36,8,63,70,26,63,89,248,62,234,70,95,76,65,6,51,69,190,76,172,175,72,209,51,44,14,56, + 76,89,76,228,254,208,108,69,7,70,4,39,33,48,60,133,25,12,107,35,1,7,103,254,154,70,7,31,11,13,13,19,13,32,19,153,69,101,89,127, + 196,33,26,33,13,31,25,31,6,71,224,128,112,38,254,173,105,20,1,113,46,2,56,90,6,78,36,1,207,203,6,37,96,66,67,235,6,1,24,24, + 102,32,70,7,20,28,52,249,252,34,17,14,52,46,95,63,241,101,203,25,2,101,14,51,38,123,69,40,49,254,245,45,214,217,43,1,28,36,28,75, + 116,56,191,12,7,45,22,16,20,25,6,9,1,135,15,3,25,13,24,254,150,18,1,36,26,254,214,25,204,27,2,71,23,3,115,32,20,25,165,25, + 115,25,77,32,253,249,114,7,69,6,14,19,70,155,34,19,186,3,15,18,227,50,21,12,62,6,31,95,253,163,3,29,25,25,112,25,204,27,15,25, + 20,26,5,216,193,108,84,69,114,102,94,6,53,46,62,61,57,124,53,34,24,45,7,108,41,18,100,13,18,44,38,62,118,118,93,99,99,99,25,87, + 112,67,45,43,13,13,100,18,149,7,56,13,27,66,112,112,62,6,87,93,111,216,230,97,29,254,120,118,117,80,112,56,50,19,44,142,68,168,12,94, + 30,56,44,24,13,26,94,66,36,75,187,156,18,43,20,11,34,49,174,24,82,91,43,210,101,42,241,59,208,13,50,11,13,155,155,87,10,81,151,155, + 3,2,80,254,18,130,5,8,10,73,38,63,9,103,112,19,235,111,37,25,11,5,18,119,13,94,25,83,65,36,13,7,159,50,12,57,105,45,53,110, + 48,8,50,162,254,134,199,14,191,10,12,65,105,38,174,73,22,89,94,80,93,68,19,155,37,136,92,63,63,92,79,87,67,13,44,5,44,5,49,10, + 47,15,50,5,49,49,8,47,6,61,2,59,6,55,55,55,55,61,51,5,50,14,49,56,7,49,49,123,5,5,19,57,48,56,104,78,29,37,30,98, + 92,68,104,44,15,41,104,63,18,5,204,49,6,55,73,50,6,49,33,49,7,50,24,50,6,50,4,50,5,51,10,50,7,49,0,0,0,1,0,172, + 0,0,6,129,5,216,0,38,0,0,1,50,23,22,21,20,7,1,7,20,23,37,50,23,21,20,35,5,34,39,38,61,1,52,55,0,55,54,53,52, + 39,35,5,34,39,53,52,55,51,4,66,143,113,52,124,253,108,11,97,3,110,78,9,105,252,161,161,108,27,139,2,109,20,11,98,11,252,181,57,11, + 98,14,5,216,141,77,79,138,98,253,160,62,89,26,209,97,3,89,198,174,53,56,24,138,108,2,55,27,27,22,80,32,204,80,30,64,12,0,0,0, + 0,6,0,170,0,0,6,130,5,216,0,17,0,36,0,48,0,60,0,70,0,88,0,0,1,32,1,22,21,16,5,6,43,1,32,1,38,61,1,16, + 1,54,5,38,35,32,3,6,21,16,5,22,51,32,19,54,61,1,2,37,38,1,35,34,39,19,22,59,1,50,55,19,6,1,6,29,1,33,53,16, + 37,54,55,19,6,37,22,23,33,38,39,38,39,19,22,1,50,23,22,21,20,7,6,43,1,34,39,38,61,1,52,55,54,3,137,1,127,1,8,114, + 254,195,194,212,32,254,132,254,250,99,1,82,185,2,30,166,167,254,212,235,126,1,23,178,223,1,85,234,89,1,254,173,5,254,212,28,168,141,209,48, + 56,8,50,46,212,141,254,224,95,254,87,1,31,18,19,210,7,2,134,95,3,254,86,1,31,34,43,210,125,254,73,82,56,25,68,41,46,7,80,57, + 20,72,39,5,216,254,141,175,214,254,176,253,147,1,131,174,178,28,1,83,1,2,132,172,93,254,217,177,194,254,196,226,138,1,90,150,166,15,1,89, + 224,4,251,72,89,1,111,31,29,254,146,88,3,40,73,95,5,16,1,32,219,13,12,254,146,4,143,145,176,59,46,50,25,1,108,79,254,207,80,37, + 46,71,54,31,82,37,38,5,73,56,28,0,0,6,0,100,0,0,6,200,5,216,0,15,0,29,0,41,0,78,0,108,0,141,0,0,1,62,1,53, + 52,39,54,55,22,21,20,6,7,38,53,52,3,38,35,34,6,7,38,39,54,51,50,22,23,6,1,20,22,23,6,7,46,1,53,52,55,22,1,6, + 35,34,39,38,39,7,6,7,6,35,34,39,22,51,50,54,55,54,53,52,39,55,22,51,50,55,23,6,21,20,23,30,1,51,50,1,22,23,22,21, + 20,7,51,22,23,22,17,21,46,1,35,6,7,39,54,53,52,39,53,54,55,54,53,52,38,1,38,53,52,55,54,59,1,39,38,39,18,37,14,1, + 21,20,23,22,31,1,6,21,20,23,7,38,43,1,34,35,34,6,4,56,68,72,1,36,36,2,121,85,10,14,63,76,7,91,62,33,21,87,116,7, + 133,74,25,254,40,91,70,3,16,104,111,2,42,3,193,109,166,46,50,164,92,1,61,119,92,96,124,128,85,80,55,184,58,47,27,69,34,32,31,29, + 64,26,55,63,160,69,80,254,166,162,93,16,69,4,105,120,195,13,210,112,183,130,70,1,64,182,84,53,24,251,134,4,121,109,180,18,2,44,2,17, + 1,20,177,34,38,101,191,1,66,2,64,113,166,14,3,4,128,178,1,145,40,139,65,12,12,14,5,19,18,95,195,37,24,25,14,2,13,35,4,43, + 22,28,66,5,55,33,254,234,78,143,32,38,34,46,203,79,16,15,6,253,178,83,6,36,170,2,88,69,47,75,40,65,97,93,100,76,80,42,24,23, + 39,70,67,97,89,114,61,5,160,67,217,52,52,109,111,10,67,130,254,255,10,157,182,10,147,40,7,7,70,25,75,31,156,87,89,26,142,252,70,24, + 25,149,161,118,2,98,137,1,14,112,104,180,39,85,68,152,39,82,29,60,9,10,36,136,147,0,0,0,0,23,0,100,255,252,4,246,5,209,0,7, + 0,29,0,35,0,43,0,63,0,86,0,109,0,131,0,162,0,173,0,178,0,183,0,188,0,193,0,201,0,208,0,213,0,218,0,223,0,229,0,237, + 0,244,1,35,0,0,1,6,21,20,51,50,55,38,23,34,7,6,35,34,39,55,39,54,51,50,23,22,23,6,7,38,39,36,53,52,1,6,7,35, + 38,55,3,22,51,50,53,52,39,38,19,21,6,35,34,39,53,38,53,54,55,22,23,6,21,20,4,7,35,38,39,21,39,53,36,39,54,55,22,23, + 6,21,20,4,21,20,7,39,54,53,52,39,54,3,21,39,53,36,39,54,55,22,23,6,21,20,23,6,4,23,6,7,39,54,53,52,7,36,39,54, + 55,22,23,6,21,20,4,23,6,7,38,39,54,53,52,39,21,39,19,21,39,53,36,53,54,55,51,50,23,7,23,6,35,34,39,38,35,34,21,20, + 4,23,6,7,38,39,36,39,54,1,20,30,1,51,38,52,55,34,14,1,5,22,23,55,38,39,22,23,55,38,39,22,23,55,38,39,22,7,55,38, + 39,20,21,20,7,23,53,52,39,6,7,23,54,53,52,5,23,54,55,6,7,23,54,55,6,7,23,54,55,6,31,1,53,52,55,6,23,55,38,53, + 52,53,6,21,63,1,38,39,6,21,20,23,21,39,53,38,35,34,7,32,39,54,37,22,23,22,51,53,38,39,46,1,53,52,62,1,50,30,1,21, + 20,6,7,6,7,51,20,35,21,54,55,4,23,6,33,38,35,34,3,87,4,11,12,25,10,79,7,8,66,55,25,22,91,108,35,62,11,13,204,13, + 2,141,70,157,1,18,254,136,95,31,15,1,86,104,27,13,10,5,34,239,11,26,34,3,174,4,64,46,44,61,1,54,2,15,26,116,74,254,232,4, + 2,128,52,86,174,1,182,112,49,69,2,1,81,74,254,147,3,5,113,77,105,206,1,10,2,118,2,5,150,104,163,253,254,243,5,1,112,72,73,163, + 2,21,3,4,174,33,58,175,189,74,74,74,254,129,13,205,8,61,52,109,92,23,24,56,66,8,7,42,2,210,6,7,174,63,111,1,7,2,12,254, + 118,18,33,18,15,15,17,34,18,1,186,116,44,27,96,151,115,38,42,95,126,80,17,49,62,129,53,1,61,39,103,22,61,62,50,52,60,43,253,19, + 27,45,115,91,44,42,38,115,100,20,49,17,80,84,16,62,51,74,64,61,22,39,104,60,52,50,1,229,74,45,72,35,42,254,245,89,84,1,95,23, + 89,2,1,3,2,20,23,23,41,42,41,23,22,20,3,3,1,1,88,24,1,94,84,89,254,245,42,36,68,4,32,8,4,9,10,20,63,2,24,5, + 23,25,62,2,4,125,62,32,17,9,20,42,48,252,116,34,60,72,35,3,166,11,8,5,9,9,252,45,56,26,56,41,30,54,49,24,13,6,21,21, + 41,54,102,56,173,90,13,92,43,72,68,32,19,9,26,39,42,62,74,46,14,11,17,29,5,5,23,1,153,140,13,137,38,98,53,22,20,7,15,29, + 2,2,52,67,85,69,32,27,39,26,39,164,33,96,57,30,12,7,33,44,40,77,84,69,21,15,11,30,42,33,29,133,12,2,4,127,8,125,21,113, + 126,4,61,24,23,5,24,2,47,43,41,102,91,20,16,15,28,52,31,2,102,18,32,17,33,66,34,17,32,60,64,48,38,57,21,99,63,34,86,43, + 128,71,19,111,77,147,75,8,126,97,17,15,132,63,11,12,125,98,137,57,25,101,92,13,80,38,48,64,17,107,34,63,99,42,137,19,71,128,69,137, + 8,6,74,142,88,141,11,63,132,15,17,101,125,4,25,57,137,13,13,92,171,206,6,194,52,12,165,92,6,54,30,1,24,1,2,10,39,22,21,39, + 22,22,39,21,22,39,10,2,1,1,22,30,54,6,92,165,13,0,0,0,0,2,0,170,0,0,5,78,5,217,0,8,0,40,0,0,1,38,39,6, + 7,22,23,54,53,3,38,39,54,55,22,23,21,20,7,51,50,55,17,38,43,2,17,20,23,33,54,53,17,43,1,34,7,17,22,51,3,121,2,121, + 121,2,8,115,123,197,119,12,3,202,202,3,131,163,181,174,169,179,6,164,99,254,166,99,168,6,179,169,174,181,4,222,177,2,2,177,142,113,88,159, + 254,241,101,184,243,2,2,243,14,183,88,99,254,247,54,254,12,181,174,174,181,1,244,54,1,9,99,0,0,3,0,170,255,253,4,136,5,217,0,3, + 0,32,0,44,0,0,1,21,51,53,39,53,51,21,51,21,35,21,51,5,21,33,17,23,21,39,3,35,3,39,53,23,17,33,53,33,53,35,53,19, + 51,17,33,53,33,53,35,21,33,21,33,2,45,202,183,171,125,125,9,1,148,254,99,143,136,1,177,1,134,134,254,107,1,150,118,164,71,1,12,254, + 244,71,254,245,1,11,5,64,60,60,51,102,102,162,88,1,175,253,232,139,156,133,254,238,1,188,134,155,130,1,113,176,88,162,252,207,1,187,71,99, + 99,71,0,0,0,2,0,170,0,0,5,155,7,74,0,7,0,32,0,0,1,17,51,50,54,16,38,35,1,17,33,50,22,21,20,6,43,1,17,55, + 51,9,1,35,3,17,35,17,3,35,9,1,51,3,40,209,116,127,127,116,254,138,1,118,206,212,212,206,209,218,220,254,103,1,174,219,239,166,254,219, + 1,183,254,110,220,6,167,253,216,144,1,8,144,252,4,4,159,223,216,217,222,254,205,237,254,66,254,40,1,6,254,250,1,23,254,233,1,225,1,181, + 0,1,0,170,0,0,3,178,5,215,0,31,0,0,1,51,23,21,51,23,21,7,35,21,33,23,21,7,33,17,7,35,39,17,33,39,53,55,33,53, + 35,39,53,55,51,53,1,215,171,6,165,5,5,165,1,36,6,6,254,220,6,171,6,254,222,5,5,1,34,163,5,5,163,5,215,5,155,6,148,6, + 113,6,152,5,252,130,5,5,3,126,5,152,6,113,6,148,6,155,0,0,0,1,0,170,255,253,6,130,5,213,0,43,0,0,1,33,23,21,7,35, + 17,33,53,55,51,23,17,7,35,39,53,33,17,51,23,21,7,33,39,53,55,51,17,33,21,7,35,39,17,55,51,23,21,33,17,35,39,53,2,187, + 1,182,6,6,160,2,59,6,106,6,6,106,6,253,197,160,6,6,254,74,6,6,170,253,196,6,115,6,6,115,6,2,60,170,6,5,213,6,119,6, + 253,209,161,6,6,254,73,6,6,158,253,200,6,106,6,6,106,6,2,56,158,6,6,1,183,6,6,161,2,47,6,119,0,2,0,178,0,0,6,123, + 5,216,0,27,0,44,0,0,1,51,50,23,35,39,32,3,6,21,16,5,22,51,37,21,6,7,6,43,1,32,3,38,53,16,37,54,1,51,50,23, + 51,21,7,22,21,39,7,35,53,55,39,53,51,3,156,21,221,210,6,239,254,169,209,94,1,86,136,156,1,1,160,138,81,54,28,254,145,238,132,1, + 134,172,2,127,3,6,62,209,168,65,177,169,3,66,172,213,5,216,146,54,254,202,158,185,254,146,214,71,50,6,107,26,11,1,62,192,233,1,170,238, + 89,254,51,201,3,126,187,17,124,124,3,201,126,3,0,0,0,4,0,170,0,0,6,131,5,217,0,22,0,79,0,98,0,115,0,0,1,22,51,50, + 55,22,51,50,55,53,51,23,21,20,15,1,34,39,6,35,34,39,52,23,51,22,23,50,21,3,51,36,17,52,39,53,22,17,21,16,7,6,7,21, + 22,59,1,21,6,43,1,34,7,39,35,34,39,53,51,50,55,53,39,38,39,38,53,16,63,1,21,6,21,16,5,53,3,53,55,50,37,21,6,7, + 6,21,20,23,21,35,38,39,38,53,16,37,54,51,52,37,22,23,22,29,1,20,7,6,7,52,55,54,61,1,16,37,2,234,27,64,46,33,37,44, + 66,21,5,2,69,30,44,35,33,45,81,16,178,2,50,34,8,10,2,1,36,110,222,224,76,47,80,165,26,117,72,129,22,69,68,144,56,136,60,121, + 86,88,125,36,99,199,33,117,1,38,18,3,35,255,0,95,65,134,146,2,158,93,38,1,12,121,35,2,123,132,130,176,166,89,31,54,92,254,214,5, + 217,75,48,48,68,7,40,5,59,27,4,44,44,101,34,135,64,11,5,252,32,228,1,112,194,207,3,215,254,235,36,254,241,221,66,22,5,40,5,33, + 99,99,28,5,42,3,64,114,74,177,177,1,1,230,31,5,192,226,254,167,245,2,3,38,22,169,42,6,69,99,204,239,233,214,2,74,233,107,103,1, + 12,205,70,4,2,30,112,183,216,47,212,182,81,6,7,82,175,191,2,1,109,244,0,0,0,3,0,170,0,0,5,5,5,217,0,91,0,102,0,110, + 0,0,1,50,23,15,1,22,23,22,21,20,7,23,35,21,50,55,54,53,52,39,55,51,22,17,16,3,38,35,34,21,20,23,22,21,20,21,6,35, + 6,35,34,39,38,39,21,20,21,20,23,20,35,34,53,54,61,1,6,21,6,43,1,34,39,52,54,53,52,35,34,7,2,17,52,55,51,23,6,21, + 20,23,22,23,53,35,53,38,53,52,55,47,1,54,3,20,23,51,54,53,52,39,6,7,6,37,6,21,20,23,54,53,52,2,216,66,82,19,15,127, + 51,56,205,1,120,121,142,135,125,21,5,234,149,120,79,56,120,30,13,42,12,9,44,6,59,94,80,104,111,80,154,7,57,6,41,14,150,46,82,116, + 154,228,5,21,125,214,63,121,119,204,238,24,16,87,206,135,4,70,29,89,51,40,1,112,34,65,144,5,217,75,15,124,46,80,81,85,199,98,75,120, + 129,157,198,176,114,19,165,254,254,254,224,254,201,174,45,28,147,38,42,2,3,59,2,34,238,49,150,3,4,70,113,59,60,116,77,146,93,191,35,59, + 64,164,34,43,173,1,33,1,77,233,166,19,121,174,251,163,47,18,120,75,92,204,190,103,124,18,72,253,255,146,74,105,139,83,126,25,74,63,162,115, + 99,137,102,61,168,152,0,0,0,1,0,171,0,0,6,129,5,215,0,50,0,0,1,50,23,22,21,20,7,23,7,35,39,6,35,34,39,21,1,35, + 38,39,54,1,54,51,22,51,50,55,39,7,35,38,39,19,4,21,7,22,23,53,54,61,1,52,39,38,43,1,34,7,54,3,232,237,209,150,125,194, + 140,3,185,165,217,170,143,254,252,3,204,4,26,1,89,24,7,113,158,191,151,217,108,6,187,9,233,1,27,126,230,29,66,251,137,119,37,98,120,170, + 5,215,189,155,215,201,138,148,131,170,110,88,3,254,49,141,7,25,1,152,29,85,104,198,115,116,12,1,2,14,5,159,175,14,2,90,124,36,254,101, + 69,55,143,0,0,5,0,170,0,0,6,130,5,216,0,11,0,18,0,22,0,26,0,33,0,0,19,16,0,33,32,0,17,16,0,33,32,0,19,20, + 23,1,3,6,0,19,22,23,27,1,54,55,9,1,54,53,52,0,39,17,170,1,182,1,54,1,55,1,181,254,75,254,201,254,202,254,74,152,121,1, + 170,2,196,254,163,173,176,192,2,95,205,170,254,137,1,187,113,254,161,211,2,234,1,55,1,183,254,73,254,201,254,202,254,76,1,180,1,54,229,120, + 1,245,1,194,4,254,163,253,98,177,6,2,104,253,150,8,164,1,182,254,151,112,245,249,1,93,4,254,66,0,0,0,0,4,0,170,0,0,6,130, + 5,216,0,18,0,30,0,40,0,52,0,0,1,21,30,1,51,50,54,53,16,0,33,32,0,3,62,1,51,50,22,5,20,6,35,34,38,53,52,54, + 51,50,22,5,52,38,34,6,21,20,22,50,54,37,16,0,33,32,0,17,16,0,33,32,0,3,150,10,197,144,146,201,254,98,254,228,254,222,254,123, + 20,24,177,149,143,198,1,202,61,38,42,60,60,42,40,59,253,69,59,82,58,58,82,59,3,229,254,75,254,201,254,202,254,74,1,182,1,54,1,55, + 1,181,2,248,26,142,193,207,154,1,22,1,152,254,123,254,201,172,178,192,158,41,58,58,41,42,60,60,42,42,60,60,42,41,58,60,39,254,202,254, + 76,1,180,1,54,1,55,1,183,254,73,0,255,255,0,170,0,0,6,130,5,213,18,38,15,92,0,0,16,39,15,92,0,0,2,134,16,7,15,92, + 0,0,5,13,255,255,0,170,0,0,6,131,5,212,18,38,15,92,0,0,16,39,15,92,0,1,2,133,16,7,15,93,0,0,5,12,255,255,0,170, + 0,0,6,130,5,213,18,38,15,92,0,0,16,39,15,93,0,0,2,133,16,7,15,92,0,0,5,13,255,255,0,170,0,0,6,130,5,213,18,38, + 15,92,0,0,16,39,15,93,0,0,2,133,16,7,15,93,0,0,5,13,255,255,0,170,0,0,6,130,5,213,18,38,15,93,0,0,16,39,15,92, + 0,0,2,133,16,7,15,92,0,0,5,13,255,255,0,170,0,0,6,130,5,213,18,38,15,93,0,0,16,39,15,92,0,0,2,133,16,7,15,93, + 0,0,5,13,255,255,0,170,0,0,6,130,5,213,18,38,15,93,0,0,16,39,15,93,0,0,2,133,16,7,15,92,0,0,5,13,255,255,0,170, + 0,0,6,130,5,213,18,38,15,93,0,0,16,39,15,93,0,0,2,133,16,7,15,93,0,0,5,13,0,10,0,135,255,234,6,165,5,225,0,12, + 0,64,0,70,0,76,0,82,0,88,0,94,0,100,0,106,0,112,0,0,0,20,23,22,51,50,54,52,39,38,35,34,7,5,38,52,55,51,54,55, + 39,54,55,23,54,55,53,54,50,23,21,22,23,55,22,23,7,22,23,51,22,20,7,35,6,7,23,6,7,39,6,7,21,6,35,39,53,38,39,7, + 38,39,55,38,39,1,54,55,3,6,7,5,22,23,55,38,39,1,54,55,39,6,7,37,22,23,37,38,39,1,38,39,5,22,23,37,6,7,23,54, + 55,5,6,7,19,54,55,37,38,39,7,22,23,2,244,48,47,67,66,94,48,47,65,67,47,253,127,28,28,112,27,107,84,15,99,82,124,194,39,78, + 40,182,137,79,102,17,85,105,28,112,28,28,112,20,113,85,17,102,79,138,182,39,39,78,181,138,81,97,17,81,104,27,1,251,33,36,12,142,98,1, + 128,41,29,183,100,140,254,175,8,22,203,76,23,2,247,24,6,1,18,19,81,253,107,20,10,254,240,22,75,2,180,8,22,204,82,17,254,116,33,37, + 12,141,99,254,127,29,39,184,100,141,3,38,132,47,47,94,132,48,48,48,195,39,78,39,183,124,80,95,16,80,102,30,112,28,28,112,22,111,81,15, + 96,81,121,185,39,78,39,176,131,80,92,11,81,103,29,112,28,28,112,23,109,81,11,92,80,121,186,1,44,19,10,1,13,22,77,170,10,19,198,78, + 21,254,62,38,26,171,96,130,55,30,34,10,127,98,254,75,30,42,17,140,86,244,38,34,172,103,123,137,18,11,254,240,30,77,165,9,20,194,77,30, + 0,5,0,170,255,106,7,173,6,110,0,10,0,21,0,33,0,45,0,61,0,0,1,52,54,51,50,22,20,6,35,34,38,37,52,54,50,22,21,20, + 6,35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,19,54,55,54,32,23,22,23,7,38,39,38, + 32,7,6,7,2,130,81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,251,230,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253, + 242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,236,36,51,182,2,4,182,50,37,115,29,39,142,254,108,142,40,28,3,253,59,81, + 81,118,82,83,58,59,81,81,59,58,83,83,217,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1, + 192,254,64,253,37,56,51,181,181,51,56,72,44,39,142,141,40,43,0,0,0,5,0,170,255,106,7,173,6,110,0,10,0,21,0,33,0,45,0,61, + 0,0,1,52,54,51,50,22,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33, + 32,0,17,16,0,33,32,0,19,55,22,23,22,32,55,54,55,23,6,7,6,32,39,38,2,130,81,59,58,82,82,58,59,81,2,66,82,116,83,83, + 58,59,81,251,230,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,236,115, + 28,40,142,1,148,142,39,29,115,37,50,182,253,252,182,51,3,253,59,81,81,118,82,83,58,59,81,81,59,58,83,83,217,1,117,2,15,253,241,254, + 139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,253,170,71,43,39,142,142,39,44,72,56,51,181,181,51,0,0, + 0,4,0,170,255,106,7,173,6,110,0,10,0,21,0,33,0,49,0,0,1,20,22,51,50,54,52,38,35,34,6,5,20,22,51,50,54,53,52,38, + 34,6,1,16,0,33,32,0,17,16,0,33,32,0,37,22,23,22,32,55,54,55,39,6,7,6,32,39,38,39,2,130,81,59,58,82,82,58,59,81, + 2,66,81,59,58,83,83,116,82,251,230,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,1,115,36,51,182,2,4,182,50,37,115,29,39, + 142,254,108,142,40,28,3,253,58,83,82,118,81,81,59,58,83,83,58,59,81,81,254,178,1,117,2,15,253,241,254,139,254,140,253,244,2,12,91,56, + 51,181,181,51,56,72,44,39,142,142,39,43,0,10,0,170,0,0,6,130,5,216,0,7,0,12,0,19,0,34,0,42,0,50,0,58,0,65,0,73, + 0,88,0,0,1,51,23,17,7,35,39,17,5,23,21,7,39,37,23,7,35,38,39,53,5,50,31,1,20,7,6,35,34,39,38,53,52,55,54,1, + 33,23,21,7,33,39,53,37,33,23,21,7,33,39,53,3,51,22,23,21,7,39,53,37,51,23,21,7,39,53,37,51,23,17,7,35,39,17,3,6, + 21,20,23,22,51,50,55,54,53,39,38,35,34,3,115,78,6,6,78,6,2,57,57,248,61,252,251,253,62,3,200,45,2,49,215,92,13,196,72,48, + 181,101,37,189,70,253,75,1,83,6,6,254,173,6,4,119,1,90,7,7,254,166,6,71,3,134,114,61,248,253,180,3,59,247,61,2,27,78,6,6, + 78,6,36,130,25,69,124,32,49,134,9,63,146,39,5,216,6,254,161,6,6,1,95,156,62,3,255,63,238,254,64,199,55,4,181,226,96,189,100,24, + 168,64,92,180,104,27,254,237,6,80,6,6,80,6,6,80,6,6,80,254,231,130,121,3,63,253,4,43,60,3,254,62,4,119,6,254,161,6,6,1, + 95,2,86,71,123,63,44,114,17,67,130,65,154,0,0,0,0,2,2,221,0,0,6,131,5,215,0,23,0,43,0,0,1,32,1,22,21,16,1,6, + 43,1,34,39,53,36,55,54,17,16,37,38,39,53,52,55,23,21,4,17,16,5,7,21,51,50,55,54,55,54,61,1,16,1,38,35,3,126,1,139, + 1,16,106,254,116,179,176,49,47,81,1,21,125,155,254,178,136,93,149,40,1,201,254,175,43,6,86,158,233,82,29,254,165,163,158,5,215,254,135,173, + 198,254,120,254,255,98,15,6,79,177,202,1,12,1,144,224,80,16,3,11,14,62,3,197,254,20,254,110,232,24,4,83,152,244,93,93,9,1,61,1, + 5,102,0,0,0,2,0,170,0,0,4,80,5,216,0,23,0,43,0,0,33,32,1,38,53,16,1,54,59,1,50,23,21,4,7,6,17,16,5,22, + 23,21,20,7,39,53,36,17,16,37,55,53,35,34,7,6,7,6,29,1,16,1,22,51,3,175,254,117,254,239,105,1,140,179,177,49,46,80,254,236, + 126,154,1,78,136,93,149,40,254,55,1,80,44,6,86,159,232,83,28,1,90,164,158,1,121,173,198,1,136,1,1,99,15,7,79,177,203,254,245,254, + 112,225,79,16,4,10,14,62,3,197,1,237,1,145,232,24,3,83,150,245,92,94,9,254,194,254,252,102,0,2,0,175,255,48,4,58,5,219,0,49, + 0,62,0,0,1,22,23,22,21,20,7,6,7,21,55,21,7,23,35,39,35,53,51,39,38,39,38,53,52,55,54,55,38,39,38,61,1,51,21,20, + 23,22,23,51,54,55,54,61,1,51,21,20,7,6,5,35,6,7,6,16,22,51,50,54,16,39,38,3,105,40,36,133,132,108,143,216,220,1,129,1, + 202,202,2,147,109,133,133,36,40,40,36,133,142,91,85,117,38,116,85,91,142,133,36,254,247,38,117,85,91,183,130,127,183,91,85,4,86,26,36,131, + 189,188,124,100,14,209,2,100,1,202,203,98,209,13,101,124,188,189,131,36,26,25,37,131,188,8,10,130,90,83,7,7,83,90,130,10,8,188,131,37, + 95,6,84,89,254,252,170,170,1,4,89,84,0,2,0,175,254,255,5,45,5,218,0,11,0,35,0,0,1,34,6,21,20,22,51,50,54,53,52,38, + 1,38,53,52,0,51,50,0,16,7,6,7,17,33,21,33,17,35,17,33,53,33,17,38,2,238,164,231,231,164,161,234,234,253,201,169,1,80,239,236, + 1,83,169,136,180,1,16,254,240,180,254,240,1,16,181,5,39,228,164,163,216,216,163,164,228,252,237,157,238,239,1,76,254,180,254,34,156,126,18,254, + 248,124,254,255,1,1,124,1,9,17,0,0,0,2,0,175,255,227,5,45,6,190,0,11,0,35,0,0,37,50,54,53,52,38,35,34,6,21,20,22, + 1,22,21,20,0,35,34,0,16,55,54,55,17,33,53,33,17,51,17,33,21,33,17,22,2,238,164,231,231,164,161,234,234,2,55,169,254,176,239,236, + 254,173,169,136,180,254,241,1,15,180,1,16,254,240,181,150,228,164,163,216,216,163,164,228,3,19,157,238,239,254,180,1,76,1,222,156,126,18,1,8, + 124,1,1,254,255,124,254,247,17,0,0,0,0,2,0,162,255,227,6,165,5,195,0,9,0,30,0,0,1,34,6,16,22,51,50,54,16,38,19,6, + 35,34,0,16,0,23,22,23,1,33,55,33,17,7,17,1,22,21,20,2,225,164,231,231,164,161,234,234,251,168,244,235,254,172,1,89,230,228,112,1, + 105,254,141,140,1,238,143,254,154,112,3,150,228,254,184,216,216,1,72,228,252,241,164,1,61,1,220,1,85,9,8,103,1,92,142,254,20,143,1,117, + 254,164,146,193,232,0,0,0,0,1,1,83,0,0,5,215,5,216,0,27,0,0,1,53,50,54,52,38,35,34,6,29,1,35,52,0,51,50,0,21, + 20,7,51,17,51,17,35,17,33,53,3,13,122,170,169,123,121,171,150,1,2,184,187,1,2,109,227,151,151,252,19,2,19,1,171,242,171,171,121,2, + 185,1,4,254,252,185,168,123,3,197,250,40,1,124,151,0,0,1,1,192,0,0,5,106,5,216,0,31,0,0,1,35,53,51,53,51,21,51,21,35, + 17,54,51,50,18,21,20,6,29,1,35,52,54,53,52,38,35,34,6,21,17,35,2,42,106,106,152,178,178,111,152,178,239,140,151,141,155,111,110,154, + 152,4,141,151,180,180,151,254,125,109,254,254,187,90,229,121,2,132,238,72,123,169,170,122,254,70,0,0,0,2,0,248,0,0,6,50,5,216,0,10, + 0,49,0,0,0,34,6,21,20,22,51,50,54,53,52,39,22,23,22,20,6,35,34,38,52,55,54,55,17,33,17,33,53,51,17,35,53,33,17,33, + 17,51,17,33,17,33,21,35,17,51,21,33,17,33,3,205,112,79,79,56,55,79,58,61,48,76,152,109,107,153,76,47,62,254,224,254,206,155,155,1, + 50,1,32,151,1,32,1,49,153,153,254,207,254,224,1,140,79,55,57,78,78,57,55,194,18,48,76,216,153,153,216,76,49,17,1,140,254,75,151,2, + 211,152,254,74,1,182,254,74,1,182,152,253,45,151,1,181,0,1,1,4,0,0,6,39,5,216,0,60,0,0,37,21,35,53,35,53,51,53,38,39, + 38,39,53,7,39,55,51,23,21,39,21,51,21,35,22,23,22,23,17,7,39,55,51,23,21,39,17,54,55,54,61,1,51,53,7,39,55,51,23,21, + 39,21,51,21,6,7,6,7,21,51,21,3,226,151,176,176,165,122,150,1,144,1,145,152,144,144,2,2,1,104,78,103,145,1,146,151,145,145,101,77, + 106,1,144,1,145,152,144,144,1,1,150,122,165,175,187,187,187,151,139,22,122,150,215,84,142,140,153,153,140,142,84,2,151,104,79,20,2,202,141,139, + 154,154,139,141,253,55,20,78,106,150,1,89,142,140,153,153,140,142,89,4,211,150,121,23,139,151,0,0,0,2,1,236,0,0,5,63,5,216,0,18, + 0,29,0,0,1,33,32,23,22,21,16,7,6,35,33,17,33,23,21,7,33,39,17,23,17,33,50,55,54,55,52,39,38,35,1,244,1,153,1,46, + 100,32,251,59,54,254,170,2,122,8,8,252,253,8,145,1,70,130,72,16,8,162,37,81,5,216,208,77,95,254,246,92,17,253,173,8,130,8,8,5, + 199,131,254,36,130,26,80,164,60,16,0,0,0,1,0,93,0,0,6,206,5,218,0,36,0,0,33,16,0,35,34,6,21,20,23,35,38,53,52,54, + 51,32,19,22,23,54,55,18,33,50,22,21,20,7,35,54,53,52,38,35,34,0,17,3,86,254,226,169,129,34,84,134,93,163,146,1,116,131,8,5, + 4,8,132,1,115,147,162,93,134,85,34,130,168,254,226,2,88,3,5,197,34,128,128,132,161,132,187,252,251,49,40,40,49,3,5,187,132,161,132,128, + 129,34,196,252,251,253,168,0,0,2,0,183,0,0,6,117,5,216,0,8,0,46,0,0,1,34,6,16,22,32,54,16,38,39,54,55,62,2,51,21, + 34,2,7,6,7,22,23,22,21,20,0,35,34,0,53,52,55,54,55,38,39,38,2,35,53,50,30,1,23,22,3,149,147,206,206,1,38,207,205,149, + 131,76,86,97,161,185,123,167,131,21,23,46,43,146,254,217,211,208,254,216,148,41,48,24,21,129,171,122,185,186,72,85,77,3,92,207,254,218,206,206, + 1,38,207,150,5,61,66,180,174,108,254,200,108,19,15,30,41,149,210,209,254,217,1,39,209,210,149,42,30,14,19,108,1,56,108,174,180,66,61,0, + 0,2,0,192,0,0,6,106,5,218,0,19,0,27,0,0,1,38,39,53,4,32,37,21,6,7,17,22,23,21,36,32,5,53,54,63,1,54,51,23, + 17,6,35,39,2,18,168,170,1,91,2,248,1,87,176,166,166,176,254,169,253,8,254,165,170,168,152,116,117,233,116,117,233,4,252,22,52,148,90,90, + 151,47,24,251,226,23,47,152,91,91,148,53,21,12,13,13,4,7,13,13,0,4,0,231,0,64,6,69,5,111,0,8,0,29,0,38,0,60,0,0, + 0,34,6,20,22,51,50,54,52,1,44,1,39,53,22,4,51,50,39,38,53,52,54,51,50,22,16,7,14,1,1,50,54,52,38,34,6,20,22,1, + 12,1,23,21,38,36,35,34,23,22,21,20,6,35,34,38,53,52,55,62,1,5,66,190,132,132,95,94,133,254,94,254,200,254,148,153,253,1,108,59, + 130,8,131,205,147,149,206,104,73,246,253,171,94,133,133,188,134,133,1,29,1,57,1,108,153,253,254,150,58,133,8,131,205,147,149,206,104,73,245,2, + 184,132,190,133,133,190,254,12,2,40,43,124,84,22,26,108,167,147,207,207,254,218,103,77,76,2,182,132,190,132,132,190,132,2,120,2,41,43,123,84, + 21,26,108,166,148,207,207,148,146,103,77,77,0,2,1,30,0,0,6,13,5,216,0,19,0,77,0,0,1,62,1,53,52,39,46,1,35,34,7,14, + 1,21,20,23,30,1,51,50,19,52,54,51,50,22,21,20,0,21,22,23,50,55,23,6,35,34,38,53,52,0,53,52,38,35,34,6,21,20,22,23, + 30,1,21,20,7,6,7,6,35,34,38,39,38,53,52,55,54,55,54,51,50,23,50,53,52,38,2,148,75,50,14,29,113,39,36,35,75,49,14,30, + 111,39,35,48,223,180,172,218,254,222,4,134,71,100,65,127,111,99,144,1,31,164,132,127,150,46,25,37,9,32,51,116,56,56,60,173,47,22,27,51, + 117,55,55,76,74,8,77,1,140,29,113,39,35,35,75,50,14,30,111,39,35,36,76,49,2,240,161,201,221,176,187,254,10,180,124,3,88,72,119,121, + 111,199,1,225,194,134,165,155,129,60,145,62,98,128,17,87,68,115,45,22,75,120,54,56,60,60,114,46,21,41,13,26,184,0,0,0,0,2,0,109, + 254,143,6,190,5,216,0,58,0,68,0,0,1,50,22,21,62,1,51,50,22,29,1,62,1,51,50,22,17,16,1,22,23,35,38,39,6,7,53,54, + 55,39,17,52,53,16,39,14,1,7,17,35,17,16,38,43,2,34,6,7,17,35,17,52,39,51,22,23,62,1,1,17,36,19,52,38,43,1,34,6, + 2,168,63,119,40,198,75,62,82,48,131,68,60,100,254,131,1,146,168,46,74,167,175,191,124,9,46,58,133,63,151,31,35,1,1,41,179,19,149,152, + 142,118,36,23,183,2,196,1,2,24,45,28,4,30,143,5,216,198,128,119,207,167,219,202,125,119,232,254,239,254,104,254,191,94,193,41,161,101,7,116, + 28,87,217,3,87,18,17,1,25,1,1,217,200,252,97,3,154,1,65,106,226,215,252,116,4,65,190,191,79,176,93,188,252,146,253,208,250,1,82,193, + 139,206,0,0,0,2,0,171,0,107,6,129,5,57,0,3,0,35,0,0,19,33,21,33,1,33,53,33,38,53,52,0,51,50,0,21,20,7,33,21, + 33,53,35,54,55,54,53,52,38,34,6,21,20,23,22,23,171,5,214,250,42,2,45,253,211,1,98,67,1,1,185,186,1,3,68,1,132,253,175,1, + 18,17,86,170,244,170,85,16,19,1,3,152,1,143,152,104,131,185,1,3,254,253,185,131,104,152,152,13,17,85,121,122,170,170,122,121,85,17,13,0, + 0,1,0,69,255,60,6,232,5,216,0,56,0,0,1,20,22,23,51,53,51,23,7,39,53,35,34,39,38,39,3,52,53,16,39,14,1,7,17,35, + 17,16,38,43,2,34,6,7,17,35,17,52,39,51,22,23,62,1,51,50,22,21,62,1,51,50,22,29,1,19,5,0,103,89,89,4,203,203,4,89, + 203,68,44,8,21,46,58,133,63,151,31,35,1,1,41,179,19,149,152,142,118,36,23,183,69,63,119,40,198,75,62,82,1,1,15,111,125,1,118,173, + 175,4,118,120,74,118,3,22,18,17,1,25,1,1,217,200,252,97,3,154,1,65,106,226,215,252,116,4,65,190,191,79,176,93,188,198,128,119,207,167, + 219,202,253,132,0,1,0,169,255,255,6,130,5,216,0,20,0,0,1,17,9,1,7,9,1,47,2,9,1,63,2,9,1,33,53,33,17,5,234,253, + 63,1,61,108,254,195,254,88,1,106,1,1,168,254,195,1,106,1,1,61,2,193,254,4,3,0,2,216,1,252,253,63,254,195,108,1,61,254,88,1, + 106,1,1,168,1,61,1,106,1,254,195,2,193,152,253,0,0,2,0,192,0,0,6,106,5,216,0,41,0,49,0,0,1,50,18,55,54,51,50,22, + 21,20,6,35,34,39,14,1,7,35,53,55,54,19,38,2,35,34,2,21,20,21,7,52,2,39,53,50,22,19,54,55,62,1,1,22,51,50,55,38, + 39,34,3,83,107,81,25,109,195,121,153,143,142,155,122,44,126,138,168,154,122,105,50,64,58,36,154,158,141,132,147,161,40,46,45,41,122,1,87,93, + 130,161,9,7,159,152,5,216,252,158,4,221,190,103,145,171,133,160,215,4,118,1,4,1,120,16,3,21,254,45,195,15,14,2,253,1,240,6,97,222, + 254,237,201,88,91,150,252,38,145,197,157,19,0,2,0,176,1,57,6,123,4,162,0,39,0,81,0,0,19,0,51,50,23,22,50,54,51,50,23,22, + 50,55,54,51,50,19,7,38,35,34,7,6,34,39,38,35,34,7,6,35,34,39,38,35,34,4,35,39,17,0,51,50,23,22,51,50,55,54,50,23, + 22,51,50,55,54,51,50,19,7,38,35,34,7,6,35,34,39,38,35,34,7,6,35,34,39,38,34,4,35,39,176,1,69,115,45,13,24,112,172,56, + 54,24,26,114,86,43,41,124,109,94,63,95,51,60,86,112,25,28,59,55,83,87,55,56,25,24,54,55,254,254,5,53,1,68,116,44,14,24,56,55, + 86,87,110,23,27,56,57,86,43,41,125,109,94,63,95,51,60,87,55,56,26,27,59,55,84,86,56,55,25,24,110,254,255,5,53,1,157,1,15,40, + 71,142,71,71,71,36,254,196,51,185,53,76,75,78,67,71,72,70,213,98,1,217,1,13,39,70,70,72,72,70,70,35,254,197,50,185,54,77,76,78, + 68,71,72,72,213,97,0,0,0,1,1,65,0,0,5,234,5,216,0,28,0,0,1,7,2,1,7,0,19,33,53,33,2,1,23,0,19,51,18,1, + 55,0,3,33,7,33,18,1,39,0,3,4,14,241,32,254,234,165,1,51,27,254,216,1,40,28,254,205,166,1,22,32,242,31,1,23,165,254,205,27, + 1,39,1,254,216,29,1,51,166,254,233,31,2,153,3,254,174,254,191,3,1,95,1,55,172,1,54,1,96,3,254,192,254,173,1,83,1,64,3,254, + 160,254,202,172,254,201,254,161,3,1,65,1,82,0,0,0,0,5,0,201,0,0,6,99,5,216,0,15,0,32,0,36,0,84,0,100,0,0,1,54, + 55,38,39,38,34,14,1,21,20,22,23,22,23,33,51,33,54,55,62,1,53,52,46,1,35,34,7,6,7,22,23,1,17,33,17,1,17,38,39,46, + 1,53,52,62,1,51,50,23,53,52,54,55,54,55,53,35,53,51,53,51,21,51,21,35,21,22,23,30,1,29,1,54,51,50,30,1,21,20,6,7, + 6,7,17,1,20,30,1,51,50,62,1,53,52,46,1,35,34,14,1,3,80,1,2,35,51,74,156,147,84,82,74,22,23,1,87,141,1,86,24,22, + 74,81,83,147,79,77,74,52,34,2,1,254,63,2,245,252,185,42,38,69,108,110,198,104,80,76,36,32,13,16,108,108,105,108,108,16,13,31,37,76, + 79,104,198,110,108,68,39,41,253,214,25,45,23,24,45,24,24,45,24,23,45,25,3,199,3,3,43,28,41,81,149,80,81,146,40,14,8,8,14,40, + 146,81,80,149,81,41,28,43,3,3,253,184,254,209,1,47,254,129,1,127,13,22,54,196,107,108,197,106,31,2,36,63,18,7,4,54,70,87,87,70, + 54,4,7,18,63,36,2,31,106,197,108,107,196,54,22,13,254,129,4,125,25,43,25,25,43,25,24,45,23,23,45,0,0,8,0,226,0,0,6,74, + 5,216,0,72,0,78,0,82,0,104,0,124,0,144,0,165,0,187,0,0,1,38,39,52,62,1,51,50,30,1,21,6,7,19,3,34,39,52,62,1, + 51,50,30,1,21,6,7,27,1,38,39,52,62,1,51,50,30,1,21,6,7,27,1,38,53,52,62,1,51,50,30,1,21,6,7,3,1,38,53,52, + 62,1,51,50,30,1,21,6,35,3,17,33,17,1,53,7,33,39,29,2,33,53,1,23,3,54,55,62,1,53,52,46,1,35,34,14,1,21,20,30, + 1,51,50,55,1,23,3,54,55,62,1,52,46,1,35,34,14,1,20,30,1,51,50,55,1,55,19,22,51,50,62,1,52,46,1,35,34,14,1,20, + 22,23,22,23,1,51,3,50,55,62,1,53,52,46,1,35,34,14,1,21,20,22,23,22,23,1,55,19,22,51,50,62,1,53,52,46,1,35,34,14, + 1,21,20,22,23,22,23,1,77,95,12,29,54,29,28,54,28,4,57,239,52,83,18,29,53,31,28,53,29,2,46,189,43,67,2,30,53,27,29,53, + 30,3,67,38,185,46,29,54,27,30,54,29,11,86,92,1,1,43,29,53,28,30,53,29,13,99,160,252,163,3,36,181,254,149,183,2,215,252,255,77, + 231,7,7,18,20,20,35,20,18,35,21,20,36,18,7,9,1,54,136,187,6,5,17,19,19,36,18,19,35,20,19,36,19,7,8,1,173,115,96,5, + 5,19,37,19,21,35,19,18,36,20,20,18,8,7,254,154,100,48,19,16,17,21,22,34,19,18,37,19,19,19,14,15,1,41,104,166,11,11,19,35, + 20,21,34,19,20,35,19,19,18,4,3,3,251,2,95,28,51,28,28,51,28,64,22,254,6,2,190,93,28,50,28,28,50,28,45,34,253,20,3,52, + 30,48,28,52,26,26,52,28,54,24,252,202,2,228,47,42,27,51,28,28,51,27,85,16,253,74,2,3,34,43,28,51,27,27,51,28,94,254,49,253, + 209,2,47,254,223,225,75,61,211,48,164,164,1,84,42,2,14,3,4,10,35,19,20,35,20,20,35,20,19,35,20,1,253,248,32,2,249,2,3,10, + 35,38,36,19,19,36,38,35,20,1,253,19,27,2,209,1,20,35,38,36,19,19,36,38,35,10,5,2,253,10,3,66,10,10,35,20,19,35,20,20, + 35,19,20,35,10,8,2,252,218,42,1,234,3,21,34,20,19,36,19,19,36,19,20,34,11,2,2,0,0,5,1,85,255,254,5,214,5,214,0,29, + 0,33,0,39,0,45,0,50,0,0,1,33,21,51,53,33,21,35,21,7,17,23,21,51,21,33,53,51,53,55,51,17,35,39,53,35,53,33,21,51, + 1,53,33,21,1,55,53,33,21,23,17,7,21,33,53,39,53,17,55,33,17,3,8,1,21,171,1,14,115,92,92,115,251,127,115,93,1,1,93,115, + 1,9,170,2,151,251,238,3,74,82,252,218,82,73,3,20,74,1,253,126,5,214,155,155,162,144,150,253,183,149,143,163,163,143,152,2,69,151,144,162, + 155,250,251,55,55,3,234,131,95,95,131,253,118,116,128,128,116,52,2,33,2,253,221,0,0,4,1,182,0,0,5,118,5,216,0,55,0,67,0,81, + 0,94,0,0,1,38,53,52,55,54,55,38,39,38,39,53,54,55,54,55,54,55,38,39,38,53,52,62,1,51,50,30,1,21,20,7,6,7,22,23, + 22,23,22,23,21,6,7,6,7,22,23,22,21,20,7,6,7,1,33,9,1,53,51,53,35,53,35,21,35,21,51,21,19,54,53,52,46,1,34,14, + 1,21,20,23,3,33,0,20,30,1,50,62,1,52,46,1,35,34,6,2,203,31,32,8,11,60,36,41,1,1,41,43,78,28,30,26,17,22,45,78, + 42,41,78,45,21,16,26,28,29,77,44,42,1,1,42,37,58,11,8,31,32,2,2,1,26,252,64,1,15,1,12,172,172,118,172,172,162,60,45,77, + 84,77,45,63,222,2,138,254,75,29,53,58,54,29,30,54,28,29,52,1,148,53,57,60,53,17,14,38,63,72,80,4,80,73,75,42,14,10,18,29, + 39,41,43,75,42,42,75,43,41,39,29,19,9,14,42,75,73,80,4,80,72,62,38,15,17,53,60,58,54,3,4,254,117,1,148,1,78,124,108,124, + 124,108,124,254,178,45,73,43,78,41,41,78,43,64,54,254,172,5,25,58,53,28,28,53,58,53,27,27,0,4,1,81,0,0,5,219,5,216,0,41, + 0,53,0,62,0,111,0,0,1,54,53,52,38,53,52,55,22,21,20,7,0,19,33,38,53,52,0,61,1,6,7,6,7,39,7,38,39,54,53,52, + 39,54,55,46,1,53,52,55,22,23,3,54,59,1,6,21,20,43,1,34,39,53,3,23,20,7,35,34,61,1,54,19,38,39,6,21,20,22,21,20, + 7,6,7,22,21,20,7,22,23,55,7,54,55,54,55,22,21,20,0,21,20,23,37,2,1,50,53,35,54,53,52,38,39,6,21,20,22,21,20,7, + 3,30,4,22,70,122,8,1,234,45,252,54,13,1,138,90,56,46,158,9,44,139,31,78,2,48,72,21,7,33,104,54,162,37,96,6,43,69,21,8, + 4,6,7,72,10,28,41,216,35,77,25,29,11,59,44,4,74,25,103,97,35,135,29,105,82,11,254,130,12,3,107,39,254,18,1,4,31,13,77,31, + 18,8,4,232,8,11,21,43,14,49,94,104,103,26,27,254,189,252,111,56,58,160,1,40,64,6,115,3,142,18,22,30,46,80,249,192,30,28,109,122, + 32,19,5,27,110,27,120,254,235,63,46,35,49,30,15,254,112,35,52,15,30,23,49,2,167,96,38,62,37,27,33,18,16,15,97,99,44,44,197,192, + 76,24,72,74,10,144,4,173,30,30,120,254,236,125,54,52,1,3,55,1,124,1,10,43,12,79,74,74,41,19,33,19,17,15,0,0,0,4,1,48, + 255,255,5,251,5,215,0,13,0,29,0,80,0,91,0,0,0,20,30,1,51,50,62,1,52,46,1,35,34,6,19,20,30,1,51,50,62,1,53,52, + 46,1,35,34,14,1,1,21,33,53,7,38,53,52,18,55,54,55,38,39,38,53,52,54,55,54,55,38,39,38,52,62,1,51,50,30,1,20,7,6, + 7,22,23,30,1,21,20,7,6,7,22,23,22,18,21,20,7,39,38,39,46,1,35,34,6,7,6,7,2,191,58,101,55,57,101,56,57,102,55,54, + 101,96,16,28,15,16,28,16,16,29,15,14,29,16,2,91,251,217,83,11,165,146,38,40,30,21,42,85,77,27,29,26,15,23,44,78,41,40,78,45, + 21,17,25,27,30,75,86,41,22,30,38,38,147,166,12,92,4,64,69,245,128,129,245,67,65,4,3,193,112,100,56,56,100,112,103,54,54,1,14,16, + 27,15,15,27,16,15,28,16,16,28,250,187,1,1,1,57,58,160,1,37,78,21,15,29,38,75,82,83,151,42,14,10,19,29,39,84,77,42,42,77, + 84,39,29,20,9,14,42,151,83,82,75,38,29,16,20,78,254,219,160,58,57,132,125,113,121,131,131,121,113,125,0,0,0,8,0,201,0,0,6,99, + 5,216,0,15,0,32,0,36,0,84,0,100,0,104,0,121,0,138,0,0,1,54,55,38,39,38,34,14,1,21,20,22,23,22,23,33,51,33,54,55, + 62,1,53,52,46,1,35,34,7,6,7,22,23,1,17,33,17,1,17,38,39,46,1,53,52,62,1,51,50,23,53,52,54,55,54,55,53,35,53,51, + 53,51,21,51,21,35,21,22,23,30,1,29,1,54,51,50,30,1,21,20,6,7,6,7,17,1,20,30,1,51,50,62,1,53,52,46,1,35,34,14, + 1,1,21,33,53,55,33,38,39,46,1,53,52,62,1,51,50,23,22,23,6,21,51,52,39,54,55,54,51,50,30,1,21,20,6,7,6,7,33,3, + 80,1,2,35,51,74,156,147,84,82,74,22,23,1,87,141,1,86,24,22,74,81,83,147,79,77,74,52,34,2,1,254,63,2,245,252,185,42,38,69, + 108,110,198,104,80,76,36,32,13,16,108,108,105,108,108,16,13,31,37,76,79,104,198,110,108,68,39,41,253,214,25,45,23,24,45,24,24,45,24,23, + 45,25,1,164,253,115,206,254,232,18,17,61,66,68,119,64,62,61,41,29,2,241,2,29,41,61,61,65,119,68,66,61,18,18,254,233,3,199,3,3, + 43,28,41,81,149,80,81,146,40,14,8,8,14,40,146,81,80,149,81,41,28,43,3,3,253,184,254,209,1,47,254,129,1,127,13,22,54,196,107,108, + 197,106,31,2,36,63,18,7,4,54,70,87,87,70,54,4,7,18,63,36,2,31,106,197,108,107,196,54,22,13,254,129,4,125,25,43,25,25,43,25, + 24,45,23,23,45,252,182,200,200,206,7,12,33,121,67,66,123,67,33,23,36,3,2,2,3,36,23,33,67,123,66,67,121,33,12,7,0,3,0,226, + 0,0,6,74,5,216,0,72,0,76,0,80,0,0,1,38,39,52,62,1,51,50,30,1,21,6,7,19,3,34,39,52,62,1,51,50,30,1,21,6, + 7,27,1,38,39,52,62,1,51,50,30,1,21,6,7,27,1,38,53,52,62,1,51,50,30,1,21,6,7,3,1,38,53,52,62,1,51,50,30,1, + 21,6,35,3,17,33,17,5,53,33,21,1,53,33,21,1,77,95,12,29,54,29,28,54,28,4,57,239,52,83,18,29,53,31,28,53,29,2,46,189, + 43,67,2,30,53,27,29,53,30,3,67,38,185,46,29,54,27,30,54,29,11,86,92,1,1,43,29,53,28,30,53,29,13,99,160,252,163,3,36,253, + 41,2,215,253,41,3,251,2,95,28,51,28,28,51,28,64,22,254,6,2,190,93,28,50,28,28,50,28,45,34,253,20,3,52,30,48,28,52,26,26, + 52,28,54,24,252,202,2,228,47,42,27,51,28,28,51,27,85,16,253,74,2,3,34,43,28,51,27,27,51,28,94,254,49,253,209,2,47,203,78,78, + 254,214,79,79,0,4,1,85,255,254,5,214,5,214,0,3,0,7,0,37,0,41,0,0,1,53,33,21,1,53,33,21,19,33,21,51,53,33,21,35, + 21,7,17,23,21,51,21,33,53,51,53,55,51,17,35,39,53,35,53,33,21,51,1,53,33,21,4,214,253,128,2,202,252,236,252,1,21,171,1,14, + 115,92,92,115,251,127,115,93,1,1,93,115,1,9,170,2,151,251,238,4,132,94,94,252,47,111,111,5,35,155,155,162,144,150,253,183,149,143,163,163, + 143,152,2,69,151,144,162,155,250,251,55,55,0,2,1,182,0,0,5,118,5,216,0,52,0,64,0,0,1,52,55,54,55,38,39,38,39,53,54,55, + 54,55,54,55,38,39,38,53,52,62,1,51,50,30,1,21,20,7,6,7,22,23,22,23,22,23,21,6,7,6,7,22,23,22,21,20,7,1,33,1, + 38,1,53,51,53,35,53,35,21,35,21,51,21,2,172,32,8,11,60,36,41,1,1,41,43,78,28,30,26,17,22,45,78,42,41,78,45,21,16,26, + 28,29,77,44,42,1,1,42,37,58,11,8,31,32,1,22,252,64,1,15,25,1,37,172,172,118,172,172,2,2,60,53,17,14,38,63,72,80,4,80, + 73,75,42,14,10,18,29,39,41,43,75,42,42,75,43,41,39,29,19,9,14,42,75,73,80,4,80,72,62,38,15,17,53,60,58,54,254,110,1,148, + 53,1,25,124,108,124,124,108,124,0,0,0,0,4,1,76,0,0,5,224,5,216,0,51,0,63,0,72,0,78,0,0,1,54,53,52,38,53,52,55, + 30,1,21,20,7,51,20,35,0,19,33,38,53,52,0,53,52,39,6,43,1,6,35,34,35,55,7,38,39,54,53,52,39,54,55,54,53,52,38,53, + 52,55,22,23,7,21,22,59,1,50,53,52,55,35,34,7,3,21,20,59,1,54,53,39,34,1,23,0,19,51,2,3,22,37,30,58,85,15,34,4, + 2,2,24,45,252,54,13,1,149,1,66,117,10,90,103,4,3,48,107,114,27,88,2,48,99,3,45,20,104,56,170,4,8,21,69,43,6,96,37,115, + 28,10,72,7,62,1,201,52,1,119,6,77,45,4,230,23,39,25,57,22,46,30,81,89,13,47,12,1,254,172,252,111,56,58,160,1,27,113,8,7, + 167,146,104,80,28,83,229,190,27,26,109,104,10,9,28,26,35,37,66,27,122,255,16,30,49,34,48,64,254,41,24,29,15,53,34,2,64,89,254,243, + 253,4,3,82,0,1,1,48,255,255,5,251,5,215,0,46,0,0,5,38,53,52,18,55,54,55,38,39,38,53,52,54,55,54,55,38,39,38,52,62, + 1,51,50,30,1,20,7,6,7,22,23,30,1,21,20,7,6,7,22,23,22,18,21,20,7,1,59,11,165,146,38,40,30,21,42,85,77,27,29,26, + 15,23,44,78,41,40,78,45,21,17,25,27,30,75,86,41,22,30,38,38,147,166,12,1,57,58,160,1,37,78,21,15,29,38,75,82,83,151,42,14, + 10,19,29,39,84,77,42,42,77,84,39,29,20,9,14,42,151,83,82,75,38,29,16,20,78,254,219,160,58,57,0,0,0,1,1,67,0,0,5,232, + 5,212,0,35,0,0,1,22,19,18,23,22,29,1,20,7,6,35,34,39,35,21,16,23,35,53,54,17,39,35,7,6,35,34,47,1,53,52,55,0, + 63,1,3,152,94,216,237,6,39,162,53,64,154,95,42,83,215,85,3,38,47,85,127,187,76,9,187,1,59,89,3,5,212,167,254,236,254,234,57,85, + 80,40,167,96,22,221,12,254,229,150,6,151,1,29,3,88,133,209,73,46,183,203,1,130,165,3,0,0,0,2,0,185,0,1,6,115,5,209,0,24, + 0,50,0,0,1,50,19,22,21,50,55,18,51,50,23,22,29,1,16,7,0,7,35,1,38,53,52,55,54,3,21,20,23,1,51,1,54,61,1,52, + 39,38,35,32,3,6,21,35,52,39,38,35,34,7,6,2,42,218,116,28,6,13,112,235,209,122,38,221,254,61,60,6,253,160,120,199,81,229,208,1, + 219,3,2,62,104,189,71,58,254,248,86,10,6,72,101,189,174,107,37,5,209,254,237,80,24,70,1,53,211,78,80,13,254,254,231,253,217,66,2,237, + 178,182,210,124,45,254,143,16,219,228,253,188,2,187,161,151,38,172,112,28,254,65,38,26,78,209,224,177,70,0,0,0,0,2,1,88,0,0,5,210, + 5,212,0,8,0,13,0,0,9,1,21,0,7,38,1,38,53,9,4,3,150,2,60,253,227,31,15,254,23,70,2,58,254,3,2,1,2,1,254,94, + 5,212,253,26,7,253,59,34,11,2,128,86,13,2,150,253,103,253,100,2,156,2,30,0,0,1,0,228,0,0,6,71,5,212,0,55,0,0,1,50, + 23,22,23,20,15,1,51,54,59,1,50,23,22,21,20,7,6,7,34,3,35,21,16,23,21,35,39,54,17,53,35,2,35,34,39,38,53,52,55,54, + 59,1,50,23,51,53,38,39,38,61,1,52,55,54,3,151,214,101,13,3,120,60,3,74,84,19,238,96,23,209,40,71,242,101,3,82,208,6,85,3, + 100,245,191,102,25,246,66,51,9,86,78,3,84,29,60,215,71,5,212,227,52,56,117,160,60,28,202,66,60,205,104,12,6,1,18,9,254,169,109,6, + 6,128,1,77,3,254,235,201,68,58,233,83,12,28,3,71,69,110,81,14,201,104,19,0,0,3,1,66,0,1,5,234,5,213,0,34,0,60,0,66, + 0,0,1,22,1,22,29,1,20,7,6,43,1,34,39,35,21,16,23,35,53,54,17,35,7,6,43,1,34,39,38,53,55,53,52,55,0,55,6,1, + 6,21,22,23,22,59,1,50,55,51,50,23,22,59,1,50,55,54,61,1,52,39,2,3,51,38,39,34,7,3,151,126,1,127,86,181,34,48,22,145, + 98,42,83,215,86,42,56,85,105,22,160,81,25,3,206,1,34,95,124,254,174,81,10,148,22,41,16,119,96,183,7,31,83,103,19,137,65,10,203,230, + 142,63,13,15,6,16,5,213,225,254,54,139,134,3,209,78,16,218,13,254,232,155,6,151,1,35,101,117,174,66,63,13,3,200,212,1,103,73,199,254, + 111,130,133,187,53,9,218,70,148,167,40,30,31,176,207,1,31,251,112,23,90,82,0,0,0,1,0,182,0,0,6,119,5,212,0,23,0,0,1,50, + 23,22,23,51,54,55,54,51,50,23,22,21,20,7,1,35,1,38,53,52,55,54,2,40,203,116,42,2,3,35,92,108,135,209,126,32,208,253,239,6, + 253,206,168,199,84,5,212,235,93,49,162,107,108,224,83,73,250,227,253,133,2,177,205,218,211,124,45,0,0,1,1,88,0,0,5,210,5,212,0,8, + 0,0,9,1,22,21,1,38,1,52,55,3,150,1,247,69,253,196,12,253,206,111,5,212,253,115,85,13,253,27,8,2,221,14,138,0,0,3,0,228, + 0,0,6,72,5,220,0,50,0,96,0,103,0,0,1,50,23,22,21,20,15,1,54,59,1,50,23,22,21,20,7,6,7,34,3,35,21,16,23,21, + 35,39,54,17,53,35,2,35,34,39,38,53,52,55,54,59,1,50,23,38,39,53,52,55,54,3,20,31,1,21,38,43,1,34,15,1,20,23,22,51, + 50,19,54,55,51,22,23,22,51,50,55,54,61,1,52,47,1,35,34,7,53,54,55,54,53,52,39,38,35,34,7,1,20,7,51,53,38,53,3,155, + 203,104,25,114,22,31,61,41,248,92,16,210,34,73,241,102,3,82,209,6,85,3,100,246,192,103,25,247,67,51,38,61,31,99,28,216,71,240,169,12, + 107,118,9,243,61,7,136,61,78,210,114,16,22,7,37,83,90,158,168,85,12,253,54,6,118,107,129,32,26,187,54,41,184,83,1,7,28,60,28,5, + 220,206,70,57,132,166,23,6,215,56,58,211,100,12,7,1,20,9,254,167,109,6,6,128,1,79,4,254,232,203,69,58,235,82,12,6,112,177,38,203, + 105,19,254,179,155,204,12,3,9,212,67,148,93,38,1,39,27,65,120,134,133,190,46,43,6,222,48,3,9,3,137,110,77,44,182,87,16,200,251,206, + 28,96,3,99,22,0,0,0,0,4,0,216,255,254,6,84,5,212,0,16,0,33,0,49,0,77,0,0,1,51,20,6,7,20,22,23,35,38,39,38, + 39,48,53,52,54,37,51,20,6,7,20,22,19,35,38,39,38,39,52,53,52,54,5,51,20,6,7,20,22,23,35,38,39,38,39,53,52,54,19,30, + 1,21,20,6,4,32,36,38,53,52,54,55,51,6,7,6,20,22,4,32,36,54,52,39,38,39,2,118,13,145,2,204,7,13,29,163,48,15,165,1, + 65,13,146,2,205,6,13,29,162,49,15,166,1,89,13,146,2,205,6,13,28,163,49,15,166,44,168,190,185,254,177,254,148,254,177,185,189,168,3,131, + 75,86,167,1,46,1,74,1,47,166,86,76,131,5,57,63,155,99,130,121,201,166,116,51,90,14,114,136,237,96,237,151,197,187,254,206,251,178,78,139, + 8,9,177,209,91,79,196,125,161,154,253,208,145,66,114,14,145,173,254,30,49,177,97,96,176,98,98,176,96,97,177,49,41,69,77,168,152,85,85,152, + 168,77,69,41,0,1,0,172,255,246,2,183,5,213,0,17,0,0,1,51,23,17,20,15,1,35,34,47,1,52,63,1,50,23,51,17,2,104,72,7, + 196,48,35,212,28,4,211,33,99,90,4,5,213,8,250,253,163,45,4,133,31,130,24,5,64,4,212,0,0,1,0,172,255,246,4,111,5,213,0,29, + 0,0,1,51,23,21,22,23,22,21,20,7,35,39,54,53,52,39,38,39,17,20,7,35,34,53,52,55,51,50,23,17,2,88,87,8,27,173,240,122, + 4,30,61,228,92,25,224,57,242,212,23,96,89,5,213,7,39,54,63,70,138,146,96,32,49,84,70,71,42,26,251,214,153,45,168,131,23,64,4,214, + 0,1,1,120,255,47,5,179,5,213,0,30,0,0,1,5,23,17,20,7,35,34,61,1,52,63,1,50,23,17,37,17,20,15,1,35,34,61,1,52, + 63,1,50,23,17,2,253,2,179,3,192,54,213,177,39,86,81,253,220,150,67,26,216,170,43,89,80,5,213,202,4,250,237,155,42,164,4,126,22,3, + 58,4,11,169,251,219,137,56,8,155,7,122,34,4,67,4,211,0,0,0,0,2,0,188,255,246,6,111,5,213,0,24,0,28,0,0,1,23,17,20, + 5,34,39,52,55,50,23,51,17,33,17,6,7,35,32,53,52,55,50,23,17,23,21,33,53,6,107,4,254,251,233,18,233,109,79,3,252,165,8,242, + 4,254,254,236,100,88,88,3,91,5,213,4,251,18,213,21,164,138,14,59,2,149,253,90,207,36,177,125,16,64,4,225,207,156,156,0,0,2,0,181, + 255,250,3,34,5,217,0,12,0,21,0,0,19,51,23,17,51,54,51,22,19,2,5,39,17,19,17,36,17,54,53,52,39,34,187,45,5,3,170,145, + 227,20,29,253,179,3,56,1,162,1,149,119,5,217,6,252,63,237,3,254,255,254,87,88,3,5,214,251,212,254,157,99,1,49,13,12,148,8,0,0, + 0,2,0,172,0,0,2,48,5,217,0,13,0,19,0,0,19,51,23,17,37,23,17,7,35,39,17,5,35,17,19,17,51,37,17,35,177,41,6,1, + 78,2,4,40,5,254,175,2,52,2,1,29,2,5,217,5,254,47,161,2,251,99,5,5,1,229,160,4,138,253,153,254,125,144,1,127,0,2,0,173, + 0,0,3,52,5,217,0,40,0,44,0,0,1,51,23,17,55,23,21,6,7,17,55,21,6,7,17,7,35,39,17,5,17,7,35,39,17,7,53,52, + 55,17,35,7,53,55,17,55,51,23,17,37,17,1,17,37,17,2,135,46,5,119,3,3,119,122,1,121,5,46,5,254,224,5,42,5,129,129,2,127, + 129,5,42,5,1,32,254,224,1,32,5,217,5,254,208,60,2,141,7,60,254,139,55,135,4,67,254,215,4,4,1,17,140,254,166,4,4,1,65,60, + 142,6,60,1,123,56,139,65,1,31,4,4,254,250,134,1,77,253,150,254,135,139,1,116,0,1,0,172,0,0,5,80,5,217,0,72,0,0,1,35, + 48,35,34,7,35,34,39,53,54,53,52,39,53,54,55,51,22,59,1,53,52,39,53,54,55,51,22,50,55,51,22,23,21,6,29,1,51,50,55,51, + 22,23,21,6,21,20,23,21,6,43,1,38,43,2,17,20,23,21,6,7,35,38,34,7,35,38,39,53,54,53,2,182,168,4,179,80,56,24,11,99, + 99,2,32,57,83,181,167,131,3,29,58,45,140,45,58,29,3,131,163,181,83,56,33,2,99,99,11,25,55,80,179,4,164,131,3,29,58,45,140,45, + 58,29,3,131,3,17,90,35,59,49,55,70,45,58,29,3,131,175,181,83,56,33,2,99,99,2,33,56,83,181,175,131,3,29,58,45,70,55,49,59, + 35,90,254,82,181,83,57,32,2,99,99,2,32,57,83,181,0,6,0,132,0,0,5,156,5,217,0,6,0,13,0,20,0,27,0,59,0,71,0,0, + 1,6,7,22,23,55,53,5,21,23,54,55,38,39,1,38,39,6,7,23,51,3,35,7,22,23,54,55,3,51,55,22,23,6,7,39,35,17,23,6, + 7,38,39,55,17,35,7,38,39,54,55,23,51,53,39,54,55,22,23,15,1,21,35,21,51,17,51,17,51,53,35,53,1,59,22,48,47,23,95,2, + 237,94,23,47,47,23,254,134,44,47,44,45,68,45,1,45,67,45,44,46,45,7,228,208,10,122,122,10,208,228,126,106,105,104,104,126,228,208,11,122, + 122,11,208,228,126,104,105,104,106,126,110,116,116,54,116,116,3,180,45,46,44,45,67,46,1,46,67,46,44,46,45,1,110,23,47,47,23,95,252,82, + 95,23,47,47,23,2,247,126,105,106,104,104,126,254,78,208,11,121,121,11,208,1,178,126,104,105,105,105,126,214,209,11,122,122,11,209,115,159,46,254, + 128,1,128,46,159,0,0,0,0,12,0,172,0,0,6,129,5,172,0,20,0,35,0,46,0,54,0,67,0,77,0,104,0,119,0,140,0,151,0,166, + 0,175,0,0,1,33,50,31,1,55,51,50,21,3,33,39,53,54,55,53,2,39,38,61,1,7,51,50,23,22,21,2,7,35,36,39,53,18,55,54, + 5,21,19,7,21,51,55,7,38,47,1,1,23,19,38,43,1,34,7,1,22,19,23,21,20,7,6,43,1,38,3,53,23,19,51,50,63,1,52,47, + 1,6,37,51,50,23,22,21,7,35,39,2,15,1,23,7,35,38,3,38,61,1,52,63,1,35,39,53,55,23,21,23,51,21,20,7,21,22,23,19, + 51,23,53,39,1,51,23,21,33,50,55,51,23,21,6,3,6,43,1,21,7,35,2,61,1,39,23,17,7,33,34,47,1,53,52,55,5,7,23,51, + 53,52,59,1,50,63,1,33,38,61,1,5,6,7,21,20,31,1,33,17,3,40,1,139,58,29,77,98,8,5,173,254,164,5,18,82,187,16,46,113, + 23,112,55,30,176,16,3,254,211,4,158,17,44,1,18,202,22,202,95,28,113,16,20,253,30,240,160,62,77,28,84,44,3,155,18,149,5,80,23,36, + 146,12,180,54,156,133,54,36,2,48,95,228,253,19,20,9,117,51,5,5,100,180,15,3,5,7,3,22,173,20,85,20,2,100,5,128,18,3,116,1, + 156,200,2,28,95,2,125,5,5,1,115,42,36,2,5,6,196,25,34,195,5,8,172,82,8,5,254,214,116,48,6,88,2,88,95,95,5,8,231,22, + 47,105,254,107,8,253,184,61,6,90,30,1,14,5,172,71,134,56,7,254,212,5,5,17,42,5,1,70,20,22,4,5,13,128,49,10,254,198,17,172, + 8,2,1,26,8,46,23,2,254,157,15,3,173,13,197,13,5,254,209,138,1,23,144,102,254,245,17,254,239,41,20,77,67,18,11,1,61,5,15,254, + 234,103,26,57,69,162,129,107,215,79,13,5,57,254,203,33,21,40,5,27,1,45,26,31,7,28,131,41,59,5,5,38,5,13,2,8,198,10,26,254, + 1,93,8,3,172,254,212,5,116,33,5,2,21,254,177,29,121,5,1,34,13,3,179,7,254,165,5,134,38,13,50,124,12,172,170,8,28,98,179,1, + 20,8,29,97,36,10,85,43,6,1,21,0,0,4,0,156,0,32,6,143,5,217,0,10,0,35,0,56,0,77,0,0,1,51,17,7,53,55,51,17, + 51,21,33,5,38,53,52,63,1,39,55,19,39,7,6,21,20,23,22,51,50,55,33,21,33,34,39,38,37,6,7,35,21,39,55,21,51,54,55,54, + 53,52,39,3,55,19,22,21,20,1,22,31,1,55,3,39,55,39,38,35,34,7,6,7,3,39,19,54,55,54,2,213,171,186,202,127,171,254,27,253, + 243,44,38,84,62,235,24,61,99,7,23,35,93,15,16,1,150,254,28,75,57,46,5,139,85,175,167,210,210,198,58,25,7,49,202,136,243,37,252,230, + 169,96,84,63,25,234,60,99,34,52,7,7,63,53,204,136,241,39,56,47,1,234,1,154,26,97,30,254,1,92,184,77,79,72,75,146,36,107,254,255, + 36,172,20,19,35,32,44,1,159,33,27,97,147,10,73,151,149,70,11,55,17,19,52,72,1,96,79,254,93,66,65,54,4,158,1,146,145,36,254,255, + 107,35,172,40,1,9,107,254,161,78,1,164,65,33,27,0,0,4,0,156,0,32,6,143,5,217,0,28,0,53,0,74,0,95,0,0,1,33,21,33, + 53,62,1,55,62,1,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,6,7,14,1,1,38,53,52,63,1,39,55,19,39,7,6,21,20,23, + 22,51,50,55,33,21,33,34,39,38,37,6,7,35,21,39,55,21,51,54,55,54,53,52,39,3,55,19,22,21,20,1,22,31,1,55,3,39,55,39, + 38,35,34,7,6,7,3,39,19,54,55,54,3,93,1,84,253,241,64,205,25,49,36,74,60,47,103,89,76,112,48,127,154,38,48,14,139,253,10,44, + 38,84,62,235,24,61,99,7,23,35,93,15,16,1,150,254,28,75,57,46,5,139,85,175,167,210,210,198,58,25,7,49,202,136,243,37,252,230,169,96, + 84,63,25,234,60,99,34,52,7,7,63,53,204,136,241,39,56,47,1,210,93,85,49,158,21,41,56,26,40,51,24,38,110,25,20,99,81,38,68,45, + 13,109,254,186,77,79,72,75,146,36,107,254,255,36,172,20,19,35,32,44,1,159,33,27,97,147,10,73,151,149,70,11,55,17,19,52,72,1,96,79, + 254,93,66,65,54,4,158,1,146,145,36,254,255,107,35,172,40,1,9,107,254,161,78,1,164,65,33,27,0,4,0,156,0,32,6,143,5,217,0,40, + 0,65,0,86,0,107,0,0,1,30,1,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7, + 53,62,1,51,50,22,21,20,6,1,38,53,52,63,1,39,55,19,39,7,6,21,20,23,22,51,50,55,33,21,33,34,39,38,37,6,7,35,21,39, + 55,21,51,54,55,54,53,52,39,3,55,19,22,21,20,1,22,31,1,55,3,39,55,39,38,35,34,7,6,7,3,39,19,54,55,54,4,90,11,95, + 173,157,51,108,70,72,101,53,94,92,86,79,111,115,72,71,74,73,41,96,86,75,109,49,129,154,83,252,106,44,38,84,62,235,24,61,99,7,23,35, + 93,15,16,1,150,254,28,75,57,46,5,139,85,175,167,210,210,198,58,25,7,49,202,136,243,37,252,230,169,96,84,63,25,234,60,99,34,52,7,7, + 63,53,204,136,241,39,56,47,2,190,2,83,60,92,101,14,18,108,30,18,50,51,45,50,91,39,38,39,41,14,20,98,15,13,89,75,52,74,254,24, + 77,79,72,75,146,36,107,254,255,36,172,20,19,35,32,44,1,159,33,27,97,147,10,73,151,149,70,11,55,17,19,52,72,1,96,79,254,93,66,65, + 54,4,158,1,146,145,36,254,255,107,35,172,40,1,9,107,254,161,78,1,164,65,33,27,0,5,0,156,0,32,6,143,5,217,0,2,0,13,0,38, + 0,59,0,80,0,0,1,3,51,3,51,17,51,21,35,21,35,53,33,53,1,38,53,52,63,1,39,55,19,39,7,6,21,20,23,22,51,50,55,33, + 21,33,34,39,38,37,6,7,35,21,39,55,21,51,54,55,54,53,52,39,3,55,19,22,21,20,1,22,31,1,55,3,39,55,39,38,35,34,7,6, + 7,3,39,19,54,55,54,3,182,230,230,20,177,121,121,157,254,130,254,144,44,38,84,62,235,24,61,99,7,23,35,93,15,16,1,150,254,28,75,57, + 46,5,139,85,175,167,210,210,198,58,25,7,49,202,136,243,37,252,230,169,96,84,63,25,234,60,99,34,52,7,7,63,53,204,136,241,39,56,47,3, + 82,254,255,1,138,254,118,95,142,142,96,254,132,77,79,72,75,146,36,107,254,255,36,172,20,19,35,32,44,1,159,33,27,97,147,10,73,151,149,70, + 11,55,17,19,52,72,1,96,79,254,93,66,65,54,4,158,1,146,145,36,254,255,107,35,172,40,1,9,107,254,161,78,1,164,65,33,27,0,0,0, + 0,4,0,156,0,32,6,143,5,217,0,29,0,54,0,75,0,96,0,0,1,33,21,33,21,6,54,51,50,22,21,20,6,35,34,38,39,53,30,1, + 51,50,54,53,52,38,35,34,6,7,1,38,53,52,63,1,39,55,19,39,7,6,21,20,23,22,51,50,55,33,21,33,34,39,38,37,6,7,35,21, + 39,55,21,51,54,55,54,53,52,39,3,55,19,22,21,20,1,22,31,1,55,3,39,55,39,38,35,34,7,6,7,3,39,19,54,55,54,2,187,1, + 195,254,197,2,49,24,139,162,167,150,50,104,70,76,93,53,82,93,93,82,39,80,70,254,13,44,38,84,62,235,24,61,99,7,23,35,93,15,16,1, + 150,254,28,75,57,46,5,139,85,175,167,210,210,198,58,25,7,49,202,136,243,37,252,230,169,96,84,63,25,234,60,99,34,52,7,7,63,53,204,136, + 241,39,56,47,3,208,95,112,1,7,116,99,100,114,14,15,114,31,18,64,56,57,64,13,25,254,83,77,79,72,75,146,36,107,254,255,36,172,20,19, + 35,32,44,1,159,33,27,97,147,10,73,151,149,70,11,55,17,19,52,72,1,96,79,254,93,66,65,54,4,158,1,146,145,36,254,255,107,35,172,40, + 1,9,107,254,161,78,1,164,65,33,27,0,0,5,0,156,0,32,6,143,5,217,0,9,0,34,0,59,0,80,0,101,0,0,1,34,6,20,22,51, + 50,54,52,38,19,21,46,1,35,34,6,7,6,54,51,50,22,21,20,6,35,34,38,53,52,54,51,50,22,1,38,53,52,63,1,39,55,19,39,7, + 6,21,20,23,22,51,50,55,33,21,33,34,39,38,37,6,7,35,21,39,55,21,51,54,55,54,53,52,39,3,55,19,22,21,20,1,22,31,1,55, + 3,39,55,39,38,35,34,7,6,7,3,39,19,54,55,54,3,134,55,68,68,55,58,66,66,153,61,70,34,87,92,3,7,93,56,117,135,141,117,133, + 140,169,146,38,77,252,165,44,38,84,62,235,24,61,99,7,23,35,93,15,16,1,150,254,28,75,57,46,5,139,85,175,167,210,210,198,58,25,7,49, + 202,136,243,37,252,230,169,96,84,63,25,234,60,99,34,52,7,7,63,53,204,136,241,39,56,47,2,188,65,118,64,64,118,65,1,14,102,22,14,96, + 53,7,40,115,97,95,116,165,150,143,174,12,252,253,77,79,72,75,146,36,107,254,255,36,172,20,19,35,32,44,1,159,33,27,97,147,10,73,151,149, + 70,11,55,17,19,52,72,1,96,79,254,93,66,65,54,4,158,1,146,145,36,254,255,107,35,172,40,1,9,107,254,161,78,1,164,65,33,27,0,0, + 0,4,0,156,0,32,6,143,5,217,0,6,0,31,0,52,0,73,0,0,1,33,21,1,35,19,33,1,38,53,52,63,1,39,55,19,39,7,6,21, + 20,23,22,51,50,55,33,21,33,34,39,38,37,6,7,35,21,39,55,21,51,54,55,54,53,52,39,3,55,19,22,21,20,1,22,31,1,55,3,39, + 55,39,38,35,34,7,6,7,3,39,19,54,55,54,2,162,2,2,254,240,147,254,254,163,254,38,44,38,84,62,235,24,61,99,7,23,35,93,15,16, + 1,150,254,28,75,57,46,5,139,85,175,167,210,210,198,58,25,7,49,202,136,243,37,252,230,169,96,84,63,25,234,60,99,34,52,7,7,63,53,204, + 136,241,39,56,47,3,186,50,253,185,2,26,253,123,77,79,72,75,146,36,107,254,255,36,172,20,19,35,32,44,1,159,33,27,97,147,10,73,151,149, + 70,11,55,17,19,52,72,1,96,79,254,93,66,65,54,4,158,1,146,145,36,254,255,107,35,172,40,1,9,107,254,161,78,1,164,65,33,27,0,0, + 0,3,0,156,0,32,6,143,5,217,0,24,0,45,0,66,0,0,55,38,53,52,63,1,39,55,19,39,7,6,21,20,23,22,51,50,55,33,21,33, + 34,39,38,37,6,7,35,21,39,55,21,51,54,55,54,53,52,39,3,55,19,22,21,20,1,22,31,1,55,3,39,55,39,38,35,34,7,6,7,3, + 39,19,54,55,54,200,44,38,84,62,235,24,61,99,7,23,35,93,15,16,1,150,254,28,75,57,46,5,139,85,175,167,210,210,198,58,25,7,49,202, + 136,243,37,252,230,169,96,84,63,25,234,60,99,34,52,7,7,63,53,204,136,241,39,56,47,214,77,79,72,75,146,36,107,254,255,36,172,20,19,35, + 32,44,1,159,33,27,97,147,10,73,151,149,70,11,55,17,19,52,72,1,96,79,254,93,66,65,54,4,158,1,146,145,36,254,255,107,35,172,40,1, + 9,107,254,161,78,1,164,65,33,27,0,0,0,6,0,172,0,0,6,127,5,161,0,16,0,26,0,39,0,57,0,72,0,82,0,0,1,33,50,31, + 1,55,51,21,2,7,33,53,54,55,3,38,35,7,50,31,1,3,36,39,18,55,54,1,18,21,23,20,7,6,43,1,38,3,54,55,5,18,23,39, + 2,15,1,23,35,3,39,54,55,54,53,39,53,51,1,51,21,33,50,55,51,20,3,6,43,1,21,35,3,39,23,17,7,33,34,47,1,52,55,3, + 42,1,134,58,33,74,99,6,157,16,254,169,97,5,198,35,13,102,105,42,49,193,254,245,27,149,22,49,3,90,166,2,97,15,40,125,14,175,24,201, + 252,121,171,2,112,192,4,3,5,5,201,8,4,80,26,100,228,2,216,2,1,138,33,30,3,201,24,31,204,5,168,94,5,5,254,222,116,47,5,84, + 5,161,84,125,55,2,254,237,21,5,53,9,1,98,26,5,92,86,254,182,154,19,1,4,28,47,254,86,254,234,23,39,102,58,8,15,1,58,23,112, + 27,254,224,13,63,254,182,16,41,29,1,92,32,31,128,41,11,57,3,254,165,115,26,9,254,164,23,115,1,37,176,6,254,169,5,128,48,48,130,0, + 0,7,0,170,0,0,6,131,5,217,0,19,0,37,0,50,0,60,0,74,0,92,0,101,0,0,1,51,32,19,22,29,1,16,5,6,43,1,32,3, + 38,61,1,16,37,54,23,21,50,31,1,21,6,7,21,33,54,55,35,7,38,39,38,35,1,22,51,54,19,38,35,38,35,34,7,6,7,5,21,19, + 51,50,55,52,47,1,34,5,23,6,7,20,31,1,51,52,63,1,51,23,39,1,7,22,23,51,53,55,51,50,63,1,53,35,6,35,33,39,53,5, + 6,29,1,20,31,1,51,17,3,137,27,1,139,243,97,254,111,163,183,3,254,80,232,83,1,60,190,137,38,51,121,27,58,1,24,10,132,3,83,79, + 18,21,26,253,136,242,9,4,149,66,23,29,50,95,53,78,13,2,129,153,118,98,26,101,41,14,251,205,80,75,11,139,29,3,27,142,9,76,139,1, + 249,135,6,129,3,6,172,36,61,106,3,22,34,254,196,6,253,234,65,106,26,252,5,217,254,146,174,207,6,254,79,235,76,1,134,168,163,53,1,95, + 241,131,147,3,107,206,3,22,31,3,8,240,44,137,22,12,254,223,139,15,1,1,126,18,121,125,31,222,3,254,244,138,47,157,77,60,52,123,49,22, + 232,59,67,25,248,44,241,254,229,251,3,236,91,6,128,177,3,16,6,95,101,105,39,12,91,41,4,1,36,0,0,0,0,8,0,170,0,0,6,131, + 5,217,0,15,0,32,0,47,0,58,0,66,0,82,0,96,0,106,0,0,1,32,19,22,21,16,5,6,35,32,3,38,53,16,37,54,1,16,5,22, + 59,1,32,19,54,53,16,37,38,35,32,3,6,1,33,50,31,1,55,21,6,7,33,53,55,38,47,1,35,50,31,1,3,35,38,39,54,55,54,1, + 22,29,1,6,43,1,3,37,33,23,7,35,39,35,2,7,21,38,3,39,52,55,39,1,51,21,33,50,55,21,3,7,35,7,21,35,39,37,33,23, + 17,7,35,34,47,1,54,3,152,1,151,237,103,254,132,164,209,254,94,231,95,1,136,170,253,249,1,98,157,170,48,1,104,229,92,254,150,160,184,254, + 123,223,92,2,91,1,58,53,24,58,81,109,27,254,240,77,146,26,27,77,91,30,45,154,3,227,18,119,28,44,2,163,137,21,108,100,156,252,216,1, + 20,145,3,3,78,3,166,6,12,156,2,86,78,2,253,6,1,71,20,24,173,23,169,6,6,135,254,138,1,43,6,6,245,81,39,6,1,5,217,254, + 151,178,212,254,88,233,89,1,116,162,219,1,169,235,84,253,18,254,112,216,88,1,89,165,197,1,140,224,83,254,166,159,1,109,69,98,44,3,204,35, + 3,52,254,39,12,70,86,254,254,127,16,213,26,32,254,167,226,33,23,130,1,9,89,244,3,49,254,234,21,26,11,1,18,17,28,141,49,254,236,95, + 20,6,254,220,9,6,85,238,140,5,254,235,5,103,44,49,0,5,0,170,0,0,6,131,5,217,0,7,0,23,0,31,0,65,0,82,0,0,1,22, + 23,50,55,38,39,6,1,32,19,22,21,16,5,6,35,32,3,38,53,16,37,54,1,6,7,22,51,54,55,38,1,21,35,6,43,1,46,1,53,52, + 55,52,53,52,54,55,50,23,54,51,30,1,21,20,21,22,21,20,6,7,35,34,39,35,37,16,5,22,59,1,32,19,54,53,16,37,38,35,32,3, + 6,1,194,2,183,144,97,87,162,175,1,212,1,151,237,103,254,132,164,209,254,94,231,95,1,136,170,1,225,162,87,97,144,183,2,2,254,43,3,118, + 178,14,140,122,1,155,135,157,127,128,158,135,155,1,122,140,14,178,119,2,253,60,1,98,157,170,48,1,104,229,92,254,150,160,184,254,123,223,92,2, + 244,205,2,203,194,4,3,2,38,254,151,178,212,254,88,233,89,1,116,162,219,1,169,235,84,253,221,4,194,203,2,205,191,254,243,28,189,15,185,80, + 7,8,4,5,116,153,1,170,170,1,153,116,5,4,8,7,80,185,15,189,97,254,112,216,88,1,89,165,197,1,140,224,83,254,166,159,0,2,1,49, + 0,2,5,250,5,217,0,24,0,46,0,0,1,50,21,6,7,23,33,50,23,7,33,23,33,22,19,55,23,6,5,38,3,33,34,3,52,1,6,35, + 34,46,1,53,52,55,54,55,23,6,7,20,30,1,50,54,55,23,6,2,154,153,1,128,24,1,19,12,16,4,254,237,12,1,189,12,141,134,48,5, + 254,238,16,149,254,35,12,85,1,248,113,123,124,226,125,64,33,47,40,25,2,83,152,166,151,42,69,46,5,217,142,163,2,230,146,4,101,6,254,114, + 40,141,8,89,24,1,173,3,36,133,250,104,63,125,225,125,124,114,60,46,217,60,67,83,152,83,83,76,169,50,0,0,0,3,0,150,0,0,6,96, + 5,205,0,22,0,26,0,30,0,0,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,37,33,17, + 33,2,239,19,20,31,27,43,42,28,30,21,19,19,20,31,28,84,28,30,21,19,253,167,5,202,250,219,4,128,251,128,2,233,42,28,30,21,19,19, + 20,31,27,43,42,28,30,21,19,19,20,31,27,253,66,5,205,250,51,165,4,131,0,0,0,4,0,150,0,0,6,96,5,205,0,22,0,45,0,49, + 0,53,0,0,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,21, + 20,7,6,7,6,34,39,38,39,38,1,17,33,17,37,33,17,33,1,185,19,20,31,28,84,28,30,21,19,19,20,31,27,43,42,28,30,21,19,2, + 108,19,20,31,27,43,42,28,30,21,19,19,20,31,28,84,28,30,21,19,252,113,5,202,250,219,4,128,251,128,1,174,42,28,30,21,19,19,20,31, + 27,43,42,28,30,21,19,19,20,31,27,2,156,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,252,12,5,205,250,51,165,4, + 131,0,0,0,0,5,0,150,0,0,6,96,5,205,0,22,0,45,0,68,0,72,0,76,0,0,1,52,55,54,55,54,50,23,22,23,22,21,20,7, + 6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54,51,50, + 23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,37,33,17,33,1,185,19,20,31,28,84,28,30,21,19,19,20,31,27,43,42, + 28,30,21,19,1,54,19,20,31,27,43,42,28,30,21,19,19,20,31,28,84,28,30,21,19,1,54,19,20,31,27,43,42,28,30,21,19,19,20,31, + 28,84,28,30,21,19,252,113,5,202,250,219,4,128,251,128,1,174,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,1,102,42, + 28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,1,97,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,252, + 12,5,205,250,51,165,4,131,0,6,0,150,0,0,6,96,5,205,0,22,0,45,0,68,0,91,0,95,0,99,0,0,1,52,55,54,55,54,50,23, + 22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,37,52, + 55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34, + 39,38,39,38,1,17,33,17,37,33,17,33,1,185,19,20,31,28,84,28,30,21,19,19,20,31,27,43,42,28,30,21,19,2,108,19,20,31,27,43, + 42,28,30,21,19,19,20,31,28,84,28,30,21,19,253,148,19,20,31,28,84,28,30,21,19,19,20,31,27,43,42,28,30,21,19,2,108,19,20,31, + 27,43,42,28,30,21,19,19,20,31,28,84,28,30,21,19,252,113,5,202,250,219,4,128,251,128,4,31,42,28,30,21,19,19,20,31,27,43,42,28, + 30,21,19,19,20,31,27,253,186,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,43,42, + 28,30,21,19,19,20,31,27,2,156,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,252,12,5,205,250,51,165,4,131,0,0, + 0,7,0,150,0,0,6,96,5,205,0,22,0,45,0,68,0,91,0,114,0,118,0,122,0,0,1,52,55,54,55,54,50,23,22,23,22,21,20,7, + 6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,50,23, + 22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,52, + 55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,37,33,17,33,1,185,19,20,31,28,84,28,30,21,19, + 19,20,31,27,43,42,28,30,21,19,2,108,19,20,31,27,43,42,28,30,21,19,19,20,31,28,84,28,30,21,19,253,148,19,20,31,28,84,28,30, + 21,19,19,20,31,27,43,42,28,30,21,19,2,108,19,20,31,27,43,42,28,30,21,19,19,20,31,28,84,28,30,21,19,254,202,19,20,31,27,43, + 42,28,30,21,19,19,20,31,28,84,28,30,21,19,253,167,5,202,250,219,4,128,251,128,4,31,42,28,30,21,19,19,20,31,27,43,42,28,30,21, + 19,19,20,31,27,253,186,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,43,42,28,30, + 21,19,19,20,31,27,2,156,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,254,245,42,28,30,21,19,19,20,31,27,43,42, + 28,30,21,19,19,20,31,27,253,66,5,205,250,51,165,4,131,0,0,0,0,8,0,150,0,0,6,96,5,205,0,23,0,47,0,70,0,93,0,116, + 0,139,0,143,0,147,0,0,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,37,52,55,54,55,54,51,50, + 23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,17,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1, + 52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35, + 34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,37,33,17,33,4,36,19,20, + 31,27,43,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,253,149,19,20,31,27,43,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19, + 19,20,31,28,84,28,30,21,19,19,20,31,27,43,42,28,30,21,19,2,108,19,20,31,27,43,42,28,30,21,19,19,20,31,28,84,28,30,21,19, + 253,148,19,20,31,28,84,28,30,21,19,19,20,31,27,43,42,28,30,21,19,2,108,19,20,31,27,43,42,28,30,21,19,19,20,31,28,84,28,30, + 21,19,252,113,5,202,250,219,4,128,251,128,2,233,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19, + 20,31,27,43,42,28,30,21,19,19,20,31,27,1,147,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,253,86,42,28,30,21, + 19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,3,0,42,28,30, + 21,19,19,20,31,27,43,42,28,30,21,19,19,20,31,27,251,218,5,205,250,51,165,4,131,0,0,0,0,3,0,170,0,1,6,130,5,217,0,12, + 0,27,0,41,0,0,1,50,4,18,16,2,4,32,36,2,16,18,36,1,20,18,4,32,36,18,53,52,2,36,35,34,4,2,4,52,62,1,51,50, + 30,1,20,14,1,35,34,38,3,150,188,1,101,203,197,254,155,254,124,254,155,197,201,1,101,254,40,174,1,60,1,88,1,60,174,179,254,196,167,168, + 254,195,177,3,147,34,60,33,32,60,34,35,60,31,33,59,5,217,193,254,152,254,122,254,157,198,198,1,99,1,134,1,104,193,253,20,173,254,197,174, + 174,1,59,173,172,1,63,171,171,254,193,205,66,60,33,33,60,66,61,32,32,0,0,0,0,4,0,170,0,1,6,130,5,217,0,12,0,27,0,41, + 0,54,0,0,1,50,4,18,16,2,4,32,36,2,16,18,36,1,20,18,4,32,36,18,53,52,2,36,35,34,4,2,4,52,62,1,51,50,30,1, + 20,14,1,35,34,38,36,50,30,1,20,14,1,35,34,46,1,52,54,3,150,188,1,101,203,197,254,155,254,124,254,155,197,201,1,101,254,40,174,1, + 60,1,88,1,60,174,179,254,196,167,168,254,195,177,3,147,34,60,33,32,60,34,35,60,31,33,59,253,62,64,60,35,34,60,33,32,60,34,35,5, + 217,193,254,152,254,122,254,157,198,198,1,99,1,134,1,104,193,253,20,173,254,197,174,174,1,59,173,172,1,63,171,171,254,193,205,66,60,33,33,60, + 66,61,32,32,220,32,61,66,60,33,33,60,66,61,0,0,0,2,0,170,0,1,6,130,5,217,0,12,0,26,0,0,1,50,4,18,16,2,4,32, + 36,2,16,18,36,1,50,62,1,52,46,1,35,34,14,1,20,30,1,3,150,188,1,101,203,197,254,155,254,124,254,155,197,201,1,101,2,58,31,60, + 35,34,60,32,33,60,34,35,59,5,217,193,254,152,254,122,254,157,198,198,1,99,1,134,1,104,193,252,150,32,61,66,60,33,33,60,66,61,32,0, + 0,3,0,170,0,1,6,130,5,217,0,12,0,26,0,39,0,0,1,50,4,18,16,2,4,32,36,2,16,18,36,1,50,62,1,52,46,1,35,34, + 14,1,20,30,1,36,20,30,1,51,50,62,1,52,46,1,34,6,3,150,188,1,101,203,197,254,155,254,124,254,155,197,201,1,101,2,58,31,60,35, + 34,60,32,33,60,34,35,59,252,165,34,60,32,33,60,34,35,60,64,59,5,217,193,254,152,254,122,254,157,198,198,1,99,1,134,1,104,193,252,150, + 32,61,66,60,33,33,60,66,61,32,159,66,60,33,33,60,66,61,32,32,0,1,0,170,0,0,6,130,0,200,0,3,0,0,55,33,21,33,170,5, + 216,250,40,200,200,0,0,0,0,2,0,170,0,0,6,130,0,200,0,3,0,7,0,0,55,33,21,33,37,33,21,33,170,2,96,253,160,3,120,2, + 96,253,160,200,200,200,200,0,255,255,0,170,0,0,6,130,3,77,18,38,15,92,0,0,16,7,15,92,0,0,2,133,255,255,0,170,0,0,6,130, + 3,77,18,38,15,92,0,0,16,7,15,93,0,0,2,133,255,255,0,170,0,0,6,130,3,78,18,38,15,93,0,0,16,7,15,92,0,0,2,134, + 255,255,0,170,0,0,6,130,3,78,18,38,15,93,0,0,16,7,15,93,0,0,2,134,0,2,1,88,0,6,5,210,5,217,0,17,0,42,0,0, + 1,54,51,50,4,51,50,55,17,6,35,34,39,38,35,34,7,47,1,35,39,33,21,35,21,54,51,50,23,22,51,50,55,17,6,35,34,36,35,34, + 7,17,35,2,7,52,60,128,1,78,187,70,72,52,53,167,177,139,191,50,54,20,99,75,1,1,14,76,53,51,194,171,169,161,78,75,106,102,171,254, + 195,128,80,70,96,2,159,17,163,12,2,98,10,95,126,9,2,93,53,53,26,8,120,92,21,253,13,28,154,30,253,198,0,1,1,88,0,6,5,210, + 5,217,0,24,0,0,1,35,39,33,21,35,21,54,51,50,23,22,51,50,55,17,6,35,34,36,35,34,7,17,35,1,164,75,1,1,14,76,53,51, + 194,171,169,161,78,75,106,102,171,254,195,128,80,70,96,5,164,53,53,26,8,120,92,21,253,13,28,154,30,253,198,0,0,1,0,106,0,1,6,193, + 5,218,0,31,0,0,9,1,7,39,55,39,55,23,55,23,7,9,1,39,55,23,55,23,7,22,19,9,1,23,1,7,1,39,7,1,39,1,3,54, + 254,179,185,198,186,46,138,43,185,197,184,1,77,1,77,184,198,184,44,136,44,69,35,254,211,254,179,178,1,63,185,254,242,179,178,254,242,184,1,61, + 2,126,1,81,187,199,187,44,138,44,186,200,186,254,176,1,79,187,200,187,45,138,44,113,254,116,1,53,254,175,179,254,240,185,1,64,180,180,254,192, + 185,1,16,0,0,2,0,198,255,236,6,101,5,219,0,15,0,82,0,0,1,20,30,1,51,50,62,1,53,52,46,1,35,34,14,1,19,21,35,6, + 35,34,39,53,35,21,35,34,36,39,38,39,7,3,5,7,48,23,22,23,22,23,17,33,53,33,53,38,39,46,1,52,62,1,51,50,30,1,20,6, + 7,6,7,21,33,21,33,17,54,55,54,55,54,55,39,37,3,39,6,7,6,7,6,3,16,39,72,38,40,71,40,41,71,39,37,72,40,227,8,37, + 39,3,3,7,7,169,254,203,86,16,13,87,29,1,51,87,6,73,132,109,117,254,137,1,119,26,25,62,68,69,125,65,66,124,71,69,61,27,26,1, + 109,254,147,100,94,132,74,2,3,87,1,52,30,87,12,17,86,155,115,4,214,39,72,39,39,72,39,40,72,39,39,72,250,242,1,3,1,2,2,96, + 88,17,16,65,1,75,124,64,6,88,49,40,7,2,212,129,51,8,14,34,124,136,125,68,68,125,136,124,34,14,9,50,129,253,47,10,34,49,88,3, + 3,64,124,254,181,65,16,17,88,49,35,0,0,1,1,13,0,0,6,31,5,214,0,47,0,0,9,1,54,55,51,6,7,23,22,23,14,1,7,38, + 47,1,6,7,39,54,55,11,1,22,23,7,38,39,7,6,7,34,38,39,54,63,1,38,39,51,22,23,9,1,39,9,1,7,3,226,1,22,75,27, + 91,25,93,156,62,2,6,60,43,71,4,157,103,91,39,102,66,244,242,66,101,38,92,104,156,1,63,40,75,4,1,63,156,93,26,92,27,75,1,22, + 253,227,32,2,136,2,138,33,2,189,254,208,59,60,117,73,182,3,64,42,34,1,4,79,168,56,8,66,17,49,1,34,254,222,49,17,66,8,56,168, + 72,11,29,36,76,3,182,73,117,60,59,1,48,2,132,149,253,58,2,198,149,0,0,0,0,5,0,125,255,236,3,213,5,219,0,7,0,26,0,46, + 0,79,0,96,0,0,1,22,51,50,53,52,39,38,19,21,6,35,34,39,53,38,53,52,55,23,6,21,20,4,7,35,38,3,36,53,52,37,21,6, + 21,20,4,23,6,5,39,54,53,52,39,17,39,19,17,39,17,36,39,54,55,50,51,50,23,7,23,6,35,34,39,38,35,34,21,20,4,23,6,5, + 53,36,39,54,53,52,37,39,3,46,1,53,52,62,1,51,50,30,1,21,20,6,7,1,84,28,13,11,5,36,249,12,27,35,3,181,164,1,65,1, + 67,2,15,28,197,254,226,1,14,171,2,44,3,4,254,237,1,182,197,77,77,77,254,118,4,13,213,4,3,65,53,112,95,24,26,57,68,8,7,45, + 2,239,6,7,254,150,1,18,2,1,254,227,77,5,21,24,24,42,22,23,42,24,23,21,4,164,12,9,6,10,11,251,148,66,29,64,48,34,64,82, + 26,47,24,24,47,62,119,65,1,183,38,111,99,47,68,38,51,46,89,97,81,47,53,34,49,39,34,254,180,19,3,1,254,129,16,1,117,19,138,144, + 5,69,30,25,6,27,2,54,50,47,117,138,16,61,32,61,1,2,33,109,7,1,45,11,46,24,25,46,24,24,46,25,24,46,11,0,0,3,0,121, + 255,236,6,178,5,219,0,4,0,9,0,55,0,0,37,9,1,22,32,37,9,1,22,32,1,51,50,29,1,20,43,1,1,6,7,14,1,35,34,46, + 1,61,1,1,33,1,21,20,14,1,34,38,39,38,39,1,35,38,61,1,52,59,1,55,23,51,27,1,51,55,6,95,254,236,254,236,139,1,20,253, + 37,254,237,254,236,138,1,20,3,9,214,56,41,194,1,20,2,48,47,173,95,94,171,94,1,16,253,77,1,18,94,172,188,173,49,47,1,1,19,204, + 32,57,215,53,51,252,129,129,252,52,237,3,60,252,196,38,38,3,60,252,196,38,3,209,42,25,40,252,199,68,62,63,71,71,122,66,8,3,54,252, + 202,6,67,123,71,71,63,62,68,3,57,17,28,15,47,155,155,1,67,254,189,155,0,0,0,2,0,125,0,0,6,174,5,219,0,26,0,38,0,0, + 1,54,51,50,23,22,23,22,21,20,7,6,7,6,35,34,38,39,46,1,35,34,7,6,3,39,18,1,19,35,3,33,17,35,3,33,3,35,19,2, + 210,184,158,54,50,201,75,35,17,43,126,75,70,48,157,82,33,57,39,47,78,163,199,120,229,4,237,95,127,84,254,226,138,1,254,227,86,127,95,5, + 135,84,9,39,166,78,81,57,59,141,58,35,56,179,72,76,34,67,254,223,68,1,153,253,124,253,166,1,215,254,41,1,215,254,41,2,90,0,0,0, + 0,2,1,41,0,0,6,1,5,219,0,13,0,53,0,0,0,20,30,1,51,50,62,1,52,46,1,35,34,6,19,21,59,1,50,54,55,20,4,7, + 6,7,35,38,61,1,38,36,3,30,1,51,50,55,51,53,38,39,46,1,52,62,1,50,30,1,20,6,7,6,2,230,50,91,48,50,91,50,52,90, + 49,47,91,187,6,3,150,225,173,254,41,39,53,2,42,43,5,254,15,88,199,235,129,13,14,6,65,60,78,87,88,157,166,158,90,88,78,57,4,196, + 100,89,50,50,89,100,91,48,48,254,45,156,191,38,231,154,151,136,245,168,154,20,132,143,1,49,2,233,1,155,7,35,43,156,172,158,85,85,158,172, + 156,43,32,0,0,3,0,194,255,221,6,106,5,208,0,63,0,71,0,79,0,0,0,50,31,1,22,23,55,22,23,7,22,23,55,22,23,7,22,20, + 7,23,6,7,39,6,7,23,6,7,39,6,15,1,6,34,47,1,38,39,7,38,39,55,38,39,7,38,39,55,38,52,55,39,54,55,23,54,55,39, + 54,55,23,54,63,1,0,32,0,16,0,32,0,16,4,20,6,34,38,52,54,50,3,106,88,43,26,67,64,126,76,64,84,47,33,165,37,16,148,4, + 4,148,16,37,165,33,47,84,64,76,126,64,67,26,43,88,43,26,67,64,126,76,64,84,47,33,165,37,16,148,4,4,148,16,37,165,33,47,84,64, + 76,126,64,67,26,1,13,254,148,254,254,1,2,1,108,1,2,254,227,91,128,91,91,128,5,208,5,187,13,30,132,45,64,156,50,60,31,84,92,69, + 35,68,35,70,91,84,31,60,51,155,64,46,132,29,14,186,6,6,186,14,29,132,46,64,155,50,61,31,84,91,70,35,68,35,69,92,84,31,60,51, + 155,64,45,131,29,13,187,254,196,254,253,254,149,254,254,1,2,1,107,117,128,91,91,128,91,0,0,0,0,15,1,6,255,237,6,37,5,221,0,9, + 0,14,0,19,0,24,0,29,0,37,0,44,0,49,0,54,0,59,0,64,0,72,0,79,0,91,0,159,0,0,0,20,30,1,51,38,52,55,34,6, + 5,22,23,55,38,39,22,23,55,38,39,22,23,55,38,39,22,7,55,38,39,20,21,20,7,23,53,52,39,6,7,23,54,53,52,5,23,54,55,6, + 7,23,54,55,6,7,23,54,55,6,31,1,38,55,6,23,55,38,53,52,55,6,21,63,1,38,39,6,21,20,5,34,6,21,20,22,51,50,54,53, + 52,38,39,53,38,39,46,1,52,62,1,51,50,30,1,20,6,7,6,7,51,20,35,21,22,23,22,23,54,55,4,23,6,35,38,34,7,22,21,20, + 7,6,7,3,21,6,35,34,47,1,3,38,39,38,53,52,55,38,35,34,7,34,39,54,37,22,23,54,55,54,3,86,17,31,18,14,14,17,32,1, + 243,110,42,26,91,145,110,37,39,90,120,76,16,48,60,123,50,1,59,38,98,21,59,60,47,50,58,40,252,115,26,42,110,87,41,39,36,111,96,20, + 48,16,76,80,15,59,1,50,70,60,59,22,1,38,99,58,50,47,1,1,28,55,76,76,55,53,77,76,90,3,2,19,21,21,39,21,20,38,22,21, + 19,2,3,1,1,52,41,3,3,80,22,1,78,80,85,254,40,68,28,4,52,40,52,1,11,23,25,8,1,2,51,40,52,3,31,41,34,40,254,85, + 80,1,78,21,82,7,9,40,5,160,34,31,18,32,66,34,17,118,62,48,38,56,20,97,62,33,85,42,126,69,19,109,76,145,75,8,125,96,17,16, + 129,63,10,12,123,97,136,55,26,99,91,13,79,38,48,62,16,106,33,62,97,41,134,19,69,126,67,136,8,75,145,87,139,10,61,123,20,21,100,123, + 3,26,55,136,14,13,91,43,77,53,55,76,76,55,53,77,45,90,1,2,10,39,42,39,21,21,39,42,39,10,2,1,1,89,9,40,3,4,128,53, + 6,91,163,12,12,20,21,74,53,40,9,252,214,92,22,28,100,3,28,9,40,53,74,18,17,17,12,163,91,6,52,140,10,9,39,0,0,15,1,5, + 0,0,6,39,5,211,0,15,0,31,0,47,0,55,0,79,0,95,0,159,0,171,0,179,0,187,0,203,0,211,0,219,0,227,0,239,0,0,1,50, + 30,1,21,20,14,1,35,34,46,1,53,52,62,1,7,38,39,6,7,6,21,20,23,22,51,50,51,54,55,38,37,6,7,22,23,50,51,50,55,54, + 53,52,39,38,39,6,39,22,21,20,7,54,55,38,39,38,39,38,39,6,7,6,7,6,21,20,23,22,23,22,23,54,55,54,55,54,53,52,19,22, + 23,22,23,54,55,54,53,52,39,38,35,34,7,6,5,55,62,1,51,50,22,23,21,54,51,50,51,22,23,22,21,20,7,6,7,23,22,23,22,21, + 20,7,14,1,35,34,39,35,6,7,6,35,34,39,38,39,6,35,34,38,39,38,53,52,55,54,55,38,39,38,53,52,55,54,55,50,51,50,5,38, + 39,38,35,34,7,6,7,22,23,54,23,6,7,22,23,22,23,38,37,6,7,54,55,54,55,38,39,38,39,38,35,34,7,6,21,20,23,22,23,54, + 55,54,7,6,7,22,23,38,53,52,23,22,23,54,55,38,39,38,23,22,23,54,55,6,7,6,7,6,7,22,23,22,51,50,55,54,55,38,3,150, + 19,36,20,20,36,19,20,36,20,20,36,225,79,71,127,51,37,8,23,86,8,9,99,152,14,1,226,6,14,153,99,9,8,86,23,8,37,52,127,71, + 76,2,2,57,52,52,109,47,49,50,50,49,48,50,47,2,2,46,51,48,51,49,49,50,46,3,25,15,6,79,70,125,54,38,8,23,86,9,11,101, + 253,180,1,34,119,63,62,118,34,164,112,3,4,116,32,12,35,56,136,1,138,55,33,12,31,118,6,110,164,1,34,58,59,64,65,60,58,34,162,110, + 6,120,31,11,33,54,138,136,54,35,11,32,115,4,3,112,2,37,27,46,47,49,51,47,46,27,85,86,84,92,60,62,34,36,33,33,5,254,149,9, + 5,33,34,35,34,62,107,149,99,11,9,86,22,9,38,54,124,70,79,6,9,57,51,51,57,1,57,5,9,60,62,35,34,35,214,62,60,9,5,32, + 34,36,90,84,85,26,46,47,52,51,46,46,26,86,3,53,19,36,21,20,35,20,20,35,20,21,36,19,217,53,57,103,84,59,38,18,14,39,4,57, + 90,94,94,90,57,4,39,14,18,39,58,84,103,57,167,39,40,39,39,38,40,41,73,30,28,28,26,26,28,28,30,56,58,57,56,30,28,29,26,26, + 29,28,30,56,57,58,1,12,90,95,53,57,101,85,59,39,19,14,40,1,5,9,2,179,192,192,179,2,58,2,56,20,27,46,62,101,117,1,118,99, + 62,45,27,20,55,3,58,176,98,99,99,98,176,59,4,55,20,26,45,63,99,119,117,100,63,47,26,20,56,2,75,162,87,90,90,87,162,32,42,42, + 16,25,29,18,20,21,20,68,64,64,68,20,21,20,18,29,43,56,5,1,40,15,19,39,58,84,101,57,53,94,157,38,41,40,38,39,39,40,214,68, + 65,25,29,18,20,20,58,29,25,65,68,21,20,20,46,42,33,158,89,91,91,89,158,33,0,7,1,5,0,0,6,38,5,214,0,11,0,20,0,33, + 0,45,0,120,0,134,0,148,0,0,1,20,23,54,55,38,39,54,55,38,39,6,5,52,38,21,6,21,22,23,54,37,6,21,20,23,54,55,46,1, + 39,6,21,20,37,52,39,6,7,22,23,6,7,22,23,54,1,38,35,34,7,6,7,38,39,54,55,22,23,54,55,38,53,52,63,1,21,22,21,20, + 7,30,1,23,54,55,22,23,6,7,38,39,38,35,34,7,22,23,22,20,7,6,7,22,23,6,35,38,39,6,7,6,7,35,38,39,53,38,39,6, + 7,34,39,54,55,38,39,38,52,55,54,6,20,30,1,51,50,62,1,52,46,1,35,34,6,37,50,30,1,20,14,1,35,34,46,1,52,62,1,3, + 206,39,55,44,51,9,3,51,37,47,48,254,220,41,44,8,55,21,1,223,1,17,61,3,3,42,1,35,254,215,48,42,43,51,3,14,46,50,50,39, + 254,247,56,32,14,9,32,89,102,2,2,183,169,84,44,49,39,165,1,164,39,41,46,5,85,168,184,1,2,102,89,32,6,14,29,62,26,20,57,56, + 24,32,34,50,1,13,66,50,59,70,95,25,32,32,88,66,63,50,67,13,1,51,34,32,23,56,57,20,52,105,188,104,103,188,105,107,190,99,101,189, + 1,34,83,159,91,88,159,86,87,159,88,90,159,2,132,163,167,15,35,101,141,170,106,28,15,112,205,77,99,1,78,84,118,74,75,114,27,25,90,49, + 86,108,76,87,2,77,73,9,17,169,112,13,30,106,170,133,107,37,15,167,1,110,65,13,86,2,2,123,119,2,6,119,25,17,91,49,135,244,1,1, + 244,135,49,91,13,26,3,119,6,2,119,123,2,2,86,13,64,30,35,102,220,100,45,35,74,77,12,55,66,47,21,34,137,137,34,1,20,48,67,55, + 12,78,75,34,44,100,220,102,35,136,206,189,104,104,189,206,191,103,103,81,85,160,174,157,88,88,157,174,160,85,0,0,0,4,0,100,0,0,6,200, + 5,212,0,7,0,13,0,21,0,37,0,0,1,51,1,21,33,39,35,0,23,1,21,33,53,0,7,50,21,2,35,34,3,54,19,50,30,1,21,20, + 14,1,35,34,46,1,53,52,62,1,3,159,7,3,34,249,173,8,9,3,27,23,253,104,5,57,253,124,20,77,52,25,23,54,25,51,19,37,21,20, + 38,19,20,36,21,21,36,5,212,250,53,9,9,5,170,155,251,79,17,9,4,157,194,68,253,155,2,110,59,253,13,20,36,21,20,36,20,20,36,20, + 21,36,20,0,0,1,0,170,0,4,4,244,5,216,0,19,0,0,1,51,23,21,1,20,51,4,21,23,1,39,53,0,53,52,35,36,47,1,4,209, + 14,21,253,142,91,1,131,7,252,81,14,2,135,119,254,147,16,7,5,216,21,7,253,226,71,83,14,71,253,85,21,7,2,87,13,71,74,17,71,0, + 0,5,0,175,254,255,7,90,5,218,0,30,0,42,0,49,0,61,0,67,0,0,1,38,16,0,51,50,23,54,51,50,0,16,7,6,7,17,33,21, + 33,17,35,17,33,17,35,17,33,53,33,17,38,1,34,6,16,22,51,50,55,38,16,55,38,19,6,7,17,33,17,38,55,22,51,50,54,16,38,35, + 34,7,22,16,5,54,16,39,6,16,1,88,169,1,80,239,153,125,125,155,236,1,82,168,136,180,1,16,254,240,180,254,134,180,254,240,1,16,181,1, + 15,164,231,231,164,63,57,138,139,57,215,88,101,1,122,102,72,57,63,160,234,234,160,65,58,140,254,215,117,117,116,2,20,157,1,221,1,76,70,70, + 254,180,254,34,156,126,18,254,248,124,254,255,1,1,254,255,1,1,124,1,9,17,3,145,228,254,185,216,17,149,1,174,157,18,252,148,45,10,254,248, + 1,9,10,165,16,216,1,71,228,18,157,254,80,56,108,1,71,114,114,254,185,0,0,0,0,5,0,162,254,91,8,48,5,195,0,11,0,36,0,44, + 0,56,0,62,0,0,1,38,32,6,16,23,22,23,54,0,55,38,1,20,0,32,39,38,39,38,39,38,16,0,4,23,1,33,55,33,17,33,17,7, + 17,1,22,3,1,22,23,22,23,1,33,3,6,0,7,22,23,22,32,54,16,39,38,1,50,54,53,34,6,3,247,117,254,187,231,116,46,55,16,1, + 55,204,28,2,133,254,181,254,33,170,117,36,134,108,170,1,89,1,203,111,1,105,254,141,140,1,238,1,139,143,254,154,112,149,254,154,64,27,113,68, + 1,105,254,237,247,14,254,208,222,29,52,116,1,69,234,117,46,253,141,161,234,164,227,3,36,114,228,254,184,108,44,26,206,1,51,7,54,253,144,232, + 254,189,159,108,146,37,101,158,1,220,1,85,17,103,1,92,142,254,120,254,20,143,1,117,254,164,146,3,118,254,164,83,99,27,63,1,92,254,55,204, + 254,215,11,61,49,108,216,1,72,114,45,254,201,216,164,224,0,4,0,175,254,131,8,223,6,217,0,5,0,45,0,57,0,69,0,0,0,2,23,54, + 16,39,1,20,0,35,34,39,6,7,17,33,21,33,17,35,17,33,53,33,17,38,39,38,16,0,51,50,23,54,23,22,23,1,33,55,33,17,7,17, + 1,22,37,34,6,16,22,51,50,55,38,16,55,38,1,22,51,50,54,16,38,35,34,7,22,16,3,146,1,115,117,117,3,87,254,179,243,154,126,87, + 100,1,16,254,240,180,254,240,1,16,181,135,169,1,80,239,151,124,128,154,229,111,1,106,254,140,140,1,238,142,254,154,112,251,147,164,231,231,164,63, + 57,137,139,58,1,118,56,63,162,234,234,162,65,58,141,3,200,254,184,108,108,1,71,114,254,235,231,254,188,69,44,10,254,248,124,254,255,1,1,124, + 1,9,17,126,157,1,221,1,76,68,74,6,8,103,1,92,142,254,20,143,1,117,254,164,146,198,228,254,185,216,17,149,1,172,159,18,253,13,16,216, + 1,72,228,18,157,254,79,0,0,2,0,175,254,255,6,178,7,85,0,7,0,40,0,0,0,38,32,6,16,22,32,54,5,38,16,0,51,50,23,1, + 33,55,33,17,7,17,1,22,21,20,7,6,7,17,33,21,33,17,35,17,33,53,33,17,38,4,121,234,254,187,231,231,1,69,234,252,223,169,1,80, + 239,192,149,1,104,254,141,140,1,238,143,254,154,112,169,136,180,1,16,254,240,180,254,240,1,16,181,4,67,228,228,254,185,216,216,232,157,1,221,1, + 76,110,1,91,142,254,20,143,1,117,254,164,146,194,239,156,126,18,254,248,124,254,255,1,1,124,1,9,17,0,0,0,0,2,1,13,255,227,5,208, + 6,244,0,43,0,68,0,0,1,7,22,23,22,23,22,20,7,14,1,7,6,35,34,39,38,39,38,39,38,52,55,62,1,55,54,51,50,23,55,39, + 55,23,19,7,39,37,19,7,39,3,23,7,1,22,50,55,62,1,55,54,52,39,38,39,46,1,34,7,14,1,7,6,20,23,22,23,22,4,40,70, + 51,34,68,34,38,37,35,125,98,86,96,90,90,94,59,68,34,38,38,36,131,91,88,93,58,51,71,254,57,254,134,225,58,1,206,192,139,93,134,254, + 58,253,70,61,126,61,60,90,26,25,25,23,47,42,126,122,63,60,89,27,25,24,24,46,40,4,0,170,33,36,72,83,92,180,91,86,131,42,37,37, + 39,62,72,83,93,179,94,88,130,38,37,12,171,105,138,105,1,68,94,139,191,254,50,57,225,254,189,105,139,252,252,26,25,25,92,61,60,128,60,57, + 50,45,49,25,25,88,63,58,132,60,57,49,42,0,0,0,0,2,0,207,254,163,5,238,7,18,0,61,0,88,0,0,1,54,50,23,19,7,39,37, + 19,7,39,3,22,23,30,1,21,20,6,7,6,7,6,7,21,33,21,33,21,35,53,33,53,33,53,38,39,38,39,46,1,53,52,54,55,54,55,39, + 7,39,55,39,7,39,19,5,7,39,23,55,23,7,23,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52,38,39,38,39, + 38,2,238,52,112,54,179,226,57,1,206,192,140,93,179,46,40,69,71,71,69,64,90,45,60,1,19,254,237,150,254,237,1,19,56,49,86,68,69,71, + 70,70,39,49,31,254,57,254,84,93,140,192,1,206,57,226,84,254,58,254,138,71,53,62,43,46,49,49,46,47,58,57,138,53,62,43,46,49,49,46, + 47,58,57,4,135,12,12,1,158,92,138,191,254,50,58,226,254,97,29,40,69,171,98,95,171,69,64,40,20,10,184,150,240,240,150,184,9,21,37,67, + 69,171,95,98,169,71,40,30,72,105,138,106,203,226,58,1,206,191,138,92,203,105,138,106,211,24,28,43,46,119,66,65,119,46,47,24,24,24,28,43, + 46,119,65,66,119,46,47,24,24,0,0,0,0,2,1,128,255,227,5,52,6,244,0,43,0,70,0,0,1,17,33,21,33,21,22,23,22,23,30,1, + 21,20,6,7,6,7,6,35,34,39,38,39,46,1,53,52,54,55,54,55,54,55,53,33,53,33,17,7,39,9,1,7,3,50,55,54,55,62,1,53, + 52,38,39,38,39,38,34,7,6,7,14,1,21,20,22,23,22,23,22,3,165,1,19,254,237,60,45,90,64,69,71,71,69,68,86,82,98,102,78,90, + 64,69,71,71,69,68,86,49,56,254,237,1,19,172,107,1,98,1,98,106,248,67,57,58,47,46,49,49,46,43,62,53,138,57,58,47,46,49,49,46, + 43,62,53,5,213,254,231,150,145,10,20,40,64,69,171,95,98,171,69,67,37,35,35,40,64,69,171,98,95,171,69,67,37,21,9,145,150,1,25,173, + 107,1,97,254,159,106,251,80,24,24,47,46,119,66,65,119,46,43,28,24,24,24,47,46,119,65,66,119,46,43,28,24,0,2,0,9,1,16,6,161, + 4,196,0,43,0,70,0,0,1,35,17,35,17,35,6,7,6,7,14,1,35,34,38,39,38,39,38,53,52,55,54,55,62,1,51,50,22,23,22,23, + 22,23,51,17,51,17,51,39,55,9,1,39,37,20,23,22,23,30,1,51,50,54,55,54,55,54,52,39,38,39,46,1,35,34,6,7,6,7,6,5, + 130,220,150,85,10,20,40,64,69,171,95,98,171,69,67,37,35,35,40,64,69,171,98,95,171,69,67,37,21,9,85,150,220,173,107,1,97,254,159,106, + 251,201,24,24,47,46,119,66,65,119,46,43,28,24,24,24,47,46,119,65,66,119,46,43,28,24,2,159,254,237,1,19,60,45,90,64,69,71,71,69, + 68,86,82,98,102,78,90,64,69,71,71,69,68,86,49,56,1,19,254,237,172,107,254,158,254,158,106,248,67,57,58,47,46,49,49,46,43,62,53,138, + 57,58,47,46,49,49,46,43,62,53,0,0,0,2,1,127,1,16,5,53,4,197,0,11,0,23,0,31,64,15,21,18,3,15,18,9,24,25,18,18, + 6,12,18,0,24,16,220,236,212,236,196,49,0,16,212,236,212,236,48,1,52,0,51,50,0,21,20,0,35,34,0,55,20,22,51,50,54,53,52,38, + 35,34,6,1,127,1,23,196,196,1,23,254,233,196,196,254,233,153,189,133,133,189,189,133,133,189,2,235,196,1,22,254,234,196,197,254,234,1,22,194, + 133,189,189,133,134,189,189,0,0,1,1,127,1,16,5,53,4,197,0,11,0,19,64,7,3,9,12,13,6,0,12,16,220,212,204,49,0,16,212,196, + 48,1,52,0,51,50,0,21,20,0,35,34,0,1,127,1,23,196,196,1,23,254,233,196,196,254,233,2,235,196,1,22,254,234,196,197,254,234,1,22, + 0,2,1,250,1,141,4,186,4,75,0,11,0,23,0,43,64,15,21,107,3,15,107,9,24,25,18,107,6,12,107,0,24,16,220,236,212,75,176,16, + 84,88,185,0,6,255,192,56,89,236,196,49,0,16,212,236,212,236,48,1,52,54,51,50,22,21,20,6,35,34,38,55,20,22,51,50,54,53,52,38, + 35,34,6,1,250,207,145,145,207,207,145,145,207,152,117,83,83,117,117,83,83,117,2,236,146,205,205,146,145,206,206,144,83,117,117,83,83,118,118,0, + 0,4,1,100,1,141,5,80,4,75,0,19,0,33,0,41,0,55,0,101,75,176,11,82,88,64,31,3,7,13,17,29,42,25,46,8,27,44,15,38, + 34,5,4,40,36,10,107,51,44,107,40,36,107,27,20,107,0,56,16,212,236,212,236,212,236,212,236,17,18,23,57,17,18,23,57,49,0,64,21,38, + 34,23,31,5,3,31,15,23,17,31,54,107,7,3,48,23,107,13,17,56,16,212,60,236,50,212,60,236,50,17,18,57,17,18,57,17,18,57,57,48, + 89,1,52,54,51,50,23,54,51,50,22,21,20,6,35,34,39,6,35,34,38,55,20,22,51,50,51,38,53,52,55,38,35,34,6,37,6,21,20,23, + 54,53,52,55,22,21,20,7,50,51,50,54,53,52,38,35,34,1,100,207,145,82,68,68,82,145,207,207,145,82,68,68,82,145,207,152,117,83,6,5, + 63,62,5,5,83,117,1,94,50,50,50,90,62,63,5,6,83,117,117,83,5,2,236,146,205,32,32,205,146,145,206,33,33,206,144,83,117,88,113,112, + 87,1,118,50,56,77,76,56,56,76,77,123,87,112,113,88,117,83,83,118,0,5,0,84,1,90,6,96,4,122,0,3,0,29,0,56,0,82,0,109, + 0,0,1,51,17,35,0,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52,38,39,38,47,1,50,23,22,23,30,1,21, + 20,6,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55,54,4,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53, + 52,38,39,38,47,1,50,23,22,23,30,1,21,20,6,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55,54,3,15,150,150,2,29,82,35, + 41,24,29,30,31,28,29,36,35,82,35,36,29,29,30,32,27,29,36,76,75,58,67,46,50,53,53,50,49,64,61,147,58,67,46,50,53,53,50,49, + 64,61,253,31,82,35,41,24,29,30,31,28,29,36,35,82,35,36,29,29,30,32,27,29,36,76,75,58,67,46,50,53,53,50,49,64,61,147,58,67, + 46,50,53,53,50,49,64,61,4,122,252,224,2,90,15,18,26,31,70,41,40,74,27,28,16,15,15,16,28,30,71,40,41,75,26,28,16,165,26,30, + 46,50,127,73,70,127,50,49,27,26,26,30,46,50,127,70,73,127,50,49,27,26,150,15,18,26,31,70,41,40,74,27,28,16,15,15,16,28,30,71, + 40,41,75,26,28,16,165,26,30,46,50,127,73,70,127,50,49,27,26,26,30,46,50,127,70,73,127,50,49,27,26,0,0,3,0,10,1,141,6,170, + 4,74,0,55,0,81,0,107,0,0,1,62,1,55,54,55,54,51,50,23,22,23,30,1,21,20,6,7,6,7,6,34,39,38,39,46,1,39,33,14, + 1,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55,54,51,50,23,22,23,30,1,23,36,34,7,6,7,14,1,21,20,22,23,22,23,22, + 50,55,54,55,62,1,53,52,38,39,38,39,36,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52,38,39,38,39,3,247, + 7,35,54,49,64,61,72,75,58,67,46,50,53,53,50,49,64,61,147,58,67,46,53,37,6,254,197,6,39,50,49,64,61,147,58,67,46,50,53,53, + 50,49,64,61,72,75,58,67,46,54,35,7,2,185,82,35,36,29,29,30,30,29,29,36,35,82,35,36,29,29,30,30,29,29,36,251,247,82,35,41, + 24,29,30,31,28,29,36,35,82,35,36,29,29,30,32,27,29,36,3,53,31,91,53,49,27,26,26,30,46,50,127,73,70,127,50,49,27,26,26,30, + 46,52,96,24,29,93,50,49,27,26,26,30,46,50,127,70,73,127,50,49,27,26,26,30,46,53,91,31,127,15,16,28,31,70,41,40,71,30,28,16, + 15,15,16,28,30,71,40,41,70,31,28,16,15,15,18,26,31,70,41,40,74,27,28,16,15,15,16,28,30,71,40,41,75,26,28,16,0,2,0,210, + 1,230,6,14,4,82,0,5,0,11,0,0,1,53,37,7,21,23,1,37,5,17,5,37,5,120,252,204,220,220,254,142,1,114,3,202,252,54,254,142, + 2,215,138,101,77,186,77,1,94,130,120,254,132,120,130,0,0,2,1,177,0,86,5,3,5,150,0,21,0,41,0,0,1,55,54,53,52,39,38,39, + 53,55,53,35,21,23,21,6,7,6,21,20,31,2,33,3,38,53,52,55,54,55,39,53,33,21,7,22,23,22,21,20,7,3,115,95,118,82,36,78, + 58,200,58,78,36,82,118,95,163,254,236,164,123,97,84,44,88,2,64,88,44,84,97,123,1,17,180,223,52,98,92,41,49,162,37,61,61,37,162,49, + 41,92,98,52,223,180,187,1,58,234,96,190,92,75,25,68,250,250,68,25,75,92,190,96,234,0,0,0,0,2,0,175,254,255,5,45,5,218,0,7, + 0,21,0,0,0,38,32,6,16,22,32,54,5,38,16,0,32,0,16,7,6,7,17,35,17,38,4,121,234,254,187,231,231,1,69,234,252,223,169,1, + 80,1,219,1,83,169,136,180,180,181,4,67,228,228,254,185,216,216,232,157,1,221,1,76,254,180,254,34,156,126,18,253,123,2,134,17,0,1,1,89, + 254,255,5,44,5,218,0,26,0,0,33,17,35,17,33,53,33,17,22,51,50,54,16,38,32,7,39,54,32,0,16,7,6,7,17,33,21,3,73,181, + 254,240,1,16,40,52,161,232,232,254,187,126,117,168,1,219,1,80,167,137,179,1,15,254,255,1,1,124,1,178,7,216,1,71,228,106,116,166,254,180, + 254,32,154,126,18,254,248,124,0,2,0,176,254,255,5,44,5,218,0,19,0,23,0,0,19,9,2,17,50,51,21,34,35,17,34,35,17,34,35,53, + 50,51,17,55,9,2,176,2,62,2,62,254,33,135,136,136,135,91,90,136,136,136,136,86,1,76,254,180,254,180,3,159,2,59,253,197,253,233,254,244, + 124,254,255,1,1,124,1,12,168,1,111,1,74,254,182,0,0,1,0,176,254,255,5,44,5,218,0,31,0,0,1,55,23,17,51,17,55,23,1,33, + 21,33,1,7,39,17,33,21,33,17,35,17,33,53,33,17,7,39,1,33,53,33,1,29,123,253,179,252,123,254,228,1,137,254,126,1,21,122,253,1, + 16,254,240,180,254,240,1,16,253,122,1,21,254,126,1,137,4,249,122,253,1,100,254,157,252,122,254,228,124,254,235,123,253,253,174,124,254,255,1,1, + 124,2,82,253,123,1,21,124,0,3,0,120,255,15,6,84,5,37,0,9,0,13,0,23,0,0,1,21,33,9,1,33,53,33,9,1,3,17,35,17, + 1,33,23,55,33,21,35,9,1,35,6,84,254,211,254,63,254,63,254,211,1,162,1,76,1,76,241,172,254,119,1,4,214,214,1,4,142,254,180,254, + 180,142,1,74,124,254,65,1,191,124,254,182,1,74,3,219,253,166,2,90,253,116,213,213,124,254,182,1,74,0,0,0,0,2,1,142,255,44,4,194, + 5,175,0,7,0,28,0,0,36,20,22,50,54,52,38,34,2,38,16,55,54,55,17,51,17,37,23,13,1,7,37,17,22,23,22,16,6,2,38,117, + 166,117,117,166,62,207,104,72,93,172,1,37,86,254,153,1,103,86,254,219,89,70,104,207,221,166,117,117,166,118,253,217,206,1,35,103,71,22,3,206, + 254,206,173,148,209,210,148,174,254,210,22,69,103,254,221,206,0,1,1,68,254,255,4,88,5,218,0,30,0,0,33,17,35,17,33,53,33,17,38,39, + 38,53,16,37,54,55,54,23,6,7,6,21,16,23,22,23,6,39,21,33,21,3,72,180,254,240,1,16,156,102,78,1,41,93,174,72,59,203,98,116, + 250,87,85,74,110,1,16,254,255,1,1,124,1,51,76,152,117,161,1,46,185,58,16,7,23,59,133,157,196,254,205,162,56,15,37,19,255,124,0,0, + 0,3,0,86,0,8,6,94,4,109,0,15,0,29,0,51,0,0,19,21,20,23,22,32,55,54,61,1,6,7,6,32,39,38,0,32,7,6,21,20, + 23,22,32,55,54,53,52,39,55,30,1,21,17,20,6,7,6,33,32,39,46,1,53,17,52,54,55,54,33,32,186,171,206,2,78,206,171,46,56,240, + 253,108,237,63,3,157,253,178,206,171,171,206,2,78,206,171,171,44,115,112,112,112,230,254,194,254,199,232,115,112,112,112,230,1,62,1,57,2,29,147, + 96,86,104,104,86,96,146,34,28,120,120,32,2,11,104,86,99,96,86,104,104,86,96,99,86,89,57,136,81,254,162,78,136,57,115,115,57,136,78,1, + 94,81,136,57,115,0,0,0,0,4,0,86,0,8,6,94,5,203,0,13,0,29,0,45,0,69,0,0,0,32,7,6,21,20,23,22,32,55,54,53, + 52,39,1,21,20,23,22,32,55,54,61,1,6,7,6,32,39,38,3,21,20,23,22,32,55,54,61,1,6,7,6,32,39,38,1,30,1,21,25,1, + 20,6,7,6,33,32,39,46,1,53,25,1,52,54,55,54,33,32,4,129,253,178,206,171,171,206,2,78,206,171,171,251,107,171,206,2,78,206,171,46, + 56,240,253,108,237,63,42,171,206,2,78,206,171,46,56,240,253,108,237,63,4,151,115,112,112,112,230,254,194,254,199,232,115,112,112,112,230,1,62,1, + 57,5,103,104,86,99,96,86,104,104,86,96,99,86,254,124,147,96,86,104,104,86,96,146,34,28,120,120,32,254,193,147,96,86,104,104,86,96,146,34, + 28,120,120,32,3,90,57,136,81,254,162,254,162,78,136,57,115,115,57,136,78,1,94,1,94,81,136,57,115,0,0,0,0,5,0,86,0,8,6,94, + 4,109,0,11,0,33,0,49,0,63,0,85,0,0,1,6,7,6,33,32,39,38,39,22,33,32,0,32,23,22,23,22,21,6,7,6,7,6,32,39, + 38,39,38,55,54,55,54,55,3,21,20,23,22,32,55,54,61,1,6,7,6,32,39,38,0,32,7,6,21,20,23,22,32,55,54,53,52,39,55,30, + 1,21,17,20,6,7,6,33,32,39,46,1,53,17,52,54,55,54,33,32,5,120,31,56,184,254,241,254,239,182,59,30,236,1,52,1,49,253,192,2, + 32,182,58,31,28,2,26,31,58,184,253,224,182,59,30,29,1,1,27,32,57,217,171,206,2,78,206,171,46,56,240,253,108,237,63,3,157,253,178,206, + 171,171,206,2,78,206,171,171,44,115,112,112,112,230,254,194,254,199,232,115,112,112,112,230,1,62,1,57,1,100,27,28,93,93,30,26,99,2,163,93, + 29,28,25,14,14,22,28,29,93,93,30,27,24,12,15,24,28,29,254,213,147,96,86,104,104,86,96,146,34,28,120,120,32,2,11,104,86,99,96,86, + 104,104,86,96,99,86,89,57,136,81,254,162,78,136,57,115,115,57,136,78,1,94,81,136,57,115,0,0,0,7,0,86,0,8,6,94,5,203,0,21, + 0,33,0,45,0,59,0,75,0,91,0,115,0,0,0,32,23,22,23,22,21,6,7,6,7,6,32,39,38,39,38,55,54,55,54,55,1,6,7,6, + 33,32,39,38,39,22,33,32,23,6,7,6,33,32,39,38,39,22,33,32,2,32,7,6,21,20,23,22,32,55,54,53,52,39,1,21,20,23,22,32, + 55,54,61,1,6,7,6,32,39,38,3,21,20,23,22,32,55,54,61,1,6,7,6,32,39,38,1,30,1,21,25,1,20,6,7,6,33,32,39,46, + 1,53,25,1,52,54,55,54,33,32,2,75,2,32,182,58,31,28,2,26,31,58,184,253,224,182,59,30,29,1,1,27,32,57,3,229,31,56,184,254, + 241,254,239,182,59,30,236,1,52,1,49,237,31,56,184,254,241,254,239,182,59,30,236,1,52,1,49,10,253,178,206,171,171,206,2,78,206,171,171,251, + 107,171,206,2,78,206,171,46,56,240,253,108,237,63,42,171,206,2,78,206,171,46,56,240,253,108,237,63,4,151,115,112,112,112,230,254,194,254,199,232, + 115,112,112,112,230,1,62,1,57,5,3,93,29,28,25,14,14,22,28,29,93,93,30,27,24,12,15,24,28,29,254,28,27,28,93,93,30,26,99,252, + 27,28,93,93,30,26,99,4,101,104,86,99,96,86,104,104,86,96,99,86,254,124,147,96,86,104,104,86,96,146,34,28,120,120,32,254,193,147,96,86, + 104,104,86,96,146,34,28,120,120,32,3,90,57,136,81,254,162,254,162,78,136,57,115,115,57,136,78,1,94,1,94,81,136,57,115,0,0,3,0,175, + 255,227,5,45,6,190,0,11,0,32,0,44,0,0,1,34,38,53,52,54,51,50,22,21,20,6,19,22,23,22,21,20,0,35,34,0,16,55,54,55, + 3,1,39,9,1,21,1,3,50,54,53,52,38,35,34,6,21,20,22,2,238,64,97,94,67,70,91,94,23,181,135,169,254,176,239,236,254,173,169,136, + 180,1,254,249,1,1,99,1,99,254,247,90,164,231,231,164,161,234,234,1,125,91,68,62,88,85,65,66,93,2,187,17,126,157,238,239,254,180,1,76, + 1,222,156,126,18,1,103,254,250,199,1,93,254,163,199,1,5,250,247,228,164,163,216,216,163,164,228,0,0,3,0,22,1,133,6,108,5,20,0,80, + 0,106,0,133,0,0,1,39,35,34,39,38,7,6,20,7,14,1,7,6,35,34,39,38,39,38,39,38,52,55,62,1,55,54,51,50,31,1,22,51, + 50,55,62,1,55,54,38,39,38,39,38,47,1,38,39,38,39,38,52,55,62,1,55,54,50,22,23,22,23,22,20,7,14,1,7,6,23,22,31,1, + 33,50,23,22,23,33,23,37,22,51,50,55,62,1,55,54,52,39,38,39,46,1,35,34,7,14,1,7,6,20,23,30,1,1,38,35,34,7,14,1, + 7,6,20,23,22,23,30,1,51,50,55,62,1,55,54,52,39,38,39,38,3,205,214,115,174,28,42,3,2,9,13,48,36,28,43,36,36,36,26,21, + 23,18,12,13,49,35,29,42,35,9,90,97,90,37,14,22,37,3,3,7,13,12,22,78,84,49,50,25,28,15,19,12,13,52,32,35,72,72,26,31, + 13,18,12,9,30,3,5,34,41,109,82,1,139,232,79,101,17,253,98,213,252,13,21,20,24,16,21,29,5,5,12,10,15,17,44,17,20,20,21,26, + 7,6,13,10,30,1,48,18,23,28,12,21,30,4,5,12,10,15,15,43,20,23,17,21,28,5,6,13,10,15,11,1,133,205,6,8,13,8,41,23, + 32,46,13,11,15,14,25,21,36,29,74,30,32,46,13,11,3,37,39,3,5,28,7,8,46,19,19,19,68,34,20,20,24,27,30,38,66,29,32,49, + 10,11,30,24,30,28,36,67,30,23,29,7,13,22,26,109,82,32,41,75,207,121,9,5,7,24,16,17,31,23,18,13,16,16,6,6,23,17,17,32, + 22,18,28,2,181,9,5,7,25,15,17,33,21,18,14,13,18,5,7,25,14,18,32,22,18,14,9,0,0,3,0,86,1,33,6,69,4,181,0,21, + 0,100,0,122,0,0,18,50,54,55,62,1,53,52,38,39,46,1,34,6,7,14,1,21,20,22,23,22,1,5,6,35,34,39,37,7,14,1,21,20, + 22,21,20,6,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55,54,59,1,50,55,62,2,52,46,1,39,38,43,1,34,39,38,39,46,1, + 53,52,54,55,54,55,54,50,23,22,23,30,1,21,20,6,21,20,22,31,1,37,54,51,50,23,36,34,6,7,14,1,21,20,22,23,30,1,50,54, + 55,62,1,53,52,38,39,38,253,46,38,16,17,16,16,17,16,38,46,38,16,17,16,16,17,16,3,1,2,109,44,109,81,219,254,145,106,150,80,17, + 28,28,22,40,33,78,33,34,28,26,30,28,28,22,40,33,9,97,86,102,27,38,24,24,38,27,98,90,53,53,33,40,22,28,28,30,26,28,34,33, + 78,33,40,22,28,28,17,80,150,106,1,111,219,81,109,44,250,230,46,38,16,17,16,16,17,16,38,46,38,16,17,16,16,17,16,1,113,14,13,14, + 31,19,18,31,14,13,14,14,13,14,31,18,19,31,14,13,1,108,252,63,87,146,44,62,14,14,8,38,25,35,60,26,21,16,13,13,14,23,21,65, + 35,34,60,26,21,16,13,34,9,26,40,16,40,26,9,34,13,16,21,26,60,34,35,65,21,23,14,13,13,16,21,26,60,35,25,38,8,14,14,62, + 44,146,87,63,126,14,13,14,31,19,18,31,14,13,14,14,13,14,31,18,19,31,14,13,0,3,0,22,0,192,6,108,4,79,0,79,0,106,0,133, + 0,0,1,51,7,33,6,7,6,35,33,7,6,7,6,21,20,22,23,22,20,7,6,7,14,1,34,39,46,1,39,38,52,55,54,55,54,63,1,54, + 55,54,55,62,1,39,46,1,39,38,35,34,15,1,6,35,34,39,46,1,39,38,52,55,62,1,55,54,51,50,23,30,1,23,22,20,23,22,55,54, + 59,1,37,6,7,6,7,6,20,23,30,1,23,22,51,50,54,55,54,55,54,52,39,46,1,39,38,35,34,1,54,55,54,55,54,52,39,46,1,39, + 38,35,34,6,7,6,7,6,20,23,30,1,23,22,51,50,3,205,214,213,2,158,17,101,79,232,254,117,82,100,50,29,33,9,12,18,13,31,26,72, + 72,35,32,55,10,12,19,12,31,25,9,90,84,78,22,12,13,7,3,3,29,30,8,43,90,97,50,49,35,43,28,36,48,13,12,18,18,52,36,36, + 36,43,28,36,48,13,9,2,6,39,25,177,115,253,185,21,15,9,16,13,6,7,23,24,17,23,21,42,15,15,10,13,6,7,22,26,17,23,20,1, + 6,21,15,9,16,13,6,7,28,19,18,22,21,42,15,15,10,12,5,7,30,18,20,20,14,4,79,207,75,41,32,82,100,35,20,15,6,30,23,33, + 62,38,28,30,24,30,11,10,51,30,34,57,42,27,30,24,4,36,34,68,19,19,19,46,8,7,22,11,3,39,20,20,11,14,45,32,32,68,33,32, + 50,14,15,11,13,46,32,23,44,5,14,9,6,84,8,14,8,24,19,37,15,17,21,8,6,18,14,13,18,22,35,14,18,21,8,5,253,58,9,13, + 8,24,19,38,15,16,25,5,5,18,13,14,18,19,40,12,17,25,5,5,0,9,0,73,0,244,6,152,4,232,0,90,0,120,0,150,0,180,0,210, + 0,254,1,45,1,52,1,72,0,0,1,54,55,38,39,38,39,38,43,1,34,39,38,39,38,39,38,52,55,54,55,54,55,54,51,50,23,22,23,22, + 23,22,21,20,7,22,31,1,37,54,51,50,23,22,21,20,7,13,1,22,21,20,7,6,35,34,39,37,7,6,7,22,21,20,7,6,7,6,7,6, + 35,34,39,38,39,38,39,38,53,52,55,54,55,54,55,54,59,1,50,55,54,0,50,55,54,55,54,55,54,53,52,39,38,39,38,39,38,34,7,6, + 7,6,7,6,21,20,23,22,23,22,23,18,50,55,54,55,54,55,54,53,52,39,38,39,38,39,38,34,7,6,7,6,7,6,21,20,23,22,23,22, + 23,18,34,39,38,39,38,39,38,53,52,55,54,55,54,55,54,50,23,22,23,22,23,22,21,20,7,6,7,6,7,2,34,39,38,39,38,39,38,53, + 52,55,54,55,54,55,54,50,23,22,23,22,23,22,21,20,7,6,7,6,7,5,39,38,39,38,39,38,53,52,55,54,53,52,39,38,39,38,39,38, + 34,7,6,7,6,7,6,21,20,23,22,23,22,23,22,59,1,50,23,22,23,22,23,55,54,3,45,1,38,35,34,7,5,6,7,6,7,6,7,6, + 43,1,34,7,6,7,6,7,6,21,20,23,22,23,22,23,22,50,55,54,55,54,55,54,53,52,39,38,53,52,55,54,37,5,22,51,50,55,37,38, + 20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,50,23,22,23,2,73,11,7,7,11,9,25,81,92,67,45,45,37,40,34,19,18,18,16,40, + 27,47,42,48,46,44,43,34,40,13,18,6,47,142,88,1,93,226,92,136,57,8,30,254,2,1,254,30,8,60,133,92,226,254,163,88,142,47,6,18, + 19,34,36,41,48,42,51,39,41,34,42,13,18,18,16,37,28,49,42,48,67,82,91,23,254,235,28,11,12,9,10,3,3,3,3,10,9,12,11,28, + 11,12,9,10,3,3,3,3,10,9,12,11,28,11,12,9,10,3,3,3,3,10,9,12,11,28,11,12,9,10,3,3,3,3,10,9,12,50,50,21, + 21,17,19,9,9,9,9,19,17,21,21,50,21,21,17,19,9,9,9,9,19,17,21,21,50,21,21,17,19,9,9,9,9,19,17,21,21,50,21,21, + 17,19,9,9,9,9,19,17,21,1,134,37,149,39,22,11,16,11,6,13,13,27,20,38,31,74,31,32,27,24,15,13,13,13,27,20,38,31,37,67, + 92,100,30,18,23,7,35,28,189,1,237,2,95,42,93,79,217,254,145,148,18,17,23,20,28,104,88,67,37,31,38,20,27,13,13,13,15,24,27,32, + 31,74,31,38,20,27,13,13,6,11,16,12,1,147,1,31,217,79,93,42,253,221,217,5,6,9,9,22,9,9,6,5,5,6,9,9,22,9,9,6, + 2,217,8,13,14,7,6,10,32,16,13,34,28,41,38,96,38,34,39,26,18,16,16,16,31,36,34,47,39,29,18,9,60,37,139,90,83,13,17,31, + 12,207,207,12,37,13,11,83,90,139,37,60,9,24,23,47,39,42,29,32,14,16,16,17,28,34,37,53,34,45,40,36,35,27,19,16,32,9,254,210, + 4,5,8,7,7,4,8,7,5,6,8,7,5,4,4,5,8,7,7,4,7,8,5,6,8,7,5,2,59,4,5,8,7,7,4,7,8,5,6,8, + 7,5,4,4,5,8,7,7,4,8,7,5,6,8,7,5,253,130,7,8,14,16,17,18,22,21,18,17,16,14,8,7,7,8,14,16,17,18,21,22, + 18,17,16,14,8,2,56,7,8,14,16,17,18,21,22,18,17,16,14,8,7,7,8,14,16,17,18,22,21,18,17,16,14,8,92,15,61,7,4,6, + 8,14,10,24,14,23,33,28,27,25,19,16,12,12,14,22,19,32,28,33,32,28,27,25,19,16,12,34,10,14,17,8,24,17,254,242,194,247,47,86, + 146,67,30,30,15,14,10,34,12,16,19,25,27,28,32,33,28,32,19,22,14,12,12,16,19,25,27,28,33,23,13,25,10,20,2,2,91,117,86,47, + 225,43,22,9,9,6,5,5,6,9,9,22,9,9,6,5,5,6,9,0,0,3,0,86,255,227,6,94,5,240,0,97,0,117,0,135,0,0,1,14, + 1,21,20,22,23,22,23,22,32,55,54,55,62,1,53,52,38,39,38,39,38,35,34,7,6,7,14,1,21,20,22,23,21,38,2,53,52,18,55,54, + 55,54,51,50,23,22,23,22,18,21,20,2,7,6,7,6,32,39,46,2,53,52,54,55,38,53,52,55,18,51,50,23,22,21,20,7,6,35,34,7, + 6,7,6,21,20,23,22,21,20,7,6,7,6,35,34,23,54,55,54,55,54,55,22,23,22,7,6,7,6,7,6,35,34,39,38,1,22,23,22,21, + 20,7,6,7,6,35,34,39,54,55,54,53,52,2,19,3,12,21,19,20,24,111,1,27,122,119,98,100,97,95,102,95,122,120,138,134,124,119,98,100, + 97,77,44,107,114,110,117,108,141,140,156,154,142,134,115,112,115,110,117,110,139,141,254,199,138,42,68,36,32,28,4,108,181,169,81,6,16,36,34,9, + 54,42,31,68,63,16,18,22,34,53,39,18,16,75,24,40,50,25,23,3,45,6,18,2,10,19,27,35,32,19,3,3,27,1,158,62,22,16,21,13, + 30,10,28,10,58,17,29,30,1,55,6,30,27,28,50,18,19,11,51,51,49,99,100,237,136,141,232,105,96,52,51,51,49,99,100,237,141,135,188,62, + 152,109,1,16,156,157,1,16,119,110,60,59,59,56,114,111,254,236,161,152,254,240,119,112,58,59,59,18,66,86,48,47,77,31,16,15,205,239,1,144, + 8,20,56,58,68,64,42,31,124,115,97,32,22,27,30,9,45,70,40,28,55,12,34,42,61,56,25,38,8,21,15,48,33,50,29,28,1,6,4,32, + 22,17,12,49,45,53,36,38,12,10,18,54,58,66,52,0,0,6,0,86,255,227,6,94,5,240,0,13,0,26,0,40,0,66,0,92,0,119,0,0, + 1,46,1,39,37,6,21,20,22,23,22,23,22,23,19,38,39,38,34,7,6,7,19,54,51,50,23,19,5,14,1,7,37,54,55,54,55,62,1,53, + 52,36,50,23,22,23,30,1,21,20,6,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55,19,34,7,6,7,14,1,21,20,22,23,30,1, + 32,55,54,55,62,1,53,52,38,39,38,39,38,39,50,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,54, + 1,169,63,39,5,1,42,8,38,36,32,49,20,8,243,36,45,43,104,43,45,36,70,51,55,56,50,136,1,42,2,42,63,254,146,14,14,49,32,36, + 38,254,231,62,26,27,22,22,22,22,22,22,27,26,62,26,27,22,22,22,22,22,22,27,57,134,124,119,98,100,97,98,99,96,242,1,17,122,119,98, + 100,97,95,102,95,122,120,138,154,142,134,115,112,115,110,117,110,139,141,254,203,142,134,115,112,115,110,117,108,141,140,1,119,73,95,15,253,30,34,50, + 91,36,32,22,9,1,1,163,34,20,19,19,20,34,1,131,9,9,254,11,253,7,103,73,131,4,6,22,32,36,91,50,33,118,11,12,21,23,53,31, + 30,53,23,21,12,11,11,12,21,23,53,30,31,53,23,21,12,2,21,51,49,99,100,237,141,133,241,99,97,102,51,49,99,100,237,136,141,232,105,96, + 52,51,100,59,56,114,111,254,236,161,152,254,240,119,112,58,59,59,56,114,111,1,20,156,157,1,16,119,110,60,59,0,0,1,0,120,0,44,6,65, + 5,170,0,45,0,0,19,53,55,39,51,23,54,37,2,3,51,23,51,21,35,23,51,21,35,23,33,50,23,22,20,7,6,35,33,7,51,21,35,7, + 51,21,35,7,35,18,19,36,39,7,35,55,148,36,64,100,146,146,1,30,53,171,123,115,148,86,100,154,93,152,1,8,70,48,32,32,48,70,254,248, + 152,93,154,100,86,148,115,123,171,53,254,226,146,146,100,64,2,215,40,5,218,201,13,10,1,20,1,106,150,80,130,80,198,26,17,44,17,26,198,80, + 130,80,150,1,96,1,30,11,12,201,218,0,0,5,0,132,0,220,6,48,4,249,0,13,0,20,0,34,0,41,0,45,0,0,9,1,33,1,54,55, + 54,55,54,50,23,22,23,22,23,1,17,1,22,21,20,5,1,33,1,6,7,6,7,6,34,39,38,39,38,39,1,17,1,38,53,52,1,17,33,17, + 3,246,1,184,251,88,1,184,7,8,29,36,35,82,35,43,22,8,47,1,174,254,82,3,254,159,254,70,4,168,254,70,6,7,29,36,35,82,35,36, + 29,7,49,254,83,1,173,3,253,242,5,172,3,104,1,44,254,212,9,8,28,16,15,15,19,25,9,170,254,222,2,141,254,221,17,18,19,107,254,211, + 1,45,8,7,28,16,15,15,16,28,7,170,1,34,253,115,1,33,19,19,18,253,223,4,29,251,227,0,0,4,1,179,0,0,4,124,5,239,0,80, + 0,208,0,227,0,243,0,0,1,52,55,54,63,1,54,55,54,51,23,38,39,38,39,38,53,52,55,54,51,50,23,22,23,22,31,1,22,23,54,55, + 54,55,54,55,54,53,52,39,38,53,52,55,54,51,50,23,22,23,22,21,20,7,3,20,21,20,31,1,22,21,20,7,23,22,7,6,29,1,33,53, + 52,39,38,39,38,53,52,39,38,1,38,35,34,15,1,6,15,1,6,15,1,39,38,47,1,38,39,38,39,38,35,34,7,6,21,20,23,22,31,2, + 22,23,22,21,20,7,6,35,34,39,38,39,38,47,1,38,39,38,35,34,7,6,7,22,23,22,23,22,23,22,23,20,7,6,7,21,20,23,22,23, + 22,23,22,21,20,7,38,39,38,39,38,63,1,54,39,38,39,6,35,34,39,38,39,38,35,34,23,22,23,22,31,1,22,21,7,33,39,52,55,54, + 61,1,39,54,53,52,39,38,53,52,53,19,52,53,52,39,1,7,22,23,22,23,22,23,22,51,50,55,54,53,52,39,38,39,38,7,6,7,22,23, + 22,51,50,55,54,53,52,39,38,47,1,1,179,37,23,17,52,14,45,2,2,4,26,41,30,20,34,23,27,36,16,18,48,17,74,75,38,15,14,18, + 7,5,10,5,12,5,1,1,31,27,41,55,29,13,1,10,1,9,2,2,4,1,3,1,22,3,253,223,5,9,37,48,27,18,2,135,3,39,35,4, + 5,1,10,35,5,22,54,25,9,43,17,45,76,26,20,17,14,17,8,7,29,13,19,95,136,95,94,4,20,5,4,22,18,6,3,47,115,52,7,42, + 30,19,12,7,5,3,8,49,40,13,8,46,50,1,21,15,1,54,23,24,54,9,3,28,124,47,6,7,14,2,7,2,7,7,15,28,40,14,15,24, + 17,49,9,4,2,10,7,4,10,92,1,1,1,171,1,12,13,2,3,9,5,12,2,253,254,17,35,58,55,17,4,1,17,10,11,4,2,12,5,6, + 108,128,15,3,83,38,15,11,16,8,4,12,8,11,120,2,235,55,49,7,31,93,24,23,1,1,47,126,91,35,60,36,28,27,32,5,12,26,111,187, + 95,37,21,16,64,44,31,16,134,58,6,11,10,6,6,36,34,30,59,26,18,118,82,21,18,254,212,7,9,24,29,22,36,88,36,43,124,25,137,19, + 141,137,182,18,33,53,68,88,38,80,89,59,2,182,57,68,111,30,54,194,29,6,15,11,13,98,39,110,149,50,15,12,11,6,11,31,56,26,51,254, + 101,70,93,12,8,19,4,1,20,6,7,52,84,38,3,31,22,10,7,12,22,38,32,18,12,47,53,48,36,63,45,32,2,49,64,27,17,38,17,6, + 5,16,9,51,108,15,10,23,23,75,15,11,10,5,25,3,5,13,67,4,34,80,49,22,214,9,11,159,183,58,48,51,60,8,68,58,53,88,73,46, + 41,6,7,1,68,4,7,19,38,254,91,20,43,45,49,58,13,12,17,16,9,9,21,23,9,5,113,18,20,47,65,56,9,18,10,10,18,17,11,6, + 103,0,0,0,0,8,0,43,0,169,6,106,5,108,0,6,0,57,0,76,0,112,0,123,0,127,0,137,0,141,0,0,19,22,55,54,53,52,39,1, + 34,39,38,35,34,7,6,43,1,34,39,7,5,19,38,53,52,63,1,54,55,54,55,54,55,54,51,50,23,55,54,51,50,23,22,21,7,23,22,51, + 50,55,51,22,21,20,7,35,53,6,37,54,55,54,55,1,39,38,35,34,7,6,15,1,22,21,20,7,54,1,34,47,1,7,20,7,54,55,22,21, + 20,7,6,35,34,7,22,21,20,7,50,55,54,51,50,23,22,51,50,55,54,53,52,39,6,55,22,21,20,7,21,51,54,53,52,39,5,54,55,15, + 1,6,21,20,23,22,23,54,53,52,5,7,55,38,216,27,20,15,16,3,112,47,108,48,29,38,150,74,33,99,83,37,89,254,248,129,6,14,69,28, + 25,93,123,64,67,34,36,52,62,153,45,59,37,30,13,190,204,44,40,54,6,225,89,62,248,109,252,188,33,30,8,5,1,78,36,17,31,88,236,54, + 34,20,47,44,40,3,171,52,25,242,115,83,63,88,15,36,85,129,62,24,34,20,115,74,63,75,40,96,46,47,52,137,43,50,25,75,50,46,158,48, + 62,252,176,83,13,162,90,112,48,31,43,23,254,160,49,94,7,1,240,3,39,31,31,32,16,254,199,14,5,16,8,59,99,115,1,12,18,32,26,47, + 232,94,34,124,89,47,26,13,52,171,50,56,25,29,219,135,29,30,131,180,207,149,108,37,233,37,111,29,15,1,116,30,14,233,53,111,65,61,39,89, + 36,9,1,97,16,157,133,163,84,2,42,13,22,18,16,39,1,39,71,43,45,13,11,12,6,37,95,107,106,126,7,29,114,141,125,106,76,96,208,134, + 124,239,92,103,195,75,26,64,47,30,20,3,46,56,53,150,99,40,36,0,0,7,0,182,0,154,5,203,5,175,0,19,0,25,0,32,0,40,0,50, + 0,76,0,83,0,0,1,62,1,53,52,47,1,6,35,20,7,6,35,20,7,23,22,51,50,54,1,63,1,15,2,19,37,1,19,37,1,19,5,1, + 51,50,53,52,39,1,0,54,53,52,39,1,7,1,22,51,1,62,1,55,54,51,50,22,21,20,7,14,1,7,14,1,7,6,35,34,38,53,52,55, + 62,1,23,7,1,22,51,50,39,5,37,8,12,2,59,23,30,54,54,73,22,237,8,7,10,26,252,128,153,13,146,153,13,131,1,9,2,125,184,253, + 103,253,132,17,1,189,2,13,2,63,2,253,194,1,164,54,6,253,251,113,2,5,17,15,253,110,13,31,16,13,10,14,17,5,6,19,14,14,29,17, + 14,9,14,16,4,5,20,45,127,2,62,11,10,57,1,1,64,8,28,10,5,8,238,23,72,54,55,28,24,59,2,11,2,249,152,146,13,152,146,1, + 122,18,253,131,253,104,184,2,124,1,9,20,253,243,56,10,12,2,62,252,182,54,33,15,17,2,6,113,253,250,6,2,234,13,21,5,4,17,13,10, + 14,16,31,13,14,20,5,4,14,16,11,13,16,30,244,14,253,194,2,66,0,7,0,53,1,150,6,142,4,62,0,17,0,23,0,30,0,37,0,43, + 0,63,0,70,0,0,0,52,38,39,38,47,1,20,7,22,20,7,22,21,55,54,55,54,5,53,39,7,21,23,3,55,33,9,1,33,39,1,33,54, + 53,52,39,33,0,52,39,33,21,33,36,52,54,55,62,1,50,22,23,30,1,20,6,7,14,1,34,38,39,38,23,7,33,54,53,52,39,5,163,7, + 7,5,10,210,21,51,51,21,210,10,5,7,251,166,94,94,94,175,175,3,82,2,88,253,168,252,174,175,1,73,2,180,25,35,253,6,3,74,50,253, + 86,2,170,252,108,7,8,7,18,20,18,7,8,7,7,8,7,18,20,18,7,8,197,80,2,250,35,25,2,222,24,21,9,7,6,126,33,20,56,144, + 56,20,33,126,6,7,9,75,216,112,112,216,112,1,104,200,254,172,254,172,200,1,44,25,23,27,25,254,196,112,24,160,60,40,35,15,14,16,16,14, + 15,35,40,35,15,14,16,16,14,15,105,100,25,27,23,25,0,7,0,182,0,154,5,203,5,175,0,19,0,25,0,32,0,40,0,50,0,76,0,83, + 0,0,1,46,1,35,34,15,1,22,21,50,23,22,21,50,23,55,54,53,52,38,1,39,31,2,39,7,39,3,1,37,3,1,39,23,1,54,53,52, + 43,1,46,1,35,34,7,1,23,1,54,53,1,46,1,39,38,53,52,54,51,50,23,30,1,23,30,1,23,22,21,20,6,35,34,39,46,1,19,1, + 54,35,34,7,1,5,37,9,26,10,7,8,237,22,73,54,54,30,23,59,2,12,252,111,146,13,153,146,13,168,198,17,2,124,2,153,184,253,131,18, + 14,2,62,2,63,2,37,54,33,15,17,253,251,113,2,5,6,253,23,14,20,5,4,16,14,9,14,17,29,14,14,19,6,5,17,14,10,13,16,31, + 18,2,12,1,57,10,11,253,194,5,9,9,11,2,59,24,28,55,54,72,23,238,8,5,10,28,253,24,13,146,152,13,146,213,198,1,9,2,124,184, + 253,104,253,131,236,127,2,62,12,10,56,136,54,6,253,250,113,2,6,17,15,253,109,14,30,16,13,11,16,14,4,5,20,14,13,31,16,14,10,13, + 17,4,5,21,1,15,2,12,66,2,253,194,0,2,0,88,1,123,6,14,4,91,0,37,0,71,0,0,18,16,39,50,51,32,37,1,21,37,46,1, + 39,38,34,7,6,7,14,1,20,22,23,22,23,22,50,55,62,1,55,37,21,1,36,33,34,35,18,20,7,50,51,50,5,37,5,6,7,6,34,39, + 38,39,46,1,52,54,55,54,55,54,50,23,22,23,5,37,4,35,34,35,138,50,8,7,1,37,2,23,2,107,253,191,5,14,18,13,30,13,14,11, + 10,12,14,8,11,14,13,30,13,18,14,5,2,65,253,149,253,233,254,219,7,8,153,23,4,5,177,2,15,1,183,254,156,22,27,26,62,26,27,22, + 22,22,22,22,22,27,26,62,26,27,22,1,100,254,73,253,241,177,5,4,2,73,1,68,96,110,254,237,83,28,8,16,8,6,6,6,10,9,29,32, + 31,7,10,6,6,6,8,16,8,28,83,254,237,110,1,71,138,89,110,185,24,21,12,11,11,12,21,23,53,62,53,23,21,12,11,11,12,21,24,185, + 110,0,0,0,0,1,0,138,1,173,6,14,4,41,0,40,0,0,1,37,21,1,36,35,34,35,54,52,39,50,51,50,37,1,21,37,38,39,38,39, + 38,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,54,3,232,2,38,253,149,253,236,248,7,6,50,50,6,7,248,2,20,2,107,253, + 218,7,15,14,18,17,42,17,18,14,15,15,15,15,14,18,17,42,17,18,14,15,2,197,28,33,254,237,110,96,224,96,110,254,237,33,29,17,15,14, + 8,8,8,8,14,15,35,21,20,35,15,14,8,8,8,8,14,15,0,0,0,1,1,51,0,198,5,87,5,10,0,28,0,0,1,50,23,22,51,50, + 55,0,19,54,51,50,22,21,20,7,0,1,6,35,34,39,38,39,38,53,52,55,54,1,197,39,20,40,17,13,14,1,25,239,62,135,32,22,33,254, + 126,254,182,23,71,72,13,34,46,52,70,43,2,142,64,120,20,1,194,1,22,72,12,9,14,41,254,48,253,252,36,6,15,138,153,39,42,39,24,0, + 0,1,0,237,0,178,5,197,5,12,0,30,0,0,1,50,23,22,51,50,55,0,55,54,51,50,23,22,21,20,7,0,7,6,35,34,39,38,39,38, + 53,52,55,54,51,1,197,39,20,40,17,13,14,1,25,239,101,96,127,26,11,23,253,125,123,42,152,50,55,23,57,72,70,96,48,3,26,64,120,20, + 1,157,175,74,8,3,22,18,27,253,30,222,76,26,12,141,178,134,49,32,44,0,0,0,0,1,1,3,0,148,5,177,5,65,0,11,0,0,9,1, + 7,9,1,39,9,1,55,9,1,23,3,231,1,201,142,254,56,254,55,142,1,201,254,55,142,1,201,1,201,142,2,234,254,55,141,1,201,254,55,141, + 1,201,1,201,141,254,56,1,201,141,0,0,0,1,0,175,0,63,6,5,5,150,0,11,0,0,9,11,4,145,1,116,254,201,254,140,254,140,254,201, + 1,116,254,140,1,55,1,116,1,116,1,55,2,234,254,140,254,201,1,116,254,140,1,55,1,116,1,116,1,55,254,140,1,117,254,201,0,1,0,241, + 255,238,5,156,5,220,0,66,0,0,1,50,23,22,23,54,51,50,23,22,21,20,7,6,3,22,23,22,21,20,15,1,22,21,20,7,6,35,34,39, + 38,39,6,3,6,35,34,39,38,53,52,55,54,55,18,19,2,39,38,53,52,55,54,51,50,23,54,55,54,51,50,23,22,23,54,55,54,4,248,10, + 16,17,18,29,17,15,26,16,22,208,196,81,143,12,30,32,4,22,26,12,26,20,120,128,172,222,32,76,36,4,51,11,5,27,204,228,122,40,9,18, + 19,16,15,23,9,13,18,28,32,10,54,88,142,204,24,5,220,16,16,26,51,27,17,21,27,23,226,254,241,198,239,20,12,23,25,22,12,20,30,16, + 18,26,154,208,224,254,138,54,42,28,61,80,31,14,42,1,62,1,10,1,34,157,35,10,14,26,26,29,17,12,16,30,168,152,184,204,24,0,0,0, + 0,1,0,252,0,0,6,8,5,234,0,82,0,0,1,50,23,22,23,54,23,22,23,22,21,20,7,6,3,22,23,22,21,20,7,6,7,6,7,6, + 35,34,39,6,7,6,35,34,39,38,39,2,7,6,43,1,34,39,38,39,6,35,34,39,38,53,52,55,38,39,38,53,52,55,54,55,38,3,38,53, + 52,55,54,51,50,23,54,55,54,51,50,23,22,23,18,55,54,5,84,29,27,20,8,26,10,32,14,14,16,241,235,148,148,17,30,20,37,2,14,24, + 32,36,30,8,14,36,27,23,26,89,121,230,88,17,21,2,18,17,15,2,20,18,25,29,36,30,9,9,18,24,130,196,122,99,22,23,16,22,26,48, + 1,11,23,17,43,13,106,150,231,249,12,5,234,30,22,58,1,5,12,14,13,21,40,16,219,254,199,204,162,18,24,49,26,17,2,17,35,58,24,18, + 11,27,28,95,191,254,251,135,26,36,31,13,12,30,35,17,27,45,3,13,24,24,21,31,176,212,189,1,11,61,28,26,49,32,39,14,25,50,26,196, + 186,1,8,218,12,0,0,0,0,3,0,112,0,0,6,68,5,213,0,11,0,23,0,35,0,0,1,17,33,17,33,17,33,17,33,17,33,17,37,33, + 17,33,17,33,17,33,17,33,17,33,3,33,21,33,17,35,17,33,53,33,17,51,4,54,254,72,254,86,1,170,1,184,1,170,254,166,1,190,254,66, + 253,168,254,66,1,190,2,88,200,1,190,254,66,200,254,66,1,190,200,3,198,1,171,254,85,254,72,254,86,1,170,1,184,80,253,168,254,66,1,190, + 2,88,1,191,253,121,200,254,66,1,190,200,1,191,0,0,0,1,0,112,0,0,6,68,5,213,0,11,0,0,1,33,17,33,17,33,17,33,17,33, + 17,33,4,34,2,34,253,222,254,112,253,222,2,34,1,144,3,178,254,112,253,222,2,34,1,144,2,35,0,2,0,112,0,0,6,68,5,213,0,3, + 0,15,0,0,1,51,53,35,55,33,21,33,17,35,17,33,53,33,17,51,2,227,238,238,239,2,114,253,142,240,253,142,2,114,240,2,115,238,1,240, + 253,142,2,114,240,2,115,0,0,2,0,112,0,0,6,68,5,213,0,3,0,15,0,0,1,33,17,33,37,33,17,33,17,33,17,33,17,33,17,33, + 2,147,1,142,254,114,1,143,2,34,253,222,254,112,253,222,2,34,1,144,2,35,1,142,1,254,112,253,222,2,34,1,144,2,35,0,0,1,1,82, + 0,0,5,98,5,213,0,11,0,0,1,33,21,33,17,35,17,33,53,33,17,51,3,210,1,144,254,112,240,254,112,1,144,240,4,69,240,252,171,3, + 85,240,1,144,0,2,1,12,0,0,5,108,5,213,0,15,0,27,0,0,1,51,23,17,33,17,33,39,17,35,39,17,33,17,33,23,7,17,35,17, + 33,21,33,17,51,17,33,53,4,64,150,150,254,212,254,142,150,150,150,1,44,1,114,150,200,220,254,212,1,44,220,1,44,4,169,150,254,142,253,95, + 150,2,11,150,1,114,1,44,150,250,1,44,254,212,220,253,95,2,161,220,0,3,1,62,0,0,5,118,5,213,0,11,0,23,0,35,0,0,1,17, + 33,17,33,17,33,17,33,17,33,17,39,33,17,33,17,33,17,33,17,33,17,33,3,33,21,33,17,35,17,33,53,33,17,51,4,14,254,152,254,232, + 1,24,1,104,1,24,200,1,24,254,232,253,248,254,232,1,24,2,8,160,1,24,254,232,200,254,232,1,24,200,4,109,1,24,254,232,254,132,253,95, + 2,161,1,124,80,253,228,253,95,2,161,2,28,1,24,254,72,220,253,95,2,161,220,1,24,0,0,0,0,1,0,112,0,0,6,68,5,213,0,75, + 0,0,1,35,34,6,7,6,7,6,21,7,17,23,22,23,22,23,30,1,59,1,53,52,38,39,38,39,38,35,39,33,7,6,7,6,7,14,1,29, + 1,51,50,54,55,54,55,54,53,55,17,39,38,39,38,39,46,1,43,1,21,20,22,23,22,23,22,51,23,33,55,54,55,54,55,62,1,53,3,15, + 123,100,179,73,66,44,36,50,25,25,36,42,68,69,179,104,123,76,71,67,95,82,27,81,4,124,54,54,82,95,67,73,74,123,104,179,69,68,42,36, + 50,25,25,36,44,66,70,182,100,123,76,71,67,95,82,27,81,251,132,54,54,82,95,67,73,74,2,160,75,73,66,96,79,27,84,4,124,56,55,79, + 92,70,71,75,122,100,182,71,66,43,37,50,25,25,37,43,66,73,180,100,122,75,71,70,92,79,27,84,251,132,56,55,79,96,66,72,76,123,100,182, + 71,66,43,37,50,25,25,37,43,66,73,180,100,0,0,0,0,8,0,187,255,229,5,249,5,243,0,11,0,17,0,20,0,23,0,26,0,29,0,32, + 0,35,0,0,1,19,33,3,19,33,11,1,33,19,3,33,23,3,19,33,19,11,1,7,51,31,1,55,3,7,51,5,35,23,1,39,7,19,55,35, + 3,90,224,1,191,224,224,254,65,224,224,254,65,224,224,1,191,58,166,166,1,76,166,166,166,108,216,173,109,108,108,109,217,254,122,216,108,254,231,109, + 108,108,109,217,5,243,254,124,254,125,254,125,254,124,1,132,1,131,1,131,100,254,225,254,224,1,32,1,31,1,31,187,100,187,187,254,125,188,99,188, + 1,31,188,188,1,132,187,0,0,1,0,84,255,227,6,96,5,240,0,67,0,0,1,53,52,39,38,53,52,55,54,50,23,22,21,20,7,6,29,1, + 51,50,55,54,51,50,23,22,20,7,6,35,34,39,38,43,1,21,20,23,22,21,20,7,6,34,39,38,53,52,55,54,61,1,35,34,7,6,35,34, + 39,38,52,55,54,51,50,23,22,51,3,40,76,44,54,56,120,56,54,44,76,32,186,122,70,118,100,48,48,48,48,100,118,70,122,186,32,76,44,54, + 56,120,56,54,44,76,32,186,122,70,118,100,48,48,48,48,100,118,70,122,186,3,28,32,186,122,70,118,100,48,48,48,48,100,118,70,122,186,32,76, + 44,54,56,120,56,54,44,76,32,187,121,70,118,100,48,49,49,48,100,118,70,121,187,32,76,44,54,56,120,56,54,44,76,0,0,0,0,1,0,86, + 255,231,6,94,5,240,0,131,0,0,1,38,39,35,6,7,6,7,14,1,35,34,38,39,38,39,38,52,55,54,55,62,1,51,50,22,23,22,23,22, + 23,51,54,55,54,55,53,38,39,38,39,46,1,53,52,54,55,54,55,54,50,23,22,23,30,1,21,20,6,7,6,7,6,7,21,22,23,22,23,51, + 54,55,54,55,62,1,51,50,22,23,22,23,22,20,7,6,7,14,1,35,34,38,39,38,39,38,39,35,6,7,6,7,21,22,23,22,23,30,1,21, + 20,6,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55,54,55,53,38,3,2,16,10,212,2,10,20,29,32,82,46,45,82,32,31,18,17, + 17,18,31,32,82,45,46,82,32,34,15,9,3,212,10,16,17,21,16,20,42,30,33,34,34,33,32,40,40,92,40,40,32,33,34,34,33,35,37,23, + 13,21,17,16,10,212,3,9,15,34,32,82,46,45,82,32,31,18,17,17,18,31,32,82,45,46,82,32,29,20,10,2,212,10,16,17,21,13,23,37, + 35,33,34,34,33,32,40,40,92,40,40,32,33,34,34,33,30,42,20,16,21,2,147,17,21,16,20,42,30,33,34,34,33,32,40,40,92,40,40,32, + 33,34,34,33,35,37,23,13,21,17,16,10,213,2,10,20,29,32,82,46,45,82,32,31,18,17,17,18,31,32,82,45,46,82,32,34,15,9,3,213, + 10,16,17,21,13,23,37,35,33,34,34,33,32,40,40,92,40,40,32,33,34,34,33,30,42,20,16,21,17,16,10,212,3,9,15,34,32,82,46,45, + 82,32,31,18,17,17,18,31,32,82,45,46,82,32,29,20,10,2,212,10,0,1,0,83,255,227,6,97,5,240,0,131,0,0,1,52,38,39,38,39, + 38,39,46,1,53,52,54,55,54,55,54,50,23,22,23,30,1,21,20,6,7,6,7,6,7,14,1,21,50,54,55,54,55,54,55,62,1,51,50,22, + 23,22,23,22,20,7,6,7,14,1,35,34,38,39,38,39,38,39,46,1,35,20,22,23,22,23,22,23,30,1,21,20,6,7,6,7,6,34,39,38, + 39,46,1,53,52,54,55,54,55,54,55,62,1,53,34,6,7,6,7,6,7,14,1,35,34,38,39,38,39,38,52,55,54,55,62,1,51,50,22,23, + 22,23,22,23,30,1,3,40,44,36,14,16,24,10,40,40,42,38,32,58,46,114,48,54,36,38,42,42,38,10,26,8,20,41,39,68,101,33,13,12, + 18,10,39,100,56,58,98,38,36,24,21,21,24,36,38,98,58,56,100,39,10,18,12,13,41,97,64,47,33,13,16,25,10,39,41,42,38,36,54,47, + 114,47,54,36,38,42,41,39,10,25,16,13,39,41,63,99,39,14,12,18,10,38,100,56,58,98,38,33,27,22,22,24,36,38,98,58,61,95,38,10, + 18,6,20,40,98,3,28,67,99,34,14,12,18,10,38,100,56,58,98,38,32,28,22,22,24,36,38,98,58,61,95,38,10,18,6,20,40,97,63,47, + 33,13,16,25,10,39,41,42,38,36,54,47,114,47,54,36,38,42,41,39,10,25,16,13,39,41,68,101,33,13,12,18,10,39,100,56,58,98,38,36, + 24,21,21,24,36,38,98,58,56,100,39,10,18,12,13,41,97,64,41,39,14,16,24,10,40,40,42,38,32,58,46,114,48,54,36,38,42,42,38,10, + 26,8,20,40,40,0,0,0,0,1,0,84,255,229,6,96,5,242,1,48,0,0,1,50,23,22,23,22,23,22,21,20,7,6,7,54,55,54,51,50, + 23,22,23,22,23,22,21,20,7,14,1,7,6,35,34,39,38,39,38,39,17,33,38,39,38,39,38,53,52,54,55,54,55,54,51,50,23,22,23,22, + 23,22,21,20,7,6,7,54,55,54,51,50,23,22,23,22,23,22,21,20,7,6,7,6,7,6,35,34,39,38,39,22,23,22,21,20,6,7,6,7, + 6,35,34,39,38,39,38,39,38,53,52,55,54,55,54,55,33,17,54,55,54,55,54,51,50,23,22,23,22,23,22,21,20,7,6,7,6,7,6,35, + 34,39,38,39,22,23,22,21,20,7,6,7,6,7,6,34,39,38,39,38,39,38,53,52,55,54,55,6,7,6,35,34,39,38,39,38,39,38,53,52, + 55,54,55,54,55,54,51,50,22,23,22,23,17,33,22,23,22,23,22,21,20,7,6,7,6,7,6,35,34,39,38,39,38,39,38,53,52,55,54,55, + 6,7,6,35,34,39,38,39,38,39,38,52,55,54,55,54,55,54,51,50,23,22,23,38,39,38,53,52,55,54,55,54,55,54,51,50,23,22,23,22, + 23,22,21,20,7,6,7,6,7,33,17,6,7,6,7,6,35,34,39,46,1,39,38,53,52,55,54,55,54,55,54,51,50,23,22,23,38,39,38,53, + 52,55,54,55,54,55,54,3,90,30,23,27,18,20,11,10,10,11,20,11,20,25,28,30,24,26,19,20,11,10,10,11,40,25,25,29,30,23,25,20, + 14,10,1,38,17,14,19,11,11,22,19,20,26,25,28,29,25,26,20,19,11,11,11,8,9,20,25,25,28,32,23,25,20,19,12,10,10,12,19,22, + 23,26,29,28,25,25,20,9,8,11,22,19,17,29,25,29,24,29,26,20,19,11,11,11,11,19,14,17,254,219,9,14,17,29,23,30,29,24,26,19, + 20,11,10,10,11,20,18,27,23,30,25,28,20,11,19,11,11,11,11,20,18,27,23,60,23,27,18,20,11,11,11,11,19,11,20,24,29,30,23,27, + 18,20,11,10,10,11,20,19,26,24,29,27,52,20,14,9,254,219,17,13,22,9,10,10,11,20,22,23,26,27,30,25,25,20,19,12,10,10,8,10, + 22,23,26,28,29,25,26,20,18,12,10,10,12,18,17,29,25,29,28,26,25,20,10,8,10,10,12,19,19,26,25,30,27,26,25,20,20,11,10,10, + 12,19,13,17,1,37,10,14,20,25,23,30,29,24,26,40,10,11,11,10,20,19,27,23,30,29,24,20,11,20,11,10,10,11,20,19,26,23,5,242, + 11,12,18,20,26,25,29,28,25,26,20,10,8,10,10,12,18,20,26,25,29,31,23,25,40,11,10,10,12,19,13,17,254,219,10,14,20,25,23,30, + 29,50,20,20,11,10,10,11,20,19,26,24,30,28,25,20,11,20,11,10,10,11,20,18,27,24,29,30,24,27,18,22,9,10,10,11,20,11,20,25, + 28,26,54,19,17,13,11,11,10,20,20,26,24,29,30,23,25,20,14,10,254,218,18,13,16,14,11,11,11,19,20,26,25,28,29,25,26,20,18,12, + 11,11,8,9,19,26,25,28,29,26,25,20,19,12,10,10,12,19,20,25,26,29,28,25,26,19,9,8,11,11,12,18,20,26,25,29,28,25,26,20, + 19,11,11,22,19,13,18,1,37,9,14,23,22,24,30,28,25,26,19,22,9,10,10,11,20,18,27,23,30,29,25,19,12,22,9,10,10,11,20,18, + 27,23,60,23,27,19,17,13,11,11,10,20,11,20,24,29,30,23,27,18,20,11,11,11,11,20,19,26,24,29,30,23,26,19,14,10,1,37,17,13, + 19,12,10,10,11,40,25,26,28,25,29,26,20,18,12,10,10,8,10,20,26,25,28,29,25,26,20,18,12,11,0,0,0,1,0,87,255,227,6,95, + 5,245,0,27,0,0,19,50,55,54,55,54,18,53,20,18,23,22,23,22,51,34,7,6,7,6,2,21,52,2,39,38,39,38,87,155,141,134,115,112, + 115,110,117,108,141,140,156,156,140,141,108,117,110,115,112,115,134,141,2,236,59,56,114,111,1,20,161,157,254,240,119,110,60,59,59,60,110,119,254,240, + 157,161,1,20,111,114,56,59,0,2,0,87,255,227,6,95,5,245,0,27,0,55,0,0,1,50,23,22,23,30,1,21,52,54,55,54,55,54,51,34, + 39,38,39,46,1,53,20,6,7,6,7,6,33,50,55,54,55,54,18,53,20,18,23,22,23,22,51,34,7,6,7,6,2,21,52,2,39,38,39,38, + 1,101,101,92,87,74,73,75,71,77,70,91,91,102,102,91,91,70,77,71,75,73,74,87,92,254,141,155,141,134,115,112,115,110,117,108,141,140,156,156, + 140,141,108,117,110,115,112,115,134,141,2,236,38,37,74,72,179,105,102,177,77,72,39,38,38,39,72,77,177,102,105,179,72,74,37,38,59,56,114,111, + 1,20,161,157,254,240,119,110,60,59,59,60,110,119,254,240,157,161,1,20,111,114,56,59,0,2,0,47,255,236,6,133,5,243,0,9,0,19,0,0, + 19,37,9,1,5,1,19,37,5,19,1,3,33,1,3,9,1,3,1,33,47,2,13,1,30,1,30,2,13,254,166,37,254,10,254,10,37,1,209,191, + 253,149,1,244,191,1,245,1,245,191,1,244,253,149,3,165,131,1,203,254,53,131,254,97,253,230,202,202,2,26,3,236,253,179,254,148,253,180,1,108, + 254,148,2,76,1,108,0,0,0,2,0,86,255,227,6,94,5,240,0,9,0,36,0,0,1,3,33,1,3,9,1,3,1,33,3,50,23,22,23,22, + 18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,54,3,90,172,253,211,1,194,172,1,195,1,195,172,1,194,253,211,172,154, + 142,134,115,112,115,110,117,110,139,141,254,203,142,134,115,112,115,110,117,108,141,140,5,234,253,238,254,184,253,239,1,72,254,184,2,17,1,72,2,24, + 59,56,114,111,254,236,161,152,254,240,119,112,58,59,59,56,114,111,1,20,156,157,1,16,119,110,60,59,0,2,0,48,255,237,6,132,5,242,0,29, + 0,39,0,0,0,34,7,6,7,6,7,6,21,20,23,22,23,22,23,22,50,55,54,55,54,55,54,53,52,39,38,39,38,39,3,19,33,1,19,9, + 1,19,1,33,3,157,134,57,57,48,48,23,24,24,23,48,48,57,57,134,57,57,48,48,23,24,24,23,48,48,57,124,191,2,107,254,12,191,254,11, + 254,11,191,254,12,2,107,3,228,24,26,45,50,56,59,66,65,59,56,50,45,26,24,24,26,45,50,56,59,65,66,59,56,50,45,26,2,38,253,179, + 254,148,253,180,1,107,254,149,2,76,1,108,0,3,0,47,255,236,6,133,5,243,0,9,0,39,0,49,0,0,19,37,9,1,5,1,19,37,5,19, + 0,50,23,22,23,22,23,22,21,20,7,6,7,6,7,6,34,39,38,39,38,39,38,53,52,55,54,55,54,55,19,3,33,1,3,9,1,3,1,33, + 47,2,13,1,30,1,30,2,13,254,166,37,254,10,254,10,37,1,142,134,57,57,48,48,23,24,24,23,48,48,57,57,134,57,57,48,48,23,24,24, + 23,48,48,57,124,191,253,149,1,244,191,1,245,1,245,191,1,244,253,149,3,165,131,1,203,254,53,131,254,97,253,230,202,202,2,26,1,222,24,26, + 45,50,56,59,66,65,59,56,50,45,26,24,24,26,45,50,56,59,65,66,59,56,50,45,26,2,38,253,179,254,148,253,180,1,107,254,149,2,76,1, + 108,0,0,0,0,3,0,48,255,237,6,132,5,242,0,9,0,19,0,29,0,0,1,19,33,7,19,39,7,19,39,33,19,3,33,1,3,9,1,3, + 1,33,3,19,33,1,19,9,1,19,1,33,3,90,96,1,53,250,95,250,250,95,250,1,53,96,143,254,47,1,120,144,1,120,1,120,144,1,120,254, + 47,143,191,2,107,254,12,191,254,11,254,11,191,254,12,2,107,4,73,254,217,182,254,218,182,182,1,38,182,1,251,254,71,254,239,254,71,1,17,254, + 239,1,185,1,17,2,142,253,179,254,148,253,180,1,108,254,148,2,76,1,108,0,0,0,0,3,0,48,255,237,6,132,5,242,0,9,0,19,0,29, + 0,0,1,23,51,7,23,39,7,55,39,51,27,1,33,1,19,9,1,19,1,33,55,3,33,5,3,37,5,3,37,33,3,90,38,124,100,38,100,100, + 38,100,124,38,191,2,107,254,12,191,254,11,254,11,191,254,12,2,107,191,115,254,138,1,47,117,1,47,1,47,117,1,47,254,138,3,73,118,73,118, + 73,73,118,73,3,31,253,179,254,148,253,180,1,108,254,148,2,76,1,108,251,254,157,219,254,157,219,219,1,99,219,0,0,6,0,48,255,237,6,132, + 5,242,0,2,0,5,0,8,0,11,0,14,0,24,0,0,37,1,53,37,1,55,1,3,39,37,33,7,11,1,23,17,19,33,1,19,9,1,19,1, + 33,1,225,1,120,253,160,1,120,232,1,122,144,232,2,96,254,47,143,1,143,143,191,2,107,254,12,191,254,11,254,11,191,254,12,2,107,153,1,17, + 243,199,254,239,75,253,251,1,185,75,199,198,2,128,254,71,198,3,83,253,179,254,148,253,180,1,108,254,148,2,76,1,108,0,0,0,0,2,0,50, + 0,24,6,134,5,183,0,13,0,23,0,0,9,1,19,39,37,1,39,19,1,33,19,23,19,33,1,3,33,5,3,1,5,3,1,33,6,134,254,62, + 172,162,254,178,254,106,162,172,254,62,2,45,172,162,155,1,156,253,39,134,254,79,1,94,134,1,95,1,95,134,1,94,254,79,3,113,254,184,253,239, + 52,243,254,217,52,2,17,1,72,2,18,52,254,34,1,104,254,100,255,254,100,0,255,255,1,156,0,255,0,1,0,132,0,0,6,48,5,213,0,17, + 0,0,1,17,33,17,37,19,13,1,3,37,17,33,17,5,3,45,1,19,2,186,1,64,1,150,160,254,106,1,150,160,254,106,254,192,254,106,160,1, + 149,254,107,160,4,0,1,213,254,42,235,254,235,234,235,254,235,235,254,42,1,214,235,1,21,235,234,1,21,0,0,0,0,2,0,152,0,0,6,28, + 5,213,0,5,0,23,0,0,1,7,23,51,55,39,5,1,55,1,17,51,17,1,23,9,1,7,1,17,35,17,1,39,2,227,120,120,238,120,120,254, + 153,254,46,120,1,210,240,1,210,120,254,46,1,210,120,254,46,240,254,46,120,3,185,206,208,208,206,206,1,13,208,254,242,2,27,253,229,1,14,208, + 254,243,254,242,208,1,13,253,230,2,26,254,243,208,0,0,0,1,0,112,0,0,6,68,5,213,0,23,0,0,9,1,7,1,17,35,17,1,39,1, + 33,53,33,1,55,1,17,51,17,1,23,1,33,21,3,212,1,185,71,254,70,100,254,70,71,1,186,253,143,2,114,254,69,71,1,186,100,1,186,71, + 254,69,2,114,2,184,254,70,71,1,187,253,142,2,113,254,70,71,1,186,100,1,187,71,254,70,2,113,253,143,1,186,71,254,69,100,0,1,0,64, + 255,227,6,76,5,240,0,15,0,0,1,19,9,1,13,1,9,1,11,1,9,1,45,1,9,1,3,70,79,1,212,254,157,2,70,253,186,1,99,254, + 44,79,79,254,44,1,99,253,186,2,70,254,157,1,212,5,240,253,185,1,100,254,44,80,79,254,44,1,100,253,185,2,71,254,156,1,212,79,80,1, + 212,254,156,0,0,9,0,84,255,227,6,96,5,240,0,2,0,5,0,8,0,11,0,14,0,17,0,20,0,23,0,39,0,0,1,5,3,5,37,5, + 1,3,37,3,19,3,1,37,19,37,5,37,1,19,5,19,3,19,17,19,37,3,13,1,19,37,11,1,5,19,45,1,3,5,4,245,254,221,119,2, + 68,254,219,254,225,1,154,123,254,225,1,119,119,254,101,1,35,119,253,188,1,37,1,31,254,102,123,1,31,1,119,119,159,1,132,164,1,135,254,121, + 164,254,124,159,159,254,124,164,254,121,1,135,164,1,132,4,133,123,254,224,1,120,120,254,101,1,35,119,253,188,1,37,1,31,254,102,123,1,31,1, + 119,119,1,156,254,221,120,2,69,254,219,254,224,3,6,254,121,164,254,124,160,159,254,124,164,254,121,1,135,164,1,132,159,160,1,132,164,0,0,0, + 0,1,0,187,255,227,5,249,5,240,0,11,0,0,1,19,37,9,1,37,11,1,5,9,1,5,3,90,112,2,47,254,65,1,191,253,209,112,112,253, + 209,1,191,254,65,2,47,5,240,253,188,193,254,125,254,125,193,253,187,2,69,193,1,131,1,131,193,0,0,1,0,84,255,227,6,96,5,240,0,15, + 0,0,1,19,9,1,13,1,9,1,11,1,9,1,45,1,9,1,3,90,113,1,178,254,239,1,244,254,12,1,17,254,78,113,113,254,78,1,17,254, + 12,1,244,254,239,1,178,5,240,254,11,1,18,254,78,114,113,254,78,1,18,254,11,1,245,254,238,1,178,113,114,1,178,254,238,0,0,1,0,84, + 255,227,6,96,5,240,0,15,0,0,1,19,37,3,13,1,19,37,11,1,5,19,45,1,3,5,3,90,170,1,121,137,1,108,254,148,137,254,135,170, + 170,254,135,137,254,148,1,108,137,1,121,5,240,254,148,137,254,135,171,170,254,135,137,254,148,1,108,137,1,121,170,171,1,121,137,0,0,1,0,84, + 255,227,6,96,5,240,0,23,0,0,1,19,37,3,37,3,13,1,19,37,19,37,11,1,5,19,5,19,45,1,3,5,3,5,3,90,116,1,15,71, + 1,99,239,1,86,254,170,239,254,157,71,254,241,116,116,254,241,71,254,157,239,254,170,1,86,239,1,99,71,1,15,5,240,254,169,239,254,157,71,254, + 241,115,116,254,241,71,254,157,239,254,169,1,87,239,1,99,71,1,15,116,115,1,15,71,1,99,239,0,0,1,0,112,0,0,6,68,5,213,0,47, + 0,0,1,17,51,17,19,23,3,1,23,1,37,23,5,33,21,33,5,7,37,1,7,1,19,7,3,17,35,17,3,39,19,1,39,1,5,39,37,33, + 53,33,37,55,5,1,55,1,3,55,3,30,120,170,111,170,1,58,85,254,197,1,156,46,254,99,1,190,254,70,1,153,46,254,100,1,59,85,254,199, + 169,111,170,120,170,111,170,254,198,85,1,58,254,101,46,1,154,254,69,1,190,254,99,46,1,153,254,200,85,1,57,169,111,4,23,1,190,254,69,1, + 153,46,254,102,1,58,85,254,197,171,111,171,120,170,111,172,254,196,85,1,57,254,103,46,1,152,254,70,1,188,254,102,46,1,155,254,197,85,1,58, + 170,111,170,120,171,111,169,1,57,85,254,199,1,153,46,0,0,1,0,167,255,227,6,13,5,240,0,155,0,0,1,53,52,39,38,53,52,55,54,50, + 23,22,21,20,7,6,29,1,23,22,23,55,54,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,43,1,34,35,34,15,1,22,21,20,7, + 23,22,51,50,59,1,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,47,1,6,15,1,21,20,23,22,21,20,7,6,34,39,38,53, + 52,55,54,61,1,38,39,38,39,7,6,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,54,59,1,50,51,50,63,1,38,53,52,55,39,38, + 35,34,43,1,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,31,1,54,55,54,3,39,75,44,54,56,120,56,54,44,76,16,31,24, + 10,113,65,39,67,60,52,22,21,71,30,20,5,14,87,62,76,12,11,10,131,100,12,4,5,12,102,130,11,10,12,76,62,87,14,5,20,30,71,21, + 22,52,60,67,39,67,110,14,27,25,16,76,44,54,56,120,56,54,44,77,9,8,29,23,14,110,67,39,67,60,52,22,21,71,30,20,5,14,87,62, + 76,12,11,10,132,100,12,5,4,12,100,131,10,11,12,76,62,87,14,5,20,30,71,21,22,52,60,67,39,69,108,11,26,29,8,3,148,12,128,119, + 70,78,100,48,49,49,48,100,78,70,121,126,12,6,14,23,6,68,122,73,39,35,7,24,52,35,44,22,24,71,50,36,58,7,19,20,21,20,7,59, + 36,50,71,24,22,44,35,52,24,7,35,39,73,126,63,8,25,9,6,15,127,121,70,78,100,48,49,49,48,100,78,70,121,127,15,3,3,13,21,8, + 63,126,73,39,35,7,24,52,35,44,22,24,71,50,36,58,7,20,22,20,19,7,58,36,50,71,24,22,44,35,52,24,7,35,39,73,130,59,6,25, + 11,3,0,0,0,2,0,167,255,227,6,13,5,240,0,25,0,181,0,0,0,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1, + 53,52,38,39,38,47,1,53,52,39,38,53,52,55,54,50,23,22,21,20,7,6,29,1,23,22,23,55,54,55,54,55,54,51,50,23,22,23,22,21, + 20,7,6,7,6,43,1,34,35,34,15,1,22,21,20,7,23,22,51,50,59,1,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,47, + 1,6,15,1,21,20,23,22,21,20,7,6,34,39,38,53,52,55,54,61,1,38,39,38,39,7,6,7,6,7,6,35,34,39,38,39,38,53,52,55, + 54,55,54,59,1,50,51,50,63,1,38,53,52,55,39,38,35,34,43,1,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,31,1,54, + 55,54,3,111,42,17,18,14,15,15,15,15,14,18,17,42,17,18,14,15,15,15,15,14,18,89,75,44,54,56,120,56,54,44,76,16,31,24,10,113, + 65,39,67,60,52,22,21,71,30,20,5,14,87,62,76,12,11,10,131,100,12,4,5,12,102,130,11,10,12,76,62,87,14,5,20,30,71,21,22,52, + 60,67,39,67,110,14,27,25,16,76,44,54,56,120,56,54,44,77,9,8,29,23,14,110,67,39,67,60,52,22,21,71,30,20,5,14,87,62,76,12, + 11,10,132,100,12,5,4,12,100,131,10,11,12,76,62,87,14,5,20,30,71,21,22,52,60,67,39,69,108,11,26,29,8,3,80,8,8,14,15,35, + 21,20,35,15,14,8,8,8,8,14,15,35,20,21,35,15,14,8,76,12,128,119,70,78,100,48,49,49,48,100,78,70,121,126,12,6,14,23,6,68, + 122,73,39,35,7,24,52,35,44,22,24,71,50,36,58,7,19,20,21,20,7,59,36,50,71,24,22,44,35,52,24,7,35,39,73,126,63,8,25,9, + 6,15,127,121,70,78,100,48,49,49,48,100,78,70,121,127,15,3,3,13,21,8,63,126,73,39,35,7,24,52,35,44,22,24,71,50,36,58,7,20, + 22,20,19,7,58,36,50,71,24,22,44,35,52,24,7,35,39,73,130,59,6,25,11,3,0,1,0,161,255,227,6,18,5,240,0,104,0,0,1,23, + 50,63,1,39,38,35,7,34,38,39,38,52,55,54,55,54,50,22,23,22,31,1,53,52,39,38,52,55,54,50,23,22,20,7,6,29,1,55,54,55, + 62,1,50,23,22,21,20,7,14,1,35,39,34,15,1,23,22,51,55,50,22,23,22,20,7,6,7,6,34,39,38,39,38,47,1,21,20,23,22,20, + 7,6,34,39,38,52,55,54,61,1,7,6,7,14,1,34,39,38,53,52,55,62,1,1,181,159,81,33,47,47,31,86,150,90,162,18,11,25,42,110, + 20,78,153,43,71,56,48,106,64,54,82,168,82,54,64,106,48,47,80,49,147,78,20,177,11,18,162,84,158,80,35,48,48,31,86,150,90,162,18,11, + 25,44,108,21,79,64,87,43,71,56,48,106,64,54,82,172,78,54,64,106,48,51,76,47,149,78,20,178,12,19,161,2,196,10,20,28,27,18,7,93, + 72,44,96,44,72,32,6,89,99,162,33,28,55,55,153,92,202,52,79,79,52,208,86,143,65,55,28,28,167,103,85,6,51,154,39,44,72,94,10,20, + 27,28,18,7,93,72,44,96,44,76,28,6,38,51,99,162,33,28,55,55,153,92,202,52,79,79,55,205,86,143,65,55,28,30,165,102,86,6,52,154, + 38,44,72,94,0,4,0,161,255,227,6,18,5,240,0,14,0,153,0,177,0,201,0,0,1,54,55,54,53,52,39,38,34,7,6,21,20,23,22,19, + 23,22,51,50,55,54,51,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,47,1,21,20,23,22,21,20,7,6,35,34,39,38,53,52, + 55,54,61,1,7,6,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,51,50,63,1,39,38,35,34,7,6,35,34,39,38, + 39,38,53,52,55,54,55,54,51,50,23,22,23,22,31,1,53,52,39,38,53,52,55,54,50,23,22,21,20,7,6,29,1,55,54,55,54,55,54,51, + 50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,35,34,7,5,6,35,34,39,38,35,34,7,6,7,6,21,20,23,22,23,22,51,50,55,54, + 55,54,37,22,23,22,23,22,51,50,55,54,55,54,53,52,39,38,39,38,35,34,7,6,35,34,3,90,28,56,37,30,49,84,49,30,37,56,168,18, + 53,101,32,37,18,16,90,70,92,18,11,25,43,109,20,22,56,66,83,47,63,74,18,86,64,54,82,84,88,78,54,64,86,18,71,66,49,81,66,56, + 22,20,110,42,25,11,18,92,70,90,16,18,37,32,101,53,18,18,51,101,33,38,18,16,90,70,90,20,12,26,42,110,20,22,56,66,83,47,63,74, + 18,86,64,54,82,168,82,54,64,86,18,71,66,49,81,66,56,22,20,109,43,25,11,18,92,70,90,16,18,38,33,101,51,254,152,68,65,30,29,9, + 10,53,60,59,7,5,13,21,62,10,12,31,43,70,25,36,1,220,72,36,25,70,43,31,12,10,62,21,13,5,7,59,60,53,10,9,29,30,65,3, + 211,99,74,50,81,68,26,43,43,26,68,81,50,74,254,180,11,32,3,1,40,53,72,44,39,57,44,74,30,6,38,48,102,137,41,10,20,84,124,92, + 96,106,52,79,79,55,103,96,92,124,84,20,10,39,139,103,47,38,6,32,72,44,57,39,44,73,52,40,1,3,32,11,11,31,3,1,40,51,74,44, + 38,57,45,72,32,6,38,48,102,137,41,10,20,84,124,92,96,106,52,79,79,52,106,96,92,124,84,20,10,39,139,103,47,38,6,30,74,44,57,39, + 44,72,53,40,1,3,31,128,18,4,1,34,34,39,24,21,33,23,36,21,4,25,40,58,85,74,74,85,58,40,25,4,21,36,23,33,21,24,39,34, + 34,1,4,0,0,2,0,110,0,0,6,70,5,173,0,25,0,119,0,0,0,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1, + 53,52,38,39,38,39,55,54,55,54,51,50,23,22,23,30,1,21,20,6,7,6,7,6,34,39,22,23,30,1,21,20,6,7,6,7,6,34,39,38, + 39,46,1,39,14,1,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55,6,34,39,38,39,46,1,53,52,54,55,54,55,54,51,50,23,22, + 23,46,1,53,52,54,55,54,55,54,51,50,23,22,23,30,1,21,20,6,3,162,144,61,62,51,52,51,51,52,51,62,61,144,61,62,51,52,51,51, + 52,51,62,120,62,37,56,53,54,55,48,45,41,44,40,45,37,56,47,91,27,48,33,45,40,44,41,45,48,50,121,47,56,37,48,29,5,5,37,41, + 45,48,50,121,47,56,37,45,40,46,39,38,36,23,87,47,58,35,45,40,44,41,45,48,50,59,62,47,59,41,8,27,44,41,45,48,50,59,62,47, + 56,37,45,40,27,4,11,26,28,48,54,123,73,70,123,54,48,28,26,26,28,48,54,123,70,73,123,54,48,28,19,53,16,23,23,20,43,39,103,62, + 58,99,46,38,25,21,5,23,34,46,99,59,61,103,39,43,20,21,21,25,38,49,78,37,38,87,39,43,20,21,21,25,38,46,99,58,62,107,35,34, + 21,4,21,27,36,46,99,58,62,103,39,43,20,21,21,25,44,14,66,58,62,103,39,43,20,21,21,25,38,46,99,59,61,63,0,0,0,6,0,110, + 0,0,6,70,5,173,0,92,0,118,0,141,0,166,0,189,0,214,0,0,37,14,1,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55,6, + 34,39,38,39,46,1,53,52,54,55,54,55,54,51,50,23,22,23,46,1,53,52,54,55,54,55,54,50,23,22,23,30,1,21,20,6,7,54,55,54, + 51,50,23,22,23,30,1,21,20,6,7,6,7,6,34,39,22,23,30,1,21,20,6,7,6,7,6,34,39,38,39,46,1,2,50,23,22,23,55,54, + 53,52,38,39,38,39,38,34,7,6,7,14,1,21,20,31,1,54,55,19,38,39,38,39,38,39,7,14,1,21,20,22,23,22,23,22,50,55,54,55, + 54,55,3,38,53,52,54,55,39,38,39,38,35,34,7,6,7,14,1,21,20,22,23,22,23,22,51,1,23,22,23,22,23,22,50,55,54,55,62,1, + 53,52,38,47,1,6,7,6,7,6,19,55,54,55,54,55,62,1,53,52,38,39,38,39,38,35,34,7,6,15,1,30,1,21,20,3,90,5,29,48, + 37,56,47,121,50,48,45,41,44,40,45,33,48,27,91,47,56,37,45,40,44,41,48,45,60,49,58,51,37,62,7,27,40,45,37,56,47,124,47,56, + 37,45,40,27,7,62,37,56,53,54,55,48,45,41,44,40,45,37,56,47,91,27,48,33,45,40,44,41,45,48,50,121,47,56,37,48,29,77,144,61, + 8,7,14,13,25,27,25,32,30,72,30,32,25,27,25,3,24,7,8,67,35,32,66,47,30,27,103,24,28,25,27,25,32,30,72,30,32,25,24,4, + 214,3,47,42,120,8,7,35,31,36,30,32,25,24,28,25,27,25,32,21,4,2,56,35,35,24,25,32,30,72,30,32,25,27,25,28,24,103,27,30, + 47,66,32,245,80,80,21,32,25,27,25,28,24,25,32,30,36,31,35,7,8,120,42,47,248,37,78,49,38,25,21,21,20,43,39,103,61,59,99,46, + 34,23,5,21,25,38,46,99,58,62,103,39,46,17,23,23,16,53,13,63,61,59,99,46,38,25,21,21,25,38,46,99,59,61,63,13,53,16,23,23, + 20,43,39,103,62,58,99,46,38,25,21,5,23,34,46,99,59,61,103,39,43,20,21,21,25,38,49,78,3,56,26,3,4,71,71,20,36,62,27,24, + 14,13,13,14,24,27,62,36,20,12,130,4,3,253,99,6,14,30,46,30,44,98,23,66,36,35,62,27,24,14,13,13,14,24,24,9,1,186,22,23, + 73,114,48,67,4,3,13,13,14,24,24,62,39,35,62,27,24,14,9,254,194,76,77,24,24,14,13,13,14,24,27,62,35,36,66,23,98,44,30,46, + 30,14,1,36,10,10,9,14,24,27,62,35,39,62,24,24,14,13,13,3,4,67,48,114,73,23,0,0,0,10,0,84,255,227,6,96,5,240,0,41, + 0,84,0,189,0,230,1,17,1,58,1,101,1,127,1,169,1,211,0,0,1,38,39,7,6,35,34,38,39,38,39,38,52,55,54,55,62,1,51,50, + 31,1,54,55,39,38,35,34,6,7,6,7,6,20,23,22,23,30,1,51,50,55,37,6,7,23,22,51,50,54,55,54,55,54,52,39,38,39,46,1, + 35,34,15,1,22,23,55,54,51,50,22,23,22,23,22,21,20,7,6,7,14,1,35,34,35,1,46,1,52,55,54,55,54,55,54,51,50,22,23,52, + 54,55,54,55,54,50,23,22,23,30,1,21,62,1,51,50,23,22,23,22,23,22,21,20,6,7,50,22,23,22,23,22,21,20,7,6,7,14,1,35, + 30,1,21,20,7,14,1,7,6,35,34,38,39,20,6,7,6,7,6,34,39,38,39,46,1,53,14,1,35,34,39,46,1,39,38,52,54,55,34,38, + 39,38,39,38,52,55,54,55,62,1,1,38,39,7,6,7,14,1,7,38,39,46,1,39,38,39,62,1,55,54,63,1,38,39,7,6,7,14,1,21, + 22,23,30,2,51,50,54,55,54,55,1,22,23,55,54,55,62,1,53,38,39,38,39,46,1,35,34,6,7,6,15,1,22,23,55,54,55,62,1,55, + 22,23,22,23,22,23,22,23,14,1,7,6,7,3,6,7,23,22,23,30,1,23,6,7,14,1,7,6,7,46,1,39,38,47,1,6,7,23,22,23, + 30,1,51,50,62,1,55,54,55,52,38,39,38,39,1,54,55,39,38,39,46,1,35,34,6,7,6,7,6,7,20,22,23,22,31,1,54,55,39,38, + 39,46,1,39,54,55,54,55,54,55,54,55,30,1,23,22,23,4,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52,38, + 39,38,39,19,6,7,23,22,21,20,6,7,6,7,6,34,39,38,39,46,1,53,52,63,1,38,39,7,6,21,20,22,23,22,23,22,50,55,54,55, + 62,1,53,52,39,3,22,23,55,54,53,52,38,39,38,39,38,34,7,6,7,14,1,21,20,31,1,54,55,39,38,53,52,54,55,54,55,54,50,23, + 22,23,30,1,21,20,7,2,58,6,2,228,17,9,10,26,10,8,6,4,4,6,8,10,24,12,9,17,228,2,6,206,36,20,28,52,22,20,12,10, + 10,12,20,22,52,28,20,36,3,26,2,6,119,119,18,30,52,22,20,12,10,10,12,20,22,52,30,18,9,229,6,2,120,121,7,16,22,10,8,6, + 4,4,6,8,12,24,12,7,5,251,202,37,34,17,16,32,33,40,41,45,43,85,36,34,33,32,40,40,92,40,40,32,33,34,38,83,43,45,41,40, + 33,28,20,17,32,39,55,77,34,35,15,16,16,18,32,28,86,50,37,32,17,16,65,40,41,45,46,82,36,34,33,32,40,40,92,40,40,32,33,34, + 40,79,45,44,42,40,65,16,17,34,35,50,80,34,35,15,16,16,18,32,34,77,1,193,20,16,142,11,6,7,25,14,13,11,12,19,5,4,1,1, + 9,9,6,14,180,14,11,184,33,14,21,21,1,10,10,42,52,29,32,50,21,14,19,1,235,15,10,107,107,13,22,21,1,10,10,21,21,52,29,32, + 50,22,13,5,117,20,17,75,75,5,10,23,14,13,11,12,10,9,5,4,1,1,11,8,5,3,166,11,14,180,14,6,7,11,1,1,4,5,19,12, + 11,13,14,23,9,6,11,142,17,19,105,19,14,21,50,32,29,52,42,10,10,1,21,21,14,33,253,137,18,19,61,61,13,22,50,32,29,52,21,21, + 10,10,1,21,22,13,9,205,11,14,96,95,5,10,9,1,1,4,5,9,10,12,11,13,17,22,8,5,3,1,119,82,35,36,29,29,30,30,29,29, + 36,35,82,35,36,29,29,30,30,29,29,36,3,22,21,27,2,10,9,10,11,12,26,12,11,10,9,10,2,27,22,21,56,10,21,22,21,26,25,60, + 25,26,21,22,21,10,99,23,21,32,33,21,22,21,26,25,60,25,26,21,22,21,3,62,22,22,14,15,10,9,10,11,12,26,12,11,10,11,8,1, + 2,154,22,22,28,2,10,10,10,10,12,26,12,12,10,8,10,2,26,22,20,56,10,20,22,22,26,24,60,26,26,20,22,22,10,100,24,20,33,33, + 22,22,20,26,26,60,24,26,22,22,20,2,62,23,21,14,14,10,8,10,12,12,12,14,12,10,10,12,8,1,34,37,85,86,42,41,32,33,16,16, + 33,36,51,82,32,31,18,17,17,18,31,32,82,51,38,31,16,16,33,28,45,40,45,37,90,38,32,34,35,37,40,46,50,36,40,32,30,38,38,83, + 43,44,41,41,65,16,16,33,36,51,82,32,31,18,17,17,18,31,32,82,51,39,30,16,16,65,41,41,88,84,36,34,34,35,37,40,96,36,40,32, + 34,32,254,28,11,13,180,13,6,8,10,1,1,4,5,18,12,12,13,13,24,9,6,10,142,17,19,105,19,14,20,51,31,29,27,25,43,20,21,20, + 14,33,2,120,18,19,61,61,13,21,51,31,29,27,25,22,21,20,21,21,13,9,205,12,14,95,96,5,11,8,1,1,4,5,9,9,12,12,13,16, + 22,9,5,2,254,29,19,17,142,10,6,8,25,13,13,12,12,18,5,4,1,1,9,9,6,13,180,14,10,185,33,14,20,21,20,43,25,27,29,31, + 51,20,14,19,1,235,15,11,107,107,13,21,21,20,21,22,25,27,29,31,51,21,13,5,117,19,18,75,74,5,11,23,13,13,12,12,9,9,5,4, + 1,1,10,9,5,3,223,15,16,28,31,70,41,40,71,30,28,16,15,15,16,28,30,71,40,41,70,31,28,16,254,36,6,2,228,17,8,11,25,10, + 9,5,5,5,5,9,10,23,13,8,17,228,2,6,205,37,19,29,51,22,20,12,11,11,12,20,22,51,29,19,37,3,26,2,6,119,119,18,30,51, + 22,20,12,11,11,12,20,22,51,30,18,9,229,6,2,120,121,7,15,22,10,9,5,5,5,5,9,12,23,12,7,5,0,4,0,86,255,227,6,94, + 5,240,0,25,0,51,0,78,0,94,0,0,0,34,7,6,7,14,1,21,20,22,23,22,23,22,50,55,54,55,62,1,53,52,38,39,38,47,1,50, + 23,22,23,30,1,21,20,6,7,6,7,6,34,39,38,39,46,1,52,54,55,54,55,54,19,50,23,22,23,22,18,21,20,2,7,6,7,6,32,39, + 38,39,38,2,53,52,18,55,54,55,54,23,3,37,19,13,1,3,37,27,1,5,3,45,1,19,5,3,151,122,51,53,43,43,43,43,43,43,53,51, + 122,51,53,43,43,43,43,43,43,53,112,87,68,77,54,57,63,61,59,57,74,72,170,68,77,54,57,63,61,59,57,74,72,83,154,142,134,115,112,115, + 110,117,110,139,141,254,203,142,134,115,112,115,110,117,108,141,140,156,157,254,127,163,254,125,1,131,163,1,129,157,157,1,129,163,1,131,254,125,163,254, + 127,4,19,22,24,40,46,104,60,59,104,46,40,24,22,22,24,40,46,104,59,60,104,46,40,24,134,31,34,54,56,150,84,78,150,59,57,31,31,31, + 34,54,56,150,162,150,59,57,31,31,1,109,59,56,114,111,254,236,161,152,254,240,119,112,58,59,59,56,114,111,1,20,156,157,1,16,119,110,60,59, + 8,254,125,163,254,127,158,157,254,127,163,254,125,1,131,163,1,129,157,158,1,129,163,0,0,7,0,161,255,227,6,18,5,240,0,8,0,147,0,156, + 0,167,0,178,0,193,0,208,0,0,1,17,34,7,6,21,20,23,22,19,23,22,51,50,55,54,51,50,23,22,23,22,21,20,7,6,7,6,35,34, + 39,38,39,38,47,1,21,20,23,22,21,20,7,6,35,34,39,38,53,52,55,54,61,1,7,6,7,6,7,6,35,34,39,38,39,38,53,52,55,54, + 55,54,51,50,23,22,51,50,63,1,39,38,35,34,7,6,35,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,31,1,53,52,39,38, + 53,52,55,54,50,23,22,21,20,7,6,29,1,55,54,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,35,34,15,1,17, + 50,55,54,53,52,39,38,19,37,38,39,38,35,34,7,6,7,6,1,5,22,23,22,51,50,55,54,55,54,19,37,6,21,20,23,22,23,22,51,50, + 55,54,51,50,13,1,54,53,52,39,38,39,38,35,34,7,6,35,34,3,90,42,49,30,37,56,168,18,53,101,32,37,18,16,90,70,92,18,11,25, + 43,109,20,22,56,66,83,47,63,74,18,86,64,54,82,84,88,78,54,64,86,18,71,66,49,81,66,56,22,20,110,42,25,11,18,92,70,90,16,18, + 37,32,101,53,18,18,51,101,33,38,18,16,90,70,90,20,12,26,42,110,20,22,56,66,83,47,63,74,18,86,64,54,82,168,82,54,64,86,18,71, + 66,49,81,66,56,22,20,109,43,25,11,18,92,70,90,16,18,38,33,101,51,158,42,49,30,37,56,174,1,126,21,62,10,12,31,43,70,25,36,254, + 36,254,130,21,62,10,12,31,43,70,25,36,72,254,130,13,5,7,59,60,53,10,9,29,30,65,1,216,1,126,13,5,7,59,60,53,10,9,29,30, + 65,3,211,1,185,43,26,68,81,50,74,254,180,11,32,3,1,40,53,72,44,39,57,44,74,30,6,38,48,102,137,41,10,20,84,124,92,96,106,52, + 79,79,55,103,96,92,124,84,20,10,39,139,103,47,38,6,32,72,44,57,39,44,73,52,40,1,3,32,11,11,31,3,1,40,51,74,44,38,57,45, + 72,32,6,38,48,102,137,41,10,20,84,124,92,96,106,52,79,79,52,106,96,92,124,84,20,10,39,139,103,47,38,6,30,74,44,57,39,44,72,53, + 40,1,3,31,245,254,71,43,26,68,81,50,74,1,193,221,36,21,4,25,40,58,85,254,205,221,36,21,4,25,40,58,85,1,51,221,23,33,21,24, + 39,34,34,1,4,251,221,23,33,21,24,39,34,34,1,4,0,1,0,182,0,0,5,254,5,213,0,65,0,0,1,39,7,39,55,39,55,23,53,51, + 21,23,17,39,55,23,53,51,21,55,23,7,17,55,53,51,21,55,23,7,23,7,39,7,23,55,23,7,23,7,39,21,35,53,39,17,23,7,39,21, + 35,53,7,39,55,17,7,21,35,53,7,39,55,39,55,23,2,226,240,194,60,134,196,60,196,120,240,194,60,134,120,134,60,194,240,120,196,60,196,134, + 60,194,240,240,194,60,134,196,60,196,120,240,194,60,134,120,134,60,194,240,120,196,60,196,134,60,194,2,235,138,112,104,77,114,104,114,155,224,139,1, + 22,111,104,77,227,227,77,104,111,254,235,138,224,155,114,104,114,77,104,112,138,139,112,104,77,114,104,114,155,224,139,254,234,111,104,77,227,227,77,104, + 111,1,22,139,224,155,114,104,114,77,104,112,0,7,0,156,0,0,6,24,5,213,0,29,0,33,0,37,0,41,0,45,0,49,0,53,0,0,1,51, + 17,37,17,37,23,13,3,7,37,17,37,17,35,17,5,17,5,39,45,3,55,5,17,5,7,21,23,53,37,7,21,55,5,7,23,55,37,7,23,55, + 5,7,21,63,1,21,23,53,3,30,120,1,35,1,9,60,254,246,1,36,254,221,1,9,60,254,247,254,221,120,254,221,254,247,60,1,9,254,221,1, + 36,254,246,60,1,9,1,35,171,171,1,35,171,171,253,247,172,171,171,1,154,170,171,171,253,246,171,171,120,171,5,213,254,204,169,254,176,154,104,154, + 168,168,153,104,154,254,175,169,254,205,1,51,169,1,81,154,104,153,168,168,154,104,154,1,80,169,39,197,99,197,99,99,197,99,104,99,98,98,99,99, + 98,98,103,99,198,99,198,198,99,198,0,0,0,1,0,130,0,4,6,48,5,213,0,65,0,0,1,51,21,55,23,7,17,37,17,51,21,55,23,7, + 23,7,39,13,1,55,23,7,23,7,39,21,35,17,37,17,23,7,39,21,35,53,7,39,55,17,5,17,35,53,7,39,55,39,55,23,45,1,7,39, + 55,39,55,23,53,51,17,5,17,39,55,23,3,30,120,140,100,240,1,12,200,88,60,91,140,100,240,254,246,1,11,240,100,140,89,60,92,200,254,249, + 240,100,140,120,140,100,240,254,247,200,91,60,88,140,100,240,1,11,254,247,240,100,140,92,60,89,200,1,13,240,100,140,5,213,104,81,173,139,254,206, + 155,1,21,162,52,104,53,81,173,138,153,155,139,173,81,52,104,53,161,1,21,152,254,208,139,173,81,104,101,81,173,139,1,53,153,254,235,161,53,104, + 51,81,174,139,154,153,139,173,81,53,104,51,161,254,235,155,1,54,139,173,81,0,0,0,0,1,0,161,255,229,6,19,5,240,0,135,0,0,1,22, + 21,20,7,6,7,6,35,34,39,38,39,7,23,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,53,52,55,39,17,22, + 23,30,1,20,14,1,34,46,1,52,54,55,54,55,17,7,22,21,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,55, + 39,6,7,6,35,34,46,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,23,17,38,39,46,1,52,54,55,54,51,50,30,1,20,6,7,6, + 7,17,55,38,53,52,55,54,55,54,51,50,23,22,5,248,27,27,27,46,47,53,54,46,19,17,241,241,17,19,46,54,53,47,46,27,27,27,28,45, + 47,53,51,49,47,27,26,4,241,21,19,46,54,54,92,108,92,54,54,46,19,21,241,4,26,27,47,47,53,54,46,46,27,27,27,27,46,47,106,47, + 19,17,241,241,16,20,49,51,54,92,54,27,27,46,47,53,51,49,47,27,26,4,241,21,19,46,54,54,46,47,53,54,92,54,54,46,19,21,241,4, + 26,26,48,46,54,53,47,51,4,109,54,46,53,47,46,27,27,27,11,15,139,140,15,11,27,27,27,46,47,53,52,47,47,27,27,27,26,47,46,54, + 22,21,140,254,233,7,11,27,92,108,92,54,54,92,108,92,27,11,7,1,23,140,21,22,54,46,47,26,27,27,26,47,46,54,53,47,46,27,27,27, + 11,15,140,139,15,11,27,54,92,108,46,47,26,27,27,26,47,46,54,22,21,140,1,23,7,11,27,92,108,92,27,27,54,92,108,92,27,11,7,254, + 233,140,21,22,54,46,45,28,27,27,30,0,0,9,0,97,255,229,6,83,5,215,0,7,0,11,0,15,0,19,0,23,0,46,0,69,0,92,0,115, + 0,0,0,20,6,34,38,52,54,50,9,1,55,9,2,55,9,2,39,9,2,39,1,19,38,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22, + 21,20,7,6,7,6,3,22,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,3,6,7,6,7,6,35,34,39,38,39, + 38,52,55,54,55,54,51,50,23,22,23,22,5,54,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,3,240,88,124,88, + 88,124,1,167,254,125,85,1,131,253,13,254,127,85,1,129,2,158,254,125,85,1,131,253,183,254,127,85,1,129,185,57,15,23,4,1,2,3,15,23, + 114,23,15,3,2,1,4,23,15,57,57,15,23,4,1,2,3,15,23,114,23,15,3,2,1,4,23,15,159,60,24,37,68,29,82,69,30,65,32,49, + 49,32,65,30,69,82,29,68,37,24,1,236,60,24,37,68,29,82,69,30,65,32,49,49,32,65,30,69,82,29,68,37,24,3,44,124,88,88,124,88, + 253,46,1,132,85,254,124,2,74,1,129,85,254,126,1,45,254,124,85,1,132,253,13,254,126,85,1,129,1,46,60,24,37,68,29,82,69,30,65,32, + 49,49,32,65,30,69,82,29,68,37,24,254,20,60,24,37,68,29,82,69,30,65,32,49,49,32,65,30,69,82,29,68,37,24,1,20,57,15,23,4, + 1,2,3,15,23,114,23,15,3,2,1,4,23,15,57,57,15,23,4,1,2,3,15,23,114,23,15,3,2,1,4,23,15,0,0,0,0,9,0,97, + 255,229,6,83,5,215,0,7,0,11,0,15,0,19,0,23,0,43,0,63,0,83,0,103,0,0,0,20,6,34,38,52,54,50,9,1,23,9,2,23, + 9,2,7,9,2,7,1,2,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,50,23,22,23,18,20,7,6,7,6,34,39,38,39,38,52,55, + 54,55,54,50,23,22,23,0,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,52,55,54,55,36,50,23,22,23,22,20,7,6,7,6,34,39, + 38,39,38,52,55,54,55,4,59,132,186,132,132,186,253,105,1,41,85,254,215,2,161,1,41,85,254,215,253,10,1,41,85,254,215,3,75,1,41,85, + 254,215,8,19,21,39,46,110,46,39,21,19,19,21,39,46,110,46,39,21,19,19,21,39,46,110,46,39,21,19,19,21,39,46,110,46,39,21,253,25, + 112,49,55,35,40,40,35,55,49,112,49,55,35,40,40,35,55,4,77,112,49,55,35,40,40,35,55,49,112,49,55,35,40,40,35,55,3,75,186,132, + 132,186,132,253,56,1,41,85,254,215,3,76,1,41,85,254,215,1,126,254,215,85,1,41,253,94,254,215,85,1,41,3,73,112,49,55,35,40,40,35, + 55,49,112,49,55,35,40,40,35,55,251,179,112,49,55,35,40,40,35,55,49,112,49,55,35,40,40,35,55,2,89,19,21,39,46,110,46,39,21,19, + 19,21,39,46,110,46,39,21,19,19,21,39,46,110,46,39,21,19,19,21,39,46,110,46,39,21,0,0,0,9,0,84,255,229,6,96,5,242,0,12, + 0,24,0,37,0,50,0,63,0,75,0,87,0,95,0,107,0,0,1,20,7,6,43,1,37,53,37,51,50,23,22,5,52,54,59,1,5,21,5,35, + 34,39,38,1,22,21,20,15,1,1,39,1,55,54,51,50,1,38,53,52,63,1,1,23,1,7,6,35,34,3,54,51,50,31,1,1,7,1,39,38, + 53,52,1,6,34,47,1,1,55,1,23,22,21,20,0,50,23,22,29,1,3,35,3,53,52,55,18,20,6,34,38,52,54,50,2,34,39,38,61,1, + 19,51,19,21,20,7,6,96,28,28,40,10,254,96,1,160,10,38,30,28,249,244,56,40,10,1,160,254,96,10,38,30,28,5,42,29,27,7,254,183, + 71,1,2,7,28,41,42,251,213,29,27,7,1,73,71,254,254,7,28,41,40,31,29,42,40,29,7,1,2,71,254,183,7,27,4,101,30,82,28,7, + 254,254,71,1,73,7,27,253,150,82,30,29,50,100,50,29,221,88,124,88,88,124,21,82,30,29,50,100,50,29,2,236,42,30,28,50,100,50,30,30, + 40,40,60,50,100,50,28,30,2,77,29,42,39,29,7,254,254,70,1,73,7,28,251,155,29,42,39,29,7,1,2,70,254,183,7,28,4,101,30,28, + 7,254,183,70,1,2,7,27,41,42,251,214,30,28,7,1,73,70,254,254,7,27,41,42,5,13,29,28,40,10,254,97,1,159,10,39,29,253,85,124, + 88,88,124,88,252,99,29,28,40,10,1,159,254,97,10,39,29,0,0,0,0,1,0,84,255,229,6,96,5,242,0,108,0,0,1,50,23,22,21,20, + 7,3,1,54,55,54,51,50,23,22,21,20,7,6,7,1,37,54,51,50,23,22,20,7,6,35,34,39,37,1,22,23,22,21,20,7,6,35,34,39, + 38,39,1,19,22,21,20,7,6,34,39,38,53,52,55,19,1,6,7,6,35,34,39,38,53,52,55,54,55,1,5,6,35,34,39,38,52,55,54,51, + 50,23,5,1,38,39,38,53,52,55,54,51,22,23,22,23,1,3,38,53,52,55,54,3,90,43,47,35,5,78,1,28,21,2,52,50,66,31,30,52, + 10,25,254,123,1,223,25,12,76,34,46,46,36,74,7,37,254,40,1,138,28,2,52,30,31,66,43,59,10,18,254,233,78,5,35,47,86,47,35,5, + 78,254,233,18,10,52,50,66,31,30,52,2,28,1,138,254,40,37,7,74,36,46,46,34,76,12,25,1,223,254,123,25,10,52,30,31,66,36,66,2, + 21,1,28,78,5,35,46,5,242,47,35,74,7,31,254,34,1,137,29,1,53,31,30,67,55,47,9,18,254,233,78,4,34,46,88,46,36,6,77,254, + 229,22,1,53,49,67,30,31,53,9,25,1,133,254,34,31,7,74,35,47,47,35,74,14,30,1,216,254,123,25,9,53,31,30,67,76,26,1,22,1, + 27,77,6,36,46,88,46,34,4,78,1,23,18,9,53,49,67,30,31,20,33,1,29,254,119,1,216,30,14,74,35,47,0,2,0,102,255,236,6,198, + 5,232,0,13,0,35,0,231,186,0,0,0,19,0,3,43,186,0,31,0,6,0,3,43,184,0,31,16,65,27,0,22,0,0,0,38,0,0,0,54, + 0,0,0,70,0,0,0,86,0,0,0,102,0,0,0,118,0,0,0,134,0,0,0,150,0,0,0,166,0,0,0,182,0,0,0,198,0,0,0,214, + 0,0,0,13,93,65,5,0,229,0,0,0,245,0,0,0,2,93,65,5,0,234,0,6,0,250,0,6,0,2,93,65,27,0,25,0,6,0,41,0, + 6,0,57,0,6,0,73,0,6,0,89,0,6,0,105,0,6,0,121,0,6,0,137,0,6,0,153,0,6,0,169,0,6,0,185,0,6,0,201,0, + 6,0,217,0,6,0,13,93,184,0,37,220,0,186,0,3,0,16,0,3,43,184,0,3,16,186,0,23,0,10,0,3,43,184,0,23,16,184,0,16, + 16,184,0,14,208,184,0,14,47,184,0,23,16,184,0,25,208,184,0,25,47,184,0,23,16,184,0,27,208,184,0,16,16,184,0,34,208,48,49,19, + 16,0,33,32,0,17,52,2,36,35,34,4,2,1,6,35,32,0,17,52,18,36,51,50,23,54,51,50,4,18,21,16,0,33,34,185,1,143,1,28, + 1,28,1,143,182,254,184,173,173,254,184,182,2,220,25,25,254,196,254,63,206,1,113,190,25,25,25,25,193,1,113,205,254,63,254,194,25,2,234,254, + 228,254,112,1,144,1,28,179,1,71,177,177,254,185,252,81,2,1,191,1,63,198,1,114,198,2,2,198,254,144,200,254,193,254,65,0,0,2,0,122, + 255,156,6,178,5,212,0,3,0,11,0,55,186,0,3,0,5,0,3,43,184,0,3,16,186,0,10,0,0,0,3,43,184,0,10,16,184,0,13,220, + 0,186,0,0,0,10,0,3,43,184,0,0,16,186,0,7,0,1,0,3,43,184,0,7,16,48,49,37,17,33,17,23,35,17,33,21,51,17,33,5, + 251,250,210,17,100,5,212,100,250,44,83,5,46,250,210,83,5,212,100,250,44,0,0,0,0,2,0,122,0,0,6,178,6,56,0,3,0,11,0,55, + 186,0,3,0,6,0,3,43,184,0,3,16,186,0,11,0,0,0,3,43,184,0,11,16,184,0,13,220,0,186,0,0,0,5,0,3,43,184,0,0, + 16,186,0,10,0,1,0,3,43,184,0,10,16,48,49,37,17,33,17,37,21,33,17,51,53,33,17,5,251,250,210,5,129,250,44,100,5,212,83,5, + 46,250,210,17,100,5,212,100,250,44,0,0,0,2,0,122,255,156,6,178,5,212,0,3,0,9,0,55,186,0,3,0,4,0,3,43,184,0,3,16, + 186,0,8,0,0,0,3,43,184,0,8,16,184,0,11,220,0,186,0,0,0,8,0,3,43,184,0,0,16,186,0,6,0,1,0,3,43,184,0,6, + 16,48,49,37,17,33,17,7,17,33,23,17,33,5,251,250,210,83,5,212,100,250,74,83,5,46,250,210,83,5,212,130,250,74,0,0,0,2,0,122, + 0,0,6,178,6,56,0,3,0,9,0,55,186,0,3,0,5,0,3,43,184,0,3,16,186,0,9,0,0,0,3,43,184,0,9,16,184,0,11,220, + 0,186,0,0,0,4,0,3,43,184,0,0,16,186,0,8,0,1,0,3,43,184,0,8,16,48,49,37,17,33,17,5,33,17,55,33,17,5,251,250, + 210,5,129,250,44,130,5,182,83,5,46,250,210,83,5,212,100,250,74,0,0,4,0,170,255,251,6,130,5,211,0,3,0,7,0,11,0,15,0,11, + 0,184,0,9,47,184,0,15,47,48,49,19,9,14,170,1,83,1,83,254,173,1,223,1,84,1,82,254,174,253,21,1,83,1,83,254,173,254,173,1, + 83,1,83,254,173,2,233,1,83,254,173,254,173,1,83,1,82,254,174,254,171,2,234,1,85,254,171,254,174,254,34,1,83,254,173,254,173,0,0,0, + 0,1,3,5,254,20,3,175,6,20,0,3,0,0,1,17,35,17,3,175,170,6,20,248,0,8,0,0,0,1,2,176,254,20,4,4,6,20,0,3, + 0,0,1,17,33,17,4,4,254,172,6,20,248,0,8,0,0,1,2,6,254,20,4,174,6,20,0,3,0,0,1,17,33,17,4,174,253,88,6,20, + 248,0,8,0,0,1,0,174,3,40,2,28,5,213,0,6,0,27,186,0,0,0,1,0,3,43,0,184,0,3,47,186,0,6,0,0,0,3,43,184, + 0,6,16,48,49,1,33,17,19,51,3,51,2,28,254,146,164,129,82,155,3,40,1,110,1,63,254,193,0,1,0,120,3,40,1,230,5,213,0,6, + 0,39,186,0,1,0,0,0,3,43,184,0,1,16,0,184,0,3,47,186,0,1,0,2,0,3,43,184,0,1,16,184,0,2,16,184,0,5,208,48, + 49,19,33,17,3,35,19,35,120,1,110,164,129,82,155,5,213,254,146,254,193,1,63,0,255,255,0,174,3,40,3,214,5,213,16,38,15,221,0,0, + 16,7,15,221,1,186,0,0,255,255,0,120,3,40,3,160,5,213,16,38,15,222,0,0,16,7,15,222,1,186,0,0,0,2,1,62,255,66,6,45, + 6,207,0,68,0,72,0,0,1,50,23,22,23,30,1,21,20,6,7,6,7,6,35,34,7,6,7,14,1,20,22,23,22,23,22,50,55,54,55,62, + 1,53,17,33,34,38,53,52,36,51,33,53,55,21,33,7,35,17,20,6,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55,54,1,17,35, + 17,2,221,31,26,27,22,21,23,23,21,22,27,26,26,28,19,19,16,17,16,19,16,20,16,24,95,62,73,45,55,52,254,205,222,253,1,4,215,1, + 51,141,1,84,140,200,80,62,67,80,78,177,68,71,45,50,46,49,47,38,68,57,1,168,190,1,208,11,12,21,20,56,31,30,56,20,21,12,11,9, + 8,16,16,39,46,42,14,18,6,9,27,33,45,56,129,68,1,95,238,184,190,232,200,50,250,123,251,219,106,183,64,70,39,37,25,26,46,51,114,64, + 77,100,55,43,29,24,1,52,2,86,253,170,0,2,1,158,255,221,5,22,5,240,0,21,0,47,0,0,1,50,23,22,23,30,1,21,20,7,6,7, + 38,39,38,53,52,54,55,54,55,54,18,50,23,22,23,30,1,21,20,6,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55,3,90,160,121, + 42,44,38,39,136,178,130,134,174,136,39,38,37,49,93,126,124,52,53,44,45,43,43,45,44,53,52,124,52,53,44,45,43,43,45,44,53,5,240,40, + 14,43,38,97,52,124,100,131,206,206,131,102,122,52,97,38,36,21,40,252,70,22,24,42,46,106,61,60,106,46,42,24,22,22,24,42,46,106,60,61, + 106,46,42,24,0,2,1,78,255,221,5,102,5,240,0,33,0,59,0,0,1,38,37,38,53,52,54,55,54,55,54,50,23,22,23,30,1,21,52,54, + 55,54,55,54,50,23,22,23,30,1,21,20,7,4,2,50,23,22,23,30,1,21,20,6,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,55, + 3,90,123,254,247,136,39,38,37,49,45,108,46,47,38,37,40,40,37,38,47,46,108,45,49,37,38,39,136,254,246,184,124,52,53,44,45,43,43,45, + 44,53,52,124,52,53,44,45,43,43,45,44,53,2,173,196,161,83,131,52,97,38,36,21,20,20,20,37,37,96,54,54,96,37,37,20,20,20,21,36, + 38,97,52,132,82,161,254,197,22,24,42,46,106,61,60,106,46,42,24,22,22,24,42,46,106,60,61,106,46,42,24,0,0,1,0,110,0,171,6,70, + 5,40,0,33,0,0,37,38,37,38,53,52,54,55,54,55,54,50,23,22,23,30,1,21,52,54,55,54,55,54,50,23,22,23,30,1,21,20,7,4, + 3,90,137,254,95,194,55,55,53,69,65,154,65,68,54,53,57,57,53,54,68,65,154,65,69,53,55,55,194,254,95,171,239,242,113,178,75,138,54,52, + 30,28,28,29,53,52,137,78,78,137,52,53,29,28,28,30,52,54,138,75,180,111,242,0,0,1,1,88,255,254,5,212,5,214,0,35,0,0,1,6, + 3,6,35,34,38,39,38,39,38,53,52,55,54,55,62,1,51,34,38,39,38,39,38,53,52,55,54,55,62,1,51,50,23,18,5,212,238,242,114,178, + 74,138,54,52,30,28,28,28,54,52,136,78,78,136,52,54,28,28,28,30,52,54,138,74,180,112,242,2,234,138,254,96,194,54,56,52,70,64,78,76, + 66,68,54,52,58,56,54,54,68,64,78,76,66,68,54,54,56,194,254,94,0,2,0,126,0,42,5,203,5,158,0,13,0,105,0,0,1,54,53,52, + 39,38,35,34,7,6,21,20,23,22,23,6,7,54,51,50,23,22,21,20,5,6,21,20,51,50,55,54,51,50,21,20,33,34,39,38,53,16,33,50, + 23,54,55,38,39,38,35,34,7,6,21,20,22,21,20,7,6,35,34,39,38,53,52,55,54,51,50,31,1,52,55,54,51,50,23,22,21,20,7,22, + 51,50,55,54,53,52,39,38,53,52,55,54,51,50,23,22,21,20,7,6,35,34,3,151,10,29,24,54,30,22,19,43,74,111,21,46,94,86,124,59, + 45,254,203,153,105,116,16,51,54,63,254,197,204,186,198,1,5,102,81,77,16,101,230,69,74,83,63,40,42,26,36,20,32,25,14,115,93,118,104,50, + 75,41,42,78,76,49,51,16,60,86,76,42,45,21,42,21,31,56,65,42,20,143,95,120,65,4,103,48,44,63,41,33,18,15,27,58,34,57,140,74, + 79,67,81,62,94,218,118,58,77,99,42,132,90,156,153,163,254,1,101,141,151,67,48,170,51,78,51,53,37,38,29,23,20,28,45,25,75,116,92,75, + 37,57,83,31,32,62,66,87,78,61,17,33,36,31,63,18,36,21,56,28,40,70,33,53,123,94,63,0,0,2,0,160,1,90,6,19,4,132,0,9, + 0,81,0,0,1,6,7,6,7,54,55,54,53,52,1,32,53,52,55,38,39,38,43,1,22,7,6,7,22,51,50,55,22,21,20,35,34,39,35,53, + 51,54,55,54,55,38,39,38,39,38,53,52,51,6,21,20,23,22,23,50,23,22,23,38,53,52,55,54,51,50,19,22,51,50,53,52,39,38,53,52, + 51,50,21,20,7,6,1,223,63,45,66,27,79,62,61,1,254,254,139,118,48,54,38,37,4,2,75,96,100,25,67,43,40,8,145,107,20,36,39,30, + 101,77,63,15,36,35,61,72,98,12,143,66,4,61,41,43,56,31,61,46,109,216,57,24,101,98,12,11,80,66,247,176,3,62,14,36,51,103,29,58, + 56,52,4,254,33,254,69,66,55,28,20,87,80,102,15,71,43,30,49,75,171,72,142,80,60,2,18,18,18,14,17,70,102,29,35,38,84,39,25,19, + 20,48,80,43,65,39,29,254,147,154,60,30,18,17,27,60,81,173,98,70,0,1,1,145,254,228,5,47,6,39,0,32,0,0,1,34,39,38,39,38, + 39,38,53,52,55,54,55,54,55,54,51,21,34,7,6,2,7,6,21,20,23,22,23,22,23,22,51,5,47,186,169,161,138,134,70,68,68,64,140,132, + 167,169,186,109,104,96,166,40,40,40,40,83,78,101,99,114,254,228,71,67,137,133,167,164,187,189,169,157,143,134,70,71,47,67,62,254,250,155,156,184, + 177,156,155,131,125,68,67,0,0,1,1,145,254,228,5,47,6,39,0,34,0,0,1,48,53,50,55,54,55,54,55,54,53,52,39,38,2,39,38,35, + 48,53,50,23,22,23,22,23,22,21,20,7,6,7,6,7,6,1,145,114,99,101,78,83,40,40,40,40,166,96,104,109,186,169,167,132,140,64,68,68, + 70,134,138,161,169,254,228,47,67,68,125,131,155,156,177,184,156,155,1,6,62,67,47,71,70,134,143,157,169,189,187,164,167,133,137,67,71,0,0,0, + 0,1,2,29,254,241,4,152,6,17,0,12,0,0,1,6,2,16,18,23,33,38,2,53,52,18,55,4,152,134,130,131,133,254,176,150,149,148,151,6, + 17,230,254,62,254,50,254,59,229,235,1,198,224,223,1,196,236,0,0,0,0,1,2,29,254,241,4,152,6,17,0,13,0,0,1,48,33,22,18,21, + 20,2,7,33,54,18,16,2,2,29,1,80,151,148,149,150,254,176,133,131,130,6,17,236,254,60,223,224,254,58,235,229,1,197,1,206,1,194,0,0, + 0,1,1,185,254,20,4,219,6,20,0,5,0,0,1,33,9,1,33,1,4,219,254,220,254,2,1,254,1,36,254,0,254,20,4,0,4,0,252,0, + 0,1,1,219,254,20,4,252,6,20,0,5,0,0,9,2,33,9,1,1,219,1,255,254,2,1,34,1,254,254,2,254,20,4,0,4,0,252,0,252, + 0,0,0,0,0,1,1,35,254,20,5,123,6,20,0,5,0,0,1,33,9,1,33,1,5,123,254,60,253,108,2,148,1,196,253,96,254,20,4,0, + 4,0,252,0,0,1,1,57,254,20,5,145,6,20,0,5,0,0,9,2,33,9,1,1,57,2,160,253,96,1,196,2,148,253,108,254,20,4,0,4, + 0,252,0,252,0,0,0,0,0,1,1,85,254,20,5,63,6,20,0,5,0,0,1,33,9,1,33,1,5,63,254,20,254,2,1,254,1,236,254,0, + 254,20,4,0,4,0,252,0,0,1,1,119,254,20,5,96,6,20,0,5,0,0,9,2,33,9,1,1,119,1,255,254,2,1,234,1,254,254,2,254, + 20,4,0,4,0,252,0,252,0,0,0,0,0,1,2,196,254,19,4,72,6,20,0,7,0,0,5,23,7,1,17,1,23,7,3,90,238,106,254,230, + 1,26,106,238,149,238,106,1,26,5,205,1,26,106,238,0,0,1,2,108,254,19,3,240,6,20,0,7,0,0,1,39,55,1,17,1,39,55,3,90, + 238,106,1,26,254,230,106,238,4,188,238,106,254,230,250,51,254,230,106,238,0,1,1,102,254,178,5,19,6,20,0,36,0,0,5,21,35,34,38,61, + 1,52,38,43,1,53,51,50,54,61,1,52,54,59,1,21,35,34,6,29,1,20,6,7,30,1,29,1,20,22,51,5,19,212,249,169,108,142,61,61, + 143,107,169,249,212,68,141,86,91,110,111,90,86,141,190,144,148,221,239,151,116,143,115,149,240,221,147,143,88,141,248,157,142,25,27,142,156,248,141,88, + 0,1,1,161,254,178,5,78,6,20,0,36,0,0,5,51,50,54,61,1,52,54,55,46,1,61,1,52,38,43,1,53,51,50,22,29,1,20,22,59, + 1,21,35,34,6,29,1,20,6,43,1,1,161,68,141,86,90,111,110,91,86,141,68,212,249,169,107,143,61,61,142,108,169,249,212,190,88,141,248,156, + 142,27,25,142,157,248,141,88,143,147,221,240,149,115,143,116,151,239,221,148,0,2,0,152,255,236,6,148,5,232,0,13,0,24,0,27,0,186,0,14, + 0,3,0,3,43,184,0,14,16,186,0,10,0,19,0,3,43,184,0,10,16,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,1,33,53, + 35,17,35,5,21,55,17,35,6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,251,211,2,105,218,161,254,255,236,217,2,234,254,193, + 254,65,1,191,1,63,198,1,114,198,198,254,144,253,92,142,3,26,47,152,43,253,130,0,0,2,0,152,255,236,6,148,5,232,0,13,0,42,0,27, + 0,186,0,37,0,3,0,3,43,184,0,37,16,186,0,10,0,20,0,3,43,184,0,10,16,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4, + 18,5,62,1,53,52,38,35,34,6,7,21,62,1,51,50,22,21,20,6,7,6,4,7,21,33,53,33,62,1,6,148,254,63,254,194,254,196,254,63, + 206,1,113,190,193,1,113,205,253,230,62,48,197,163,61,145,97,115,132,59,78,95,47,62,33,254,250,82,2,164,254,76,125,178,2,234,254,193,254,65, + 1,191,1,63,198,1,114,198,198,254,144,233,70,105,58,125,151,31,36,171,58,38,78,63,40,85,63,34,241,77,129,142,116,167,0,0,0,2,0,152, + 255,236,6,148,5,232,0,13,0,54,0,153,186,0,0,0,14,0,3,43,65,5,0,234,0,14,0,250,0,14,0,2,93,65,27,0,25,0,14,0, + 41,0,14,0,57,0,14,0,73,0,14,0,89,0,14,0,105,0,14,0,121,0,14,0,137,0,14,0,153,0,14,0,169,0,14,0,185,0,14,0, + 201,0,14,0,217,0,14,0,13,93,184,0,49,220,0,186,0,46,0,3,0,3,43,184,0,46,16,186,0,10,0,17,0,3,43,184,0,10,16,186, + 0,33,0,39,0,3,43,184,0,33,16,186,0,24,0,30,0,3,43,184,0,24,16,186,0,21,0,30,0,24,17,18,57,186,0,42,0,39,0,33, + 17,18,57,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,37,52,38,35,34,6,7,21,62,1,51,50,22,21,20,6,43,1,21,51,50, + 22,21,20,6,35,34,38,39,21,30,1,51,50,54,53,52,38,39,50,54,6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,254,124, + 193,161,61,136,95,107,121,52,91,92,88,90,145,140,99,107,115,117,68,125,91,88,136,64,195,216,118,13,4,104,2,234,254,193,254,65,1,191,1,63, + 198,1,114,198,198,254,144,24,115,137,20,24,151,32,21,63,60,58,60,140,78,71,76,79,28,48,168,27,23,156,141,93,129,3,114,0,0,3,0,152, + 255,236,6,148,5,232,0,13,0,16,0,27,0,27,0,186,0,20,0,3,0,3,43,184,0,20,16,186,0,10,0,27,0,3,43,184,0,10,16,48, + 49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,1,33,9,1,21,33,21,51,53,51,53,35,17,35,6,148,254,63,254,194,254,196,254,63,206, + 1,113,190,193,1,113,205,253,22,254,243,1,13,254,67,1,189,182,141,141,206,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,254,188, + 1,126,254,131,142,211,211,141,2,72,0,0,0,2,0,152,255,236,6,148,5,232,0,13,0,43,0,139,186,0,0,0,33,0,3,43,65,5,0,234, + 0,33,0,250,0,33,0,2,93,65,27,0,25,0,33,0,41,0,33,0,57,0,33,0,73,0,33,0,89,0,33,0,105,0,33,0,121,0,33,0, + 137,0,33,0,153,0,33,0,169,0,33,0,185,0,33,0,201,0,33,0,217,0,33,0,13,93,0,186,0,30,0,3,0,3,43,184,0,30,16,186, + 0,10,0,43,0,3,43,184,0,10,16,186,0,17,0,23,0,3,43,184,0,17,16,186,0,40,0,36,0,3,43,184,0,40,16,186,0,26,0,23, + 0,17,17,18,57,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,5,62,1,51,50,22,21,20,6,35,34,38,39,21,30,1,51,50,54, + 53,52,38,35,34,6,55,53,33,53,33,6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,251,239,89,101,50,104,118,118,104,68,119, + 95,88,133,64,190,213,207,176,31,63,3,1,145,253,195,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,243,37,20,97,86,85,97,27, + 47,172,24,20,172,152,149,176,10,1,171,142,0,3,0,152,255,236,6,148,5,232,0,13,0,25,0,50,0,241,184,0,51,47,184,0,52,47,184,0, + 51,16,184,0,6,208,184,0,6,47,184,0,52,16,184,0,14,220,184,0,20,220,65,5,0,234,0,20,0,250,0,20,0,2,93,65,27,0,25,0, + 20,0,41,0,20,0,57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0,121,0,20,0,137,0,20,0,153,0,20,0,169,0,20,0,185,0, + 20,0,201,0,20,0,217,0,20,0,13,93,184,0,6,16,184,0,29,220,65,27,0,22,0,29,0,38,0,29,0,54,0,29,0,70,0,29,0,86, + 0,29,0,102,0,29,0,118,0,29,0,134,0,29,0,150,0,29,0,166,0,29,0,182,0,29,0,198,0,29,0,214,0,29,0,13,93,65,5,0, + 229,0,29,0,245,0,29,0,2,93,0,186,0,32,0,3,0,3,43,184,0,32,16,186,0,10,0,26,0,3,43,184,0,10,16,186,0,23,0,17, + 0,3,43,184,0,23,16,186,0,44,0,38,0,3,43,184,0,44,16,186,0,47,0,38,0,44,17,18,57,48,49,1,16,0,33,32,0,17,52,18, + 36,51,50,4,18,1,20,6,35,34,38,53,52,54,51,50,22,3,34,2,21,20,22,51,50,54,53,52,38,35,34,6,55,62,1,51,50,22,23,53, + 46,1,6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,253,162,92,78,78,92,92,78,78,92,113,200,234,192,185,160,194,186,160,78, + 128,9,5,127,119,47,97,84,74,106,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,254,143,90,98,98,90,91,98,98,2,42,254,245, + 218,231,253,179,145,148,177,61,11,80,148,22,35,156,24,19,0,2,0,152,255,236,6,148,5,232,0,13,0,20,0,27,0,186,0,17,0,3,0,3, + 43,184,0,17,16,186,0,10,0,20,0,3,43,184,0,10,16,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,37,33,1,51,1,53,33, + 6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,251,194,1,207,254,175,193,1,108,253,85,2,234,254,193,254,65,1,191,1,63,198, + 1,114,198,198,254,144,118,252,230,3,93,75,0,4,0,152,255,236,6,148,5,232,0,13,0,25,0,49,0,61,1,139,186,0,26,0,6,0,3,43, + 184,0,26,16,186,0,14,0,20,0,3,43,184,0,14,16,186,0,0,0,32,0,3,43,184,0,0,16,65,5,0,234,0,20,0,250,0,20,0,2, + 93,65,27,0,25,0,20,0,41,0,20,0,57,0,20,0,73,0,20,0,89,0,20,0,105,0,20,0,121,0,20,0,137,0,20,0,153,0,20,0, + 169,0,20,0,185,0,20,0,201,0,20,0,217,0,20,0,13,93,65,27,0,22,0,26,0,38,0,26,0,54,0,26,0,70,0,26,0,86,0,26, + 0,102,0,26,0,118,0,26,0,134,0,26,0,150,0,26,0,166,0,26,0,182,0,26,0,198,0,26,0,214,0,26,0,13,93,65,5,0,229,0, + 26,0,245,0,26,0,2,93,65,5,0,234,0,32,0,250,0,32,0,2,93,65,27,0,25,0,32,0,41,0,32,0,57,0,32,0,73,0,32,0, + 89,0,32,0,105,0,32,0,121,0,32,0,137,0,32,0,153,0,32,0,169,0,32,0,185,0,32,0,201,0,32,0,217,0,32,0,13,93,186,0, + 47,0,6,0,0,17,18,57,186,0,59,0,20,0,14,17,18,57,184,0,59,47,65,5,0,234,0,59,0,250,0,59,0,2,93,65,27,0,25,0, + 59,0,41,0,59,0,57,0,59,0,73,0,59,0,89,0,59,0,105,0,59,0,121,0,59,0,137,0,59,0,153,0,59,0,169,0,59,0,185,0, + 59,0,201,0,59,0,217,0,59,0,13,93,184,0,53,220,0,186,0,29,0,3,0,3,43,184,0,29,16,186,0,10,0,41,0,3,43,184,0,10, + 16,186,0,23,0,17,0,3,43,184,0,23,16,186,0,50,0,56,0,3,43,184,0,50,16,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4, + 18,1,20,6,35,34,38,53,52,54,51,50,22,5,20,22,51,50,54,53,52,38,39,62,1,53,52,38,35,34,6,21,20,22,23,14,1,1,50,22, + 21,20,6,35,34,38,53,52,54,6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205,253,185,95,84,84,95,95,84,84,95,253,226,190, + 173,173,190,118,15,4,105,182,157,157,183,106,4,15,118,1,107,75,82,82,75,77,81,81,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254, + 144,254,108,72,81,80,73,73,80,80,73,138,151,151,138,92,131,3,1,118,83,116,136,136,116,83,118,1,3,131,1,196,66,62,61,66,66,61,62,66, + 0,3,0,152,255,236,6,148,5,232,0,13,0,38,0,50,0,233,184,0,51,47,184,0,52,47,184,0,0,220,184,0,17,220,65,5,0,234,0,17, + 0,250,0,17,0,2,93,65,27,0,25,0,17,0,41,0,17,0,57,0,17,0,73,0,17,0,89,0,17,0,105,0,17,0,121,0,17,0,137,0, + 17,0,153,0,17,0,169,0,17,0,185,0,17,0,201,0,17,0,217,0,17,0,13,93,184,0,51,16,184,0,39,208,184,0,39,47,184,0,45,220, + 65,27,0,22,0,45,0,38,0,45,0,54,0,45,0,70,0,45,0,86,0,45,0,102,0,45,0,118,0,45,0,134,0,45,0,150,0,45,0,166, + 0,45,0,182,0,45,0,198,0,45,0,214,0,45,0,13,93,65,5,0,229,0,45,0,245,0,45,0,2,93,0,186,0,14,0,3,0,3,43,184, + 0,14,16,186,0,10,0,20,0,3,43,184,0,10,16,186,0,26,0,32,0,3,43,184,0,26,16,186,0,42,0,48,0,3,43,184,0,42,16,186, + 0,35,0,32,0,26,17,18,57,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4,18,1,50,18,53,52,38,35,34,6,21,20,22,51,50,54, + 7,14,1,35,34,38,39,21,30,1,3,52,54,51,50,22,21,20,6,35,34,38,6,148,254,63,254,194,254,196,254,63,206,1,113,190,193,1,113,205, + 252,209,200,233,191,185,160,194,186,159,79,128,10,5,127,119,46,97,85,74,107,60,92,78,78,91,91,78,78,92,2,234,254,193,254,65,1,191,1,63, + 198,1,114,198,198,254,144,253,75,1,10,218,232,253,180,145,148,175,60,13,79,147,21,36,156,24,19,2,132,91,98,98,91,91,98,98,0,4,0,152, + 255,236,6,148,5,232,0,13,0,24,0,36,0,48,0,211,186,0,37,0,17,0,3,43,184,0,37,16,186,0,25,0,31,0,3,43,184,0,25,16, + 186,0,0,0,43,0,3,43,184,0,0,16,65,5,0,234,0,31,0,250,0,31,0,2,93,65,27,0,25,0,31,0,41,0,31,0,57,0,31,0, + 73,0,31,0,89,0,31,0,105,0,31,0,121,0,31,0,137,0,31,0,153,0,31,0,169,0,31,0,185,0,31,0,201,0,31,0,217,0,31,0, + 13,93,65,5,0,234,0,43,0,250,0,43,0,2,93,65,27,0,25,0,43,0,41,0,43,0,57,0,43,0,73,0,43,0,89,0,43,0,105,0, + 43,0,121,0,43,0,137,0,43,0,153,0,43,0,169,0,43,0,185,0,43,0,201,0,43,0,217,0,43,0,13,93,0,186,0,15,0,3,0,3, + 43,184,0,15,16,186,0,10,0,46,0,3,43,184,0,10,16,184,0,3,16,184,0,40,220,48,49,1,16,0,33,32,0,17,52,18,36,51,50,4, + 18,1,33,53,35,17,35,7,21,55,17,35,1,20,6,35,34,38,53,52,54,51,50,22,5,20,22,51,50,54,53,52,38,35,34,6,6,148,254,63, + 254,194,254,196,254,63,206,1,113,190,193,1,113,205,251,36,1,194,159,117,188,172,158,3,137,70,63,64,69,69,64,63,70,254,112,136,131,130,136,136, + 130,131,136,2,234,254,193,254,65,1,191,1,63,198,1,114,198,198,254,144,253,169,128,2,202,42,137,39,253,194,1,36,162,151,151,162,163,151,151,163, + 208,228,228,208,209,228,228,0,0,3,0,9,255,150,6,171,6,61,0,25,0,36,0,62,0,0,0,32,7,6,7,6,2,21,20,18,23,22,23,22, + 32,55,54,55,54,18,53,52,2,39,38,39,1,33,17,5,53,37,51,17,33,21,33,18,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38, + 39,38,2,53,52,18,55,54,55,3,244,254,204,134,132,109,111,109,109,111,109,132,134,1,52,134,132,109,111,109,109,111,109,132,253,165,1,8,254,225, + 1,30,161,1,8,253,80,141,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150,124,126,123,123,126,124,150,5,217,57,54,111,111,254,247,156, + 151,254,247,111,111,54,57,57,54,111,111,1,9,151,156,1,9,111,111,54,251,125,3,143,57,147,58,251,221,136,5,168,64,62,125,126,254,212,177,172, + 254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,3,0,9,255,150,6,171,6,61,0,25,0,54,0,80,0,0,0,32, + 7,6,7,6,2,21,20,18,23,22,23,22,32,55,54,55,54,18,53,52,2,39,38,39,1,33,21,33,53,54,0,55,62,1,53,52,38,35,34,6, + 7,53,62,1,51,50,22,21,20,6,7,14,1,2,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,3, + 244,254,204,134,132,109,111,109,109,111,109,132,134,1,52,134,132,109,111,109,109,111,109,132,254,41,2,52,253,10,92,1,61,41,78,61,133,107,80,165, + 96,97,170,70,186,221,55,73,20,215,186,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150,124,126,123,123,126,124,150,5,217,57,54,111,111, + 254,247,156,151,254,247,111,111,54,57,57,54,111,111,1,9,151,156,1,9,111,111,54,251,128,136,136,95,1,65,46,88,120,59,95,120,53,53,163,39, + 40,186,155,73,132,90,23,222,4,86,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,0, + 0,3,0,9,255,150,6,171,6,61,0,25,0,66,0,92,0,0,0,32,7,6,7,6,2,21,20,18,23,22,23,22,32,55,54,55,54,18,53,52, + 2,39,38,39,3,30,1,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7,53,62,1,51, + 50,22,21,20,6,0,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,3,244,254,204,134,132,109,111,109, + 109,111,109,132,134,1,52,134,132,109,111,109,109,111,109,132,116,116,131,243,224,76,159,85,68,160,87,152,159,148,132,139,145,120,126,130,122,66,152,92, + 82,171,71,186,213,114,254,61,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150,124,126,123,123,126,124,150,5,217,57,54,111,111,254,247,156, + 151,254,247,111,111,54,57,57,54,111,111,1,9,151,156,1,9,111,111,54,253,121,25,156,116,176,194,30,29,156,39,40,120,114,106,119,133,95,90,92, + 98,29,30,144,23,28,167,142,100,136,3,9,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0, + 0,4,0,9,255,150,6,171,6,61,0,25,0,28,0,39,0,65,0,0,0,32,7,6,7,6,2,21,20,18,23,22,23,22,32,55,54,55,54,18, + 53,52,2,39,38,39,7,1,33,3,51,17,51,21,35,17,35,17,33,53,0,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2, + 53,52,18,55,54,55,3,244,254,204,134,132,109,111,109,109,111,109,132,134,1,52,134,132,109,111,109,109,111,109,132,222,254,104,1,152,42,203,170,170, + 161,253,229,1,43,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150,124,126,123,123,126,124,150,5,217,57,54,111,111,254,247,156,151,254,247, + 111,111,54,57,57,54,111,111,1,9,151,156,1,9,111,111,54,237,253,130,3,11,252,245,134,254,230,1,26,156,3,242,64,62,125,126,254,212,177,172, + 254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,3,0,9,255,150,6,171,6,61,0,25,0,55,0,81,0,0,0,32, + 7,6,7,6,2,21,20,18,23,22,23,22,32,55,54,55,54,18,53,52,2,39,38,39,5,33,21,33,17,62,1,51,50,22,21,20,6,35,34,38, + 39,53,30,1,51,50,54,53,52,38,35,34,6,7,18,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55, + 3,244,254,204,134,132,109,111,109,109,111,109,132,134,1,52,134,132,109,111,109,109,111,109,132,253,163,2,122,254,26,35,71,35,200,233,240,218,75,156, + 83,76,149,86,138,162,162,138,65,129,67,143,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150,124,126,123,123,126,124,150,5,217,57,54,111, + 111,254,247,156,151,254,247,111,111,54,57,57,54,111,111,1,9,151,156,1,9,111,111,54,99,136,254,219,12,12,219,187,193,214,26,25,163,41,37,146, + 125,124,146,29,30,3,88,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,0,4,0,9, + 255,150,6,171,6,61,0,25,0,37,0,62,0,88,0,0,0,32,7,6,7,6,2,21,20,18,23,22,23,22,32,55,54,55,54,18,53,52,2,39, + 38,39,1,34,6,21,20,22,51,50,54,53,52,38,19,21,46,1,35,34,6,7,62,1,51,50,22,21,20,6,35,34,2,17,16,0,51,50,22,0, + 32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,3,244,254,204,134,132,109,111,109,109,111,109,132,134,1, + 52,134,132,109,111,109,109,111,109,132,254,214,108,128,128,108,109,127,127,212,61,124,60,160,169,12,47,142,86,180,209,218,181,207,219,1,13,226,61,124, + 254,94,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150,124,126,123,123,126,124,150,5,217,57,54,111,111,254,247,156,151,254,247,111,111,54, + 57,57,54,111,111,1,9,151,156,1,9,111,111,54,253,139,149,130,128,150,150,128,130,149,1,250,147,29,30,216,218,69,75,219,188,184,222,1,62,1, + 45,1,29,1,79,24,1,0,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,3,0,9, + 255,150,6,171,6,61,0,25,0,32,0,58,0,0,0,32,7,6,7,6,2,21,20,18,23,22,23,22,32,55,54,55,54,18,53,52,2,39,38,39, + 5,33,21,1,35,1,33,18,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,3,244,254,204,134,132,109, + 111,109,109,111,109,132,134,1,52,134,132,109,111,109,109,111,109,132,253,92,3,0,254,78,168,1,152,253,194,214,1,92,152,150,124,126,123,123,126,124, + 150,152,254,164,152,150,124,126,123,123,126,124,150,5,217,57,54,111,111,254,247,156,151,254,247,111,111,54,57,57,54,111,111,1,9,151,156,1,9,111, + 111,54,96,69,251,154,4,35,1,133,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,0, + 0,5,0,9,255,150,6,171,6,61,0,25,0,35,0,57,0,69,0,95,0,0,0,32,7,6,7,6,2,21,20,18,23,22,23,22,32,55,54,55, + 54,18,53,52,2,39,38,39,1,34,6,20,22,50,54,53,52,38,37,46,1,53,52,54,32,22,21,20,6,7,30,1,21,20,6,32,38,53,52,54, + 19,20,22,51,50,54,53,52,38,35,34,6,18,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,3,244, + 254,204,134,132,109,111,109,109,111,109,132,134,1,52,134,132,109,111,109,109,111,109,132,254,223,115,132,132,230,133,132,254,234,104,116,204,1,100,204,116, + 104,117,131,212,254,116,212,132,57,116,105,104,118,118,104,105,116,48,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150,124,126,123,123,126,124, + 150,5,217,57,54,111,111,254,247,156,151,254,247,111,111,54,57,57,54,111,111,1,9,151,156,1,9,111,111,54,253,44,123,216,123,124,107,108,123,69, + 26,142,103,143,166,166,143,103,142,26,27,158,115,173,186,186,173,115,158,1,26,92,104,104,92,93,104,104,1,208,64,62,125,126,254,212,177,172,254,212, + 126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,0,0,4,0,9,255,150,6,171,6,61,0,25,0,50,0,62,0,88,0,0, + 0,32,7,6,7,6,2,21,20,18,23,22,23,22,32,55,54,55,54,18,53,52,2,39,38,39,1,53,30,1,51,50,54,55,14,1,35,34,38,53, + 52,54,51,50,18,17,16,0,35,34,38,19,50,54,53,52,38,35,34,6,21,20,22,2,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38, + 39,38,2,53,52,18,55,54,55,3,244,254,204,134,132,109,111,109,109,111,109,132,134,1,52,134,132,109,111,109,109,111,109,132,253,167,61,124,60,160, + 169,12,46,143,86,181,207,218,180,208,218,254,244,226,61,125,254,109,127,127,109,108,128,128,74,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152, + 150,124,126,123,123,126,124,150,5,217,57,54,111,111,254,247,156,151,254,247,111,111,54,57,57,54,111,111,1,9,151,156,1,9,111,111,54,251,14,147, + 29,30,215,219,68,74,217,188,184,222,254,195,254,209,254,230,254,175,24,2,18,149,130,129,149,149,129,130,149,3,149,64,62,125,126,254,212,177,172,254, + 212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,0,5,0,9,255,150,6,171,6,61,0,29,0,43,0,56,0,67,0,97, + 0,0,0,32,7,6,7,6,7,6,21,20,23,22,23,22,23,22,32,55,54,55,54,55,54,53,52,39,38,39,38,39,7,34,7,6,21,20,22,51, + 50,54,53,52,39,46,1,32,23,22,17,16,7,6,32,2,17,16,55,1,51,17,7,53,55,51,17,51,21,33,0,32,23,22,23,22,23,22,21,20, + 7,6,7,6,7,6,32,39,38,39,38,39,38,53,52,55,54,55,54,55,3,244,254,204,134,132,109,111,53,56,56,53,111,109,132,134,1,52,134,132, + 109,111,53,56,56,53,111,109,132,29,84,44,43,86,85,86,86,43,43,239,1,50,81,80,80,81,254,206,160,80,254,51,141,150,149,129,131,254,112,1, + 5,1,92,152,150,124,126,60,63,63,60,126,124,150,152,254,164,152,150,124,126,60,63,63,60,126,124,150,5,217,57,54,111,111,131,134,156,151,134,131, + 111,111,54,57,57,54,111,111,131,134,151,156,134,131,111,111,54,203,123,122,247,245,246,246,245,243,126,123,128,159,158,254,209,254,211,159,159,1,62,1, + 45,1,44,161,252,103,3,143,37,147,38,251,221,136,5,168,64,62,125,126,149,151,177,172,151,149,126,125,62,64,64,62,125,126,149,151,172,177,151,149, + 126,125,62,0,0,2,0,9,255,150,6,171,6,61,0,10,0,36,0,0,1,21,33,53,33,17,35,5,21,37,17,2,32,23,22,23,22,18,21,20, + 2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,2,31,2,176,254,248,161,254,226,1,31,123,1,92,152,150,124,126,123,123,126,124,150, + 152,254,164,152,150,124,126,123,123,126,124,150,1,29,136,136,4,35,58,147,57,252,113,5,32,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64, + 62,125,126,1,44,172,177,1,44,126,125,62,0,2,0,9,255,150,6,171,6,61,0,28,0,54,0,0,1,62,1,55,62,1,53,52,38,35,34,6, + 7,21,62,1,51,50,22,21,20,6,7,6,0,7,21,33,53,0,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18, + 55,54,55,2,163,195,215,20,73,55,221,186,70,170,97,96,169,76,107,133,61,78,41,254,195,92,2,246,253,213,1,92,152,150,124,126,123,123,126,124, + 150,152,254,164,152,150,124,126,123,123,126,124,150,1,32,199,222,23,90,132,73,155,186,40,39,163,53,53,120,95,59,120,88,46,254,191,95,136,136,5, + 29,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,2,0,9,255,150,6,171,6,61,0,40, + 0,66,0,0,1,62,1,53,52,38,35,34,6,7,21,62,1,51,50,22,21,20,6,43,1,21,51,50,22,21,20,6,35,34,38,39,21,30,1,51, + 50,54,53,52,38,0,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,4,6,105,114,215,184,71,161,92, + 92,152,66,122,130,126,120,145,139,132,148,159,152,87,160,68,85,159,76,224,243,131,254,50,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150, + 124,126,123,123,126,124,150,3,25,27,136,100,142,167,25,26,144,30,29,98,92,90,95,133,119,106,114,120,40,39,156,29,30,194,176,116,156,3,61,64, + 62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,0,3,0,9,255,150,6,171,6,61,0,2, + 0,13,0,39,0,0,1,17,33,9,1,21,33,17,51,17,51,53,35,17,36,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2, + 53,52,18,55,54,55,3,156,254,104,1,110,254,15,2,27,161,170,170,254,111,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150,124,126,123, + 123,126,124,150,4,179,253,130,3,11,253,11,156,254,230,1,26,134,3,11,253,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1, + 44,172,177,1,44,126,125,62,0,2,0,9,255,150,6,171,6,61,0,29,0,55,0,0,1,17,62,1,51,50,22,21,20,6,35,34,38,39,21,30, + 1,51,50,54,53,52,38,35,34,6,7,17,33,53,0,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55, + 2,29,67,129,65,138,162,162,138,86,153,72,83,156,75,218,240,233,200,35,71,35,1,230,254,21,1,92,152,150,124,126,123,123,126,124,150,152,254,164, + 152,150,124,126,123,123,126,124,150,5,61,253,168,30,29,146,124,125,146,39,39,163,25,26,214,193,187,219,12,12,1,37,136,1,0,64,62,125,126,254, + 212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,0,3,0,9,255,150,6,171,6,61,0,11,0,36,0,62, + 0,0,1,50,22,21,20,6,35,34,38,53,52,54,1,46,1,35,34,0,17,16,18,51,50,54,53,52,38,35,34,6,7,62,1,51,50,22,23,0, + 32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,3,80,109,127,127,109,108,128,128,1,173,67,124,61,226, + 254,243,219,207,181,218,209,180,86,142,47,12,169,160,60,124,61,254,27,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150,124,126,123,123,126, + 124,150,3,43,149,130,128,150,150,128,130,149,1,250,24,24,254,175,254,229,254,211,254,194,222,184,188,219,75,69,218,216,30,29,1,171,64,62,125,126, + 254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,2,0,9,255,150,6,171,6,61,0,6,0,32,0,0, + 1,21,33,1,51,1,53,36,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,1,214,2,62,254,104,168, + 1,178,253,214,1,92,152,150,124,126,123,123,126,124,150,152,254,164,152,150,124,126,123,123,126,124,150,5,64,136,251,221,4,102,69,253,64,62,125,126, + 254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,4,0,9,255,150,6,171,6,61,0,9,0,31,0,43, + 0,69,0,0,1,50,22,21,20,6,34,38,52,54,39,14,1,21,20,22,32,54,53,52,38,39,62,1,53,52,38,32,6,21,20,22,55,52,54,51, + 50,22,21,20,6,35,34,38,18,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,3,89,116,132,133,230, + 132,132,47,116,132,212,1,140,212,131,117,104,116,204,254,156,204,116,45,116,105,104,118,118,104,105,116,48,1,92,152,150,124,126,123,123,126,124,150,152, + 254,164,152,150,124,126,123,123,126,124,150,2,204,123,108,107,124,123,216,123,69,27,158,115,173,186,186,173,115,158,27,26,142,103,143,166,166,143,103,142, + 229,93,104,104,93,92,104,104,2,137,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,0, + 0,3,0,9,255,150,6,171,6,61,0,24,0,36,0,62,0,0,37,30,1,51,50,0,17,16,2,35,34,6,21,20,22,51,50,54,55,14,1,35, + 34,38,39,1,34,38,53,52,54,51,50,22,21,20,6,0,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54, + 55,2,33,67,125,61,226,1,12,218,208,180,218,209,179,86,143,46,12,169,160,60,124,61,1,65,108,128,128,108,109,127,127,254,221,1,92,152,150,124, + 126,123,123,126,124,150,152,254,164,152,150,124,126,123,123,126,124,150,174,24,24,1,81,1,26,1,47,1,61,222,184,188,217,74,68,219,215,30,29,1, + 103,149,130,129,149,149,129,130,149,3,149,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0, + 0,4,0,9,255,150,6,171,6,61,0,11,0,21,0,32,0,58,0,0,1,50,22,21,20,6,35,34,38,53,52,54,36,32,2,17,16,18,32,18, + 17,16,1,21,33,53,35,17,35,7,21,55,17,18,32,23,22,23,22,18,21,20,2,7,6,7,6,32,39,38,39,38,2,53,52,18,55,54,55,4, + 153,101,100,100,101,100,100,100,1,5,254,190,169,169,1,66,170,251,145,1,194,161,129,179,180,150,1,92,152,150,124,126,123,123,126,124,150,152,254,164, + 152,150,124,126,123,123,126,124,150,4,213,245,247,245,246,246,245,247,245,128,254,195,254,209,254,211,254,194,1,62,1,45,1,47,253,5,136,136,4,35, + 38,147,37,252,113,5,32,64,62,125,126,254,212,177,172,254,212,126,125,62,64,64,62,125,126,1,44,172,177,1,44,126,125,62,0,0,0,1,0,117, + 0,154,6,80,4,106,0,8,0,0,9,1,33,1,33,53,33,1,33,6,80,254,24,254,192,1,112,251,221,4,35,254,144,1,64,2,130,254,24,1, + 112,240,1,112,0,1,0,252,0,112,5,116,4,233,0,6,0,0,9,1,55,1,27,1,37,3,247,253,5,169,2,181,212,70,253,78,1,139,2,180, + 170,253,5,1,52,253,78,71,0,1,0,117,0,204,6,80,4,56,0,6,0,0,1,5,53,5,3,9,1,4,122,251,251,4,5,68,2,26,253,230, + 2,60,50,240,50,1,112,254,74,254,74,0,0,1,0,252,0,27,5,116,4,148,0,6,0,0,9,1,39,1,45,1,3,4,90,253,75,169,2,251, + 254,203,2,178,70,3,22,253,5,170,2,180,212,71,253,78,0,1,0,117,1,8,6,80,3,252,0,8,0,0,19,33,3,4,5,4,5,19,33,117, + 2,187,168,1,92,2,108,253,148,254,164,168,253,69,2,190,1,62,252,126,126,252,1,62,0,1,0,117,0,117,6,29,4,143,0,43,0,0,0,20, + 6,7,1,6,7,6,34,38,39,46,1,53,52,54,63,1,33,34,46,2,52,62,2,51,33,39,46,1,53,52,54,55,62,1,50,23,22,23,1,22, + 6,29,20,17,254,112,16,24,22,52,44,18,18,19,20,17,186,252,128,26,44,36,19,19,36,44,26,3,128,186,17,20,19,18,18,44,52,22,24,16, + 1,144,19,2,155,50,46,17,254,112,16,11,10,20,17,19,44,25,26,46,17,186,20,34,46,50,46,34,20,186,17,46,26,25,44,19,17,20,10,11, + 16,254,112,19,0,1,0,117,0,204,6,80,4,56,0,6,0,0,1,33,53,33,17,9,1,4,154,251,219,4,37,1,182,254,74,2,90,80,1,142, + 254,74,254,74,0,1,0,117,0,204,6,80,4,56,0,6,0,0,1,33,53,33,17,9,1,4,154,251,219,4,37,1,182,254,74,2,20,220,1,72, + 254,74,254,74,0,4,0,117,0,204,6,80,4,56,0,3,0,7,0,11,0,18,0,0,1,35,17,51,1,35,17,51,3,35,17,51,1,33,17,33, + 53,9,1,2,185,240,240,254,192,120,120,200,60,60,3,233,254,111,1,145,1,182,254,74,1,186,1,144,254,112,1,144,254,112,1,144,254,112,1,144, + 238,254,74,254,74,0,0,0,0,4,0,117,0,204,6,80,4,56,0,8,0,12,0,16,0,20,0,0,1,53,18,23,6,3,53,33,17,3,35,17, + 51,1,35,17,51,3,35,17,51,4,154,184,254,254,184,254,111,80,240,240,254,192,120,120,200,60,60,3,174,138,254,206,132,132,254,206,138,2,88,253, + 168,2,88,253,168,2,88,253,168,2,88,0,0,1,0,117,0,134,6,125,4,126,0,6,0,0,9,2,17,33,17,33,4,129,1,252,254,4,251,244, + 4,12,4,126,254,4,254,4,1,17,1,214,0,2,0,228,0,192,6,80,4,68,0,2,0,6,0,0,1,33,1,19,9,2,3,30,2,54,252,188, + 150,254,62,5,108,250,148,2,130,1,15,254,241,1,194,254,62,254,62,0,0,2,0,228,0,192,6,80,4,68,0,2,0,6,0,0,9,2,33,9, + 2,3,30,254,242,3,68,253,82,254,62,5,108,250,148,2,130,254,241,1,15,1,194,254,62,254,62,0,0,1,0,228,255,248,6,80,5,12,0,3, + 0,0,9,3,2,66,254,162,5,108,250,148,2,130,2,138,253,118,253,118,0,1,0,117,0,204,6,80,4,98,0,20,0,0,19,17,20,22,23,22, + 23,22,51,33,53,9,1,53,33,32,39,38,39,46,1,117,36,35,35,43,42,12,3,90,1,182,254,74,254,77,254,77,42,43,35,35,36,2,130,1, + 224,48,85,37,33,19,18,198,254,74,254,74,198,18,19,33,37,85,0,0,0,1,0,117,0,162,6,80,4,56,0,20,0,0,19,52,54,55,54,55, + 54,51,33,53,9,1,53,33,32,7,6,7,14,1,21,117,36,35,35,43,42,12,3,90,1,182,254,74,254,77,254,77,42,43,35,35,36,2,130,48, + 85,37,33,19,18,198,254,74,254,74,198,18,19,33,37,85,48,0,0,0,0,1,1,236,255,241,4,217,5,19,0,6,0,0,1,33,17,33,17,9, + 1,3,94,254,142,1,114,1,123,254,133,1,86,2,88,1,101,253,111,253,111,0,0,0,0,1,0,117,0,204,6,80,4,56,0,8,0,0,1,53, + 18,5,4,3,53,33,17,4,4,144,1,188,254,68,144,252,113,3,154,158,254,206,132,132,254,206,158,2,48,0,0,0,0,2,0,117,0,154,6,30, + 4,106,0,8,0,15,0,0,37,53,33,17,33,53,51,9,1,3,21,9,1,21,33,17,3,60,253,57,2,199,250,1,232,254,24,170,1,152,254,104, + 253,57,154,238,1,244,238,254,24,254,24,1,62,238,1,152,1,152,238,254,172,0,0,0,0,2,0,117,0,154,6,30,4,106,0,8,0,15,0,0, + 37,53,33,17,33,53,51,9,1,3,21,9,1,21,33,17,3,60,253,57,2,199,250,1,232,254,24,20,1,152,254,104,253,57,154,238,1,244,238,254, + 24,254,24,1,62,238,1,152,1,152,238,254,172,0,0,0,0,2,0,43,0,24,6,90,4,176,0,11,0,18,0,0,19,1,33,55,51,19,21,1, + 35,53,55,33,1,7,1,3,7,33,3,43,1,32,3,73,138,100,216,253,38,150,22,253,43,3,209,138,2,132,172,138,252,183,196,1,206,1,244,238, + 253,254,200,254,50,200,38,1,24,238,1,152,1,152,238,254,172,0,0,0,0,2,0,43,0,24,6,90,4,176,0,11,0,18,0,0,19,53,33,39, + 53,51,1,21,3,35,39,33,1,33,19,33,23,19,1,43,2,213,22,150,2,218,216,100,138,252,183,2,177,252,183,196,3,73,138,172,253,124,2,250, + 200,38,200,254,50,200,253,254,238,1,164,254,172,238,1,152,1,152,0,0,0,2,1,21,0,0,6,50,4,152,0,10,0,17,0,0,33,39,33,39, + 17,33,53,51,1,23,1,3,21,9,1,21,33,17,3,220,79,253,236,100,2,99,110,1,232,100,254,24,130,1,152,254,104,253,157,158,200,2,148,158, + 254,24,200,254,24,1,182,158,1,152,1,152,158,254,12,0,0,2,1,21,0,0,6,50,4,152,0,10,0,17,0,0,1,51,1,7,1,35,53,33, + 17,55,33,19,33,17,33,21,9,1,3,220,110,1,232,100,254,24,110,253,157,100,2,20,59,253,157,2,99,1,152,254,104,4,152,254,24,200,254,24, + 158,2,148,200,254,232,254,12,158,1,152,1,152,0,0,0,0,2,0,127,0,100,6,100,4,152,0,12,0,20,0,0,1,3,33,53,51,1,23,1, + 35,39,53,33,39,19,7,33,21,9,1,21,33,1,21,150,3,93,110,1,232,50,254,24,110,50,252,213,50,242,114,3,45,1,152,254,104,252,211,2, + 176,1,74,158,254,24,100,254,24,99,59,100,1,74,250,158,1,152,1,152,158,0,0,0,0,2,0,127,0,100,6,100,4,152,0,12,0,20,0,0, + 1,3,55,33,53,55,51,1,7,1,35,53,33,19,7,33,21,9,1,21,33,1,21,150,50,3,43,50,110,1,232,50,254,24,110,252,163,242,114,3, + 45,1,152,254,104,252,211,2,76,1,74,100,59,99,254,24,100,254,24,158,1,74,250,158,1,152,1,152,158,0,0,0,0,1,1,60,255,216,5,196, + 4,175,0,30,0,0,1,54,55,54,55,54,51,50,23,22,23,30,1,21,20,6,7,6,7,6,34,39,38,39,38,39,33,21,9,1,21,1,60,39, + 67,90,109,111,126,121,116,105,94,90,92,88,94,86,113,111,247,116,105,94,63,41,2,88,1,202,254,54,3,110,71,67,90,46,47,47,43,93,89,221, + 128,122,218,95,88,48,47,47,43,93,62,73,158,1,202,1,202,158,0,0,0,9,0,130,1,66,6,80,3,194,0,3,0,7,0,11,0,15,0,30, + 0,34,0,38,0,42,0,46,0,0,1,7,51,55,35,7,51,55,35,7,51,55,35,7,51,55,35,53,3,33,19,33,17,22,23,6,7,17,33,3, + 33,1,51,39,35,23,51,39,35,23,51,39,35,23,51,39,35,2,225,160,60,160,180,160,60,160,180,160,60,160,180,160,60,160,120,187,2,28,187,1, + 135,173,195,195,173,254,121,187,253,228,2,95,60,160,60,40,60,160,60,40,60,160,60,40,60,160,60,2,90,240,240,240,240,240,240,240,240,80,1,24, + 254,232,1,22,188,130,130,188,1,22,254,232,1,104,240,240,240,240,240,240,240,0,0,0,0,3,0,165,0,112,5,116,5,62,0,12,0,16,0,20, + 0,0,1,55,6,21,20,23,38,35,34,7,55,39,55,9,1,33,1,37,17,1,17,4,162,175,7,42,142,164,66,70,175,254,56,254,29,1,169,254, + 229,254,87,1,85,1,168,1,123,176,70,67,163,143,42,7,176,254,57,1,111,254,88,1,168,58,1,27,254,87,254,230,0,3,0,117,1,98,6,80, + 3,162,0,8,0,12,0,16,0,0,1,53,22,23,6,7,53,33,53,5,33,7,33,19,39,33,23,4,254,154,184,184,154,254,152,253,167,2,88,200, + 253,168,200,200,2,88,200,2,170,248,188,100,100,188,248,80,82,200,1,26,200,200,0,0,0,3,0,167,255,197,5,116,4,148,0,12,0,16,0,20, + 0,0,1,39,22,51,50,55,6,21,20,23,39,7,39,9,1,17,1,3,33,1,33,4,105,175,70,66,164,142,42,7,175,255,56,254,145,1,168,254, + 88,58,254,229,1,168,1,27,3,193,176,7,42,144,162,67,70,176,255,57,254,29,1,168,254,229,254,88,1,85,1,168,0,1,0,167,0,112,5,116, + 5,62,0,42,0,0,37,38,35,34,7,62,1,55,39,38,39,38,34,6,7,1,62,1,51,50,31,1,55,38,53,52,54,55,1,14,1,21,20,23, + 22,23,1,62,1,55,6,21,20,5,116,143,165,66,69,72,128,24,166,166,35,38,78,75,28,254,88,36,87,47,44,48,21,5,19,36,34,1,168,32, + 25,14,15,7,1,68,4,53,72,7,112,42,7,71,54,3,166,166,14,15,30,28,1,168,36,34,18,8,33,48,44,48,89,34,254,87,33,70,38,39, + 38,35,7,254,187,23,129,71,71,67,163,0,0,1,0,117,1,97,6,80,3,163,0,39,0,0,1,6,7,52,54,55,35,34,7,6,7,14,1,21, + 33,52,54,55,54,63,1,39,38,39,46,1,53,33,20,22,23,22,23,22,51,33,46,1,53,22,6,80,183,155,53,14,235,234,35,36,29,28,31,253, + 168,37,34,31,47,21,21,47,31,34,37,2,88,31,28,29,36,35,10,1,203,14,53,155,2,130,101,188,101,129,19,15,16,28,27,74,40,48,89,33, + 31,21,9,27,21,31,34,88,48,40,74,27,28,16,15,19,129,101,188,0,0,1,0,167,255,198,5,116,4,148,0,42,0,0,1,6,21,20,23,46, + 1,39,7,6,7,6,21,20,22,23,1,46,1,53,52,63,1,39,6,35,34,38,39,1,30,1,50,55,54,55,1,46,1,39,22,51,50,5,116,41, + 7,72,53,4,167,167,12,14,29,28,254,88,34,36,19,9,35,48,44,48,88,34,1,168,28,75,78,38,35,7,1,69,24,128,72,69,66,165,4,148, + 142,163,67,71,71,129,23,168,168,31,38,39,38,75,28,254,87,34,89,48,44,48,21,4,18,36,34,1,168,28,30,15,14,7,1,69,3,54,71,7, + 0,3,0,115,0,172,6,80,4,88,0,20,0,39,0,60,0,0,1,54,37,6,3,6,7,6,7,6,34,39,38,39,46,1,53,52,54,55,54,36, + 52,54,55,54,55,54,50,23,4,5,4,5,6,34,39,38,39,38,1,38,39,46,1,53,52,54,55,54,55,54,50,23,22,23,22,23,18,23,36,4, + 47,246,1,43,227,122,12,21,22,27,26,62,26,27,22,21,23,23,21,22,252,95,32,27,29,36,35,82,35,1,97,3,102,252,130,254,183,35,82,35, + 41,24,29,3,158,27,22,21,23,23,21,22,27,26,62,26,27,22,18,15,120,229,254,148,1,206,98,81,117,254,253,29,20,21,12,11,11,12,21,20, + 56,31,30,56,20,21,151,82,75,26,28,16,15,14,133,54,56,131,14,15,18,26,31,1,35,12,21,20,56,30,31,56,20,21,12,11,11,12,21,17, + 32,254,254,118,99,0,0,0,0,2,0,150,1,31,6,60,3,229,0,26,0,42,0,0,19,54,55,54,55,54,55,54,51,50,23,22,23,22,5,4, + 7,14,1,35,34,39,38,39,38,39,38,37,46,1,53,52,54,55,22,23,6,7,46,1,53,52,54,150,65,30,32,20,39,39,43,47,53,52,60,51, + 162,1,145,254,111,162,56,110,50,51,39,57,21,29,23,29,4,6,37,37,37,37,98,252,252,98,37,37,37,2,130,38,58,63,19,36,18,19,19,22, + 32,102,76,76,102,35,38,19,29,25,35,47,58,38,39,88,50,51,88,39,241,114,114,241,39,88,51,50,88,0,0,0,0,1,0,162,1,86,6,50, + 3,174,0,99,0,0,0,20,6,15,1,6,7,6,34,39,38,39,46,1,53,52,63,1,54,53,52,38,39,38,39,38,35,33,34,7,6,7,6,15, + 1,6,7,6,7,6,35,33,34,46,2,52,63,1,54,52,47,1,38,52,54,55,54,55,54,51,33,50,23,22,23,22,31,1,22,23,22,23,22,51, + 33,50,55,54,55,62,1,53,52,47,1,38,53,52,54,55,54,55,54,50,23,22,31,1,22,6,50,6,6,240,4,9,7,16,7,7,6,6,6,3, + 27,3,6,6,5,8,8,7,254,230,8,7,7,6,5,4,90,5,3,6,8,6,8,253,156,8,14,12,6,3,59,58,1,116,3,6,6,6,7,7, + 8,2,100,8,6,9,5,3,5,90,4,5,6,7,7,8,1,26,7,8,8,5,6,6,3,27,3,6,6,6,7,7,16,7,9,4,240,6,2,139, + 18,14,6,240,4,5,3,3,4,5,6,14,9,4,11,99,11,5,7,15,6,5,3,4,3,4,5,5,8,180,10,3,5,4,3,6,12,14,18,6, + 117,117,20,2,232,6,18,14,6,5,4,3,3,3,6,3,10,180,8,5,5,4,3,4,3,5,6,15,7,5,11,99,11,4,9,14,6,5,4,3, + 3,5,4,240,6,0,0,0,0,1,0,162,0,241,6,50,4,19,0,99,0,0,0,20,6,7,1,6,7,6,34,39,38,39,46,1,53,52,63,1, + 54,53,52,38,39,38,39,38,43,1,34,7,6,7,6,15,1,6,7,6,7,6,35,33,34,46,2,52,63,1,54,52,39,3,38,52,54,55,54,55, + 54,51,33,50,23,22,23,22,23,19,22,23,22,23,22,59,1,50,55,54,55,62,1,53,52,47,1,38,53,52,54,55,54,55,54,50,23,22,23,1, + 22,6,50,6,6,254,112,5,8,7,16,7,7,6,6,6,3,87,3,6,6,5,8,8,7,92,8,7,7,6,5,4,120,5,3,6,8,6,8,253, + 106,8,14,12,6,3,73,74,1,156,3,6,6,6,7,7,8,2,150,8,6,9,5,3,5,130,4,5,6,7,7,8,92,7,8,8,5,6,6,3, + 87,3,6,6,6,7,7,16,7,8,5,1,144,6,2,139,18,15,5,254,152,5,4,3,3,4,5,6,14,9,7,8,219,8,8,7,15,6,5,3, + 4,3,4,5,5,8,240,10,3,5,4,3,6,12,14,18,6,147,147,20,2,1,56,6,18,14,6,5,4,3,3,3,6,3,10,254,252,8,5,5, + 4,3,4,3,5,6,15,7,8,8,219,8,7,9,14,6,5,4,3,3,4,5,254,152,5,0,0,0,0,3,0,117,0,166,6,80,4,94,0,19, + 0,29,0,39,0,0,1,6,7,6,7,35,55,54,55,54,55,38,39,38,47,1,51,22,23,22,1,35,62,1,55,33,53,33,14,1,3,30,1,23, + 33,53,33,46,1,39,6,80,136,83,140,74,108,46,46,160,38,71,71,38,160,21,71,108,72,142,83,253,204,105,19,55,42,252,214,3,229,110,75,13, + 13,75,110,252,27,3,42,42,55,19,2,130,79,85,143,169,110,109,164,39,54,54,39,164,49,170,164,148,85,253,213,61,133,72,100,142,183,3,143,41, + 183,142,100,72,133,61,0,0,0,1,0,110,254,178,2,208,6,38,0,25,0,0,1,42,1,39,36,3,38,0,39,38,35,34,7,39,54,55,54,21, + 20,0,7,6,5,22,54,55,2,208,9,104,55,254,72,2,1,1,109,4,3,94,58,45,136,51,213,222,254,176,7,12,1,28,82,69,20,254,178,11, + 83,1,82,174,3,245,81,79,137,49,216,1,1,204,161,252,76,143,220,72,21,1,2,0,0,1,0,79,254,178,2,177,6,38,0,25,0,0,19,53, + 30,1,55,36,39,38,0,53,52,23,22,23,7,38,35,34,7,6,0,7,2,5,6,34,79,20,69,82,1,28,12,7,254,176,222,213,51,136,45,58, + 94,3,4,1,109,1,2,254,72,55,104,254,178,143,2,1,21,72,220,143,3,180,161,204,1,1,216,49,137,79,81,252,11,174,254,174,83,11,0,0, + 0,3,0,6,254,35,3,238,6,117,0,3,0,6,0,9,0,0,9,5,33,9,1,33,1,249,1,245,254,11,254,13,1,243,254,152,2,210,254,150, + 1,106,253,46,6,117,251,219,251,211,4,45,3,49,253,8,252,142,3,0,0,2,0,176,254,242,3,48,6,20,0,3,0,11,0,0,1,17,51,17, + 37,33,21,35,17,51,21,33,1,20,200,254,212,2,128,240,240,253,128,5,176,249,166,6,90,100,100,249,166,100,0,0,0,2,0,175,254,242,3,47, + 6,20,0,3,0,11,0,0,1,35,17,51,19,17,33,53,51,17,35,53,2,203,200,200,100,253,128,240,240,5,176,249,166,6,190,248,222,100,6,90, + 100,0,0,0,0,1,0,183,254,242,2,123,6,18,0,5,0,0,19,1,51,9,1,35,183,1,26,170,254,230,1,26,170,2,130,3,144,252,112,252, + 112,0,0,0,0,1,0,164,254,242,2,104,6,18,0,5,0,0,9,1,35,9,1,51,2,104,254,230,170,1,26,254,230,170,2,130,252,112,3,144, + 3,144,0,0,255,255,0,183,254,242,3,207,6,18,16,38,16,64,0,0,16,7,16,64,1,84,0,0,255,255,0,164,254,242,3,188,6,18,16,38, + 16,65,0,0,16,7,16,65,1,84,0,0,0,1,0,91,0,0,6,91,5,220,0,22,0,0,9,1,7,39,17,35,17,39,17,35,17,39,7,17, + 35,17,7,17,35,17,7,39,1,3,137,2,210,120,92,120,210,120,106,106,120,210,120,92,120,2,210,5,220,253,44,120,92,253,20,3,101,211,251,200, + 4,176,104,104,251,80,4,56,211,252,155,2,236,92,120,2,212,0,0,0,0,1,0,89,255,249,6,89,5,213,0,22,0,0,5,1,55,23,17,51, + 17,23,17,51,17,23,55,17,51,17,55,17,51,17,55,23,1,3,43,253,46,120,92,120,210,120,106,106,120,210,120,92,120,253,46,7,2,212,120,92, + 2,236,252,155,211,4,56,251,80,104,104,4,176,251,200,211,3,101,253,20,92,120,253,44,0,1,0,79,0,108,6,132,5,68,0,61,0,0,1,48, + 55,22,23,22,50,55,54,55,62,1,53,52,39,38,39,38,39,38,34,7,6,7,6,7,6,7,55,23,1,35,1,55,23,54,55,54,55,54,55,54, + 51,50,23,22,23,22,23,22,21,20,7,6,7,6,7,6,35,34,39,38,2,101,119,64,82,78,190,74,86,60,66,66,33,35,64,64,82,78,190,74, + 86,60,66,33,23,7,232,120,254,120,90,254,118,120,233,8,36,48,89,84,116,103,133,128,108,113,87,90,47,46,46,47,90,83,117,103,133,128,108,106, + 1,33,120,63,35,33,33,39,59,66,162,93,89,81,83,64,63,35,33,33,39,59,66,81,57,63,234,120,254,118,1,138,120,233,96,88,113,89,83,52, + 46,46,48,87,89,113,112,123,127,112,113,89,83,52,46,46,45,0,0,0,0,1,0,79,0,124,6,132,5,84,0,60,0,0,1,6,7,6,35,34, + 39,38,39,38,39,38,53,52,55,54,55,54,55,54,51,50,23,22,23,22,23,22,23,55,23,1,35,1,55,23,38,39,38,39,38,39,38,34,7,6, + 7,6,7,6,21,20,22,23,22,23,22,50,55,54,55,4,110,94,106,108,128,133,103,116,84,89,48,46,46,48,89,88,112,108,128,133,103,116,84,89, + 48,36,8,233,120,254,118,90,254,120,120,232,7,23,33,66,60,86,74,190,78,82,64,64,35,33,66,66,60,86,74,190,78,82,64,1,49,90,45,46, + 46,52,83,89,113,112,127,123,112,113,89,87,48,46,46,52,83,89,113,88,96,233,120,254,118,1,138,120,234,63,57,81,66,59,39,33,33,35,63,64, + 83,81,89,93,162,66,59,39,33,33,35,63,0,3,0,117,255,227,8,222,5,36,0,37,0,57,0,77,0,0,1,21,1,39,55,33,6,7,6,7, + 14,1,32,38,39,38,39,38,39,35,53,51,54,55,54,55,62,1,32,22,23,22,23,22,23,33,39,55,36,34,7,6,7,6,7,6,7,33,17,51, + 17,33,38,39,38,39,38,39,1,33,17,35,17,33,22,23,22,23,22,23,22,50,55,54,55,54,55,54,8,222,254,119,120,233,254,160,11,33,49,99, + 98,238,254,236,238,98,99,49,33,11,189,189,10,34,49,99,98,238,1,20,238,98,99,49,34,10,1,96,233,120,252,226,214,93,92,76,77,38,23,9, + 1,174,170,1,174,9,23,38,77,76,92,1,59,254,82,170,254,82,10,22,38,77,76,92,93,214,93,92,76,77,38,22,2,175,90,254,119,120,233,90, + 81,118,99,98,100,100,98,99,118,81,90,170,91,82,119,99,98,100,100,98,99,119,82,91,233,120,86,39,39,76,77,92,55,61,1,101,254,155,61,55, + 92,77,76,39,253,198,254,155,1,101,59,54,92,77,76,39,39,39,39,76,77,92,54,0,0,1,0,100,0,204,11,3,4,56,0,9,0,129,180,2, + 9,6,0,10,16,212,212,204,50,64,9,64,2,64,9,48,2,48,9,4,93,49,64,10,2,5,9,1,0,6,5,156,6,10,0,16,212,236,17,57, + 57,204,16,204,48,64,12,8,9,9,0,8,7,8,7,156,0,9,0,7,5,16,252,60,8,6,16,60,64,12,3,2,2,1,3,4,3,4,156,1, + 2,1,7,5,16,252,60,8,6,16,60,176,16,75,83,88,0,179,3,2,8,9,16,60,16,60,180,8,156,9,9,0,7,5,16,236,180,3,156,2, + 2,1,7,5,16,236,89,19,53,1,23,7,33,21,33,23,7,100,1,137,120,233,9,135,246,121,233,120,2,85,90,1,137,120,233,170,233,120,0,0, + 0,1,0,117,0,204,11,20,4,56,0,9,0,129,180,2,9,0,6,10,16,212,212,204,50,64,9,79,2,79,9,95,2,95,9,4,93,49,64,10, + 9,6,2,1,0,5,6,156,5,10,0,16,212,236,17,57,57,204,16,204,48,64,12,8,9,9,0,8,7,8,7,156,0,9,0,7,5,16,252,60, + 8,6,16,60,64,12,3,2,2,1,3,4,3,4,156,1,2,1,7,5,16,252,60,8,6,16,60,176,16,75,83,88,0,179,3,2,8,9,16,60, + 16,60,180,8,156,9,9,0,7,5,16,236,180,3,156,2,2,1,7,5,16,236,89,1,21,1,39,55,33,53,33,39,55,11,20,254,119,120,233,246, + 121,9,135,233,120,2,175,90,254,119,120,233,170,233,120,0,0,1,0,100,0,204,11,20,4,56,0,15,0,218,182,7,10,9,2,15,0,16,16,212, + 204,50,212,204,50,64,13,80,2,80,15,95,10,95,7,79,10,79,7,6,93,49,0,64,15,7,2,4,10,15,0,1,8,9,4,13,4,156,13,16, + 16,212,236,17,23,57,204,50,16,204,50,48,64,12,14,15,15,0,14,13,14,13,156,0,15,0,7,5,16,252,60,8,6,16,60,64,12,3,2,2, + 1,3,4,3,4,156,1,2,1,7,5,16,252,60,8,6,16,60,64,12,11,10,10,9,11,12,11,12,156,9,9,10,7,5,16,252,60,8,6,16, + 60,64,12,6,7,7,8,6,5,6,5,156,8,7,8,7,5,16,252,60,8,6,16,60,176,16,75,83,88,0,183,11,10,6,7,3,2,14,15,16, + 60,16,60,16,60,16,60,180,14,156,15,15,0,7,5,16,236,180,3,156,2,2,1,7,5,16,236,180,11,156,10,10,9,7,5,16,236,180,6,156, + 7,7,8,7,5,16,236,89,19,53,1,23,7,33,39,55,1,21,1,39,55,33,23,7,100,1,137,120,233,8,128,233,120,1,137,254,119,120,233,247, + 128,233,120,2,85,90,1,137,120,233,233,120,254,119,90,254,119,120,233,233,120,0,0,0,0,1,0,100,0,204,11,3,4,56,0,14,0,0,1,33, + 21,33,23,7,1,53,1,23,7,33,21,33,7,1,144,9,115,247,5,93,120,254,119,1,137,120,93,8,251,246,141,105,2,25,120,93,120,1,137,90, + 1,137,120,93,120,105,0,0,0,1,0,117,0,204,11,20,4,56,0,14,0,0,1,55,39,33,53,33,39,55,1,21,1,39,55,33,53,9,232,105, + 105,246,141,8,251,93,120,1,137,254,119,120,93,247,5,2,25,105,105,120,93,120,254,119,90,254,119,120,93,120,0,0,0,2,0,100,0,204,11,20, + 4,56,0,5,0,21,0,0,1,33,55,39,33,7,5,33,23,7,1,53,1,23,7,33,39,55,1,21,1,39,1,144,8,88,105,105,247,168,105,8, + 73,248,152,93,120,254,119,1,137,120,93,7,104,93,120,1,137,254,119,120,2,25,105,105,105,225,93,120,1,137,90,1,137,120,93,93,120,254,119,90, + 254,119,120,0,0,1,0,100,0,204,11,3,4,56,0,13,0,0,1,33,23,7,1,53,1,23,7,33,17,51,17,35,10,89,247,35,233,120,254,119, + 1,137,120,233,8,221,170,170,2,45,233,120,1,137,90,1,137,120,233,1,89,252,164,0,0,1,0,117,0,204,11,20,4,56,0,13,0,0,1,17, + 35,17,51,17,33,39,55,1,21,1,39,55,1,31,170,170,8,221,233,120,1,137,254,119,120,233,2,45,254,167,3,92,254,167,233,120,254,119,90,254, + 119,120,233,0,0,2,0,100,0,204,11,3,4,56,0,13,0,18,0,0,1,33,23,7,1,53,1,23,7,33,53,51,17,35,17,53,33,7,23,10, + 89,247,175,93,120,254,119,1,137,120,93,8,81,170,170,247,55,105,105,1,161,93,120,1,137,90,1,137,120,93,205,252,164,1,69,210,105,105,0,0, + 0,2,0,117,0,204,11,20,4,56,0,13,0,18,0,0,1,33,39,55,1,21,1,39,55,33,21,35,17,51,17,21,33,55,39,1,31,8,81,93, + 120,1,137,254,119,120,93,247,175,170,170,8,201,105,105,3,99,93,120,254,119,90,254,119,120,93,205,3,92,254,187,210,105,105,0,0,0,1,0,117, + 0,204,11,20,4,56,0,37,0,0,19,23,55,23,55,23,55,23,55,23,55,23,55,23,55,51,39,55,1,21,1,39,55,35,7,39,7,39,7,39, + 7,39,7,39,7,39,7,39,117,70,180,180,180,180,180,180,180,180,180,180,180,180,70,139,233,120,1,137,254,119,120,233,99,110,180,180,180,180,180,180, + 180,180,180,180,180,180,70,2,215,70,180,180,180,180,180,180,180,180,180,180,180,180,70,233,120,254,119,90,254,119,120,233,110,180,180,180,180,180,180,180, + 180,180,180,180,180,70,0,0,255,255,1,44,5,20,2,88,6,64,16,7,23,1,1,44,5,20,0,0,255,255,1,44,2,221,2,88,4,9,16,7, + 23,1,1,44,2,221,0,0,255,255,1,44,2,221,2,88,6,64,16,39,23,1,1,44,5,20,16,7,23,1,1,44,2,221,0,0,255,255,1,44, + 0,167,2,88,1,211,16,7,23,1,1,44,0,167,0,0,255,255,1,44,0,167,2,88,6,64,16,39,23,1,1,44,5,20,16,7,23,1,1,44, + 0,167,0,0,255,255,1,44,0,167,2,88,4,9,16,39,23,1,1,44,2,221,16,7,23,1,1,44,0,167,0,0,255,255,1,44,0,167,2,88, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,7,23,1,1,44,0,167,0,0,255,255,3,132,5,20,4,176,6,64,16,7, + 23,1,3,132,5,20,0,0,255,255,1,44,5,20,4,176,6,64,16,39,23,1,1,44,5,20,16,7,23,1,3,132,5,20,0,0,255,255,1,44, + 2,221,4,176,6,64,16,39,23,1,1,44,2,221,16,7,23,1,3,132,5,20,0,0,255,255,1,44,2,221,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,7,23,1,3,132,5,20,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,0,167,16,7, + 23,1,3,132,5,20,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,7,23,1,3,132, + 5,20,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,7,23,1,3,132,5,20,0,0, + 255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,7,23,1,3,132, + 5,20,0,0,255,255,3,132,2,221,4,176,4,9,16,7,23,1,3,132,2,221,0,0,255,255,1,44,2,221,4,176,6,64,16,39,23,1,1,44, + 5,20,16,7,23,1,3,132,2,221,0,0,255,255,1,44,2,221,4,176,4,9,16,39,23,1,1,44,2,221,16,7,23,1,3,132,2,221,0,0, + 255,255,1,44,2,221,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,7,23,1,3,132,2,221,0,0,255,255,1,44, + 0,167,4,176,4,9,16,39,23,1,1,44,0,167,16,7,23,1,3,132,2,221,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,0,167,16,7,23,1,3,132,2,221,0,0,255,255,1,44,0,167,4,176,4,9,16,39,23,1,1,44,2,221,16,39, + 23,1,1,44,0,167,16,7,23,1,3,132,2,221,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,1,44,0,167,16,7,23,1,3,132,2,221,0,0,255,255,3,132,2,221,4,176,6,64,16,39,23,1,3,132,5,20,16,7, + 23,1,3,132,2,221,0,0,255,255,1,44,2,221,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,5,20,16,7,23,1,3,132, + 2,221,0,0,255,255,1,44,2,221,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,7,23,1,3,132,2,221,0,0, + 255,255,1,44,2,221,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,7,23,1,3,132, + 2,221,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,7,23,1,3,132,2,221,0,0, + 255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,7,23,1,3,132, + 2,221,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,7, + 23,1,3,132,2,221,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,5,20,16,7,23,1,3,132,2,221,0,0,255,255,3,132,0,167,4,176,1,211,16,7,23,1,3,132,0,167,0,0, + 255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,4,9,16,39, + 23,1,1,44,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,1,211,16,39,23,1,1,44,0,167,16,7,23,1,3,132,0,167,0,0, + 255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,7,23,1,3,132,0,167,0,0,255,255,1,44, + 0,167,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,7,23,1,3,132,0,167,0,0,255,255,3,132, + 0,167,4,176,6,64,16,39,23,1,3,132,5,20,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,3,132,5,20,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,2,221,16,39, + 23,1,3,132,5,20,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,3,132,5,20,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,0,167,16,39, + 23,1,3,132,5,20,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,5,20,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,2,221,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,7,23,1,3,132,0,167,0,0,255,255,3,132, + 0,167,4,176,4,9,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,4,9,16,39,23,1,1,44,2,221,16,39, + 23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,4,9,16,39,23,1,1,44,0,167,16,39, + 23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,4,9,16,39,23,1,1,44,2,221,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,3,132, + 0,167,4,176,6,64,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44, + 0,167,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0, + 255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132, + 2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39, + 23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,0,167,4,176,6,64,16,39, + 23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0, + 255,255,1,44,0,167,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,0,167,0,0,255,255,1,44,254,112,2,88,255,156,16,7,23,1,1,44,254,112,0,0, + 255,255,1,44,254,112,2,88,6,64,16,39,23,1,1,44,5,20,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,2,88,4,9,16,39, + 23,1,1,44,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,2,88,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,2,88,1,211,16,39,23,1,1,44,0,167,16,7,23,1,1,44,254,112,0,0, + 255,255,1,44,254,112,2,88,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44, + 254,112,2,88,4,9,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,2,88, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,3,132,5,20,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,3,132,5,20,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39, + 23,1,3,132,5,20,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,3,132,5,20,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,0,167,16,39, + 23,1,3,132,5,20,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,5,20,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,7,23,1,1,44,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39, + 23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,0,167,16,39, + 23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132, + 2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39, + 23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39, + 23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 5,20,16,39,23,1,3,132,2,221,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,1,211,16,39,23,1,3,132,0,167,16,7, + 23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,0,167,16,7,23,1,1,44, + 254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44, + 254,112,0,0,255,255,1,44,254,112,4,176,1,211,16,39,23,1,1,44,0,167,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,0,167,16,7,23,1,1,44, + 254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,0,167,16,7, + 23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,3,132,5,20,16,39, + 23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132, + 5,20,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39, + 23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132, + 0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39, + 23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,7,23,1,1,44, + 254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44, + 254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7, + 23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132, + 2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,0,167,16,39, + 23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7, + 23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39, + 23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44, + 254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39, + 23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7, + 23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39, + 23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7, + 23,1,1,44,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,1,44,254,112,0,0,255,255,3,132, + 254,112,4,176,255,156,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,7,23,1,3,132, + 254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,1,211,16,39, + 23,1,1,44,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,7, + 23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44, + 0,167,16,7,23,1,3,132,254,112,0,0,255,255,3,132,254,112,4,176,6,64,16,39,23,1,3,132,5,20,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,5,20,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 5,20,16,7,23,1,3,132,254,112,0,0,255,255,3,132,254,112,4,176,4,9,16,39,23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 2,221,16,7,23,1,3,132,254,112,0,0,255,255,3,132,254,112,4,176,6,64,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7, + 23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,5,20,16,39,23,1,3,132, + 2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39, + 23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132, + 254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39, + 23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,7,23,1,3,132,254,112,0,0,255,255,3,132, + 254,112,4,176,1,211,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39, + 23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,1,211,16,39,23,1,1,44,0,167,16,39, + 23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,3,132, + 254,112,4,176,6,64,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132, + 0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39, + 23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39, + 23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 5,20,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,3,132,254,112,4,176,4,9,16,39,23,1,3,132,2,221,16,39, + 23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132, + 2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39, + 23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,39,23,1,3,132, + 0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39, + 23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132, + 254,112,0,0,255,255,3,132,254,112,4,176,6,64,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7, + 23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,5,20,16,39,23,1,3,132, + 2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39, + 23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132, + 0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39, + 23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132, + 254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39, + 23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132, + 0,167,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,255,156,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,1,211,16,39,23,1,1,44,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,1,44, + 254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,3,132,5,20,16,39,23,1,1,44,254,112,16,7, + 23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,5,20,16,39,23,1,1,44, + 254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39, + 23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,3,132,5,20,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,1,44,254,112,16,7,23,1,3,132, + 254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39, + 23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,2,221,16,39,23,1,1,44, + 254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,39, + 23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44, + 0,167,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39, + 23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,3,132,5,20,16,39, + 23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7, + 23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132, + 5,20,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132, + 2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 5,20,16,39,23,1,3,132,2,221,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,1,211,16,39, + 23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39, + 23,1,1,44,2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132, + 254,112,0,0,255,255,1,44,254,112,4,176,1,211,16,39,23,1,1,44,0,167,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7, + 23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,0,167,16,39,23,1,1,44, + 254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,39, + 23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132, + 5,20,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39, + 23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132, + 0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,0,167,16,39, + 23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,39,23,1,1,44, + 254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39, + 23,1,3,132,5,20,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176, + 6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132, + 0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,3,132,2,221,16,39, + 23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7, + 23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132, + 2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,39,23,1,3,132, + 0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,4,9,16,39,23,1,1,44,2,221,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39, + 23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132, + 0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39, + 23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0, + 255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,2,221,16,39,23,1,3,132,5,20,16,39,23,1,3,132, + 2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39, + 23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7, + 23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44,5,20,16,39,23,1,1,44,0,167,16,39,23,1,3,132, + 5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44, + 254,112,4,176,6,64,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39, + 23,1,3,132,0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,255,255,1,44,254,112,4,176,6,64,16,39,23,1,1,44, + 5,20,16,39,23,1,1,44,2,221,16,39,23,1,1,44,0,167,16,39,23,1,3,132,5,20,16,39,23,1,3,132,2,221,16,39,23,1,3,132, + 0,167,16,39,23,1,1,44,254,112,16,7,23,1,3,132,254,112,0,0,0,2,0,100,0,204,6,63,4,56,0,13,0,18,0,0,1,33,23,7, + 1,53,1,23,7,33,53,51,17,35,17,53,33,7,23,5,149,252,115,93,120,254,119,1,137,120,93,3,141,170,170,251,251,105,105,1,161,93,120,1, + 137,90,1,137,120,93,205,252,164,1,69,210,105,105,0,0,0,2,0,117,0,204,6,80,4,56,0,13,0,18,0,0,1,33,39,55,1,21,1,39, + 55,33,21,35,17,51,17,21,33,55,39,1,31,3,141,93,120,1,137,254,119,120,93,252,115,170,170,4,5,105,105,3,99,93,120,254,119,90,254,119, + 120,93,205,3,92,254,187,210,105,105,0,0,0,1,1,0,0,0,5,180,5,220,0,17,0,0,9,1,51,1,7,39,17,35,17,39,17,35,17,7, + 17,35,17,7,1,0,2,45,90,2,45,120,92,120,210,120,210,120,92,3,174,2,46,253,210,120,92,252,110,4,10,211,251,35,4,221,211,251,246,3, + 146,92,0,0,0,1,1,0,255,249,5,180,5,213,0,17,0,0,1,55,23,17,51,17,23,17,51,17,55,17,51,17,55,23,1,35,1,0,120,92, + 120,210,120,210,120,92,120,253,211,90,2,39,120,92,3,146,251,246,211,4,221,251,35,211,4,10,252,110,92,120,253,210,0,2,0,79,0,128,5,39, + 6,181,0,30,0,61,0,0,37,34,39,38,39,38,39,38,16,55,54,55,54,55,1,23,7,22,23,22,23,22,23,22,16,7,6,7,6,7,6,3, + 48,23,7,1,6,7,6,7,6,20,23,22,23,30,1,51,50,55,54,55,54,55,54,52,39,38,39,38,39,38,2,189,127,112,107,95,86,49,46,46, + 49,86,98,114,1,137,120,233,96,88,107,95,86,49,46,46,49,86,95,107,112,73,234,120,254,184,88,69,63,35,33,33,39,59,66,162,93,89,81,83, + 64,63,35,33,33,39,59,66,81,57,128,46,45,92,90,110,108,1,0,108,110,90,95,46,1,137,120,233,8,36,45,92,90,110,108,255,0,108,110,90, + 92,45,46,4,41,232,120,1,70,33,70,64,82,78,190,74,86,60,66,66,33,35,64,64,82,78,190,74,86,60,66,33,23,0,0,0,0,2,0,79, + 0,128,5,39,6,181,0,30,0,60,0,0,37,34,39,38,39,38,39,38,16,55,54,55,54,55,54,55,39,55,1,22,23,22,23,22,16,7,6,7, + 6,7,6,3,6,7,6,7,6,7,6,20,23,22,23,22,23,22,51,50,54,55,54,55,54,52,39,38,39,38,39,1,39,2,185,123,112,107,95,86, + 49,46,46,49,86,95,107,88,96,233,120,1,137,114,98,86,49,46,46,49,86,95,107,112,177,63,57,81,66,59,39,33,33,35,63,64,83,81,89,93, + 162,66,59,39,33,33,35,63,69,88,254,184,120,128,46,45,92,90,110,108,1,0,108,110,90,92,45,36,8,233,120,254,119,46,95,90,110,108,255,0, + 108,110,90,92,45,46,4,41,7,23,33,66,60,86,74,190,78,82,64,64,35,33,66,66,60,86,74,190,78,82,64,70,33,254,186,120,0,2,1,0, + 254,178,4,223,6,20,0,16,0,46,0,92,64,18,46,29,32,19,26,17,27,22,6,13,0,39,36,15,37,43,32,47,16,220,178,0,32,1,93,75, + 176,12,84,88,185,0,32,0,64,56,89,60,204,57,57,57,204,50,220,180,15,6,31,6,2,93,220,204,50,57,57,17,57,57,49,0,64,14,15,39, + 169,37,4,26,28,192,37,9,19,17,177,47,16,244,204,50,196,244,204,50,16,236,57,48,1,21,20,22,23,38,53,17,52,55,14,1,29,1,16,7, + 22,1,21,35,34,6,21,17,20,22,59,1,21,33,34,38,61,1,52,38,43,1,53,51,50,54,61,1,52,54,51,2,156,75,176,50,48,176,73,173, + 173,2,67,53,140,85,85,140,53,254,249,249,167,108,142,62,62,142,108,167,249,1,18,239,152,109,7,71,157,4,208,161,66,7,107,152,240,254,238,62, + 68,3,244,100,87,142,251,48,141,88,100,148,221,239,151,116,143,115,149,240,221,147,0,0,0,2,1,0,254,178,4,223,6,20,0,16,0,46,0,87, + 64,18,18,35,46,28,25,2,27,22,32,5,0,10,45,38,46,37,41,47,16,220,75,176,10,84,88,185,0,41,255,192,56,89,204,50,57,57,204,220, + 180,15,0,31,0,2,93,60,220,60,204,57,57,57,17,57,57,49,0,64,14,2,25,169,27,13,38,36,192,27,8,45,17,177,47,16,244,204,50,196, + 244,204,50,16,236,57,48,1,16,55,38,17,53,52,38,39,22,21,17,20,7,62,1,53,1,33,50,22,29,1,20,22,59,1,21,35,34,6,29,1, + 20,6,35,33,53,51,50,54,53,17,52,38,43,1,3,67,173,173,73,176,48,50,176,75,253,189,1,7,249,167,108,142,62,62,142,108,167,249,254,249, + 53,140,85,85,140,53,1,18,1,14,68,62,1,18,240,152,107,7,66,161,251,48,157,71,7,109,152,5,241,147,221,240,149,115,143,116,151,239,221,148, + 100,88,141,4,208,142,87,0,0,4,0,217,254,50,5,219,5,249,0,2,0,6,0,9,0,13,0,0,5,17,9,2,53,1,5,9,1,3,17,1, + 21,5,49,252,170,4,0,250,254,5,2,251,168,3,86,252,170,170,5,2,204,2,100,254,206,253,204,1,225,166,1,225,7,1,50,1,50,252,154,4, + 104,254,31,166,0,3,0,217,0,30,7,39,4,230,0,3,0,6,0,10,0,0,37,35,17,51,1,17,9,2,53,1,7,39,170,170,254,10,252,162, + 4,8,250,254,5,2,30,4,200,252,58,2,196,254,158,253,156,2,17,166,2,17,0,0,0,3,0,217,0,30,7,39,4,230,0,3,0,6,0,10, + 0,0,55,17,51,17,9,2,3,17,1,21,217,170,1,76,3,94,252,162,170,5,2,30,4,200,251,56,1,2,1,98,1,98,252,58,4,200,253,239, + 166,0,0,0,0,2,0,217,255,194,7,39,5,66,0,5,0,8,0,0,23,17,9,1,17,1,55,1,17,217,3,39,3,39,252,217,155,1,226,62, + 5,128,253,176,2,80,250,128,2,78,113,254,162,2,198,0,0,2,0,217,255,194,7,39,5,66,0,5,0,8,0,0,23,17,9,1,17,1,39,1, + 17,217,3,39,3,39,252,217,155,254,30,62,5,128,253,176,2,80,250,128,2,78,113,1,94,253,68,0,0,1,0,217,255,194,7,39,5,66,0,5, + 0,0,23,17,9,1,17,1,217,3,39,3,39,252,217,62,5,128,253,176,2,80,250,128,2,78,0,0,0,1,0,217,255,194,7,39,5,66,0,8, + 0,0,37,21,9,1,17,9,1,21,1,7,39,252,217,252,217,3,39,3,39,253,116,162,224,2,78,253,178,5,128,253,176,2,80,221,254,28,0,0, + 0,1,0,217,255,194,7,39,5,66,0,8,0,0,19,53,9,1,17,9,1,53,1,217,3,39,3,39,252,217,252,217,2,140,4,98,224,253,178,2, + 78,250,128,2,80,253,176,221,1,228,0,0,0,1,0,6,254,35,3,238,6,117,0,3,0,0,9,3,1,250,1,244,254,12,254,12,6,117,251,219, + 251,211,4,45,0,1,0,217,0,0,5,219,5,4,0,19,0,0,1,17,51,17,33,17,51,17,33,21,33,17,35,17,33,17,35,17,33,53,2,12, + 168,1,76,168,1,51,254,205,168,254,180,168,254,205,2,215,2,45,253,211,2,45,253,211,170,253,211,2,45,253,211,2,45,170,0,0,0,1,0,217, + 0,0,5,219,5,4,0,27,0,0,1,17,51,17,51,17,51,17,51,17,51,17,51,21,35,17,35,17,35,17,35,17,35,17,35,17,35,53,1,168, + 168,182,168,182,168,207,207,168,182,168,182,168,207,2,215,2,45,253,211,2,45,253,211,2,45,253,211,170,253,211,2,45,253,211,2,45,253,211,2,45, + 170,0,0,0,0,3,0,58,254,107,7,198,5,251,0,3,0,29,0,55,0,0,1,33,17,33,0,32,7,6,7,6,2,21,20,18,23,22,23,22, + 32,55,54,55,54,18,53,52,2,39,38,39,36,32,4,23,22,23,22,21,20,7,6,7,6,4,32,36,39,38,39,38,53,52,55,54,55,54,3,104, + 1,48,254,208,1,56,254,192,140,137,114,116,114,114,116,114,137,140,1,64,140,137,114,116,114,114,116,114,137,254,13,1,142,1,86,142,142,71,70,70, + 71,142,142,254,170,254,114,254,170,142,142,71,70,70,71,142,142,2,232,254,146,3,200,59,58,114,115,254,236,163,159,254,236,115,114,58,59,59,58,114, + 115,1,20,159,163,1,20,115,114,58,244,144,141,142,172,170,201,197,172,170,142,141,144,144,141,142,170,172,197,201,170,172,142,141,0,0,0,3,0,58, + 254,107,7,198,5,251,0,25,0,51,0,63,0,0,0,32,7,6,7,6,2,21,20,18,23,22,23,22,32,55,54,55,54,18,53,52,2,39,38,39, + 36,32,4,23,22,23,22,21,20,7,6,7,6,4,32,36,39,38,39,38,53,52,55,54,55,54,5,17,33,21,33,17,35,17,33,53,33,17,4,160, + 254,192,140,137,114,116,114,114,116,114,137,140,1,64,140,137,114,116,114,114,116,114,137,254,13,1,142,1,86,142,142,71,70,70,71,142,142,254,170,254, + 114,254,170,142,142,71,70,70,71,142,128,2,127,2,141,253,115,168,253,115,2,141,5,66,59,58,114,115,254,236,163,159,254,236,115,114,58,59,59,58, + 114,115,1,20,159,163,1,20,115,114,58,244,144,141,142,172,170,201,197,172,170,142,141,144,144,141,142,170,172,197,201,170,172,142,128,75,253,115,170,253, + 115,2,141,170,2,141,0,0,0,3,0,58,254,107,7,198,5,251,0,25,0,51,0,63,0,0,0,32,7,6,7,6,2,21,20,18,23,22,23,22, + 32,55,54,55,54,18,53,52,2,39,38,39,36,32,4,23,22,23,22,21,20,7,6,7,6,4,32,36,39,38,39,38,53,52,55,54,55,54,23,9, + 1,23,9,1,7,9,1,39,9,1,4,160,254,192,140,137,114,116,114,114,116,114,137,140,1,64,140,137,114,116,114,114,116,114,137,254,13,1,142,1, + 86,142,142,71,70,70,71,142,142,254,170,254,114,254,170,142,142,71,70,70,71,142,128,93,1,205,1,206,120,254,51,1,205,119,254,51,254,50,120,1, + 205,254,51,5,66,59,58,114,115,254,236,163,159,254,236,115,114,58,59,59,58,114,115,1,20,159,163,1,20,115,114,58,244,144,141,142,172,170,201,197, + 172,170,142,141,144,144,141,142,170,172,197,201,170,172,142,128,232,254,51,1,205,120,254,50,254,51,119,1,205,254,51,120,1,206,1,205,255,255,0,117, + 254,77,10,37,6,14,16,39,12,176,6,111,0,0,16,38,12,176,0,0,16,39,12,176,2,37,0,0,16,7,12,176,4,74,0,0,0,1,0,117, + 254,77,3,182,6,14,0,29,0,0,5,22,51,50,55,19,33,53,33,19,62,1,50,22,23,7,38,35,34,7,3,33,21,33,3,14,1,34,38,39, + 1,9,17,59,69,8,32,254,238,1,26,25,8,159,152,128,20,148,16,60,69,8,24,1,18,254,230,33,8,159,152,128,20,155,130,175,2,154,170,2, + 12,165,135,122,143,15,130,175,254,13,170,253,77,165,135,122,143,0,0,0,0,1,0,117,254,77,3,182,6,14,0,37,0,0,5,22,51,50,55,19, + 33,53,33,55,33,53,33,19,62,1,50,22,23,7,38,35,34,7,3,33,21,33,7,33,21,33,3,14,1,34,38,39,1,9,17,59,69,8,22,254, + 248,1,16,12,254,228,1,36,15,8,159,152,128,20,148,17,59,69,8,14,1,8,254,240,12,1,28,254,220,23,8,159,152,128,20,155,130,175,1,206, + 170,240,168,1,64,165,135,122,143,15,130,175,254,217,168,240,170,254,25,165,135,122,143,0,0,1,0,117,254,77,3,182,6,14,0,29,0,0,1,38, + 35,34,7,3,37,21,5,3,14,1,34,38,39,55,22,51,50,55,19,5,53,37,19,62,1,50,22,23,3,34,17,59,69,8,26,1,67,254,181,31, + 8,159,152,128,20,148,17,59,69,8,26,254,190,1,74,31,8,159,152,128,20,4,246,130,175,253,231,182,160,186,253,109,165,135,122,143,15,130,175,2, + 25,182,160,186,2,147,165,135,122,143,0,0,0,2,0,117,254,77,3,182,6,14,0,42,0,51,0,0,1,38,35,34,7,3,22,23,7,38,39,3, + 54,55,23,6,7,3,14,1,34,38,39,55,22,51,50,55,19,38,39,38,53,52,55,54,55,19,62,1,50,22,23,1,19,6,7,6,21,20,23,22, + 3,34,17,59,69,8,14,153,73,113,40,80,22,32,21,62,54,68,15,8,159,152,128,20,148,17,59,69,8,15,93,73,110,111,83,117,15,8,159,152, + 128,20,254,1,22,61,44,72,75,37,4,246,130,175,254,214,41,136,65,72,33,254,43,6,17,112,36,9,254,190,165,135,122,143,15,130,175,1,49,24, + 73,111,155,156,115,86,19,1,60,164,136,122,143,252,69,1,214,17,46,74,103,104,72,36,0,1,0,117,254,77,4,45,6,14,0,50,0,0,1,38, + 35,34,7,3,54,55,54,61,1,7,39,55,51,23,7,39,21,20,7,6,7,3,14,1,34,38,39,55,22,51,50,55,19,38,39,38,53,51,20,23, + 22,23,19,62,1,50,23,22,23,3,34,17,59,69,8,43,64,47,86,93,72,189,54,188,72,92,110,85,109,17,8,160,151,128,20,148,17,59,68,9, + 16,91,62,119,102,80,51,44,44,8,160,151,73,54,21,4,246,130,175,252,120,16,47,85,114,30,93,72,189,189,72,93,30,156,108,86,17,254,161,165, + 135,122,143,15,130,175,1,77,25,62,119,154,114,78,51,11,3,153,165,135,70,52,143,0,0,2,0,117,254,77,3,182,6,14,0,3,0,33,0,0, + 1,51,21,35,3,19,33,17,33,19,62,1,50,22,23,7,38,35,34,7,3,33,17,33,3,14,1,34,38,39,55,22,51,50,1,178,211,211,16,17, + 1,119,254,165,20,8,162,151,126,20,148,17,57,70,9,14,1,57,254,161,13,8,169,145,125,20,148,17,57,71,2,166,254,253,234,1,114,2,48,1, + 174,167,133,125,140,15,130,175,254,245,252,188,254,255,173,127,125,140,15,130,0,2,0,117,254,77,3,182,6,14,0,3,0,43,0,0,1,51,21,35, + 19,6,7,19,62,1,50,22,23,7,38,35,34,7,3,22,23,22,16,7,6,7,3,14,1,34,38,39,55,22,51,50,55,19,22,51,50,54,52,38, + 1,178,211,211,99,41,31,22,8,162,151,126,20,148,17,57,71,8,14,99,66,110,110,86,115,15,8,162,151,126,20,148,17,57,70,9,22,40,54,111, + 135,148,2,166,254,1,126,2,5,1,195,167,133,124,141,15,130,175,254,214,24,75,124,254,210,111,85,19,254,190,167,133,125,140,15,130,175,1,182,16, + 147,216,127,0,0,2,0,117,254,77,4,112,6,14,0,3,0,46,0,0,1,51,21,35,1,22,51,50,55,19,22,23,22,50,54,52,38,35,34,7, + 19,62,1,50,22,23,7,38,35,34,7,3,54,51,50,22,16,6,35,34,39,3,14,1,34,38,39,2,143,211,211,254,122,17,59,69,8,27,45,56, + 112,198,150,138,113,213,83,24,6,162,151,128,20,148,17,59,69,8,15,59,68,169,206,220,155,87,73,17,8,160,151,128,20,2,174,254,253,181,130,175, + 2,51,62,28,54,145,209,143,161,2,93,164,136,122,143,15,130,175,254,203,19,233,254,210,219,33,254,163,165,135,122,143,0,3,0,117,254,77,3,182, + 6,14,0,3,0,11,0,49,0,0,1,51,21,35,22,54,52,38,34,6,20,22,3,22,51,50,55,19,38,39,38,16,55,54,55,19,62,1,50,22, + 23,7,38,35,34,7,3,22,23,22,16,7,6,7,3,14,1,34,38,39,1,173,211,211,203,148,138,214,144,143,162,17,59,69,8,15,93,73,110,111, + 83,117,15,8,159,152,128,20,148,17,59,69,8,14,99,66,110,110,86,115,15,8,159,152,128,20,2,176,254,122,144,209,143,145,207,144,254,45,130,175, + 1,49,24,73,111,1,55,115,86,19,1,60,164,136,122,143,15,130,175,254,214,24,75,124,254,210,111,85,19,254,190,165,135,122,143,0,0,3,0,117, + 254,77,3,182,6,14,0,29,0,33,0,37,0,0,55,17,33,19,62,1,50,22,23,7,38,35,34,7,3,33,17,33,3,14,1,34,38,39,55,22, + 51,50,55,27,1,3,51,17,33,35,17,51,152,1,59,16,8,162,151,126,20,148,17,57,71,8,15,1,24,254,196,14,8,169,143,127,20,148,17,57, + 71,8,13,197,24,172,254,197,171,147,155,2,254,1,73,167,133,125,140,15,130,175,254,208,253,2,254,222,173,127,123,142,15,130,175,1,9,2,116,254, + 22,1,234,254,22,0,0,0,0,1,255,190,254,77,4,109,6,14,0,45,0,0,1,38,35,34,7,3,33,50,22,20,6,35,53,54,55,38,39,33, + 3,14,1,34,38,39,55,22,51,50,55,19,33,23,7,1,53,1,23,7,33,19,62,1,50,23,22,23,3,34,17,59,69,8,25,1,14,100,139,144, + 95,96,8,8,96,254,235,33,8,159,152,128,20,148,17,59,68,9,32,254,220,187,96,254,197,1,59,96,187,1,42,27,8,159,152,73,54,21,4,246, + 130,175,253,239,143,198,140,136,4,101,98,6,253,73,165,135,122,143,15,130,175,2,158,186,96,1,58,72,1,58,96,186,2,42,165,135,70,52,143,0, + 0,1,0,117,254,77,3,182,6,14,0,35,0,0,1,38,35,34,7,3,55,23,7,23,7,39,3,14,1,34,38,39,55,22,51,50,55,19,7,39, + 55,39,55,23,19,62,1,50,22,23,3,34,17,59,69,8,20,157,120,252,252,120,177,25,8,159,152,128,20,148,17,59,69,8,23,159,122,254,252,120, + 178,23,8,159,152,128,20,4,246,130,175,254,88,157,121,252,252,120,176,253,244,165,135,122,143,15,130,175,1,226,160,121,252,252,120,179,1,216,165,135, + 122,143,0,0,0,1,0,117,254,77,3,182,6,14,0,42,0,0,5,22,51,50,55,19,6,7,6,21,17,35,17,52,54,55,19,62,1,50,22,23, + 7,38,35,34,7,3,22,23,22,21,17,35,17,52,39,3,14,1,34,38,39,1,9,17,59,69,8,45,65,32,52,121,155,121,14,8,159,152,128,20, + 148,17,59,69,8,13,90,62,86,121,124,45,8,159,152,128,20,155,130,175,3,166,16,50,80,156,254,200,1,73,207,188,17,1,43,165,135,122,143,15, + 130,175,254,230,24,69,97,214,254,183,1,56,243,50,252,74,165,135,122,143,0,1,0,117,254,77,3,182,6,14,0,39,0,0,1,38,35,34,7,3, + 54,25,1,51,17,16,5,3,14,1,34,38,39,55,22,51,50,55,19,38,39,38,53,17,51,17,20,23,19,62,1,50,22,23,3,34,17,59,69,8, + 42,146,121,254,239,17,8,159,152,128,20,148,17,59,69,8,16,92,63,86,121,126,43,8,159,152,128,20,4,246,130,175,252,141,38,1,7,1,56,254, + 183,254,140,39,254,162,165,135,122,143,15,130,175,1,76,23,70,97,214,1,73,254,200,245,49,3,133,165,135,122,143,0,0,2,0,117,254,77,3,192, + 6,249,0,23,0,27,0,0,1,62,1,51,50,22,23,7,38,35,34,7,3,14,1,35,34,38,39,55,22,51,50,55,1,21,33,53,1,227,8,162, + 75,76,126,20,148,17,57,71,8,65,8,162,76,75,126,20,148,17,57,71,8,2,30,252,239,4,226,167,133,125,140,15,130,175,250,176,167,133,125,140, + 15,130,175,7,103,160,160,0,0,2,0,107,253,98,3,182,6,14,0,23,0,27,0,0,1,62,1,51,50,22,23,7,38,35,34,7,3,14,1,35, + 34,38,39,55,22,51,50,55,1,53,33,21,1,227,8,162,75,76,126,20,148,17,57,71,8,65,8,162,76,75,126,20,148,17,57,71,8,254,201,3, + 17,4,226,167,133,125,140,15,130,175,250,176,167,133,125,140,15,130,175,253,208,160,160,0,255,255,1,25,0,63,5,156,4,197,16,6,0,153,0,0, + 255,255,0,217,1,211,5,219,4,106,16,38,12,193,0,0,16,7,13,74,2,20,1,36,255,255,0,217,0,159,5,219,4,106,16,38,12,193,0,0, + 16,39,13,74,0,231,254,87,16,7,13,74,3,64,1,36,0,2,0,217,255,4,5,219,4,166,0,3,0,10,0,0,5,21,1,53,9,2,21,1, + 53,1,5,219,250,254,5,2,251,248,4,8,250,254,5,2,70,182,1,209,182,2,101,254,145,254,147,182,1,209,166,1,209,0,0,0,0,2,0,217, + 255,4,5,219,4,166,0,3,0,10,0,0,23,1,21,1,17,53,1,21,1,53,1,217,5,2,250,254,5,2,250,254,4,8,70,1,209,182,254,47, + 4,236,182,254,47,166,254,47,182,1,109,0,255,255,0,217,255,4,5,221,4,166,16,39,13,74,4,47,255,187,16,6,17,126,0,0,255,255,0,217, + 255,4,5,219,4,166,16,38,13,74,254,187,16,6,17,127,0,0,0,0,255,255,0,217,255,4,5,219,5,39,16,39,13,74,1,15,1,225,16,6, + 17,126,0,0,255,255,0,217,255,4,5,219,5,39,16,39,13,74,3,29,1,225,16,6,17,127,0,0,255,255,0,217,255,4,5,221,6,18,16,39, + 13,74,4,47,2,204,16,6,17,126,0,0,255,255,0,217,255,4,5,219,6,13,16,39,13,74,255,254,2,199,16,6,17,127,0,0,0,3,0,217, + 254,241,5,220,5,78,0,28,0,58,0,65,0,0,37,21,14,1,35,34,39,38,39,38,39,38,35,34,6,7,53,62,1,51,50,23,30,1,23,22, + 51,50,54,19,21,14,1,35,34,39,38,39,38,39,38,35,34,6,7,53,62,1,51,50,23,22,23,22,23,22,51,50,54,19,9,1,21,1,53,1, + 5,220,106,178,98,110,146,10,6,6,16,154,94,88,172,98,104,180,96,110,148,10,12,14,156,94,86,168,104,106,178,98,110,146,10,6,6,16,154,94, + 88,172,98,104,180,96,110,148,10,4,8,14,156,94,86,168,103,252,64,3,192,250,254,5,2,80,179,78,69,59,4,3,2,6,61,76,84,179,78,69, + 59,5,4,6,61,75,1,155,178,80,68,58,4,4,2,6,60,76,82,178,78,68,58,4,2,4,6,60,74,3,94,254,235,254,238,178,1,112,170,1, + 111,0,0,0,0,3,0,217,254,241,5,220,5,78,0,28,0,58,0,65,0,0,37,21,14,1,35,34,39,38,39,38,39,38,35,34,6,7,53,62, + 1,51,50,23,30,1,23,22,51,50,54,19,21,14,1,35,34,39,38,39,38,39,38,35,34,6,7,53,62,1,51,50,23,22,23,22,23,22,51,50, + 54,1,53,1,21,1,53,1,5,220,106,178,98,110,146,10,6,6,16,154,94,88,172,98,104,180,96,110,148,10,12,14,156,94,86,168,104,106,178,98, + 110,146,10,6,6,16,154,94,88,172,98,104,180,96,110,148,10,4,8,14,156,94,86,168,251,101,5,2,250,254,3,192,80,179,78,69,59,4,3,2, + 6,61,76,84,179,78,69,59,5,4,6,61,75,1,155,178,80,68,58,4,4,2,6,60,76,82,178,78,68,58,4,2,4,6,60,74,3,94,176,254, + 145,170,254,144,178,1,18,0,0,2,0,217,255,8,5,219,4,168,0,11,0,18,0,0,1,23,7,33,21,33,7,39,55,33,53,33,9,2,21,1, + 53,1,3,172,150,90,1,243,253,178,133,150,90,254,13,2,78,2,180,252,64,3,192,250,254,5,2,1,162,80,168,170,248,80,168,170,3,78,254,235, + 254,238,178,1,112,170,1,111,0,2,0,217,255,8,5,219,4,168,0,11,0,18,0,0,1,23,7,33,21,33,7,39,55,33,53,33,1,53,1,21, + 1,53,1,3,172,150,90,1,243,253,178,133,150,90,254,13,2,78,253,178,5,2,250,254,3,192,1,162,80,168,170,248,80,168,170,3,78,176,254,145, + 170,254,144,178,1,18,0,0,0,2,0,217,254,95,5,220,5,78,0,54,0,61,0,0,1,21,14,1,35,34,39,7,22,51,50,54,55,21,14,1, + 35,34,47,1,7,39,55,38,35,34,6,7,53,62,1,51,50,23,55,38,35,34,6,7,53,54,55,54,23,22,31,1,55,23,7,22,51,50,54,19, + 9,1,21,1,53,1,5,220,106,178,98,68,83,52,140,87,86,168,104,106,178,98,109,147,8,92,164,89,64,47,88,172,98,104,180,96,69,83,51,139, + 86,88,172,98,104,90,109,77,146,112,7,91,164,89,64,49,86,168,103,252,64,3,192,250,254,5,2,1,150,178,80,68,23,131,52,75,85,179,78,69, + 59,3,233,64,226,16,76,84,179,78,69,23,130,52,76,82,178,78,34,42,8,14,44,3,233,64,227,15,74,3,94,254,235,254,238,178,1,112,170,1, + 111,0,0,0,0,2,0,217,254,95,5,220,5,78,0,53,0,60,0,0,1,21,14,1,35,34,39,7,22,51,50,54,55,21,14,1,35,34,47,1, + 7,39,55,38,35,34,6,7,53,62,1,51,50,23,55,38,35,34,6,7,53,62,1,51,50,31,1,55,23,7,22,51,50,54,1,53,1,21,1,53, + 1,5,220,106,178,98,68,83,52,140,87,86,168,104,106,178,98,109,147,8,92,164,89,64,47,88,172,98,104,180,96,69,83,51,139,86,88,172,98,104, + 180,96,110,148,7,91,164,89,64,49,86,168,251,101,5,2,250,254,3,192,1,150,178,80,68,23,131,52,75,85,179,78,69,59,3,233,64,226,16,76, + 84,179,78,69,23,130,52,76,82,178,78,68,58,3,233,64,227,15,74,3,94,176,254,145,170,254,144,178,1,18,0,0,0,4,0,217,253,132,5,219, + 6,84,0,6,0,10,0,17,0,21,0,0,1,21,1,53,1,21,5,1,33,53,33,1,45,1,53,1,21,9,1,33,53,33,5,219,250,254,5,2, + 252,139,3,117,250,254,5,2,250,254,3,117,252,139,5,2,250,254,5,2,250,254,5,2,3,251,176,1,47,170,1,48,178,210,253,92,170,251,94,213, + 210,178,254,208,170,254,209,3,126,170,0,0,0,4,0,217,253,132,5,219,6,84,0,6,0,10,0,17,0,21,0,0,19,45,1,53,1,21,1,17, + 53,33,21,17,21,1,53,1,21,5,1,53,33,21,217,3,117,252,139,5,2,250,254,5,2,250,254,5,2,252,139,254,115,5,2,3,251,213,210,178, + 254,208,170,254,209,254,225,170,170,252,8,176,1,47,170,1,48,178,210,1,249,170,170,0,0,3,0,217,255,2,5,220,5,78,0,26,0,30,0,37, + 0,0,1,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1,51,50,31,2,22,51,50,54,1,33,21,33,9,2,21,1,53,1,5,220, + 106,179,97,110,146,16,6,16,154,94,88,172,98,104,180,96,110,148,14,22,156,94,86,168,251,102,5,2,250,254,5,1,252,64,3,192,250,254,5,2, + 1,150,178,80,68,58,8,2,6,60,75,83,178,78,68,58,6,10,60,74,254,108,170,5,156,254,235,254,238,178,1,112,170,1,111,0,0,3,0,217, + 255,2,5,220,5,78,0,26,0,30,0,37,0,0,1,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1,51,50,31,2,22,51,50,54, + 1,33,21,33,3,53,1,21,1,53,1,5,220,106,179,97,110,146,16,6,16,154,94,88,172,98,104,180,96,110,148,14,22,156,94,86,168,251,102,5, + 2,250,254,1,5,2,250,254,3,192,1,150,178,80,68,58,8,2,6,60,75,83,178,78,68,58,6,10,60,74,254,108,170,5,156,176,254,145,170,254, + 144,178,1,18,0,3,0,217,254,18,5,219,6,12,0,26,0,33,0,40,0,0,1,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1, + 51,50,31,2,22,51,50,54,19,21,1,53,1,21,5,1,45,1,53,1,21,1,5,219,105,179,97,110,146,17,6,15,155,94,88,172,98,105,179,97, + 110,147,15,22,155,94,86,169,103,250,254,5,2,252,139,254,115,3,117,252,139,5,2,250,254,2,190,178,79,69,59,7,2,6,61,76,83,178,78,69, + 59,6,9,61,75,1,74,176,1,47,170,1,48,178,210,250,58,213,210,178,254,208,170,254,209,0,0,0,0,3,0,217,254,18,5,219,6,12,0,26, + 0,33,0,40,0,0,1,21,14,1,35,34,47,1,38,39,38,35,34,6,7,53,62,1,51,50,31,2,22,51,50,54,1,45,1,53,1,21,9,1, + 21,1,53,1,21,5,5,219,105,179,97,110,146,17,6,15,155,94,88,172,98,105,179,97,110,147,15,22,155,94,86,169,251,101,3,117,252,139,5,2, + 250,254,5,2,250,254,5,2,252,139,2,190,178,79,69,59,7,2,6,61,76,83,178,78,69,59,6,9,61,75,1,74,213,210,178,254,208,170,254,209, + 251,191,176,1,47,170,1,48,178,210,0,0,0,4,0,217,254,44,5,219,5,215,0,6,0,10,0,17,0,21,0,0,19,45,1,53,1,21,1,17, + 53,33,21,17,21,1,53,1,21,5,1,53,33,21,217,3,117,252,139,5,2,250,254,5,2,250,254,5,2,252,139,254,115,5,2,1,37,213,210,178, + 254,208,170,254,209,254,225,170,170,4,40,176,1,47,170,1,48,178,210,249,217,170,170,0,0,4,0,217,254,44,5,219,5,215,0,6,0,10,0,17, + 0,21,0,0,1,21,1,53,1,21,5,1,33,53,33,1,45,1,53,1,21,9,1,33,53,33,5,219,250,254,5,2,252,139,3,117,250,254,5,2, + 250,254,3,117,252,139,5,2,250,254,5,2,250,254,5,2,1,37,176,1,47,170,1,48,178,210,253,92,170,3,126,213,210,178,254,208,170,254,209,251, + 94,170,0,0,0,4,0,217,254,54,5,219,5,238,0,6,0,10,0,17,0,21,0,0,1,21,1,53,1,21,5,9,1,53,9,1,45,1,53,1, + 21,1,17,53,1,21,5,219,250,254,5,2,252,139,3,117,250,254,5,2,250,254,3,117,252,139,5,2,250,254,5,2,3,149,176,1,47,170,1,48, + 178,210,253,86,1,47,176,254,209,253,166,213,210,178,254,208,170,254,209,254,208,176,1,47,176,0,0,0,0,4,0,217,254,54,5,219,5,238,0,6, + 0,10,0,17,0,21,0,0,19,45,1,53,1,21,1,17,53,1,21,17,21,1,53,1,21,5,9,1,53,1,217,3,117,252,139,5,2,250,254,5, + 2,250,254,5,2,252,139,3,117,250,254,5,2,3,149,213,210,178,254,208,170,254,209,254,219,176,1,47,176,253,39,176,1,47,170,1,48,178,210,253, + 75,1,47,176,254,209,0,0,0,2,0,217,255,132,5,219,5,38,0,3,0,10,0,0,9,1,53,1,17,21,1,53,1,21,1,5,219,250,254,5, + 2,250,254,5,2,251,248,4,112,254,47,182,1,209,251,20,182,1,209,166,1,209,182,254,147,0,0,0,0,2,0,217,255,132,5,219,5,38,0,3, + 0,10,0,0,19,53,1,21,9,2,53,1,21,1,217,5,2,250,254,4,8,251,248,5,2,250,254,4,112,182,254,47,182,253,155,1,111,1,109,182, + 254,47,166,254,47,0,0,0,255,255,0,217,255,132,5,221,5,38,16,39,13,74,4,47,254,238,16,6,17,150,0,0,255,255,0,217,255,132,5,219, + 5,38,16,39,13,74,255,254,254,228,16,6,17,151,0,0,0,3,0,218,255,182,5,220,5,123,0,3,0,10,0,14,0,0,19,53,33,21,17,21, + 1,53,1,21,9,1,53,33,21,218,5,2,250,254,5,2,252,64,254,190,5,2,4,209,170,170,251,149,176,1,111,170,1,112,178,254,238,2,57,170, + 170,0,0,0,0,3,0,218,255,182,5,220,5,123,0,3,0,10,0,14,0,0,1,33,53,33,9,2,53,1,21,9,1,33,53,33,5,220,250,254, + 5,2,250,254,3,192,252,64,5,2,250,254,5,2,250,254,5,2,4,209,170,250,235,1,21,1,18,178,254,144,170,254,145,3,254,170,0,3,0,217, + 255,192,5,219,5,205,0,3,0,7,0,14,0,0,19,53,1,21,1,53,1,21,17,21,1,53,1,21,1,217,5,2,250,254,5,2,250,254,5,2, + 252,64,3,171,178,1,112,178,253,78,178,1,112,178,252,151,176,1,111,170,1,112,178,254,238,0,0,0,0,3,0,217,255,192,5,219,5,205,0,3, + 0,7,0,14,0,0,9,1,53,1,17,1,53,9,3,53,1,21,1,5,219,250,254,5,2,250,254,5,2,250,254,3,192,252,64,5,2,250,254,3, + 171,1,112,178,254,144,254,12,1,112,178,254,144,253,85,1,21,1,18,178,254,144,170,254,145,0,0,0,0,2,0,217,0,17,5,220,5,40,0,27, + 0,34,0,0,1,46,1,35,34,7,14,1,7,6,35,34,38,39,53,30,1,51,50,55,62,1,55,54,51,50,22,23,3,21,1,53,1,21,1,5, + 220,104,168,86,94,156,14,12,10,148,110,96,180,104,98,172,88,94,154,16,12,10,146,110,98,178,106,1,250,254,5,2,252,64,3,202,84,76,62,6, + 4,4,60,70,78,178,84,76,62,6,4,4,60,70,78,252,69,176,1,111,170,1,112,178,254,238,0,0,0,2,0,217,0,48,5,220,5,40,0,27, + 0,34,0,0,1,46,1,35,34,7,14,1,7,6,35,34,38,39,53,30,1,51,50,55,62,1,55,54,51,50,22,23,9,2,53,1,21,1,5,220, + 104,168,86,94,156,14,12,10,148,110,96,180,104,98,172,88,94,154,16,12,10,146,110,98,178,106,250,253,3,193,252,63,5,2,250,254,3,202,84,76, + 62,6,4,4,60,70,78,178,84,76,62,6,4,4,60,70,78,252,100,1,21,1,18,178,254,144,170,254,145,0,0,0,0,4,0,217,254,152,5,220, + 5,212,0,3,0,7,0,36,0,43,0,0,23,53,33,21,1,53,33,21,19,46,1,35,34,7,14,1,7,6,35,34,38,39,53,30,1,51,50,55, + 54,55,54,55,54,51,50,22,23,3,21,1,53,1,21,1,217,5,2,250,254,5,2,1,104,168,86,94,156,14,12,10,148,110,96,180,104,98,172,88, + 94,154,16,6,6,10,146,110,98,178,106,1,250,254,5,2,252,64,62,170,170,254,214,170,170,5,220,86,74,60,6,4,6,58,68,78,180,84,76,60, + 6,2,4,4,58,68,78,252,68,176,1,111,170,1,112,178,254,238,0,0,0,4,0,217,254,152,5,220,5,212,0,3,0,7,0,36,0,43,0,0, + 23,53,33,21,1,53,33,21,19,46,1,35,34,7,14,1,7,6,35,34,38,39,53,30,1,51,50,55,54,55,54,55,54,51,50,22,23,9,2,53, + 1,21,1,217,5,2,250,254,5,2,1,104,168,86,94,156,14,12,10,148,110,96,180,104,98,172,88,94,154,16,6,6,10,146,110,98,178,106,250,253, + 3,192,252,64,5,2,250,254,62,170,170,254,214,170,170,5,220,86,74,60,6,4,6,58,68,78,180,84,76,60,6,2,4,4,58,68,78,252,68,1, + 21,1,18,178,254,144,170,254,145,0,0,0,0,3,0,217,0,102,5,219,4,206,0,3,0,32,0,36,0,0,19,33,21,33,1,6,7,6,7,6, + 7,33,53,33,54,55,54,55,54,50,23,22,23,22,23,33,21,33,38,39,38,39,38,1,33,21,33,217,5,2,250,254,2,130,67,46,56,30,27,4, + 254,100,1,10,12,30,54,87,89,206,89,86,55,28,14,1,10,254,101,4,27,30,56,45,253,59,5,2,250,254,2,90,170,2,123,4,30,43,68,68, + 92,168,57,51,91,50,51,51,50,91,48,60,168,91,69,67,44,30,252,233,170,0,0,0,0,2,0,217,255,207,5,219,5,87,0,3,0,14,0,0, + 55,33,21,33,1,0,5,4,1,21,0,37,53,36,1,217,5,2,250,254,5,2,254,129,254,36,1,220,1,127,254,129,252,125,3,131,1,127,121,170, + 4,177,254,229,93,93,254,229,215,1,120,132,166,124,1,128,0,2,0,217,255,207,5,219,5,87,0,3,0,15,0,0,37,21,33,53,17,53,0,5, + 48,21,4,1,53,0,37,36,5,219,250,254,1,127,3,131,252,125,254,129,1,127,1,220,254,36,121,170,170,4,7,215,254,128,124,166,132,254,136,215, + 1,27,93,93,0,2,0,217,254,215,5,219,5,87,0,11,0,22,0,0,1,23,7,33,21,33,7,39,55,33,53,33,1,0,5,4,1,21,0,37, + 53,36,1,3,172,150,90,1,243,253,178,133,150,90,254,13,2,78,2,180,254,129,254,36,1,220,1,127,254,129,252,125,3,131,1,127,1,113,80,168, + 170,248,80,168,170,4,7,254,229,93,93,254,229,215,1,120,132,166,124,1,128,0,0,0,0,2,0,217,254,215,5,219,5,87,0,11,0,22,0,0, + 1,23,7,33,21,33,7,39,55,33,53,33,1,53,0,5,21,4,1,53,0,37,36,3,172,150,90,1,243,253,178,133,150,90,254,13,2,78,253,178, + 1,127,3,131,252,125,254,129,1,127,1,220,254,36,1,113,80,168,170,248,80,168,170,4,7,215,254,128,124,166,132,254,136,215,1,27,93,93,0,0, + 0,3,0,217,255,9,5,219,5,75,0,3,0,7,0,18,0,0,55,53,33,21,1,53,33,21,17,0,5,4,5,21,0,37,53,36,1,217,5,2, + 250,254,5,2,254,205,253,216,2,33,1,58,254,163,252,91,3,165,1,93,51,170,170,254,214,170,170,5,107,254,229,45,81,247,215,1,116,88,166,86, + 1,118,0,0,0,3,0,217,255,9,5,219,5,75,0,3,0,7,0,18,0,0,55,53,33,21,1,53,33,21,1,53,0,5,21,4,1,53,36,37, + 36,217,5,2,250,254,5,2,250,254,1,93,3,165,252,91,254,163,1,58,2,33,253,216,51,170,170,254,214,170,170,5,107,215,254,138,86,166,88,254, + 140,215,247,81,45,0,0,0,0,2,0,217,254,113,5,219,5,75,0,19,0,30,0,0,5,33,53,33,55,33,53,33,55,23,7,33,21,33,7,33, + 21,33,7,39,1,0,5,4,5,21,0,37,53,36,1,2,38,254,179,1,218,96,253,198,2,200,137,138,41,1,80,254,34,95,2,61,253,54,138,138, + 3,222,254,205,253,216,2,33,1,58,254,163,252,91,3,165,1,93,234,170,115,170,164,115,49,170,115,170,165,116,5,143,254,229,45,81,247,215,1,116, + 88,166,86,1,118,0,0,0,0,2,0,217,254,113,5,219,5,75,0,19,0,30,0,0,5,33,53,33,55,33,53,33,55,23,7,33,21,33,7,33, + 21,33,7,39,1,53,0,5,21,4,1,53,36,37,36,2,38,254,179,1,218,96,253,198,2,200,137,138,41,1,80,254,34,95,2,61,253,54,138,138, + 254,220,1,93,3,165,252,91,254,163,1,58,2,33,253,216,234,170,115,170,164,115,49,170,115,170,165,116,5,143,215,254,138,86,166,88,254,140,215,247, + 81,45,0,0,0,3,0,217,254,121,5,219,5,139,0,29,0,58,0,69,0,0,5,21,14,1,35,34,39,38,39,38,39,38,35,34,6,7,53,62, + 1,55,54,23,22,23,22,23,22,51,50,54,19,21,14,1,35,34,39,38,39,38,39,38,35,34,6,7,53,62,1,51,50,23,22,23,22,23,22,62, + 1,19,0,5,4,5,21,0,37,53,36,1,5,219,105,179,97,110,146,10,7,6,15,155,94,88,172,98,105,178,98,96,161,11,5,6,15,155,94,86, + 169,103,105,179,97,110,146,10,7,6,15,155,94,88,172,98,105,179,97,110,147,10,5,7,15,170,158,176,103,254,205,253,216,2,33,1,58,254,163,252, + 91,3,165,1,93,40,179,78,69,59,4,3,2,6,61,76,84,179,78,57,12,6,65,5,2,2,6,61,75,1,154,178,79,69,59,4,3,2,6,61, + 76,83,178,78,69,59,4,2,3,6,67,12,69,3,236,254,229,45,81,247,215,1,116,88,166,86,1,118,0,3,0,217,254,121,5,219,5,139,0,29, + 0,58,0,69,0,0,5,21,14,1,35,34,39,38,39,38,39,38,35,34,6,7,53,62,1,55,54,23,22,23,22,23,22,51,50,54,19,21,14,1, + 35,34,39,38,39,38,39,38,35,34,6,7,53,62,1,51,50,23,22,23,22,23,22,62,1,1,53,0,5,21,4,1,53,36,37,36,5,219,105,179, + 97,110,146,10,7,6,15,155,94,88,172,98,105,178,98,96,161,11,5,6,15,155,94,86,169,103,105,179,97,110,146,10,7,6,15,155,94,88,172,98, + 105,179,97,110,147,10,5,7,15,170,158,176,251,101,1,93,3,165,252,91,254,163,1,58,2,33,253,216,40,179,78,69,59,4,3,2,6,61,76,84, + 179,78,57,12,6,65,5,2,2,6,61,75,1,154,178,79,69,59,4,3,2,6,61,76,83,178,78,69,59,4,2,3,6,67,12,69,3,236,215,254, + 138,86,166,88,254,140,215,247,81,45,0,0,0,2,0,217,253,237,5,220,5,139,0,54,0,65,0,0,1,21,14,1,35,34,39,7,22,51,50,54, + 55,21,14,1,35,34,47,1,7,39,55,38,35,34,6,7,53,62,1,51,50,23,55,38,35,34,6,7,53,54,55,54,23,22,31,1,55,23,7,22, + 51,50,54,19,0,5,4,5,21,0,37,53,36,1,5,220,106,178,98,68,83,52,140,87,86,168,104,106,178,98,109,147,8,92,164,89,64,47,88,172, + 98,104,180,96,69,83,51,139,86,88,172,98,104,90,109,77,146,112,7,91,164,89,64,49,86,168,103,254,205,253,216,2,33,1,58,254,163,252,91,3, + 165,1,93,1,36,178,80,68,23,131,52,75,85,179,78,69,59,3,233,64,226,16,76,84,179,78,69,23,130,52,76,82,178,78,34,42,8,14,44,3, + 233,64,227,15,74,3,230,254,229,45,81,247,215,1,116,88,166,86,1,118,0,2,0,217,253,237,5,220,5,139,0,54,0,65,0,0,1,21,14,1, + 35,34,39,7,22,51,50,54,55,21,14,1,35,34,47,1,7,39,55,38,35,34,6,7,53,62,1,51,50,23,55,38,35,34,6,7,53,54,55,54, + 23,22,31,1,55,23,7,22,51,50,54,1,53,0,5,21,4,1,53,36,37,36,5,220,106,178,98,68,83,52,140,87,86,168,104,106,178,98,109,147, + 8,92,164,89,64,47,88,172,98,104,180,96,69,83,51,139,86,88,172,98,104,90,109,77,146,112,7,91,164,89,64,49,86,168,251,101,1,93,3,165, + 252,91,254,163,1,58,2,33,253,216,1,36,178,80,68,23,131,52,75,85,179,78,69,59,3,233,64,226,16,76,84,179,78,69,23,130,52,76,82,178, + 78,34,42,8,14,44,3,233,64,227,15,74,3,230,215,254,138,86,166,88,254,140,215,247,81,45,0,0,0,3,0,217,254,161,5,219,4,174,0,3, + 0,7,0,14,0,0,55,1,21,1,17,1,21,9,3,21,1,53,1,217,5,2,250,254,5,2,250,254,5,2,252,64,3,192,250,254,5,2,195,254, + 144,178,1,112,1,244,254,144,178,1,112,2,171,254,235,254,238,178,1,112,170,1,111,0,0,3,0,217,254,161,5,219,4,174,0,3,0,7,0,14, + 0,0,37,21,1,53,1,21,1,53,17,53,1,21,1,53,1,5,219,250,254,5,2,250,254,5,2,250,254,3,192,195,178,254,144,178,2,178,178,254, + 144,178,3,105,176,254,145,170,254,144,178,1,18,0,0,0,0,2,0,181,255,201,5,159,4,179,0,6,0,13,0,0,1,23,1,23,1,23,17,19, + 39,9,2,39,33,3,194,93,253,35,191,2,221,92,101,193,253,35,254,180,2,221,194,2,207,4,78,92,253,35,191,2,221,93,1,120,253,150,194,253, + 35,1,76,2,221,193,0,0,0,2,1,32,255,201,6,10,4,179,0,6,0,13,0,0,1,33,17,55,1,55,9,1,17,33,7,9,2,2,253,254, + 136,92,2,221,191,253,35,254,128,2,207,194,2,221,254,180,253,35,4,78,254,136,93,253,35,191,2,221,253,242,2,207,193,253,35,254,180,2,221,0, + 0,2,0,181,0,52,5,159,5,30,0,6,0,13,0,0,1,7,1,7,1,7,33,5,55,9,2,55,17,5,58,92,253,35,191,2,221,93,1,120, + 253,150,194,253,35,1,76,2,221,193,2,17,93,2,221,191,253,35,92,101,193,2,221,1,76,253,35,194,253,49,0,0,0,2,1,32,0,52,6,10, + 5,30,0,6,0,13,0,0,37,39,1,39,1,39,17,3,23,9,2,23,33,2,253,93,2,221,191,253,35,92,101,193,2,221,1,76,253,35,194,253, + 49,153,92,2,221,191,253,35,93,254,136,2,106,194,2,221,254,180,253,35,193,0,0,0,0,2,0,55,0,134,6,80,4,126,0,9,0,19,0,0, + 37,9,1,17,33,17,9,1,17,33,1,21,33,53,9,1,53,33,21,1,2,51,254,4,1,252,2,33,1,252,254,4,253,223,2,133,253,23,254,246, + 1,10,2,233,1,10,134,1,252,1,252,254,239,1,17,254,4,254,4,1,17,1,245,131,131,254,246,254,246,131,131,1,10,0,0,0,0,1,0,55, + 0,134,6,63,4,126,0,6,0,0,37,9,1,17,33,17,33,2,51,254,4,1,252,4,12,251,244,134,1,252,1,252,254,239,254,42,0,1,1,94, + 0,0,5,86,6,8,0,6,0,0,9,2,33,17,33,17,1,94,1,252,1,252,254,239,254,42,4,12,1,252,254,4,251,244,4,12,0,1,1,94, + 255,205,5,86,5,213,0,6,0,0,1,33,17,33,17,33,1,1,94,1,17,1,214,1,17,254,4,1,201,4,12,251,244,254,4,0,0,1,0,181, + 255,201,5,159,4,179,0,6,0,0,1,39,9,2,39,33,5,159,193,253,35,254,180,2,221,194,2,207,1,228,194,253,35,1,76,2,221,193,0,0, + 0,1,1,32,255,201,6,10,4,179,0,6,0,0,1,17,33,7,9,2,1,32,2,207,194,2,221,254,180,253,35,1,228,2,207,193,253,35,254,180, + 2,221,0,0,0,1,0,181,0,52,5,159,5,30,0,6,0,0,37,55,9,2,55,17,2,208,194,253,35,1,76,2,221,193,52,193,2,221,1,76, + 253,35,194,253,49,0,0,0,0,1,1,32,0,52,6,10,5,30,0,6,0,0,1,23,9,2,23,33,1,32,193,2,221,1,76,253,35,194,253,49, + 3,3,194,2,221,254,180,253,35,193,0,0,0,1,0,55,0,134,6,80,4,126,0,9,0,0,37,9,1,17,33,17,9,1,17,33,2,51,254,4, + 1,252,2,33,1,252,254,4,253,223,134,1,252,1,252,254,239,1,17,254,4,254,4,1,17,0,0,0,0,1,1,94,255,205,5,86,6,8,0,9, + 0,0,1,33,9,1,33,17,33,9,1,33,4,69,1,17,254,4,254,4,1,17,254,239,1,252,1,252,254,239,1,201,254,4,1,252,2,67,1,252, + 254,4,0,0,0,1,0,117,255,249,6,82,2,215,0,11,0,0,5,35,1,55,23,17,33,53,33,17,55,23,4,200,90,254,120,120,232,252,47,4, + 123,234,120,7,1,138,120,234,1,28,170,254,58,234,120,0,0,1,0,117,2,45,6,82,5,11,0,11,0,0,9,1,7,39,17,33,53,33,17,7, + 39,1,4,200,1,138,120,234,251,133,3,209,232,120,1,136,5,11,254,118,120,234,254,58,170,1,28,234,120,1,138,0,0,1,0,72,255,249,6,37, + 2,215,0,11,0,0,5,1,55,23,17,33,21,33,17,55,23,1,1,210,254,118,120,234,4,123,252,47,232,120,254,120,7,1,138,120,234,1,198,170, + 254,228,234,120,254,118,0,0,0,1,0,72,2,45,6,37,5,11,0,11,0,0,1,51,1,7,39,17,33,21,33,17,7,39,1,210,90,1,136,120, + 232,3,209,251,133,234,120,5,11,254,118,120,234,254,228,170,1,198,234,120,0,2,0,186,255,4,6,213,5,36,0,3,0,7,0,0,23,17,33,17, + 37,33,17,33,186,6,27,250,87,5,55,250,201,252,6,32,249,224,114,2,158,0,0,0,0,2,0,186,255,4,6,213,5,36,0,3,0,7,0,0, + 23,17,33,17,1,33,17,33,186,6,27,250,87,5,55,250,201,252,6,32,249,224,3,16,2,158,0,0,0,2,0,186,255,4,6,213,5,36,0,2, + 0,6,0,0,5,33,1,3,17,33,17,1,44,5,55,250,201,114,6,27,138,5,60,250,82,6,32,249,224,0,0,0,0,2,0,186,255,4,6,213, + 5,36,0,2,0,6,0,0,5,17,33,3,17,33,17,6,99,250,201,114,6,27,138,5,60,250,82,6,32,249,224,0,0,2,0,6,255,4,6,33, + 5,36,0,2,0,6,0,0,5,9,5,3,19,2,118,253,138,252,243,3,13,3,14,252,242,100,2,120,2,120,253,136,3,16,252,240,252,240,0,0, + 0,2,0,6,255,4,6,33,5,36,0,2,0,6,0,0,19,1,17,9,3,158,2,117,252,243,3,13,3,14,252,242,2,20,253,136,4,240,253,136, + 3,16,252,240,252,240,0,0,0,2,0,6,255,4,6,33,5,36,0,2,0,6,0,0,19,9,1,33,9,2,158,2,117,2,118,250,125,3,13,3, + 14,252,242,2,20,253,136,2,120,3,16,252,240,252,240,0,0,2,0,6,255,4,6,33,5,36,0,2,0,6,0,0,19,33,9,4,158,4,235,253, + 138,252,243,3,13,3,14,252,242,2,20,2,120,253,136,3,16,252,240,252,240,0,0,0,0,12,0,186,255,4,6,213,5,36,0,5,0,9,0,13, + 0,17,0,21,0,27,0,31,0,35,0,41,0,45,0,49,0,55,0,0,5,21,35,53,51,53,19,21,35,53,19,21,35,53,1,21,35,53,35,21, + 35,53,1,21,35,53,35,53,35,21,35,53,35,21,35,53,1,21,51,21,35,53,19,21,35,53,19,21,35,53,19,21,35,21,35,53,6,213,227,113, + 114,114,114,114,254,165,204,234,202,4,77,114,113,234,204,234,202,254,164,114,228,114,114,114,114,228,114,114,22,230,116,114,1,182,204,204,1,180,202,202, + 252,36,116,116,116,116,5,172,230,114,116,116,116,116,116,250,198,114,116,230,1,182,204,204,1,180,202,202,1,208,116,114,230,0,0,0,0,1,0,36, + 255,202,6,208,6,35,0,4,0,0,19,9,2,33,36,3,86,3,86,254,186,251,224,3,182,2,109,253,147,252,20,0,0,2,0,36,255,202,6,208, + 6,35,0,4,0,9,0,0,19,1,33,9,5,33,170,1,19,3,122,1,19,253,48,252,170,3,86,3,86,254,186,251,224,3,139,252,177,3,79,2, + 12,254,31,2,109,253,147,252,20,0,0,0,0,2,0,150,255,70,6,102,5,252,0,5,0,11,0,0,9,2,17,9,1,3,17,9,1,17,1,1, + 8,2,118,2,118,253,138,253,138,114,2,232,2,232,253,24,1,53,254,149,1,107,2,216,1,107,254,149,252,230,3,92,1,173,254,83,252,164,254,83, + 0,1,0,150,255,70,6,102,5,252,0,5,0,0,55,17,9,1,17,1,150,2,232,2,232,253,24,243,3,92,1,173,254,83,252,164,254,83,0,0, + 0,1,0,34,255,185,6,217,5,137,0,5,0,0,5,9,1,33,9,1,1,208,254,82,1,174,3,91,1,174,254,82,71,2,232,2,232,253,24,253, + 24,0,0,0,0,1,0,112,254,0,8,132,6,40,0,11,0,0,22,16,1,36,32,5,0,16,1,4,32,37,112,2,5,1,3,2,4,1,3,2, + 5,253,251,254,253,253,252,254,253,64,4,168,1,42,150,150,254,214,251,88,254,214,150,150,0,1,0,77,255,160,6,167,6,77,0,4,0,0,9,3, + 17,4,58,2,108,253,148,252,20,6,76,252,170,252,170,1,70,4,32,0,0,2,0,77,255,160,6,167,6,77,0,4,0,9,0,0,9,1,17,9, + 5,17,4,14,252,178,3,78,2,12,254,32,2,108,253,148,252,20,5,198,254,238,252,134,254,236,2,208,3,86,252,170,252,170,1,70,4,32,0,0, + 0,1,0,10,0,0,4,106,5,213,0,21,0,0,19,51,17,33,21,33,21,33,21,33,17,33,21,33,17,35,53,51,53,35,53,51,201,202,1,91, + 254,165,1,91,254,165,2,215,252,95,191,191,191,191,5,213,254,7,144,144,144,254,126,170,2,44,144,144,144,0,0,0,0,1,0,10,0,0,2,42, + 6,20,0,19,0,0,1,51,21,35,17,35,17,35,53,51,53,35,53,51,17,51,17,51,21,35,1,121,177,177,184,183,183,183,183,184,177,177,2,188, + 144,253,212,2,44,144,144,144,2,56,253,200,144,0,0,0,0,1,255,215,0,0,4,106,5,213,0,35,0,0,19,51,17,22,23,22,51,50,55,54, + 55,51,14,1,35,34,39,17,33,21,33,17,38,39,38,35,34,7,6,7,35,62,1,51,50,23,201,202,2,1,17,13,38,18,18,2,125,2,102,91, + 20,19,2,215,252,95,6,5,17,13,38,18,18,2,125,2,102,91,25,22,5,213,253,44,1,1,9,37,36,82,134,148,4,254,47,170,3,2,4,3, + 9,37,36,82,134,148,6,0,0,2,0,10,0,0,4,141,5,213,0,16,0,29,0,0,19,33,50,23,22,21,20,7,6,43,1,17,35,17,35,53, + 51,23,21,51,50,54,53,52,38,43,1,21,33,21,201,1,200,251,128,129,129,128,251,254,202,191,191,202,254,141,154,154,141,254,1,91,5,213,113,114, + 219,221,113,113,253,168,3,207,144,144,209,146,135,134,146,208,144,0,0,0,0,2,0,201,254,102,5,84,5,213,0,27,0,36,0,199,64,26,17,14, + 15,11,5,6,3,25,9,0,36,30,22,5,10,33,25,4,25,63,28,10,28,20,4,37,16,252,236,50,252,196,236,17,23,57,17,57,57,57,16,204, + 57,57,49,0,64,38,9,8,7,3,10,6,17,3,4,3,5,17,4,4,3,66,20,11,10,14,149,17,176,4,6,4,0,29,3,4,29,149,9,36, + 149,21,129,4,47,244,236,212,236,18,57,18,57,18,57,16,244,236,17,57,57,48,75,83,88,7,16,5,237,7,16,5,237,17,23,57,89,34,178,64, + 38,1,1,93,64,66,122,27,1,5,0,5,1,5,2,6,3,7,4,21,0,21,1,20,2,22,3,23,4,37,0,37,1,37,2,38,3,39,6,38, + 7,38,8,38,9,32,38,54,1,54,2,70,1,70,2,104,5,117,4,117,5,119,27,136,6,136,7,152,6,152,7,31,93,0,93,1,30,1,23,19, + 35,3,46,1,43,1,17,20,22,59,1,21,35,34,38,25,1,33,32,22,21,20,6,1,17,51,50,54,53,52,38,35,3,141,65,123,62,205,217,191, + 74,139,120,220,110,134,63,77,227,205,1,200,1,0,252,131,253,137,254,146,149,149,146,2,188,22,144,126,254,104,1,127,150,98,253,241,194,150,170,244, + 1,14,5,109,214,216,141,186,2,79,253,238,135,131,131,133,0,4,0,72,255,162,4,156,4,188,0,35,0,40,0,48,0,55,0,0,1,17,35,53, + 14,1,35,34,39,7,39,55,38,53,52,54,59,1,55,38,39,38,35,34,6,7,53,62,1,51,50,23,55,23,7,22,15,1,51,53,52,7,1,22, + 51,50,54,61,1,1,19,6,7,6,21,20,4,45,184,63,188,136,135,92,103,96,110,59,253,251,41,158,11,13,84,151,96,182,84,101,190,90,231,120, + 148,95,168,57,187,53,56,175,254,188,62,99,153,185,253,197,229,99,51,86,2,127,253,129,170,102,97,60,125,78,133,86,123,189,192,191,12,12,69,46, + 46,170,39,39,114,179,79,203,115,43,65,18,24,186,254,120,46,217,180,41,254,226,1,21,12,30,51,123,32,0,0,0,0,1,255,232,255,66,3,18, + 6,147,0,28,0,0,1,17,51,19,51,3,51,21,35,3,21,20,22,59,1,21,35,34,39,38,39,3,35,19,17,35,53,51,17,1,119,49,192,170, + 192,160,209,170,75,115,189,189,213,81,13,10,102,170,214,135,135,5,158,254,194,2,51,253,205,143,254,15,111,137,78,154,80,12,16,254,214,2,114,2, + 29,143,1,62,255,255,0,201,254,191,6,4,5,213,16,6,4,54,0,0,0,1,0,186,254,229,5,28,6,20,0,25,0,0,33,35,17,52,38,35, + 34,6,21,17,35,17,51,17,54,55,54,51,50,23,22,21,17,51,17,35,4,100,184,124,124,149,172,185,185,66,89,90,117,193,99,99,184,184,2,158, + 159,158,190,164,253,135,6,20,253,158,101,50,50,119,120,232,253,245,254,76,0,1,0,201,254,191,5,106,5,213,0,14,0,0,37,51,17,35,17,35, + 1,17,35,17,51,17,1,33,1,4,193,169,197,69,253,51,202,202,2,158,1,4,253,27,170,254,21,1,65,2,207,253,49,5,213,253,137,2,119,253, + 72,0,0,0,0,1,0,186,254,229,4,156,6,20,0,14,0,0,19,51,17,1,51,9,1,51,17,35,17,35,1,17,35,186,185,2,37,235,253,174, + 1,204,159,184,56,253,199,185,6,20,252,105,1,227,253,244,254,69,254,76,1,27,2,35,253,221,0,0,0,1,0,92,254,191,5,232,5,213,0,11, + 0,0,19,33,21,1,33,17,35,17,33,53,1,33,115,4,149,252,80,4,144,201,251,61,3,176,252,103,5,213,154,251,111,254,21,1,65,154,4,145, + 0,1,0,88,254,229,4,147,4,96,0,11,0,0,19,33,21,1,33,17,35,17,33,53,1,33,113,3,106,253,76,3,108,184,252,125,2,180,253,101, + 4,96,168,252,219,254,82,1,27,168,3,37,0,2,0,115,255,227,5,119,5,241,0,16,0,28,0,45,64,24,26,149,0,14,20,149,5,8,140,14, + 145,1,175,3,23,4,0,28,2,17,25,11,16,29,16,252,236,212,236,50,50,49,0,47,236,228,244,196,236,16,196,238,48,1,53,51,17,35,53,14, + 1,35,32,0,17,16,0,33,50,22,1,16,18,51,50,18,17,16,2,35,34,2,4,179,196,196,77,236,165,254,242,254,172,1,84,1,14,165,236,252, + 223,234,204,205,235,235,205,204,234,4,237,232,250,43,231,132,128,1,171,1,92,1,92,1,171,128,253,120,254,227,254,187,1,69,1,29,1,29,1,69, + 254,187,0,0,0,1,0,201,254,102,6,31,5,213,0,20,0,0,19,33,9,1,33,17,16,6,43,1,53,51,50,54,53,17,1,35,1,17,35,201, + 1,45,1,125,1,127,1,45,205,227,77,68,134,110,254,127,203,254,127,196,5,213,252,8,3,248,250,147,254,242,244,170,150,194,4,183,252,0,4,0, + 250,225,0,0,0,2,0,16,0,0,5,104,5,213,0,2,0,10,0,0,37,1,33,1,35,1,51,19,33,19,51,2,188,1,18,253,219,1,133,229, + 253,199,210,136,2,161,136,213,199,2,231,252,82,5,213,254,129,1,127,0,0,2,0,115,255,227,5,119,5,241,0,15,0,24,0,0,37,21,35,17, + 51,21,62,1,51,32,0,16,0,33,34,38,0,16,2,35,34,2,16,18,32,1,55,196,196,77,236,165,1,14,1,84,254,172,254,242,165,236,3,33, + 234,204,205,235,235,1,154,231,232,5,213,231,132,128,254,85,253,72,254,85,128,1,107,2,58,1,69,254,187,253,198,254,187,0,0,0,0,1,0,61, + 0,0,5,224,4,123,0,20,0,0,1,48,1,35,1,51,9,1,54,51,50,22,29,1,35,53,52,38,34,7,6,4,36,254,183,250,254,92,195,1, + 94,1,20,84,222,131,185,178,81,114,41,21,3,109,252,147,4,96,252,84,2,230,225,191,134,114,114,58,84,42,21,0,0,1,0,68,0,0,9,6, + 5,240,0,29,0,0,9,1,35,9,1,35,1,51,9,1,51,9,1,54,55,54,51,50,23,22,29,1,35,53,52,38,35,34,7,6,7,102,254,201, + 254,254,197,254,194,254,254,138,204,1,58,1,57,227,1,58,1,7,18,60,86,137,136,85,85,170,81,46,42,40,28,4,225,251,31,5,16,250,240,5, + 213,251,18,4,238,251,18,4,38,71,64,92,92,91,110,131,121,54,80,40,28,0,0,0,0,1,0,86,0,0,7,177,4,123,0,27,0,0,1,54, + 55,54,51,50,22,29,1,35,53,52,38,34,7,6,7,3,35,11,1,35,1,51,27,1,51,19,5,70,23,57,91,132,131,185,178,81,114,41,24,6, + 229,217,241,242,217,254,219,184,230,229,217,230,3,136,86,61,96,191,134,114,114,58,84,42,25,20,252,147,3,150,252,106,4,96,252,150,3,106,252,150, + 0,2,0,104,0,0,4,127,4,179,0,19,0,27,0,0,19,16,37,54,51,50,21,20,15,1,19,1,51,1,35,3,7,53,54,63,1,54,53,38, + 35,34,21,20,200,1,84,20,18,168,184,127,171,1,94,195,254,92,250,209,168,49,60,165,216,1,45,175,3,77,1,50,49,3,248,153,93,64,254,47, + 3,172,251,160,2,50,85,196,20,28,80,110,52,52,160,37,0,1,0,201,0,0,4,113,5,213,0,7,0,0,1,33,17,35,17,51,17,33,4,113, + 253,34,202,202,2,222,2,199,253,57,5,213,253,156,0,0,0,1,0,193,0,0,3,208,4,96,0,7,0,0,1,33,17,35,17,51,17,33,3,208, + 253,169,184,184,2,87,2,4,253,252,4,96,254,51,0,0,0,2,0,112,255,231,4,209,4,104,0,10,0,39,0,0,1,34,21,17,50,55,54,53, + 52,39,38,39,50,23,22,17,16,7,6,35,7,34,39,38,17,16,55,54,55,21,6,7,6,21,20,23,22,51,17,16,3,61,65,95,95,85,86,70, + 54,139,128,137,137,129,203,183,200,133,136,136,101,167,66,58,86,86,77,112,3,203,145,253,82,104,93,223,208,112,91,157,132,141,254,217,254,241,161,152, + 1,153,156,1,19,1,30,146,109,28,163,23,78,115,190,202,115,103,2,175,1,46,0,0,0,1,0,0,255,229,2,144,6,20,0,23,0,0,33,53, + 6,33,34,47,1,22,51,50,54,53,17,52,38,43,1,53,51,50,23,22,21,17,1,215,114,254,249,37,56,1,60,88,156,167,77,105,231,254,183,79, + 82,174,201,10,189,35,203,190,2,108,153,97,156,96,98,212,251,130,0,0,0,3,0,113,255,227,4,117,4,123,0,7,0,15,0,32,0,0,0,38, + 34,6,20,22,50,54,8,1,32,0,16,0,32,8,1,38,32,6,21,20,23,54,55,54,51,50,23,22,23,54,53,3,22,94,135,93,93,136,93,253, + 91,1,17,1,225,1,18,254,238,254,31,254,239,3,65,172,254,217,172,20,22,55,92,133,136,89,51,23,18,1,97,95,94,135,92,92,2,104,1,56, + 254,200,253,217,254,199,1,57,1,218,233,231,201,96,77,71,56,93,95,50,66,73,91,0,0,1,0,98,0,0,3,51,4,96,0,11,0,0,1,17, + 33,53,33,17,33,53,33,17,33,53,3,51,253,47,2,23,254,13,1,243,253,246,4,96,251,160,147,1,120,148,1,45,148,0,0,0,255,255,255,233, + 255,17,0,238,3,103,18,7,2,116,0,0,253,100,0,0,0,1,0,10,2,156,3,104,5,224,0,6,0,0,9,1,51,9,1,51,1,1,113,254, + 153,133,1,42,1,43,132,254,153,2,156,3,68,253,64,2,192,252,188,0,0,1,0,135,254,16,4,200,5,240,0,58,0,0,1,21,46,1,35,34, + 6,21,20,23,22,31,1,22,23,22,21,20,7,6,7,23,30,1,59,1,21,35,34,46,2,47,1,38,39,38,39,38,39,53,30,1,51,50,54,53, + 52,38,47,1,46,1,53,52,36,51,50,22,4,72,115,204,95,165,179,60,54,171,122,230,103,108,146,115,201,135,124,147,70,24,63,34,78,103,123,60, + 223,49,14,50,39,119,128,123,236,114,173,188,135,154,123,226,202,1,23,245,105,218,5,164,197,55,54,128,118,99,51,46,35,25,47,105,108,182,217,112, + 89,18,119,110,73,170,16,39,79,56,206,45,10,33,7,24,47,208,69,70,136,126,110,124,31,24,45,192,171,198,228,38,0,1,0,92,254,16,5,31, + 5,213,0,24,0,0,1,51,21,35,34,46,2,39,37,38,43,1,53,1,33,53,33,21,1,22,31,1,30,1,4,179,108,147,39,89,118,140,69,254, + 211,78,113,125,3,176,252,103,4,149,252,85,114,117,252,136,159,254,186,170,16,39,79,56,243,63,154,4,145,170,154,251,111,13,95,205,110,73,0,0, + 0,1,0,123,255,126,4,91,4,96,0,31,0,0,1,35,55,54,35,34,5,3,6,51,50,54,51,50,3,7,35,55,54,35,14,1,35,34,27,1, + 51,7,36,51,50,7,4,56,192,19,25,106,144,254,214,69,27,115,128,220,90,183,43,18,191,18,19,52,89,245,150,192,42,116,191,24,1,122,146,210, + 25,2,173,129,172,172,254,4,174,154,254,226,130,130,132,1,131,1,49,3,47,177,177,177,0,1,0,50,254,30,4,114,4,95,0,32,0,0,1,6, + 22,7,6,4,35,32,36,55,51,6,22,51,62,1,55,54,38,55,4,35,34,55,19,51,3,6,51,22,37,19,51,3,250,15,104,26,27,254,244,210, + 254,255,254,221,22,186,11,147,217,107,192,25,19,106,8,254,119,148,211,25,152,188,132,24,114,157,1,16,113,191,1,45,120,209,158,135,161,171,150,68, + 124,1,72,118,96,211,81,176,175,3,126,253,5,174,2,176,2,251,0,0,0,1,0,80,254,30,4,72,4,95,0,35,0,0,1,6,22,21,20,4, + 35,34,36,39,53,51,21,30,1,51,50,54,53,52,38,55,19,54,35,34,7,3,35,19,51,7,36,51,50,7,3,168,31,191,254,190,210,176,254,216, + 12,187,7,159,148,149,183,199,36,90,25,104,145,252,57,190,100,189,23,1,82,143,212,24,1,153,141,182,176,189,203,159,172,89,80,91,121,129,131,132, + 232,184,1,102,174,174,253,227,3,80,176,176,176,0,0,0,0,2,0,127,255,235,4,148,6,117,0,9,0,46,0,0,1,54,7,4,7,3,6,51, + 32,63,1,6,7,6,35,32,27,1,54,37,19,14,1,35,34,63,1,51,7,6,51,50,55,54,51,50,29,1,35,53,38,15,1,19,55,36,3,3, + 170,27,249,254,212,39,69,27,158,1,139,32,194,24,219,219,172,254,156,57,57,32,1,133,4,90,133,46,164,2,10,196,10,10,73,66,202,209,97,161, + 117,2,121,164,7,104,1,36,52,3,81,180,24,32,202,254,40,188,215,12,160,100,99,1,142,1,127,225,90,1,101,20,21,126,136,80,65,52,53,71, + 120,61,37,19,39,254,148,9,27,254,131,0,0,1,0,105,254,30,4,75,4,95,0,17,0,0,1,35,3,19,54,35,34,5,3,35,19,51,7,36, + 51,50,7,3,4,52,209,82,104,25,105,135,254,209,70,196,117,191,25,1,126,143,210,24,117,254,30,2,102,2,168,174,174,253,131,3,176,176,176,176, + 252,213,0,0,0,1,0,80,254,29,6,229,4,95,0,28,0,0,1,35,3,19,54,35,34,5,3,35,19,51,7,36,51,50,7,36,51,50,7,3, + 35,19,54,35,34,5,3,4,18,203,85,108,25,104,146,254,226,81,190,116,192,20,1,120,141,202,23,1,108,147,213,23,158,193,137,25,111,145,254,236, + 107,254,29,2,103,2,168,174,174,252,212,4,95,176,176,176,176,176,252,81,3,44,174,174,253,88,0,0,0,2,0,0,255,239,4,154,6,135,0,11, + 0,36,0,0,1,54,35,34,5,3,6,55,50,55,54,55,23,6,5,4,35,34,55,27,1,35,34,39,53,51,21,22,59,1,55,51,3,36,51,50, + 7,3,201,25,105,144,254,217,79,21,95,212,123,107,20,191,39,254,205,254,248,136,211,24,106,104,182,176,17,198,9,106,87,15,176,122,1,123,144,211, + 25,3,43,174,174,253,206,134,1,56,66,126,3,247,66,65,175,2,214,1,68,230,233,253,107,54,254,89,177,177,0,0,0,2,0,108,0,0,7,52, + 4,95,0,9,0,34,0,0,1,54,35,34,5,3,6,51,22,37,1,36,51,50,7,3,35,19,54,35,34,5,3,35,55,4,35,34,55,19,51,7, + 36,51,50,3,169,28,101,143,254,187,82,26,114,141,1,59,1,39,1,105,142,212,24,155,190,135,24,104,144,254,236,130,184,30,254,123,171,218,36,144, + 191,27,1,153,143,214,3,44,174,178,254,10,174,2,176,2,125,176,176,252,81,3,44,174,174,252,212,200,200,175,3,176,180,180,0,0,0,1,0,142, + 0,0,4,87,4,95,0,15,0,0,33,35,19,54,35,34,5,3,35,19,51,7,36,51,50,7,3,190,191,136,25,104,147,254,220,53,190,94,192,23, + 1,129,137,216,32,3,44,174,174,254,145,2,162,176,176,192,0,2,0,104,254,30,4,115,6,135,0,9,0,26,0,0,1,54,35,34,5,3,6,51, + 50,37,23,19,35,3,4,35,34,55,19,3,51,19,7,36,51,50,7,3,161,31,111,144,254,199,78,24,113,175,1,22,170,109,205,93,254,138,172,211, + 24,144,73,211,52,29,1,146,141,211,24,3,44,174,174,253,245,174,191,157,253,137,2,145,192,175,3,227,2,6,253,239,199,176,176,0,0,2,0,80, + 0,0,7,57,4,95,0,9,0,34,0,0,1,54,35,34,5,3,6,51,50,37,19,35,55,4,35,34,55,19,54,35,6,5,3,35,19,51,7,36, + 51,50,7,36,51,54,7,6,101,25,111,130,254,180,78,26,109,136,1,73,144,193,28,254,121,187,183,24,91,25,102,121,254,184,95,191,136,193,25,1, + 144,142,200,23,1,150,176,194,30,3,44,174,157,253,245,174,174,254,206,191,191,175,2,125,174,2,172,252,212,4,95,176,176,179,179,1,177,0,0,0, + 0,2,0,109,255,239,4,195,6,135,0,9,0,41,0,0,1,4,7,3,6,51,50,55,54,55,1,3,6,7,6,7,36,55,19,54,37,3,38,35, + 34,6,35,34,61,1,51,21,20,51,50,54,51,50,23,19,51,21,3,162,253,239,20,69,29,182,115,121,120,13,1,31,99,24,192,187,210,254,183,29, + 86,25,2,207,38,20,74,93,213,122,129,195,55,83,178,114,172,35,49,88,3,219,45,131,254,27,245,59,61,109,2,164,253,59,160,64,64,6,6,251, + 2,93,166,107,1,1,114,129,149,162,119,63,124,192,254,211,134,0,0,0,0,1,0,80,0,0,4,91,6,135,0,27,0,0,33,35,19,54,35,34, + 5,3,35,19,39,16,33,32,23,21,35,53,38,35,34,21,19,7,36,51,54,7,3,182,192,147,24,105,144,254,218,115,191,153,34,1,160,1,133,2, + 188,2,173,254,32,17,1,126,142,219,32,3,44,174,174,252,212,4,56,211,1,124,161,123,97,65,163,254,185,116,176,1,177,0,0,0,0,1,0,104, + 0,0,7,25,4,95,0,26,0,0,37,4,35,34,55,19,51,3,6,51,50,37,19,51,3,6,51,50,37,19,51,3,35,55,4,35,34,3,44,254, + 146,156,210,24,166,190,147,26,114,157,1,7,135,192,138,21,92,157,1,26,105,192,147,193,25,254,128,138,190,175,175,175,3,176,252,211,174,174,3,45, + 252,211,174,174,3,45,251,161,175,175,0,0,0,1,0,104,0,0,4,114,4,95,0,15,0,0,37,4,35,34,55,19,51,3,6,51,50,37,19,51, + 3,35,3,44,254,146,156,210,24,154,192,137,26,114,157,1,17,115,192,156,194,175,175,175,3,176,252,211,174,174,3,45,251,161,0,0,0,1,0,142, + 254,30,6,35,6,135,0,30,0,0,1,35,3,55,4,35,34,55,19,4,35,34,55,19,51,3,6,51,50,55,51,3,6,51,50,37,19,3,51,19, + 3,6,2,210,76,15,254,189,144,202,28,66,254,236,127,169,22,92,206,78,30,116,50,214,190,81,13,66,127,1,23,105,122,204,104,127,254,30,2,24, + 78,132,193,1,186,136,151,1,215,254,186,143,115,253,227,94,121,2,220,2,174,253,39,252,142,0,0,0,0,1,0,104,0,0,7,11,6,135,0,29, + 0,0,1,19,3,51,19,7,36,51,50,7,3,35,19,54,35,34,5,3,35,55,4,35,34,55,19,51,3,6,51,50,3,53,109,84,205,64,12,1, + 114,141,213,24,156,190,135,24,104,144,254,230,115,192,23,254,156,156,210,24,152,195,138,26,114,157,1,50,3,0,2,85,253,161,121,176,176,252,81,3, + 44,174,174,252,212,175,175,175,3,176,252,211,174,0,0,0,0,1,0,104,0,0,4,93,6,135,0,17,0,0,19,3,51,19,3,6,51,50,37,19, + 51,3,35,55,4,35,34,55,237,77,220,55,112,26,104,157,1,7,94,202,136,202,23,254,156,156,210,24,4,97,2,38,253,215,252,212,174,174,3,45, + 251,161,175,175,175,0,0,0,0,2,0,102,254,30,4,74,4,95,0,7,0,28,0,0,1,54,35,34,5,3,36,55,23,6,5,6,22,51,50,55, + 23,6,33,32,2,27,1,51,7,36,51,54,3,3,136,27,106,143,254,217,101,1,252,23,188,33,253,68,27,117,152,142,206,99,194,254,224,254,250,165, + 50,138,189,21,1,120,145,214,45,3,43,174,174,253,57,75,158,27,236,70,155,198,186,133,182,1,70,1,52,3,199,177,177,1,254,203,0,1,0,104, + 254,30,7,19,5,74,0,29,0,0,37,4,35,34,55,4,35,34,55,19,51,3,6,51,50,37,19,51,3,6,51,50,37,19,39,51,19,3,19,35, + 5,222,254,128,138,200,22,254,156,156,210,24,164,192,147,26,114,157,1,7,135,192,138,21,92,157,1,26,104,36,203,20,120,109,208,175,175,175,175,175, + 3,176,252,211,174,174,3,45,252,211,174,174,3,44,236,254,231,252,105,253,132,0,0,0,0,3,0,123,254,30,7,34,4,95,0,9,0,19,0,45, + 0,0,1,54,7,38,5,3,6,51,50,37,1,54,35,6,5,3,6,23,50,37,19,35,55,4,35,39,7,19,35,3,55,4,33,34,27,1,51,7, + 36,51,50,7,36,51,50,3,3,157,14,111,158,254,231,71,26,112,175,1,10,3,21,25,125,89,254,175,72,24,141,149,1,3,149,183,26,254,214,150, + 116,9,85,206,64,26,254,253,254,241,212,44,116,191,24,1,83,212,192,24,1,80,215,195,45,3,109,110,2,1,176,254,7,173,174,1,250,175,1,175, + 254,6,174,1,175,254,207,175,175,45,59,254,44,1,204,197,175,1,49,3,46,177,177,177,177,254,205,0,0,1,0,100,254,30,6,69,6,135,0,23, + 0,0,37,19,35,3,19,5,7,35,19,51,3,37,19,3,51,19,3,37,55,51,3,35,19,5,3,109,103,206,81,54,254,90,29,196,123,199,79,1, + 166,66,85,194,69,51,1,160,28,203,123,204,80,254,92,111,253,175,2,82,1,132,123,237,3,111,253,248,134,1,187,2,83,253,123,254,171,120,192,252, + 159,2,28,126,0,1,0,80,0,0,4,92,4,95,0,15,0,0,1,36,51,50,7,3,35,19,54,35,34,5,3,35,19,51,1,150,1,123,142,213, + 24,155,201,135,24,94,144,254,217,113,193,158,191,3,175,176,176,252,81,3,44,174,174,252,212,4,95,0,0,1,0,104,254,30,4,114,4,96,0,16, + 0,0,37,4,35,34,55,19,51,3,6,51,50,55,19,51,3,19,35,3,14,254,175,155,210,24,148,190,129,26,114,157,243,136,201,156,131,218,175,175, + 175,3,176,252,211,174,174,3,46,252,64,253,126,0,0,0,0,1,0,104,254,30,4,104,4,95,0,22,0,0,37,4,35,34,55,19,51,3,6,51, + 50,37,19,51,3,2,0,33,35,53,51,50,36,3,31,254,156,153,210,24,152,194,137,26,114,157,1,17,105,192,114,59,254,46,254,219,85,73,231,1, + 89,165,165,175,3,176,252,211,174,174,3,45,252,145,254,87,254,215,139,223,0,1,0,80,254,30,4,84,6,135,0,19,0,0,1,3,19,35,3,19, + 3,51,19,7,36,51,50,7,3,35,19,54,35,34,1,124,106,99,218,75,151,74,196,61,15,1,123,141,213,24,139,189,116,24,104,144,3,44,253,26, + 253,216,2,21,4,56,2,28,253,179,139,176,176,252,81,3,44,174,0,0,0,1,0,86,254,30,4,65,4,96,0,25,0,0,1,50,55,23,6,35, + 6,0,55,19,51,7,36,51,50,11,1,35,19,54,35,34,5,3,6,22,2,91,119,203,88,208,218,251,254,226,36,146,189,27,1,40,230,212,43,130, + 190,126,25,163,115,254,247,101,30,161,254,157,173,122,178,2,1,51,246,4,27,177,176,254,205,253,26,2,230,174,174,253,25,206,218,0,0,2,0,122, + 255,238,4,197,6,135,0,7,0,21,0,0,1,4,7,3,6,51,32,55,1,35,3,2,5,32,27,1,18,37,3,51,19,51,3,150,253,252,24,67, + 31,205,1,56,25,1,143,105,100,44,253,219,254,169,42,62,39,2,194,106,210,75,112,3,240,39,181,254,50,214,178,2,183,253,92,254,230,45,1,88, + 1,186,1,27,67,2,41,253,217,0,0,0,0,1,0,80,254,30,6,246,4,96,0,28,0,0,33,19,54,35,34,5,3,19,35,3,19,51,7,36, + 51,50,7,36,51,50,7,3,35,19,54,35,34,5,3,2,244,115,27,95,145,254,224,96,92,218,68,136,192,20,1,117,144,201,22,1,105,150,209,22, + 155,194,137,27,113,144,254,235,116,3,44,174,174,252,245,253,253,1,226,4,96,177,177,177,177,177,252,81,3,44,174,174,252,212,0,0,0,1,0,60, + 254,30,4,92,4,95,0,32,0,0,1,35,19,54,35,34,5,3,54,23,32,17,16,37,6,39,55,22,51,32,17,38,33,34,7,35,19,51,7,36, + 23,54,3,4,34,192,41,21,103,144,254,220,93,234,151,1,179,253,180,233,235,30,221,229,1,160,7,254,216,179,197,197,157,198,29,1,44,223,208,42, + 2,35,1,8,174,177,253,151,115,1,254,141,254,94,2,1,81,190,122,1,20,223,110,4,40,177,178,1,1,254,203,0,0,1,0,96,254,30,4,97, + 4,95,0,14,0,0,1,4,27,1,51,3,32,55,19,51,3,2,5,2,33,2,200,253,56,96,148,190,139,2,5,33,84,192,94,36,253,57,55,1, + 231,254,30,1,2,67,3,255,252,37,240,2,235,252,211,254,255,29,254,139,0,1,0,70,254,30,4,96,4,137,0,30,0,0,1,22,23,36,19,4, + 35,32,47,1,51,23,22,51,32,55,51,2,1,22,23,7,36,39,6,19,35,18,37,38,39,1,82,36,119,1,173,1,254,203,242,254,232,16,6,216, + 8,6,161,1,97,145,161,21,253,245,214,176,59,254,255,185,203,34,194,2,1,20,155,44,2,131,171,216,220,1,210,100,237,82,109,81,148,253,114,254, + 190,174,60,137,122,176,190,254,150,1,215,191,203,248,0,0,0,1,0,80,0,0,7,0,4,95,0,27,0,0,33,35,55,4,35,34,27,1,54,35, + 34,5,3,35,19,51,7,36,51,50,7,3,6,51,50,37,19,51,6,120,194,24,254,150,159,202,44,73,23,107,131,254,224,102,195,142,191,22,1,32, + 228,208,25,90,24,103,105,1,67,94,191,175,175,1,50,1,249,174,174,252,214,4,94,177,177,177,253,132,174,174,3,45,0,1,0,100,254,30,4,91, + 6,135,0,23,0,0,1,54,35,34,5,3,1,35,1,19,18,33,51,21,35,34,7,3,36,55,22,7,3,35,3,136,27,105,124,254,198,93,2,2, + 246,254,49,179,42,1,112,174,234,145,27,50,1,120,154,203,25,94,192,3,44,174,170,253,127,253,111,2,102,4,192,1,67,138,185,254,120,163,1,2, + 175,253,224,0,0,1,0,122,0,0,4,78,5,2,0,24,0,0,1,2,33,32,27,1,51,3,6,51,32,55,19,54,4,55,53,51,21,6,55,54, + 51,50,7,3,255,44,253,172,254,209,42,35,203,38,26,197,1,56,27,79,22,253,124,1,208,2,134,133,134,241,36,1,50,254,206,1,50,1,8,254, + 247,173,185,2,50,154,194,231,212,164,118,59,60,252,0,0,0,1,0,124,254,30,4,109,6,135,0,19,0,0,37,19,35,3,55,4,35,34,27,1, + 51,3,6,51,22,37,19,3,51,19,3,227,110,220,79,2,254,144,155,205,44,138,190,140,23,135,104,1,42,115,78,211,59,132,253,154,2,37,108,175, + 1,49,3,46,252,210,173,2,175,3,33,2,53,253,205,0,0,1,0,104,254,30,4,210,4,95,0,19,0,0,37,35,55,7,19,35,3,6,35,34, + 55,19,51,3,6,51,50,37,19,51,4,69,189,8,212,109,203,74,197,64,191,24,144,194,134,20,143,127,1,114,111,195,70,95,69,253,190,2,21,51, + 175,3,176,252,180,143,153,3,66,0,0,0,0,2,0,122,255,239,6,187,6,136,0,7,0,37,0,0,1,4,7,3,6,51,32,55,5,35,19,54, + 7,5,3,2,33,32,27,1,54,37,17,2,33,4,23,21,35,53,38,7,34,23,17,37,32,3,3,149,253,254,26,66,24,171,1,71,28,3,23,189, + 115,28,101,254,159,102,41,253,185,254,214,42,73,28,2,196,2,1,141,1,87,1,202,1,169,192,2,1,94,1,51,42,3,217,43,189,254,48,178,178, + 179,2,189,202,9,21,253,74,254,206,1,50,2,25,193,57,1,82,1,2,2,190,77,63,91,1,150,254,186,39,254,224,0,2,0,113,255,227,4,187, + 3,11,0,11,0,23,0,36,64,10,25,69,9,18,15,3,18,21,69,24,16,252,236,212,236,236,49,0,64,8,0,185,12,6,185,18,140,24,16,244, + 236,212,236,48,1,34,6,21,20,22,51,50,54,53,52,38,39,50,4,21,20,4,35,34,36,53,52,36,2,150,153,183,183,153,153,183,183,153,249,1, + 44,254,212,249,249,254,212,1,44,2,103,125,115,115,125,125,115,115,125,164,211,193,193,211,211,193,193,211,0,3,0,115,255,227,6,167,5,240,0,19, + 0,31,0,43,0,50,64,13,45,16,33,20,25,10,145,32,21,25,0,16,44,16,252,236,50,244,236,50,236,49,0,64,14,21,149,32,173,26,149,15, + 38,149,5,145,15,140,44,16,228,244,236,16,236,244,236,48,19,52,18,54,36,51,50,4,22,18,21,20,2,6,4,35,34,36,38,2,37,33,22,23, + 30,1,51,50,55,54,55,54,37,33,38,39,46,1,35,34,7,6,7,6,115,126,212,1,38,162,162,1,38,212,126,126,212,254,218,162,162,254,218,212, + 126,5,89,251,129,27,138,78,214,119,119,107,216,93,30,251,140,4,126,26,138,78,214,119,119,107,216,93,30,2,234,157,1,30,209,122,122,209,254,226, + 157,158,254,226,209,122,122,209,1,30,73,202,145,83,96,48,97,228,74,249,201,146,82,96,48,97,229,73,0,5,0,115,255,227,6,167,5,240,0,19, + 0,24,0,29,0,34,0,39,0,73,64,21,26,34,149,24,36,36,30,35,41,16,30,25,25,10,145,35,20,25,0,16,40,16,252,236,50,244,236,50, + 236,17,18,57,47,60,236,50,49,0,64,18,26,20,149,34,35,173,27,23,149,15,33,37,149,5,145,15,140,40,16,228,244,236,50,16,236,50,244,60, + 236,50,48,19,52,18,54,36,51,50,4,22,18,21,20,2,6,4,35,34,36,38,2,55,22,0,23,17,41,1,17,54,0,19,38,0,39,17,41,1, + 17,6,0,115,126,212,1,38,162,162,1,38,212,126,126,212,254,218,162,162,254,218,212,126,219,26,1,11,181,2,164,254,38,181,1,11,26,26,254,245, + 181,253,92,1,218,181,254,245,2,234,157,1,30,209,122,122,209,254,226,157,158,254,226,209,122,122,209,1,30,73,201,254,230,33,2,4,253,251,33,1, + 26,1,116,201,1,26,33,253,252,2,4,33,254,230,0,0,0,2,0,64,0,0,5,53,5,213,0,10,0,13,0,99,64,13,3,0,12,149,1,129, + 6,9,3,5,0,9,14,16,220,196,212,196,49,0,47,60,244,236,57,57,48,64,21,13,17,0,6,0,6,17,5,13,5,12,17,3,8,3,8,17, + 9,10,9,66,75,83,88,7,16,1,237,7,16,1,237,7,16,1,237,7,16,1,237,64,20,11,9,12,13,5,10,9,12,0,6,7,0,6,8,3, + 4,3,8,13,5,15,15,15,15,89,34,19,53,33,21,9,1,35,9,1,35,1,55,1,33,118,4,149,254,40,2,2,240,254,118,254,117,240,2,2, + 121,1,84,253,87,5,43,170,154,253,127,253,70,2,23,253,233,2,186,163,1,206,0,0,0,2,0,67,0,0,5,56,5,213,0,10,0,13,0,99, + 64,13,3,0,12,149,7,5,129,2,0,7,3,5,14,16,220,196,212,196,49,0,47,228,50,236,57,57,48,64,21,13,17,0,6,0,6,17,5,13, + 5,12,17,3,8,3,8,17,9,10,9,66,75,83,88,7,16,1,237,7,16,1,237,7,16,1,237,7,16,1,237,64,20,11,9,12,13,5,10,9, + 12,0,6,7,0,6,8,3,4,3,8,13,5,15,15,15,15,89,34,37,21,33,53,9,1,51,9,1,51,1,7,1,33,5,14,251,107,1,204,253, + 254,240,1,139,1,138,240,253,254,120,254,171,2,169,154,154,170,2,113,2,186,253,233,2,23,253,70,163,254,50,0,0,0,3,0,64,0,0,4,213, + 5,213,0,2,0,5,0,15,0,106,64,17,12,15,1,149,13,129,10,7,3,149,9,17,15,7,10,12,16,16,220,60,212,60,204,49,0,47,236,57, + 57,244,236,57,57,48,64,21,0,17,15,3,15,1,17,12,4,12,4,17,7,1,7,3,17,10,0,10,66,75,83,88,7,16,1,237,7,16,1,237, + 7,16,1,237,7,16,1,237,64,20,2,1,7,10,0,6,1,7,15,3,5,3,15,4,12,11,12,4,10,0,15,15,15,15,89,34,1,33,9,1, + 33,1,55,1,21,33,53,9,1,53,33,21,3,217,253,87,1,88,254,180,2,169,254,168,119,1,209,251,107,1,209,254,47,4,149,5,43,254,87,253, + 40,1,169,150,253,193,170,160,2,76,2,63,170,160,0,0,0,3,0,150,0,0,3,232,5,213,0,3,0,7,0,11,0,35,64,17,3,7,0,8, + 4,145,11,1,28,0,9,28,8,5,28,4,12,16,220,252,220,252,220,236,49,0,47,244,60,60,204,50,48,1,51,21,35,1,51,21,35,1,51,17, + 35,3,28,204,204,253,122,204,204,1,68,202,202,5,213,255,0,255,255,0,255,250,43,0,255,255,0,16,0,0,5,104,5,213,16,6,3,48,0,0, + 255,255,0,16,0,0,5,104,5,213,16,6,0,57,0,0,255,255,0,201,0,0,4,139,5,213,16,6,0,40,0,0,255,255,0,131,0,0,4,69, + 5,213,16,6,1,80,0,0,0,5,0,150,255,227,4,224,5,240,0,11,0,23,0,35,0,47,0,51,0,72,64,16,53,69,49,3,27,18,21,45, + 48,9,33,18,15,39,69,52,16,252,60,236,50,196,212,60,236,50,196,236,49,0,64,22,51,185,48,48,42,12,0,185,12,6,185,18,145,52,30,185, + 42,24,185,36,140,52,16,244,236,212,236,16,244,236,212,236,17,18,57,47,236,48,1,50,54,53,52,38,35,34,6,21,20,22,23,34,36,53,52,36, + 51,50,4,21,20,4,3,50,54,53,52,38,35,34,6,21,20,22,23,34,36,53,52,36,51,50,4,21,20,4,1,33,21,33,2,187,153,185,185,153, + 153,185,185,153,249,254,212,1,44,249,249,1,44,254,212,249,153,185,185,153,153,185,185,153,249,254,212,1,44,249,249,1,44,254,212,253,55,3,160,252, + 96,4,115,57,52,52,56,56,52,52,57,164,142,131,130,142,142,130,131,142,252,184,57,52,52,56,56,52,52,57,164,142,131,130,142,142,130,131,142,3, + 92,170,0,0,0,1,0,219,0,0,6,125,5,213,0,19,0,58,64,13,5,9,12,3,28,7,13,2,28,0,16,18,20,16,220,204,50,236,50,220, + 236,50,204,50,49,0,64,16,7,18,149,0,13,149,2,173,0,4,145,17,8,149,11,15,47,60,236,50,228,50,244,236,16,236,50,48,19,33,17,33, + 17,33,21,33,17,33,21,33,17,33,17,33,53,33,17,33,219,2,11,1,139,2,11,254,191,1,65,253,245,254,117,253,245,1,65,254,191,5,213,253, + 156,2,100,170,251,127,170,2,199,253,57,170,4,129,0,0,0,2,0,92,0,0,5,82,5,213,0,8,0,11,0,84,64,16,11,149,2,129,7,0, + 10,2,4,6,0,11,28,2,4,12,16,244,236,50,212,196,17,57,49,0,47,60,244,236,48,64,25,5,17,0,4,8,7,8,9,17,0,4,0,7, + 17,6,5,6,5,8,10,17,4,0,4,66,75,83,88,7,16,5,237,60,60,7,16,5,237,0,7,16,4,237,7,16,8,237,89,34,33,35,17,33, + 21,9,1,35,1,5,1,33,1,38,202,4,172,254,30,2,44,239,254,80,254,115,2,230,253,26,5,213,154,253,118,253,79,2,23,211,3,231,0,0, + 0,3,0,150,0,0,3,126,5,213,0,3,0,7,0,11,0,45,64,19,11,149,8,175,7,3,149,0,173,4,149,7,1,0,9,5,8,4,12,16, + 220,60,204,50,220,204,180,63,13,63,1,2,93,49,0,47,236,252,236,16,252,236,48,1,51,21,35,1,51,21,35,17,51,21,35,2,128,254,254,254, + 22,254,254,254,254,3,81,205,254,73,205,5,213,205,0,0,0,2,0,92,0,0,5,82,5,213,0,8,0,11,0,84,64,16,0,6,129,11,149,5, + 11,6,4,1,7,10,28,6,4,12,16,244,236,50,212,196,17,57,49,0,47,236,244,60,48,64,25,2,17,7,3,8,0,8,9,17,7,3,7,0, + 17,1,2,1,2,8,11,17,3,7,3,66,75,83,88,7,16,5,237,60,60,7,16,5,237,0,7,16,4,237,7,16,8,237,89,34,1,51,9,1, + 21,33,17,51,1,37,17,33,4,99,239,253,212,1,226,251,84,202,1,141,254,115,2,230,5,213,253,79,253,118,154,5,213,253,233,211,252,25,0,0, + 0,3,0,115,255,227,6,167,5,240,0,19,0,31,0,43,0,55,64,17,32,149,27,27,20,38,45,16,38,25,10,145,20,25,0,16,44,16,252,236, + 244,236,236,17,18,57,47,236,49,0,64,12,26,33,149,15,27,32,149,5,145,15,140,44,16,228,244,236,50,16,236,50,48,19,52,18,54,36,51,50, + 4,22,18,21,20,2,6,4,35,34,36,38,2,55,20,23,22,23,22,23,17,6,7,14,1,1,17,54,55,62,1,53,52,39,38,39,38,115,126,212, + 1,38,162,162,1,38,212,126,126,212,254,218,162,162,254,218,212,126,213,46,93,216,61,64,181,129,78,92,2,170,181,129,78,92,46,93,216,61,2,234, + 157,1,30,209,122,122,209,254,226,157,158,254,226,209,122,122,209,1,30,158,125,113,228,97,27,12,4,179,33,136,83,225,1,221,251,77,33,137,82,225, + 125,124,112,229,97,27,0,0,0,3,0,115,255,149,6,167,6,63,0,25,0,35,0,45,0,110,64,30,22,46,21,23,0,26,10,8,13,28,29,39, + 38,7,20,6,26,36,9,47,16,36,25,13,145,26,25,0,16,46,16,252,236,244,236,236,196,17,18,23,57,18,57,57,17,18,57,57,17,57,49,0, + 64,30,7,9,5,31,22,46,28,29,39,38,4,31,20,18,10,23,31,41,21,10,41,149,18,31,149,5,145,18,140,46,16,228,244,236,16,236,47,196, + 17,18,57,57,18,57,18,23,57,18,57,17,18,57,57,48,19,52,18,54,36,51,50,23,55,23,7,22,18,21,20,2,6,4,35,34,39,7,39,55, + 38,2,55,20,23,1,38,35,34,14,2,5,52,39,1,22,51,50,62,2,115,126,212,1,38,162,227,196,160,130,157,110,128,126,212,254,218,162,228,196, + 160,129,156,110,127,213,145,2,234,143,167,119,214,156,92,4,138,145,253,21,144,167,119,214,156,92,2,234,157,1,30,209,122,118,196,105,194,106,254,222, + 157,158,254,226,209,122,119,197,107,193,106,1,33,158,230,174,3,152,94,96,165,225,124,229,175,252,103,94,96,165,225,0,0,4,0,150,0,0,1,148, + 5,213,0,3,0,7,0,11,0,15,0,46,64,23,7,149,4,3,149,0,8,149,11,12,149,0,175,15,13,9,5,1,12,8,4,0,16,16,220,60, + 60,60,204,50,50,50,49,0,47,228,236,220,236,16,236,220,236,48,19,51,21,35,21,51,21,35,21,51,21,35,21,51,21,35,150,254,254,254,254,254, + 254,254,254,5,213,205,223,205,225,205,225,205,0,1,0,41,0,0,4,225,5,213,0,7,0,58,64,9,7,175,1,5,9,7,1,5,8,16,220,220, + 196,204,49,0,47,60,228,48,64,20,3,17,0,7,4,2,17,1,0,1,0,3,7,17,6,4,17,5,6,5,7,1,16,237,16,237,50,50,7,16, + 237,8,16,237,9,1,35,9,1,35,1,51,2,178,2,46,232,254,93,254,186,230,3,127,232,2,186,253,70,2,30,253,226,5,213,0,0,1,0,201, + 0,0,5,59,5,213,0,11,0,45,64,13,13,4,3,28,6,2,28,11,7,28,10,4,12,16,252,252,220,252,220,252,252,49,0,64,10,0,145,5, + 7,149,2,11,173,9,5,47,60,244,60,236,16,228,48,1,51,17,33,17,35,17,33,17,35,17,33,2,157,202,1,212,202,253,34,202,1,212,5,213, + 253,156,252,143,2,199,253,57,3,113,0,0,0,1,0,62,0,0,5,60,5,213,0,14,0,129,64,12,3,28,4,4,7,0,15,7,9,0,13,15, + 16,212,196,220,196,196,17,18,57,47,236,49,180,128,0,127,13,2,93,0,64,6,6,3,0,175,12,9,47,60,236,50,50,48,75,176,66,80,88,64, + 20,10,17,9,8,9,12,17,13,14,13,6,17,7,8,7,1,17,0,14,0,5,7,16,236,7,16,236,7,16,236,7,16,236,64,15,8,1,9,12, + 7,11,12,7,10,0,14,13,6,0,10,15,15,15,64,10,5,17,8,8,7,2,17,14,0,14,7,0,16,237,7,0,16,237,89,19,51,1,17,51, + 17,1,51,9,1,35,9,1,35,1,130,218,1,19,202,1,11,216,254,32,2,0,216,254,92,254,88,218,2,22,5,213,254,100,1,156,254,115,1,141, + 253,51,252,248,2,123,253,133,3,29,0,0,0,4,0,150,0,0,3,162,5,213,0,3,0,7,0,11,0,15,0,49,64,20,15,7,149,12,4,175, + 8,0,149,11,3,5,1,4,0,13,9,12,8,16,16,220,60,204,50,220,60,204,50,180,63,5,63,1,2,93,49,0,47,60,236,50,244,60,236,50, + 48,37,51,21,35,17,51,21,35,1,51,21,35,17,51,21,35,2,164,254,254,254,254,253,242,254,254,254,254,205,205,5,213,205,251,197,205,5,213,205, + 0,2,0,92,0,0,5,8,5,213,0,2,0,9,0,55,64,16,2,149,5,129,8,149,4,1,5,9,6,0,28,5,4,10,16,244,236,212,196,17, + 57,49,0,47,236,244,236,48,64,9,0,17,8,1,17,7,8,7,66,75,83,88,7,16,5,237,4,16,237,89,34,9,1,33,1,33,17,33,21,1, + 33,1,38,2,230,253,26,3,226,251,84,4,172,252,156,3,100,1,68,3,231,250,213,5,213,154,251,111,0,3,0,150,2,104,4,146,3,104,0,3, + 0,7,0,11,0,36,64,17,3,7,11,0,4,8,13,1,28,0,5,28,4,9,28,8,12,16,220,236,220,236,220,236,204,49,0,47,60,60,204,50, + 50,48,1,51,17,35,1,51,17,35,1,51,17,35,3,198,204,204,254,104,204,204,254,104,204,204,3,104,255,0,1,0,255,0,1,0,255,0,0,0, + 255,255,0,201,0,0,4,139,5,213,16,6,3,55,0,0,0,1,0,111,0,0,3,150,5,213,0,11,0,33,64,16,11,3,149,0,175,4,8,149, + 7,5,1,3,28,0,8,9,47,204,50,252,204,50,49,0,47,236,50,244,236,50,48,19,33,21,33,17,33,21,33,53,33,17,33,111,3,38,254,211, + 1,46,252,218,1,45,254,210,5,213,170,251,127,170,170,4,129,0,0,0,0,1,0,111,255,226,7,49,5,240,0,47,0,44,64,22,15,33,149,20, + 28,145,9,39,149,44,4,140,48,49,30,42,36,25,12,18,6,48,16,204,50,220,236,220,50,204,49,0,16,228,50,236,50,244,60,236,50,48,1,6, + 7,6,33,34,39,53,22,51,32,0,17,16,0,33,34,7,53,54,51,32,23,22,23,54,55,54,33,50,23,21,38,35,32,0,17,16,0,33,50,55, + 21,6,35,32,39,38,3,208,37,52,194,254,172,128,114,109,121,1,0,1,16,254,240,255,0,121,109,114,128,1,79,199,52,37,37,52,194,1,84,128, + 114,109,121,255,0,254,240,1,16,1,0,121,109,114,128,254,178,200,52,1,42,66,54,208,33,175,42,1,58,1,39,1,40,1,56,41,175,32,207,54, + 65,66,54,207,32,175,41,254,200,254,216,254,217,254,198,42,175,33,208,54,0,2,0,111,0,0,5,204,5,213,0,27,0,31,0,80,64,19,11,7, + 9,13,5,28,16,31,4,17,29,1,28,22,26,24,20,0,32,16,212,60,60,204,50,236,50,50,212,60,60,252,60,60,204,50,49,0,64,20,9,28, + 24,149,6,2,27,0,10,29,23,149,13,17,20,4,0,175,15,19,47,60,228,50,220,60,60,236,50,50,16,220,60,60,236,50,50,48,1,51,17,33, + 17,51,17,33,21,33,17,33,21,33,17,35,17,33,17,35,17,33,53,33,17,33,53,33,23,17,33,17,1,145,202,1,146,202,1,21,254,235,1,21, + 254,235,202,254,110,202,254,222,1,34,254,222,1,34,202,1,146,5,213,254,120,1,136,254,120,170,254,142,170,254,121,1,135,254,121,1,135,170,1,114, + 170,170,254,142,1,114,0,0,255,255,0,201,0,0,5,51,5,213,16,6,3,172,0,0,0,1,0,204,0,0,4,136,5,213,0,7,0,28,64,14, + 4,149,1,175,5,149,0,6,2,5,28,0,4,8,16,252,236,196,50,49,0,47,236,252,236,48,51,17,33,21,33,17,33,21,204,3,188,253,14,2, + 242,5,213,170,251,127,170,0,255,255,0,201,0,0,1,147,5,213,16,6,0,44,0,0,0,1,0,111,0,0,5,204,5,213,0,19,0,55,64,12, + 7,3,5,9,1,28,18,14,12,16,0,20,16,47,60,60,204,50,252,60,60,204,50,49,0,64,14,16,5,149,2,19,0,6,15,149,9,12,0,175, + 11,47,228,220,60,236,50,16,220,60,236,50,48,1,51,17,33,21,33,17,33,21,33,17,35,17,33,53,33,17,33,53,33,2,191,202,2,67,253,189, + 2,67,253,189,202,253,176,2,80,253,176,2,80,5,213,254,120,170,254,142,170,254,121,1,135,170,1,114,170,0,0,0,0,2,0,201,0,0,1,149, + 5,213,0,3,0,7,0,55,64,12,7,0,4,175,2,5,1,28,4,0,4,8,16,252,75,176,16,84,88,185,0,0,0,64,56,89,50,236,50,49, + 0,47,236,204,204,48,1,64,13,48,9,64,9,80,9,96,9,143,9,159,9,6,93,55,51,21,35,19,51,17,35,201,204,204,2,202,202,205,205,5, + 213,251,166,0,0,1,0,159,255,227,5,164,5,213,0,28,0,62,64,24,21,15,149,26,4,149,7,145,26,140,29,20,25,21,18,25,7,23,12,25, + 6,0,16,29,16,252,196,236,212,196,236,212,236,49,0,16,228,244,236,16,236,196,48,64,6,4,17,8,9,8,66,75,83,88,7,16,1,237,89,34, + 19,52,18,55,1,33,53,33,21,1,14,1,21,20,22,51,50,54,53,52,39,51,22,21,20,4,33,32,36,159,190,187,2,16,252,164,4,172,253,120, + 183,197,219,201,226,213,203,191,225,254,187,254,185,254,206,254,185,1,195,159,1,4,119,1,78,170,170,254,101,116,228,119,150,164,136,136,179,206,224,161, + 206,230,249,0,0,4,0,99,255,227,4,173,5,240,0,11,0,23,0,35,0,47,0,57,64,14,49,69,3,27,18,21,45,9,33,18,15,39,69,48, + 16,252,60,236,50,212,60,236,50,236,49,0,64,16,0,185,12,6,185,18,145,48,30,185,42,24,185,36,140,48,16,244,236,212,236,16,244,236,212,236, + 48,1,50,54,53,52,38,35,34,6,21,20,22,23,34,36,53,52,36,51,50,4,21,20,4,3,50,54,53,52,38,35,34,6,21,20,22,23,34,36, + 53,52,36,51,50,4,21,20,4,2,136,153,183,183,153,153,183,183,153,249,254,212,1,44,249,249,1,44,254,212,249,153,183,183,153,153,183,183,153,249, + 254,212,1,44,249,249,1,44,254,212,4,26,80,73,73,80,80,73,73,80,164,165,152,151,166,166,151,152,165,253,17,80,73,73,80,80,73,73,80,164, + 166,151,152,165,165,152,151,166,0,2,0,115,255,227,6,167,5,240,0,19,0,39,0,40,64,11,41,16,30,25,10,145,20,25,0,16,40,16,252,236, + 244,236,236,49,0,64,10,25,149,15,35,149,5,145,15,140,40,16,228,244,236,16,236,48,19,52,18,54,36,51,50,4,22,18,21,20,2,6,4,35, + 34,36,38,2,55,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2,115,126,212,1,38,162,162,1,38,212,126,126,212,254,218,162,162,254,218,212, + 126,213,92,156,214,119,119,214,156,92,92,156,214,119,119,214,156,92,2,234,157,1,30,209,122,122,209,254,226,157,158,254,226,209,122,122,209,1,30,158, + 125,225,165,96,96,165,225,125,124,225,165,96,96,165,225,0,0,2,0,115,255,145,6,167,5,240,0,22,0,44,0,80,64,24,15,14,10,31,32,33, + 30,13,16,6,23,35,14,46,16,35,25,10,145,23,25,0,16,45,16,252,236,244,236,236,196,17,18,23,57,18,57,57,49,0,64,22,15,18,32,31, + 33,30,16,13,6,40,28,15,28,149,18,40,149,5,145,18,140,45,16,228,244,236,16,236,192,17,18,23,57,18,57,48,19,52,18,54,36,51,50,4, + 22,18,21,20,2,7,23,7,39,6,35,34,36,38,2,55,20,30,2,51,50,55,1,55,1,54,53,52,46,2,35,34,14,2,115,126,212,1,38,162, + 162,1,38,212,126,127,108,162,129,167,196,229,162,254,218,212,126,213,92,156,214,119,167,144,254,145,131,1,106,144,92,156,214,119,119,214,156,92,2,234, + 158,1,30,208,122,122,208,254,226,158,158,254,224,105,199,107,202,119,122,208,1,30,158,124,226,164,96,94,1,190,106,254,73,174,229,124,226,164,96,96, + 164,226,0,0,0,1,0,201,0,0,5,59,5,213,0,11,0,45,64,13,13,4,6,28,4,8,28,11,2,28,0,4,12,16,252,252,220,252,220,252, + 252,49,0,64,10,5,1,145,10,11,8,149,3,173,10,47,244,236,50,16,228,50,48,19,17,51,17,33,17,51,17,33,17,35,17,201,202,2,222,202, + 254,44,202,2,100,3,113,253,57,2,199,252,143,253,156,2,100,0,0,0,0,3,0,201,0,0,1,199,5,213,0,3,0,7,0,11,0,40,64,20, + 11,149,8,175,7,3,149,0,173,4,149,7,13,9,1,5,0,4,8,12,16,220,60,60,220,60,60,204,49,0,47,236,252,236,16,252,236,48,19,51, + 21,35,17,51,21,35,17,51,21,35,201,254,254,254,254,254,254,3,81,205,254,73,205,5,213,205,0,0,0,5,0,150,0,0,5,104,5,213,0,3, + 0,7,0,11,0,15,0,19,0,63,64,27,19,1,149,2,16,175,15,11,149,8,173,12,6,149,5,15,3,7,2,6,9,8,13,17,12,16,20,16, + 220,60,204,50,220,204,220,60,204,50,182,63,7,63,3,63,9,3,93,49,0,47,60,236,50,252,236,16,252,60,236,50,48,1,35,53,51,17,35,53, + 51,1,51,21,35,1,51,21,35,17,51,21,35,5,104,254,254,254,254,253,24,254,254,254,22,254,254,254,254,5,8,205,250,43,205,2,132,205,254,73, + 205,5,213,205,0,3,0,115,255,227,6,167,5,240,0,19,0,39,0,43,0,62,64,16,45,16,10,41,40,40,20,30,25,10,145,20,25,0,16,44, + 16,252,236,244,236,17,57,47,204,16,236,178,47,41,1,93,49,0,64,14,43,206,40,173,25,149,15,35,149,5,145,15,140,44,16,228,244,236,16,236, + 244,236,48,1,19,52,18,54,36,51,50,4,22,18,21,20,2,6,4,35,34,36,38,2,55,20,30,2,51,50,62,2,53,52,46,2,35,34,14,2, + 5,51,21,35,115,126,212,1,38,162,162,1,38,212,126,126,212,254,218,162,162,254,218,212,126,213,92,156,214,119,119,214,156,92,92,156,214,119,119,214, + 156,92,1,198,254,254,2,234,157,1,30,209,122,122,209,254,226,157,158,254,226,209,122,122,209,1,30,158,125,225,165,96,96,165,225,125,124,225,165,96, + 96,165,225,21,205,0,0,0,0,2,0,115,255,228,6,167,6,62,0,22,0,44,0,80,64,24,9,8,13,37,36,35,38,10,7,6,23,33,8,46, + 16,33,25,13,145,23,25,0,16,45,16,252,236,244,236,236,196,17,18,23,57,18,57,57,49,0,64,22,8,5,10,7,35,38,36,37,6,40,28,8, + 28,149,18,40,149,5,145,18,140,45,16,228,244,236,16,236,196,17,18,23,57,18,57,48,19,52,18,54,36,51,50,23,55,23,7,22,18,21,20,2, + 6,4,35,34,36,38,2,55,20,30,2,51,50,62,2,53,52,39,1,39,1,38,35,34,14,2,115,126,212,1,38,162,228,196,160,131,158,110,127,126, + 212,254,218,162,162,254,218,212,126,213,92,156,214,119,119,214,156,92,144,254,148,130,1,112,144,167,119,214,156,92,2,234,158,1,30,208,122,118,196,105, + 194,107,254,224,158,158,254,226,208,122,122,208,1,30,158,124,226,164,96,96,164,226,124,229,174,254,63,108,1,198,94,96,164,226,0,0,0,3,0,115, + 255,227,5,114,5,239,0,37,0,49,0,61,0,71,64,16,56,38,25,14,24,30,8,25,44,50,48,19,25,0,16,62,16,252,236,244,60,236,50,220, + 60,236,50,49,0,64,23,47,149,27,59,149,11,53,11,27,41,4,22,16,22,149,35,16,149,3,145,35,140,62,16,228,244,236,16,236,17,18,23,57, + 47,236,47,236,48,19,16,0,33,32,23,30,1,21,20,6,35,34,38,53,52,55,32,0,17,16,0,33,38,53,52,54,51,50,22,21,20,6,7,6, + 33,32,0,5,20,22,51,50,54,53,52,38,35,34,6,19,52,38,35,34,6,21,20,22,51,50,54,115,1,134,1,83,1,147,95,32,20,153,133,132, + 153,24,254,254,254,251,1,5,1,2,24,153,132,133,153,20,32,95,254,109,254,173,254,122,3,153,44,28,28,44,44,28,28,44,144,44,28,28,44,44, + 28,28,44,2,233,1,103,1,159,115,39,79,59,129,145,145,129,72,54,254,190,254,226,254,226,254,190,54,72,129,145,145,129,59,79,39,115,1,159,122, + 60,49,49,60,59,50,50,3,135,60,49,49,60,59,47,47,0,1,0,100,0,0,5,192,5,213,0,11,0,35,64,17,5,8,149,2,11,173,0,175, + 7,3,5,2,28,10,8,11,12,16,212,60,196,252,60,196,49,0,47,228,244,60,236,50,48,1,51,17,33,21,33,17,35,17,33,53,33,2,173,202, + 2,73,253,183,202,253,183,2,73,5,213,253,106,170,253,107,2,149,170,0,255,255,0,61,0,0,5,59,5,213,16,6,0,59,0,0,0,3,0,115, + 255,227,5,114,5,239,0,51,0,63,0,75,0,102,64,25,25,24,27,149,21,30,30,31,70,52,25,14,37,43,8,25,54,58,48,31,20,25,0,16, + 76,16,252,236,50,244,60,236,50,220,60,236,50,17,57,47,60,252,60,204,49,0,64,31,23,28,20,24,149,30,26,61,149,40,73,149,11,26,67,11, + 40,55,5,35,16,35,149,49,16,149,3,145,49,140,76,16,228,244,236,16,236,17,18,23,57,47,236,47,236,47,60,236,50,204,196,48,19,16,0,33, + 32,23,30,1,21,20,6,35,34,38,53,52,55,34,7,6,21,51,17,51,21,51,21,35,21,35,17,35,20,23,22,51,38,53,52,54,51,50,22,21, + 20,14,1,7,6,33,32,0,5,20,22,51,50,54,53,52,38,35,34,6,19,52,38,35,34,6,21,20,22,51,50,54,115,1,134,1,83,1,147,95, + 32,20,153,133,132,153,24,238,151,127,187,204,233,233,204,187,127,151,238,24,153,132,133,153,20,65,59,133,254,239,254,173,254,122,3,153,44,28,28,44, + 44,28,28,44,144,44,28,28,44,44,28,28,44,2,233,1,103,1,159,115,39,79,59,129,145,145,129,72,54,162,138,223,0,255,255,170,255,0,255,223, + 138,162,54,72,129,145,145,129,59,79,79,23,52,1,159,122,60,49,49,60,59,50,50,3,135,60,49,49,60,59,47,47,0,1,0,201,0,0,4,139, + 5,213,0,19,0,59,64,28,14,11,149,4,2,149,0,129,16,149,8,4,173,18,5,14,149,11,8,9,1,17,15,3,28,0,4,20,16,252,236,50, + 212,196,196,220,60,236,50,49,0,47,236,50,236,244,236,16,238,50,48,178,31,20,1,1,93,19,33,21,33,17,33,17,51,21,51,21,35,21,35,17, + 33,17,33,21,33,201,3,176,253,26,1,17,204,234,234,204,254,239,2,248,252,62,5,213,170,254,70,0,255,255,170,255,0,255,253,227,170,0,0,0, + 255,255,0,16,0,0,5,104,5,213,16,6,3,41,0,0,0,1,0,201,0,0,5,59,5,213,0,7,0,31,64,16,6,2,129,4,149,0,9,4, + 5,28,0,4,28,1,4,8,16,252,236,212,236,236,49,0,47,236,244,60,48,41,1,17,51,17,33,17,51,5,59,251,142,202,2,222,202,5,213,250, + 213,5,43,0,0,1,0,201,0,0,4,121,5,213,0,8,0,61,64,12,66,7,3,149,4,129,1,5,1,4,4,9,16,252,60,212,49,0,47,244, + 236,50,48,75,83,88,64,18,8,17,2,2,1,7,17,3,3,2,8,17,2,0,17,1,2,1,5,7,16,236,16,236,7,16,236,8,16,236,89,33, + 35,9,1,53,33,21,33,1,1,177,232,1,223,254,33,3,176,253,56,1,223,2,192,2,107,170,170,253,154,0,0,0,0,1,0,115,0,0,5,219, + 5,213,0,35,0,79,64,22,37,16,6,15,25,7,14,2,36,16,33,24,25,32,25,19,10,2,28,20,29,1,47,60,60,236,50,50,212,60,236,50, + 236,16,212,60,236,50,236,49,0,64,18,0,3,149,29,10,32,1,6,129,15,21,18,149,28,11,25,20,15,47,60,60,212,60,236,50,16,244,60,60, + 212,60,236,50,48,1,17,51,17,50,54,53,51,16,0,35,17,50,0,17,35,52,38,35,17,35,17,34,6,21,35,16,0,51,17,34,0,17,51,20, + 22,2,194,202,138,242,211,254,135,214,214,1,121,211,242,138,202,138,242,211,1,121,214,214,254,135,211,242,4,43,1,170,254,86,226,200,254,238,254,186, + 254,219,254,186,254,238,200,226,254,86,1,170,226,200,1,18,1,70,1,37,1,70,1,18,200,226,0,0,0,1,0,201,0,0,3,246,5,213,0,6, + 0,46,64,11,3,0,175,6,1,3,4,28,0,4,7,16,252,75,176,16,84,88,185,0,0,0,64,56,89,236,196,196,49,0,47,236,196,48,180,2, + 17,3,3,4,7,1,16,237,19,33,1,35,1,17,35,201,1,26,2,19,222,254,117,196,5,213,253,45,2,29,250,225,0,1,0,115,0,0,5,219, + 5,213,0,43,0,102,64,26,22,45,16,29,16,25,28,17,12,44,16,1,7,38,25,6,39,32,24,20,12,28,35,43,3,11,47,60,60,60,236,50, + 50,50,212,60,236,50,196,236,16,212,60,236,50,236,196,49,0,64,26,24,43,185,21,1,1,42,3,13,10,149,20,3,16,11,6,129,29,32,35,149, + 25,42,39,34,29,47,60,60,212,60,236,50,16,244,60,60,212,60,236,50,17,18,57,47,60,236,50,48,1,53,33,53,34,0,17,51,20,22,51,17, + 51,17,50,54,53,51,16,0,35,21,33,21,33,21,50,0,17,35,52,38,35,17,35,17,34,6,21,35,16,0,51,53,1,1,1,193,214,254,135,211, + 242,138,202,138,242,211,254,135,214,1,191,254,65,214,1,121,211,242,138,202,138,242,211,1,121,214,2,149,170,62,1,70,1,18,200,226,1,170,254,86, + 226,200,254,238,254,186,62,170,61,254,186,254,238,200,226,254,86,1,170,226,200,1,18,1,70,61,0,0,0,1,0,54,4,45,3,233,5,213,0,7, + 0,23,64,9,6,2,4,1,0,5,4,1,8,16,220,204,220,204,49,0,47,204,196,50,48,1,33,17,51,17,33,17,51,3,233,252,77,143,2,149, + 143,4,45,1,168,254,251,1,5,0,0,0,0,3,0,143,255,227,3,172,5,211,0,23,0,27,0,36,0,0,1,51,17,54,55,54,55,21,14,1, + 35,34,38,53,52,54,63,1,62,1,55,62,1,53,19,35,53,51,3,17,7,14,1,21,20,23,22,1,243,191,31,33,89,97,94,193,103,184,223,72, + 90,88,47,39,8,6,6,197,203,203,197,45,57,51,66,36,4,66,252,83,8,13,35,67,188,57,56,194,159,76,137,86,86,47,53,25,21,60,52,1, + 14,254,250,190,1,173,44,53,94,49,89,55,31,0,0,0,255,255,0,217,0,159,5,219,3,50,16,38,12,193,0,0,16,7,13,74,2,19,254,87, + 0,1,0,176,3,58,2,88,6,20,0,5,0,0,19,33,21,35,17,35,176,1,168,240,184,6,20,143,253,181,0,0,0,1,0,199,3,58,2,111, + 6,20,0,5,0,0,1,35,53,33,17,35,1,182,239,1,168,185,5,133,143,253,38,0,0,1,0,176,254,242,2,88,1,204,0,5,0,0,5,51, + 21,33,17,51,1,104,240,254,88,184,127,143,2,218,0,0,0,1,0,199,254,242,2,111,1,204,0,5,0,0,1,33,53,51,17,51,2,111,254,88, + 239,185,254,242,143,2,75,0,255,255,0,147,0,0,3,176,5,240,16,6,5,77,0,0,255,255,0,170,254,188,6,130,5,213,16,39,23,123,0,0, + 252,54,16,6,23,123,0,0,255,255,0,170,254,188,6,130,5,213,16,39,23,130,0,0,252,54,16,6,23,130,0,0,255,255,0,170,254,188,6,130, + 5,213,16,39,23,126,0,0,252,54,16,6,23,128,0,0,255,255,0,170,254,188,6,130,5,213,16,39,23,128,0,0,252,54,16,6,23,129,0,0, + 255,255,0,170,254,188,6,130,5,213,16,39,23,123,0,0,252,54,16,6,23,128,0,0,255,255,0,170,254,188,6,130,5,213,16,38,23,123,0,0, + 16,7,23,128,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,39,23,128,0,0,252,54,16,6,23,130,0,0,255,255,0,170,254,188,6,130, + 5,213,16,38,23,128,0,0,16,7,23,130,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,39,23,123,0,0,252,54,16,6,23,127,0,0, + 255,255,0,170,254,188,6,131,5,213,16,38,23,123,0,0,16,7,23,124,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,130,0,0, + 16,7,23,123,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,39,23,130,0,0,252,54,16,6,23,123,0,0,255,255,0,170,254,188,6,130, + 5,213,16,38,23,123,0,0,16,7,23,125,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,39,23,123,0,0,252,54,16,6,23,125,0,0, + 255,255,0,170,254,188,6,130,5,213,16,38,23,130,0,0,16,7,23,129,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,126,0,0, + 16,7,23,130,0,0,252,54,255,255,0,170,254,188,6,131,5,213,16,39,23,126,0,0,252,54,16,6,23,124,0,0,255,255,0,170,254,188,6,130, + 5,213,16,39,23,127,0,0,252,54,16,6,23,129,0,0,255,255,0,170,254,188,6,131,5,213,16,39,23,124,0,0,252,54,16,6,23,130,0,0, + 255,255,0,170,254,188,6,130,5,213,16,38,23,127,0,0,16,7,23,130,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,39,23,126,0,0, + 252,54,16,6,23,125,0,0,255,255,0,170,254,188,6,130,5,213,16,38,23,129,0,0,16,7,23,125,0,0,252,54,255,255,0,170,254,188,6,130, + 5,213,16,38,23,129,0,0,16,7,23,130,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,39,23,126,0,0,252,54,16,6,23,130,0,0, + 255,255,0,170,254,188,6,130,5,213,16,39,23,126,0,0,252,54,16,6,23,123,0,0,255,255,0,170,254,188,6,130,5,213,16,38,23,129,0,0, + 16,7,23,123,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,129,0,0,16,7,23,126,0,0,252,54,255,255,0,170,254,188,6,131, + 5,213,16,38,23,124,0,0,16,7,23,127,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,128,0,0,16,7,23,128,0,0,252,54, + 255,255,0,170,254,188,6,130,5,213,16,38,23,125,0,0,16,7,23,125,0,0,252,54,255,255,0,170,254,188,6,131,5,213,16,38,23,124,0,0, + 16,7,23,129,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,126,0,0,16,7,23,127,0,0,252,54,255,255,0,170,254,188,6,130, + 5,213,16,39,23,129,0,0,252,54,16,6,23,123,0,0,255,255,0,170,254,188,6,130,5,213,16,38,23,126,0,0,16,7,23,123,0,0,252,54, + 255,255,0,170,254,188,6,130,5,213,16,39,23,130,0,0,252,54,16,6,23,125,0,0,255,255,0,170,254,188,6,130,5,213,16,38,23,130,0,0, + 16,7,23,125,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,127,0,0,16,7,23,125,0,0,252,54,255,255,0,170,254,188,6,131, + 5,213,16,38,23,125,0,0,16,7,23,124,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,128,0,0,16,7,23,129,0,0,252,54, + 255,255,0,170,254,188,6,130,5,213,16,39,23,128,0,0,252,54,16,6,23,126,0,0,255,255,0,170,254,188,6,131,5,213,16,38,23,129,0,0, + 16,7,23,124,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,127,0,0,16,7,23,126,0,0,252,54,255,255,0,170,254,188,6,131, + 5,213,16,38,23,124,0,0,16,7,23,123,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,123,0,0,16,7,23,127,0,0,252,54, + 255,255,0,170,254,188,6,131,5,213,16,38,23,124,0,0,16,7,23,130,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,130,0,0, + 16,7,23,127,0,0,252,54,255,255,0,170,254,188,6,131,5,213,16,39,23,128,0,0,252,54,16,6,23,124,0,0,255,255,0,170,254,188,6,130, + 5,213,16,38,23,128,0,0,16,7,23,127,0,0,252,54,255,255,0,170,254,188,6,131,5,213,16,38,23,124,0,0,16,7,23,125,0,0,252,54, + 255,255,0,170,254,188,6,130,5,213,16,38,23,125,0,0,16,7,23,127,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,126,0,0, + 16,7,23,126,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,129,0,0,16,7,23,129,0,0,252,54,255,255,0,170,254,188,6,130, + 5,213,16,38,23,127,0,0,16,7,23,129,0,0,252,54,255,255,0,170,254,188,6,131,5,213,16,38,23,126,0,0,16,7,23,124,0,0,252,54, + 255,255,0,170,254,188,6,130,5,213,16,38,23,126,0,0,16,7,23,125,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,125,0,0, + 16,7,23,129,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,127,0,0,16,7,23,127,0,0,252,54,255,255,0,170,254,188,6,131, + 5,213,16,38,23,124,0,0,16,7,23,124,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,127,0,0,16,7,23,128,0,0,252,54, + 255,255,0,170,254,188,6,131,5,213,16,38,23,128,0,0,16,7,23,124,0,0,252,54,255,255,0,170,254,188,6,131,5,213,16,38,23,127,0,0, + 16,7,23,124,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,38,23,126,0,0,16,7,23,129,0,0,252,54,255,255,0,170,254,188,6,130, + 5,213,16,38,23,128,0,0,16,7,23,125,0,0,252,54,255,255,0,170,254,188,6,130,5,213,16,39,23,128,0,0,252,54,16,6,23,125,0,0, + 255,255,0,201,0,0,4,236,5,213,18,6,0,37,0,0,255,255,0,201,0,0,4,141,5,213,18,6,0,51,0,0,0,2,0,70,0,0,4,10, + 5,213,0,8,0,19,0,0,37,17,35,34,6,21,20,22,51,5,33,34,36,53,52,36,59,1,17,51,3,64,254,141,154,154,141,1,200,254,56,251, + 254,255,1,1,251,254,202,166,2,49,146,135,134,146,166,227,219,221,226,2,88,0,0,0,255,255,0,201,0,0,5,176,5,213,18,6,0,39,0,0, + 255,255,255,250,0,0,4,233,5,213,18,6,0,55,0,0,0,1,255,250,0,0,4,233,5,213,0,7,0,0,41,1,53,33,17,51,17,33,4,233, + 251,17,2,18,203,2,18,170,5,43,250,213,255,255,0,115,255,227,5,139,5,240,18,6,0,42,0,0,255,255,0,201,0,0,5,106,5,213,18,6, + 0,46,0,0,0,1,255,213,0,0,4,118,5,213,0,10,0,0,33,35,17,1,33,9,1,33,1,17,51,4,118,202,253,98,254,252,2,229,252,230, + 1,10,2,205,202,2,119,253,137,2,184,3,29,253,49,2,207,0,0,0,255,255,0,0,255,227,3,79,5,213,18,6,23,2,0,0,255,255,0,115, + 255,227,5,39,5,240,18,6,0,38,0,0,255,255,0,115,255,227,5,39,5,240,18,6,1,72,0,0,255,255,0,92,0,0,5,31,5,213,18,6, + 0,61,0,0,255,255,0,201,0,0,4,35,5,213,18,6,0,41,0,0,255,255,0,201,0,0,4,35,5,213,18,6,11,196,0,0,255,255,0,201, + 0,0,6,31,5,213,18,6,0,48,0,0,255,255,0,201,0,0,5,51,5,213,18,6,0,49,0,0,255,255,0,201,0,0,4,106,5,213,18,6, + 0,47,0,0,255,255,0,135,255,227,4,162,5,240,18,6,0,54,0,0,255,255,0,201,0,0,5,84,5,213,18,6,0,53,0,0,0,2,0,59, + 0,0,4,198,5,213,0,19,0,27,0,0,1,46,1,39,3,51,19,30,1,59,1,17,51,17,33,32,38,53,52,54,1,17,35,34,6,16,22,51, + 2,2,65,123,62,205,217,191,74,139,120,220,202,254,56,255,0,252,131,2,119,254,146,149,149,146,3,25,22,144,126,1,152,254,129,150,98,2,119,250, + 43,214,216,141,186,253,177,2,18,135,254,250,133,0,0,0,255,255,0,16,0,0,5,104,5,213,18,6,2,7,0,0,255,255,0,16,0,0,5,104, + 5,213,18,6,0,57,0,0,255,255,0,201,0,0,5,59,5,213,18,6,0,43,0,0,255,255,0,163,255,227,5,187,5,240,18,6,11,211,0,0, + 0,1,0,201,0,0,4,24,5,242,0,15,0,0,1,21,46,1,35,34,6,21,17,35,17,16,54,51,50,22,4,24,91,194,104,143,113,202,211,247, + 96,190,5,152,236,81,81,149,203,252,18,3,238,1,26,234,44,0,0,0,255,255,0,68,0,0,7,166,5,213,18,6,0,58,0,0,255,255,0,61, + 0,0,5,59,5,213,18,6,0,59,0,0,255,255,255,252,0,0,4,231,5,213,18,6,0,60,0,0,0,3,0,145,0,0,4,180,5,213,0,8, + 0,17,0,32,0,0,1,17,33,34,6,21,20,22,51,1,17,33,34,6,21,20,22,51,5,33,34,38,53,52,54,55,46,1,53,52,36,51,33,3, + 234,254,188,163,157,157,163,1,68,254,213,148,145,145,148,1,245,253,252,231,250,128,124,149,165,1,16,251,2,24,3,12,2,35,135,139,140,133,253,154, + 1,194,111,114,113,112,166,192,177,137,162,20,32,203,152,200,218,0,0,0,255,255,0,16,0,0,5,104,5,213,18,6,0,36,0,0,255,255,0,16, + 0,0,5,104,5,213,18,6,17,227,0,0,255,255,0,201,0,0,4,139,5,213,18,6,0,40,0,0,0,1,0,131,0,0,4,69,5,213,0,11, + 0,0,41,1,53,33,17,33,53,33,17,33,53,33,4,69,252,80,2,230,253,57,2,199,253,8,3,194,170,1,186,170,2,29,170,0,255,255,0,201, + 0,0,1,147,5,213,18,6,0,44,0,0,255,255,0,115,255,227,5,217,5,240,18,6,0,50,0,0,255,255,0,178,255,227,5,41,5,213,18,6, + 0,56,0,0,0,1,0,178,0,0,5,41,5,242,0,17,0,42,64,9,10,28,8,56,17,28,0,65,18,16,252,75,176,16,84,88,185,0,0,255, + 192,56,89,236,252,236,49,0,181,13,149,4,145,9,0,47,60,244,236,48,51,17,16,0,33,32,0,25,1,35,17,52,38,35,34,6,21,17,178,1, + 33,1,27,1,26,1,33,203,174,194,195,174,3,164,1,36,1,42,254,214,254,220,252,92,3,139,240,211,211,240,252,117,255,255,0,8,0,0,3,169, + 5,213,18,6,11,212,0,0,0,2,0,115,0,0,5,90,5,213,0,8,0,17,0,31,64,9,0,28,10,50,4,25,14,16,18,16,252,236,244,236, + 49,0,182,0,149,9,129,7,149,11,47,236,244,236,48,1,35,32,0,17,16,0,33,51,19,17,33,32,0,17,16,0,33,4,144,244,254,203,254,225, + 1,31,1,53,244,202,254,97,254,80,254,104,1,150,1,178,5,47,254,233,254,212,254,210,254,232,5,47,250,43,1,106,1,130,1,128,1,105,0,0, + 0,1,0,175,0,0,1,183,1,62,0,3,0,0,19,33,17,33,175,1,8,254,248,1,62,254,194,0,0,1,0,146,254,192,1,183,1,62,0,6, + 0,0,19,33,17,3,35,19,35,175,1,8,164,129,164,135,1,62,254,194,254,192,1,64,255,255,0,175,0,0,4,22,1,62,16,39,18,191,2,95, + 0,0,16,6,18,191,0,0,255,255,0,175,254,192,4,22,1,62,16,39,18,192,2,95,0,0,16,6,18,191,0,0,0,2,0,146,254,192,1,183, + 4,35,0,6,0,10,0,0,19,33,17,3,35,19,35,17,33,17,33,175,1,8,164,129,164,135,1,8,254,248,1,62,254,194,254,192,1,64,4,35, + 254,194,0,0,0,2,0,175,0,0,1,183,4,35,0,3,0,7,0,0,19,33,17,33,17,33,17,33,175,1,8,254,248,1,8,254,248,1,62,254, + 194,4,35,254,194,0,0,0,0,2,0,175,0,0,4,5,2,214,0,3,0,7,0,0,1,33,17,33,1,33,21,33,2,253,1,8,254,248,253,178, + 3,86,252,170,1,62,254,194,2,214,168,0,0,2,0,175,1,96,4,5,3,162,0,3,0,7,0,0,19,33,21,33,21,33,21,33,175,3,86,252, + 170,3,86,252,170,3,162,168,240,170,0,0,255,255,0,114,255,227,4,141,5,240,16,6,1,105,0,0,255,255,0,100,255,227,3,188,4,123,16,6, + 1,106,0,0,255,255,0,201,0,0,2,198,5,213,16,6,1,88,0,0,255,255,0,166,0,0,2,110,4,96,16,6,2,43,0,0,0,1,0,118, + 255,227,8,250,5,41,0,52,0,62,64,21,48,49,44,28,0,24,23,4,10,15,42,36,30,6,0,54,28,28,19,69,53,16,252,236,204,204,23,57, + 212,204,16,236,212,204,49,0,64,12,36,149,10,42,30,149,4,15,140,48,23,53,16,204,50,244,50,236,50,220,236,48,1,20,7,6,35,34,39,38, + 39,38,35,34,15,1,6,35,34,39,38,53,52,55,54,55,51,6,7,6,21,16,33,50,55,54,55,54,51,50,23,22,23,22,51,32,17,52,39,38, + 39,51,22,23,22,8,250,102,116,234,91,110,97,96,122,120,122,123,194,110,91,234,116,102,67,71,111,249,126,91,85,1,0,138,93,76,75,102,157,155, + 100,75,74,93,138,1,0,85,91,126,250,111,70,67,1,254,242,139,158,68,64,64,68,68,128,68,157,139,242,198,226,236,152,107,243,226,182,254,186,54, + 51,51,54,54,51,51,54,1,70,182,226,243,107,152,236,226,0,1,0,152,255,227,7,161,3,197,0,33,0,60,64,19,33,0,31,8,2,14,13,4, + 9,29,18,4,2,35,16,8,11,69,34,16,252,236,204,204,23,57,212,204,16,236,212,204,49,0,64,12,23,169,7,29,18,169,4,9,140,33,13,34, + 16,204,50,244,50,236,50,220,236,48,1,18,17,16,33,34,36,34,4,35,32,17,16,19,51,2,21,16,51,50,55,54,55,54,50,23,22,23,22,51, + 50,17,52,3,7,23,138,254,114,84,254,213,240,254,212,82,254,114,138,198,146,208,62,73,120,21,100,252,100,20,121,73,63,208,146,3,197,254,227,254, + 235,254,80,226,226,1,177,1,20,1,29,254,185,250,254,251,56,91,12,55,55,12,91,56,1,7,248,1,71,0,0,0,255,255,0,60,0,0,7,114, + 5,213,16,38,3,190,0,0,16,7,0,44,5,223,0,0,255,255,0,62,0,0,6,138,4,123,16,38,3,222,0,0,16,7,0,243,5,17,0,0, + 0,2,0,115,255,227,7,208,5,240,0,9,0,28,0,0,0,32,0,17,16,0,32,0,17,16,23,33,17,51,17,35,17,33,2,0,33,32,0,17, + 16,0,33,32,0,4,1,254,72,254,255,1,1,1,184,1,3,210,1,48,202,202,254,208,14,254,152,254,197,254,198,254,136,1,120,1,58,1,59,1, + 104,5,76,254,184,254,229,254,230,254,184,1,72,1,26,1,27,197,2,150,250,43,2,149,254,232,254,102,1,165,1,97,1,98,1,165,254,103,0,0, + 0,2,0,112,255,227,5,251,4,123,0,10,0,28,0,0,1,34,6,21,20,22,51,50,54,16,38,1,51,17,51,17,35,17,35,6,0,35,34,0, + 17,16,0,32,18,2,114,147,172,172,147,149,171,172,1,104,213,184,184,208,9,254,249,241,240,254,238,1,18,1,224,249,3,223,233,199,200,232,231,1, + 146,231,254,194,1,191,251,160,2,9,248,254,210,1,57,1,19,1,20,1,56,254,228,0,0,2,0,211,0,0,7,191,5,213,0,15,0,18,0,0, + 1,51,1,35,3,33,3,35,19,33,17,35,17,51,17,33,9,1,33,4,161,229,2,57,210,136,253,95,136,213,252,254,58,202,202,2,7,1,111,254, + 238,2,37,5,213,250,43,1,127,254,129,2,149,253,107,5,213,253,106,1,207,253,25,0,0,2,0,193,255,227,6,4,4,123,0,34,0,45,0,0, + 1,17,35,53,14,1,35,34,38,53,52,55,33,17,35,17,51,17,33,54,51,33,53,52,38,35,34,6,7,53,62,1,51,50,22,1,34,6,21,20, + 22,51,50,54,61,1,6,4,184,63,188,136,172,203,47,254,248,184,184,1,210,106,149,1,2,167,151,96,182,84,101,190,90,243,240,254,145,223,172,129, + 111,153,185,2,127,253,129,170,102,97,193,162,115,80,253,247,4,96,254,65,34,18,127,139,46,46,170,39,39,252,254,180,102,123,98,115,217,180,41,0, + 0,2,0,101,254,191,8,8,5,213,0,18,0,26,0,0,55,54,55,18,25,1,33,21,33,17,51,17,35,17,35,33,17,35,17,1,33,21,16,3, + 6,7,33,172,134,38,97,6,79,253,41,170,170,202,252,168,170,4,2,254,27,112,23,40,2,148,170,63,120,1,52,2,38,1,26,170,251,127,254,21, + 1,65,254,191,1,235,4,129,212,254,13,254,181,68,43,0,0,2,0,107,254,229,6,231,4,96,0,18,0,25,0,0,55,54,55,54,17,53,33,21, + 33,17,51,17,35,17,35,33,17,35,17,1,33,21,16,15,1,33,176,91,40,98,5,82,253,163,147,147,185,253,45,147,3,102,254,125,118,29,2,22, + 147,40,85,211,1,169,212,147,252,198,254,82,1,27,254,229,1,174,3,58,140,254,100,220,54,0,0,0,0,1,0,84,0,0,8,17,5,213,0,17, + 0,0,51,53,54,55,54,17,53,33,21,33,17,35,17,33,21,16,3,6,84,221,58,87,6,79,253,41,202,254,27,102,98,170,48,163,246,2,100,254, + 170,250,213,5,43,184,253,202,254,248,253,0,0,1,0,76,0,0,6,209,4,96,0,18,0,0,51,53,54,55,54,17,53,33,21,33,17,43,1,17, + 33,21,16,7,6,76,187,51,68,5,83,253,163,1,184,254,123,88,94,153,29,125,166,1,208,183,147,252,51,3,205,111,254,80,194,207,0,1,0,201, + 0,0,8,246,5,213,0,15,0,0,19,33,9,1,33,21,33,17,43,1,17,1,35,1,17,35,201,1,45,1,125,1,127,4,4,253,41,197,5,254, + 132,203,254,127,196,5,213,252,8,3,248,170,250,213,5,18,252,13,4,0,250,225,0,0,0,1,0,186,0,0,7,172,4,96,0,14,0,0,19,33, + 9,1,33,21,33,17,35,17,1,35,1,17,35,186,1,13,1,62,1,63,3,104,253,163,185,254,203,184,254,202,185,4,96,253,18,2,238,147,252,51, + 3,176,253,39,2,217,252,80,255,255,0,115,255,227,5,217,5,240,16,39,0,121,1,226,0,0,16,6,0,50,0,0,255,255,0,113,255,227,4,117, + 4,123,16,38,0,82,0,0,16,7,0,121,1,46,255,132,0,4,0,115,255,227,6,101,5,240,0,3,0,7,0,19,0,29,0,0,1,51,21,35, + 37,51,21,35,18,32,39,38,16,55,54,32,23,22,16,7,0,32,0,17,16,0,32,0,17,16,2,49,211,211,1,164,211,211,241,253,76,208,207,207, + 208,2,180,208,207,207,254,200,254,26,254,224,1,32,1,230,1,32,3,70,254,254,254,253,155,210,210,2,196,211,210,210,211,253,60,210,4,151,254,184, + 254,229,254,230,254,184,1,72,1,26,1,27,0,4,0,113,255,227,5,67,4,123,0,3,0,7,0,18,0,30,0,0,1,51,21,35,37,51,21,35, + 3,34,6,16,22,51,50,54,53,52,38,39,32,0,17,16,0,33,32,0,17,16,0,1,188,211,211,1,104,211,211,74,195,227,225,197,194,227,227,194, + 1,32,1,73,254,183,254,224,254,223,254,184,1,72,2,202,254,254,254,2,19,231,254,110,231,232,200,199,233,156,254,200,254,236,254,237,254,199,1,57, + 1,19,1,20,1,56,0,0,255,255,0,115,255,227,10,106,5,240,16,38,19,28,0,0,16,39,0,121,6,114,0,0,16,7,0,121,1,226,0,0, + 255,255,0,113,255,227,7,182,4,123,16,39,0,121,4,111,255,132,16,39,0,121,1,46,255,132,16,6,19,29,0,0,0,15,0,58,254,87,6,206, + 5,241,0,3,0,7,0,11,0,15,0,19,0,23,0,31,0,39,0,47,0,55,0,63,0,71,0,79,0,128,0,132,0,0,37,51,21,35,37,51, + 21,35,1,51,21,35,37,51,21,35,1,51,21,35,37,51,21,35,0,34,6,20,22,50,54,52,18,34,6,20,22,50,54,52,36,34,6,20,22,50, + 54,52,18,34,6,20,22,50,54,52,36,34,6,20,22,50,54,52,0,34,6,20,22,50,54,52,36,34,6,20,22,50,54,52,19,50,22,21,20,6, + 43,1,22,21,20,6,32,39,38,39,6,7,6,32,38,53,52,55,34,35,34,38,53,52,54,59,1,38,53,52,54,32,23,22,23,54,55,54,32,22, + 21,20,7,1,51,21,35,4,74,134,134,253,239,134,134,2,17,134,134,253,239,134,134,254,248,134,134,4,34,134,134,252,123,180,105,105,180,104,160,180, + 105,105,180,104,1,169,180,105,105,180,104,161,180,105,105,180,104,253,134,180,105,105,180,104,254,144,180,105,105,180,104,1,169,180,105,105,180,104,71,141, + 171,171,141,4,52,171,254,227,85,22,15,15,21,85,254,226,169,51,2,1,143,171,171,143,2,50,169,1,30,85,21,15,15,22,85,1,29,171,52,253, + 175,134,134,22,156,156,156,5,73,156,156,156,254,70,156,156,156,1,93,142,247,142,142,247,2,228,143,246,142,142,246,143,143,246,142,142,246,254,57,142, + 247,142,142,247,142,142,247,142,142,247,254,55,142,247,142,142,247,142,142,247,142,142,247,3,82,204,172,169,204,92,133,171,203,100,27,29,29,25,102,202, + 172,133,92,202,171,172,204,90,133,171,204,101,26,29,29,26,101,204,171,133,90,254,210,156,0,1,255,250,254,102,6,16,5,213,0,29,0,0,3,33, + 21,33,17,33,50,23,22,21,17,16,6,43,1,53,51,50,55,54,53,17,52,38,35,33,17,35,17,33,6,4,239,253,238,1,161,186,113,109,204,228, + 76,62,134,56,55,124,124,254,136,203,253,238,5,213,170,254,70,119,114,238,254,206,254,242,244,170,75,75,194,1,34,159,158,253,57,5,43,0,0,0, + 0,1,0,60,254,86,5,72,4,96,0,31,0,0,19,33,21,33,17,51,32,23,22,21,17,20,7,6,43,1,53,51,50,55,54,53,17,52,39,38, + 35,33,17,35,17,33,60,4,49,254,66,250,1,7,70,82,82,81,181,193,172,110,33,38,38,44,139,254,252,181,254,66,4,96,147,254,170,71,81,229, + 254,242,213,97,96,156,48,55,147,1,8,166,36,41,254,25,3,205,0,0,0,1,255,250,0,0,4,233,5,213,0,15,0,0,3,33,21,33,17,20, + 22,59,1,21,35,34,38,25,1,33,6,4,239,253,238,109,134,63,77,227,205,253,238,5,213,170,252,215,194,150,170,244,1,14,3,41,0,1,0,60, + 0,0,4,109,4,96,0,17,0,0,19,33,21,33,17,20,23,22,59,1,21,35,34,39,38,53,17,33,60,4,49,254,70,35,35,109,88,110,182,80, + 83,254,69,4,96,147,253,190,145,46,48,156,96,98,212,2,55,0,0,0,0,1,0,175,0,0,4,179,5,213,0,23,0,42,64,11,25,8,28,6, + 19,12,0,28,15,4,24,16,252,236,50,204,212,236,204,49,0,64,10,2,149,11,173,21,149,18,129,7,14,47,60,244,236,244,236,48,1,21,33,50, + 22,21,17,35,17,52,38,35,33,17,35,17,52,54,51,33,21,35,34,6,1,122,1,161,186,222,201,124,124,254,136,203,163,181,1,9,224,105,77,4, + 63,206,233,238,254,102,1,138,159,158,253,57,4,63,214,192,156,97,0,0,255,255,0,186,0,0,4,100,6,20,16,6,2,40,0,0,0,2,0,214, + 0,0,3,29,5,88,0,3,0,7,0,0,19,51,21,35,1,17,51,17,214,170,170,1,191,136,5,88,136,251,48,5,88,250,168,0,0,2,0,214, + 0,0,3,29,5,88,0,3,0,7,0,0,19,51,21,35,1,17,51,17,214,170,170,1,191,136,4,36,136,252,100,5,88,250,168,0,0,2,0,214, + 0,0,3,29,5,88,0,3,0,7,0,0,19,51,21,35,1,17,51,17,214,170,170,1,191,136,2,240,136,253,152,5,88,250,168,0,0,2,0,214, + 0,0,3,29,5,88,0,3,0,7,0,0,19,51,21,35,1,17,51,17,214,170,170,1,191,136,1,188,136,254,204,5,88,250,168,0,0,2,0,214, + 0,0,3,29,5,88,0,3,0,7,0,0,55,51,21,35,1,51,17,35,214,170,170,1,191,136,136,136,136,5,88,250,168,0,0,0,0,2,0,214, + 0,0,3,29,5,88,0,3,0,7,0,0,1,51,21,35,1,35,17,51,2,115,170,170,254,235,136,136,5,88,136,251,48,5,88,0,0,2,0,214, + 0,0,3,29,5,88,0,3,0,7,0,0,1,51,21,35,1,35,17,51,2,115,170,170,254,235,136,136,4,36,136,252,100,5,88,0,0,2,0,214, + 0,0,3,29,5,88,0,3,0,7,0,0,1,51,21,35,1,35,17,51,2,115,170,170,254,235,136,136,2,240,136,253,152,5,88,0,0,2,0,214, + 0,0,3,29,5,88,0,3,0,7,0,0,1,51,21,35,1,35,17,51,2,115,170,170,254,235,136,136,1,188,136,254,204,5,88,0,0,2,0,214, + 0,0,3,29,5,88,0,3,0,7,0,0,37,51,21,35,33,35,17,51,2,115,170,170,254,235,136,136,136,136,5,88,0,1,0,214,0,0,3,29, + 5,88,0,5,0,0,33,35,17,33,21,33,1,94,136,2,71,254,65,5,88,136,0,0,0,1,0,214,0,0,3,29,5,88,0,7,0,0,33,35, + 17,51,17,33,21,33,1,94,136,136,1,191,254,65,5,88,254,204,136,0,0,1,0,214,0,0,3,29,5,88,0,7,0,0,33,35,17,51,17,33, + 21,33,1,94,136,136,1,191,254,65,5,88,253,152,136,0,0,1,0,214,0,0,3,29,5,88,0,7,0,0,33,35,17,51,17,33,21,33,1,94, + 136,136,1,191,254,65,5,88,252,100,136,0,0,1,0,214,0,0,3,29,5,88,0,5,0,0,37,33,21,33,17,51,1,94,1,191,253,185,136,136, + 136,5,88,0,0,1,0,102,2,156,2,142,5,228,0,9,0,0,1,51,23,7,39,17,35,17,7,39,1,94,57,247,76,146,107,147,76,5,228,221, + 67,131,253,85,2,171,131,67,0,1,0,102,2,152,2,142,5,224,0,9,0,0,1,35,39,55,23,17,51,17,55,23,1,151,57,248,76,147,107,146, + 76,2,152,221,67,131,2,171,253,85,131,67,0,2,0,195,2,156,1,67,5,224,0,3,0,9,0,0,19,51,21,35,17,51,17,7,35,39,195,128, + 128,128,13,102,13,3,42,142,3,68,254,145,200,200,0,0,0,2,0,195,2,156,1,67,5,224,0,3,0,9,0,0,1,35,53,51,17,35,17,55, + 51,23,1,67,128,128,128,12,102,14,5,82,142,252,188,1,111,200,200,0,255,255,0,195,0,0,1,67,3,68,16,7,18,248,0,0,253,100,0,0, + 0,1,0,137,0,0,2,205,5,212,0,16,0,0,51,53,32,2,33,53,32,2,33,53,32,19,22,7,22,19,18,207,1,74,20,254,182,1,74,30, + 254,162,2,29,14,9,174,184,6,10,163,2,39,163,1,197,162,254,140,229,99,109,254,251,254,90,0,0,0,1,0,137,0,0,2,145,4,96,0,16, + 0,0,51,53,32,2,33,53,32,2,33,53,32,19,22,7,22,23,18,187,1,44,20,254,212,1,44,30,254,212,1,225,14,8,132,143,6,10,153,1, + 124,153,1,26,152,254,232,158,77,89,188,254,184,0,0,0,0,1,0,115,1,203,3,74,5,240,0,9,0,0,1,16,23,7,2,53,16,33,21,32, + 1,45,117,164,139,2,215,253,227,3,205,254,254,210,46,1,49,212,2,32,219,0,0,0,0,1,0,115,0,86,3,74,4,123,0,9,0,0,1,16, + 23,7,2,53,16,33,21,32,1,45,117,164,139,2,215,253,227,2,88,254,254,210,46,1,49,212,2,32,189,0,0,0,0,1,0,201,254,102,5,59, + 5,213,0,19,0,0,19,51,17,33,17,51,17,16,6,43,1,53,51,50,54,53,17,33,17,35,201,202,2,222,202,205,227,77,63,134,110,253,34,202, + 5,213,253,156,2,100,250,147,254,242,244,170,150,194,2,95,253,57,0,0,0,1,0,186,254,86,4,100,6,20,0,28,0,0,1,52,38,35,34,6, + 21,17,35,17,51,17,62,1,51,50,22,21,17,20,6,43,1,53,51,50,55,54,53,3,172,124,124,149,172,185,185,66,179,117,193,198,163,181,70,49, + 110,33,38,2,158,159,158,190,164,253,135,6,20,253,158,101,100,239,232,253,72,214,192,156,48,56,146,0,0,1,255,250,254,76,6,141,5,213,0,42, + 0,0,3,33,21,33,21,33,21,1,50,23,22,23,22,21,20,7,6,33,34,39,38,39,53,22,23,22,51,50,55,54,53,52,39,38,43,1,53,1, + 33,17,35,17,33,6,4,239,253,238,3,94,254,101,105,129,99,85,81,152,152,254,232,115,129,130,130,106,127,126,137,192,99,100,92,93,165,174,1,129, + 253,158,203,253,238,5,213,170,203,154,254,22,56,43,108,104,138,220,122,121,19,19,36,195,49,25,25,75,75,143,134,73,74,152,1,234,252,74,5,43, + 0,1,0,55,254,76,5,52,5,158,0,48,0,0,1,50,23,22,23,22,21,20,4,33,34,39,38,39,53,30,1,51,50,55,54,53,52,39,38,43, + 1,53,1,33,17,20,22,59,1,21,35,34,38,53,17,35,53,51,17,51,17,33,21,3,65,105,129,99,85,81,254,208,254,232,94,99,100,106,84,200, + 109,190,99,100,92,91,167,174,1,174,253,106,75,115,189,189,213,162,135,135,185,3,101,1,220,56,43,108,104,138,221,242,18,19,37,195,49,50,75,75, + 143,132,75,74,166,1,243,253,164,137,78,154,159,210,2,96,143,1,62,254,194,168,0,0,255,255,0,164,255,227,4,123,5,240,16,6,1,82,0,0, + 0,1,0,133,254,103,3,200,4,124,0,49,0,0,1,38,39,38,53,52,55,54,51,50,22,23,21,38,39,38,35,34,7,6,21,20,23,22,59,1, + 21,35,34,7,6,21,20,23,22,51,50,55,54,55,21,6,7,6,35,34,36,53,52,54,1,139,112,60,60,114,113,196,76,170,98,97,80,81,71,129, + 59,70,68,67,116,155,148,137,72,78,84,85,151,97,81,85,71,90,84,85,80,238,254,254,138,1,172,32,86,85,123,186,104,104,26,38,182,45,20,21, + 62,72,109,109,70,69,152,77,85,133,136,85,85,28,28,56,190,37,19,18,240,229,143,193,0,1,0,186,0,0,3,126,4,96,0,9,0,0,19,33, + 21,33,17,33,21,33,17,35,186,2,196,253,246,1,213,254,43,186,4,96,148,254,211,148,253,245,0,0,255,255,0,111,255,227,3,199,4,123,16,6, + 0,86,0,0,0,3,0,16,0,0,9,238,5,213,0,15,0,18,0,21,0,0,1,51,9,1,51,1,35,3,33,3,43,1,3,33,3,35,9,1, + 33,9,1,33,2,74,229,1,208,1,209,229,2,57,210,136,253,95,136,3,210,136,253,95,136,213,2,172,254,238,2,37,3,115,254,238,2,37,5,213, + 251,62,4,194,250,43,1,127,254,129,1,127,254,129,5,14,253,25,2,231,253,25,0,0,0,4,0,123,255,227,7,39,4,123,0,10,0,53,0,64, + 0,77,0,0,1,34,6,21,20,22,51,50,54,61,1,37,17,35,53,14,1,35,34,39,21,35,53,14,1,35,34,38,53,52,54,51,33,53,52,38, + 35,34,6,7,53,62,1,51,50,23,48,23,53,62,1,51,50,22,1,34,6,21,20,22,51,50,54,61,1,1,22,23,54,51,33,53,52,38,35,34, + 7,6,2,190,223,172,129,111,153,185,3,178,184,63,188,136,110,81,184,63,188,136,172,203,253,251,1,2,167,151,96,182,84,101,190,90,243,120,18,101, + 190,90,243,240,254,145,223,172,129,111,153,185,253,136,53,1,121,199,1,2,167,151,96,91,65,2,51,102,123,98,115,217,180,41,76,253,129,170,102,97, + 39,10,170,102,97,193,162,189,192,18,127,139,46,46,170,39,39,126,20,68,39,39,252,254,180,102,123,98,115,217,180,41,1,104,110,166,60,18,127,139, + 23,16,0,0,0,3,0,16,255,227,9,45,5,240,0,19,0,22,0,32,0,0,1,51,19,54,55,54,33,32,0,17,16,0,33,32,39,38,39,33, + 3,35,9,1,33,0,32,0,17,16,0,32,0,17,16,2,74,229,184,45,112,188,1,59,1,58,1,120,254,136,254,198,254,197,188,80,46,253,103,136, + 213,2,172,254,238,2,37,3,136,254,72,254,253,1,3,1,184,1,1,5,213,254,30,174,125,210,254,91,254,158,254,159,254,91,210,88,114,254,129,5, + 14,253,25,3,37,254,184,254,229,254,230,254,184,1,72,1,26,1,27,0,0,3,0,123,255,227,7,123,4,123,0,34,0,45,0,56,0,0,1,50, + 0,17,16,0,32,39,38,39,14,2,35,34,38,53,52,54,51,33,53,52,38,35,34,6,7,53,62,1,51,32,23,54,1,34,6,21,20,22,51,50, + 54,61,1,1,34,6,16,22,51,50,54,53,52,38,5,121,240,1,18,254,238,254,31,136,55,33,18,96,140,178,177,204,253,251,1,2,167,151,96,182, + 84,101,190,90,1,42,113,138,254,79,223,172,129,111,153,185,2,4,148,172,171,149,147,172,172,4,123,254,200,254,236,254,237,254,199,157,62,82,69,135, + 97,193,162,189,192,18,127,139,46,46,170,39,39,189,189,253,184,102,123,98,115,217,180,41,1,172,231,254,110,231,232,200,199,233,0,0,0,2,0,16, + 255,227,8,113,5,213,0,2,0,22,0,0,9,1,33,1,51,1,22,33,50,54,53,17,51,17,16,0,33,32,3,39,33,3,35,2,188,254,238,2, + 37,254,123,229,1,188,74,1,1,194,174,203,254,223,254,230,254,115,118,37,253,95,136,213,5,14,253,25,3,174,251,114,192,211,240,3,139,252,92,254, + 220,254,214,1,52,104,254,129,0,2,0,123,255,227,7,31,4,123,0,40,0,51,0,0,37,14,1,35,34,38,53,52,54,51,33,53,52,38,35,34, + 6,7,53,62,1,51,50,22,17,21,20,22,51,50,54,53,17,51,17,35,53,14,1,35,32,1,34,6,21,20,22,51,50,54,61,1,3,147,72,162, + 178,177,203,253,251,1,2,167,151,96,182,84,101,190,90,243,240,124,124,149,173,184,184,67,177,117,254,229,254,219,223,172,129,111,153,185,223,141,111,193, + 162,189,192,18,127,139,46,46,170,39,39,252,255,0,190,159,159,190,164,2,123,251,160,172,102,99,2,80,102,123,98,115,217,180,41,0,0,2,0,16, + 0,0,7,180,5,213,0,2,0,13,0,0,9,1,33,19,3,33,3,35,1,51,9,1,51,1,2,188,254,238,2,37,199,136,253,95,136,213,2,58, + 229,1,220,1,215,210,253,199,5,14,253,25,253,217,1,127,254,129,5,213,251,31,4,225,250,43,0,0,0,2,0,123,255,227,6,78,4,123,0,10, + 0,40,0,0,1,34,6,21,20,22,51,50,54,61,1,17,53,14,1,35,34,38,53,52,54,51,33,53,52,38,35,34,6,7,53,62,1,51,50,22, + 25,1,1,51,1,2,190,223,172,129,111,153,185,63,188,136,172,203,253,251,1,2,167,151,96,182,84,101,190,90,243,240,1,94,195,254,92,2,51,102, + 123,98,115,217,180,41,253,205,170,102,97,193,162,189,192,18,127,139,46,46,170,39,39,252,255,0,254,53,3,172,251,160,0,3,0,16,0,0,7,180, + 5,213,0,2,0,18,0,21,0,0,9,1,41,2,21,33,3,35,3,33,3,35,1,51,1,51,1,51,1,35,23,2,188,254,238,2,37,2,126,1, + 103,254,89,146,229,136,253,95,136,213,2,58,229,1,103,233,1,99,210,253,139,105,53,5,14,253,25,168,254,129,1,127,254,129,5,213,252,82,3,174, + 251,170,139,0,0,3,0,123,255,227,6,78,4,123,0,34,0,45,0,48,0,0,33,53,14,1,35,34,38,53,52,54,51,33,53,52,38,35,34,6, + 7,53,62,1,51,50,23,22,23,51,19,51,3,51,21,35,3,1,34,6,21,20,22,51,50,54,61,1,33,35,17,3,117,63,188,136,172,203,253,251, + 1,2,167,151,96,182,84,101,190,90,243,120,103,15,198,154,195,155,155,209,211,254,20,223,172,129,111,153,185,1,71,143,170,102,97,193,162,189,192,18, + 127,139,46,46,170,39,39,126,109,205,1,157,254,99,144,253,205,2,51,102,123,98,115,217,180,41,254,129,0,2,0,16,254,86,7,155,5,213,0,2, + 0,24,0,0,9,1,33,1,6,7,6,43,1,53,51,50,55,54,63,1,3,33,3,35,1,51,9,1,51,2,188,254,238,2,37,1,108,75,77,74, + 124,216,171,76,42,43,50,19,136,253,95,136,213,2,58,229,1,207,1,203,210,5,14,253,25,253,113,198,63,61,170,36,37,133,50,1,127,254,129,5, + 213,251,64,4,192,0,0,0,0,2,0,123,254,86,6,78,4,123,0,39,0,50,0,0,33,53,14,1,35,34,38,53,52,54,51,33,53,52,38,35, + 34,6,7,53,62,1,51,50,22,25,1,1,51,1,14,1,43,1,53,51,50,54,63,1,1,34,6,21,20,22,51,50,54,61,1,3,117,63,188,136, + 172,203,253,251,1,2,167,151,96,182,84,101,190,90,243,240,1,94,195,254,20,78,148,124,147,108,76,84,51,26,254,244,223,172,129,111,153,185,170,102, + 97,193,162,189,192,18,127,139,46,46,170,39,39,252,255,0,254,119,3,106,251,56,200,122,154,72,134,66,2,51,102,123,98,115,217,180,41,0,0,0, + 255,255,0,115,255,227,5,39,5,240,16,6,3,147,0,0,255,255,0,127,255,227,3,245,4,123,16,6,3,25,0,0,0,1,0,10,0,0,5,106, + 5,213,0,18,0,0,19,51,21,51,21,35,17,1,33,9,1,33,1,17,35,17,35,53,51,201,202,191,191,2,158,1,4,253,27,3,26,254,246,253, + 51,202,191,191,5,213,185,170,254,236,2,119,253,72,252,227,2,207,253,49,4,114,170,0,0,1,0,14,0,0,4,164,6,20,0,18,0,0,19,51, + 21,33,21,33,17,1,51,9,1,35,1,17,35,17,35,53,51,194,185,1,34,254,222,2,37,235,253,174,2,107,240,253,199,185,180,180,6,20,172,164, + 253,185,1,227,253,244,253,172,2,35,253,221,4,196,164,0,0,1,0,201,0,0,5,102,5,213,0,9,0,0,19,17,51,17,55,17,33,21,33,17, + 201,202,252,2,215,252,95,2,173,3,40,253,94,77,253,42,170,2,250,0,0,1,0,193,0,0,2,99,6,20,0,7,0,0,19,17,51,17,55,17, + 35,17,193,184,234,184,2,156,3,120,253,5,73,252,158,2,229,0,0,0,0,1,0,83,0,0,4,156,5,213,0,13,0,0,19,51,21,51,21,35, + 17,33,21,33,17,35,53,51,251,202,168,168,2,215,252,95,168,168,5,213,224,164,252,89,170,4,81,164,0,1,0,120,0,0,2,242,6,20,0,11, + 0,0,1,51,17,51,21,35,17,35,17,35,53,51,1,89,184,225,225,184,225,225,6,20,254,226,164,251,174,4,82,164,0,3,0,10,255,227,6,106, + 5,240,0,21,0,29,0,37,0,0,1,32,23,22,19,51,21,35,2,7,6,33,32,39,38,3,35,53,51,18,55,54,4,32,7,6,7,33,38,39, + 19,33,22,23,22,32,55,54,3,59,1,58,188,161,23,129,126,11,176,188,254,198,254,197,188,177,11,126,129,23,162,188,2,23,254,72,129,106,20,3, + 180,19,105,127,252,70,10,119,129,1,184,129,118,5,240,210,181,254,227,144,254,190,196,211,210,196,1,67,144,1,29,181,210,164,164,134,214,214,134,254, + 20,250,151,164,164,151,0,0,0,3,0,10,255,227,5,142,4,123,0,21,0,30,0,39,0,0,1,50,23,22,23,51,21,35,6,7,6,35,34,39, + 38,39,35,53,51,54,55,54,23,34,7,6,7,33,38,39,38,19,33,22,23,22,51,50,55,54,2,205,240,137,111,21,196,192,10,126,137,240,241,136, + 126,10,194,198,21,111,136,241,148,86,63,17,2,115,17,63,86,171,253,131,8,76,86,149,147,86,77,4,123,156,126,205,144,244,144,157,157,144,244,144, + 205,126,156,156,115,85,131,129,85,117,254,37,171,103,115,116,103,0,0,0,0,3,0,115,255,227,10,106,5,240,0,26,0,36,0,46,0,0,1,32, + 23,22,23,54,55,54,33,32,0,17,16,0,33,32,39,38,39,6,7,6,33,32,0,16,0,4,32,0,17,16,0,32,0,17,16,0,32,0,17,16, + 0,32,0,17,16,3,39,1,58,188,47,35,35,46,189,1,59,1,58,1,120,254,136,254,198,254,197,189,46,36,35,46,188,254,198,254,197,254,135,1, + 121,2,23,254,72,254,253,1,3,1,184,1,1,3,144,254,72,254,253,1,3,1,184,1,1,5,240,210,53,61,61,53,210,254,91,254,158,254,159,254, + 91,210,52,61,60,52,211,1,164,2,196,1,165,164,254,184,254,229,254,230,254,184,1,72,1,26,1,27,1,72,254,184,254,229,254,230,254,184,1,72, + 1,26,1,27,0,3,0,113,255,227,7,182,4,123,0,10,0,21,0,49,0,0,1,34,6,16,22,51,50,54,53,52,38,33,34,6,16,22,51,50, + 54,53,52,38,39,50,23,22,23,54,55,54,51,50,0,17,16,0,35,34,39,38,39,6,7,6,35,34,0,17,16,0,5,180,148,172,171,149,147,172, + 172,252,44,148,172,171,149,147,172,172,147,240,137,21,18,18,21,137,241,240,1,18,254,238,240,241,137,21,18,18,21,137,240,241,254,239,1,17,3,223, + 231,254,110,231,232,200,199,233,231,254,110,231,232,200,199,233,156,156,24,27,27,24,156,254,200,254,236,254,237,254,199,157,24,27,27,24,157,1,57,1, + 19,1,20,1,56,0,0,0,0,2,0,10,0,0,4,141,5,213,0,8,0,29,0,0,1,17,51,50,54,53,52,38,35,37,33,50,23,22,21,20, + 7,6,43,1,21,51,21,35,17,35,17,35,53,51,1,147,254,141,154,154,141,254,56,1,200,251,128,129,129,128,251,254,237,237,202,191,191,5,47,253, + 207,146,135,134,146,166,113,114,219,221,113,113,196,144,254,252,1,4,144,0,0,2,255,251,254,86,4,164,4,123,0,7,0,31,0,0,0,16,38,32, + 6,16,22,32,1,53,51,17,51,21,62,1,51,50,0,16,2,35,34,38,39,17,51,21,35,21,35,53,3,229,167,254,220,167,167,1,36,252,189,191, + 185,58,177,123,204,0,255,255,204,123,177,58,254,254,185,1,100,1,150,231,231,254,106,231,254,103,144,4,236,170,100,97,254,188,253,240,254,188,97,100, + 254,204,144,142,142,0,0,0,0,2,0,50,0,0,5,153,5,213,0,30,0,39,0,0,1,33,50,4,21,20,4,43,1,17,35,17,35,34,7,6, + 21,22,23,22,23,7,38,39,38,53,52,55,54,59,3,50,54,53,52,38,43,1,1,213,1,200,251,1,1,254,255,251,254,202,45,92,48,58,1,26, + 23,60,68,79,69,70,127,97,162,33,202,254,141,154,154,141,254,5,213,227,219,221,226,253,168,2,88,24,31,61,53,39,32,24,148,23,73,75,125,147, + 76,59,146,135,134,146,0,0,0,2,0,50,254,86,5,194,4,123,0,12,0,49,0,0,1,23,22,51,50,55,54,53,52,38,32,6,21,3,38,35, + 34,7,6,21,20,23,22,23,7,38,39,38,53,52,55,54,51,50,23,17,51,21,62,1,51,50,0,16,2,35,34,39,17,35,2,145,10,157,146,142, + 88,83,167,254,220,167,185,51,41,44,52,58,27,23,60,68,79,69,70,127,84,103,53,55,185,58,177,123,204,0,255,255,202,192,168,185,1,50,11,170, + 115,112,207,203,231,231,203,254,227,25,24,27,65,52,40,32,24,148,23,73,75,125,134,89,59,23,2,166,170,100,97,254,188,253,240,254,188,162,253,209, + 0,2,0,115,254,148,5,217,5,240,0,9,0,35,0,0,0,32,0,17,16,0,32,0,17,16,1,39,55,39,7,6,35,32,0,17,16,0,33,32, + 0,17,16,2,7,23,55,23,7,23,35,39,4,3,254,72,254,253,1,3,1,184,1,1,254,128,72,170,107,51,18,15,254,197,254,135,1,121,1,59, + 1,58,1,120,209,198,69,215,72,188,98,244,14,5,76,254,184,254,229,254,230,254,184,1,72,1,26,1,27,250,144,125,98,116,3,1,1,165,1,97, + 1,98,1,165,254,91,254,158,254,252,254,142,88,75,124,125,108,107,15,0,0,2,0,113,254,86,5,25,4,123,0,23,0,31,0,0,37,14,1,35, + 34,2,16,0,51,50,22,23,53,51,17,51,21,35,21,35,53,35,53,33,0,16,22,32,54,16,38,32,3,162,58,177,124,203,255,0,255,203,124,177, + 58,184,191,191,184,255,0,255,253,141,167,1,36,168,168,254,220,168,100,97,1,68,2,16,1,68,97,100,170,251,20,144,142,142,144,3,134,254,106,231, + 231,1,150,231,0,2,0,10,0,0,4,141,5,213,0,7,0,27,0,0,1,17,51,50,54,16,38,35,1,51,21,51,21,35,21,51,50,4,16,4, + 43,1,17,35,17,35,53,51,1,147,254,141,154,153,142,254,56,202,237,237,254,251,1,1,254,255,251,254,202,191,191,4,39,253,209,146,1,12,145,1, + 174,45,144,75,225,254,72,226,254,174,5,24,144,0,0,0,0,2,255,251,254,86,4,164,6,20,0,7,0,31,0,0,0,16,38,32,6,16,22,32, + 37,17,35,17,35,53,51,53,51,21,51,21,35,17,62,1,51,50,0,16,2,35,34,38,3,229,167,254,220,167,167,1,36,254,53,185,191,191,185,254, + 254,58,177,123,204,0,255,255,204,123,177,1,100,1,150,231,231,254,106,231,43,253,174,6,155,144,147,147,144,254,197,100,97,254,188,253,240,254,188,97, + 0,2,0,10,0,0,4,141,5,213,0,7,0,27,0,0,1,17,51,50,54,16,38,35,1,51,17,51,50,4,16,4,43,1,21,51,21,35,21,35, + 53,35,53,51,1,147,254,141,154,153,142,254,56,202,254,251,1,1,254,255,251,254,237,237,202,191,191,4,39,253,209,146,1,12,145,1,174,254,248,225, + 254,72,226,94,144,100,100,144,0,2,255,251,254,86,4,164,6,20,0,7,0,31,0,0,0,16,38,32,6,16,22,32,1,53,51,17,51,17,62,1, + 51,50,0,16,2,35,34,38,39,17,51,21,35,21,35,53,3,229,167,254,220,167,167,1,36,252,189,191,185,58,177,123,204,0,255,255,204,123,177,58, + 254,254,185,1,100,1,150,231,231,254,106,231,254,103,144,6,160,253,162,100,97,254,188,253,240,254,188,97,100,254,204,144,142,142,0,0,0,1,0,11, + 0,0,3,172,5,213,0,5,0,0,33,35,17,33,53,33,3,172,202,253,41,3,161,5,43,170,0,0,0,2,0,193,254,86,1,121,4,123,0,0, + 0,4,0,0,1,7,51,17,35,1,29,92,184,184,4,123,27,249,246,0,0,1,0,201,254,86,5,25,5,240,0,20,0,0,1,52,38,35,34,6, + 21,17,35,17,51,21,54,55,54,51,50,18,25,1,35,4,80,154,153,179,215,202,202,81,102,101,158,227,233,201,3,127,215,213,255,222,251,8,7,127, + 241,135,67,66,254,193,254,204,252,131,0,0,0,1,0,186,254,86,4,100,4,123,0,19,0,0,1,17,35,17,52,38,35,34,6,21,17,35,17,51, + 21,62,1,51,50,22,4,100,184,124,124,149,172,185,185,66,179,117,193,198,2,164,253,92,2,158,159,158,190,164,251,221,6,10,174,101,100,239,0,0, + 255,255,0,240,0,0,1,195,4,35,18,6,0,29,0,0,0,2,0,160,1,73,2,98,3,11,0,3,0,7,0,0,1,33,53,33,53,33,53,33, + 2,98,254,62,1,194,254,62,1,194,1,73,150,150,150,0,0,1,1,53,1,225,2,0,5,213,0,5,0,58,64,11,3,0,129,6,4,3,1,3, + 0,0,6,16,252,75,176,11,84,88,185,0,0,255,192,56,89,236,57,57,49,0,16,228,204,64,9,32,3,95,3,176,3,239,3,4,93,48,1,182, + 0,7,32,7,80,7,3,93,1,51,17,3,35,3,1,53,203,20,162,21,5,213,253,113,254,155,1,101,0,1,0,197,3,170,1,111,5,213,0,3, + 0,55,64,10,1,132,0,129,4,0,5,2,4,4,16,252,75,176,18,84,75,176,19,84,91,88,185,0,2,255,192,56,89,236,49,0,16,244,236,48, + 1,64,13,64,5,80,5,96,5,112,5,144,5,160,5,6,93,1,17,35,17,1,111,170,5,213,253,213,2,43,0,0,255,255,0,175,0,0,4,179, + 5,213,18,6,3,187,0,0,0,2,0,77,254,86,3,84,6,20,0,6,0,31,0,0,1,38,35,34,7,20,51,55,17,51,17,51,21,35,17,20, + 22,59,1,21,35,34,38,53,48,3,35,32,55,54,51,50,1,146,23,55,77,1,92,80,184,250,250,61,120,49,70,191,153,2,60,254,232,1,1,245, + 53,3,18,132,75,57,250,2,8,252,254,160,253,112,124,116,156,204,202,2,134,189,246,0,0,1,0,201,254,191,5,221,5,213,0,13,0,0,19,33, + 1,17,51,17,51,17,35,17,33,1,17,35,201,1,16,2,150,196,170,170,254,240,253,106,196,5,213,251,31,4,225,250,213,254,21,1,65,4,225,251, + 31,0,0,0,0,1,0,186,254,229,4,247,4,123,0,23,0,0,1,17,51,17,35,17,35,17,52,38,35,34,6,21,17,35,17,51,21,62,1,51, + 50,22,4,100,147,147,184,124,124,149,172,185,185,66,179,117,193,198,2,164,253,239,254,82,1,27,2,158,159,158,190,164,253,135,4,96,174,101,100,239, + 0,1,0,4,255,227,6,57,5,240,0,40,0,0,37,17,33,53,33,17,6,4,35,36,39,38,39,7,39,55,38,53,16,0,33,50,4,23,21,46, + 1,35,32,7,6,3,1,23,1,22,23,22,33,50,54,4,195,254,182,2,18,117,254,230,160,254,162,198,141,40,84,43,112,1,1,139,1,94,146,1, + 7,111,112,252,139,254,239,138,135,3,4,198,43,251,22,25,106,138,1,17,107,168,213,1,145,166,253,127,83,85,1,204,146,226,28,127,37,30,31,1, + 110,1,153,72,70,215,95,96,153,151,254,217,1,149,127,254,95,207,119,153,37,0,0,0,0,3,0,4,254,86,5,16,4,123,0,38,0,48,0,58, + 0,0,37,16,2,33,34,38,39,53,30,1,51,50,54,61,1,14,1,35,34,39,38,39,7,39,55,38,53,16,18,51,50,22,23,53,51,17,55,23, + 15,1,5,22,23,22,51,50,54,53,52,39,38,39,38,35,34,6,21,20,23,4,90,254,254,250,97,172,81,81,158,82,181,180,57,178,124,206,126,67, + 31,104,33,116,7,252,206,124,178,57,184,149,33,182,185,253,159,20,46,82,148,149,165,13,19,50,82,150,148,165,2,139,254,226,254,233,29,30,179,44, + 42,189,191,91,99,98,157,83,112,35,99,39,56,62,1,4,1,58,98,99,170,254,177,50,99,61,61,203,87,60,110,220,199,21,126,98,65,110,220,200, + 29,28,0,0,0,2,0,4,0,0,5,106,5,213,0,19,0,22,0,0,19,51,17,1,33,1,23,37,23,5,1,33,1,7,17,35,17,7,39,55, + 37,39,21,201,202,2,158,1,4,253,27,121,2,82,43,253,237,2,55,254,246,254,11,216,202,154,43,197,1,56,110,5,213,253,137,2,119,253,72,122, + 197,127,176,253,199,1,247,72,254,81,1,108,51,127,65,104,110,147,0,0,0,2,0,4,0,0,4,158,6,20,0,19,0,22,0,0,19,51,17,1, + 51,1,23,37,23,5,1,35,1,7,17,35,53,7,39,55,37,39,21,186,185,2,37,235,253,174,94,1,238,33,254,70,1,184,240,254,133,190,185,149, + 33,182,1,34,105,6,20,252,105,1,227,253,244,91,164,98,147,254,88,1,108,63,254,211,240,50,99,60,97,101,136,0,0,3,0,4,0,0,5,248, + 5,213,0,19,0,22,0,25,0,0,19,33,1,37,17,51,17,55,23,7,17,33,1,5,17,35,17,7,39,55,37,3,17,37,19,17,201,1,16,1, + 94,1,56,196,154,43,197,254,240,254,166,254,196,196,154,43,197,1,192,252,1,234,248,5,213,253,107,103,2,46,254,19,51,127,65,252,165,2,142,105, + 253,219,1,228,51,127,65,149,1,219,253,209,22,254,44,2,38,0,0,0,0,2,0,4,0,0,5,16,4,123,0,23,0,32,0,0,1,17,35,17, + 5,17,35,17,7,39,55,17,51,21,62,1,51,54,23,22,23,55,23,7,39,38,39,38,35,34,6,29,1,4,100,184,253,199,185,149,33,182,185,66, + 179,117,193,99,74,19,145,33,172,186,9,51,62,124,149,172,2,164,253,92,2,106,190,254,84,1,111,50,99,61,2,131,174,101,100,1,120,89,153,49, + 99,57,48,117,64,79,190,164,95,0,0,0,0,3,0,4,0,0,5,139,5,213,0,29,0,36,0,43,0,0,1,30,1,23,19,35,3,46,1,43, + 1,17,35,17,7,39,55,17,33,32,23,22,23,55,23,7,22,21,20,6,45,1,38,39,38,39,35,17,21,51,22,55,54,55,3,141,65,123,62,205, + 217,191,74,139,120,220,202,154,43,197,1,200,1,0,126,73,31,233,43,255,1,131,253,137,2,25,18,44,74,147,254,254,147,74,61,11,2,188,22,144, + 126,254,104,1,127,150,98,253,137,3,1,51,127,66,2,70,107,62,100,78,127,85,13,14,141,186,242,179,63,40,66,1,254,22,40,1,68,56,99,0, + 0,1,0,4,0,0,3,74,4,123,0,25,0,0,1,46,1,35,34,6,29,1,37,23,5,17,35,17,7,39,55,17,51,21,62,1,51,50,22,23, + 3,74,31,73,44,156,167,1,178,33,254,45,185,149,33,182,185,58,186,133,19,46,28,3,180,18,17,203,190,52,144,98,156,254,84,1,111,50,99,60, + 2,132,174,102,99,5,5,0,0,1,0,4,255,227,5,16,5,240,0,47,0,0,1,21,46,1,35,34,6,21,20,22,31,1,37,23,5,22,23,22, + 21,20,4,33,34,38,39,53,30,1,51,50,54,53,52,38,47,1,5,39,37,38,39,38,53,52,36,51,50,22,4,72,115,204,95,165,179,119,166,84, + 2,34,43,254,153,87,54,108,254,221,254,231,106,239,128,123,236,114,173,188,135,154,97,253,226,43,1,101,77,48,101,1,23,245,105,218,5,164,197,55, + 54,128,118,99,101,31,17,181,127,119,39,56,108,182,217,224,48,47,208,69,70,136,126,110,124,31,19,180,127,119,34,46,96,171,198,228,38,0,0,0, + 0,1,0,4,255,227,4,39,4,123,0,47,0,0,1,21,46,1,35,34,6,21,20,22,31,1,37,23,5,22,23,22,23,20,6,35,34,38,39,53, + 30,1,51,50,54,53,52,38,47,1,5,39,37,38,39,38,53,52,54,51,50,22,3,139,78,168,90,137,137,98,148,45,1,186,33,254,214,75,44,82, + 1,247,216,90,195,108,102,198,97,130,140,101,171,36,254,79,33,1,35,62,38,76,224,206,102,180,4,63,174,40,40,84,84,64,73,33,10,147,99,99, + 32,40,76,137,156,182,35,35,190,53,53,89,81,75,80,37,8,144,99,97,27,38,74,131,158,172,30,0,0,1,255,151,0,0,5,159,5,213,0,20, + 0,0,1,14,1,29,1,35,53,52,54,59,1,17,33,17,51,17,35,17,33,17,35,1,45,132,118,156,192,214,202,2,222,202,202,253,34,202,5,48, + 1,94,105,49,70,181,163,253,156,2,100,250,43,2,199,253,57,0,0,0,255,255,0,186,0,0,6,152,4,96,18,6,3,220,0,0,0,1,0,119, + 0,0,3,209,5,213,0,9,0,0,1,17,35,17,33,53,33,17,33,53,3,209,202,253,176,2,80,253,112,5,213,250,43,2,201,170,1,184,170,0, + 0,2,0,70,0,0,4,10,5,213,0,8,0,19,0,0,1,35,34,6,21,20,22,59,1,19,17,35,17,35,34,36,53,52,36,51,3,64,254,141, + 154,154,141,254,202,202,254,251,254,255,1,1,251,5,47,146,134,135,146,2,215,250,43,2,88,226,221,219,227,0,0,0,0,1,0,201,0,0,6,31, + 5,213,0,12,0,0,51,17,51,17,1,51,1,17,51,17,33,9,1,201,196,1,129,203,1,129,197,254,211,254,129,254,131,5,213,250,225,4,0,252, + 0,5,31,250,43,3,248,252,8,0,0,0,0,1,0,201,0,0,1,147,7,109,0,3,0,0,19,51,17,35,201,202,202,7,109,248,147,0,0,0, + 0,1,0,68,0,0,9,85,5,213,0,15,0,0,37,1,51,9,1,51,1,35,9,1,35,9,1,35,1,51,3,244,1,62,227,1,58,1,57,205, + 254,137,254,254,197,254,194,227,254,198,254,199,205,1,119,254,197,5,16,251,18,4,238,250,43,5,16,250,240,4,238,251,18,5,213,0,0,1,0,194, + 4,208,2,149,5,88,0,3,0,17,182,1,169,2,4,3,1,4,16,196,212,49,0,16,212,236,48,1,33,53,33,2,149,254,45,1,211,4,208,136, + 0,1,0,141,3,156,2,189,5,88,0,4,0,0,19,39,1,51,21,214,73,2,8,40,3,156,115,1,73,136,0,0,0,1,0,110,2,104,2,228, + 5,88,0,5,0,0,1,35,1,39,1,51,2,228,16,254,2,104,2,39,79,4,208,253,152,87,2,153,0,1,0,96,1,52,2,242,5,88,0,5, + 0,0,1,35,1,39,1,51,2,242,14,253,242,118,2,53,93,4,208,252,100,68,3,224,0,1,0,90,0,0,2,249,5,88,0,5,0,0,1,35, + 1,39,1,51,2,249,11,253,232,124,2,59,100,4,208,251,48,55,5,33,0,1,0,141,3,156,2,189,5,88,0,4,0,0,19,1,21,35,1,214, + 1,231,40,253,248,5,88,254,204,136,1,73,255,255,0,194,3,156,2,149,4,36,16,7,19,69,0,0,254,204,0,0,255,255,0,141,2,104,2,189, + 4,36,16,7,19,70,0,0,254,204,0,0,255,255,0,110,1,52,2,228,4,36,16,7,19,71,0,0,254,204,0,0,255,255,0,96,0,0,2,242, + 4,36,16,7,19,72,0,0,254,204,0,0,0,1,0,110,2,104,2,228,5,88,0,5,0,0,1,21,35,1,55,1,2,228,79,253,217,104,1,254, + 2,240,136,2,153,87,253,152,255,255,0,141,2,104,2,189,4,36,16,7,19,74,0,0,254,204,0,0,255,255,0,194,2,104,2,149,2,240,16,7, + 19,69,0,0,253,152,0,0,255,255,0,141,1,52,2,189,2,240,16,7,19,70,0,0,253,152,0,0,255,255,0,110,0,0,2,228,2,240,16,7, + 19,71,0,0,253,152,0,0,0,1,0,96,1,52,2,242,5,88,0,5,0,0,1,21,35,1,55,1,2,242,93,253,203,118,2,14,1,188,136,3, + 224,68,252,100,255,255,0,110,1,52,2,228,4,36,16,7,19,79,0,0,254,204,0,0,255,255,0,141,1,52,2,189,2,240,16,7,19,74,0,0, + 253,152,0,0,255,255,0,194,1,52,2,149,1,188,16,7,19,69,0,0,252,100,0,0,255,255,0,141,0,0,2,189,1,188,16,7,19,70,0,0, + 252,100,0,0,0,1,0,90,0,0,2,249,5,88,0,5,0,0,37,21,35,1,55,1,2,249,100,253,197,124,2,24,136,136,5,33,55,251,48,0, + 255,255,0,96,0,0,2,242,4,36,16,7,19,84,0,0,254,204,0,0,255,255,0,110,0,0,2,228,2,240,16,7,19,79,0,0,253,152,0,0, + 255,255,0,141,0,0,2,189,1,188,16,7,19,74,0,0,252,100,0,0,255,255,0,194,0,0,2,149,0,136,17,7,19,69,0,0,251,48,0,7, + 177,0,4,0,16,60,48,0,0,1,0,214,0,0,1,94,5,88,0,3,0,14,181,2,1,0,8,3,4,16,212,236,49,0,196,196,51,17,51,17, + 214,136,5,88,250,168,0,0,0,14,0,150,0,0,7,58,5,220,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43, + 0,47,0,51,0,55,1,218,183,47,36,48,40,55,44,52,56,16,220,60,220,60,60,60,60,182,31,35,43,32,51,28,39,220,60,60,60,60,220,60, + 182,20,12,27,19,8,16,24,220,60,220,60,60,60,60,182,3,7,15,4,23,0,11,220,60,60,60,60,220,60,176,57,204,176,88,75,82,88,176,56, + 16,75,176,10,98,102,32,176,0,84,88,177,51,48,60,60,89,32,176,64,84,88,64,10,51,48,47,44,55,52,43,40,39,36,60,60,60,60,60,60, + 60,60,60,60,89,32,176,128,84,88,179,35,32,47,44,60,60,60,60,89,32,176,192,84,88,179,55,52,47,44,60,60,60,60,89,32,184,1,0,84, + 88,181,43,40,39,36,55,52,60,60,60,60,60,60,89,32,184,1,64,84,88,179,55,52,31,28,60,60,60,60,89,32,184,1,128,84,88,177,31,28, + 60,60,89,32,184,1,192,84,88,183,43,40,51,48,55,52,47,44,60,60,60,60,60,60,60,60,89,184,16,0,98,184,2,128,99,75,35,97,32,176, + 0,84,88,177,23,20,60,60,89,32,176,1,84,88,64,10,15,12,27,24,23,20,19,16,11,8,60,60,60,60,60,60,60,60,60,60,89,32,176,2, + 84,88,179,7,4,19,16,60,60,60,60,89,32,176,3,84,88,179,19,16,27,24,60,60,60,60,89,32,176,4,84,88,181,27,24,11,8,15,12,60, + 60,60,60,60,60,89,32,176,5,84,88,179,3,0,27,24,60,60,60,60,89,32,176,6,84,88,177,3,0,60,60,89,32,176,7,84,88,183,19,16, + 23,20,27,24,15,12,60,60,60,60,60,60,60,60,89,176,9,84,88,177,27,24,60,60,89,27,182,15,12,43,40,39,36,56,16,60,60,60,60,60, + 60,183,7,4,3,0,11,8,23,20,60,60,60,60,60,60,60,60,89,49,0,183,4,13,24,32,52,41,12,40,47,60,220,60,60,60,60,60,181,5, + 20,25,33,48,53,220,60,60,60,60,60,181,0,21,16,28,49,44,220,60,60,60,60,60,183,9,37,1,8,17,29,36,45,220,60,60,60,60,60,220, + 60,48,1,17,51,17,3,17,51,17,1,53,33,21,1,53,33,21,1,17,51,17,21,53,33,21,1,17,51,17,1,17,51,17,3,17,51,17,1,53, + 33,21,1,53,33,21,1,17,51,17,21,53,33,21,1,17,51,17,6,214,100,100,100,253,118,2,38,253,218,2,38,253,118,100,2,38,253,118,100,254, + 112,100,100,100,253,118,2,38,253,218,2,38,253,118,100,2,38,253,118,100,3,37,2,78,253,178,253,68,2,78,253,178,5,15,100,100,250,136,100,100, + 3,37,2,78,253,178,105,100,100,253,173,2,78,253,178,2,188,2,78,253,178,253,68,2,78,253,178,5,15,100,100,250,136,100,100,3,37,2,78,253, + 178,105,100,100,253,173,2,78,253,178,0,0,0,14,0,150,0,0,7,58,5,220,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35, + 0,39,0,43,0,47,0,51,0,55,1,224,183,47,36,48,40,55,44,52,56,16,220,60,220,60,60,60,60,182,31,35,43,32,51,28,39,220,60,60, + 60,60,220,60,182,20,12,27,19,8,16,24,220,60,220,60,60,60,60,182,3,7,15,4,23,0,11,220,60,60,60,60,220,60,176,57,204,176,88,0, + 75,1,82,88,176,56,16,0,75,1,176,10,98,102,32,176,0,84,88,177,51,48,60,60,89,32,176,64,84,88,64,10,51,48,47,44,55,52,43,40, + 39,36,60,60,60,60,60,60,60,60,60,60,89,32,176,128,84,88,179,35,32,47,44,60,60,60,60,89,32,176,192,84,88,179,55,52,47,44,60,60, + 60,60,89,32,184,1,0,84,88,181,43,40,39,36,55,52,60,60,60,60,60,60,89,32,184,1,64,84,88,179,55,52,31,28,60,60,60,60,89,32, + 184,1,128,84,88,177,31,28,60,60,89,32,184,1,192,84,88,183,43,40,51,48,55,52,47,44,60,60,60,60,60,60,60,60,89,184,16,0,98,184, + 2,128,99,0,75,1,35,97,32,176,0,84,88,177,23,20,60,60,89,32,176,1,84,88,64,10,15,12,27,24,23,20,19,16,11,8,60,60,60,60, + 60,60,60,60,60,60,89,32,176,2,84,88,179,7,4,19,16,60,60,60,60,89,32,176,3,84,88,179,19,16,27,24,60,60,60,60,89,32,176,4, + 84,88,181,27,24,11,8,15,12,60,60,60,60,60,60,89,32,176,5,84,88,179,3,0,27,24,60,60,60,60,89,32,176,6,84,88,177,3,0,60, + 60,89,32,176,7,84,88,183,19,16,23,20,27,24,15,12,60,60,60,60,60,60,60,60,89,176,9,84,88,177,27,24,60,60,89,27,182,15,12,43, + 40,39,36,56,16,60,60,60,60,60,60,183,7,4,3,0,11,8,23,20,60,60,60,60,60,60,60,60,89,49,0,183,4,13,24,32,52,41,12,40, + 47,60,220,60,60,60,60,60,181,5,20,25,33,48,53,220,60,60,60,60,60,181,0,21,16,28,49,44,220,60,60,60,60,60,183,9,37,1,8,17, + 29,36,45,220,60,60,60,60,60,220,60,48,1,17,51,17,3,17,51,17,1,53,33,21,1,53,33,21,1,17,51,17,21,53,33,21,1,17,51,17, + 1,17,51,17,3,17,51,17,1,53,33,21,1,53,33,21,1,17,51,17,21,53,33,21,1,17,51,17,6,214,100,100,100,253,118,2,38,253,218,2, + 38,253,118,100,2,38,253,118,100,254,112,100,100,100,253,118,2,38,253,218,2,38,253,118,100,2,38,253,118,100,3,27,2,88,253,168,253,68,2,88, + 253,168,5,25,100,100,250,136,100,100,3,27,2,88,253,168,95,100,100,253,163,2,88,253,168,2,188,2,88,253,168,253,68,2,88,253,168,5,25,100, + 100,250,136,100,100,3,27,2,88,253,168,95,100,100,253,163,2,88,253,168,0,14,0,150,0,0,7,58,5,220,0,3,0,7,0,11,0,15,0,19, + 0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,51,0,55,1,218,183,47,36,48,40,55,44,52,56,16,220,60,220,60,60,60,60,182,31,35, + 43,32,51,28,39,220,60,60,60,60,220,60,182,20,12,27,19,8,16,24,220,60,220,60,60,60,60,182,3,7,15,4,23,0,11,220,60,60,60,60, + 220,60,176,57,204,176,88,76,82,88,176,56,16,76,176,10,98,102,32,176,0,84,88,177,51,48,60,60,89,32,176,64,84,88,64,10,51,48,47,44, + 55,52,43,40,39,36,60,60,60,60,60,60,60,60,60,60,89,32,176,128,84,88,179,35,32,47,44,60,60,60,60,89,32,176,192,84,88,179,55,52, + 47,44,60,60,60,60,89,32,184,1,0,84,88,181,43,40,39,36,55,52,60,60,60,60,60,60,89,32,184,1,64,84,88,179,55,52,31,28,60,60, + 60,60,89,32,184,1,128,84,88,177,31,28,60,60,89,32,184,1,192,84,88,183,43,40,51,48,55,52,47,44,60,60,60,60,60,60,60,60,89,184, + 16,0,98,184,2,128,99,76,35,97,32,176,0,84,88,177,23,20,60,60,89,32,176,1,84,88,64,10,15,12,27,24,23,20,19,16,11,8,60,60, + 60,60,60,60,60,60,60,60,89,32,176,2,84,88,179,7,4,19,16,60,60,60,60,89,32,176,3,84,88,179,19,16,27,24,60,60,60,60,89,32, + 176,4,84,88,181,27,24,11,8,15,12,60,60,60,60,60,60,89,32,176,5,84,88,179,3,0,27,24,60,60,60,60,89,32,176,6,84,88,177,3, + 0,60,60,89,32,176,7,84,88,183,19,16,23,20,27,24,15,12,60,60,60,60,60,60,60,60,89,176,9,84,88,177,27,24,60,60,89,27,182,15, + 12,43,40,39,36,56,16,60,60,60,60,60,60,183,7,4,3,0,11,8,23,20,60,60,60,60,60,60,60,60,89,49,0,183,4,13,24,32,52,41, + 12,40,47,60,220,60,60,60,60,60,181,5,20,25,33,48,53,220,60,60,60,60,60,181,0,21,16,28,49,44,220,60,60,60,60,60,183,9,37,1, + 8,17,29,36,45,220,60,60,60,60,60,220,60,48,1,17,51,17,3,17,51,17,1,53,33,21,1,53,33,21,1,17,51,17,21,53,33,21,1,17, + 51,17,1,17,51,17,3,17,51,17,1,53,33,21,1,53,33,21,1,17,51,17,21,53,33,21,1,17,51,17,6,214,100,100,100,253,118,2,38,253, + 218,2,38,253,118,100,2,38,253,118,100,254,112,100,100,100,253,118,2,38,253,218,2,38,253,118,100,2,38,253,118,100,3,37,2,78,253,178,253,68, + 2,78,253,178,5,15,100,100,250,136,100,100,3,37,2,78,253,178,105,100,100,253,173,2,78,253,178,2,188,2,78,253,178,253,68,2,78,253,178,5, + 15,100,100,250,136,100,100,3,37,2,78,253,178,105,100,100,253,173,2,78,253,178,0,0,0,14,0,150,0,0,7,58,5,220,0,3,0,7,0,11, + 0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,51,0,55,1,224,183,47,36,48,40,55,44,52,56,16,220,60,220,60,60,60, + 60,182,31,35,43,32,51,28,39,220,60,60,60,60,220,60,182,20,12,27,19,8,16,24,220,60,220,60,60,60,60,182,3,7,15,4,23,0,11,220, + 60,60,60,60,220,60,176,57,204,176,88,0,76,1,82,88,176,56,16,0,76,1,176,10,98,102,32,176,0,84,88,177,51,48,60,60,89,32,176,64, + 84,88,64,10,51,48,47,44,55,52,43,40,39,36,60,60,60,60,60,60,60,60,60,60,89,32,176,128,84,88,179,35,32,47,44,60,60,60,60,89, + 32,176,192,84,88,179,55,52,47,44,60,60,60,60,89,32,184,1,0,84,88,181,43,40,39,36,55,52,60,60,60,60,60,60,89,32,184,1,64,84, + 88,179,55,52,31,28,60,60,60,60,89,32,184,1,128,84,88,177,31,28,60,60,89,32,184,1,192,84,88,183,43,40,51,48,55,52,47,44,60,60, + 60,60,60,60,60,60,89,184,16,0,98,184,2,128,99,0,76,1,35,97,32,176,0,84,88,177,23,20,60,60,89,32,176,1,84,88,64,10,15,12, + 27,24,23,20,19,16,11,8,60,60,60,60,60,60,60,60,60,60,89,32,176,2,84,88,179,7,4,19,16,60,60,60,60,89,32,176,3,84,88,179, + 19,16,27,24,60,60,60,60,89,32,176,4,84,88,181,27,24,11,8,15,12,60,60,60,60,60,60,89,32,176,5,84,88,179,3,0,27,24,60,60, + 60,60,89,32,176,6,84,88,177,3,0,60,60,89,32,176,7,84,88,183,19,16,23,20,27,24,15,12,60,60,60,60,60,60,60,60,89,176,9,84, + 88,177,27,24,60,60,89,27,182,15,12,43,40,39,36,56,16,60,60,60,60,60,60,183,7,4,3,0,11,8,23,20,60,60,60,60,60,60,60,60, + 89,49,0,183,4,13,24,32,52,41,12,40,47,60,220,60,60,60,60,60,181,5,20,25,33,48,53,220,60,60,60,60,60,181,0,21,16,28,49,44, + 220,60,60,60,60,60,183,9,37,1,8,17,29,36,45,220,60,60,60,60,60,220,60,48,1,17,51,17,3,17,51,17,1,53,33,21,1,53,33,21, + 1,17,51,17,21,53,33,21,1,17,51,17,1,17,51,17,3,17,51,17,1,53,33,21,1,53,33,21,1,17,51,17,21,53,33,21,1,17,51,17, + 6,214,100,100,100,253,118,2,38,253,218,2,38,253,118,100,2,38,253,118,100,254,112,100,100,100,253,118,2,38,253,218,2,38,253,118,100,2,38,253, + 118,100,3,27,2,88,253,168,253,68,2,88,253,168,5,25,100,100,250,136,100,100,3,27,2,88,253,168,95,100,100,253,163,2,88,253,168,2,188,2, + 88,253,168,253,68,2,88,253,168,5,25,100,100,250,136,100,100,3,27,2,88,253,168,95,100,100,253,163,2,88,253,168,0,1,0,110,255,226,4,54, + 6,159,0,21,0,0,1,21,16,33,32,17,53,19,51,3,21,16,33,32,17,53,52,0,17,51,22,0,4,54,254,38,254,18,59,200,69,1,48,1, + 38,254,15,181,1,1,239,2,161,159,253,224,2,37,139,1,9,254,218,115,254,128,1,138,184,249,1,203,1,23,197,254,7,0,0,0,0,2,0,110, + 255,226,4,54,6,159,0,9,0,28,0,0,1,18,37,4,3,21,16,33,32,17,55,21,16,32,17,53,16,37,51,54,39,38,39,51,20,22,7,51, + 4,3,130,1,254,201,254,225,1,1,38,1,48,180,252,56,1,147,20,52,134,133,2,207,218,37,20,1,96,2,157,1,103,11,8,254,130,85,254,78, + 1,173,75,55,253,159,2,97,60,1,235,61,163,81,82,178,108,158,243,69,0,2,0,110,255,226,4,143,6,179,0,9,0,33,0,0,1,16,33,32, + 17,21,16,33,32,17,55,21,16,33,32,17,53,16,37,51,54,39,54,35,34,21,35,16,33,32,3,6,7,4,3,210,254,183,254,163,1,88,1,78, + 189,253,241,253,238,2,7,94,77,2,1,190,182,164,1,87,1,92,1,12,68,1,38,2,126,1,164,254,98,95,254,93,1,163,97,87,253,179,2,62, + 120,1,214,78,92,97,154,196,1,100,254,193,139,85,114,0,0,2,0,110,0,0,6,175,6,179,0,36,0,46,0,0,37,54,55,0,17,53,16,33, + 50,23,54,33,32,17,21,16,5,36,17,53,52,55,38,35,32,17,21,16,1,23,4,23,33,38,39,36,7,1,16,33,32,3,21,2,5,36,19,1, + 13,99,127,254,127,1,185,169,159,101,1,2,1,217,254,39,254,52,39,84,173,254,251,1,168,212,1,135,56,254,248,13,238,254,254,245,4,133,254,229, + 254,239,1,1,1,19,1,26,1,195,78,33,1,86,1,198,109,1,248,179,169,253,255,149,253,210,30,28,2,48,119,95,140,154,254,183,99,254,45,254, + 177,24,83,214,82,64,64,180,4,93,1,143,254,158,154,254,119,29,28,1,108,0,0,0,0,1,0,111,255,226,4,54,6,179,0,23,0,0,1,16, + 33,32,27,1,51,3,16,33,4,25,1,52,33,34,17,23,35,3,16,33,32,17,4,54,254,22,254,34,1,90,208,110,1,39,1,58,254,228,243,83, + 190,69,1,178,1,183,1,200,254,26,1,233,1,47,254,209,254,183,1,1,79,3,115,209,254,255,246,1,13,1,137,254,139,0,0,0,0,1,0,110, + 255,226,4,54,6,179,0,33,0,0,1,6,7,22,29,1,16,32,17,19,51,3,16,33,32,17,53,52,39,35,53,51,54,3,52,35,4,7,23,35, + 39,16,33,32,4,14,5,205,250,252,56,53,196,60,1,39,1,48,190,170,91,220,2,252,254,254,3,37,186,25,1,179,1,187,5,27,230,124,115,254, + 125,254,23,2,1,1,23,254,224,254,168,1,78,115,205,40,169,80,1,10,218,1,245,154,158,1,144,0,0,3,0,110,255,226,4,203,6,179,0,9, + 0,19,0,38,0,0,1,18,7,34,21,20,23,54,55,51,1,16,33,32,17,21,16,33,32,17,55,21,16,33,32,17,53,52,55,38,53,16,33,32, + 17,20,7,51,4,2,209,2,214,209,104,102,192,18,1,61,254,200,254,180,1,71,1,61,194,253,255,253,253,101,190,1,133,1,145,12,11,1,72,4, + 222,1,54,1,223,180,95,99,9,253,229,1,136,254,118,75,254,93,1,155,88,75,253,184,2,82,70,141,188,148,206,1,142,254,46,37,64,127,0,0, + 0,2,0,110,255,226,6,160,6,179,0,9,0,34,0,0,1,16,33,32,25,1,16,33,32,17,37,2,3,33,36,19,17,16,35,34,3,17,16,33, + 32,25,1,16,33,54,23,54,51,32,19,3,73,254,243,254,237,1,19,1,13,3,87,10,204,254,247,1,8,23,242,215,19,254,46,254,60,1,206,224, + 149,115,247,1,131,2,4,146,1,130,254,126,253,147,254,92,1,164,155,254,70,254,250,229,1,219,1,210,1,121,254,237,253,45,253,189,2,67,2,109, + 2,33,2,230,218,253,233,0,0,1,0,110,0,0,4,3,6,179,0,21,0,0,1,16,3,35,18,25,1,16,35,32,25,1,16,19,35,2,25,1, + 16,33,32,17,4,3,155,198,164,245,254,219,174,200,164,1,227,1,178,2,251,254,138,254,123,1,67,1,184,1,154,1,126,254,130,254,102,254,83,254, + 178,1,121,1,130,1,154,2,30,253,226,0,0,1,0,110,255,226,4,54,6,160,0,28,0,0,1,2,33,32,17,19,51,3,16,5,32,17,53,16, + 43,1,53,51,36,53,52,39,33,22,21,16,7,22,17,4,54,1,254,29,254,28,43,206,60,1,39,1,48,210,220,175,0,255,200,1,24,100,250,250, + 1,198,254,28,1,243,1,36,254,220,254,174,1,1,68,120,1,60,168,129,175,149,185,190,109,254,247,100,99,254,158,0,0,1,0,110,0,0,8,235, + 6,179,0,53,0,0,37,54,55,36,3,53,16,33,50,23,54,32,23,54,51,32,17,21,20,3,35,18,61,1,18,35,32,21,17,35,17,16,35,6, + 21,17,35,17,38,33,34,17,21,18,5,54,23,4,1,33,38,37,36,1,1,93,115,145,254,61,48,1,183,232,112,100,1,158,109,94,243,1,174,223, + 205,252,1,253,255,0,172,227,219,173,2,254,254,248,45,1,178,122,144,2,14,1,18,254,208,40,254,153,254,155,254,201,166,120,67,243,1,240,123,1, + 235,178,187,187,178,254,31,103,186,254,100,1,177,200,63,1,71,231,254,90,1,166,1,0,2,254,254,90,1,166,231,254,183,121,254,65,233,23,11,35, + 254,118,165,92,91,254,195,0,0,2,0,110,255,226,4,52,6,179,0,9,0,30,0,0,1,17,38,39,32,17,21,16,5,32,19,16,33,32,17,53, + 16,37,50,23,53,52,33,34,6,7,35,16,33,32,17,3,139,106,184,254,195,1,58,1,37,169,254,50,254,8,1,227,158,157,254,225,153,123,1,178, + 1,186,1,212,1,218,1,203,63,1,254,193,184,254,149,1,1,98,253,254,2,2,174,1,238,20,74,209,249,113,108,1,124,254,99,0,0,2,0,130, + 255,226,4,74,6,160,0,9,0,27,0,0,1,16,33,34,7,17,16,33,32,17,55,21,16,33,32,25,1,16,41,1,21,33,34,29,1,54,51,32, + 3,150,254,201,168,129,1,53,1,43,180,254,21,254,35,1,81,2,3,254,2,172,169,140,1,233,2,171,1,79,75,254,38,254,173,1,68,254,250,254, + 24,1,232,3,84,1,130,160,230,199,85,0,0,1,0,110,0,0,6,134,6,179,0,32,0,0,1,16,1,35,0,25,1,16,33,34,25,1,35,17, + 16,33,34,25,1,16,1,35,0,25,1,16,33,50,23,54,51,32,17,6,134,254,199,224,1,94,254,242,229,183,254,247,235,1,62,215,254,218,1,190, + 222,120,130,185,1,201,2,194,254,102,254,216,1,110,1,85,1,207,1,131,254,207,253,130,2,135,1,40,254,125,254,49,254,167,254,150,1,40,1,155, + 1,207,2,33,240,240,253,223,0,1,0,110,255,226,4,54,6,159,0,30,0,0,1,21,16,33,32,17,55,51,7,16,33,32,17,53,52,39,35,53, + 51,36,53,52,36,53,51,20,4,21,20,7,4,4,54,254,48,254,8,20,199,29,1,53,1,33,176,218,115,1,3,254,93,220,1,123,235,0,255,1, + 215,37,254,48,1,223,179,179,254,193,1,63,67,192,45,182,63,176,163,114,244,150,142,221,178,121,110,0,0,1,0,110,255,226,4,53,6,193,0,22, + 0,0,1,16,37,32,17,51,16,33,32,25,1,5,4,21,16,37,53,4,39,54,37,53,37,4,53,254,24,254,33,190,1,33,1,51,253,215,1,96, + 253,184,1,162,1,2,254,93,3,198,1,209,254,15,2,2,74,254,86,1,79,4,59,50,120,214,254,125,2,178,2,206,176,95,167,130,0,1,0,110, + 0,0,6,225,6,179,0,38,0,0,1,21,16,1,35,0,17,53,16,37,32,3,17,35,17,16,33,32,17,21,16,1,35,0,17,53,16,37,36,33, + 21,36,3,55,32,23,54,51,32,6,225,254,162,239,1,135,254,251,254,245,1,192,254,230,254,252,1,148,235,254,153,1,20,1,21,2,202,252,242,176, + 125,1,10,138,117,219,1,220,3,30,124,254,98,254,252,1,98,1,73,140,1,75,2,254,215,254,162,1,94,1,40,254,180,149,254,193,254,157,1,4, + 1,158,119,1,163,252,251,160,1,254,216,52,244,244,0,0,0,1,0,130,255,226,4,74,6,159,0,21,0,0,1,21,16,33,32,25,1,51,17,16, + 33,32,17,53,52,2,39,55,51,7,20,0,4,74,254,21,254,35,180,1,43,1,53,252,3,45,200,74,1,8,2,7,45,254,8,2,82,4,107,251, + 109,254,118,1,73,75,179,1,38,153,217,230,124,254,251,0,0,1,0,110,255,226,5,106,6,179,0,36,0,0,1,14,1,7,17,22,18,51,50,18, + 53,17,52,2,39,35,19,35,19,53,51,21,51,4,18,7,17,22,0,33,32,0,53,17,52,18,55,2,10,132,88,2,1,209,241,239,205,214,146,18, + 20,187,20,147,18,1,46,250,1,1,254,215,254,169,254,188,254,199,192,220,5,167,47,240,179,254,189,152,254,136,1,119,153,1,64,182,1,68,2,252, + 237,3,17,231,68,92,254,117,177,254,182,209,254,38,1,214,213,1,73,176,1,141,82,0,0,1,0,50,255,225,4,39,6,179,0,30,0,0,1,18, + 33,32,3,19,51,3,16,33,32,25,1,38,35,34,23,17,35,17,38,39,35,53,51,50,23,54,51,32,17,4,39,1,254,52,254,8,4,56,203,68, + 1,66,1,29,1,194,167,2,159,20,158,147,140,155,75,105,169,1,113,1,238,253,243,1,234,1,46,254,215,254,178,1,53,3,180,169,84,254,104,1, + 77,140,19,159,159,159,254,134,0,2,0,110,255,226,6,140,6,179,0,9,0,55,0,0,1,16,33,32,17,21,16,33,32,17,1,6,0,33,35,34, + 36,53,51,20,22,59,1,50,54,53,16,43,1,53,55,54,53,16,33,34,7,22,7,21,16,37,4,17,53,16,33,50,23,54,51,32,17,16,7,22, + 3,70,254,239,254,247,1,22,1,4,3,50,1,254,191,254,233,100,207,254,181,203,218,130,74,198,232,127,124,59,212,254,247,133,111,38,3,254,73,254, + 43,1,195,253,109,140,187,1,170,236,216,4,158,1,118,254,143,139,254,121,1,135,253,192,212,254,222,217,129,59,128,205,137,1,1,151,2,137,223,1, + 53,128,112,148,114,253,215,1,1,2,41,139,2,16,199,193,254,90,254,229,146,123,0,0,0,1,0,110,255,226,4,53,6,159,0,25,0,0,1,16, + 33,32,17,55,51,7,16,33,32,25,1,2,39,6,7,19,35,39,16,5,50,19,17,51,4,53,254,22,254,35,55,204,69,1,33,1,63,208,180,196, + 1,66,179,60,1,109,172,221,169,1,202,254,24,1,232,221,220,254,183,1,78,2,36,1,178,2,1,168,254,255,249,1,94,2,254,170,1,162,0,0, + 0,1,0,110,255,226,6,187,6,179,0,42,0,0,55,54,55,0,17,53,16,33,50,19,18,51,32,19,21,6,3,35,18,61,1,16,33,32,25,1, + 35,17,16,32,19,21,2,1,22,23,4,23,33,38,39,36,5,252,120,154,254,96,1,198,217,137,120,230,1,198,1,2,175,229,214,254,253,254,241,171, + 253,236,2,1,1,179,118,83,1,165,56,254,248,3,253,254,239,254,223,177,98,34,1,28,2,32,75,1,247,254,249,1,7,254,32,97,235,254,148,1, + 96,242,84,1,84,254,114,254,192,1,64,1,141,254,168,109,254,77,254,173,4,18,112,225,82,99,69,190,0,1,0,110,255,226,4,52,6,161,0,29, + 0,0,1,16,33,32,17,19,51,3,16,33,32,25,1,6,7,4,17,53,52,55,51,6,29,1,16,5,54,55,17,51,4,52,254,25,254,33,30,194, + 34,1,33,1,63,165,144,254,53,144,225,179,1,3,164,155,168,1,197,254,29,1,187,1,9,254,243,254,233,1,68,1,248,99,11,2,1,185,40,169, + 201,212,148,40,254,218,1,10,116,2,57,0,0,2,0,110,255,226,4,52,6,179,0,8,0,35,0,0,1,17,38,35,32,17,21,2,32,19,16,33, + 32,17,53,18,33,22,23,17,52,35,34,29,1,35,53,52,33,53,32,23,54,51,32,17,3,140,115,199,254,219,1,2,96,168,254,49,254,9,1,1, + 227,136,178,174,179,164,254,231,1,28,54,85,212,1,75,1,203,1,198,73,254,144,114,254,138,1,93,254,3,2,12,144,1,249,2,61,1,96,124,180, + 58,58,180,159,192,192,254,179,0,1,0,131,0,0,4,74,6,179,0,29,0,0,1,55,52,35,34,17,21,54,23,4,3,21,16,3,35,18,61,1, + 16,5,38,7,17,35,17,2,33,32,19,7,2,143,16,165,196,174,155,1,204,1,192,220,232,254,218,129,185,179,1,1,85,1,127,1,20,5,14,146, + 117,254,230,225,104,4,1,254,61,94,254,253,254,167,1,117,176,174,1,19,1,1,98,252,124,4,240,1,195,254,237,146,0,1,0,112,255,226,4,195, + 6,160,0,35,0,0,1,22,7,4,17,16,0,32,0,25,1,2,19,51,2,21,17,26,1,23,50,18,53,38,43,1,53,51,36,53,52,36,55,51, + 20,4,4,145,2,248,1,40,254,229,254,2,254,198,2,114,215,134,1,204,171,175,172,3,192,210,90,1,9,254,227,1,184,1,36,5,7,174,140,123, + 254,246,254,226,254,184,1,72,1,112,1,157,1,44,1,61,254,139,244,254,99,254,246,254,242,1,1,15,173,251,163,101,194,129,145,140,84,136,0,0, + 0,2,0,110,255,226,4,52,6,159,0,9,0,21,0,0,1,17,38,35,32,17,21,16,33,32,19,16,33,32,17,53,16,33,54,23,17,51,3,140, + 122,202,254,228,1,28,1,68,168,254,30,254,28,1,228,166,148,168,2,7,1,163,80,254,112,89,254,113,1,108,253,244,2,62,74,2,61,1,82,2, + 73,0,0,0,0,2,0,131,255,226,4,73,6,179,0,26,0,36,0,0,19,16,33,50,23,54,33,21,32,29,1,35,53,52,35,34,21,17,54,55, + 32,19,21,16,33,32,19,51,16,33,32,17,53,16,33,34,7,131,1,91,200,96,37,1,30,254,231,164,167,175,166,138,1,225,2,254,9,254,48,2, + 179,1,23,1,73,254,207,137,166,5,121,1,58,189,189,159,160,68,68,160,155,254,158,85,1,254,17,119,253,219,2,27,254,133,1,113,139,1,82,96, + 0,2,0,110,255,226,4,92,6,160,0,28,0,35,0,0,1,35,19,51,21,35,19,16,33,32,17,55,51,7,16,33,32,17,3,35,32,17,16,33, + 51,39,51,23,51,1,20,59,1,3,35,34,4,91,220,63,158,126,87,254,22,254,35,59,204,72,1,32,1,53,94,225,254,103,1,156,94,37,200,34, + 242,252,238,242,213,68,142,245,5,105,254,185,141,254,53,254,24,1,232,221,220,254,183,1,78,1,197,1,45,1,54,168,168,254,207,165,1,71,0,0, + 0,2,0,130,255,226,4,74,6,159,0,9,0,21,0,0,1,16,33,6,7,17,16,33,32,17,55,21,16,33,32,25,1,51,17,54,51,4,3,150, + 254,203,162,136,1,57,1,38,180,254,38,254,18,181,161,137,1,233,2,141,1,127,3,85,254,88,254,118,1,128,110,95,253,209,2,37,4,152,253,188, + 78,1,0,0,0,1,0,50,255,226,3,239,6,179,0,33,0,0,1,7,37,3,4,23,6,4,33,53,32,54,53,38,37,39,19,37,55,5,55,54, + 52,38,35,7,53,51,50,23,22,20,15,1,3,239,77,254,167,145,1,80,1,1,254,201,254,153,1,23,201,1,254,250,115,233,254,121,80,1,129,106, + 19,74,64,130,156,132,74,75,30,112,3,204,138,171,254,235,110,220,198,230,160,127,122,192,40,69,1,149,190,140,197,194,28,83,56,19,155,75,74,178, + 55,196,0,0,0,1,0,110,255,226,4,53,6,179,0,38,0,0,1,16,33,32,17,51,16,33,32,17,52,43,1,53,51,50,53,52,39,35,53,51, + 50,53,52,33,35,53,51,32,17,20,7,51,22,21,22,7,22,4,53,254,24,254,33,190,1,33,1,45,154,231,211,154,154,231,231,131,254,109,118,118, + 2,81,151,2,169,1,131,150,1,153,254,73,2,4,254,156,1,23,197,179,132,121,1,181,153,184,158,254,170,155,97,78,135,148,71,110,0,1,0,120, + 255,226,4,62,6,178,0,38,0,0,5,32,25,1,51,17,16,33,32,17,52,39,35,53,51,50,55,38,43,1,53,51,54,53,52,33,53,32,17,6, + 7,35,22,23,6,7,22,21,16,2,92,254,28,181,1,48,1,39,131,169,169,108,5,5,131,166,166,111,254,215,1,231,1,159,2,182,1,1,173,192, + 30,1,230,4,77,251,179,254,186,1,18,224,2,177,131,125,183,1,180,129,158,254,210,165,83,103,126,128,92,86,225,254,78,0,0,0,0,2,0,110, + 255,95,4,54,6,179,0,9,0,31,0,0,1,16,5,36,25,1,16,33,32,17,3,50,55,35,0,25,1,16,33,32,25,1,16,1,22,51,21,34, + 37,35,4,39,1,44,1,36,1,42,254,215,254,219,190,217,63,2,254,234,1,226,1,228,254,229,46,239,195,254,231,21,254,238,197,2,210,254,104,120, + 120,1,152,1,162,1,160,254,96,251,169,83,1,4,1,94,1,166,2,59,253,193,254,94,254,162,254,248,79,190,230,231,1,0,0,0,0,1,0,110, + 255,226,4,52,6,181,0,28,0,0,1,16,33,32,17,53,51,21,16,33,32,17,53,16,43,1,53,51,36,17,5,21,35,17,37,16,5,4,17,4, + 52,254,23,254,37,189,1,37,1,40,242,228,123,1,91,253,181,193,3,198,254,186,1,70,1,150,254,76,1,212,211,221,254,214,1,20,155,1,26,164, + 173,1,120,23,236,1,143,21,253,191,158,113,254,210,0,0,0,1,0,110,255,226,4,66,6,180,0,32,0,0,1,16,33,32,17,53,51,21,16,33, + 32,17,16,33,35,53,51,36,3,6,35,4,17,51,20,33,50,55,51,21,2,5,4,4,53,254,24,254,33,191,1,32,1,45,254,234,192,110,1,103, + 2,167,131,254,33,190,1,33,222,125,154,11,254,213,1,41,1,200,254,26,1,230,142,142,254,186,1,70,1,96,173,30,1,187,111,2,1,119,198,197, + 225,254,128,166,156,0,0,0,0,3,0,110,255,226,4,193,6,179,0,7,0,15,0,37,0,0,1,33,36,17,16,33,32,53,1,16,41,1,17,52, + 33,32,1,21,16,33,32,17,16,37,35,36,17,16,33,32,17,21,51,21,35,17,51,21,3,132,254,199,254,225,1,38,1,50,253,168,1,31,1,57, + 254,206,254,218,3,9,254,22,254,35,1,12,1,254,245,1,228,1,227,140,140,140,2,222,2,254,206,254,212,244,3,98,254,186,1,159,227,251,218,120, + 254,108,1,204,1,33,106,96,1,63,1,219,254,126,151,190,254,202,184,0,0,2,0,110,255,226,7,54,6,180,0,10,0,44,0,0,1,17,52,38, + 35,32,19,17,16,5,32,19,16,33,34,39,21,16,33,53,32,53,17,16,33,34,6,29,1,16,33,21,32,3,53,16,36,55,32,23,54,33,4,18, + 21,6,124,129,166,254,222,2,1,32,1,39,186,254,24,128,154,254,47,1,20,254,218,139,153,1,37,254,29,1,1,24,203,1,4,137,118,1,1,1, + 39,186,3,181,1,3,195,154,254,217,254,107,254,212,1,1,132,253,221,135,158,254,108,160,244,3,120,1,39,155,194,253,254,175,165,1,246,253,1,1, + 250,1,216,216,1,254,196,191,0,3,0,122,254,30,6,249,6,135,0,7,0,15,0,35,0,0,1,4,7,3,6,51,50,37,23,36,55,19,54,35, + 34,5,1,6,5,19,35,3,4,35,34,27,1,54,37,3,51,19,36,51,50,3,3,154,253,252,27,66,23,112,114,1,46,171,2,4,14,72,27,143, + 90,254,227,2,100,32,253,68,93,207,93,254,199,169,211,42,72,36,2,188,79,190,72,1,53,193,212,42,3,252,78,168,254,44,174,174,174,70,104,1, + 250,174,73,253,161,224,40,253,244,2,145,175,1,50,1,249,250,58,2,40,253,106,110,254,205,0,0,0,0,2,0,100,254,40,6,19,6,211,0,48, + 0,60,0,0,1,22,0,21,20,7,4,17,2,5,36,3,52,55,39,38,39,6,17,16,5,4,23,35,38,37,6,7,39,54,55,36,17,16,37,38, + 53,55,23,7,20,22,51,50,54,53,38,0,53,1,16,35,34,7,6,7,6,21,18,5,54,3,107,1,1,86,30,1,111,21,254,114,254,98,20,60, + 70,106,85,221,1,101,2,43,5,219,11,254,124,150,116,122,107,156,254,158,1,58,36,38,160,24,151,97,111,128,1,254,172,2,165,239,31,27,54,88, + 67,10,1,1,229,6,211,164,254,230,171,102,69,20,254,44,254,32,20,20,1,235,102,142,10,9,92,55,254,185,254,172,173,192,222,168,89,3,152,108, + 103,47,233,1,66,1,191,56,77,117,177,56,121,142,144,137,139,122,1,27,212,251,14,1,82,5,52,26,93,161,254,149,10,10,0,0,0,2,0,100, + 255,226,3,172,6,30,0,3,0,22,0,0,19,33,21,33,1,16,33,32,17,55,51,7,16,51,50,17,38,36,53,51,22,23,22,217,2,86,253,170, + 2,211,254,91,254,93,39,176,35,242,239,1,254,122,187,2,190,191,6,30,148,252,32,254,56,1,190,208,208,254,206,1,60,221,254,221,173,126,126,0, + 0,3,0,100,255,226,3,172,6,56,0,3,0,7,0,26,0,0,1,51,21,35,37,51,21,35,1,16,33,32,17,55,51,7,16,51,50,17,38,36, + 53,51,22,23,22,2,76,203,203,254,121,203,203,2,231,254,91,254,93,39,176,35,242,239,1,254,122,187,2,190,191,6,56,202,202,202,252,60,254,56, + 1,190,208,208,254,206,1,60,221,254,221,173,126,126,0,0,0,4,0,100,255,226,3,172,7,0,0,18,0,22,0,26,0,30,0,0,1,16,33,32, + 17,55,51,7,16,51,50,17,38,36,53,51,22,23,22,1,33,21,33,1,51,21,35,37,51,21,35,3,172,254,91,254,93,39,176,35,242,239,1,254, + 122,187,2,190,191,253,13,2,86,253,170,1,137,203,203,254,121,203,203,1,170,254,56,1,190,208,208,254,206,1,60,221,254,221,173,126,126,2,182,148, + 2,37,202,202,202,0,0,0,0,2,0,100,255,226,3,172,6,140,0,3,0,22,0,0,1,51,1,35,1,16,33,32,17,55,51,7,16,51,50,17, + 38,36,53,51,22,23,22,2,39,235,254,254,173,2,73,254,91,254,93,39,176,35,242,239,1,254,122,187,2,190,191,6,140,254,248,252,38,254,56,1, + 190,208,208,254,206,1,60,221,254,221,173,126,126,0,0,0,0,3,0,100,255,226,3,172,7,24,0,3,0,7,0,26,0,0,1,51,3,35,7,33, + 21,33,1,16,33,32,17,55,51,7,16,51,50,17,38,36,53,51,22,23,22,2,39,185,228,153,150,2,86,253,170,2,223,254,91,254,93,39,176,35, + 242,239,1,254,122,187,2,190,191,7,24,254,248,121,148,252,167,254,56,1,190,208,208,254,206,1,60,221,254,221,173,126,126,0,0,0,0,2,0,100, + 255,226,3,172,6,121,0,8,0,27,0,0,1,2,32,3,51,22,51,50,55,19,16,33,32,17,55,51,7,16,51,50,17,38,36,53,51,22,23,22, + 3,40,19,253,180,19,118,25,170,172,23,250,254,91,254,93,39,176,35,242,239,1,254,122,187,2,190,191,6,121,254,225,1,31,150,150,251,49,254,56, + 1,190,208,208,254,206,1,60,221,254,221,173,126,126,0,0,0,2,0,100,254,29,3,152,6,30,0,3,0,27,0,0,1,33,21,33,1,16,33,32, + 17,55,51,7,16,51,50,25,1,16,35,34,21,23,35,39,16,33,32,17,1,11,2,86,253,170,2,141,254,116,254,88,33,172,25,244,226,225,200,55, + 172,49,1,110,1,139,6,30,148,250,55,254,92,1,166,225,227,254,232,1,22,3,19,1,2,244,226,220,1,134,254,111,0,2,0,100,254,29,3,152, + 6,100,0,3,0,27,0,0,1,51,1,35,1,16,33,32,17,55,51,7,16,51,50,25,1,16,35,34,21,23,35,39,16,33,32,17,2,109,235,254, + 254,173,1,239,254,116,254,88,33,172,25,244,226,225,200,55,172,49,1,110,1,139,6,100,254,248,250,101,254,92,1,166,225,227,254,232,1,22,3,19, + 1,2,244,226,220,1,134,254,111,0,0,0,0,3,0,100,254,29,3,152,7,54,0,3,0,7,0,31,0,0,1,51,3,35,7,33,21,33,1,16, + 33,32,17,55,51,7,16,51,50,25,1,16,35,34,21,23,35,39,16,33,32,17,2,89,215,228,183,150,2,86,253,170,2,153,254,116,254,88,33,172, + 25,244,226,225,200,55,172,49,1,110,1,139,7,54,254,248,121,148,250,160,254,92,1,166,225,227,254,232,1,22,3,19,1,2,244,226,220,1,134,254, + 111,0,0,0,0,2,0,100,254,29,3,152,6,121,0,8,0,32,0,0,1,2,32,3,51,22,51,50,55,19,16,33,32,17,55,51,7,16,51,50, + 25,1,16,35,34,21,23,35,39,16,33,32,17,3,80,19,253,180,19,118,25,170,172,23,190,254,116,254,88,33,172,25,244,226,225,200,55,172,49,1, + 110,1,139,6,121,254,225,1,31,150,150,249,72,254,92,1,166,225,227,254,232,1,22,3,19,1,2,244,226,220,1,134,254,111,0,0,0,2,0,100, + 0,0,3,192,6,30,0,17,0,21,0,0,1,16,3,35,18,17,16,35,34,17,16,19,35,2,17,16,33,32,1,33,21,33,3,192,153,173,146,246, + 254,145,174,151,1,178,1,170,253,55,2,86,253,170,2,68,254,244,254,200,1,33,1,35,1,144,254,109,254,224,254,223,1,58,1,13,2,25,1,190, + 148,0,0,0,0,2,0,100,0,0,3,192,6,100,0,17,0,21,0,0,1,16,3,35,18,17,16,35,34,17,16,19,35,2,17,16,33,32,1,51, + 1,35,3,192,153,173,146,246,254,145,174,151,1,178,1,170,254,183,225,254,254,163,2,68,254,244,254,201,1,32,1,35,1,144,254,109,254,224,254,223, + 1,58,1,13,2,25,2,4,254,248,0,0,0,2,0,100,0,0,3,192,6,121,0,17,0,26,0,0,1,16,3,35,18,17,16,35,34,17,16,19, + 35,2,17,16,33,32,3,2,32,3,51,22,51,50,55,3,192,153,173,146,246,254,145,174,151,1,178,1,170,112,19,253,180,19,118,25,170,172,23,2, + 68,254,244,254,201,1,32,1,35,1,144,254,109,254,224,254,223,1,58,1,13,2,25,2,25,254,225,1,31,150,150,0,0,2,0,100,255,255,5,230, + 6,30,0,28,0,32,0,0,1,18,1,35,0,17,2,35,34,17,21,35,53,16,35,34,17,2,1,35,0,17,16,33,50,23,54,51,32,1,33,21, + 33,5,230,1,254,237,209,1,47,1,210,231,166,231,211,1,1,56,209,254,230,1,136,225,87,98,220,1,133,252,20,2,86,253,170,2,86,254,209,254, + 217,1,22,1,64,1,126,254,167,210,210,1,89,254,130,254,205,254,220,1,36,1,51,2,10,227,227,1,190,148,0,0,0,3,0,100,255,255,5,230, + 6,56,0,28,0,32,0,36,0,0,1,18,1,35,0,17,2,35,34,17,21,35,53,16,35,34,17,2,1,35,0,17,16,33,50,23,54,51,32,1, + 51,21,35,37,51,21,35,5,230,1,254,237,209,1,47,1,210,231,166,231,211,1,1,56,209,254,230,1,136,225,87,98,220,1,133,253,155,203,203,254, + 121,203,203,2,86,254,209,254,217,1,22,1,64,1,126,254,167,210,210,1,89,254,130,254,205,254,220,1,36,1,51,2,10,227,227,1,216,202,202,202, + 0,4,0,100,255,255,5,230,7,40,0,28,0,32,0,36,0,40,0,0,1,18,1,35,0,17,2,35,34,17,21,35,53,16,35,34,17,2,1,35, + 0,17,16,33,50,23,54,51,32,1,33,21,33,1,51,21,35,37,51,21,35,5,230,1,254,237,209,1,47,1,210,231,166,231,211,1,1,56,209,254, + 230,1,136,225,87,98,220,1,133,252,18,2,86,253,170,1,137,203,203,254,121,203,203,2,86,254,209,254,217,1,22,1,64,1,126,254,167,210,210,1, + 89,254,130,254,205,254,220,1,36,1,51,2,10,227,227,1,55,148,2,37,202,202,202,0,0,2,0,100,255,255,5,230,6,100,0,28,0,32,0,0, + 1,18,1,35,0,17,2,35,34,17,21,35,53,16,35,34,17,2,1,35,0,17,16,33,50,23,54,51,32,1,51,1,35,5,230,1,254,237,209,1, + 47,1,210,231,166,231,211,1,1,56,209,254,230,1,136,225,87,98,220,1,133,253,118,225,254,254,163,2,86,254,209,254,217,1,22,1,64,1,126,254, + 167,210,210,1,89,254,130,254,205,254,220,1,36,1,51,2,10,227,227,2,4,254,248,0,0,2,0,100,255,255,5,230,6,121,0,28,0,37,0,0, + 1,18,1,35,0,17,2,35,34,17,21,35,53,16,35,34,17,2,1,35,0,17,16,33,50,23,54,51,32,1,2,32,3,51,22,51,50,55,5,230, + 1,254,237,209,1,47,1,210,231,166,231,211,1,1,56,209,254,230,1,136,225,87,98,220,1,133,254,139,19,253,180,19,118,25,170,172,23,2,86,254, + 209,254,217,1,22,1,64,1,126,254,167,210,210,1,89,254,130,254,205,254,220,1,36,1,51,2,10,227,227,2,25,254,225,1,31,150,150,0,0,0, + 0,2,0,60,254,29,3,232,6,30,0,3,0,36,0,0,19,33,21,33,1,16,33,32,17,55,51,7,16,33,50,25,1,38,35,34,21,3,35,3, + 52,43,1,39,55,23,51,50,23,54,51,32,17,237,2,86,253,170,2,251,254,110,254,71,25,178,23,1,5,232,2,135,123,10,143,10,156,82,109,20, + 87,80,143,79,67,160,1,48,6,30,148,250,54,254,93,1,163,227,227,254,233,1,23,3,103,182,140,254,165,1,91,120,40,161,50,187,187,254,199,0, + 0,3,0,60,254,29,3,232,6,56,0,3,0,7,0,40,0,0,1,51,21,35,37,51,21,35,1,16,33,32,17,55,51,7,16,33,50,25,1,38, + 35,34,21,3,35,3,52,43,1,39,55,23,51,50,23,54,51,32,17,2,116,203,203,254,121,203,203,2,251,254,110,254,71,25,178,23,1,5,232,2, + 135,123,10,143,10,156,82,109,20,87,80,143,79,67,160,1,48,6,56,202,202,202,250,82,254,93,1,163,227,227,254,233,1,23,3,103,182,140,254,165, + 1,91,120,40,161,50,187,187,254,199,0,0,0,4,0,60,254,29,3,232,7,60,0,3,0,7,0,11,0,44,0,0,19,33,21,33,1,51,21,35, + 37,51,21,35,1,16,33,32,17,55,51,7,16,33,50,25,1,38,35,34,21,3,35,3,52,43,1,39,55,23,51,50,23,54,51,32,17,235,2,86, + 253,170,1,137,203,203,254,121,203,203,2,251,254,110,254,71,25,178,23,1,5,232,2,135,123,10,143,10,156,82,109,20,87,80,143,79,67,160,1,48, + 5,171,148,2,37,202,202,202,249,78,254,93,1,163,227,227,254,233,1,23,3,103,182,140,254,165,1,91,120,40,161,50,187,187,254,199,0,2,0,60, + 254,29,3,232,6,100,0,3,0,36,0,0,1,51,3,35,1,16,33,32,17,55,51,7,16,33,50,25,1,38,35,34,21,3,35,3,52,43,1,39, + 55,23,51,50,23,54,51,32,17,2,89,215,248,163,2,83,254,110,254,71,25,178,23,1,5,232,2,135,123,10,143,10,156,82,109,20,87,80,143,79, + 67,160,1,48,6,100,254,248,250,100,254,93,1,163,227,227,254,233,1,23,3,103,182,140,254,165,1,91,120,40,161,50,187,187,254,199,0,2,0,60, + 254,29,3,232,6,121,0,8,0,41,0,0,1,2,32,3,51,22,51,50,55,1,16,33,32,17,55,51,7,16,33,50,25,1,38,35,34,21,3,35, + 3,52,43,1,39,55,23,51,50,23,54,51,32,17,3,70,19,253,180,19,118,25,170,172,23,1,24,254,110,254,71,25,178,23,1,5,232,2,135,123, + 10,143,10,156,82,109,20,87,80,143,79,67,160,1,48,6,121,254,225,1,31,150,150,249,71,254,93,1,163,227,227,254,233,1,23,3,103,182,140,254, + 165,1,91,120,40,161,50,187,187,254,199,0,0,2,0,60,254,29,3,232,6,209,0,6,0,39,0,0,1,19,35,39,7,35,19,1,16,33,32,17, + 55,51,7,16,33,50,25,1,38,35,34,21,3,35,3,52,43,1,39,55,23,51,50,23,54,51,32,17,2,88,245,139,180,180,139,245,2,36,254,110, + 254,71,25,178,23,1,5,232,2,135,123,10,143,10,156,82,109,20,87,80,143,79,67,160,1,48,6,209,254,136,245,245,1,120,248,239,254,93,1,163, + 227,227,254,233,1,23,3,103,182,140,254,165,1,91,120,40,161,50,187,187,254,199,0,0,0,2,0,113,255,227,4,117,6,20,0,9,0,32,0,0, + 1,34,6,16,22,32,54,53,52,38,1,16,55,46,1,53,52,54,51,33,21,33,34,21,20,22,51,50,0,16,0,32,0,2,114,147,172,171,1,40, + 172,172,253,107,195,79,65,194,158,1,252,254,40,188,117,146,237,1,21,254,237,254,32,254,239,3,223,231,254,110,231,232,199,200,233,254,80,1,77,155, + 47,141,49,124,148,147,137,73,52,254,200,253,218,254,198,1,57,0,0,0,0,1,0,47,0,0,5,170,6,20,0,36,0,72,64,19,38,0,7,9, + 5,8,12,33,24,13,30,8,17,12,33,16,20,76,37,16,252,60,196,50,196,252,60,196,16,60,252,60,196,196,196,49,0,64,17,9,13,17,169,18, + 2,26,135,0,24,151,6,31,18,188,11,15,47,60,230,50,50,254,60,238,50,16,238,50,50,48,1,21,35,34,6,29,1,33,21,33,17,35,17,33, + 17,35,17,35,53,51,53,52,54,59,1,21,35,34,7,6,29,1,33,53,52,54,51,5,170,176,99,77,1,47,254,209,185,254,7,185,176,176,174,189, + 174,176,99,39,38,1,249,174,189,6,20,153,80,104,99,143,252,47,3,209,252,47,3,209,143,78,187,171,153,40,40,104,99,78,187,171,0,2,0,47, + 0,0,4,74,6,20,0,21,0,25,0,82,64,17,27,70,0,23,8,22,15,20,4,8,8,3,22,10,6,76,26,16,252,60,196,50,196,252,60,196, + 16,254,60,236,49,0,64,18,8,3,169,0,16,135,14,24,190,22,177,14,151,9,0,188,5,1,47,60,230,50,238,254,238,16,238,16,238,50,48,64, + 11,255,27,160,27,144,27,128,27,16,27,5,1,93,1,17,35,17,33,17,35,17,35,53,51,53,52,54,59,1,21,35,34,6,29,1,1,51,21,35, + 4,74,185,254,7,185,176,176,173,179,185,176,99,77,1,249,185,185,4,96,251,160,3,209,252,47,3,209,143,78,183,175,153,80,104,99,1,178,233,0, + 0,1,0,47,0,0,4,74,6,20,0,21,0,55,64,15,23,70,1,8,4,10,12,8,8,16,4,18,14,76,22,16,252,60,196,196,252,60,196,16, + 254,236,49,0,64,13,15,11,169,9,4,135,0,151,17,9,188,13,2,47,60,230,50,254,238,16,238,50,48,1,33,17,35,17,33,34,6,29,1,33, + 21,33,17,35,17,35,53,51,53,52,54,2,74,2,0,185,254,183,99,77,1,47,254,209,185,176,176,174,6,20,249,236,5,123,80,104,99,143,252,47, + 3,209,143,78,187,171,0,0,0,2,0,47,0,0,6,252,6,20,0,41,0,45,0,90,64,24,47,70,23,43,8,42,16,27,21,8,26,42,9,0, + 31,6,8,36,30,9,34,38,76,46,16,252,60,196,50,196,252,60,196,16,196,50,252,60,196,16,252,60,236,49,0,64,23,27,31,35,169,36,17,1, + 135,0,45,190,42,177,16,0,151,22,7,36,188,25,29,33,47,60,60,228,50,50,228,50,244,236,16,236,50,16,236,50,50,48,1,21,35,34,7,6, + 29,1,33,53,52,55,54,55,54,59,1,21,35,34,6,29,1,33,17,35,17,33,17,35,17,33,17,35,17,35,53,51,53,52,54,51,5,51,21,35, + 2,248,176,99,39,38,1,249,87,28,39,78,131,174,176,99,77,2,178,185,254,7,185,254,7,185,176,176,174,189,3,249,185,185,6,20,153,40,40,104, + 99,78,187,85,28,19,39,153,80,104,99,251,160,3,209,252,47,3,209,252,47,3,209,143,78,187,171,2,233,0,0,0,0,1,0,47,0,0,6,252, + 6,20,0,38,0,78,64,22,40,70,13,8,16,22,24,20,8,16,9,0,28,6,8,33,27,9,31,35,76,39,16,252,60,196,50,196,252,60,196,16, + 196,252,60,196,16,252,236,49,0,64,18,24,28,32,169,33,17,2,135,12,38,151,21,7,33,188,15,26,30,47,60,60,228,50,50,244,60,236,50,16, + 236,50,50,48,1,21,35,34,7,6,29,1,33,53,52,54,51,33,17,35,17,33,34,6,29,1,33,21,33,17,35,17,33,17,35,17,35,53,51,53, + 52,54,51,2,248,176,99,39,38,1,249,174,189,2,0,185,254,183,99,77,1,47,254,209,185,254,7,185,176,176,174,189,6,20,153,40,40,104,99,78, + 187,171,249,236,5,123,80,104,99,143,252,47,3,209,252,47,3,209,143,78,187,171,0,0,0,1,0,47,0,0,5,76,6,20,0,45,0,0,1,53, + 52,39,38,43,1,34,7,6,21,17,35,17,35,53,51,53,52,55,54,59,1,50,23,22,29,1,33,21,33,17,20,23,22,59,1,21,35,34,39,38, + 53,17,35,53,3,24,36,37,101,34,99,39,38,185,176,176,87,87,189,30,189,87,85,1,123,254,133,37,38,115,189,189,213,81,81,135,4,96,99,104, + 40,40,40,40,104,251,61,3,209,143,78,187,85,86,86,83,189,78,143,253,160,137,39,39,154,80,79,210,2,96,143,0,0,1,0,111,255,227,6,178, + 5,240,0,89,0,0,1,21,38,39,38,35,34,7,6,21,20,23,22,31,1,30,1,21,20,7,6,35,34,39,38,39,53,22,23,22,51,50,55,54, + 53,52,39,38,47,1,38,39,38,53,52,55,54,51,50,23,38,53,52,55,54,55,50,23,22,29,1,33,21,33,17,20,23,22,59,1,21,35,34,39, + 38,53,17,35,53,51,53,52,39,38,7,34,7,6,21,20,3,81,86,73,84,70,117,63,59,49,49,148,63,195,166,123,124,216,96,92,97,108,102,99, + 99,97,130,70,70,50,45,177,64,171,76,76,102,112,181,72,77,5,92,91,162,140,98,94,1,123,254,133,37,38,115,189,189,213,81,81,135,135,48,54, + 68,69,54,52,4,63,174,43,17,20,42,39,87,64,37,36,33,14,43,152,137,156,91,91,17,18,35,190,53,26,27,45,44,81,75,40,35,42,15,36, + 74,75,130,166,78,86,11,29,31,135,95,93,1,96,92,136,76,143,253,160,137,39,39,154,80,79,210,2,96,143,78,65,43,50,1,49,48,64,61,0, + 0,1,0,171,255,227,8,227,6,20,0,75,0,0,1,22,21,17,35,53,14,1,35,34,38,53,17,51,17,20,22,51,50,54,53,17,52,39,33,34, + 39,38,53,52,55,54,59,1,21,35,34,21,20,51,33,39,38,53,52,55,54,59,1,21,35,34,21,20,31,1,33,3,20,22,51,50,54,53,17,51, + 17,35,53,14,1,35,34,38,53,17,4,79,9,184,67,177,117,193,200,184,124,124,149,173,5,254,83,152,91,80,90,119,114,89,89,131,131,1,108,23, + 54,9,55,209,236,222,96,14,59,1,221,1,124,124,149,173,184,184,67,177,117,193,200,3,182,37,33,252,144,172,102,99,240,231,1,102,254,161,159,159, + 190,164,1,145,36,28,94,83,145,131,66,87,175,123,138,56,131,75,31,21,122,175,43,41,32,145,253,97,160,158,190,164,2,123,251,160,172,102,99,240, + 231,1,252,0,0,1,0,174,255,227,8,227,6,20,0,58,0,0,1,33,38,21,20,31,1,22,21,17,35,53,14,1,35,34,38,53,17,51,17,20, + 22,51,50,54,53,17,52,47,1,38,55,54,51,33,17,33,21,33,17,20,22,51,50,55,54,53,17,51,17,35,53,14,1,35,34,38,53,5,57,254, + 243,96,14,77,49,184,67,177,117,193,200,184,124,124,149,173,16,77,77,32,55,209,1,211,2,242,253,14,124,124,152,83,87,184,184,67,177,117,193,200, + 5,101,1,44,39,34,188,120,77,252,144,172,102,99,240,231,2,166,253,97,159,159,190,164,1,145,63,39,188,187,71,122,254,76,170,254,11,159,159,95, + 98,161,1,59,252,224,172,102,99,240,231,0,0,1,0,174,254,86,8,227,6,20,0,53,0,0,1,33,38,21,20,31,1,22,21,17,35,53,14,1, + 35,34,38,53,17,51,17,20,22,51,50,54,53,17,52,47,1,38,55,54,51,33,17,62,1,51,50,22,21,17,35,17,52,38,35,34,6,21,17,35, + 5,57,254,243,96,14,77,49,184,67,177,117,193,200,184,124,124,149,173,16,77,77,32,55,209,1,212,66,179,117,193,198,184,124,124,149,172,185,5,101, + 1,44,39,34,188,120,77,252,144,172,102,99,240,231,2,166,253,97,159,159,190,164,1,145,63,39,188,187,71,122,253,158,101,100,239,232,253,92,2,158, + 159,158,190,164,251,221,0,0,0,2,0,174,254,86,8,227,6,20,0,53,0,60,0,0,1,33,34,39,38,55,54,55,54,51,33,17,33,17,20,22, + 51,50,54,53,17,51,17,35,53,14,1,35,34,38,53,17,35,17,51,21,33,17,14,1,35,34,38,53,17,51,17,20,22,51,50,55,54,53,25,1, + 33,34,21,20,51,3,160,254,219,149,94,83,3,3,87,115,118,1,221,1,153,124,124,149,173,184,184,67,177,117,193,200,225,213,254,115,67,177,117,193, + 200,184,124,124,149,87,86,254,219,131,131,3,182,94,83,145,131,66,87,254,76,253,97,159,159,190,164,2,123,251,160,172,102,99,240,231,1,252,251,66, + 162,2,86,102,99,240,231,1,102,254,161,159,159,95,95,164,2,123,1,5,123,138,0,0,0,1,0,174,254,86,11,155,6,20,0,72,0,0,1,33, + 38,21,20,31,1,22,21,17,35,53,14,1,35,34,38,53,17,51,17,20,22,51,50,54,53,17,52,47,1,38,55,54,51,33,17,54,55,54,51,50, + 22,29,1,20,23,22,51,50,54,53,17,51,17,35,53,14,1,35,34,39,38,61,1,52,38,35,34,6,21,17,35,5,57,254,243,96,14,77,49,184, + 67,177,117,193,200,184,124,124,149,173,16,77,77,32,55,209,1,212,99,37,90,107,193,198,62,56,110,140,173,184,184,67,177,108,175,98,100,124,124,120, + 172,185,5,101,1,44,39,34,188,120,77,252,144,172,102,99,240,231,2,166,253,97,159,159,190,164,1,145,63,39,188,187,71,122,253,158,129,22,50,239, + 232,227,151,88,79,190,164,2,123,251,160,172,102,99,120,123,228,228,159,158,190,164,251,221,255,255,0,136,0,91,1,66,4,96,18,38,5,47,0,0, + 16,7,5,20,254,78,1,160,0,1,1,86,5,0,3,200,6,31,0,12,0,0,1,51,30,1,51,50,54,55,51,14,1,32,38,1,86,118,11,97, + 87,86,96,13,118,10,158,254,222,158,6,31,75,75,74,76,143,144,144,0,255,255,0,74,0,91,2,162,4,96,18,38,5,67,0,0,16,7,5,23, + 254,231,1,160,0,1,0,78,0,0,4,126,4,96,0,22,0,0,1,19,50,55,54,55,54,61,1,51,17,20,14,5,35,33,53,33,3,1,99,193, + 250,92,64,8,2,186,14,38,64,101,139,190,120,254,106,1,20,193,4,96,252,81,163,113,242,60,118,247,254,214,116,182,176,129,111,69,39,177,3,175, + 0,1,0,174,0,0,6,45,4,96,0,32,0,0,9,1,35,1,14,3,21,17,35,17,52,62,2,55,1,51,1,62,3,53,17,51,21,20,14,3, + 4,179,1,122,237,253,75,45,98,91,59,184,73,119,122,63,254,135,237,2,180,45,98,92,59,184,50,78,104,96,1,105,254,151,2,151,6,56,94,151, + 88,254,244,1,10,100,173,119,78,22,1,106,253,105,6,56,94,151,88,1,12,246,86,154,110,90,55,0,0,1,0,88,0,0,5,189,4,96,0,7, + 0,0,1,35,17,35,17,33,53,33,5,189,202,186,252,31,5,101,3,209,252,47,3,209,143,0,0,0,0,2,0,186,0,0,6,29,4,96,0,19, + 0,23,0,0,1,17,35,17,52,46,4,35,33,53,33,50,30,4,37,17,35,17,6,29,185,13,39,62,110,140,105,253,43,2,213,133,196,148,94,59, + 24,251,107,185,1,237,254,19,1,237,106,139,116,64,44,15,143,26,63,93,145,178,69,253,84,2,96,0,0,1,0,88,0,0,5,187,4,96,0,27, + 0,0,19,33,50,30,3,20,14,3,35,33,53,33,50,62,3,52,46,3,35,33,88,2,215,150,232,143,92,35,35,92,143,231,150,253,40,2,216,113, + 168,102,61,22,22,61,102,168,113,253,40,4,96,65,105,149,153,176,153,149,105,65,142,42,72,110,117,154,117,110,72,42,0,1,0,88,0,0,5,187, + 6,20,0,8,0,0,33,1,33,17,51,17,33,21,1,2,160,2,92,251,92,187,4,168,253,164,3,209,2,67,254,76,132,252,36,0,0,2,0,186, + 0,0,6,29,4,96,0,8,0,19,0,0,41,1,17,33,50,30,2,21,1,17,33,17,52,46,4,35,6,29,250,157,3,53,163,211,131,53,251,87, + 3,239,12,33,51,87,109,79,4,96,60,144,217,167,1,189,252,190,1,133,94,130,104,61,41,15,0,0,0,1,0,88,0,0,5,187,4,96,0,15, + 0,0,1,17,35,17,52,46,2,35,33,53,33,50,30,2,5,187,186,29,84,140,116,252,200,3,55,162,211,130,53,2,20,253,236,2,20,134,161,109, + 41,143,60,144,217,0,0,0,0,1,0,96,255,248,5,186,4,96,0,30,0,0,1,17,35,17,52,46,3,35,33,17,20,6,35,34,39,53,22,51, + 50,54,53,17,35,53,33,50,30,2,5,186,186,10,36,64,112,80,254,36,123,152,53,78,65,38,71,46,173,3,67,143,193,108,44,2,94,253,162,2, + 96,74,99,101,58,37,253,205,214,208,16,143,14,114,163,2,51,143,67,138,180,0,0,0,0,1,0,217,2,45,5,219,5,4,0,7,0,0,1,33, + 53,33,17,51,17,33,5,219,250,254,2,45,168,2,45,2,45,170,2,45,253,211,0,0,255,255,0,88,0,0,5,83,5,150,16,38,5,33,161,0, + 18,6,5,63,0,0,0,0,255,255,0,78,0,0,5,83,5,150,16,38,5,25,78,0,18,6,5,63,0,0,0,0,255,255,0,88,0,0,5,83, + 5,150,16,39,5,25,2,88,252,15,16,38,5,33,151,0,18,6,5,63,0,0,0,0,255,255,0,88,0,0,5,83,5,150,16,39,5,25,2,88, + 252,15,16,39,5,33,251,76,0,0,18,6,5,63,0,0,255,255,0,186,254,187,4,159,4,96,16,38,5,23,0,0,18,6,5,38,0,0,0,0, + 255,255,0,186,254,117,4,159,4,96,16,38,5,24,0,0,18,6,5,38,0,0,0,0,255,255,0,186,254,187,4,159,4,96,16,38,5,20,0,0, + 18,6,5,38,0,0,0,0,255,255,0,88,0,0,4,72,4,96,16,39,5,28,254,225,0,0,18,6,5,39,0,0,255,255,0,88,255,246,3,17, + 4,96,16,39,5,28,254,33,0,0,18,6,5,40,0,0,255,255,0,88,0,0,4,23,4,96,16,39,5,28,254,129,0,0,18,6,5,41,0,0, + 255,255,0,186,0,0,4,128,4,96,16,38,5,28,0,0,18,6,5,42,0,0,0,0,255,255,0,89,0,0,2,30,4,96,16,39,5,28,254,11, + 0,0,16,7,5,43,0,170,0,0,0,0,255,255,0,89,0,0,2,231,4,96,16,39,5,28,254,11,0,0,16,6,5,44,122,0,255,255,0,185, + 255,227,4,191,4,107,16,38,5,28,0,0,18,6,5,46,0,0,0,0,255,255,0,89,1,162,2,28,4,96,16,39,5,28,254,11,0,160,16,7, + 5,47,0,218,0,0,0,0,255,255,0,88,254,86,3,146,4,96,16,39,5,28,254,177,0,0,18,6,5,48,0,0,255,255,0,88,0,0,3,202, + 4,96,16,39,5,28,254,177,0,0,18,6,5,49,0,0,255,255,0,88,0,0,3,240,5,213,16,39,5,28,254,81,0,0,18,6,5,50,0,0, + 255,255,0,88,0,0,4,181,4,112,16,38,5,28,48,0,18,6,5,52,0,0,0,0,255,255,0,88,0,0,2,120,4,96,16,39,5,28,254,33, + 0,0,16,6,5,54,0,0,255,255,0,185,255,227,4,191,4,96,16,38,5,28,0,0,18,6,5,55,0,0,0,0,255,255,0,186,254,86,4,100, + 4,96,16,38,5,28,113,0,18,6,5,57,0,0,0,0,255,255,0,186,0,0,4,142,4,96,16,38,5,28,124,0,18,6,5,58,0,0,0,0, + 255,255,0,88,0,0,4,5,4,96,16,39,5,28,254,81,0,0,18,6,5,60,0,0,255,255,0,186,254,86,5,17,4,95,16,38,5,28,209,0, + 18,6,5,61,0,0,0,0,255,255,0,88,0,0,3,202,4,96,16,39,5,28,254,177,0,0,18,6,5,62,0,0,255,255,0,88,0,0,5,83, + 4,96,16,39,5,25,2,57,252,13,18,6,5,63,0,0,255,255,0,20,255,248,4,136,4,96,16,38,5,28,0,0,18,6,5,64,0,0,0,0, + 255,255,0,186,0,0,1,116,5,150,16,39,5,33,251,180,0,0,18,6,5,43,0,0,255,255,0,88,0,0,4,72,5,150,16,39,5,31,255,113, + 0,0,18,6,5,39,0,0,255,255,0,88,0,0,3,202,5,150,16,39,5,31,255,65,0,0,18,6,5,49,0,0,255,255,0,186,0,0,4,142, + 5,150,16,38,5,31,0,0,18,6,5,58,0,0,0,0,0,1,0,88,0,0,4,145,6,20,0,44,0,0,9,1,35,1,14,4,21,17,35,53, + 52,62,5,55,3,35,17,51,17,51,7,1,62,4,53,17,51,21,20,14,5,3,114,1,29,217,254,96,28,35,56,33,26,184,20,31,50,45,65,44, + 31,186,184,187,120,2,1,158,27,35,56,34,26,184,20,31,50,46,64,44,1,155,254,101,2,88,14,21,53,65,110,69,254,244,185,81,138,96,81,50, + 44,21,13,1,13,2,66,254,76,3,253,171,13,21,54,65,110,69,1,12,185,82,137,97,81,49,44,21,255,255,0,130,254,12,6,235,2,157,16,39, + 22,200,3,57,255,6,16,6,5,142,0,0,255,255,0,130,254,12,7,239,2,157,16,39,22,200,3,57,255,6,16,6,22,202,0,0,255,255,255,236, + 254,12,1,135,2,88,16,38,22,203,0,0,16,7,22,200,0,224,255,6,255,255,255,236,254,12,2,126,2,88,16,39,22,200,0,224,255,6,16,6, + 22,204,0,0,255,255,0,130,254,12,6,235,2,157,16,39,22,199,2,188,255,6,16,6,5,142,0,0,255,255,0,130,254,12,7,239,2,157,16,39, + 22,199,2,188,255,6,16,6,22,202,0,0,255,255,255,236,254,12,1,243,2,88,16,38,22,203,0,0,16,7,22,199,0,99,255,6,255,255,255,236, + 254,12,2,126,2,88,16,38,22,204,0,0,16,7,22,199,0,99,255,6,255,255,0,130,254,12,6,235,2,157,16,39,22,201,2,188,255,6,16,6, + 5,142,0,0,255,255,0,130,254,12,7,239,2,157,16,39,22,201,2,188,255,6,16,6,22,202,0,0,255,255,255,236,254,12,1,243,2,88,16,38, + 22,203,0,0,16,7,22,201,0,99,255,6,255,255,255,236,254,12,2,126,2,88,16,38,22,204,0,0,16,7,22,201,0,99,255,6,255,255,0,130, + 255,236,6,235,4,26,16,39,22,200,3,57,3,132,16,6,5,142,0,0,255,255,0,130,255,236,7,239,4,26,16,39,22,200,3,57,3,132,16,6, + 22,202,0,0,255,255,255,236,0,0,1,135,4,226,16,38,22,203,0,0,16,7,22,200,0,224,4,76,255,255,255,236,0,0,2,126,4,226,16,38, + 22,204,0,0,16,7,22,200,0,224,4,76,255,255,0,130,255,236,6,235,4,26,16,39,22,201,2,188,3,132,16,6,5,142,0,0,255,255,0,130, + 255,236,7,239,4,26,16,38,22,202,0,0,16,7,22,201,2,188,3,132,255,255,255,236,0,0,1,243,4,226,16,38,22,203,0,0,16,7,22,201, + 0,99,4,76,255,255,255,236,0,0,2,126,4,226,16,38,22,204,0,0,16,7,22,201,0,99,4,76,255,255,0,130,255,236,6,235,4,153,16,39, + 5,75,1,132,253,168,16,6,5,142,0,0,255,255,0,130,255,236,7,239,4,153,16,38,22,202,0,0,16,7,5,75,1,132,253,168,255,255,255,236, + 0,0,2,48,5,97,16,38,22,203,0,0,16,7,5,75,255,43,254,112,255,255,255,236,0,0,2,126,5,97,16,38,22,204,0,0,16,7,5,75, + 255,43,254,112,255,255,0,130,255,164,7,158,6,14,16,39,22,198,5,120,4,126,16,6,5,186,0,0,255,255,0,130,255,165,8,92,5,70,16,38, + 22,205,0,0,16,7,22,198,5,120,3,182,255,255,255,236,0,0,3,63,6,14,16,38,22,206,0,0,16,7,22,198,1,44,4,126,255,255,255,236, + 0,0,4,32,5,120,16,38,22,207,0,0,16,7,22,198,1,62,3,232,255,255,0,130,255,164,7,158,6,14,16,39,22,201,5,120,5,120,16,6, + 5,186,0,0,255,255,0,130,255,165,8,92,5,70,16,38,22,205,0,0,16,7,22,201,5,120,4,176,255,255,255,236,0,0,3,63,6,14,16,38, + 22,206,0,0,16,7,22,201,1,44,5,120,255,255,255,236,0,0,4,32,5,120,16,38,22,207,0,0,16,7,22,201,1,62,4,226,255,255,0,157, + 254,12,5,40,3,102,16,39,22,200,3,7,0,175,16,6,5,90,0,0,255,255,0,157,254,12,5,62,3,102,16,39,22,200,2,163,0,125,16,6, + 20,134,0,0,255,255,255,236,254,62,4,92,3,47,16,38,20,135,0,0,16,7,22,200,2,13,255,56,255,255,255,236,254,62,5,62,3,47,16,38, + 20,136,0,0,16,7,22,200,2,13,255,56,255,255,0,157,254,12,5,40,3,102,16,39,22,197,2,138,0,25,16,6,5,90,0,0,255,255,0,157, + 254,12,5,62,3,102,16,39,22,197,2,38,255,231,16,6,20,134,0,0,255,255,255,236,255,56,4,92,3,47,16,38,20,135,0,0,16,7,22,197, + 1,144,255,56,255,255,255,236,255,56,5,62,3,47,16,38,20,136,0,0,16,7,22,197,1,144,255,56,255,255,0,157,254,12,5,40,3,102,16,39, + 22,199,2,150,0,150,16,6,5,90,0,0,255,255,0,157,254,12,5,62,3,102,16,39,22,199,2,25,0,50,16,6,20,134,0,0,255,255,255,236, + 254,62,4,92,3,47,16,38,20,135,0,0,16,7,22,199,1,144,255,56,255,255,255,236,254,62,5,62,3,47,16,38,20,136,0,0,16,7,22,199, + 1,144,255,56,255,255,0,157,254,12,5,40,3,102,16,39,22,201,2,150,0,175,16,6,5,90,0,0,255,255,0,157,254,12,5,62,3,102,16,39, + 22,201,2,25,0,50,16,6,20,134,0,0,255,255,255,236,254,62,4,92,3,47,16,38,20,135,0,0,16,7,22,201,1,144,255,56,255,255,255,236, + 254,62,5,62,3,47,16,38,20,136,0,0,16,7,22,201,1,144,255,56,255,255,0,125,254,212,3,27,3,82,16,39,22,197,1,43,254,212,16,6, + 5,92,0,0,255,255,0,125,254,212,4,71,3,82,16,39,22,197,1,43,254,212,16,6,20,142,0,0,255,255,0,125,255,218,3,27,4,176,16,39, + 22,197,0,250,4,26,16,6,5,92,0,0,255,255,0,125,255,218,4,71,4,176,16,39,22,197,0,250,4,26,16,6,20,142,0,0,255,255,0,125, + 255,218,3,27,5,170,16,39,22,198,0,250,4,26,16,6,5,92,0,0,255,255,0,125,255,218,4,71,5,170,16,39,22,198,0,250,4,26,16,6, + 20,142,0,0,255,255,0,125,255,218,3,27,5,247,16,39,5,75,255,194,255,6,16,6,5,92,0,0,255,255,0,125,255,218,4,71,5,247,16,39, + 5,75,255,194,255,6,16,6,20,142,0,0,255,255,255,171,254,12,3,132,4,176,16,39,22,198,1,244,3,32,16,6,5,94,0,0,255,255,255,171, + 254,12,4,126,4,176,16,38,20,146,0,0,16,7,22,198,1,244,3,32,255,255,255,171,254,12,3,193,5,47,16,38,5,94,0,0,16,7,5,75, + 0,188,254,62,255,255,255,171,254,12,4,126,5,47,16,38,20,146,0,0,16,7,5,75,0,188,254,62,255,255,0,130,255,167,7,41,6,20,16,6, + 5,194,0,0,0,1,0,130,255,167,7,217,6,20,0,55,0,0,37,6,7,6,35,34,39,36,17,52,55,51,6,21,20,23,22,51,50,55,54,55, + 54,53,52,39,1,38,53,52,55,54,55,1,21,5,6,7,6,21,20,23,1,22,23,22,59,1,21,35,34,39,38,47,1,6,5,156,99,169,205,183, + 192,128,254,182,63,184,65,203,104,151,184,194,158,35,16,54,254,202,50,10,35,100,2,233,253,173,71,21,6,31,2,71,22,38,43,64,88,132,65,58, + 103,33,97,25,120,76,60,73,38,98,1,11,138,92,94,136,126,66,34,80,65,55,26,46,69,66,1,124,61,81,35,33,119,42,1,54,186,250,30,40, + 11,25,32,37,253,63,26,14,16,184,24,43,41,120,64,0,255,255,255,236,0,0,3,207,6,20,16,6,20,191,0,0,255,255,255,236,0,0,4,127, + 6,20,16,6,20,192,0,0,255,255,0,130,255,167,7,41,7,43,16,39,22,232,3,202,0,0,16,6,5,194,0,0,255,255,0,130,255,167,7,217, + 7,43,16,38,20,28,0,0,16,7,22,232,3,202,0,0,255,255,255,236,0,0,3,207,7,43,16,38,20,29,0,0,16,6,22,232,112,0,0,0, + 255,255,255,236,0,0,4,127,7,43,16,38,20,30,0,0,16,6,22,232,112,0,0,0,255,255,0,130,253,168,7,41,7,43,16,39,22,200,2,213, + 254,162,16,6,5,200,0,0,255,255,0,130,253,168,7,217,7,43,16,38,20,32,0,0,16,7,22,200,2,213,254,162,255,255,255,236,253,218,3,207, + 7,43,16,38,20,33,0,0,16,7,22,200,1,69,254,212,255,255,255,236,253,218,4,127,7,43,16,38,20,34,0,0,16,7,22,200,1,69,254,212, + 255,255,0,130,255,167,7,41,7,58,16,39,22,197,3,132,6,164,16,6,5,200,0,0,255,255,0,130,255,167,7,217,7,58,16,38,20,32,0,0, + 16,7,22,197,3,132,6,164,255,255,255,236,0,0,3,207,7,58,16,38,20,33,0,0,16,7,22,197,0,75,6,164,255,255,255,236,0,0,4,127, + 7,58,16,38,20,34,0,0,16,7,22,197,0,75,6,164,255,255,0,147,254,181,5,72,2,238,16,6,5,211,0,0,0,1,0,147,254,12,6,43, + 2,69,0,38,0,0,1,22,23,22,23,22,59,1,21,35,34,39,6,7,6,7,6,35,34,39,36,17,52,55,51,6,21,20,23,22,51,50,55,54, + 55,54,53,52,39,4,224,44,27,22,50,53,60,75,130,71,34,3,89,120,239,97,92,116,113,254,184,47,184,49,201,90,76,88,79,194,75,33,101,2, + 69,97,96,80,60,64,184,48,109,147,199,66,27,37,107,1,99,175,141,137,179,236,53,24,20,48,227,101,112,184,203,0,255,255,0,147,254,181,5,72, + 5,22,16,39,5,75,0,200,254,37,16,6,5,211,0,0,255,255,0,147,254,12,6,43,4,28,16,38,20,44,0,0,16,7,5,75,0,200,253,43, + 255,255,255,236,0,0,2,48,5,97,16,38,22,203,0,0,16,7,5,75,255,43,254,112,255,255,255,236,0,0,2,126,5,97,16,38,22,204,0,0, + 16,7,5,75,255,43,254,112,255,255,0,144,255,189,5,27,3,229,16,6,5,215,0,0,0,3,0,144,254,13,5,34,2,171,0,9,0,43,0,54, + 0,0,37,62,1,53,52,35,34,7,6,21,37,52,55,51,6,21,20,22,51,48,51,53,16,55,54,32,23,22,21,6,7,33,21,33,22,20,7,6, + 32,38,53,34,39,38,5,20,23,22,51,50,53,52,38,39,6,2,177,63,208,84,75,74,38,253,223,16,184,14,124,20,31,138,116,1,4,68,46,21, + 94,1,40,254,168,163,46,69,254,244,242,58,113,193,2,33,38,80,69,84,191,42,19,159,27,164,52,112,141,72,117,26,74,54,62,40,69,38,55,1, + 9,127,107,99,67,114,121,98,184,108,226,66,99,222,223,31,53,47,105,67,141,112,52,151,12,7,0,0,255,255,255,236,255,189,3,189,3,229,16,6, + 20,207,0,0,255,255,255,236,254,13,3,196,2,171,16,6,20,208,0,0,255,255,0,144,255,201,5,199,6,214,16,39,22,198,2,113,5,70,16,6, + 5,107,0,0,255,255,0,144,255,201,6,210,6,214,16,38,20,190,0,0,16,7,22,198,2,113,5,70,255,255,255,236,0,0,3,207,7,108,16,38, + 20,191,0,0,16,7,22,198,0,75,5,220,255,255,255,236,0,0,4,127,7,108,16,38,20,192,0,0,16,7,22,198,0,75,5,220,255,255,255,171, + 254,12,3,64,4,114,16,39,5,127,255,244,254,62,16,6,5,112,0,0,255,255,255,171,254,12,4,54,4,114,16,39,5,127,255,244,254,62,16,6, + 20,210,0,0,0,1,255,236,0,0,1,135,2,88,0,13,0,0,37,6,43,1,53,51,50,55,54,61,1,51,21,20,1,43,72,157,90,35,99,44, + 49,184,86,86,184,44,49,106,217,217,187,0,0,1,255,236,0,0,2,126,2,88,0,20,0,0,37,6,43,1,53,51,50,55,54,61,1,51,21,20, + 23,22,59,1,21,35,34,1,43,77,152,90,35,99,44,49,184,49,44,99,55,110,150,86,86,184,44,49,106,217,217,106,49,44,184,0,255,255,0,130, + 254,243,5,192,3,74,16,6,5,113,0,0,255,255,0,130,254,240,6,191,2,2,16,6,20,212,0,0,255,255,255,236,254,212,1,243,2,88,16,38, + 20,59,0,0,16,7,22,197,0,99,254,212,255,255,255,236,254,212,2,126,2,88,16,38,20,60,0,0,16,7,22,197,0,99,254,212,0,1,252,112, + 6,4,0,0,7,110,0,7,0,0,17,34,4,7,53,54,36,51,231,254,61,230,236,1,197,223,6,212,103,105,126,119,117,0,0,0,0,1,0,0, + 6,4,3,144,7,110,0,7,0,0,17,53,50,4,23,21,38,36,223,1,197,236,230,254,61,6,212,154,117,119,126,105,103,0,0,0,0,1,253,42, + 6,13,0,0,7,39,0,19,0,0,17,47,1,38,39,38,35,34,7,6,7,35,54,55,54,51,50,23,22,23,4,144,28,79,44,36,101,53,70,5, + 162,4,113,112,200,91,63,56,87,6,72,2,55,11,18,10,36,48,71,135,74,73,14,13,32,0,0,0,0,1,0,0,6,13,2,214,7,39,0,19, + 0,0,17,31,1,22,23,22,51,50,55,54,55,51,6,7,6,35,34,39,38,39,4,144,28,79,44,36,97,57,71,4,162,4,113,112,200,91,63,56, + 87,6,236,2,55,11,18,10,36,44,75,135,74,73,14,13,32,0,0,0,255,255,0,8,4,186,2,80,6,154,16,7,5,115,255,44,0,0,0,0, + 255,255,255,236,0,0,2,108,6,154,16,38,5,104,0,0,16,7,5,115,255,44,0,0,255,255,0,8,4,186,2,80,6,253,16,7,5,116,255,44, + 0,0,0,0,0,1,0,105,0,0,2,44,1,107,0,13,0,0,1,20,23,22,59,1,21,35,34,39,38,61,1,51,1,33,49,44,99,75,130,142, + 92,87,184,1,76,55,49,44,184,92,87,141,43,0,0,0,255,255,0,8,254,22,2,80,255,246,16,7,5,117,255,44,0,0,0,0,255,255,0,8, + 4,186,2,80,5,170,16,7,5,118,255,44,0,0,0,0,255,255,255,236,0,0,2,108,5,170,16,39,5,118,255,44,0,0,16,6,5,104,0,0, + 255,255,0,8,4,185,2,80,6,253,16,7,5,119,255,44,0,0,0,0,255,255,255,236,0,0,2,108,6,253,16,39,5,119,255,44,0,0,16,6, + 5,104,0,0,255,255,0,8,254,232,2,80,255,216,16,7,5,120,255,44,0,0,0,0,255,255,255,236,254,232,2,108,0,184,16,39,5,120,255,44, + 0,0,16,6,5,104,0,0,255,255,255,244,4,203,2,100,6,244,16,7,5,121,255,44,0,0,0,0,255,255,255,236,0,0,2,108,6,244,16,39, + 5,121,255,44,0,0,16,6,5,104,0,0,255,255,0,24,4,225,2,60,7,6,16,7,5,122,255,44,0,0,0,0,255,255,255,236,0,0,2,108, + 7,6,16,38,5,104,0,0,16,7,5,122,255,44,0,0,255,255,0,163,0,85,3,30,3,222,16,6,5,78,0,0,255,255,255,181,0,0,2,133, + 7,131,16,39,5,123,255,29,1,194,16,6,5,84,0,0,255,255,255,181,0,0,2,133,7,131,16,38,20,114,0,0,16,7,5,123,255,29,1,194, + 255,255,0,108,0,0,1,195,8,57,16,39,5,124,255,29,1,194,16,6,5,84,0,0,255,255,0,108,0,0,2,132,8,57,16,38,20,114,0,0, + 16,7,5,124,255,29,1,194,255,255,255,171,254,12,3,64,4,181,16,39,5,124,255,194,254,62,16,6,5,112,0,0,255,255,255,171,254,12,4,54, + 4,181,16,38,20,210,0,0,16,7,5,124,255,194,254,62,255,255,0,108,254,12,1,195,6,20,16,39,5,125,255,29,0,0,16,6,5,84,0,0, + 255,255,0,108,254,12,2,132,6,20,16,38,20,114,0,0,16,7,5,125,255,29,0,0,255,255,0,130,254,243,5,192,4,181,16,39,5,124,255,244, + 254,62,16,6,5,113,0,0,255,255,0,130,254,240,6,191,3,187,16,38,20,212,0,0,16,7,5,124,0,88,253,68,255,255,255,236,0,0,1,209, + 4,231,16,38,20,59,0,0,16,7,5,124,255,43,254,112,255,255,255,236,0,0,2,126,4,231,16,38,20,60,0,0,16,7,5,124,255,43,254,112, + 255,255,0,193,0,0,1,121,6,20,16,6,5,84,0,0,0,1,0,193,0,0,2,132,6,20,0,13,0,0,19,17,51,17,20,23,22,59,1,21, + 35,34,39,38,193,184,49,44,99,75,130,154,80,87,1,115,4,161,251,107,106,49,44,184,92,101,0,0,255,255,0,130,254,162,6,235,2,157,16,39, + 22,196,3,57,254,162,16,6,5,142,0,0,255,255,0,130,254,162,7,239,2,157,16,38,22,202,0,0,16,7,22,196,3,57,254,162,255,255,255,236, + 254,212,1,135,2,88,16,38,22,203,0,0,16,7,22,196,0,224,254,212,255,255,255,236,254,212,2,126,2,88,16,38,22,204,0,0,16,7,22,196, + 0,224,254,212,255,255,0,139,255,198,3,160,4,26,16,39,22,197,0,250,3,132,16,6,5,111,0,0,255,255,0,145,0,0,4,94,4,26,16,38, + 20,206,0,0,16,7,22,197,1,94,3,132,255,255,0,130,255,236,6,235,3,32,16,39,22,197,2,188,2,138,16,6,5,142,0,0,255,255,0,130, + 255,236,7,239,3,32,16,38,22,202,0,0,16,7,22,197,2,188,2,138,255,255,255,236,0,0,1,243,3,232,16,38,22,203,0,0,16,7,22,197, + 0,99,3,82,255,255,255,236,0,0,2,126,3,232,16,38,22,204,0,0,16,7,22,197,0,99,3,82,255,255,0,130,255,236,6,235,4,26,16,39, + 22,198,2,188,2,138,16,6,5,142,0,0,255,255,0,130,255,236,7,239,4,26,16,38,22,202,0,0,16,7,22,198,2,188,2,138,255,255,255,236, + 0,0,1,243,4,226,16,38,22,203,0,0,16,7,22,198,0,99,3,82,255,255,255,236,0,0,2,126,4,226,16,38,22,204,0,0,16,7,22,198, + 0,99,3,82,255,255,0,157,254,12,5,40,3,102,16,39,22,196,3,7,0,25,16,6,5,90,0,0,255,255,0,157,254,12,5,62,3,102,16,38, + 20,134,0,0,16,7,22,196,2,188,255,206,255,255,255,236,254,212,4,92,3,47,16,38,20,135,0,0,16,7,22,196,2,13,254,212,255,255,255,236, + 254,212,5,62,3,47,16,38,20,136,0,0,16,7,22,196,2,13,254,212,255,255,0,157,254,12,5,40,3,102,16,6,5,90,0,0,0,1,0,157, + 254,12,5,62,3,102,0,48,0,0,37,51,21,35,34,39,38,39,38,39,6,7,6,21,20,23,22,33,50,55,21,6,35,32,39,38,53,16,55,54, + 55,34,35,34,7,6,7,53,36,51,32,23,21,34,7,23,22,23,22,5,22,40,49,129,123,82,61,6,73,114,98,224,74,129,1,73,193,212,150,250, + 254,94,169,131,212,96,137,12,13,95,140,135,95,1,16,193,1,38,200,109,31,29,51,72,90,184,184,150,100,156,15,178,24,80,183,252,137,94,164,118, + 184,99,194,150,224,1,2,223,101,52,19,19,41,184,63,54,154,13,91,160,95,119,0,0,0,1,255,236,0,0,4,92,3,47,0,30,0,0,1,38, + 39,38,39,38,7,53,54,55,50,23,4,23,21,6,7,6,7,6,7,6,43,1,53,51,50,55,54,55,54,3,83,83,103,85,180,82,161,72,75,162, + 172,1,2,220,76,88,166,74,145,75,221,163,128,100,227,129,104,116,94,2,29,23,23,19,16,7,6,184,7,1,35,52,98,154,24,52,98,66,129,27, + 80,184,72,58,106,86,0,0,0,1,255,236,0,0,5,62,3,47,0,41,0,0,1,4,23,21,6,7,22,23,22,59,1,21,35,34,39,38,39,6, + 7,6,7,6,43,1,53,51,50,55,54,55,54,55,38,39,38,39,38,7,53,54,55,50,2,126,1,2,220,65,73,50,30,104,114,66,86,209,126,40, + 59,69,41,145,75,221,163,128,100,227,129,104,116,94,101,83,103,85,180,82,161,72,75,162,3,12,52,98,154,20,41,78,34,119,184,168,54,97,46,37, + 129,27,80,184,72,58,106,86,35,23,23,19,16,7,6,184,7,1,0,0,255,255,0,157,254,12,5,40,4,176,16,39,22,196,2,63,4,26,16,6, + 5,90,0,0,255,255,0,157,254,12,5,62,4,176,16,38,20,134,0,0,16,7,22,196,2,63,4,26,255,255,255,236,0,0,4,92,4,76,16,38, + 20,135,0,0,16,7,22,196,2,13,3,182,255,255,255,236,0,0,5,62,4,76,16,38,20,136,0,0,16,7,22,196,2,13,3,182,255,255,0,125, + 255,218,3,27,3,82,16,6,5,92,0,0,0,1,0,125,255,218,4,71,3,82,0,32,0,0,1,38,39,51,22,23,22,21,20,23,22,59,1,21, + 35,34,39,6,7,6,35,34,39,53,22,51,50,55,54,55,54,53,52,2,34,57,182,227,97,82,81,83,44,99,75,130,147,97,93,207,46,45,102,103, + 115,84,33,34,172,35,8,2,63,122,153,78,137,134,117,73,83,44,184,130,128,33,7,38,184,42,9,49,112,27,42,68,255,255,0,125,255,218,3,27, + 4,176,16,39,22,196,1,69,4,26,16,6,5,92,0,0,255,255,0,125,255,218,4,71,4,176,16,38,20,142,0,0,16,7,22,196,1,69,4,26, + 255,255,255,171,254,12,3,98,2,38,16,6,5,94,0,0,0,1,255,171,254,12,4,126,2,38,0,24,0,0,1,51,22,23,22,23,22,59,1,21, + 35,34,39,2,7,4,33,53,32,55,54,55,54,53,52,2,120,184,30,3,10,73,42,101,75,130,130,50,68,251,254,228,254,190,1,48,203,218,35,10, + 2,38,112,30,103,77,44,184,62,254,234,133,151,184,128,138,208,58,72,126,255,255,255,171,254,12,3,98,3,182,16,39,22,196,2,113,3,32,16,6, + 5,94,0,0,255,255,255,171,254,12,4,126,3,182,16,38,20,146,0,0,16,7,22,196,2,113,3,32,255,255,0,130,254,12,9,26,2,238,16,6, + 5,96,0,0,0,1,0,130,254,12,10,71,2,238,0,70,0,0,37,22,55,54,53,51,20,23,22,51,50,25,1,51,17,20,23,22,59,1,21,35, + 34,39,6,7,6,35,34,39,38,39,6,7,6,39,38,39,6,7,6,7,6,35,38,39,36,17,52,55,51,6,23,22,23,22,51,50,55,54,55,54, + 39,38,47,1,51,23,22,23,22,5,184,78,48,37,184,19,64,110,142,184,83,44,99,75,130,145,118,68,109,37,32,73,48,138,17,49,95,64,56,137, + 39,24,84,133,193,80,120,128,109,254,237,105,184,108,1,1,147,95,81,98,95,121,94,64,1,1,16,64,184,36,16,28,58,181,2,124,95,202,205,50, + 169,1,24,1,38,254,170,97,83,44,184,96,91,25,9,25,70,123,159,30,20,2,2,60,179,107,170,62,26,1,28,71,1,72,246,180,206,220,179,38, + 24,37,48,158,108,142,125,61,234,156,74,60,126,0,0,0,0,1,255,236,255,227,6,10,2,238,0,49,0,0,37,6,7,6,43,1,53,51,50,55, + 54,61,1,51,21,20,23,22,51,50,55,54,53,51,20,23,22,55,54,25,1,51,17,20,7,6,7,6,35,34,39,38,39,6,7,6,35,34,39,38, + 1,128,43,56,76,99,130,75,99,44,80,184,44,43,104,109,44,37,184,19,64,110,142,184,92,75,102,37,35,63,55,137,18,48,96,68,65,98,72,60, + 138,59,33,46,184,44,80,100,192,156,64,100,99,122,103,194,205,50,170,1,2,1,22,1,38,254,170,199,113,92,24,9,25,61,132,156,33,24,49,40, + 0,1,255,236,255,227,7,55,2,238,0,56,0,0,5,6,35,34,39,38,39,6,7,6,35,34,39,38,39,6,7,6,43,1,53,51,50,55,54,61, + 1,51,21,20,23,22,51,50,55,54,53,51,20,23,22,55,54,25,1,51,17,20,23,22,59,1,21,35,34,39,6,4,253,37,35,63,55,137,18,48, + 96,68,65,98,72,60,41,43,56,76,99,130,75,99,44,80,184,44,43,104,109,44,37,184,19,64,110,142,184,83,44,99,75,130,145,118,68,20,9,25, + 61,132,156,33,24,49,40,73,59,33,46,184,44,80,100,192,156,64,100,99,122,103,194,205,50,170,1,2,1,22,1,38,254,170,97,83,44,184,96,90, + 255,255,0,130,254,12,9,26,4,176,16,39,22,198,4,226,3,32,16,6,5,96,0,0,255,255,0,130,254,12,10,71,4,176,16,38,20,150,0,0, + 16,7,22,198,4,226,3,32,255,255,255,236,255,227,6,10,4,176,16,38,20,151,0,0,16,7,22,198,2,138,3,32,255,255,255,236,255,227,7,55, + 4,176,16,38,20,152,0,0,16,7,22,198,2,138,3,32,255,255,0,130,254,12,9,19,2,229,16,6,5,98,0,0,0,2,0,130,254,12,9,225, + 2,229,0,60,0,73,0,0,41,1,34,39,38,53,20,7,6,7,6,35,38,39,36,17,52,55,51,6,23,22,23,22,51,50,55,54,55,54,53,52, + 39,51,6,23,22,23,54,55,54,55,54,23,22,23,22,21,20,7,22,23,22,59,1,21,35,34,47,1,6,3,34,7,6,7,51,50,55,54,39,38, + 39,38,6,117,254,236,38,52,45,74,88,238,80,120,128,109,254,237,105,184,108,1,1,147,95,81,102,91,162,43,33,39,171,1,14,10,40,115,123,108, + 147,72,88,125,97,186,42,14,16,61,82,75,130,131,103,28,204,18,76,126,168,145,187,237,129,187,1,2,137,37,30,26,16,186,128,155,77,26,1,28, + 71,1,72,246,180,206,220,179,38,24,37,68,138,108,127,147,138,15,55,40,50,146,108,94,70,34,1,2,37,71,233,77,70,12,11,44,184,92,26,118, + 2,55,81,108,194,63,91,70,135,19,5,0,0,2,255,236,0,0,6,50,2,229,0,12,0,46,0,0,1,6,7,51,50,55,54,53,52,39,38,35, + 34,3,33,34,39,38,39,6,43,1,53,51,50,55,54,61,1,51,21,20,22,23,54,55,54,55,54,51,50,23,22,21,20,7,6,3,208,168,145,187, + 237,129,186,139,37,48,76,186,254,236,74,78,65,39,102,172,130,75,99,44,80,184,18,45,101,95,153,144,75,85,115,107,186,184,202,1,230,108,194,63, + 91,70,135,19,5,253,201,42,35,61,138,184,44,80,100,114,78,24,80,50,134,84,137,63,33,39,68,236,169,109,120,0,0,2,255,236,0,0,7,4, + 2,229,0,43,0,56,0,0,41,1,34,39,38,39,6,43,1,53,51,50,55,54,61,1,51,21,20,22,23,54,55,54,55,54,51,50,23,22,21,20, + 7,22,23,22,59,1,21,35,34,47,1,6,3,6,7,51,50,55,54,53,52,39,38,35,34,3,152,254,232,74,78,65,39,102,172,130,75,99,44,80, + 184,18,45,101,95,153,144,75,85,113,109,190,42,14,16,61,82,75,130,131,103,28,204,224,168,145,187,237,129,186,139,37,48,76,42,35,61,138,184,44, + 80,100,114,78,24,80,50,134,84,137,63,33,39,68,236,75,72,12,11,44,184,92,26,118,1,230,108,194,63,91,70,135,19,5,0,0,255,255,0,130, + 254,12,9,19,3,182,16,39,22,196,4,251,3,32,16,6,5,98,0,0,255,255,0,130,254,12,9,225,3,182,16,38,20,158,0,0,16,7,22,196, + 4,251,3,32,255,255,255,236,0,0,6,50,3,182,16,38,20,159,0,0,16,7,22,196,1,219,3,32,255,255,255,236,0,0,7,4,3,182,16,38, + 20,160,0,0,16,7,22,196,1,219,3,32,255,255,0,144,0,0,6,220,6,20,16,6,5,100,0,0,0,2,0,144,0,0,7,172,6,20,0,28, + 0,41,0,0,41,2,53,33,17,51,17,18,37,54,51,50,23,22,21,20,7,22,23,22,59,1,21,35,34,47,1,6,37,51,50,55,54,39,38,39, + 38,35,34,7,6,4,64,253,191,254,145,1,111,184,217,1,20,92,68,117,105,188,42,14,16,61,82,75,130,131,103,28,204,253,233,187,237,129,187,1, + 2,137,37,48,80,122,177,184,5,92,251,14,1,63,99,33,39,69,235,77,70,12,11,44,184,92,26,118,184,63,93,68,135,19,5,81,120,0,0,0, + 0,2,255,236,0,0,5,212,6,20,0,12,0,31,0,0,37,51,50,55,54,39,38,39,38,35,34,7,6,19,41,1,53,33,17,51,17,18,37,54, + 51,50,23,22,21,20,7,6,2,57,187,237,129,187,1,2,137,37,48,80,122,177,117,253,193,254,245,1,11,184,217,1,20,92,68,117,105,186,184,202, + 184,63,93,68,135,19,5,81,120,254,146,184,5,92,251,14,1,63,99,33,39,69,235,169,109,120,0,0,0,2,255,236,0,0,6,164,6,20,0,28, + 0,41,0,0,41,2,53,33,17,51,17,18,37,54,51,50,23,22,21,20,7,22,23,22,59,1,21,35,34,47,1,6,37,51,50,55,54,39,38,39, + 38,35,34,7,6,3,56,253,191,254,245,1,11,184,217,1,20,92,68,117,105,188,42,14,16,61,82,75,130,131,103,28,204,253,233,187,237,129,187,1, + 2,137,37,48,80,122,177,184,5,92,251,14,1,63,99,33,39,69,235,77,70,12,11,44,184,92,26,118,184,63,93,68,135,19,5,81,120,0,0,0, + 255,255,0,144,0,0,6,220,6,20,16,39,22,196,3,207,3,82,16,6,5,100,0,0,255,255,0,144,0,0,7,172,6,20,16,38,20,166,0,0, + 16,7,22,196,3,207,3,82,255,255,255,236,0,0,5,212,6,20,16,38,20,167,0,0,16,7,22,196,2,199,3,82,255,255,255,236,0,0,6,164, + 6,20,16,38,20,168,0,0,16,7,22,196,2,199,3,82,255,255,0,117,254,12,4,178,4,42,16,6,5,102,0,0,0,2,0,117,254,12,4,178, + 3,14,0,37,0,43,0,0,1,6,33,32,39,38,16,55,46,1,53,52,55,54,50,23,22,21,20,7,6,7,30,1,59,1,21,35,32,39,6,21, + 20,23,22,33,50,55,1,54,52,34,21,20,4,178,152,254,255,254,91,157,98,187,61,68,125,97,238,95,127,91,57,94,68,182,85,160,144,254,246,248, + 154,41,107,1,95,193,212,253,49,136,206,254,111,99,188,122,1,146,140,50,116,42,110,64,48,48,64,112,91,67,43,32,64,77,184,228,129,107,108,61, + 158,118,2,150,56,96,51,36,0,1,255,236,0,0,3,248,4,42,0,26,0,0,55,50,55,38,39,38,53,16,55,54,51,21,34,6,20,23,22,51, + 50,55,37,21,5,4,43,1,53,60,161,202,75,52,88,204,125,251,218,186,62,83,70,55,74,1,32,254,92,254,162,178,88,184,93,24,59,100,140,1, + 8,125,77,169,137,255,52,70,33,129,184,197,164,184,0,0,0,2,255,236,0,0,3,240,3,14,0,36,0,47,0,0,37,6,43,1,53,51,50,55, + 54,55,38,39,38,53,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,22,23,22,59,1,21,35,34,2,34,7,6,21,20,23,54,53,52,39, + 1,238,194,202,118,96,107,66,59,40,97,68,30,13,16,104,89,238,89,104,16,13,30,77,88,31,68,61,112,96,118,202,168,52,30,47,103,103,47,185, + 185,184,40,36,39,85,90,39,45,31,41,55,52,45,45,52,55,41,31,45,39,98,77,31,44,40,184,2,85,7,12,32,29,95,95,29,32,12,0,0, + 255,255,0,117,254,12,4,178,5,70,16,39,22,196,1,119,4,176,16,6,5,102,0,0,255,255,0,117,254,12,4,178,4,76,16,38,20,174,0,0, + 16,7,22,196,1,169,3,182,255,255,255,236,0,0,3,248,5,70,16,38,20,175,0,0,16,7,22,196,1,119,4,176,255,255,255,236,0,0,3,240, + 4,76,16,38,20,176,0,0,16,7,22,196,1,163,3,182,255,255,0,130,255,164,7,158,5,20,16,39,22,196,5,245,4,126,16,6,5,186,0,0, + 255,255,0,130,255,165,8,92,4,76,16,38,22,205,0,0,16,7,22,196,5,245,3,182,255,255,255,236,0,0,3,63,5,20,16,38,22,206,0,0, + 16,7,22,196,1,169,4,126,255,255,255,236,0,0,4,32,4,126,16,38,22,207,0,0,16,7,22,196,1,187,3,232,255,255,0,107,254,72,5,155, + 5,20,16,39,22,197,3,82,4,126,16,6,5,143,0,0,255,255,0,107,254,12,6,192,4,1,16,38,22,208,0,0,16,7,22,197,3,132,3,107, + 255,255,255,236,0,0,3,63,5,20,16,38,22,209,0,0,16,7,22,197,1,44,4,126,255,255,255,236,0,0,4,32,4,126,16,38,22,210,0,0, + 16,7,22,197,1,56,3,232,255,255,0,144,255,201,5,199,6,20,16,6,5,107,0,0,0,2,0,144,255,201,6,210,6,20,0,33,0,68,0,0, + 1,21,6,7,6,21,20,23,22,23,22,21,20,7,6,35,34,39,53,22,51,50,55,54,53,52,39,38,39,38,55,54,55,54,19,6,39,38,39,36, + 53,52,55,51,6,21,22,23,22,51,50,55,54,55,54,25,1,51,17,20,23,22,59,1,21,35,34,39,6,3,208,74,38,80,14,12,68,102,88,82, + 78,66,56,68,45,60,57,60,78,74,18,32,1,2,75,85,138,109,145,207,101,254,219,16,184,14,2,160,121,127,140,89,152,98,76,184,49,44,99,75, + 130,153,113,158,4,111,82,4,14,30,33,28,18,16,10,15,88,110,42,39,11,88,10,26,26,30,38,17,16,28,47,46,81,38,43,251,112,20,2,2, + 30,88,195,75,53,58,44,92,46,35,27,47,94,73,1,1,3,177,251,107,106,49,44,184,123,126,0,0,0,1,255,236,0,0,3,207,6,20,0,31, + 0,0,41,1,53,33,50,55,54,53,52,39,1,38,53,52,55,54,55,1,21,5,6,7,6,21,20,23,1,22,21,20,7,6,1,54,254,182,1,54, + 148,45,16,54,254,202,50,10,31,104,2,233,253,173,71,21,6,31,1,19,102,62,95,184,104,36,36,69,66,1,124,61,81,35,33,118,43,1,54,186, + 250,30,40,11,25,32,37,254,182,123,123,113,101,155,0,0,0,1,255,236,0,0,4,127,6,20,0,41,0,0,41,1,53,33,50,55,54,53,52,39, + 1,38,53,52,55,54,55,1,21,5,6,7,6,21,20,23,1,22,23,22,59,1,21,35,34,39,38,47,1,6,7,6,1,54,254,182,1,54,148,45, + 16,54,254,202,50,10,31,104,2,233,253,173,71,21,6,31,2,71,22,38,43,64,88,132,65,58,103,33,97,21,17,95,184,104,36,36,69,66,1,124, + 61,81,35,33,118,43,1,54,186,250,30,40,11,25,32,37,253,63,26,14,16,184,24,43,41,120,46,27,155,0,0,0,255,255,0,144,254,200,5,24, + 6,20,16,6,5,108,0,0,0,1,0,144,254,200,6,35,6,20,0,36,0,0,37,54,53,17,51,17,20,23,22,59,1,21,35,34,39,6,7,6, + 5,6,35,34,39,36,3,38,55,51,6,21,20,23,22,51,50,55,54,4,18,78,184,49,44,99,75,130,112,78,18,27,121,254,251,134,85,99,69,254, + 220,1,1,64,184,65,166,40,73,80,109,174,73,126,227,4,106,251,107,106,49,44,184,51,46,40,177,66,34,22,91,1,18,138,92,115,115,126,66,16, + 34,53,0,0,0,1,255,236,0,0,1,175,6,20,0,13,0,0,1,20,7,6,43,1,53,51,50,55,54,53,17,51,1,175,87,80,154,130,75,99, + 44,49,184,1,115,178,101,92,184,44,49,106,4,149,0,0,0,1,255,236,0,0,2,186,6,20,0,20,0,0,37,6,43,1,53,51,50,55,54,53, + 17,51,17,20,23,22,59,1,21,35,34,1,83,77,152,130,75,99,44,49,184,49,44,99,75,130,150,86,86,184,44,49,106,4,149,251,107,106,49,44, + 184,0,0,0,255,255,0,140,254,20,4,94,2,243,16,6,5,109,0,0,0,2,0,140,254,20,5,103,2,116,0,17,0,53,0,0,37,22,51,50, + 55,54,53,52,39,38,39,38,35,34,7,6,21,20,5,6,7,6,35,34,39,38,7,6,21,17,35,17,52,55,54,51,38,53,52,55,54,51,50,23, + 22,23,22,23,22,59,1,21,35,34,2,98,122,76,44,21,53,6,21,59,40,46,59,27,68,1,192,15,13,133,75,181,141,50,75,25,200,120,65,90, + 2,162,77,92,72,84,170,40,15,40,38,105,75,130,175,168,42,22,57,58,24,20,88,17,12,27,68,68,40,169,14,8,80,78,28,78,26,79,254,147, + 1,109,173,102,55,42,40,148,132,63,36,71,179,67,44,44,184,0,0,0,0,2,255,236,255,205,3,166,2,109,0,21,0,36,0,0,37,6,35,34, + 39,6,43,1,53,51,50,54,55,54,55,54,51,50,23,22,21,20,37,22,51,50,55,54,53,52,39,38,35,34,6,7,6,3,100,97,147,206,110,64, + 104,160,116,52,87,5,20,135,94,81,176,91,97,253,240,62,159,47,19,52,40,42,88,46,91,15,7,52,102,98,48,184,71,49,181,80,56,84,89,184, + 143,78,69,18,53,69,75,38,41,60,97,37,0,2,255,236,255,206,4,180,2,109,0,29,0,47,0,0,37,6,35,34,39,6,43,1,53,51,50,55, + 54,55,54,55,54,51,50,23,22,23,22,23,22,59,1,21,35,34,37,22,51,50,55,54,53,52,39,38,39,38,35,34,7,6,7,6,3,100,97,139, + 214,110,64,104,160,116,52,44,43,5,20,135,94,93,72,66,193,17,5,51,36,107,75,130,176,254,20,62,159,47,19,52,5,22,58,39,39,53,41,50, + 15,7,52,102,98,48,184,36,35,49,181,80,56,29,83,167,49,62,44,184,196,69,18,53,69,19,18,88,17,12,27,33,97,37,0,0,255,255,0,147, + 254,181,5,72,3,182,16,39,22,196,2,63,3,32,16,6,5,211,0,0,255,255,0,147,254,12,6,43,2,188,16,38,20,44,0,0,16,7,22,196, + 2,63,2,38,255,255,255,236,0,0,1,135,3,232,16,39,22,196,0,224,3,82,16,6,22,203,0,0,255,255,255,236,0,0,2,126,3,232,16,39, + 22,196,0,224,3,82,16,6,22,204,0,0,255,255,0,139,255,198,3,160,2,222,16,6,5,111,0,0,0,2,0,145,0,0,4,94,2,238,0,10, + 0,36,0,0,1,38,39,38,39,6,7,6,23,30,1,19,38,39,51,22,23,22,23,22,59,1,21,35,34,39,38,39,6,35,34,39,38,53,52,55, + 54,2,164,15,13,13,12,120,82,111,2,1,180,116,4,3,184,1,36,21,56,31,112,75,130,90,73,45,38,138,156,56,58,189,204,109,1,26,42,49, + 50,101,12,67,89,62,41,50,1,209,39,43,168,174,101,79,44,184,51,31,59,73,15,48,154,173,127,68,0,3,255,236,255,189,3,189,3,229,0,15, + 0,45,0,61,0,0,1,54,55,54,53,52,39,38,35,34,7,6,21,20,23,22,7,50,55,38,39,38,53,52,55,54,23,38,39,53,22,23,4,23, + 22,21,20,7,6,35,34,39,6,43,1,53,1,22,21,20,7,6,7,22,51,50,55,54,53,52,39,38,1,148,36,34,39,15,22,58,65,23,22,7, + 21,249,52,78,45,15,18,45,48,77,44,81,223,216,1,0,64,14,40,74,175,131,154,120,146,137,2,171,6,98,12,17,52,49,125,17,7,33,29,1, + 13,27,64,72,61,46,37,52,45,43,35,30,37,118,136,11,105,69,78,64,84,83,90,9,39,14,185,68,179,209,222,52,57,103,61,113,108,41,184,1, + 68,37,39,147,105,14,19,46,67,30,33,60,78,69,0,0,0,3,255,236,254,13,3,196,2,171,0,10,0,36,0,47,0,0,37,51,50,55,54,53, + 52,35,34,7,6,7,18,55,54,51,50,23,22,21,20,7,33,21,33,22,21,20,7,6,35,34,39,38,3,35,53,5,20,23,22,51,50,53,52,39, + 38,35,1,83,19,42,96,114,84,75,74,38,184,9,129,108,129,138,69,46,163,1,88,254,168,163,46,69,138,129,108,129,9,175,1,103,38,74,75,84, + 114,96,42,184,76,90,52,112,141,72,117,1,10,126,107,99,67,114,111,108,184,108,111,114,67,99,107,128,1,8,184,184,117,72,141,112,52,90,76,0, + 255,255,255,171,254,12,3,64,2,134,16,6,5,112,0,0,0,2,255,171,254,12,4,54,2,134,0,11,0,44,0,0,37,52,39,38,39,38,7,6, + 7,6,23,22,5,51,21,35,39,6,7,6,7,6,33,53,32,55,54,55,38,39,38,39,38,39,38,55,54,55,54,23,22,23,22,23,22,2,141,16, + 24,46,60,60,67,13,17,64,47,1,115,246,194,70,25,129,83,105,192,254,147,1,105,132,168,62,118,45,139,51,106,10,2,10,27,176,59,65,87,69, + 133,22,13,184,76,57,80,30,41,26,29,56,75,54,40,4,184,1,156,129,83,47,86,184,76,95,148,3,7,24,43,89,135,31,57,155,75,25,1,2, + 49,92,141,83,255,255,0,130,254,243,5,192,3,74,16,6,5,113,0,0,0,1,0,130,254,240,6,191,2,2,0,55,0,0,5,54,53,38,39,38, + 39,38,53,52,55,54,55,54,51,50,23,22,59,1,21,35,34,39,38,35,34,7,6,21,20,23,22,23,22,7,6,7,6,35,34,39,36,17,52,55, + 51,6,21,20,23,22,51,50,55,54,4,76,91,1,47,29,30,44,52,80,84,30,42,117,87,128,32,35,35,114,112,108,26,36,15,45,65,73,3,3, + 113,128,218,89,104,188,117,254,219,63,184,65,166,66,179,91,77,149,33,51,33,43,13,8,40,59,61,65,60,94,14,6,134,196,184,172,165,6,17,35, + 48,27,30,123,98,86,96,31,12,41,103,1,6,153,90,90,153,114,78,31,8,15,0,0,255,255,0,130,254,12,5,192,3,74,16,39,22,197,1,244, + 254,12,16,6,5,113,0,0,255,255,0,130,254,12,6,191,2,2,16,39,22,197,1,244,254,12,16,6,20,212,0,0,255,255,255,236,254,212,1,243, + 2,88,16,38,20,59,0,0,16,7,22,197,0,99,254,212,255,255,255,236,254,212,2,126,2,88,16,38,20,60,0,0,16,7,22,197,0,99,254,212, + 255,255,255,46,255,236,3,191,6,237,16,38,20,223,0,0,16,7,5,123,254,150,1,44,255,255,255,46,255,236,4,218,6,237,16,38,20,224,0,0, + 16,7,5,123,254,150,1,44,255,255,255,229,255,236,3,191,7,163,16,38,20,223,0,0,16,7,5,124,254,150,1,44,255,255,255,229,255,236,4,218, + 7,163,16,38,20,224,0,0,16,7,5,124,254,150,1,44,255,255,0,23,254,12,3,191,6,20,16,38,20,223,0,0,16,7,5,125,254,200,0,0, + 255,255,0,23,254,12,4,218,6,20,16,38,20,224,0,0,16,7,5,125,254,200,0,0,0,1,0,84,255,236,3,191,6,20,0,22,0,0,1,16, + 7,6,7,6,35,34,39,53,22,51,50,55,1,51,1,54,55,54,53,17,51,3,191,139,55,77,205,158,106,75,96,85,113,136,254,22,179,1,170,29, + 20,37,184,3,66,254,212,218,85,71,180,32,184,32,152,4,70,252,65,43,55,137,184,2,174,0,0,0,0,1,0,84,255,236,4,218,6,20,0,31, + 0,0,1,6,7,6,35,34,39,53,22,51,50,55,1,51,1,54,55,54,53,17,51,17,20,23,22,59,1,21,35,34,39,38,3,52,59,73,202,161, + 106,75,96,85,113,136,254,22,179,1,170,29,20,37,184,34,64,80,105,129,175,102,17,1,60,91,65,180,32,184,32,152,4,70,252,65,43,55,137,184, + 2,174,252,68,174,84,158,184,243,41,0,0,0,3,0,30,255,84,8,22,7,76,0,3,0,7,0,42,0,0,9,4,21,51,53,39,53,52,54,55, + 54,55,54,63,1,54,55,54,53,52,38,35,34,6,7,21,62,1,51,50,22,21,20,6,15,1,14,1,29,1,4,26,3,252,252,4,252,4,3,150, + 203,6,6,6,8,19,23,44,88,92,34,36,223,184,103,193,94,97,179,79,108,131,51,57,90,90,56,7,76,252,4,252,4,3,252,253,174,254,254,147, + 123,52,60,21,25,26,31,43,86,90,64,69,76,159,194,56,57,188,67,70,110,89,49,94,53,89,86,130,101,154,0,0,0,2,0,100,255,227,5,170, + 5,213,0,7,0,10,0,0,55,1,51,1,7,3,33,3,1,33,3,100,2,48,230,2,48,168,193,253,140,193,1,6,1,234,245,35,5,178,250,78, + 64,1,246,254,10,2,170,2,124,0,0,0,0,3,0,200,255,237,4,20,5,232,0,9,0,26,0,36,0,0,1,17,51,50,55,54,53,52,38,35, + 1,54,51,50,23,22,21,20,7,22,21,20,7,6,33,34,39,19,17,51,50,55,54,53,52,38,35,1,124,52,251,119,61,198,175,254,222,136,100,240, + 162,206,215,214,117,171,254,189,100,132,180,111,234,94,44,236,191,2,126,254,35,114,59,66,89,149,3,87,19,97,123,208,213,122,122,228,142,112,164,19, + 5,52,254,21,128,61,56,104,142,0,0,0,0,1,0,100,255,227,3,234,5,243,0,5,0,0,5,9,1,23,9,1,3,107,252,249,3,7,127,253, + 120,2,136,29,3,8,3,8,127,253,119,253,119,0,0,0,0,2,0,200,0,0,4,6,5,210,0,12,0,21,0,0,51,17,51,32,23,22,23,22, + 16,7,6,4,33,55,62,2,16,39,46,1,39,200,90,1,132,158,159,25,10,39,56,254,185,254,194,90,206,199,65,10,18,188,254,5,210,120,122,249, + 101,254,98,127,184,173,192,8,99,212,1,122,92,172,145,10,0,1,0,200,0,0,3,156,5,242,0,13,0,0,1,17,35,17,5,7,37,17,5,7, + 37,17,5,7,1,124,180,2,212,28,253,252,2,32,28,253,252,2,32,28,1,54,254,202,5,242,117,178,83,254,195,88,178,83,254,195,88,178,0,0, + 0,1,0,200,0,0,3,156,5,242,0,9,0,0,1,17,35,17,5,7,37,17,5,7,1,124,180,2,212,28,253,252,2,32,28,3,42,252,214,5, + 242,117,178,83,254,195,88,178,0,1,0,150,0,0,2,238,5,213,0,11,0,0,19,33,21,35,17,51,21,33,53,51,17,35,150,2,88,210,210,253, + 168,210,210,5,213,180,251,147,180,180,4,109,0,3,0,200,0,0,4,56,5,213,0,3,0,7,0,11,0,0,19,33,17,33,1,17,33,17,5,33, + 17,33,200,3,112,252,144,2,188,253,248,2,8,253,248,2,8,5,213,250,43,3,69,1,220,254,36,180,254,35,0,0,0,5,0,150,255,227,6,164, + 5,243,0,15,0,20,0,25,0,30,0,35,0,0,0,2,6,4,32,36,38,2,16,18,54,36,32,4,22,18,1,54,0,55,33,3,17,33,22,0, + 1,33,17,6,0,1,17,33,38,0,6,164,122,208,254,224,254,198,254,224,208,122,122,208,1,32,1,58,1,32,208,122,253,83,194,1,18,30,254,14, + 180,254,14,30,1,18,254,208,1,242,194,254,238,2,136,1,242,30,254,238,2,78,254,224,208,123,123,208,1,32,1,58,1,32,208,123,123,208,254,224, + 253,22,30,1,18,195,254,13,1,243,195,254,238,2,137,1,243,30,254,238,1,48,254,13,195,1,18,0,0,1,0,200,0,0,1,124,5,213,0,3, + 0,0,19,51,17,35,200,180,180,5,213,250,43,0,0,0,0,1,0,200,255,227,4,131,5,243,0,10,0,0,33,35,17,51,17,1,23,9,1,7, + 1,1,124,180,180,2,136,120,253,46,2,217,120,253,113,5,213,253,225,2,61,134,253,129,253,123,134,2,67,0,0,0,0,1,0,200,0,0,3,251, + 5,213,0,6,0,0,9,1,23,1,35,17,51,1,124,1,255,128,253,77,128,180,1,51,2,0,128,253,77,5,213,0,0,1,0,200,0,0,10,212, + 5,243,0,12,0,0,19,51,9,3,23,9,3,17,35,200,116,2,131,2,56,2,47,2,46,128,253,82,253,210,253,209,253,179,180,5,213,253,229,2, + 57,253,209,2,47,128,253,83,2,46,253,210,1,238,251,76,0,1,0,200,0,0,6,119,5,243,0,8,0,0,19,51,9,1,23,9,1,17,35,200, + 116,2,131,2,56,128,253,82,253,179,180,5,213,253,229,2,57,128,253,83,1,238,251,76,0,5,0,200,0,0,6,156,5,213,0,3,0,7,0,11, + 0,15,0,19,0,0,1,17,33,17,1,33,17,33,1,17,33,17,33,17,33,17,19,17,33,17,1,124,1,220,253,112,5,212,250,44,3,68,1,220, + 251,148,1,220,180,1,220,2,144,254,36,1,220,3,69,250,43,5,33,254,36,1,220,254,36,1,220,253,111,254,36,1,220,0,0,0,0,3,0,150, + 255,227,6,164,5,243,0,15,0,31,0,39,0,0,0,54,52,46,2,34,14,2,20,30,2,50,54,0,2,6,4,32,36,38,2,16,18,54,36,32, + 4,22,18,4,6,34,38,52,54,50,22,5,146,94,94,159,222,240,222,159,94,94,159,222,240,222,1,177,122,208,254,224,254,198,254,224,208,122,122,208, + 1,32,1,58,1,32,208,122,253,133,82,116,82,82,116,82,1,148,223,240,223,158,95,95,158,223,240,223,158,95,95,1,88,254,224,208,123,123,208,1, + 32,1,58,1,32,208,123,123,208,254,224,215,82,82,116,82,82,0,0,0,0,1,0,200,0,0,4,231,5,232,0,17,0,0,1,36,53,52,36,33, + 34,7,17,35,17,54,51,32,0,17,16,5,3,40,1,11,254,211,254,226,53,55,180,162,126,1,98,1,157,254,129,2,89,102,212,182,249,6,250,196, + 5,212,20,254,191,254,236,254,176,146,0,0,0,1,0,200,0,0,6,42,5,213,0,11,0,0,51,17,51,9,1,51,17,35,17,9,1,17,200,180, + 1,253,1,253,180,180,254,3,254,3,5,213,253,162,2,94,250,43,4,189,253,161,2,95,251,67,0,0,0,2,0,150,0,0,4,26,5,242,0,11, + 0,29,0,0,0,52,46,1,34,14,1,20,30,1,50,62,1,6,7,6,7,17,35,17,38,39,46,1,52,62,1,50,30,1,3,102,72,125,146,125, + 72,72,125,146,125,252,122,102,64,72,180,71,65,104,120,121,207,244,207,121,3,231,147,124,72,72,124,147,125,72,72,76,209,59,37,14,253,137,2,119, + 14,37,60,208,244,207,121,121,207,0,0,0,0,2,0,200,0,0,4,68,5,233,0,12,0,23,0,0,8,1,21,20,2,7,6,35,17,35,17,54, + 51,3,32,55,54,53,52,39,38,35,34,7,2,216,1,108,200,255,118,139,180,162,126,108,1,9,133,134,139,114,190,43,46,5,233,254,229,252,141,254, + 209,78,36,254,92,5,213,20,252,111,115,114,150,158,108,88,4,0,0,0,0,1,0,150,255,242,2,242,5,234,0,9,0,0,9,3,7,9,3,23, + 1,148,1,94,254,162,1,31,128,254,99,1,94,254,162,1,157,128,4,76,254,162,254,162,254,226,128,1,158,1,94,1,94,1,158,128,0,1,0,100, + 0,0,4,252,5,242,0,7,0,0,1,7,37,17,35,17,37,55,4,252,56,254,50,180,254,34,56,4,138,172,149,251,141,4,173,153,172,0,0,0, + 0,1,0,200,0,0,4,180,5,234,0,7,0,0,1,23,1,17,35,17,51,17,4,52,128,252,200,180,180,5,234,128,252,201,253,205,5,213,253,92, + 0,1,0,150,255,227,4,231,5,242,0,11,0,0,9,1,55,9,1,23,9,1,7,9,1,39,2,81,254,69,150,1,146,1,147,150,254,69,1,187, + 150,254,109,254,110,150,2,237,2,163,98,253,161,2,95,98,253,93,253,88,98,2,100,253,156,98,0,0,0,3,0,150,0,0,4,226,5,213,0,19, + 0,27,0,36,0,0,33,35,53,38,39,38,16,55,54,55,53,51,21,22,23,22,16,7,6,7,25,1,54,55,54,16,39,38,1,17,6,7,6,21, + 20,23,22,3,22,180,170,129,161,161,128,171,180,170,129,161,161,128,171,96,75,109,109,75,254,236,96,75,109,109,75,204,26,128,161,1,199,162,128,26, + 203,203,26,128,161,254,57,162,128,26,3,135,253,48,23,76,108,1,50,108,75,253,72,2,208,23,76,110,152,150,110,76,0,1,0,100,0,0,6,22, + 5,242,0,11,0,0,33,35,17,1,55,1,17,51,17,1,23,1,3,151,180,253,129,128,1,255,180,1,255,128,253,129,2,244,2,126,128,254,0,1, + 227,254,29,2,0,128,253,130,0,3,0,150,255,241,3,162,5,185,0,7,0,29,0,37,0,0,0,52,38,34,6,20,22,50,36,6,32,38,16,55, + 54,55,38,39,38,16,54,32,22,16,7,6,7,22,23,22,2,52,38,34,6,20,22,50,2,238,123,174,123,123,174,1,47,229,254,190,229,114,47,55, + 55,47,114,229,1,66,229,114,47,55,55,47,114,180,123,174,123,123,174,1,32,174,123,123,174,123,49,229,229,1,66,115,47,27,28,46,114,1,67,229, + 229,254,190,115,47,27,28,46,114,1,195,174,123,123,174,123,0,2,0,200,0,0,3,224,5,232,0,10,0,19,0,0,51,17,54,51,50,4,21,20, + 4,33,25,1,50,54,53,52,38,35,34,7,200,132,129,243,1,32,254,169,254,243,202,230,180,162,42,48,5,213,19,230,189,208,220,253,103,3,78,127, + 118,99,156,6,0,2,0,200,255,237,3,224,5,213,0,10,0,20,0,0,19,51,17,32,4,21,20,4,35,34,39,19,48,17,22,51,50,54,53,52, + 38,200,180,1,13,1,87,254,224,243,129,132,180,48,42,162,180,230,5,213,253,103,220,208,189,230,19,2,135,254,18,6,156,99,118,127,0,1,0,100, + 0,0,2,188,5,213,0,7,0,0,19,53,33,17,51,17,35,17,100,1,164,180,180,2,145,180,2,144,250,43,2,145,0,2,0,100,0,0,5,170, + 5,242,0,6,0,14,0,0,9,1,35,1,55,9,1,0,6,34,38,52,54,50,22,5,170,253,208,230,253,208,168,1,251,1,251,254,145,82,116,82, + 82,116,82,5,178,250,78,5,178,64,250,218,5,38,253,216,82,82,116,82,82,0,0,0,255,255,0,200,0,0,1,124,5,213,18,6,20,240,0,0, + 0,1,0,100,255,227,5,170,5,213,0,6,0,0,55,1,51,1,7,9,1,100,2,48,230,2,48,168,254,5,254,5,35,5,178,250,78,64,5,38, + 250,218,0,0,255,255,0,150,255,227,4,231,5,242,18,6,20,254,0,0,0,1,0,100,0,0,6,39,5,243,0,8,0,0,19,9,1,7,1,17, + 35,17,1,100,2,200,2,251,122,253,219,180,254,16,3,44,2,199,253,59,132,1,254,251,88,4,157,254,15,0,0,0,0,3,0,170,1,224,6,130, + 2,168,0,3,0,7,0,11,0,0,1,33,53,33,5,53,33,21,41,1,53,33,1,253,254,173,1,83,3,50,1,83,253,189,254,174,1,82,1,224, + 200,200,200,200,200,0,0,0,255,255,0,170,1,55,6,130,4,14,16,39,21,10,0,0,255,88,16,7,15,93,0,0,3,70,0,0,255,255,0,170, + 1,58,6,130,4,10,16,39,21,10,0,0,1,98,16,7,15,92,0,0,1,58,0,0,255,255,0,170,1,61,6,130,4,11,16,39,21,10,0,0, + 255,93,16,7,15,92,0,0,3,67,0,0,255,255,0,170,1,59,6,130,4,10,16,39,15,93,0,0,1,60,16,7,21,10,0,0,1,98,0,0, + 255,255,0,170,1,61,6,130,4,10,16,39,21,10,0,0,255,93,16,7,21,10,0,0,1,98,0,0,255,255,0,170,0,0,6,130,5,72,16,39, + 15,92,0,0,4,128,16,38,15,92,0,0,16,39,15,92,0,0,1,128,16,7,15,92,0,0,3,0,255,255,0,170,0,0,6,130,5,72,16,39, + 15,92,0,0,4,128,16,39,15,92,0,0,1,128,16,39,15,92,0,0,3,0,16,6,15,93,0,0,255,255,0,170,0,0,6,130,5,72,16,39, + 21,10,0,0,254,32,16,39,15,92,0,0,4,128,16,39,15,92,0,0,1,128,16,7,15,92,0,0,3,0,0,0,255,255,0,170,0,0,6,130, + 5,72,16,39,15,92,0,0,4,128,16,38,15,92,0,0,16,39,15,92,0,0,3,0,16,7,15,93,0,0,1,128,255,255,0,170,0,0,6,130, + 5,72,16,39,15,93,0,0,1,128,16,39,15,92,0,0,4,128,16,39,15,92,0,0,3,0,16,6,15,93,0,0,255,255,0,170,0,0,6,130, + 5,72,16,39,15,93,0,0,1,128,16,39,15,92,0,0,3,0,16,39,15,92,0,0,4,128,16,7,21,10,0,0,254,32,0,0,255,255,0,170, + 0,0,6,130,5,72,16,38,15,92,0,0,16,38,21,10,0,160,16,39,15,92,0,0,4,128,16,7,15,92,0,0,3,0,0,0,255,255,0,170, + 0,0,6,130,5,72,16,38,15,93,0,0,16,38,21,10,0,160,16,39,15,92,0,0,4,128,16,7,15,92,0,0,3,0,0,0,255,255,0,170, + 0,0,6,130,5,72,16,39,21,10,0,0,254,32,16,39,15,92,0,0,3,0,16,39,15,92,0,0,4,128,16,6,21,10,0,160,255,255,0,170, + 0,0,6,130,5,72,16,39,15,93,0,0,3,0,16,39,15,92,0,0,1,128,16,38,15,92,0,0,16,7,15,92,0,0,4,128,255,255,0,170, + 0,0,6,130,5,72,16,39,15,93,0,0,3,0,16,39,15,92,0,0,4,128,16,39,15,92,0,0,1,128,16,6,15,93,0,0,255,255,0,170, + 0,0,6,130,5,72,16,39,21,10,0,0,254,32,16,39,15,92,0,0,1,128,16,39,15,92,0,0,4,128,16,7,15,93,0,0,3,0,0,0, + 255,255,0,170,0,0,6,130,5,72,16,38,15,92,0,0,16,39,15,93,0,0,1,128,16,39,15,93,0,0,3,0,16,7,15,92,0,0,4,128, + 255,255,0,170,0,0,6,130,5,72,16,38,15,93,0,0,16,39,15,92,0,0,4,128,16,39,15,93,0,0,3,0,16,7,15,93,0,0,1,128, + 255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,254,32,16,39,15,93,0,0,1,128,16,39,15,93,0,0,3,0,16,7,15,92,0,0, + 4,128,0,0,255,255,0,170,0,0,6,130,5,72,16,38,21,10,0,160,16,39,15,92,0,0,4,128,16,39,15,93,0,0,3,0,16,6,15,92, + 0,0,0,0,255,255,0,170,0,0,6,130,5,72,16,38,21,10,0,160,16,38,15,93,0,0,16,39,15,92,0,0,4,128,16,7,15,93,0,0, + 3,0,0,0,255,255,0,170,0,0,6,130,5,72,16,38,21,10,0,160,16,39,15,92,0,0,4,128,16,39,15,93,0,0,3,0,16,7,21,10, + 0,0,254,32,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,1,32,16,39,15,92,0,0,1,128,16,38,15,92,0,0,16,7,15,92, + 0,0,4,128,255,255,0,170,0,0,6,130,5,72,16,38,15,93,0,0,16,39,15,92,0,0,4,128,16,39,15,92,0,0,1,128,16,7,21,10, + 0,0,1,32,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,254,32,16,39,21,10,0,0,1,32,16,39,15,92,0,0,1,128,16,7, + 15,92,0,0,4,128,0,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,1,128,16,39,15,92,0,0,4,128,16,38,15,92,0,0, + 16,7,21,10,0,0,1,32,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,1,32,16,38,15,93,0,0,16,39,15,92,0,0,4,128, + 16,7,15,93,0,0,1,128,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,1,32,16,39,21,10,0,0,254,32,16,39,15,92,0,0, + 4,128,16,7,15,93,0,0,1,128,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,1,32,16,39,15,92,0,0,4,128,16,38, + 21,10,0,160,16,6,15,92,0,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,1,32,16,39,15,92,0,0,4,128,16,38, + 21,10,0,160,16,6,15,93,0,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,1,32,16,38,21,10,0,160,16,39,15,92, + 0,0,4,128,16,7,21,10,0,0,254,32,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,39,15,92,0,0,3,0,16,39, + 15,92,0,0,1,128,16,6,15,92,0,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,38,15,93,0,0,16,39,15,92, + 0,0,3,0,16,7,15,92,0,0,1,128,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,39,15,92,0,0,3,0,16,39, + 15,92,0,0,1,128,16,7,21,10,0,0,254,32,0,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,39,15,93,0,0, + 1,128,16,39,15,92,0,0,3,0,16,6,15,92,0,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,38,15,93,0,0, + 16,39,15,92,0,0,3,0,16,7,15,93,0,0,1,128,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,39,21,10,0,0, + 254,32,16,39,15,92,0,0,3,0,16,7,15,93,0,0,1,128,0,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,39, + 15,92,0,0,3,0,16,38,21,10,0,160,16,6,15,92,0,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,39, + 15,92,0,0,3,0,16,38,21,10,0,160,16,6,15,93,0,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,38, + 21,10,0,160,16,39,15,92,0,0,3,0,16,7,21,10,0,0,254,32,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,38, + 15,92,0,0,16,39,15,92,0,0,1,128,16,7,15,93,0,0,3,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,38, + 15,93,0,0,16,39,15,92,0,0,1,128,16,7,15,93,0,0,3,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,39, + 15,93,0,0,3,0,16,39,15,92,0,0,1,128,16,7,21,10,0,0,254,32,0,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0, + 4,128,16,39,15,93,0,0,3,0,16,39,15,93,0,0,1,128,16,6,15,92,0,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0, + 4,128,16,39,15,93,0,0,1,128,16,39,15,93,0,0,3,0,16,6,15,93,0,0,255,255,0,170,0,0,6,130,5,72,16,39,15,93,0,0, + 4,128,16,39,15,93,0,0,3,0,16,39,15,93,0,0,1,128,16,7,21,10,0,0,254,32,0,0,255,255,0,170,0,0,6,130,5,72,16,39, + 15,93,0,0,4,128,16,38,15,92,0,0,16,39,15,93,0,0,3,0,16,6,21,10,0,160,0,0,255,255,0,170,0,0,6,130,5,72,16,39, + 15,93,0,0,4,128,16,39,15,93,0,0,3,0,16,38,15,93,0,0,16,6,21,10,0,160,0,0,255,255,0,170,0,0,6,130,5,72,16,39, + 15,93,0,0,4,128,16,39,21,10,0,0,254,32,16,39,15,93,0,0,3,0,16,6,21,10,0,160,255,255,0,170,0,0,6,130,5,72,16,39, + 15,93,0,0,4,128,16,38,15,92,0,0,16,39,15,92,0,0,1,128,16,7,21,10,0,0,1,32,255,255,0,170,0,0,6,130,5,72,16,39, + 15,93,0,0,4,128,16,39,21,10,0,0,1,32,16,39,15,92,0,0,1,128,16,6,15,93,0,0,255,255,0,170,0,0,6,130,5,72,16,39, + 15,93,0,0,4,128,16,39,15,92,0,0,1,128,16,39,21,10,0,0,1,32,16,7,21,10,0,0,254,32,0,0,255,255,0,170,0,0,6,130, + 5,72,16,39,15,93,0,0,4,128,16,39,21,10,0,0,1,32,16,38,15,92,0,0,16,7,15,93,0,0,1,128,255,255,0,170,0,0,6,130, + 5,72,16,39,15,93,0,0,4,128,16,39,15,93,0,0,1,128,16,38,15,93,0,0,16,7,21,10,0,0,1,32,255,255,0,170,0,0,6,130, + 5,72,16,39,15,93,0,0,4,128,16,39,15,93,0,0,1,128,16,39,21,10,0,0,254,32,16,7,21,10,0,0,1,32,0,0,255,255,0,170, + 0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,38,15,92,0,0,16,38,21,10,0,160,16,7,21,10,0,0,1,32,0,0,255,255,0,170, + 0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,38,15,93,0,0,16,38,21,10,0,160,16,7,21,10,0,0,1,32,0,0,255,255,0,170, + 0,0,6,130,5,72,16,39,15,93,0,0,4,128,16,39,21,10,0,0,254,32,16,38,21,10,0,160,16,7,21,10,0,0,1,32,255,255,0,170, + 0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,38,15,92,0,0,16,39,15,92,0,0,1,128,16,7,15,92,0,0,3,0,255,255,0,170, + 0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,15,92,0,0,1,128,16,39,15,92,0,0,3,0,16,6,15,93,0,0,255,255,0,170, + 0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,21,10,0,0,254,32,16,39,15,92,0,0,1,128,16,7,15,92,0,0,3,0,0,0, + 255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,38,15,92,0,0,16,39,15,92,0,0,3,0,16,7,15,93,0,0,1,128, + 255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,15,93,0,0,1,128,16,39,15,92,0,0,3,0,16,6,15,93,0,0, + 255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,15,93,0,0,1,128,16,39,15,92,0,0,3,0,16,7,21,10,0,0, + 254,32,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,38,15,92,0,0,16,38,21,10,0,160,16,7,15,92,0,0, + 3,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,38,15,93,0,0,16,38,21,10,0,160,16,7,15,92,0,0, + 3,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,21,10,0,0,254,32,16,39,15,92,0,0,3,0,16,6, + 21,10,0,160,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,15,93,0,0,3,0,16,39,15,92,0,0,1,128,16,6, + 15,92,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,15,93,0,0,3,0,16,39,15,92,0,0,1,128,16,6, + 15,93,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,21,10,0,0,254,32,16,39,15,92,0,0,1,128,16,7, + 15,93,0,0,3,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,38,15,92,0,0,16,39,15,93,0,0,1,128, + 16,7,15,93,0,0,3,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,38,15,93,0,0,16,39,15,93,0,0,3,0, + 16,7,15,93,0,0,1,128,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,21,10,0,0,254,32,16,39,15,93,0,0, + 1,128,16,7,15,93,0,0,3,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,38,21,10,0,160,16,39,15,93, + 0,0,3,0,16,6,15,92,0,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,38,21,10,0,160,16,38,15,93, + 0,0,16,7,15,93,0,0,3,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,38,21,10,0,160,16,39,15,93, + 0,0,3,0,16,7,21,10,0,0,254,32,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,21,10,0,0,1,32,16,39, + 15,92,0,0,1,128,16,6,15,92,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,38,15,93,0,0,16,39,15,92, + 0,0,1,128,16,7,21,10,0,0,1,32,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,21,10,0,0,254,32,16,39, + 21,10,0,0,1,32,16,7,15,92,0,0,1,128,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,15,93,0,0, + 1,128,16,38,15,92,0,0,16,7,21,10,0,0,1,32,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,21,10,0,0, + 1,32,16,38,15,93,0,0,16,7,15,93,0,0,1,128,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39,21,10,0,0, + 1,32,16,39,21,10,0,0,254,32,16,7,15,93,0,0,1,128,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39, + 21,10,0,0,1,32,16,38,21,10,0,160,16,6,15,92,0,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39, + 21,10,0,0,1,32,16,38,21,10,0,160,16,6,15,93,0,0,0,0,255,255,0,170,0,0,6,130,5,72,16,39,21,10,0,0,2,160,16,39, + 21,10,0,0,1,32,16,38,21,10,0,160,16,7,21,10,0,0,254,32,0,3,0,16,0,0,5,220,5,213,0,3,0,11,0,14,0,0,1,35, + 1,51,9,1,33,3,33,3,35,1,23,1,33,3,93,205,1,238,205,254,87,2,58,254,92,152,253,128,153,119,2,57,24,254,227,2,56,5,113,250, + 243,5,113,250,43,1,161,254,95,5,213,199,252,247,0,0,0,6,0,201,0,0,5,78,5,213,0,12,0,20,0,28,0,32,0,37,0,42,0,0, + 19,33,50,22,21,20,7,22,17,20,4,35,33,1,17,51,50,55,17,38,35,3,17,51,54,51,17,38,35,33,17,51,17,1,54,53,52,47,1,54, + 53,52,39,201,2,102,231,250,192,254,254,240,251,253,134,1,144,234,59,51,51,59,234,214,36,32,32,36,253,254,202,2,35,208,208,62,208,208,5,213, + 192,177,229,93,97,254,225,200,218,2,233,253,123,7,2,119,7,2,136,253,220,3,2,31,2,250,243,5,13,251,17,68,220,229,68,150,54,205,196,54, + 0,4,0,232,0,0,6,51,5,213,0,8,0,16,0,20,0,25,0,0,19,33,32,0,17,16,0,41,1,1,19,51,50,55,17,38,35,33,17,51, + 3,1,54,17,16,39,232,2,3,1,178,1,150,254,104,254,80,253,253,1,146,1,99,245,160,160,246,254,112,202,1,2,198,223,223,5,213,254,151,254, + 128,254,126,254,150,5,113,250,243,65,4,139,65,250,243,5,13,251,107,149,1,123,1,113,156,0,0,0,0,2,0,201,0,0,5,83,5,213,0,3, + 0,15,0,0,1,17,51,17,37,33,21,33,17,33,21,33,17,33,21,33,1,45,202,254,210,4,120,253,26,2,199,253,57,2,248,251,118,5,113,250, + 243,5,13,100,100,253,228,100,253,115,100,0,0,2,0,201,0,0,4,236,5,213,0,9,0,13,0,0,19,33,21,33,17,33,21,33,17,33,1,35, + 17,51,201,4,35,253,111,2,81,253,175,254,110,1,46,202,202,5,213,100,253,228,100,253,15,5,113,250,243,0,0,0,0,2,0,115,255,227,5,139, + 5,240,0,29,0,38,0,0,1,38,36,35,34,7,17,22,51,50,55,54,55,17,33,53,33,17,6,4,35,32,0,17,16,0,33,50,4,23,1,17, + 6,7,6,17,16,23,22,5,100,127,254,252,133,187,135,135,187,145,127,101,86,254,82,2,18,117,254,230,160,254,162,254,117,1,139,1,94,146,1,7, + 111,252,82,28,26,169,169,26,4,228,97,71,64,251,59,64,38,31,53,1,231,100,253,127,83,85,1,153,1,109,1,110,1,153,72,70,251,99,4,73, + 22,26,175,254,186,254,187,175,26,0,0,0,0,2,0,102,0,0,2,190,5,213,0,3,0,15,0,0,1,17,51,17,37,33,21,35,17,51,21,33, + 53,51,17,35,1,46,202,254,110,2,88,100,100,253,168,100,100,5,113,250,243,5,13,100,100,250,243,100,100,5,13,0,0,2,255,150,254,102,2,89, + 5,213,0,8,0,20,0,0,1,17,20,7,54,55,54,53,17,37,33,17,16,6,35,33,53,51,50,54,53,1,45,86,144,63,79,254,212,1,144,205, + 227,254,237,63,134,110,5,113,250,177,242,100,10,74,94,234,5,9,100,250,147,254,242,244,100,150,194,0,0,2,0,201,0,0,6,48,5,213,0,10, + 0,14,0,0,19,33,17,1,51,9,1,35,1,17,33,19,17,51,17,201,1,144,3,3,159,252,163,3,146,153,252,194,254,112,100,202,5,213,253,137, + 2,119,253,64,252,235,2,207,253,49,5,113,250,243,5,13,0,2,0,201,0,0,5,50,5,213,0,5,0,9,0,0,19,33,17,33,21,33,19,17, + 51,17,201,1,146,2,215,251,151,100,202,5,213,250,143,100,5,111,250,243,5,13,0,0,0,3,0,196,0,0,7,111,5,213,0,12,0,16,0,20, + 0,0,33,17,1,35,1,3,33,17,33,9,1,33,17,1,17,51,17,33,17,51,17,5,221,254,95,71,254,98,1,254,110,1,216,1,125,1,127,1, + 215,254,210,202,250,29,202,5,113,251,174,4,82,250,143,5,213,252,8,3,248,250,43,5,113,250,243,5,13,250,243,5,13,0,0,0,0,5,0,114, + 255,227,5,218,5,240,0,15,0,23,0,31,0,39,0,40,0,0,1,32,23,22,17,16,7,6,33,32,39,38,17,16,55,54,19,22,32,55,17,38, + 32,7,3,17,6,7,6,16,23,22,1,17,54,55,54,16,39,38,1,3,38,1,58,188,190,189,189,254,198,254,197,188,189,189,188,71,108,1,16,108, + 108,254,240,108,105,36,32,155,155,32,2,222,35,31,155,155,31,251,204,5,240,210,213,254,160,254,161,212,211,211,210,1,97,1,98,211,210,250,142,50, + 50,4,215,50,50,251,106,4,84,29,37,182,253,156,181,37,4,53,251,175,29,36,182,2,99,182,36,253,244,0,0,0,0,2,0,136,255,220,4,159, + 5,246,0,17,0,45,0,0,1,6,16,22,31,1,30,1,16,7,54,16,38,47,1,46,1,52,37,21,38,32,6,20,22,31,1,30,1,16,4,32, + 37,53,22,32,54,52,38,47,1,46,1,16,36,32,1,80,100,136,172,111,169,168,38,129,156,170,110,176,158,3,15,206,254,197,162,109,148,110,202,201, + 254,224,254,19,254,251,223,1,103,169,122,138,111,202,183,1,22,1,198,5,45,91,254,202,154,41,26,39,185,254,255,78,88,1,100,187,39,27,39,157, + 227,180,112,117,137,233,105,36,27,50,235,254,88,238,102,124,149,146,253,134,32,26,47,207,1,140,244,0,0,2,255,250,0,0,5,176,5,213,0,3, + 0,11,0,0,1,17,51,17,37,33,21,33,17,33,17,33,2,114,200,252,192,5,182,253,238,254,112,253,236,5,113,250,243,5,13,100,100,250,143,5, + 113,0,0,0,0,3,0,177,255,227,5,243,5,213,0,6,0,13,0,29,0,0,1,17,16,7,36,25,1,33,17,16,5,38,19,17,37,33,17,20, + 22,32,54,53,17,33,17,16,0,32,0,17,4,198,88,1,33,251,134,1,33,89,1,254,211,1,145,128,1,32,128,1,145,254,172,253,102,254,172,5, + 113,252,153,254,230,130,98,1,97,3,64,252,192,254,158,96,124,1,31,3,103,100,252,53,240,211,211,240,3,203,252,92,254,220,254,214,1,42,1,36, + 0,2,0,16,0,0,5,183,5,213,0,3,0,10,0,0,19,1,51,1,37,33,9,1,51,1,33,154,1,238,200,254,18,254,174,1,144,1,217,1, + 218,100,253,199,254,204,5,113,250,243,5,13,100,251,23,4,233,250,43,0,0,3,0,68,0,0,8,174,5,213,0,3,0,7,0,20,0,0,9,1, + 51,1,33,1,51,1,37,33,9,1,33,9,1,51,1,33,9,1,33,4,196,1,68,200,254,188,251,53,1,68,200,254,188,254,187,1,144,1,58,1, + 57,1,144,1,58,1,57,100,254,137,254,124,254,197,254,194,254,128,5,113,250,243,5,13,250,243,5,13,100,251,18,4,238,251,18,4,238,250,43,5, + 16,250,240,0,0,2,0,108,0,0,6,6,5,213,0,3,0,15,0,0,9,1,51,1,37,33,9,1,51,9,1,33,9,1,35,1,1,40,3,92, + 198,252,164,254,126,1,184,1,118,1,132,98,254,76,2,58,254,72,254,138,254,124,100,1,182,5,113,250,243,5,13,100,253,206,2,50,253,132,252,167, + 2,50,253,206,2,123,0,0,0,2,255,252,0,0,5,172,5,213,0,8,0,14,0,0,9,1,51,1,17,33,17,1,33,9,1,35,1,17,51,3, + 110,1,218,100,253,240,254,112,253,240,1,148,1,170,254,50,200,1,204,202,3,19,2,194,252,242,253,57,2,199,3,14,252,242,2,170,253,86,253,157, + 0,4,0,123,255,227,4,147,4,123,0,7,0,34,0,44,0,51,0,0,1,52,38,39,22,21,17,51,19,17,33,53,14,1,35,34,38,53,52,54, + 59,1,53,52,38,35,34,6,7,53,62,1,51,32,4,1,53,35,34,7,17,62,1,55,54,5,17,14,1,21,20,22,4,47,150,61,75,136,100,254, + 176,63,188,86,172,203,253,251,208,117,151,96,182,84,119,223,56,1,30,1,26,254,176,208,54,47,94,98,59,58,254,103,67,136,122,2,127,211,134,24, + 93,136,253,89,2,27,253,129,170,102,97,193,162,189,192,72,127,139,46,46,116,39,39,252,254,139,85,4,253,237,4,78,72,71,220,1,253,18,103,139, + 119,116,0,0,0,4,0,148,255,227,5,19,6,20,0,15,0,26,0,30,0,45,0,0,19,33,17,62,1,51,50,0,16,2,35,34,38,39,21,33, + 1,52,39,38,39,17,54,55,54,55,54,1,17,51,17,1,38,35,34,7,6,7,6,21,20,23,22,51,50,55,148,1,78,58,177,124,203,0,255,255, + 203,124,177,58,254,178,4,18,94,44,60,60,44,57,22,15,252,82,134,1,249,25,26,165,75,77,22,14,95,93,165,26,25,6,20,253,162,100,97,254, + 188,253,240,254,188,97,100,168,2,116,159,130,61,32,252,122,32,61,79,115,75,3,218,250,172,5,84,254,100,3,105,104,116,74,158,159,130,130,3,0, + 0,2,0,113,255,227,3,231,4,123,0,26,0,35,0,0,37,21,14,1,35,34,0,17,16,0,33,50,22,23,21,38,39,38,35,34,7,17,22,51, + 50,55,54,37,17,6,7,6,21,20,23,22,3,231,77,165,93,253,254,214,1,45,1,6,85,162,76,69,109,71,74,88,72,67,81,82,72,86,254,24, + 44,36,123,122,36,143,100,36,36,1,62,1,14,1,18,1,58,35,35,100,31,24,15,20,252,87,19,16,19,27,3,83,26,37,128,234,230,131,38,0, + 0,4,0,148,255,227,5,19,6,20,0,15,0,26,0,30,0,45,0,0,1,17,33,17,33,53,14,1,35,34,2,16,0,51,50,22,1,20,23,22, + 23,22,23,17,6,7,6,1,17,51,17,1,17,22,51,50,55,54,53,52,39,38,39,38,35,34,3,197,1,78,254,178,58,177,124,203,255,0,255,203, + 124,177,253,118,15,22,57,44,60,60,44,94,3,40,134,253,129,25,26,165,93,95,14,22,77,75,165,26,3,182,2,94,249,236,168,100,97,1,68,2, + 16,1,68,97,254,90,158,75,115,79,61,32,3,134,32,61,130,2,157,250,172,5,84,254,100,252,54,3,130,130,159,158,74,116,104,105,0,3,0,111, + 255,227,4,125,4,123,0,19,0,24,0,31,0,0,1,33,19,22,51,50,55,21,14,1,35,32,0,17,16,0,51,50,0,21,1,6,17,18,23,19, + 33,46,1,35,34,7,4,125,253,139,1,75,95,217,195,109,195,107,254,244,254,199,1,41,252,229,1,4,253,35,198,1,197,105,2,1,3,204,169,74, + 64,2,4,254,98,21,93,117,45,41,1,56,1,10,1,19,1,67,254,218,247,1,113,122,254,219,254,243,142,1,211,190,231,17,0,0,0,2,0,47, + 0,0,3,227,6,20,0,10,0,32,0,0,1,6,7,6,21,17,51,17,52,55,54,37,21,35,34,7,6,29,1,33,21,33,17,33,17,35,53,51, + 53,52,55,54,51,2,17,103,46,57,135,22,18,1,241,174,148,58,57,1,132,254,124,254,177,176,176,87,88,188,5,174,10,45,56,145,251,182,4,74, + 95,68,56,139,100,57,55,146,100,100,252,26,3,230,100,100,188,84,86,0,0,4,0,113,254,86,4,240,4,123,0,7,0,35,0,46,0,61,0,0, + 1,17,20,7,22,54,25,1,1,53,30,1,51,50,54,61,1,14,1,35,34,2,16,0,51,50,22,23,53,33,17,16,0,33,34,38,3,20,23,22, + 23,17,6,7,6,7,6,1,22,51,50,55,54,55,54,53,52,39,38,35,34,7,4,6,106,5,235,252,108,81,158,82,181,180,58,177,124,203,255,0, + 255,203,124,177,58,1,78,254,214,254,205,114,202,121,94,44,60,60,44,57,22,15,1,47,25,26,165,75,77,22,14,95,93,165,26,25,3,250,252,61, + 202,140,5,157,1,18,3,111,250,151,128,44,42,189,191,113,100,97,1,68,2,16,1,68,97,100,168,252,45,254,226,254,233,29,3,119,159,130,61,32, + 3,134,32,61,79,115,75,253,194,3,105,104,116,74,158,159,130,130,3,0,0,3,0,186,0,0,5,72,6,20,0,10,0,14,0,34,0,0,1,22, + 23,22,21,17,51,17,52,39,38,1,17,51,17,39,33,17,62,1,51,50,22,21,17,33,17,52,38,35,34,6,21,17,33,4,0,9,8,71,140,83, + 53,252,194,135,235,1,79,73,198,129,212,219,254,172,107,107,128,149,254,177,4,13,11,12,104,190,253,148,2,64,193,91,58,1,182,250,180,5,76,100, + 253,158,101,100,239,232,253,92,2,208,159,158,190,164,253,85,0,3,0,230,0,0,2,53,6,20,0,3,0,7,0,11,0,0,1,17,51,17,3,51, + 21,35,7,33,17,33,1,74,135,160,185,185,75,1,79,254,177,3,252,252,104,3,152,2,24,233,203,251,160,0,0,0,0,3,255,215,254,86,2,12, + 6,20,0,8,0,22,0,26,0,0,5,17,35,17,20,7,54,55,54,7,35,53,51,50,55,54,53,17,33,17,20,7,6,3,51,21,35,1,168,135, + 37,71,40,61,244,221,49,108,36,37,1,79,81,82,97,184,184,22,4,18,251,208,181,84,15,48,72,244,100,48,49,153,4,172,251,140,214,96,96,7, + 190,233,0,0,0,2,0,186,0,0,5,50,6,20,0,10,0,14,0,0,19,33,17,1,51,9,1,35,1,17,33,19,17,51,17,186,1,79,2,132, + 140,253,72,2,209,150,253,109,254,177,100,135,6,20,252,105,1,227,253,246,253,170,2,35,253,221,5,176,250,180,5,76,0,2,0,230,0,0,2,234, + 6,20,0,8,0,20,0,0,1,20,23,22,23,38,53,17,35,19,34,39,38,53,17,33,17,20,22,51,21,1,74,61,40,71,37,135,245,182,82,81, + 1,79,76,105,1,148,160,72,48,15,84,181,4,48,250,90,96,96,214,4,126,251,74,156,94,100,0,0,0,4,0,186,0,0,8,135,4,123,0,34, + 0,38,0,49,0,60,0,0,19,33,21,62,1,51,50,22,23,62,1,51,50,22,21,17,33,17,52,38,35,34,6,21,17,33,17,52,38,35,34,6, + 21,17,33,19,17,51,17,37,22,23,22,21,17,51,17,52,39,38,37,22,23,22,21,17,51,17,52,39,38,186,1,79,73,198,129,212,157,27,84,222, + 129,212,219,254,172,107,107,128,149,254,172,107,107,128,149,254,177,100,135,2,91,9,8,71,140,83,53,2,227,9,8,71,140,83,53,4,96,174,101,100, + 172,74,128,118,239,232,253,92,2,208,159,158,190,171,253,92,2,208,159,158,190,164,253,85,3,252,252,104,3,152,17,11,12,104,190,253,148,2,64,193, + 91,58,19,11,12,104,190,253,148,2,64,193,91,58,0,0,0,3,0,186,0,0,5,72,4,123,0,10,0,14,0,34,0,0,1,22,23,22,21,17, + 51,17,52,39,38,37,17,51,17,39,33,21,62,1,51,50,22,21,17,33,17,52,38,35,34,6,21,17,33,4,0,9,8,71,140,83,53,252,194,135, + 235,1,79,73,198,129,212,219,254,172,107,107,128,149,254,177,4,13,11,12,104,190,253,148,2,64,193,91,58,2,252,104,3,152,100,174,101,100,239,232, + 253,92,2,208,159,158,190,164,253,85,0,0,0,4,0,113,255,227,4,117,4,123,0,11,0,19,0,27,0,35,0,0,1,50,0,17,16,0,35,34, + 0,17,16,0,19,22,50,55,17,38,34,7,3,17,6,7,6,16,23,22,1,17,54,55,54,16,39,38,2,115,240,1,18,254,238,240,241,254,239,1, + 17,130,51,120,51,51,120,51,100,52,39,112,112,39,1,218,51,40,112,112,40,4,123,254,200,254,236,254,237,254,199,1,57,1,19,1,20,1,56,251, + 215,11,11,3,186,11,11,252,107,3,112,29,45,128,254,36,128,45,3,82,252,146,28,45,129,1,219,128,45,0,0,0,0,4,0,113,254,86,4,240, + 4,123,0,15,0,26,0,30,0,45,0,0,37,17,33,17,33,21,62,1,51,50,0,16,2,35,34,38,1,52,39,38,39,38,39,17,54,55,54,1, + 17,35,17,1,17,38,35,34,7,6,21,20,23,22,23,22,51,50,1,191,254,178,1,78,58,177,124,203,0,255,255,203,124,177,2,138,15,22,57,44, + 60,60,44,94,252,216,134,2,127,25,26,165,93,95,14,22,77,75,165,26,168,253,174,6,8,168,100,97,254,188,253,240,254,188,97,1,166,158,75,115, + 79,61,32,252,122,32,61,130,253,111,5,72,250,184,1,144,3,202,3,130,130,159,158,74,116,104,105,0,0,4,0,113,254,86,4,240,4,123,0,15, + 0,26,0,30,0,45,0,0,37,14,1,35,34,2,16,0,51,50,22,23,53,33,17,33,1,20,23,22,23,17,6,7,6,7,6,1,51,17,35,1, + 22,51,50,55,54,55,54,53,52,39,38,35,34,7,3,162,58,177,124,203,255,0,255,203,124,177,58,1,78,254,178,253,60,94,44,60,60,44,57,22, + 15,3,40,134,134,254,7,25,26,165,75,77,22,14,95,93,165,26,25,168,100,97,1,68,2,16,1,68,97,100,168,249,248,3,148,159,130,61,32,3, + 134,32,61,79,115,75,252,50,5,72,252,72,3,105,104,116,74,158,159,130,130,3,0,0,0,2,0,186,0,0,3,223,4,123,0,3,0,21,0,0, + 1,17,51,17,39,33,21,62,1,51,50,31,1,21,46,1,35,34,6,21,17,33,1,30,134,234,1,78,58,186,133,27,15,52,31,73,44,156,167,254, + 178,3,252,252,104,3,152,100,174,102,99,3,7,133,18,17,203,190,253,122,0,2,0,111,255,227,3,199,4,123,0,29,0,69,0,0,1,6,7,6, + 21,20,23,22,31,1,22,23,22,21,20,7,54,55,54,53,52,39,38,47,1,38,39,38,53,52,3,30,1,51,50,54,53,52,38,47,1,46,1,53, + 52,54,51,50,22,23,21,46,1,35,34,6,21,20,22,31,1,30,1,21,20,6,35,34,38,39,1,105,39,28,75,38,39,113,52,165,61,66,37,37, + 29,85,43,46,132,51,144,57,71,211,83,160,79,106,113,76,145,52,143,118,224,206,102,180,76,74,92,95,111,112,80,120,51,161,132,247,216,90,195,108, + 3,249,15,23,61,118,102,48,51,34,16,51,59,64,123,82,63,16,23,66,115,108,51,55,39,15,42,55,67,111,84,252,254,55,56,94,85,78,79,44, + 16,44,151,136,166,181,32,31,122,49,36,89,88,68,76,35,15,47,158,144,164,192,37,37,0,2,0,55,0,0,3,136,5,158,0,7,0,27,0,0, + 37,38,55,17,35,17,6,22,19,17,33,21,33,17,20,22,59,1,21,33,34,38,53,17,35,53,51,17,1,208,42,3,135,1,92,144,1,123,254,133, + 75,115,189,254,173,213,162,135,135,106,85,124,3,255,252,55,173,78,5,40,254,172,100,253,85,137,78,100,159,210,2,117,100,1,84,0,0,3,0,177, + 255,229,5,68,4,96,0,10,0,14,0,34,0,0,37,38,39,38,53,17,35,17,20,23,22,5,17,35,17,23,33,53,14,1,35,34,38,53,17,33, + 17,20,22,51,50,54,53,17,33,1,249,9,8,71,140,83,53,3,67,135,235,254,172,73,198,129,212,219,1,84,107,107,128,149,1,84,83,11,12,104, + 190,2,108,253,192,193,91,58,2,3,152,252,104,100,174,101,100,239,232,2,164,253,48,159,158,190,164,2,171,0,0,0,0,2,0,61,0,0,4,177, + 4,96,0,3,0,10,0,0,19,1,51,1,37,33,9,1,51,1,33,205,1,89,131,254,163,254,241,1,84,1,94,1,94,100,254,92,254,212,3,252, + 252,104,3,152,100,252,84,3,172,251,160,0,0,3,0,86,0,0,6,242,4,96,0,3,0,7,0,20,0,0,1,19,51,3,33,19,51,3,37,33, + 27,1,33,27,1,51,1,33,11,1,33,3,241,240,135,242,252,98,240,135,242,254,249,1,84,230,229,1,78,230,229,100,254,219,254,202,241,242,254,199, + 3,252,252,104,3,152,252,104,3,152,100,252,150,3,106,252,150,3,106,251,160,3,150,252,106,0,0,0,0,2,0,76,0,0,5,28,4,96,0,3, + 0,15,0,0,9,1,51,1,37,33,9,1,51,9,1,33,9,1,35,1,1,19,2,171,151,253,85,254,162,1,144,1,29,1,29,124,254,165,1,229, + 254,112,254,227,254,227,124,1,91,3,252,252,104,3,152,100,254,129,1,127,254,45,253,115,1,127,254,129,1,211,0,0,0,2,0,61,254,86,4,195, + 4,96,0,3,0,18,0,0,19,1,55,1,37,33,9,1,51,1,14,1,43,1,53,51,50,54,55,210,1,178,62,254,149,254,230,1,94,1,93,1, + 95,108,254,20,80,146,124,147,147,88,81,43,3,252,251,219,153,3,140,100,252,151,3,105,251,56,199,123,100,67,89,0,0,2,0,88,0,0,4,98, + 4,96,0,3,0,13,0,0,9,1,51,1,37,33,21,1,33,21,33,53,1,33,3,92,253,118,140,2,138,252,137,3,241,253,119,2,137,251,246,2, + 137,253,144,3,252,252,104,3,152,100,100,252,104,100,100,3,152,0,0,0,255,255,0,16,0,0,5,104,5,213,16,6,0,36,0,0,255,255,0,201, + 0,0,4,236,5,213,16,6,0,37,0,0,255,255,0,115,255,227,5,39,5,240,16,6,0,38,0,0,255,255,0,201,0,0,5,176,5,213,16,6, + 0,39,0,0,255,255,0,201,0,0,4,139,5,213,16,6,0,40,0,0,255,255,0,201,0,0,4,35,5,213,16,6,0,41,0,0,255,255,0,115, + 255,227,5,139,5,240,16,6,0,42,0,0,255,255,0,201,0,0,5,59,5,213,16,6,0,43,0,0,255,255,0,151,0,0,2,246,5,213,16,6, + 23,22,0,0,255,255,255,150,254,102,1,147,5,213,16,6,0,45,0,0,255,255,0,201,0,0,5,106,5,213,16,6,0,46,0,0,255,255,0,201, + 0,0,4,106,5,213,16,6,0,47,0,0,255,255,0,201,0,0,6,31,5,213,16,6,0,48,0,0,255,255,0,201,0,0,5,51,5,213,16,6, + 0,49,0,0,255,255,0,115,255,227,5,217,5,240,16,6,0,50,0,0,255,255,0,201,0,0,4,141,5,213,16,6,0,51,0,0,255,255,0,115, + 254,248,5,217,5,240,16,6,0,52,0,0,255,255,0,201,0,0,5,84,5,213,16,6,0,53,0,0,255,255,0,135,255,227,4,162,5,240,16,6, + 0,54,0,0,255,255,255,250,0,0,4,233,5,213,16,6,0,55,0,0,255,255,0,178,255,227,5,41,5,213,16,6,0,56,0,0,255,255,0,16, + 0,0,5,104,5,213,16,6,0,57,0,0,255,255,0,68,0,0,7,166,5,213,16,6,0,58,0,0,255,255,0,61,0,0,5,59,5,213,16,6, + 0,59,0,0,255,255,255,252,0,0,4,231,5,213,16,6,0,60,0,0,255,255,0,92,0,0,5,31,5,213,16,6,0,61,0,0,255,255,0,123, + 255,227,4,45,4,123,16,6,0,68,0,0,255,255,0,186,255,227,4,164,6,20,16,6,0,69,0,0,255,255,0,113,255,227,3,231,4,123,16,6, + 0,70,0,0,255,255,0,113,255,227,4,90,6,20,16,6,0,71,0,0,255,255,0,113,255,227,4,127,4,123,16,6,0,72,0,0,255,255,0,47, + 0,0,2,248,6,20,16,6,0,73,0,0,255,255,0,113,254,86,4,90,4,123,16,6,0,74,0,0,255,255,0,186,0,0,4,100,6,20,16,6, + 0,75,0,0,255,255,0,193,0,0,1,121,6,20,16,6,0,76,0,0,255,255,255,219,254,86,1,121,6,20,16,6,0,77,0,0,255,255,0,186, + 0,0,4,156,6,20,16,6,0,78,0,0,255,255,0,193,0,0,2,57,6,20,16,6,23,12,0,0,255,255,0,186,0,0,7,29,4,123,16,6, + 0,80,0,0,255,255,0,186,0,0,4,100,4,123,16,6,0,81,0,0,255,255,0,113,255,227,4,117,4,123,16,6,0,82,0,0,255,255,0,186, + 254,86,4,164,4,123,16,6,0,83,0,0,255,255,0,113,254,86,4,90,4,123,16,6,0,84,0,0,255,255,0,186,0,0,3,74,4,123,16,6, + 0,85,0,0,255,255,0,111,255,227,3,199,4,123,16,6,0,86,0,0,255,255,0,55,0,0,2,242,5,158,16,6,0,87,0,0,255,255,0,174, + 255,227,4,88,4,123,16,6,0,88,0,0,255,255,0,61,0,0,4,127,4,96,16,6,0,89,0,0,255,255,0,86,0,0,6,53,4,96,16,6, + 0,90,0,0,255,255,0,59,0,0,4,121,4,96,16,6,0,91,0,0,255,255,0,61,254,86,4,127,4,96,16,6,0,92,0,0,255,255,0,88, + 0,0,3,219,4,96,16,6,0,93,0,0,0,4,0,136,255,227,4,144,5,240,0,7,0,12,0,20,0,25,0,0,0,32,0,16,0,32,0,16, + 1,54,17,16,47,1,38,34,7,17,22,50,55,1,6,17,16,23,1,144,1,246,1,10,254,246,254,10,254,248,2,216,204,204,100,51,123,52,52,123, + 51,254,186,202,202,5,240,254,115,253,13,254,115,1,141,2,243,252,35,143,1,212,1,213,143,48,15,15,250,217,15,15,4,247,144,254,44,254,45,144, + 0,2,0,107,0,0,4,172,5,213,0,3,0,14,0,0,1,17,51,17,55,17,33,21,33,53,33,17,5,53,37,2,54,202,98,1,74,251,220,1, + 74,254,153,1,103,5,113,250,243,5,13,100,250,143,100,100,5,13,72,100,72,0,0,0,0,2,0,130,0,0,4,154,5,240,0,16,0,40,0,0, + 55,33,1,54,55,54,16,39,38,39,23,22,21,20,14,1,3,1,36,51,50,4,21,20,14,1,7,1,33,21,33,55,54,0,55,54,16,38,35,34, + 7,251,1,0,1,41,96,34,76,108,68,98,3,90,69,130,209,254,231,1,3,181,243,1,31,48,81,93,254,250,2,40,251,232,1,2,1,158,61,121, + 135,109,152,193,100,1,205,149,64,143,1,57,92,57,24,4,112,168,100,186,207,254,221,4,57,104,244,204,98,172,150,145,254,105,100,100,5,2,65,98, + 191,1,25,168,149,0,0,0,0,3,0,156,255,227,4,115,5,240,0,36,0,42,0,48,0,0,5,34,39,53,23,22,51,50,55,17,38,43,1,53, + 51,50,55,17,38,35,34,15,1,53,54,51,50,4,21,20,6,7,30,1,21,20,4,53,54,53,52,38,39,25,1,62,1,53,52,2,43,187,212,33, + 196,170,101,79,54,63,204,212,59,50,58,76,156,217,27,230,175,230,1,12,141,128,142,162,254,208,204,117,87,69,100,29,74,106,12,68,16,2,149,10, + 100,8,2,32,10,60,8,104,64,209,178,124,170,33,31,197,144,221,242,146,85,232,108,141,36,2,150,254,26,29,121,88,172,0,0,0,0,3,0,90, + 0,0,4,184,5,213,0,3,0,6,0,17,0,0,1,35,19,51,9,1,33,3,33,17,51,21,35,17,33,17,33,53,3,167,203,3,200,254,212,254, + 81,1,175,3,1,147,173,173,254,112,253,223,5,113,250,243,4,193,252,227,3,205,252,51,100,254,92,1,164,127,0,0,0,3,0,148,255,227,4,140, + 5,213,0,4,0,8,0,30,0,0,1,17,35,17,54,1,54,16,39,3,17,38,35,34,7,17,33,21,33,17,12,1,16,4,33,34,39,53,22,51, + 50,1,255,200,103,1,182,204,204,100,49,106,180,206,3,75,254,69,1,17,1,24,254,212,254,189,185,208,189,220,129,3,145,1,224,253,253,27,252,230, + 92,1,220,96,253,73,2,215,10,75,2,239,100,254,35,9,245,254,70,249,60,136,100,0,0,4,0,113,255,227,4,170,5,240,0,4,0,9,0,17, + 0,37,0,0,37,54,17,16,39,1,6,17,16,31,1,22,50,55,17,38,34,7,19,50,23,21,39,38,32,7,17,54,51,50,0,16,0,35,32,0, + 16,0,3,124,202,202,254,38,205,205,100,58,171,45,40,171,63,244,167,168,34,153,254,214,94,66,104,245,1,5,254,240,246,254,223,254,238,1,80,112, + 99,1,12,1,24,92,1,202,179,254,145,254,35,149,50,16,8,3,34,6,19,2,140,60,106,12,54,45,254,102,22,254,239,254,47,254,234,1,141,2, + 219,1,165,0,0,2,0,65,0,0,4,214,5,213,0,3,0,10,0,0,9,1,51,1,37,33,21,1,33,1,33,3,149,254,13,214,1,243,251,214, + 4,149,253,231,254,83,2,26,253,23,5,113,250,243,5,13,100,100,250,143,5,113,0,0,0,7,0,139,255,227,4,139,5,240,0,4,0,12,0,36, + 0,41,0,49,0,57,0,65,0,0,37,54,39,38,39,0,16,23,22,23,17,6,7,19,53,46,1,53,52,36,32,22,21,20,6,7,21,30,1,21, + 20,4,32,36,53,52,54,19,17,6,7,6,5,22,50,55,17,38,34,7,25,1,22,50,55,17,38,34,5,17,54,55,54,16,39,38,3,88,209,7, + 7,195,253,186,95,33,44,44,32,76,128,144,0,255,1,189,254,144,128,145,162,254,247,254,18,254,247,163,144,195,7,7,1,53,49,112,49,49,112,49, + 48,114,48,48,114,1,6,44,32,96,95,33,100,74,234,228,78,2,39,254,248,77,27,18,1,252,18,27,253,220,2,32,177,128,179,208,208,179,128,177, + 32,1,35,197,143,217,232,232,217,143,197,253,108,2,102,78,228,234,97,6,6,2,150,7,7,2,162,253,208,7,7,2,48,7,33,254,4,18,27,77, + 1,8,77,27,0,4,0,106,255,227,4,163,5,240,0,4,0,9,0,17,0,37,0,0,1,6,17,16,23,1,54,17,16,47,1,38,34,7,17,22, + 50,55,3,34,39,53,23,22,32,55,17,6,35,34,0,16,0,51,32,0,16,0,1,152,202,202,1,218,205,205,100,58,171,45,40,171,63,244,167,168, + 34,153,1,42,94,66,104,245,254,251,1,16,246,1,33,1,18,254,176,5,99,99,254,244,254,232,92,254,54,179,1,111,1,221,149,50,16,8,252,222, + 6,19,253,116,60,106,12,54,45,1,154,22,1,17,1,209,1,22,254,115,253,37,254,91,255,255,0,135,255,227,4,143,5,240,16,6,0,19,0,0, + 255,255,0,225,0,0,4,90,5,213,16,6,0,20,0,0,255,255,0,150,0,0,4,74,5,240,16,6,0,21,0,0,255,255,0,156,255,227,4,115, + 5,240,16,6,0,22,0,0,255,255,0,100,0,0,4,164,5,213,16,6,0,23,0,0,255,255,0,158,255,227,4,100,5,213,16,6,0,24,0,0, + 255,255,0,143,255,227,4,150,5,240,16,6,0,25,0,0,255,255,0,168,0,0,4,104,5,213,16,6,0,26,0,0,255,255,0,139,255,227,4,139, + 5,240,16,6,0,27,0,0,255,255,0,129,255,227,4,135,5,240,16,6,0,28,0,0,0,2,0,200,0,70,10,33,5,59,0,3,0,7,0,0, + 1,51,17,35,1,17,33,17,5,46,141,141,251,154,9,89,1,95,2,195,252,36,4,245,251,11,0,0,0,3,0,200,0,70,10,33,5,59,0,3, + 0,7,0,11,0,0,55,17,33,17,39,17,33,17,37,17,51,17,200,9,89,141,247,193,3,217,141,70,4,245,251,11,141,3,219,252,37,140,2,195, + 253,61,0,0,0,4,0,200,0,70,10,33,5,59,0,22,0,26,0,30,0,34,0,0,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6, + 7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,7,48,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16, + 249,152,9,89,141,247,193,3,217,141,2,195,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219, + 252,37,140,2,195,253,61,0,0,5,0,200,0,70,10,33,5,59,0,22,0,44,0,48,0,52,0,56,0,0,1,34,39,38,39,38,52,55,54,55, + 54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17,33,17,39, + 17,33,17,37,17,51,17,8,177,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,197,36,24,26,18,15,15,17,27,23,37, + 36,24,26,18,16,16,17,27,23,250,8,9,89,141,247,193,3,217,141,1,63,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16, + 2,17,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,6,0,200, + 0,70,10,33,5,59,0,22,0,43,0,65,0,69,0,73,0,77,0,0,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7, + 6,7,6,1,34,39,38,39,38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23, + 22,20,7,6,7,6,1,17,33,17,39,17,33,17,37,17,51,17,8,177,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254, + 206,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,210,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23, + 250,8,9,89,141,247,193,3,217,141,1,63,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,1,9,15,17,27,23,74,23,26, + 18,16,16,17,27,23,72,25,26,18,15,1,8,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219, + 252,37,140,2,195,253,61,0,0,7,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,87,0,91,0,95,0,99,0,0,1,52,55,54,55,54, + 50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52, + 55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38, + 39,38,1,17,33,17,39,17,33,17,37,17,51,17,6,39,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,2,18,16,17,27, + 23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,2,2,16,17,27, + 23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,248,143,9,89,141,247,193,3,217,141,3,204,36,24,26,17,16,16,16,27,23,74,23,25, + 19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26, + 17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195,253, + 61,0,0,0,0,8,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,87,0,110,0,114,0,118,0,122,0,0,1,52,55,54,55,54,50,23, + 22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54, + 55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38, + 5,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,6,39,16,17,26, + 24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17, + 26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,254,247,16, + 17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,3,204,36,24,26,17,16,16,16,27,23,74, + 23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36, + 24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24, + 25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,9,0,200,0,70,10,33,5,59,0,20,0,42,0,64, + 0,85,0,105,0,127,0,131,0,135,0,139,0,0,1,34,39,38,39,38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39, + 38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,23,20,7,6,7,0, + 34,39,38,39,38,39,52,55,54,55,54,50,23,22,23,22,20,7,6,7,2,34,39,38,39,46,1,55,54,55,54,50,23,22,23,22,20,7,6,7, + 0,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,1,17,33,17,39,17,33,17,37,17,51,17,7,164,36,23,26,19, + 16,16,17,28,23,72,24,26,18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,205,74,24,25,18,16, + 16,17,26,23,38,36,23,26,17,16,1,17,17,26,2,85,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,23,74,22,26,18,16, + 1,17,17,27,23,72,24,26,18,15,15,17,27,253,126,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,250,28,9,89,141,247, + 193,3,217,141,3,82,16,17,28,23,72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23,37,36,23,26,19,16,16,17,28,23, + 72,24,26,18,16,16,17,27,24,71,24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72, + 24,25,19,253,222,16,17,27,24,71,24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24, + 25,19,252,227,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,0,4,0,200,0,70,10,33,5,59,0,21,0,25,0,29,0,33,0,0, + 1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,2,202,16,17,26,23, + 74,24,25,18,16,16,17,26,24,72,25,26,17,16,253,254,9,89,141,247,193,3,217,141,2,195,36,23,26,18,16,16,16,28,23,36,37,24,25,18, + 16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,0,0,5,0,200,0,70,10,33,5,59,0,21,0,44,0,48, + 0,52,0,56,0,0,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22, + 21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,2,204,16,16,27,23,74,23,25,19,16,16,17,27,24,72,24, + 26,17,16,4,100,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,2,195,36,23,26,18, + 16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251, + 11,141,3,219,252,37,140,2,195,253,61,0,0,6,0,200,0,70,10,33,5,59,0,21,0,44,0,66,0,70,0,74,0,78,0,0,1,52,55,54, + 55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7, + 6,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17,33,17,39,17,33,17,37,17,51,17,2,202,16,17,26, + 23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,5,231,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,197,36,24, + 26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,250,8,9,89,141,247,193,3,217,141,2,195,36,23,26,18,16,16,16,28,23,36,37, + 24,25,18,16,16,17,26,24,254,161,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2,17,16,17,28,23,72,24,26,18,16, + 16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,0,0,7,0,200,0,70,10,33,5,59,0,21, + 0,44,0,65,0,87,0,91,0,95,0,99,0,0,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,34,39,38, + 39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6, + 1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17,33,17,39,17,33,17,37,17,51,17,2,202,16,17,26,23, + 74,24,25,18,16,16,17,26,24,72,25,26,17,16,5,231,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,206,36,23,26, + 19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,210,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,250,8,9,89, + 141,247,193,3,217,141,2,195,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,161,16,16,27,24,72,24,25,19,16,16,17, + 27,23,37,36,24,26,17,16,1,9,15,17,27,23,74,23,26,18,16,16,17,27,23,72,25,26,18,15,1,8,16,17,28,23,72,24,26,18,16,16, + 17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,8,0,200,0,70,10,33,5,59,0,21,0,43,0,65, + 0,87,0,109,0,113,0,117,0,121,0,0,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54, + 50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52, + 55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38, + 39,38,1,17,33,17,39,17,33,17,37,17,51,17,2,202,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,3,93,16,17,26,24, + 72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26, + 24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,248,143,9,89, + 141,247,193,3,217,141,2,195,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,46,36,24,26,17,16,16,16,27,23,74,23, + 25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24, + 26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195, + 253,61,0,0,0,9,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,87,0,109,0,132,0,136,0,140,0,144,0,0,1,52,55,54,55,54, + 50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52, + 55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39, + 38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6, + 7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,2,202,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,3, + 93,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18, + 253,222,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18, + 16,254,247,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,2,195,36,23,26,18,16,16, + 16,28,23,36,37,24,25,18,16,16,17,26,24,1,46,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16, + 16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16, + 16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3, + 219,252,37,140,2,195,253,61,0,10,0,200,0,70,10,33,5,59,0,21,0,42,0,64,0,86,0,107,0,127,0,149,0,153,0,157,0,161,0,0, + 1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,37,34,39,38,39,38,52,55,54,55,54,50,23,22,23,22,20,7, + 6,7,6,3,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23,22, + 23,22,23,20,7,6,7,0,34,39,38,39,38,39,52,55,54,55,54,50,23,22,23,22,20,7,6,7,2,34,39,38,39,46,1,55,54,55,54,50, + 23,22,23,22,20,7,6,7,0,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,1,17,33,17,39,17,33,17,37,17, + 51,17,2,202,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,4,218,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17, + 27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,205,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17, + 17,26,2,85,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,23,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17, + 27,253,126,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,250,28,9,89,141,247,193,3,217,141,2,195,36,23,26,18,16,16, + 16,28,23,36,37,24,25,18,16,16,17,26,24,180,16,17,28,23,72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23,37,36, + 23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24, + 26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24,71,24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26, + 17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,0,5,0,200,0,70,10,33,5,59,0,21, + 0,43,0,47,0,51,0,55,0,0,0,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,1,34,39,38,39,38,53,52, + 55,54,55,54,50,23,22,23,22,20,7,6,7,6,1,17,33,17,39,17,33,17,37,17,51,17,4,114,74,23,25,19,16,16,17,27,23,37,36,24, + 26,17,16,16,17,26,253,173,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,254,109,9,89,141,247,193,3,217,141,1,64,16,17, + 26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,252,244,4, + 245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,0,0,6,0,200,0,70,10,33,5,59,0,22,0,26,0,30,0,34,0,56,0,78,0,0, + 1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,4,34,39,38,39, + 38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,1,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,7, + 48,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,254,183,74,23,25,19,16,16,17,27, + 23,37,36,24,26,17,16,16,17,26,253,173,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,2,195,36,23,26,18,16,16,16,28, + 23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,31,16,17,26,24,72,24,26,18,16,16,17,27, + 23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,0,0,7,0,200,0,70,10,33,5,59,0,22, + 0,44,0,48,0,52,0,56,0,78,0,100,0,0,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39, + 38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17,33,17,39,17,33,17,37,17,51,17,4,34,39,38,39,38,52,55,54, + 55,54,51,50,23,22,23,22,21,20,7,6,7,1,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,8,177,36,23,26, + 18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,197,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,250,8,9, + 89,141,247,193,3,217,141,254,183,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,253,173,36,24,26,17,16,16,16,27,23,74,23, + 25,19,16,16,17,27,23,1,63,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2,17,16,17,28,23,72,24,26,18,16,16, + 17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,31,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37, + 24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,0,8,0,200,0,70,10,33,5,59,0,22,0,43,0,65, + 0,69,0,73,0,77,0,99,0,121,0,0,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39,38,39, + 38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17, + 33,17,39,17,33,17,37,17,51,17,4,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,1,34,39,38,39,38,53,52, + 55,54,55,54,50,23,22,23,22,20,7,6,7,6,8,177,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,206,36,23,26, + 19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,210,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,250,8,9,89, + 141,247,193,3,217,141,254,183,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,253,173,36,24,26,17,16,16,16,27,23,74,23,25, + 19,16,16,17,27,23,1,63,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,1,9,15,17,27,23,74,23,26,18,16,16,17, + 27,23,72,25,26,18,15,1,8,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2, + 195,253,61,31,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24, + 26,18,16,0,0,9,0,200,0,70,10,33,5,59,0,20,0,41,0,62,0,83,0,87,0,91,0,95,0,116,0,137,0,0,1,52,55,54,55,54, + 50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,0,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54, + 55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,17, + 33,17,39,17,33,17,37,17,51,17,4,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,1,34,39,38,39,38,52,55,54, + 55,54,50,23,22,23,22,20,7,6,7,6,6,39,16,17,26,24,72,24,26,18,16,16,16,28,23,73,24,25,18,16,2,18,16,17,27,23,73,24, + 25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,16,28,23,73,24,25,18,2,2,16,17,27,23,73,24,25,18, + 16,16,17,26,24,72,24,26,18,16,248,143,9,89,141,247,193,3,217,141,254,183,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26, + 253,173,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,3,204,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23, + 253,233,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2, + 83,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195,253,61,31,16,17,26,24, + 72,24,26,18,16,16,17,27,23,73,24,25,18,2,2,16,17,27,23,73,24,25,18,16,16,17,26,24,72,24,26,18,16,0,0,0,0,10,0,200, + 0,70,10,33,5,59,0,21,0,43,0,65,0,87,0,110,0,114,0,118,0,122,0,144,0,166,0,0,1,52,55,54,55,54,50,23,22,23,22,20, + 7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23, + 22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55,54, + 55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,4,34,39,38,39,38,52,55,54, + 55,54,51,50,23,22,23,22,21,20,7,6,7,1,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,6,39,16,17,26, + 24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17, + 26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,254,247,16, + 17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,254,183,74,23,25,19,16,16,17,27,23,37, + 36,24,26,17,16,16,17,26,253,173,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,3,204,36,24,26,17,16,16,16,27,23,74, + 23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36, + 24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24, + 25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,31,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24, + 25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,0,0,11,0,200,0,70,10,33,5,59,0,20,0,42,0,64, + 0,85,0,105,0,127,0,131,0,135,0,139,0,161,0,183,0,0,1,34,39,38,39,38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,3, + 34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,23,20, + 7,6,7,0,34,39,38,39,38,39,52,55,54,55,54,50,23,22,23,22,20,7,6,7,2,34,39,38,39,46,1,55,54,55,54,50,23,22,23,22, + 20,7,6,7,0,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,1,17,33,17,39,17,33,17,37,17,51,17,4,34, + 39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,1,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6, + 7,6,7,164,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27, + 23,254,205,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,2,85,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15, + 17,27,23,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,253,126,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17, + 17,26,250,28,9,89,141,247,193,3,217,141,254,183,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,253,173,36,24,26,17,16,16, + 16,27,23,74,23,25,19,16,16,17,27,23,3,82,16,17,28,23,72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23,37,36, + 23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24, + 26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24,71,24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26, + 17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141,3,219,252,37,140,2,195,253,61,31,16,17,26,24,72,24,26,18,16,16,17,27,23, + 36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,0,0,0,6,0,200,0,70,10,33,5,59,0,21, + 0,43,0,65,0,69,0,73,0,77,0,0,0,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,37,34,39,38,39,38, + 52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,1,17, + 33,17,39,17,33,17,37,17,51,17,4,114,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,254,182,36,23,26,18,16,16,16,28, + 23,36,37,24,25,18,16,16,17,26,24,254,210,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,254,109,9,89,141,247,193,3,217, + 141,1,64,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249,16,17,26,23,74,24,26,17,16,16,17,26,24,73,24,25,18,16, + 1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,252,244,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,0, + 0,7,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,88,0,92,0,96,0,100,0,0,0,34,39,38,39,38,52,55,54,55,54,51,50,23, + 22,23,22,21,20,7,6,7,37,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,53,52,55,54, + 55,54,50,23,22,23,22,20,7,6,7,6,5,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,39, + 17,33,17,37,17,51,17,4,114,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,254,182,36,23,26,18,16,16,16,28,23,36,37, + 24,25,18,16,16,17,26,24,254,210,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,4,213,16,17,26,23,38,36,24,26,17,16, + 16,17,26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,1,64,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249, + 16,17,26,23,74,24,26,17,16,16,17,26,24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,143, + 36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,8,0,200, + 0,70,10,33,5,59,0,21,0,43,0,65,0,88,0,110,0,114,0,118,0,122,0,0,0,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23, + 22,21,20,7,6,7,37,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,53,52,55,54,55,54, + 50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39,38,39,38,52, + 55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17,33,17,39,17,33,17,37,17,51,17,4,114,74,23,25,19,16,16,17,27,23,37,36, + 24,26,17,16,16,17,26,254,182,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,210,36,24,26,17,16,16,16,27,23,74, + 23,25,19,16,16,17,27,23,6,86,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,197,36,24,26,18,15,15,17,27,23, + 37,36,24,26,18,16,16,17,27,23,250,8,9,89,141,247,193,3,217,141,1,64,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18, + 249,16,17,26,23,74,24,26,17,16,16,17,26,24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16, + 253,237,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2,17,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19, + 16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,0,0,9,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,88,0,109, + 0,131,0,135,0,139,0,143,0,0,0,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,37,34,39,38,39,38,52,55, + 54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,1,34,39,38, + 39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6, + 1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17,33,17,39,17,33,17,37,17,51,17,4,114,74,23,25,19, + 16,16,17,27,23,37,36,24,26,17,16,16,17,26,254,182,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,210,36,24,26, + 17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,6,86,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,206,36,23, + 26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,210,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,250,8,9, + 89,141,247,193,3,217,141,1,64,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249,16,17,26,23,74,24,26,17,16,16,17,26, + 24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,253,237,16,16,27,24,72,24,25,19,16,16,17, + 27,23,37,36,24,26,17,16,1,9,15,17,27,23,74,23,26,18,16,16,17,27,23,72,25,26,18,15,1,8,16,17,28,23,72,24,26,18,16,16, + 17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,10,0,200,0,70,10,33,5,59,0,21,0,43,0,65, + 0,87,0,109,0,131,0,153,0,157,0,161,0,165,0,0,0,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,37,34, + 39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6, + 7,6,37,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6, + 7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22, + 20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,4,114,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16, + 17,26,254,182,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,210,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16, + 17,27,23,3,204,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24, + 72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24, + 72,24,26,18,16,248,143,9,89,141,247,193,3,217,141,1,64,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249,16,17,26,23, + 74,24,26,17,16,16,17,26,24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,122,36,24,26,17, + 16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16, + 16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141, + 3,219,252,37,140,2,195,253,61,0,0,0,0,11,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,87,0,109,0,131,0,153,0,176,0,180, + 0,184,0,188,0,0,0,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,37,34,39,38,39,38,52,55,54,55,54,51, + 50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,37,52,55,54,55,54,50,23, + 22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54, + 55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38, + 5,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,4,114,74,23,25, + 19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,254,182,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,210,36,24, + 26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,3,204,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,2,18,16, + 17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,2,2,16, + 17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,254,247,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,249, + 152,9,89,141,247,193,3,217,141,1,64,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249,16,17,26,23,74,24,26,17,16,16, + 17,26,24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,122,36,24,26,17,16,16,16,27,23,74, + 23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36, + 24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24, + 25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,12,0,200,0,70,10,33,5,59,0,21,0,43,0,65, + 0,86,0,108,0,130,0,151,0,171,0,193,0,197,0,201,0,205,0,0,0,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7, + 6,7,37,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23, + 22,20,7,6,7,6,33,34,39,38,39,38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,38,53,52,55,54,55,54,50, + 23,22,23,22,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,23,20,7,6,7,0,34,39,38,39,38,39,52,55, + 54,55,54,50,23,22,23,22,20,7,6,7,2,34,39,38,39,46,1,55,54,55,54,50,23,22,23,22,20,7,6,7,0,34,39,38,39,38,53,52, + 55,54,55,54,51,50,23,22,23,30,1,7,6,7,1,17,33,17,39,17,33,17,37,17,51,17,4,114,74,23,25,19,16,16,17,27,23,37,36,24, + 26,17,16,16,17,26,254,182,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,210,36,24,26,17,16,16,16,27,23,74,23, + 25,19,16,16,17,27,23,5,73,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26, + 18,16,16,17,27,23,254,205,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,2,85,74,22,26,18,16,1,17,17,27,23,72, + 24,26,18,15,15,17,27,23,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,253,126,74,24,25,18,16,16,17,26,23,38,36,23, + 26,17,16,1,17,17,26,250,28,9,89,141,247,193,3,217,141,1,64,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249,16,17, + 26,23,74,24,26,17,16,16,17,26,24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17,28, + 23,72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24, + 71,24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24, + 71,24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141, + 3,219,252,37,140,2,195,253,61,0,0,0,0,7,0,200,0,70,10,33,5,59,0,20,0,41,0,62,0,83,0,87,0,91,0,95,0,0,1,52, + 55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,0,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39, + 36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38, + 39,38,1,17,33,17,39,17,33,17,37,17,51,17,1,193,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,16,2,18,16,16,28,23, + 73,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,2,2,16,16,28,23,73,24, + 25,18,16,16,17,26,24,72,24,26,18,16,252,245,9,89,141,247,193,3,217,141,3,204,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17, + 27,23,253,233,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16, + 27,2,83,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195,253,61,0,0,0, + 0,8,0,200,0,70,10,33,5,59,0,21,0,25,0,29,0,33,0,54,0,75,0,96,0,117,0,0,1,52,55,54,55,54,51,50,23,22,23,22, + 20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39, + 38,39,38,0,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7, + 6,34,39,38,39,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,7,48,16,17,26,23,38,36,24,26,17,16,16,17, + 26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,16,2,18,16, + 16,28,23,73,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,2,2,16,16,28, + 23,73,24,25,18,16,16,17,26,24,72,24,26,18,16,2,195,36,23,26,18,16,16,16,28,23,73,24,25,18,16,16,17,26,24,253,168,4,245,251, + 11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,253,233,73,24,25,19,16,16,17, + 27,23,37,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27, + 23,73,24,25,19,16,16,17,27,23,0,0,0,9,0,200,0,70,10,33,5,59,0,22,0,44,0,48,0,52,0,56,0,78,0,100,0,122,0,144, + 0,0,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22, + 23,22,20,7,6,7,6,1,17,33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39, + 38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6, + 35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,8,177,36,23,26,18,16,16,16,28,23,36,37, + 24,25,18,16,16,17,26,24,253,197,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,250,8,9,89,141,247,193,3,217,141,252, + 6,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18, + 253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18, + 16,1,63,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2,17,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26, + 19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233, + 74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36, + 24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,0,0,0,0,10,0,200,0,70,10,33,5,59,0,22,0,43,0,65,0,69,0,73, + 0,77,0,99,0,121,0,143,0,165,0,0,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39,38,39, + 38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17, + 33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50, + 23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54, + 55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,8,177,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254, + 206,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,210,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23, + 250,8,9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,16,28,23,36,37,24, + 25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,16,28,23,36,37,24, + 25,18,16,16,17,26,24,72,24,26,18,16,1,63,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,1,9,15,17,27,23,74, + 23,26,18,16,16,17,27,23,72,25,26,18,15,1,8,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141, + 3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23, + 37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74, + 23,25,19,16,16,17,27,23,0,11,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,87,0,91,0,95,0,99,0,121,0,143,0,165,0,187, + 0,0,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6, + 7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22, + 20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34, + 39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7, + 6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,6,39,16,17,26,24,72,24,26,18, + 16,16,16,28,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26, + 18,16,16,16,28,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,248,143,9,89,141,247,193,3, + 217,141,252,6,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72, + 24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72, + 24,26,18,16,3,204,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17, + 16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16, + 17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253, + 233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83, + 36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,0,0,0,12,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,87,0,110, + 0,114,0,118,0,122,0,144,0,166,0,188,0,210,0,0,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52, + 55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39, + 38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6, + 7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39, + 38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6, + 35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,6,39,16,17,26,24,72,24,26,18,16,16,16, + 28,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16, + 16,28,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,254,247,16,17,26,23,38,36,24,26,17, + 16,16,17,26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18, + 16,2,18,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25, + 18,2,2,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,3,204,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17, + 27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16, + 27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26, + 24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74, + 23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24, + 26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,0,13,0,200,0,70,10,33,5,59,0,20,0,42,0,64,0,85,0,105,0,127,0,131, + 0,135,0,139,0,161,0,183,0,205,0,227,0,0,1,34,39,38,39,38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39, + 38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,23,20,7,6,7,0, + 34,39,38,39,38,39,52,55,54,55,54,50,23,22,23,22,20,7,6,7,2,34,39,38,39,46,1,55,54,55,54,50,23,22,23,22,20,7,6,7, + 0,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,1,17,33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54, + 50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52, + 55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38, + 39,38,7,164,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27, + 23,254,205,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,2,85,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15, + 17,27,23,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,253,126,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17, + 17,26,250,28,9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,16,28,23,36, + 37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,16,28,23,36, + 37,24,25,18,16,16,17,26,24,72,24,26,18,16,3,82,16,17,28,23,72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23, + 37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37, + 36,24,26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24,71,24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36, + 24,26,17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74, + 23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36, + 24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,0,0,8,0,200,0,70,10,33,5,59,0,3, + 0,7,0,11,0,33,0,55,0,77,0,99,0,121,0,0,55,17,33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22,20, + 7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23, + 22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55,54, + 55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,200,9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24,26,18,16,16,17, + 27,23,36,37,24,25,18,16,2,18,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16, + 17,27,23,36,37,24,25,18,2,2,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,254,247,16,17,26,23,74,24,25,18,16, + 16,17,26,24,72,25,26,17,16,70,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16, + 16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16, + 16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16, + 17,26,24,0,0,9,0,200,0,70,10,33,5,59,0,22,0,26,0,30,0,34,0,56,0,78,0,100,0,122,0,144,0,0,1,52,55,54,55,54, + 51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22, + 20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50, + 23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55, + 54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,7,48,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16, + 249,152,9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,16,28,23,36,37,24, + 25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,16,28,23,36,37,24, + 25,18,16,16,17,26,24,72,24,26,18,16,254,247,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,2,195,36,23,26,18,16,16, + 16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23, + 74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37, + 36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37, + 24,25,18,16,16,17,26,24,0,10,0,200,0,70,10,33,5,59,0,22,0,44,0,48,0,52,0,56,0,78,0,100,0,122,0,144,0,166,0,0, + 1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22, + 20,7,6,7,6,1,17,33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0, + 52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34, + 39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55,54,55,54,50,23,22,23,22,21,20,7,6, + 7,6,34,39,38,39,38,8,177,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,197,36,24,26,18,15,15,17,27,23,37, + 36,24,26,18,16,16,17,27,23,250,8,9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16, + 2,18,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18, + 2,2,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,254,247,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17, + 16,1,63,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2,17,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26, + 19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233, + 74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36, + 24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,0,0,0, + 0,11,0,200,0,70,10,33,5,59,0,22,0,43,0,65,0,69,0,73,0,77,0,99,0,121,0,143,0,165,0,187,0,0,1,34,39,38,39,38, + 52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,1,34, + 39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17,33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23, + 22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54, + 55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38, + 5,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,8,177,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16, + 17,26,24,254,206,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,210,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16, + 16,17,27,23,250,8,9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,16,28, + 23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,16,28, + 23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,254,247,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,1,63,16,16, + 27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,1,9,15,17,27,23,74,23,26,18,16,16,17,27,23,72,25,26,18,15,1,8,16, + 17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16, + 16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16, + 17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16, + 28,23,36,37,24,25,18,16,16,17,26,24,0,12,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,87,0,91,0,95,0,99,0,121,0,143, + 0,165,0,187,0,209,0,0,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22, + 23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54, + 51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22,20, + 7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23, + 22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55,54, + 55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,6,39,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,2, + 18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,2, + 2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,248,143,9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24,26,18, + 16,16,17,27,23,36,37,24,25,18,16,2,18,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26, + 18,16,16,17,27,23,36,37,24,25,18,2,2,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,254,247,16,17,26,23,74,24, + 25,18,16,16,17,26,24,72,25,26,17,16,3,204,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16, + 17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16, + 27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23, + 25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24, + 26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25, + 18,16,16,17,26,24,0,0,0,13,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,87,0,110,0,114,0,118,0,122,0,144,0,166,0,188, + 0,210,0,232,0,0,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22, + 21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50, + 23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,17,33, + 17,39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23, + 22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55, + 54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,6, + 39,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18, + 253,222,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18, + 16,254,247,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24, + 26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72, + 24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,254,247,16,17,26,23, + 74,24,25,18,16,16,17,26,24,72,25,26,17,16,3,204,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19, + 16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16, + 16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141, + 3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23, + 37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74, + 23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,0,14,0,200,0,70,10,33,5,59,0,20, + 0,42,0,64,0,85,0,105,0,127,0,131,0,135,0,139,0,161,0,183,0,205,0,227,0,249,0,0,1,34,39,38,39,38,52,55,54,55,54,50, + 23,22,23,22,20,7,6,7,6,3,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,32,34,39,38,39,38,52,55,54, + 55,54,51,50,23,22,23,22,23,20,7,6,7,0,34,39,38,39,38,39,52,55,54,55,54,50,23,22,23,22,20,7,6,7,2,34,39,38,39,46, + 1,55,54,55,54,50,23,22,23,22,20,7,6,7,0,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,1,17,33,17, + 39,17,33,17,37,17,51,17,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22, + 23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54, + 51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,7,164, + 36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,205,74, + 24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,2,85,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,23,74, + 22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,253,126,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,250,28, + 9,89,141,247,193,3,217,141,252,6,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,16,28,23,36,37,24,25,18, + 16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,16,28,23,36,37,24,25,18, + 16,16,17,26,24,72,24,26,18,16,254,247,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,3,82,16,17,28,23,72,24,26,18, + 15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16, + 16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24,71,24,26,19,16, + 16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141,3,219,252,37,140, + 2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17, + 16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16, + 17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,0,0,9,0,200,0,70,10,33,5,59,0,3,0,7,0,11, + 0,34,0,58,0,80,0,102,0,124,0,146,0,0,55,17,33,17,39,17,33,17,37,17,51,17,1,34,39,38,39,38,53,52,55,54,55,54,51,50, + 23,22,23,22,20,7,6,7,6,3,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,32,34,39,38,39,38,52, + 55,54,55,54,51,50,23,22,23,22,23,20,7,6,7,1,34,39,38,39,38,39,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39, + 38,39,46,1,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,0,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6, + 7,200,9,89,141,247,193,3,217,141,253,132,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,37,36,23,26,18,16,16,16,28, + 23,36,37,24,25,18,16,16,17,26,24,254,205,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,2,48,36,23,26,18,16,1, + 17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,253,149,74,23,26,18,16, + 16,17,27,23,37,36,23,26,17,16,1,17,16,27,70,4,245,251,11,141,3,219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24,26,17, + 16,16,17,26,23,74,23,25,19,16,253,239,16,17,26,23,38,36,23,26,18,16,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18, + 16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,253,238,16,17,26,24,72,24,26, + 18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,0,10,0,200,0,70,10,33, + 5,59,0,22,0,26,0,30,0,34,0,57,0,81,0,103,0,125,0,147,0,169,0,0,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6, + 7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,1,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,20,7,6, + 7,6,3,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23, + 22,23,22,23,20,7,6,7,1,34,39,38,39,38,39,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,46,1,55,54,55, + 54,50,23,22,23,22,21,20,7,6,7,6,0,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,7,48,16,17,26,23, + 38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,253,132,36,23,26,18,16,16,16,28,23,36,37,24,25, + 18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,205,74,23,26,18,16,16,17,27,23,37,36,23, + 26,17,16,1,17,16,27,2,48,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23,72, + 24,26,18,16,16,17,27,23,253,149,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,2,195,36,23,26,18,16,16,16,28,23, + 36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16,16,17, + 26,23,74,23,25,19,16,253,239,16,17,26,23,38,36,23,26,18,16,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17, + 27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,253,238,16,17,26,24,72,24,26,18,16,16, + 17,27,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,0,0,0,0,11,0,200,0,70,10,33, + 5,59,0,22,0,44,0,48,0,52,0,56,0,79,0,103,0,125,0,147,0,169,0,191,0,0,1,34,39,38,39,38,52,55,54,55,54,51,50,23, + 22,23,22,21,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17,33,17,39,17,33,17,37, + 17,51,17,1,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,38,53,52,55,54,55,54,51,50, + 23,22,23,22,21,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,23,20,7,6,7,1,34,39,38,39,38,39,52, + 55,54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,46,1,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,0,34,39,38, + 39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,8,177,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253, + 197,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,250,8,9,89,141,247,193,3,217,141,253,132,36,23,26,18,16,16,16,28, + 23,36,37,24,25,18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,205,74,23,26,18,16,16,17, + 27,23,37,36,23,26,17,16,1,17,16,27,2,48,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1, + 17,17,27,23,72,24,26,18,16,16,17,27,23,253,149,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,1,63,16,16,27,24, + 72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2,17,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251, + 11,141,3,219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16,16,17,26,23,74,23,25,19,16,253,239,16,17,26,23,38,36, + 23,26,18,16,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37, + 24,25,18,16,16,17,26,24,72,24,26,18,16,253,238,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,17,27,23, + 36,37,24,25,18,16,16,17,26,24,72,24,26,18,0,0,0,12,0,200,0,70,10,33,5,59,0,22,0,43,0,65,0,69,0,73,0,77,0,100, + 0,124,0,146,0,168,0,190,0,212,0,0,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,1,34,39,38,39, + 38,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,1,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,1,17, + 33,17,39,17,33,17,37,17,51,17,1,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,38,53, + 52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,23,20,7,6,7,1, + 34,39,38,39,38,39,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,46,1,55,54,55,54,50,23,22,23,22,21,20,7, + 6,7,6,0,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,8,177,36,23,26,18,16,16,16,28,23,36,37,24,25, + 18,16,16,17,26,24,254,206,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,210,36,24,26,18,15,15,17,27,23,37,36,24, + 26,18,16,16,17,27,23,250,8,9,89,141,247,193,3,217,141,253,132,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,37,36, + 23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,205,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,2, + 48,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23, + 253,149,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,1,63,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26, + 17,16,1,9,15,17,27,23,74,23,26,18,16,16,17,27,23,72,25,26,18,15,1,8,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26, + 19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16,16,17,26,23,74,23,25,19,16,253, + 239,16,17,26,23,38,36,23,26,18,16,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2, + 2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,253,238,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18, + 16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,0,0,0,0,13,0,200,0,70,10,33,5,59,0,21,0,43,0,65, + 0,87,0,91,0,95,0,99,0,122,0,146,0,168,0,190,0,212,0,234,0,0,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34, + 39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7, + 6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,17,33,17,39,17,33,17,37,17, + 51,17,1,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,38,53,52,55,54,55,54,51,50,23, + 22,23,22,21,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,23,20,7,6,7,1,34,39,38,39,38,39,52,55, + 54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,46,1,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,0,34,39,38,39, + 38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,6,39,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,2,18, + 16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,2,2, + 16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,248,143,9,89,141,247,193,3,217,141,253,132,36,23,26,18,16,16,16,28,23, + 36,37,24,25,18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,205,74,23,26,18,16,16,17,27, + 23,37,36,23,26,17,16,1,17,16,27,2,48,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17, + 17,27,23,72,24,26,18,16,16,17,27,23,253,149,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,3,204,36,24,26,17,16, + 16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16, + 17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3, + 219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16,16,17,26,23,74,23,25,19,16,253,239,16,17,26,23,38,36,23,26,18, + 16,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18, + 16,16,17,26,24,72,24,26,18,16,253,238,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24, + 25,18,16,16,17,26,24,72,24,26,18,0,0,14,0,200,0,70,10,33,5,59,0,21,0,43,0,65,0,87,0,110,0,114,0,118,0,122,0,145, + 0,169,0,191,0,213,0,235,1,1,0,0,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54, + 51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,36,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52, + 55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,5,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39, + 38,39,38,1,17,33,17,39,17,33,17,37,17,51,17,1,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,3,34, + 39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,22,23, + 20,7,6,7,1,34,39,38,39,38,39,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,46,1,55,54,55,54,50,23,22, + 23,22,21,20,7,6,7,6,0,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,6,39,16,17,26,24,72,24,26,18, + 16,16,16,28,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,253,222,16,17,26,24,72,24,26, + 18,16,16,16,28,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,254,247,16,17,26,23,38,36, + 24,26,17,16,16,17,26,24,73,24,25,18,16,249,152,9,89,141,247,193,3,217,141,253,132,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16, + 16,17,26,24,37,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,205,74,23,26,18,16,16,17,27,23,37,36,23,26,17, + 16,1,17,16,27,2,48,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23,72,24,26, + 18,16,16,17,27,23,253,149,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,3,204,36,24,26,17,16,16,16,27,23,74,23, + 25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24, + 26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25, + 18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16,16,17,26,23,74,23, + 25,19,16,253,239,16,17,26,23,38,36,23,26,18,16,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37, + 24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,253,238,16,17,26,24,72,24,26,18,16,16,17,27,23,36, + 37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,0,0,0,0,15,0,200,0,70,10,33,5,59,0,20, + 0,42,0,64,0,85,0,105,0,127,0,131,0,135,0,139,0,161,0,183,0,204,0,225,0,246,1,11,0,0,1,34,39,38,39,38,52,55,54,55, + 54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,32,34,39,38,39,38,52, + 55,54,55,54,51,50,23,22,23,22,23,20,7,6,7,0,34,39,38,39,38,39,52,55,54,55,54,50,23,22,23,22,20,7,6,7,2,34,39,38, + 39,46,1,55,54,55,54,50,23,22,23,22,20,7,6,7,0,34,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,1,17, + 33,17,39,17,33,17,37,17,51,17,1,34,39,38,39,38,53,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,38,53,52, + 55,54,55,54,50,23,22,23,22,20,7,6,7,6,32,34,39,38,39,38,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,1,34,39,38,39, + 46,1,55,54,55,54,50,23,22,23,22,20,7,6,7,6,3,34,39,38,39,46,1,55,54,55,54,50,23,22,23,22,20,7,6,7,6,0,34,39, + 38,39,38,52,55,54,55,54,51,50,23,22,23,30,1,7,6,7,7,164,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,37,36, + 23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,254,204,73,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,2,85, + 73,23,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,23,73,23,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,253,125,73, + 24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,250,28,9,89,141,247,193,3,217,141,253,132,36,23,26,18,16,16,16,28,23,73, + 24,25,18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23,73,24,25,18,16,16,17,26,24,254,204,73,23,26,18,16,16,17,27,23,37,36, + 23,26,17,16,1,17,16,27,2,48,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23, + 72,24,26,18,16,16,17,27,23,253,148,73,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,3,82,16,17,28,23,72,24,26,18, + 15,15,17,27,23,73,23,26,19,16,253,239,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16, + 16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24,71,24,26,19,16, + 16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141,3,219,252,37,140, + 2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16,16,17,26,23,73,24,25,19,16,253,239,16,17,26,23,38,36,23,26,18,16,16,17,27, + 23,73,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,2,2,16,17,27,23,73,24,25,18,16,16,17,26,24,72,24, + 26,18,16,253,238,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,16,2,18,16,17,27,23,73,24,25,18,16,16,17,26,24,72,24, + 26,18,0,0,0,2,0,200,254,20,5,189,7,109,0,3,0,7,0,0,1,21,33,53,1,33,17,33,1,225,2,195,252,36,4,245,251,11,3,7, + 141,141,4,102,246,167,0,0,0,3,0,200,254,20,5,189,7,109,0,3,0,7,0,11,0,0,19,33,17,33,55,33,17,33,19,33,21,33,200,4, + 245,251,11,141,3,219,252,37,140,2,195,253,61,7,109,246,167,141,8,63,252,39,141,0,0,4,0,200,254,20,5,189,7,109,0,22,0,26,0,30, + 0,34,0,0,1,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,3, + 69,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,1,5,16,17, + 26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8,63,252,39,141,0,0,5,0,200,254,20,5,189,7,109,0,21, + 0,43,0,47,0,51,0,55,0,0,5,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23, + 22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,33,17,33,55,33,17,33,19,33,21,33,1,193,16,16,27,24,72,24,25,19,16,16,17,27, + 23,37,36,24,26,17,16,2,17,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2, + 195,253,61,124,36,23,26,18,16,16,16,28,23,73,24,25,18,16,16,17,26,24,2,59,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16, + 17,27,23,5,248,246,167,141,8,63,252,39,141,0,0,0,0,6,0,200,254,20,5,189,7,109,0,22,0,43,0,65,0,69,0,73,0,77,0,0, + 5,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34, + 39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,33,17,33,55,33,17,33,19,33,21,33,1,193, + 16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,1,9,15,17,27,23,74,23,26,18,16,16,17,27,23,72,25,26,18,15,1, + 8,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,124,36,23,26,18, + 16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,50,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,1,46,36,24,26, + 18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,5,248,246,167,141,8,63,252,39,141,0,0,0,7,0,200,254,20,5,189,7,109,0,21, + 0,43,0,65,0,87,0,91,0,95,0,99,0,0,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22, + 23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55, + 1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,4,78,36,24,26,17, + 16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16, + 16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141, + 3,219,252,37,140,2,195,253,61,2,14,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,253,238,16,17,27,23,36,37,24,25, + 18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,253,254,16,17,27,23,36,37,24,25, + 18,16,16,17,26,24,72,24,26,18,16,7,113,246,167,141,8,63,252,39,141,0,0,0,0,8,0,200,254,20,5,189,7,109,0,21,0,43,0,65, + 0,87,0,110,0,114,0,118,0,122,0,0,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22, + 21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50, + 23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,3,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55, + 54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,4,78,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25, + 19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17, + 16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11, + 141,3,219,252,37,140,2,195,253,61,2,14,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,253,238,16,17,27,23,36,37,24, + 25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,253,254,16,17,27,23,36,37,24, + 25,18,16,16,17,26,24,72,24,26,18,16,1,9,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8,63, + 252,39,141,0,0,9,0,200,254,20,5,189,7,109,0,20,0,42,0,64,0,85,0,105,0,127,0,131,0,135,0,139,0,0,37,52,55,54,55,54, + 50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,16,52,55, + 54,55,54,50,23,22,23,22,21,20,7,6,7,6,7,34,39,38,39,0,52,55,54,55,54,55,50,23,22,23,22,20,7,6,7,6,34,39,38,39, + 36,52,55,54,55,62,1,23,22,23,22,20,7,6,7,6,34,39,38,39,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,14,1,39, + 38,39,1,33,17,33,55,33,17,33,19,33,21,33,3,212,16,17,28,23,72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23, + 37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37, + 36,24,26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24,71,24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36, + 24,26,17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141,3,219,252,37,140,2,195,253,61,145,36,23,26,19,16,16,17,28,23,72,24, + 26,18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,1,51,74,24,25,18,16,16,17,26,23,38,36,23, + 26,17,16,1,17,17,26,253,171,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,23,74,22,26,18,16,1,17,17,27,23,72,24, + 26,18,15,15,17,27,2,130,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,5,228,246,167,141,8,63,252,39,141,0,0,0, + 0,4,0,200,254,20,5,189,7,109,0,21,0,25,0,29,0,33,0,0,1,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54, + 55,54,1,33,17,33,55,33,17,33,19,33,21,33,3,69,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251, + 11,141,3,219,252,37,140,2,195,253,61,5,107,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,2,2,246,167,141,8,63,252,39, + 141,0,0,0,0,5,0,200,254,20,5,189,7,109,0,21,0,44,0,48,0,52,0,56,0,0,1,50,23,22,23,22,20,7,6,7,6,35,34,39, + 38,39,38,52,55,54,55,54,19,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19, + 33,21,33,3,69,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16, + 16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,5,105,16,16,27,23,74,23,25,19,16,16,17,27,24,72,24,26,17,16, + 251,156,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8,63,252,39,141,0,0,6,0,200,254,20,5,189, + 7,109,0,21,0,44,0,66,0,70,0,74,0,78,0,0,1,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,52, + 55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39, + 38,39,38,1,33,17,33,55,33,17,33,19,33,21,33,3,69,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,161,16,16, + 27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2,17,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4, + 245,251,11,141,3,219,252,37,140,2,195,253,61,5,107,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,250,25,36,23,26,18,16, + 16,16,28,23,36,37,24,25,18,16,16,17,26,24,2,59,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,5,248,246,167,141, + 8,63,252,39,141,0,0,0,0,7,0,200,254,20,5,189,7,109,0,21,0,44,0,65,0,87,0,91,0,95,0,99,0,0,1,50,23,22,23,22, + 20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1, + 52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38, + 39,38,1,33,17,33,55,33,17,33,19,33,21,33,3,69,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,254,161,16,16,27, + 24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,1,9,15,17,27,23,74,23,26,18,16,16,17,27,23,72,25,26,18,15,1,8,16,17, + 28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,5,107,16,17,26,23,74,24, + 25,18,16,16,17,26,24,72,25,26,17,16,250,25,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,50,36,23,26,19,16, + 16,17,28,23,72,24,26,18,16,16,17,27,23,1,46,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,5,248,246,167,141,8, + 63,252,39,141,0,8,0,200,254,20,5,189,7,109,0,21,0,43,0,65,0,87,0,109,0,113,0,117,0,121,0,0,1,50,23,22,23,22,20,7, + 6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22, + 23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55, + 1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,3,69,36,23,26,18, + 16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,46,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25, + 19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17, + 16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195,253,61,5,107,16,17,26,23,74,24,25,18, + 16,16,17,26,24,72,25,26,17,16,252,163,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,253,238,16,17,27,23,36,37,24, + 25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,253,254,16,17,27,23,36,37,24, + 25,18,16,16,17,26,24,72,24,26,18,16,7,113,246,167,141,8,63,252,39,141,0,0,0,9,0,200,254,20,5,189,7,109,0,21,0,43,0,65, + 0,87,0,109,0,132,0,136,0,140,0,144,0,0,1,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,50,23,22, + 23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55, + 18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52, + 55,54,55,54,3,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,3, + 69,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,46,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23, + 253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2, + 83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253, + 168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,5,107,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,252,163,16,17,26, + 24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,253,238,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17, + 26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,253,254,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,1,9,16, + 17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8,63,252,39,141,0,10,0,200,254,20,5,189,7,109,0,21, + 0,42,0,64,0,86,0,107,0,127,0,149,0,153,0,157,0,161,0,0,1,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54, + 55,54,19,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6, + 34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,7,34,39,38,39,0,52,55,54,55,54,55,50,23,22,23,22,20, + 7,6,7,6,34,39,38,39,36,52,55,54,55,62,1,23,22,23,22,20,7,6,7,6,34,39,38,39,0,52,55,54,55,54,51,50,23,22,23,22, + 21,20,7,6,7,14,1,39,38,39,1,33,17,33,55,33,17,33,19,33,21,33,3,69,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16, + 17,26,24,180,16,17,28,23,72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24, + 26,18,16,16,17,27,24,71,24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25, + 19,253,222,16,17,27,24,71,24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19, + 252,227,4,245,251,11,141,3,219,252,37,140,2,195,253,61,5,107,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,251,38,36,23, + 26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,1,51,74,24,25, + 18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,253,171,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,23,74,22,26, + 18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,2,130,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,5,228,246,167, + 141,8,63,252,39,141,0,0,0,5,0,200,254,20,5,189,7,109,0,21,0,43,0,47,0,51,0,55,0,0,0,52,55,54,55,54,50,23,22,23, + 22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,33,17,33,55,33, + 17,33,19,33,21,33,1,194,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17, + 26,24,72,24,26,18,16,252,244,4,245,251,11,141,3,219,252,37,140,2,195,253,61,3,195,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16, + 16,17,26,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,1,147,246,167,141,8,63,252,39,141,0,0,0,0,6,0,200, + 254,20,5,189,7,109,0,22,0,26,0,30,0,34,0,56,0,78,0,0,1,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55, + 54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,2,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55, + 54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,3,69,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24, + 253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,31,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27, + 23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,1,5,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246, + 167,141,8,63,252,39,141,1,73,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,2,83,36,24,26,17,16,16,16,27,23,74,23, + 25,19,16,16,17,27,23,0,0,7,0,200,254,20,5,189,7,109,0,22,0,44,0,48,0,52,0,56,0,78,0,100,0,0,5,52,55,54,55,54, + 50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1, + 33,17,33,55,33,17,33,19,33,21,33,2,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51, + 50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,193,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2,17,16,17, + 28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,31,16,17,26,24,72,24,26, + 18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,124,36,23,26,18,16,16,16, + 28,23,36,37,24,25,18,16,16,17,26,24,2,59,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,5,248,246,167,141,8,63, + 252,39,141,1,73,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16, + 17,27,23,0,0,8,0,200,254,20,5,189,7,109,0,22,0,43,0,65,0,69,0,73,0,77,0,99,0,121,0,0,5,52,55,54,55,54,50,23, + 22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,52,55,54, + 55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,33,17,33,55,33,17,33,19,33,21,33,2,52,55,54,55,54,50,23,22,23, + 22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,193,16,16,27,24, + 72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,1,9,15,17,27,23,74,23,26,18,16,16,17,27,23,72,25,26,18,15,1,8,16,17,28, + 23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,31,16,17,26,24,72,24,26,18, + 16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,124,36,23,26,18,16,16,16,28, + 23,36,37,24,25,18,16,16,17,26,24,1,50,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,1,46,36,24,26,18,15,15,17, + 27,23,37,36,24,26,18,16,16,17,27,23,5,248,246,167,141,8,63,252,39,141,1,73,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16, + 17,26,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,0,0,0,9,0,200,254,20,5,189,7,109,0,21,0,43,0,65, + 0,87,0,91,0,95,0,99,0,121,0,143,0,0,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22, + 23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55, + 1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,2,52,55,54,55,54, + 50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,4,78, + 36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74, + 23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,159,4, + 245,251,11,141,3,219,252,37,140,2,195,253,61,31,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37, + 24,25,18,16,16,17,26,24,72,24,26,18,16,2,14,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,253,238,16,17,27,23, + 36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,253,254,16,17,27,23, + 36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,7,113,246,167,141,8,63,252,39,141,1,73,74,23,25,19,16,16,17,27,23,37,36,24,26, + 17,16,16,17,26,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,0,0,0,0,10,0,200,254,20,5,189,7,109,0,21, + 0,43,0,65,0,87,0,110,0,114,0,118,0,122,0,144,0,166,0,0,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54, + 55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39, + 38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,3,50,23,22,23,22,21,20,7,6,7,6, + 35,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,2,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6, + 35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,4,78,36,24,26,17,16,16,16,27,23,74,23, + 25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24, + 26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25, + 18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,31,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25, + 18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,2,14,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24, + 25,18,16,253,238,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37, + 24,25,18,253,254,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,1,9,16,17,26,23,38,36,24,26,17,16,16,17,26,24, + 73,24,25,18,16,6,104,246,167,141,8,63,252,39,141,1,73,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,2,83,36,24,26, + 17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,0,0,11,0,200,254,20,5,189,7,109,0,20,0,42,0,64,0,85,0,105,0,127,0,131, + 0,135,0,139,0,161,0,183,0,0,37,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,51,50,23, + 22,23,22,20,7,6,7,6,34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,7,34,39,38,39,0,52,55,54,55, + 54,55,50,23,22,23,22,20,7,6,7,6,34,39,38,39,36,52,55,54,55,62,1,23,22,23,22,20,7,6,7,6,34,39,38,39,0,52,55,54, + 55,54,51,50,23,22,23,22,21,20,7,6,7,14,1,39,38,39,1,33,17,33,55,33,17,33,19,33,21,33,2,52,55,54,55,54,50,23,22,23, + 22,21,20,7,6,7,6,35,34,39,38,39,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,3,212,16,17,28,23, + 72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24,71, + 24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24,71, + 24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141,3, + 219,252,37,140,2,195,253,61,31,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16, + 17,26,24,72,24,26,18,16,145,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26, + 18,16,16,17,27,23,1,51,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,253,171,74,22,26,18,16,1,17,17,27,23,72, + 24,26,18,15,15,17,27,23,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,2,130,74,24,25,18,16,16,17,26,23,38,36,23, + 26,17,16,1,17,17,26,5,228,246,167,141,8,63,252,39,141,1,73,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,2,83,36, + 24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,0,0,0,0,6,0,200,254,20,5,189,7,109,0,21,0,43,0,65,0,69,0,73, + 0,77,0,0,0,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,19,52,55,54,55,54,50,23,22,23,22,21,20,7, + 6,7,6,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,33,17,33,55,33,17,33,19,33, + 21,33,1,194,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249,16,17,26,23,74,24,26,17,16,16,17,26,24,73,24,25,18, + 16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,252,244,4,245,251,11,141,3,219,252,37,140,2,195,253,61,3,195, + 74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,1,74,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1, + 46,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,1,147,246,167,141,8,63,252,39,141,0,0,0,0,7,0,200,254,20,5,189, + 7,109,0,21,0,43,0,65,0,88,0,92,0,96,0,100,0,0,0,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39, + 19,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34, + 39,38,39,38,3,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,1, + 194,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249,16,17,26,23,74,24,26,17,16,16,17,26,24,73,24,25,18,16,1,9, + 16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,143,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253, + 168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,3,195,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,1,74,36,23,26, + 18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,46,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,251,43,16,17, + 26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8,63,252,39,141,0,0,8,0,200,254,20,5,189,7,109,0,21, + 0,43,0,65,0,88,0,110,0,114,0,118,0,122,0,0,0,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,19,52, + 55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38, + 39,38,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6, + 7,6,34,39,38,39,38,1,33,17,33,55,33,17,33,19,33,21,33,1,194,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249, + 16,17,26,23,74,24,26,17,16,16,17,26,24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,253, + 237,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2,17,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16, + 252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,3,195,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,1,74,36,23, + 26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,46,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,249,170,36, + 23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,2,59,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,5, + 248,246,167,141,8,63,252,39,141,0,0,0,0,9,0,200,254,20,5,189,7,109,0,21,0,43,0,65,0,88,0,109,0,131,0,135,0,139,0,143, + 0,0,0,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,19,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7, + 6,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,21, + 20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54,50,23, + 22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,33,17,33,55,33,17,33,19,33,21,33,1,194,16,17,26,24,72,24,26,18,16,16,17,27, + 23,36,37,24,25,18,249,16,17,26,23,74,24,26,17,16,16,17,26,24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26, + 24,72,24,26,18,16,253,237,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,1,9,15,17,27,23,74,23,26,18,16,16,17, + 27,23,72,25,26,18,15,1,8,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2, + 195,253,61,3,195,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,1,74,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16, + 16,17,26,24,1,46,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,249,170,36,23,26,18,16,16,16,28,23,36,37,24,25,18, + 16,16,17,26,24,1,50,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,1,46,36,24,26,18,15,15,17,27,23,37,36,24,26, + 18,16,16,17,27,23,5,248,246,167,141,8,63,252,39,141,0,10,0,200,254,20,5,189,7,109,0,21,0,43,0,65,0,87,0,109,0,131,0,153, + 0,157,0,161,0,165,0,0,0,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,19,52,55,54,55,54,50,23,22,23, + 22,21,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,19,50,23,22,23,22, + 20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50, + 23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54, + 55,54,1,33,17,33,55,33,17,33,19,33,21,33,1,194,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249,16,17,26,23,74, + 24,26,17,16,16,17,26,24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,122,36,24,26,17,16, + 16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16, + 17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3, + 219,252,37,140,2,195,253,61,3,195,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,1,74,36,23,26,18,16,16,16,28,23,36, + 37,24,25,18,16,16,17,26,24,1,46,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,52,16,17,26,24,72,24,26,18,16, + 16,16,28,23,36,37,24,25,18,16,253,238,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18, + 16,16,16,28,23,36,37,24,25,18,253,254,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,7,113,246,167,141,8,63,252,39, + 141,0,0,0,0,11,0,200,254,20,5,189,7,109,0,21,0,43,0,65,0,87,0,109,0,131,0,153,0,176,0,180,0,184,0,188,0,0,0,52, + 55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,19,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38, + 39,38,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,19,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38, + 53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35, + 34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,3,50,23,22,23,22,21,20, + 7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,1,194,16,17,26,24,72,24,26,18,16,16,17, + 27,23,36,37,24,25,18,249,16,17,26,23,74,24,26,17,16,16,17,26,24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17, + 26,24,72,24,26,18,16,122,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24, + 26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19, + 16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253, + 61,3,195,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,1,74,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17, + 26,24,1,46,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,52,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24, + 25,18,16,253,238,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37, + 24,25,18,253,254,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,1,9,16,17,26,23,38,36,24,26,17,16,16,17,26,24, + 73,24,25,18,16,6,104,246,167,141,8,63,252,39,141,0,0,12,0,200,254,20,5,189,7,109,0,21,0,43,0,65,0,86,0,108,0,130,0,151, + 0,171,0,193,0,197,0,201,0,205,0,0,0,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,19,52,55,54,55,54, + 50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,17,52, + 55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39, + 38,16,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,7,34,39,38,39,0,52,55,54,55,54,55,50,23,22,23,22,20,7,6,7,6, + 34,39,38,39,36,52,55,54,55,62,1,23,22,23,22,20,7,6,7,6,34,39,38,39,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6, + 7,14,1,39,38,39,1,33,17,33,55,33,17,33,19,33,21,33,1,194,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,249,16, + 17,26,23,74,24,26,17,16,16,17,26,24,73,24,25,18,16,1,9,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17, + 28,23,72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27, + 24,71,24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27, + 24,71,24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11, + 141,3,219,252,37,140,2,195,253,61,3,195,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,17,26,1,74,36,23,26,18,16,16,16,28, + 23,36,37,24,25,18,16,16,17,26,24,1,46,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,250,183,36,23,26,19,16,16,17, + 28,23,72,24,26,18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,1,51,74,24,25,18,16,16,17,26, + 23,38,36,23,26,17,16,1,17,17,26,253,171,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,23,74,22,26,18,16,1,17,17, + 27,23,72,24,26,18,15,15,17,27,2,130,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,5,228,246,167,141,8,63,252,39, + 141,0,0,0,0,7,0,200,254,20,5,189,7,109,0,20,0,41,0,62,0,83,0,87,0,91,0,95,0,0,1,50,23,22,23,22,20,7,6,7, + 6,34,39,38,39,38,52,55,54,55,54,0,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7, + 6,7,6,35,34,39,38,39,38,52,55,54,55,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33, + 17,33,19,33,21,33,4,78,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,253,233,73,24,25,19,16,16,17,27,23,37,36,24, + 26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,73,24,25,19, + 16,16,17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195,253,61,6,116,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18, + 16,253,238,16,16,28,23,73,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,253, + 254,16,16,28,23,73,24,25,18,16,16,17,26,24,72,24,26,18,16,3,11,246,167,141,8,63,252,39,141,0,0,0,0,8,0,200,254,20,5,189, + 7,109,0,21,0,25,0,29,0,33,0,54,0,75,0,96,0,117,0,0,1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54, + 55,54,1,33,17,33,55,33,17,33,19,33,21,33,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,0,50,23,22,23, + 22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,1,50,23, + 22,23,22,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,3,69,36,23,26,18,16,16,16,28,23,73,24,25,18,16,16,17,26,24,253,168, + 4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,253,233,73,24,25,19, + 16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16, + 16,16,27,23,73,24,25,19,16,16,17,27,23,1,5,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8, + 63,252,39,141,3,250,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,16,253,238,16,16,28,23,73,24,25,18,16,16,17,26,24,72, + 24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,253,254,16,16,28,23,73,24,25,18,16,16,17,26,24,72,24,26, + 18,16,0,0,0,9,0,200,254,20,5,189,7,109,0,22,0,44,0,48,0,52,0,56,0,78,0,100,0,122,0,144,0,0,5,52,55,54,55,54, + 50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1, + 33,17,33,55,33,17,33,19,33,21,33,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21, + 20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23, + 22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,1,193,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16, + 2,17,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24, + 26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25, + 19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,124,36,23,26,18, + 16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,2,59,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,5,248,246,167, + 141,8,63,252,39,141,3,250,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,253,238,16,16,28,23,36,37,24,25,18,16,16, + 17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,253,254,16,16,28,23,36,37,24,25,18,16,16, + 17,26,24,72,24,26,18,16,0,10,0,200,254,20,5,189,7,109,0,22,0,43,0,65,0,69,0,73,0,77,0,99,0,121,0,143,0,165,0,0, + 5,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34, + 39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,33,17,33,55,33,17,33,19,33,21,33,1,50, + 23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55, + 54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39, + 38,52,55,54,55,54,1,193,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,1,9,15,17,27,23,74,23,26,18,16,16,17, + 27,23,72,25,26,18,15,1,8,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2, + 195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16, + 16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17, + 27,23,124,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,50,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17, + 27,23,1,46,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,5,248,246,167,141,8,63,252,39,141,3,250,16,17,26,24,72, + 24,26,18,16,16,17,27,23,36,37,24,25,18,16,253,238,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24, + 72,24,26,18,16,16,17,27,23,36,37,24,25,18,253,254,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,0,0,11,0,200, + 254,20,5,189,7,109,0,21,0,43,0,65,0,87,0,91,0,95,0,99,0,121,0,143,0,165,0,187,0,0,1,50,23,22,23,22,20,7,6,7, + 6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22, + 20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,1,33, + 17,33,55,33,17,33,19,33,21,33,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20, + 7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22, + 23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,4,78,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233, + 74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36, + 24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16, + 16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16, + 17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,2,14,16,17,26,24,72,24, + 26,18,16,16,16,28,23,36,37,24,25,18,16,253,238,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72, + 24,26,18,16,16,16,28,23,36,37,24,25,18,253,254,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,7,113,246,167,141,8, + 63,252,39,141,3,250,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,253,238,16,16,28,23,36,37,24,25,18,16,16,17,26, + 24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,253,254,16,16,28,23,36,37,24,25,18,16,16,17,26, + 24,72,24,26,18,16,0,0,0,12,0,200,254,20,5,189,7,109,0,20,0,41,0,62,0,83,0,105,0,109,0,113,0,117,0,138,0,159,0,180, + 0,201,0,0,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,0,50,23,22,23,22,20,7,6,7,6,35,34,39,38, + 39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,1,50,23,22,23,22,20,7,6,7,6,34,39, + 38,39,38,52,55,54,55,54,3,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33, + 21,33,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,0,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38, + 52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39, + 38,52,55,54,55,54,4,78,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,253,233,73,24,25,19,16,16,17,27,23,37,36,24, + 26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,73,24,25,19, + 16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,73,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61, + 2,109,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,253,233,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27, + 23,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,2, + 14,16,17,26,24,72,24,26,18,16,16,16,28,23,73,24,25,18,16,253,238,16,17,27,23,73,24,25,18,16,16,17,26,24,72,24,26,18,2,34, + 16,17,26,24,72,24,26,18,16,16,16,28,23,73,24,25,18,253,254,16,17,27,23,73,24,25,18,16,16,17,26,24,72,24,26,18,16,1,9,16, + 17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8,63,252,39,141,3,250,16,17,26,24,72,24,26,18,16,16, + 17,27,23,73,24,25,18,16,253,238,16,16,28,23,73,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,17, + 27,23,73,24,25,18,253,254,16,16,28,23,73,24,25,18,16,16,17,26,24,72,24,26,18,16,0,0,0,13,0,200,254,20,5,189,7,109,0,20, + 0,42,0,64,0,85,0,105,0,127,0,131,0,135,0,139,0,161,0,183,0,205,0,227,0,0,37,52,55,54,55,54,50,23,22,23,22,20,7,6, + 7,6,34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22, + 21,20,7,6,7,6,7,34,39,38,39,0,52,55,54,55,54,55,50,23,22,23,22,20,7,6,7,6,34,39,38,39,36,52,55,54,55,62,1,23, + 22,23,22,20,7,6,7,6,34,39,38,39,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,14,1,39,38,39,1,33,17,33,55,33, + 17,33,19,33,21,33,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6, + 35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20, + 7,6,7,6,34,39,38,39,38,52,55,54,55,54,3,212,16,17,28,23,72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23, + 37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37, + 36,24,26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24,71,24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36, + 24,26,17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74, + 23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36, + 24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,145,36,23,26,19,16,16,17,28,23,72,24,26, + 18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,1,51,74,24,25,18,16,16,17,26,23,38,36,23,26, + 17,16,1,17,17,26,253,171,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,23,74,22,26,18,16,1,17,17,27,23,72,24,26, + 18,15,15,17,27,2,130,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,5,228,246,167,141,8,63,252,39,141,3,250,16,17, + 26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,253,238,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16, + 17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,253,254,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,0,0, + 0,8,0,200,254,20,5,189,7,109,0,3,0,7,0,11,0,33,0,55,0,77,0,99,0,121,0,0,19,33,17,33,55,33,17,33,19,33,21,33, + 1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38, + 52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34,39, + 38,39,38,52,55,54,55,54,3,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,200,4,245,251,11,141,3,219,252,37, + 140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26, + 17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16, + 16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,7,109,246,167,141,8,63,252,39,141,3,250,16,17,26,24, + 72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,253,238,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26, + 24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,253,254,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,1,9,16,17, + 26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,0,9,0,200,254,20,5,189,7,109,0,22,0,26,0,30,0,34,0,56,0,78,0,100, + 0,122,0,144,0,0,1,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21, + 33,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39, + 38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34, + 39,38,39,38,52,55,54,55,54,3,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,3,69,36,23,26,18,16,16,16, + 28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74, + 23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36, + 24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24, + 25,18,16,16,17,26,24,1,5,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8,63,252,39,141,3,250, + 16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,253,238,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2, + 34,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,253,254,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16, + 1,9,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,0,10,0,200,254,20,5,189,7,109,0,21,0,43,0,47,0,51,0,55, + 0,76,0,97,0,118,0,139,0,160,0,0,5,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54, + 50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,33,17,33,55,33,17,33,19,33,21,33,1,50,23,22,23,22,20,7,6,7,6,34, + 39,38,39,38,52,55,54,55,54,0,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7, + 6,35,34,39,38,39,38,52,55,54,55,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,3,50,23,22,23,22,20,7, + 6,7,6,34,39,38,39,38,52,55,54,55,54,1,193,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2,17,16,17,28,23, + 72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27, + 23,73,24,25,19,16,16,17,27,23,253,233,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23, + 37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,73, + 24,25,18,16,16,17,26,24,124,36,23,26,18,16,16,16,28,23,73,24,25,18,16,16,17,26,24,2,59,36,24,26,18,15,15,17,27,23,37,36, + 24,26,18,16,16,17,27,23,5,248,246,167,141,8,63,252,39,141,3,250,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,16,253,238, + 16,16,28,23,73,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,253,254,16,16, + 28,23,73,24,25,18,16,16,17,26,24,72,24,26,18,16,1,9,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,0,11,0,200, + 254,20,5,189,7,109,0,22,0,43,0,65,0,69,0,73,0,77,0,99,0,121,0,143,0,165,0,187,0,0,5,52,55,54,55,54,50,23,22,23, + 22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54, + 50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,33,17,33,55,33,17,33,19,33,21,33,1,50,23,22,23,22,20,7,6,7,6,34, + 39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7, + 6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,3,50,23,22, + 23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,193,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,1, + 9,15,17,27,23,74,23,26,18,16,16,17,27,23,72,25,26,18,15,1,8,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252, + 246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25, + 19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17, + 16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,124,36,23,26,18,16, + 16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,50,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,1,46,36,24,26,18, + 15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,5,248,246,167,141,8,63,252,39,141,3,250,16,17,26,24,72,24,26,18,16,16,17,27,23, + 36,37,24,25,18,16,253,238,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,17,27, + 23,36,37,24,25,18,253,254,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,1,9,16,17,26,23,74,24,25,18,16,16,17, + 26,24,72,25,26,17,16,0,0,12,0,200,254,20,5,189,7,109,0,21,0,43,0,65,0,87,0,91,0,95,0,99,0,121,0,143,0,165,0,187, + 0,209,0,0,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34, + 39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6, + 7,6,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38, + 53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35, + 34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,3,50,23,22,23,22,20,7, + 6,7,6,35,34,39,38,39,38,52,55,54,55,54,4,78,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19, + 16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16, + 16,16,27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23, + 74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37, + 36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37, + 24,25,18,16,16,17,26,24,2,14,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,253,238,16,17,27,23,36,37,24,25,18, + 16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,253,254,16,17,27,23,36,37,24,25,18, + 16,16,17,26,24,72,24,26,18,16,7,113,246,167,141,8,63,252,39,141,3,250,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18, + 16,253,238,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25, + 18,253,254,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,1,9,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26, + 17,16,0,0,0,13,0,200,254,20,5,189,7,109,0,21,0,43,0,65,0,87,0,110,0,114,0,118,0,122,0,144,0,166,0,188,0,210,0,232, + 0,0,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38, + 39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6, + 34,39,38,39,38,52,55,54,55,54,3,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17, + 33,19,33,21,33,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35, + 34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7, + 6,7,6,34,39,38,39,38,52,55,54,55,54,3,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,4,78,36,24,26, + 17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19, + 16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16, + 16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27, + 23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23, + 37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36, + 37,24,25,18,16,16,17,26,24,2,14,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,16,253,238,16,17,27,23,36,37,24,25, + 18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,16,28,23,36,37,24,25,18,253,254,16,17,27,23,36,37,24,25, + 18,16,16,17,26,24,72,24,26,18,16,1,9,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8,63,252, + 39,141,3,250,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,253,238,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72, + 24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,253,254,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72, + 24,26,18,16,1,9,16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,0,14,0,200,254,20,5,189,7,109,0,20,0,42,0,64, + 0,85,0,105,0,127,0,131,0,135,0,139,0,161,0,183,0,205,0,227,0,249,0,0,37,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6, + 34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22,21,20, + 7,6,7,6,7,34,39,38,39,0,52,55,54,55,54,55,50,23,22,23,22,20,7,6,7,6,34,39,38,39,36,52,55,54,55,62,1,23,22,23, + 22,20,7,6,7,6,34,39,38,39,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,14,1,39,38,39,1,33,17,33,55,33,17,33, + 19,33,21,33,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54,0,50,23,22,23,22,21,20,7,6,7,6,35,34, + 39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55,1,50,23,22,23,22,21,20,7,6, + 7,6,34,39,38,39,38,52,55,54,55,54,3,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,54,3,212,16,17,28,23, + 72,24,26,18,15,15,17,27,23,74,22,26,19,16,253,239,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24,71, + 24,26,19,16,16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24,71, + 24,26,19,16,16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141,3, + 219,252,37,140,2,195,253,61,2,109,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16,16,17,27,23,37, + 36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16,16,27,23,74,23, + 25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,145,36,23,26,19,16,16,17,28,23,72,24,26, + 18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,1,51,74,24,25,18,16,16,17,26,23,38,36,23,26, + 17,16,1,17,17,26,253,171,74,22,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,23,74,22,26,18,16,1,17,17,27,23,72,24,26, + 18,15,15,17,27,2,130,74,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,5,228,246,167,141,8,63,252,39,141,3,250,16,17, + 26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,253,238,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16, + 17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,253,254,16,16,28,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,1,9, + 16,17,26,23,74,24,25,18,16,16,17,26,24,72,25,26,17,16,0,0,0,9,0,200,254,20,5,189,7,109,0,3,0,7,0,11,0,34,0,58, + 0,80,0,102,0,124,0,146,0,0,19,33,17,33,55,33,17,33,19,33,21,33,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6, + 34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22, + 21,20,7,6,7,6,7,34,39,38,39,1,52,55,54,55,54,55,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,62,1, + 23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,14,1,39,38,39,200,4,245, + 251,11,141,3,219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16,16,17,26,23,74,23,25,19,16,253,239,16,17,26,23,38, + 36,23,26,18,16,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36, + 37,24,25,18,16,16,17,26,24,72,24,26,18,16,253,238,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,17,27, + 23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,7,109,246,167,141,8,63,252,39,141,2,124,36,23,26,18,16,16,16,28,23,36,37,24,25, + 18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,51,74,23,26,18,16,16,17,27,23,37,36,23, + 26,17,16,1,17,16,27,253,208,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23,72, + 24,26,18,16,16,17,27,23,2,107,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,0,0,0,0,10,0,200,254,20,5,189, + 7,109,0,22,0,26,0,30,0,34,0,57,0,81,0,103,0,125,0,147,0,169,0,0,1,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38, + 39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38, + 39,38,37,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22,21,20,7, + 6,7,6,7,34,39,38,39,1,52,55,54,55,54,55,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,62,1,23,22,23, + 22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,14,1,39,38,39,3,69,36,23,26,18, + 16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3,219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24, + 26,17,16,16,17,26,23,74,23,25,19,16,253,239,16,17,26,23,38,36,23,26,18,16,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24, + 26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,253,238,16,17,26,24,72, + 24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,1,5,16,17,26,23, + 38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8,63,252,39,141,2,124,36,23,26,18,16,16,16,28,23,36,37,24,25, + 18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,51,74,23,26,18,16,16,17,27,23,37,36,23, + 26,17,16,1,17,16,27,253,208,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23,72, + 24,26,18,16,16,17,27,23,2,107,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,0,0,0,0,11,0,200,254,20,5,189, + 7,109,0,22,0,44,0,48,0,52,0,56,0,79,0,103,0,125,0,147,0,169,0,191,0,0,5,52,55,54,55,54,50,23,22,23,22,21,20,7, + 6,7,6,35,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,33,17,33,55,33,17,33,19, + 33,21,33,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22,21,20, + 7,6,7,6,35,34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,7,34,39,38,39,1,52,55,54,55,54,55,50, + 23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,62,1,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54, + 55,54,51,50,23,22,23,22,21,20,7,6,7,14,1,39,38,39,1,193,16,16,27,24,72,24,25,19,16,16,17,27,23,37,36,24,26,17,16,2, + 17,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,1,242,16,17,27, + 23,37,36,24,26,17,16,16,17,26,23,74,23,25,19,16,253,239,16,17,26,23,38,36,23,26,18,16,16,17,27,23,36,37,24,25,18,16,16,17, + 26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,253,238,16, + 17,26,24,72,24,26,18,16,16,17,27,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,124,36, + 23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,2,59,36,24,26,18,15,15,17,27,23,37,36,24,26,18,16,16,17,27,23,5, + 248,246,167,141,8,63,252,39,141,2,124,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23, + 36,37,24,25,18,16,16,17,26,24,1,51,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,253,208,36,23,26,18,16,1,17, + 17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,2,107,74,23,26,18,16,16, + 17,27,23,37,36,23,26,17,16,1,17,16,27,0,0,0,0,12,0,200,254,20,5,189,7,109,0,22,0,43,0,65,0,69,0,73,0,77,0,100, + 0,124,0,146,0,168,0,190,0,212,0,0,5,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,1,52,55,54,55, + 54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,1,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,1,33, + 17,33,55,33,17,33,19,33,21,33,1,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,51, + 50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,7,34,39,38,39,1, + 52,55,54,55,54,55,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,62,1,23,22,23,22,20,7,6,7,6,35,34,39, + 38,39,38,0,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,14,1,39,38,39,1,193,16,16,27,24,72,24,25,19,16,16,17,27,23, + 37,36,24,26,17,16,1,9,15,17,27,23,74,23,26,18,16,16,17,27,23,72,25,26,18,15,1,8,16,17,28,23,72,24,26,18,16,16,17,27, + 24,71,24,26,19,16,252,246,4,245,251,11,141,3,219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16,16,17,26,23,74,23, + 25,19,16,253,239,16,17,26,23,38,36,23,26,18,16,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17,27,23,36,37, + 24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,253,238,16,17,26,24,72,24,26,18,16,16,17,27,23,36, + 37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,124,36,23,26,18,16,16,16,28,23,36,37,24,25,18, + 16,16,17,26,24,1,50,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,1,46,36,24,26,18,15,15,17,27,23,37,36,24,26, + 18,16,16,17,27,23,5,248,246,167,141,8,63,252,39,141,2,124,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,37,36,23, + 26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,1,51,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,253,208, + 36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,2, + 107,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,0,13,0,200,254,20,5,189,7,109,0,21,0,43,0,65,0,87,0,91, + 0,95,0,99,0,122,0,146,0,168,0,190,0,212,0,234,0,0,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,53,52,55,54,55,54, + 0,50,23,22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,53, + 52,55,54,55,1,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33,17,33,19,33,21,33,1,52, + 55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,35, + 34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,7,34,39,38,39,1,52,55,54,55,54,55,50,23,22,23,22,20, + 7,6,7,6,34,39,38,39,38,37,52,55,54,55,62,1,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,0,52,55,54,55,54,51,50,23, + 22,23,22,21,20,7,6,7,14,1,39,38,39,4,78,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,253,233,74,23,25,19,16, + 16,17,27,23,37,36,24,26,17,16,16,16,27,23,74,23,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16,16, + 16,27,23,74,23,25,19,16,16,17,27,23,252,159,4,245,251,11,141,3,219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16, + 16,17,26,23,74,23,25,19,16,253,239,16,17,26,23,38,36,23,26,18,16,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16, + 16,17,27,23,36,37,24,25,18,2,2,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,253,238,16,17,26,24,72,24,26,18, + 16,16,17,27,23,36,37,24,25,18,16,2,18,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,14,16,17,26,24,72,24,26, + 18,16,16,16,28,23,36,37,24,25,18,16,253,238,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,2,34,16,17,26,24,72,24, + 26,18,16,16,16,28,23,36,37,24,25,18,253,254,16,17,27,23,36,37,24,25,18,16,16,17,26,24,72,24,26,18,16,7,113,246,167,141,8,63, + 252,39,141,2,124,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23,36,37,24,25,18,16, + 16,17,26,24,1,51,74,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,253,208,36,23,26,18,16,1,17,17,27,23,72,24,26, + 18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,2,107,74,23,26,18,16,16,17,27,23,37,36,23, + 26,17,16,1,17,16,27,0,0,14,0,200,254,20,5,189,7,109,0,20,0,41,0,62,0,83,0,105,0,109,0,113,0,117,0,139,0,161,0,182, + 0,203,0,224,0,245,0,0,1,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,0,50,23,22,23,22,20,7,6,7,6, + 35,34,39,38,39,38,52,55,54,55,18,50,23,22,23,22,20,7,6,7,6,35,34,39,38,39,38,52,55,54,55,1,50,23,22,23,22,20,7,6, + 7,6,34,39,38,39,38,52,55,54,55,54,3,50,23,22,23,22,21,20,7,6,7,6,34,39,38,39,38,52,55,54,55,54,1,33,17,33,55,33, + 17,33,19,33,21,33,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22, + 20,7,6,7,6,34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,14,1,39,38,39,1,52,55,54,55,62,1,23,22, + 23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,62,1,23,22,23,22,20,7,6,7,6,34,39,38,39,38,0,52,55,54,55,54,50, + 23,22,23,22,21,20,7,6,7,14,1,39,38,39,4,78,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,253,233,73,24,25,19, + 16,16,17,27,23,37,36,24,26,17,16,16,16,27,23,73,24,25,19,16,16,17,27,23,37,36,24,26,17,16,16,16,27,2,83,36,24,26,17,16, + 16,16,27,23,73,24,25,19,16,16,17,27,23,228,36,23,26,18,16,16,16,28,23,73,24,25,18,16,16,17,26,24,253,168,4,245,251,11,141,3, + 219,252,37,140,2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16,16,17,26,23,73,24,25,19,16,253,239,16,17,26,23,38,36,23,26,18, + 16,16,17,27,23,73,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,2,2,16,17,27,23,73,24,25,18,16,16,17, + 26,24,72,24,26,18,16,253,238,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,16,2,18,16,17,27,23,73,24,25,18,16,16,17, + 26,24,72,24,26,18,2,14,16,17,26,24,72,24,26,18,16,16,16,28,23,73,24,25,18,16,253,238,16,17,27,23,73,24,25,18,16,16,17,26, + 24,72,24,26,18,2,34,16,17,26,24,72,24,26,18,16,16,16,28,23,73,24,25,18,253,254,16,17,27,23,73,24,25,18,16,16,17,26,24,72, + 24,26,18,16,1,9,16,17,26,23,38,36,24,26,17,16,16,17,26,24,73,24,25,18,16,6,104,246,167,141,8,63,252,39,141,2,124,36,23,26, + 18,16,16,16,28,23,73,24,25,18,16,16,17,26,24,37,36,23,26,18,16,16,16,28,23,73,24,25,18,16,16,17,26,24,1,52,73,23,26,18, + 16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,253,208,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26, + 18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,2,108,73,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,0,0,0, + 0,15,0,200,254,20,5,189,7,109,0,20,0,42,0,64,0,85,0,105,0,127,0,131,0,135,0,139,0,161,0,183,0,204,0,225,0,246,1,11, + 0,0,37,52,55,54,55,54,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6, + 34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,6,7,34,39,38,39,0,52,55,54,55,54,55,50,23,22,23,22,20, + 7,6,7,6,34,39,38,39,36,52,55,54,55,62,1,23,22,23,22,20,7,6,7,6,34,39,38,39,0,52,55,54,55,54,51,50,23,22,23,22, + 21,20,7,6,7,14,1,39,38,39,1,33,17,33,55,33,17,33,19,33,21,33,1,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34, + 39,38,39,38,37,52,55,54,55,54,51,50,23,22,23,22,20,7,6,7,6,34,39,38,39,38,16,52,55,54,55,54,50,23,22,23,22,21,20,7, + 6,7,14,1,39,38,39,1,52,55,54,55,62,1,23,22,23,22,20,7,6,7,6,34,39,38,39,38,37,52,55,54,55,62,1,23,22,23,22,20, + 7,6,7,6,34,39,38,39,38,0,52,55,54,55,54,50,23,22,23,22,21,20,7,6,7,14,1,39,38,39,3,212,16,17,28,23,72,24,26,18, + 15,15,17,27,23,73,23,26,19,16,253,239,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,24,71,24,26,19,16, + 16,17,28,23,36,36,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,253,222,16,17,27,24,71,24,26,19,16, + 16,17,28,23,72,24,26,18,2,2,16,17,27,23,37,36,24,26,17,16,16,16,27,24,72,24,25,19,252,227,4,245,251,11,141,3,219,252,37,140, + 2,195,253,61,1,242,16,17,27,23,37,36,24,26,17,16,16,17,26,23,73,24,25,19,16,253,239,16,17,26,23,38,36,23,26,18,16,16,17,27, + 23,73,24,25,18,16,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,2,2,16,17,27,23,73,24,25,18,16,16,17,26,24,72,24, + 26,18,16,253,238,16,17,26,24,72,24,26,18,16,16,17,27,23,73,24,25,18,16,2,18,16,17,27,23,73,24,25,18,16,16,17,26,24,72,24, + 26,18,145,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23,37,36,23,26,19,16,16,17,28,23,72,24,26,18,16,16,17,27,23, + 1,52,73,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17,26,253,171,73,23,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17, + 27,23,73,23,26,18,16,1,17,17,27,23,72,24,26,18,15,15,17,27,2,131,73,24,25,18,16,16,17,26,23,38,36,23,26,17,16,1,17,17, + 26,5,228,246,167,141,8,63,252,39,141,2,124,36,23,26,18,16,16,16,28,23,73,24,25,18,16,16,17,26,24,37,36,23,26,18,16,16,16,28, + 23,73,24,25,18,16,16,17,26,24,1,52,73,23,26,18,16,16,17,27,23,37,36,23,26,17,16,1,17,16,27,253,208,36,23,26,18,16,1,17, + 17,27,23,72,24,26,18,16,16,17,27,23,37,36,23,26,18,16,1,17,17,27,23,72,24,26,18,16,16,17,27,23,2,108,73,23,26,18,16,16, + 17,27,23,37,36,23,26,17,16,1,17,16,27,0,0,0,0,3,0,200,254,20,7,103,7,109,0,11,0,23,0,27,0,0,1,34,21,17,20,51, + 33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,17,33,17,1,184,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1, + 44,4,71,6,245,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,247,211,7,1,248,255,0,5,0,200,254,20,7,103,7,109,0,24, + 0,36,0,48,0,51,0,59,0,0,1,22,0,23,22,21,20,35,34,39,35,20,23,35,54,53,35,6,35,34,53,52,55,54,0,1,34,21,17,20, + 51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,3,33,3,51,1,35,39,33,7,35,4,215,65,1,59,9,27,195,108,66, + 30,59,152,59,30,66,108,195,27,9,1,59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,75,134,1,12,210,154,1,32,132,68, + 254,182,68,132,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120,248,135,120,120,7,121,120,120,240,248,135,240, + 240,7,121,240,254,172,254,85,2,15,252,188,218,218,0,0,0,4,0,200,254,20,7,103,7,109,0,24,0,36,0,48,0,73,0,0,1,22,0,23, + 22,21,20,35,34,39,35,20,23,35,54,53,35,6,35,34,53,52,55,54,0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35, + 33,34,53,17,52,1,33,21,33,53,54,55,0,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,1,6,4,215,65,1,59,9,27,195,108,66, + 30,59,152,59,30,66,108,195,27,9,1,59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1,158,1,168,253,170,34,63,1,88,104, + 85,52,122,72,77,133,57,145,174,254,181,56,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120,248,135,120,120, + 7,121,120,120,240,248,135,240,240,7,121,240,252,63,114,110,31,56,1,49,94,66,81,35,35,123,28,28,132,108,139,254,228,48,0,0,0,4,0,200, + 254,20,7,103,7,109,0,24,0,36,0,48,0,89,0,0,1,22,0,23,22,21,20,35,34,39,35,20,23,35,54,53,35,6,35,34,53,52,55,54, + 0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,30,1,21,20,6,35,34,38,39,53,30,1,51,50, + 54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,6,4,215,65,1,59,9,27,195,108,66,30,59,152,59, + 30,66,108,195,27,9,1,59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,154,92,101,190,177,57,125,70,52,119,67,109,120,111, + 108,86,94,94,97,100,95,40,102,81,73,128,55,144,169,90,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120, + 248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,253,145,18,109,82,124,134,21,20,121,27,26,79,70,74,76,108,63,60,58,61,18,23,115, + 17,18,118,99,69,96,0,0,0,5,0,200,254,20,7,103,7,109,0,24,0,36,0,48,0,51,0,62,0,0,1,22,0,23,22,21,20,35,34,39, + 35,20,23,35,54,53,35,6,35,34,53,52,55,54,0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,9, + 1,33,3,51,17,51,21,35,21,35,53,33,53,4,215,65,1,59,9,27,195,108,66,30,59,152,59,30,66,108,195,27,9,1,59,253,34,120,120,4, + 191,120,120,251,65,4,191,240,240,251,65,240,2,142,254,203,1,53,22,166,135,135,144,254,98,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155, + 228,78,37,38,1,130,4,86,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,254,151,254,93,2,28,253,228,109,186,186,121,0,0,0, + 0,4,0,200,254,20,7,103,7,109,0,24,0,36,0,48,0,81,0,0,1,22,0,23,22,21,20,35,34,39,35,20,23,35,54,53,35,6,35,34, + 53,52,55,54,0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,5,33,21,33,21,54,55,54,51,50,23, + 22,21,20,7,6,35,34,38,39,53,22,23,22,51,50,54,52,38,35,34,6,7,4,215,65,1,59,9,27,195,108,66,30,59,152,59,30,66,108,195, + 27,9,1,59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1,24,1,254,254,121,28,29,28,28,161,94,94,97,96,176,60,126,66, + 57,62,62,69,111,130,130,111,52,104,54,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120,248,135,120,120,7, + 121,120,120,240,248,135,240,240,7,121,240,240,95,204,9,4,4,77,76,131,135,75,74,18,18,113,27,14,13,102,174,102,20,21,0,0,0,5,0,200, + 254,20,7,103,7,109,0,24,0,36,0,48,0,64,0,96,0,0,1,22,0,23,22,21,20,35,34,39,35,20,23,35,54,53,35,6,35,34,53,52, + 55,54,0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,34,7,6,21,20,23,22,51,50,55,54,53, + 52,39,38,19,21,38,39,38,35,34,7,6,7,54,55,54,51,50,23,22,21,20,7,6,35,34,38,53,52,55,54,51,50,23,22,4,215,65,1,59, + 9,27,195,108,66,30,59,152,59,30,66,108,195,27,9,1,59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,71,88,51,51,51, + 51,88,87,51,51,51,51,171,49,50,50,49,128,68,68,10,38,57,58,68,145,84,84,88,87,145,167,176,108,108,182,49,50,50,3,24,121,254,126,38, + 37,78,228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,253,158,52,53,91,90, + 52,53,53,52,90,91,53,52,1,98,103,20,10,11,75,76,153,49,26,26,76,77,132,127,79,78,222,212,198,117,118,8,9,0,0,0,0,4,0,200, + 254,20,7,103,7,109,0,24,0,36,0,48,0,55,0,0,1,22,0,23,22,21,20,35,34,39,35,20,23,35,54,53,35,6,35,34,53,52,55,54, + 0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,23,33,21,1,35,1,33,4,215,65,1,59,9,27,195, + 108,66,30,59,152,59,30,66,108,195,27,9,1,59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,240,2,105,254,164,136,1,72,254, + 51,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121, + 240,240,48,252,237,2,228,0,0,6,0,200,254,20,7,103,7,109,0,24,0,36,0,48,0,61,0,91,0,106,0,0,1,22,0,23,22,21,20,35, + 34,39,35,20,23,35,54,53,35,6,35,34,53,52,55,54,0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17, + 52,0,34,7,6,21,20,22,51,50,55,54,52,39,37,38,39,38,53,52,54,32,23,22,21,20,7,6,7,22,23,22,21,20,7,6,35,34,39,38, + 53,52,55,54,55,20,23,22,51,50,55,54,53,52,39,38,34,7,6,4,215,65,1,59,9,27,195,108,66,30,59,152,59,30,66,108,195,27,9,1, + 59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,151,186,53,53,106,93,92,54,53,53,254,236,84,46,47,164,1,30,82,81,46, + 47,83,90,56,53,85,86,158,159,85,86,53,54,45,47,46,85,81,49,48,48,47,166,48,47,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155, + 228,78,37,38,1,130,4,86,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,253,91,44,43,75,76,86,44,43,150,43,93,18,49,50, + 72,100,116,58,58,100,74,48,49,18,18,58,55,80,121,65,65,65,65,121,78,57,56,198,63,38,37,37,36,65,63,38,37,37,36,0,0,5,0,200, + 254,20,7,103,7,109,0,24,0,36,0,48,0,80,0,95,0,0,1,22,0,23,22,21,20,35,34,39,35,20,23,35,54,53,35,6,35,34,53,52, + 55,54,0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,53,22,23,22,51,50,55,54,55,6,7,6, + 35,34,38,53,52,55,54,51,50,23,22,21,20,7,6,35,34,39,38,19,50,54,53,52,39,38,35,34,7,6,21,20,23,22,4,215,65,1,59,9, + 27,195,108,66,30,59,152,59,30,66,108,195,27,9,1,59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1,46,49,50,50,48,129, + 68,67,10,35,60,57,69,144,168,87,88,145,167,87,88,107,108,182,49,50,50,204,88,102,51,51,88,85,53,52,52,51,3,24,121,254,126,38,37,78, + 228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,251,223,103,20,11,10,75,75, + 154,47,27,26,152,132,129,77,78,111,111,212,198,117,118,8,9,1,114,104,92,90,52,53,53,52,90,92,52,52,0,0,0,6,0,200,254,20,7,103, + 7,109,0,24,0,36,0,48,0,62,0,74,0,81,0,0,1,22,0,23,22,21,20,35,34,39,35,20,23,35,54,53,35,6,35,34,53,52,55,54, + 0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,0,34,7,6,21,20,23,22,50,55,54,53,52,47,1, + 50,22,21,20,6,35,34,38,53,52,54,1,17,7,53,55,51,17,4,215,65,1,59,9,27,195,108,66,30,59,152,59,30,66,108,195,27,9,1,59, + 253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,3,234,142,50,51,51,50,142,50,51,51,121,131,170,170,131,162,140,140,254,116,133,140, + 137,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121, + 240,254,200,86,86,172,173,86,86,86,86,173,172,86,175,222,211,212,222,222,212,211,222,252,172,2,209,41,116,39,252,189,0,4,0,200,254,20,7,103, + 7,109,0,24,0,36,0,48,0,61,0,0,1,22,0,23,22,21,20,35,34,39,35,20,23,35,54,53,35,6,35,34,53,52,55,54,0,1,34,21, + 17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,5,51,17,20,7,6,43,1,53,51,50,54,53,4,215,65,1,59,9, + 27,195,108,66,30,59,152,59,30,66,108,195,27,9,1,59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1,178,127,65,64,143,49, + 40,84,70,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120,248,135,120,120,7,121,120,120,240,248,135,240,240, + 7,121,240,240,253,220,149,70,69,96,84,108,0,4,0,200,254,20,7,103,7,109,0,24,0,36,0,48,0,74,0,0,1,22,0,23,22,21,20,35, + 34,39,35,20,23,35,54,53,35,6,35,34,53,52,55,54,0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17, + 52,1,14,1,35,34,38,53,52,54,51,50,22,23,21,46,1,35,34,6,21,20,22,51,50,54,55,4,215,65,1,59,9,27,195,108,66,30,59,152, + 59,30,66,108,195,27,9,1,59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,3,60,49,101,57,181,200,201,180,57,102,48,47,106, + 54,124,124,123,125,55,106,46,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120,248,135,120,120,7,121,120,120, + 240,248,135,240,240,7,121,240,251,235,23,22,227,206,205,229,23,23,116,34,36,170,172,171,171,36,34,0,0,5,0,200,254,20,7,103,7,109,0,17, + 0,27,0,52,0,64,0,76,0,0,1,34,6,35,34,38,53,52,54,51,50,22,21,20,6,7,23,7,18,16,38,35,34,6,16,22,51,50,5,22, + 0,23,22,21,20,35,34,39,35,20,23,35,54,53,35,6,35,34,53,52,55,54,0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17, + 20,35,33,34,53,17,52,2,251,4,17,5,158,155,156,158,159,156,86,88,126,95,10,85,97,96,85,85,96,97,1,148,65,1,59,9,27,195,108,66, + 30,59,152,59,30,66,108,195,27,9,1,59,253,34,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,3,44,1,215,218,219,215,215,219,165,201, + 40,106,56,1,128,1,112,158,158,254,144,158,110,121,254,126,38,37,78,228,155,204,107,107,204,155,228,78,37,38,1,130,4,86,120,248,135,120,120,7, + 121,120,120,240,248,135,240,240,7,121,240,0,0,4,0,200,254,20,7,103,7,109,0,24,0,36,0,48,0,59,0,0,1,22,0,23,22,21,20,35, + 34,39,35,20,23,35,54,53,35,6,35,34,53,52,55,54,0,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17, + 52,23,51,17,1,51,9,1,35,1,17,35,4,215,65,1,59,9,27,195,108,66,30,59,152,59,30,66,108,195,27,9,1,59,253,34,120,120,4,191, + 120,120,251,65,4,191,240,240,251,65,240,240,127,1,106,164,254,105,1,184,167,254,120,127,3,24,121,254,126,38,37,78,228,155,204,107,107,204,155,228, + 78,37,38,1,130,4,86,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,240,254,159,1,97,254,122,254,66,1,147,254,109,0,0,0, + 0,5,0,200,254,20,7,103,7,109,0,21,0,33,0,45,0,48,0,56,0,0,1,54,55,54,51,50,23,22,21,20,7,9,1,38,53,52,55,54, + 51,50,23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,3,33,3,51,1,35,39,33,7,35,4, + 204,22,55,62,84,139,62,19,125,254,196,254,192,125,19,63,138,86,60,55,253,2,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,75,134, + 1,12,210,154,1,32,132,68,254,182,68,132,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71,65,4,204,120,248,135,120,120, + 7,121,120,120,240,248,135,240,240,7,121,240,254,172,254,85,2,15,252,188,218,218,0,0,0,4,0,200,254,20,7,103,7,109,0,21,0,33,0,45, + 0,70,0,0,1,54,55,54,51,50,23,22,21,20,7,9,1,38,53,52,55,54,51,50,23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33, + 50,21,17,20,35,33,34,53,17,52,1,33,21,33,53,54,55,0,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,1,6,4,204,22,55,62, + 84,139,62,19,125,254,196,254,192,125,19,63,138,86,60,55,253,2,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1,158,1,168,253,170,34, + 63,1,88,104,85,52,122,72,77,133,57,145,174,254,181,56,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71,65,4,204,120, + 248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,252,63,114,110,31,56,1,49,94,66,81,35,35,123,28,28,132,108,139,254,228,48,0,0, + 0,4,0,200,254,20,7,103,7,109,0,21,0,33,0,45,0,86,0,0,1,54,55,54,51,50,23,22,21,20,7,9,1,38,53,52,55,54,51,50, + 23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,30,1,21,20,6,35,34,38,39,53,30,1,51, + 50,54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,6,4,204,22,55,62,84,139,62,19,125,254,196,254, + 192,125,19,63,138,86,60,55,253,2,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,154,92,101,190,177,57,125,70,52,119,67,109,120,111, + 108,86,94,94,97,100,95,40,102,81,73,128,55,144,169,90,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71,65,4,204,120, + 248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,253,145,18,109,82,124,134,21,20,121,27,26,79,70,74,76,108,63,60,58,61,18,23,115, + 17,18,118,99,69,96,0,0,0,5,0,200,254,20,7,103,7,109,0,21,0,33,0,45,0,48,0,59,0,0,1,54,55,54,51,50,23,22,21,20, + 7,9,1,38,53,52,55,54,51,50,23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,9,1,33,3, + 51,17,51,21,35,21,35,53,33,53,4,204,22,55,62,84,139,62,19,125,254,196,254,192,125,19,63,138,86,60,55,253,2,120,120,4,191,120,120,251, + 65,4,191,240,240,251,65,240,2,142,254,203,1,53,22,166,135,135,144,254,98,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149, + 71,65,4,204,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,254,151,254,93,2,28,253,228,109,186,186,121,0,0,0,0,4,0,200, + 254,20,7,103,7,109,0,21,0,33,0,45,0,78,0,0,1,54,55,54,51,50,23,22,21,20,7,9,1,38,53,52,55,54,51,50,23,22,1,34, + 21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,5,33,21,33,21,54,55,54,51,50,23,22,21,20,7,6,35,34, + 38,39,53,22,23,22,51,50,54,52,38,35,34,6,7,4,204,22,55,62,84,139,62,19,125,254,196,254,192,125,19,63,138,86,60,55,253,2,120,120, + 4,191,120,120,251,65,4,191,240,240,251,65,240,1,24,1,254,254,121,28,29,28,28,161,94,94,97,96,176,60,126,66,57,62,62,69,111,130,130,111, + 52,104,54,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71,65,4,204,120,248,135,120,120,7,121,120,120,240,248,135,240,240, + 7,121,240,240,95,204,9,4,4,77,76,131,135,75,74,18,18,113,27,14,13,102,174,102,20,21,0,0,0,5,0,200,254,20,7,103,7,109,0,21, + 0,33,0,45,0,61,0,93,0,0,1,54,55,54,51,50,23,22,21,20,7,9,1,38,53,52,55,54,51,50,23,22,1,34,21,17,20,51,33,50, + 53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,19,21,38,39,38,35,34,7, + 6,7,54,55,54,51,50,23,22,21,20,7,6,35,34,38,53,52,55,54,51,50,23,22,4,204,22,55,62,84,139,62,19,125,254,196,254,192,125,19, + 63,138,86,60,55,253,2,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,71,88,51,51,51,51,88,87,51,51,51,51,171,49,50,50,49, + 128,68,68,10,38,57,58,68,145,84,84,88,87,145,167,176,108,108,182,49,50,50,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45, + 149,71,65,4,204,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,253,158,52,53,91,90,52,53,53,52,90,91,53,52,1,98,103,20, + 10,11,75,76,153,49,26,26,76,77,132,127,79,78,222,212,198,117,118,8,9,0,0,0,0,4,0,200,254,20,7,103,7,109,0,21,0,33,0,45, + 0,52,0,0,1,54,55,54,51,50,23,22,21,20,7,9,1,38,53,52,55,54,51,50,23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33, + 50,21,17,20,35,33,34,53,17,52,23,33,21,1,35,1,33,4,204,22,55,62,84,139,62,19,125,254,196,254,192,125,19,63,138,86,60,55,253,2, + 120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,240,2,105,254,164,136,1,72,254,51,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157, + 160,59,45,149,71,65,4,204,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,240,48,252,237,2,228,0,0,6,0,200,254,20,7,103, + 7,109,0,21,0,33,0,45,0,58,0,88,0,103,0,0,1,54,55,54,51,50,23,22,21,20,7,9,1,38,53,52,55,54,51,50,23,22,1,34, + 21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,0,34,7,6,21,20,22,51,50,55,54,52,39,37,38,39,38,53, + 52,54,32,23,22,21,20,7,6,7,22,23,22,21,20,7,6,35,34,39,38,53,52,55,54,55,20,23,22,51,50,55,54,53,52,39,38,34,7,6, + 4,204,22,55,62,84,139,62,19,125,254,196,254,192,125,19,63,138,86,60,55,253,2,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,151, + 186,53,53,106,93,92,54,53,53,254,236,84,46,47,164,1,30,82,81,46,47,83,90,56,53,85,86,158,159,85,86,53,54,45,47,46,85,81,49,48, + 48,47,166,48,47,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71,65,4,204,120,248,135,120,120,7,121,120,120,240,248,135, + 240,240,7,121,240,253,91,44,43,75,76,86,44,43,150,43,93,18,49,50,72,100,116,58,58,100,74,48,49,18,18,58,55,80,121,65,65,65,65,121, + 78,57,56,198,63,38,37,37,36,65,63,38,37,37,36,0,0,5,0,200,254,20,7,103,7,109,0,21,0,33,0,45,0,77,0,92,0,0,1,54, + 55,54,51,50,23,22,21,20,7,9,1,38,53,52,55,54,51,50,23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33, + 34,53,17,52,1,53,22,23,22,51,50,55,54,55,6,7,6,35,34,38,53,52,55,54,51,50,23,22,21,20,7,6,35,34,39,38,19,50,54,53, + 52,39,38,35,34,7,6,21,20,23,22,4,204,22,55,62,84,139,62,19,125,254,196,254,192,125,19,63,138,86,60,55,253,2,120,120,4,191,120,120, + 251,65,4,191,240,240,251,65,240,1,46,49,50,50,48,129,68,67,10,35,60,57,69,144,168,87,88,145,167,87,88,107,108,182,49,50,50,204,88,102, + 51,51,88,85,53,52,52,51,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71,65,4,204,120,248,135,120,120,7,121,120,120, + 240,248,135,240,240,7,121,240,251,223,103,20,11,10,75,75,154,47,27,26,152,132,129,77,78,111,111,212,198,117,118,8,9,1,114,104,92,90,52,53, + 53,52,90,92,52,52,0,0,0,6,0,200,254,20,7,103,7,109,0,21,0,33,0,45,0,59,0,71,0,78,0,0,1,54,55,54,51,50,23,22, + 21,20,7,9,1,38,53,52,55,54,51,50,23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,0,34, + 7,6,21,20,23,22,50,55,54,53,52,47,1,50,22,21,20,6,35,34,38,53,52,54,1,17,7,53,55,51,17,4,204,22,55,62,84,139,62,19, + 125,254,196,254,192,125,19,63,138,86,60,55,253,2,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,3,234,142,50,51,51,50,142,50,51,51, + 121,131,170,170,131,162,140,140,254,116,133,140,137,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71,65,4,204,120,248,135,120, + 120,7,121,120,120,240,248,135,240,240,7,121,240,254,200,86,86,172,173,86,86,86,86,173,172,86,175,222,211,212,222,222,212,211,222,252,172,2,209,41, + 116,39,252,189,0,4,0,200,254,20,7,103,7,109,0,21,0,33,0,45,0,58,0,0,1,54,55,54,51,50,23,22,21,20,7,9,1,38,53,52, + 55,54,51,50,23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,5,51,17,20,7,6,43,1,53,51, + 50,54,53,4,204,22,55,62,84,139,62,19,125,254,196,254,192,125,19,63,138,86,60,55,253,2,120,120,4,191,120,120,251,65,4,191,240,240,251,65, + 240,1,178,127,65,64,143,49,40,84,70,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71,65,4,204,120,248,135,120,120,7, + 121,120,120,240,248,135,240,240,7,121,240,240,253,220,149,70,69,96,84,108,0,4,0,200,254,20,7,103,7,109,0,21,0,33,0,45,0,71,0,0, + 1,54,55,54,51,50,23,22,21,20,7,9,1,38,53,52,55,54,51,50,23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20, + 35,33,34,53,17,52,1,14,1,35,34,38,53,52,54,51,50,22,23,21,46,1,35,34,6,21,20,22,51,50,54,55,4,204,22,55,62,84,139,62, + 19,125,254,196,254,192,125,19,63,138,86,60,55,253,2,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,3,60,49,101,57,181,200,201,180,57, + 102,48,47,106,54,124,124,123,125,55,106,46,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71,65,4,204,120,248,135,120,120, + 7,121,120,120,240,248,135,240,240,7,121,240,251,235,23,22,227,206,205,229,23,23,116,34,36,170,172,171,171,36,34,0,0,5,0,217,254,20,7,120, + 7,109,0,17,0,27,0,49,0,61,0,73,0,0,1,34,6,35,34,38,53,52,54,51,50,22,21,20,6,7,23,7,18,16,38,35,34,6,16,22, + 51,50,1,54,55,54,51,50,23,22,21,20,7,9,1,38,53,52,55,54,51,50,23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21, + 17,20,35,33,34,53,17,52,2,251,4,17,5,158,155,156,158,159,156,86,88,126,95,10,85,97,96,85,85,96,97,1,137,22,55,62,84,139,62,19, + 125,254,196,254,192,125,19,63,138,86,60,55,253,19,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,3,44,1,215,218,219,215,215,219,165,201, + 40,106,56,1,128,1,112,158,158,254,144,158,254,48,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71,65,4,204,120,248,135,120,120, + 7,121,120,120,240,248,135,240,240,7,121,240,0,4,0,200,254,20,7,103,7,109,0,21,0,33,0,45,0,56,0,0,1,54,55,54,51,50,23,22, + 21,20,7,9,1,38,53,52,55,54,51,50,23,22,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,23,51, + 17,1,51,9,1,35,1,17,35,4,204,22,55,62,84,139,62,19,125,254,196,254,192,125,19,63,138,86,60,55,253,2,120,120,4,191,120,120,251,65, + 4,191,240,240,251,65,240,240,127,1,106,164,254,105,1,184,167,254,120,127,1,182,118,62,71,149,45,59,158,159,254,110,1,146,157,160,59,45,149,71, + 65,4,204,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,240,254,159,1,97,254,122,254,66,1,147,254,109,0,0,0,0,5,0,200, + 254,20,7,103,7,109,0,6,0,18,0,30,0,33,0,41,0,0,1,48,9,1,48,1,48,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50, + 21,17,20,35,33,34,53,17,52,1,3,33,3,51,1,35,39,33,7,35,4,202,1,152,254,104,254,102,254,136,120,120,4,191,120,120,251,65,4,191, + 240,240,251,65,240,2,75,134,1,12,210,154,1,32,132,68,254,182,68,132,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120,7,121,120,120,240, + 248,135,240,240,7,121,240,254,172,254,85,2,15,252,188,218,218,0,0,0,0,4,0,200,254,20,7,103,7,109,0,6,0,18,0,30,0,55,0,0, + 1,48,9,1,48,1,48,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,33,21,33,53,54,55,0,53, + 52,38,35,34,6,7,53,62,1,51,50,22,21,20,1,6,4,202,1,152,254,104,254,102,254,136,120,120,4,191,120,120,251,65,4,191,240,240,251,65, + 240,1,158,1,168,253,170,34,63,1,88,104,85,52,122,72,77,133,57,145,174,254,181,56,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120,7, + 121,120,120,240,248,135,240,240,7,121,240,252,63,114,110,31,56,1,49,94,66,81,35,35,123,28,28,132,108,139,254,228,48,0,0,0,0,4,0,200, + 254,20,7,103,7,109,0,6,0,18,0,30,0,71,0,0,1,48,9,1,48,1,48,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17, + 20,35,33,34,53,17,52,1,30,1,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7,53, + 62,1,51,50,22,21,20,6,4,202,1,152,254,104,254,102,254,136,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,154,92,101,190,177,57, + 125,70,52,119,67,109,120,111,108,86,94,94,97,100,95,40,102,81,73,128,55,144,169,90,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120,7, + 121,120,120,240,248,135,240,240,7,121,240,253,145,18,109,82,124,134,21,20,121,27,26,79,70,74,76,108,63,60,58,61,18,23,115,17,18,118,99,69, + 96,0,0,0,0,5,0,200,254,20,7,103,7,109,0,6,0,18,0,30,0,33,0,44,0,0,1,48,9,1,48,1,48,1,34,21,17,20,51,33, + 50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,9,1,33,3,51,17,51,21,35,21,35,53,33,53,4,202,1,152,254,104,254,102,254, + 136,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,142,254,203,1,53,22,166,135,135,144,254,98,2,249,253,242,253,250,2,6,6,10,120, + 248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,254,151,254,93,2,28,253,228,109,186,186,121,0,4,0,200,254,20,7,103,7,109,0,6, + 0,18,0,30,0,63,0,0,1,48,9,1,48,1,48,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,5, + 33,21,33,21,54,55,54,51,50,23,22,21,20,7,6,35,34,38,39,53,22,23,22,51,50,54,52,38,35,34,6,7,4,202,1,152,254,104,254,102, + 254,136,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1,24,1,254,254,121,28,29,28,28,161,94,94,97,96,176,60,126,66,57,62,62,69, + 111,130,130,111,52,104,54,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,240,95,204,9,4,4, + 77,76,131,135,75,74,18,18,113,27,14,13,102,174,102,20,21,0,0,0,0,5,0,200,254,20,7,103,7,109,0,6,0,18,0,30,0,46,0,78, + 0,0,1,48,9,1,48,1,48,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,34,7,6,21,20,23, + 22,51,50,55,54,53,52,39,38,19,21,38,39,38,35,34,7,6,7,54,55,54,51,50,23,22,21,20,7,6,35,34,38,53,52,55,54,51,50,23, + 22,4,202,1,152,254,104,254,102,254,136,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,71,88,51,51,51,51,88,87,51,51,51,51,171, + 49,50,50,49,128,68,68,10,38,57,58,68,145,84,84,88,87,145,167,176,108,108,182,49,50,50,2,249,253,242,253,250,2,6,6,10,120,248,135,120, + 120,7,121,120,120,240,248,135,240,240,7,121,240,253,158,52,53,91,90,52,53,53,52,90,91,53,52,1,98,103,20,10,11,75,76,153,49,26,26,76, + 77,132,127,79,78,222,212,198,117,118,8,9,0,4,0,200,254,20,7,103,7,109,0,6,0,18,0,30,0,37,0,0,1,48,9,1,48,1,48,1, + 34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,23,33,21,1,35,1,33,4,202,1,152,254,104,254,102,254,136, + 120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,240,2,105,254,164,136,1,72,254,51,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120, + 7,121,120,120,240,248,135,240,240,7,121,240,240,48,252,237,2,228,0,0,0,6,0,200,254,20,7,103,7,109,0,6,0,18,0,30,0,43,0,73, + 0,88,0,0,1,48,9,1,48,1,48,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,0,34,7,6,21, + 20,22,51,50,55,54,52,39,37,38,39,38,53,52,54,32,23,22,21,20,7,6,7,22,23,22,21,20,7,6,35,34,39,38,53,52,55,54,55,20, + 23,22,51,50,55,54,53,52,39,38,34,7,6,4,202,1,152,254,104,254,102,254,136,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,151, + 186,53,53,106,93,92,54,53,53,254,236,84,46,47,164,1,30,82,81,46,47,83,90,56,53,85,86,158,159,85,86,53,54,45,47,46,85,81,49,48, + 48,47,166,48,47,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,253,91,44,43,75,76,86,44, + 43,150,43,93,18,49,50,72,100,116,58,58,100,74,48,49,18,18,58,55,80,121,65,65,65,65,121,78,57,56,198,63,38,37,37,36,65,63,38,37, + 37,36,0,0,0,5,0,200,254,20,7,103,7,109,0,6,0,18,0,30,0,62,0,77,0,0,1,48,9,1,48,1,48,1,34,21,17,20,51,33, + 50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,53,22,23,22,51,50,55,54,55,6,7,6,35,34,38,53,52,55,54,51,50,23, + 22,21,20,7,6,35,34,39,38,19,50,54,53,52,39,38,35,34,7,6,21,20,23,22,4,202,1,152,254,104,254,102,254,136,120,120,4,191,120,120, + 251,65,4,191,240,240,251,65,240,1,46,49,50,50,48,129,68,67,10,35,60,57,69,144,168,87,88,145,167,87,88,107,108,182,49,50,50,204,88,102, + 51,51,88,85,53,52,52,51,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,251,223,103,20,11, + 10,75,75,154,47,27,26,152,132,129,77,78,111,111,212,198,117,118,8,9,1,114,104,92,90,52,53,53,52,90,92,52,52,0,0,0,0,6,0,200, + 254,20,7,103,7,109,0,6,0,18,0,30,0,44,0,56,0,63,0,0,1,48,9,1,48,1,48,1,34,21,17,20,51,33,50,53,17,52,35,37, + 33,50,21,17,20,35,33,34,53,17,52,0,34,7,6,21,20,23,22,50,55,54,53,52,47,1,50,22,21,20,6,35,34,38,53,52,54,1,17,7, + 53,55,51,17,4,202,1,152,254,104,254,102,254,136,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,3,234,142,50,51,51,50,142,50,51,51, + 121,131,170,170,131,162,140,140,254,116,133,140,137,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240, + 254,200,86,86,172,173,86,86,86,86,173,172,86,175,222,211,212,222,222,212,211,222,252,172,2,209,41,116,39,252,189,0,0,4,0,200,254,20,7,103, + 7,109,0,6,0,18,0,30,0,43,0,0,1,48,9,1,48,1,48,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34, + 53,17,52,5,51,17,20,7,6,43,1,53,51,50,54,53,4,202,1,152,254,104,254,102,254,136,120,120,4,191,120,120,251,65,4,191,240,240,251,65, + 240,1,178,127,65,64,143,49,40,84,70,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,240,253, + 220,149,70,69,96,84,108,0,0,4,0,200,254,20,7,103,7,109,0,6,0,18,0,30,0,56,0,0,1,48,9,1,48,1,48,1,34,21,17,20, + 51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,14,1,35,34,38,53,52,54,51,50,22,23,21,46,1,35,34,6,21,20, + 22,51,50,54,55,4,202,1,152,254,104,254,102,254,136,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,3,60,49,101,57,181,200,201,180,57, + 102,48,47,106,54,124,124,123,125,55,106,46,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,251, + 235,23,22,227,206,205,229,23,23,116,34,36,170,172,171,171,36,34,0,0,0,5,0,200,254,20,7,103,7,109,0,6,0,24,0,34,0,46,0,58, + 0,0,1,48,9,1,48,1,48,3,34,6,35,34,38,53,52,54,51,50,22,21,20,6,7,23,7,18,16,38,35,34,6,16,22,51,50,1,34,21, + 17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,4,202,1,152,254,104,254,102,53,4,17,5,158,155,156,158,159,156,86, + 88,126,95,10,85,97,96,85,85,96,97,254,117,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,249,253,242,253,250,2,6,2,65,1,215, + 218,219,215,215,219,165,201,40,106,56,1,128,1,112,158,158,254,144,158,3,111,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,0,0, + 0,4,0,200,254,20,7,103,7,109,0,6,0,18,0,30,0,41,0,0,1,48,9,1,48,1,48,1,34,21,17,20,51,33,50,53,17,52,35,37, + 33,50,21,17,20,35,33,34,53,17,52,23,51,17,1,51,9,1,35,1,17,35,4,202,1,152,254,104,254,102,254,136,120,120,4,191,120,120,251,65, + 4,191,240,240,251,65,240,240,127,1,106,164,254,105,1,184,167,254,120,127,2,249,253,242,253,250,2,6,6,10,120,248,135,120,120,7,121,120,120,240, + 248,135,240,240,7,121,240,240,254,159,1,97,254,122,254,66,1,147,254,109,0,3,0,200,254,20,7,103,7,109,0,9,0,21,0,33,0,0,1,19, + 33,1,19,9,1,19,1,33,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,4,24,142,1,209,254,137,143, + 254,137,254,135,144,254,137,1,208,254,48,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,5,49,254,71,254,239,254,71,1,17,254,239,1,185, + 1,17,3,125,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,0,0,0,0,5,0,200,254,20,7,103,7,109,0,35,0,47,0,59, + 0,62,0,70,0,0,5,54,53,6,39,38,39,38,53,52,55,54,51,50,23,38,53,52,32,21,20,7,54,51,50,23,22,21,20,7,6,7,6,39, + 20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,3,33,3,51,1,35,39,33,7,35,4,85,57, + 72,170,53,25,146,16,63,171,75,49,124,1,216,124,49,75,171,63,16,146,25,53,169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251, + 65,240,2,75,134,1,12,210,154,1,32,132,68,254,182,68,132,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130,19,141,36,52, + 146,70,12,1,5,197,251,76,7,241,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,254,172,254,85,2,15,252,188,218,218,0,0,0, + 0,4,0,200,254,20,7,103,7,109,0,35,0,47,0,59,0,84,0,0,5,54,53,6,39,38,39,38,53,52,55,54,51,50,23,38,53,52,32,21, + 20,7,54,51,50,23,22,21,20,7,6,7,6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52, + 1,33,21,33,53,54,55,0,53,52,38,35,34,6,7,53,62,1,51,50,22,21,20,1,6,4,85,57,72,170,53,25,146,16,63,171,75,49,124,1, + 216,124,49,75,171,63,16,146,25,53,169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1,158,1,168,253,170,34,63,1,88, + 104,85,52,122,72,77,133,57,145,174,254,181,56,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130,19,141,36,52,146,70,12,1, + 5,197,251,76,7,241,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,252,63,114,110,31,56,1,49,94,66,81,35,35,123,28,28,132, + 108,139,254,228,48,0,0,0,0,4,0,200,254,20,7,103,7,109,0,35,0,47,0,59,0,100,0,0,5,54,53,6,39,38,39,38,53,52,55,54, + 51,50,23,38,53,52,32,21,20,7,54,51,50,23,22,21,20,7,6,7,6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21, + 17,20,35,33,34,53,17,52,1,30,1,21,20,6,35,34,38,39,53,30,1,51,50,54,53,52,38,43,1,53,51,50,54,53,52,38,35,34,6,7, + 53,62,1,51,50,22,21,20,6,4,85,57,72,170,53,25,146,16,63,171,75,49,124,1,216,124,49,75,171,63,16,146,25,53,169,73,57,252,201,120, + 120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,154,92,101,190,177,57,125,70,52,119,67,109,120,111,108,86,94,94,97,100,95,40,102,81,73, + 128,55,144,169,90,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130,19,141,36,52,146,70,12,1,5,197,251,76,7,241,120,248, + 135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,253,145,18,109,82,124,134,21,20,121,27,26,79,70,74,76,108,63,60,58,61,18,23,115,17, + 18,118,99,69,96,0,0,0,0,5,0,200,254,20,7,103,7,109,0,35,0,47,0,59,0,62,0,73,0,0,5,54,53,6,39,38,39,38,53,52, + 55,54,51,50,23,38,53,52,32,21,20,7,54,51,50,23,22,21,20,7,6,7,6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33, + 50,21,17,20,35,33,34,53,17,52,9,1,33,3,51,17,51,21,35,21,35,53,33,53,4,85,57,72,170,53,25,146,16,63,171,75,49,124,1,216, + 124,49,75,171,63,16,146,25,53,169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,142,254,203,1,53,22,166,135,135,144, + 254,98,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130,19,141,36,52,146,70,12,1,5,197,251,76,7,241,120,248,135,120,120, + 7,121,120,120,240,248,135,240,240,7,121,240,254,151,254,93,2,28,253,228,109,186,186,121,0,4,0,200,254,20,7,103,7,109,0,35,0,47,0,59, + 0,92,0,0,5,54,53,6,39,38,39,38,53,52,55,54,51,50,23,38,53,52,32,21,20,7,54,51,50,23,22,21,20,7,6,7,6,39,20,23, + 1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,5,33,21,33,21,54,55,54,51,50,23,22,21,20,7,6, + 35,34,38,39,53,22,23,22,51,50,54,52,38,35,34,6,7,4,85,57,72,170,53,25,146,16,63,171,75,49,124,1,216,124,49,75,171,63,16,146, + 25,53,169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1,24,1,254,254,121,28,29,28,28,161,94,94,97,96,176,60,126, + 66,57,62,62,69,111,130,130,111,52,104,54,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130,19,141,36,52,146,70,12,1,5, + 197,251,76,7,241,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,240,95,204,9,4,4,77,76,131,135,75,74,18,18,113,27,14,13, + 102,174,102,20,21,0,0,0,0,5,0,200,254,20,7,103,7,109,0,35,0,47,0,59,0,75,0,107,0,0,5,54,53,6,39,38,39,38,53,52, + 55,54,51,50,23,38,53,52,32,21,20,7,54,51,50,23,22,21,20,7,6,7,6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33, + 50,21,17,20,35,33,34,53,17,52,1,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,19,21,38,39,38,35,34,7,6,7,54,55,54,51, + 50,23,22,21,20,7,6,35,34,38,53,52,55,54,51,50,23,22,4,85,57,72,170,53,25,146,16,63,171,75,49,124,1,216,124,49,75,171,63,16, + 146,25,53,169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,71,88,51,51,51,51,88,87,51,51,51,51,171,49,50,50, + 49,128,68,68,10,38,57,58,68,145,84,84,88,87,145,167,176,108,108,182,49,50,50,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234, + 106,130,19,141,36,52,146,70,12,1,5,197,251,76,7,241,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,253,158,52,53,91,90,52, + 53,53,52,90,91,53,52,1,98,103,20,10,11,75,76,153,49,26,26,76,77,132,127,79,78,222,212,198,117,118,8,9,0,4,0,200,254,20,7,103, + 7,109,0,35,0,47,0,59,0,66,0,0,5,54,53,6,39,38,39,38,53,52,55,54,51,50,23,38,53,52,32,21,20,7,54,51,50,23,22,21, + 20,7,6,7,6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,23,33,21,1,35,1,33,4, + 85,57,72,170,53,25,146,16,63,171,75,49,124,1,216,124,49,75,171,63,16,146,25,53,169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240, + 240,251,65,240,240,2,105,254,164,136,1,72,254,51,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130,19,141,36,52,146,70,12, + 1,5,197,251,76,7,241,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,240,48,252,237,2,228,0,0,0,6,0,200,254,20,7,103, + 7,109,0,35,0,47,0,59,0,72,0,102,0,117,0,0,5,54,53,6,39,38,39,38,53,52,55,54,51,50,23,38,53,52,32,21,20,7,54,51, + 50,23,22,21,20,7,6,7,6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,0,34,7,6, + 21,20,22,51,50,55,54,52,39,37,38,39,38,53,52,54,32,23,22,21,20,7,6,7,22,23,22,21,20,7,6,35,34,39,38,53,52,55,54,55, + 20,23,22,51,50,55,54,53,52,39,38,34,7,6,4,85,57,72,170,53,25,146,16,63,171,75,49,124,1,216,124,49,75,171,63,16,146,25,53,169, + 73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,151,186,53,53,106,93,92,54,53,53,254,236,84,46,47,164,1,30,82,81, + 46,47,83,90,56,53,85,86,158,159,85,86,53,54,45,47,46,85,81,49,48,48,47,166,48,47,252,76,251,195,3,1,12,67,149,52,36,141,19,130, + 106,234,234,106,130,19,141,36,52,146,70,12,1,5,197,251,76,7,241,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,253,91,44,43, + 75,76,86,44,43,150,43,93,18,49,50,72,100,116,58,58,100,74,48,49,18,18,58,55,80,121,65,65,65,65,121,78,57,56,198,63,38,37,37,36, + 65,63,38,37,37,36,0,0,0,5,0,200,254,20,7,103,7,109,0,35,0,47,0,59,0,91,0,106,0,0,5,54,53,6,39,38,39,38,53,52, + 55,54,51,50,23,38,53,52,32,21,20,7,54,51,50,23,22,21,20,7,6,7,6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33, + 50,21,17,20,35,33,34,53,17,52,1,53,22,23,22,51,50,55,54,55,6,7,6,35,34,38,53,52,55,54,51,50,23,22,21,20,7,6,35,34, + 39,38,19,50,54,53,52,39,38,35,34,7,6,21,20,23,22,4,85,57,72,170,53,25,146,16,63,171,75,49,124,1,216,124,49,75,171,63,16,146, + 25,53,169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1,46,49,50,50,48,129,68,67,10,35,60,57,69,144,168,87,88, + 145,167,87,88,107,108,182,49,50,50,204,88,102,51,51,88,85,53,52,52,51,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130, + 19,141,36,52,146,70,12,1,5,197,251,76,7,241,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,251,223,103,20,11,10,75,75,154, + 47,27,26,152,132,129,77,78,111,111,212,198,117,118,8,9,1,114,104,92,90,52,53,53,52,90,92,52,52,0,0,0,0,6,0,200,254,20,7,103, + 7,109,0,35,0,47,0,59,0,73,0,85,0,92,0,0,5,54,53,6,39,38,39,38,53,52,55,54,51,50,23,38,53,52,32,21,20,7,54,51, + 50,23,22,21,20,7,6,7,6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,0,34,7,6, + 21,20,23,22,50,55,54,53,52,47,1,50,22,21,20,6,35,34,38,53,52,54,1,17,7,53,55,51,17,4,85,57,72,170,53,25,146,16,63,171, + 75,49,124,1,216,124,49,75,171,63,16,146,25,53,169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,3,234,142,50,51,51, + 50,142,50,51,51,121,131,170,170,131,162,140,140,254,116,133,140,137,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130,19,141,36, + 52,146,70,12,1,5,197,251,76,7,241,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,254,200,86,86,172,173,86,86,86,86,173,172, + 86,175,222,211,212,222,222,212,211,222,252,172,2,209,41,116,39,252,189,0,0,4,0,200,254,20,7,103,7,109,0,35,0,47,0,59,0,72,0,0, + 5,54,53,6,39,38,39,38,53,52,55,54,51,50,23,38,53,52,32,21,20,7,54,51,50,23,22,21,20,7,6,7,6,39,20,23,1,34,21,17, + 20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,5,51,17,20,7,6,43,1,53,51,50,54,53,4,85,57,72,170,53,25, + 146,16,63,171,75,49,124,1,216,124,49,75,171,63,16,146,25,53,169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,1,178, + 127,65,64,143,49,40,84,70,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130,19,141,36,52,146,70,12,1,5,197,251,76,7, + 241,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,240,253,220,149,70,69,96,84,108,0,0,4,0,200,254,20,7,103,7,109,0,35, + 0,47,0,59,0,85,0,0,5,54,53,6,39,38,39,38,53,52,55,54,51,50,23,38,53,52,32,21,20,7,54,51,50,23,22,21,20,7,6,7, + 6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,14,1,35,34,38,53,52,54,51,50,22, + 23,21,46,1,35,34,6,21,20,22,51,50,54,55,4,85,57,72,170,53,25,146,16,63,171,75,49,124,1,216,124,49,75,171,63,16,146,25,53,169, + 73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,3,60,49,101,57,181,200,201,180,57,102,48,47,106,54,124,124,123,125,55,106, + 46,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130,19,141,36,52,146,70,12,1,5,197,251,76,7,241,120,248,135,120,120,7, + 121,120,120,240,248,135,240,240,7,121,240,251,235,23,22,227,206,205,229,23,23,116,34,36,170,172,171,171,36,34,0,0,0,5,0,200,254,20,7,103, + 7,109,0,35,0,47,0,59,0,77,0,87,0,0,5,54,53,6,39,38,39,38,53,52,55,54,51,50,23,38,53,52,32,21,20,7,54,51,50,23, + 22,21,20,7,6,7,6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52,1,34,6,35,34,38, + 53,52,54,51,50,22,21,20,6,7,23,7,18,16,38,35,34,6,16,22,51,50,4,85,57,72,170,53,25,146,16,63,171,75,49,124,1,216,124,49, + 75,171,63,16,146,25,53,169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,2,51,4,17,5,158,155,156,158,159,156,86,88, + 126,95,10,85,97,96,85,85,96,97,252,76,251,195,3,1,12,67,149,52,36,141,19,130,106,234,234,106,130,19,141,36,52,146,70,12,1,5,197,251, + 76,7,241,120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,251,191,1,215,218,219,215,215,219,165,201,40,106,56,1,128,1,112,158,158, + 254,144,158,0,0,4,0,200,254,20,7,103,7,109,0,35,0,47,0,59,0,70,0,0,5,54,53,6,39,38,39,38,53,52,55,54,51,50,23,38, + 53,52,32,21,20,7,54,51,50,23,22,21,20,7,6,7,6,39,20,23,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33, + 34,53,17,52,23,51,17,1,51,9,1,35,1,17,35,4,85,57,72,170,53,25,146,16,63,171,75,49,124,1,216,124,49,75,171,63,16,146,25,53, + 169,73,57,252,201,120,120,4,191,120,120,251,65,4,191,240,240,251,65,240,240,127,1,106,164,254,105,1,184,167,254,120,127,252,76,251,195,3,1,12, + 67,149,52,36,141,19,130,106,234,234,106,130,19,141,36,52,146,70,12,1,5,197,251,76,7,241,120,248,135,120,120,7,121,120,120,240,248,135,240,240, + 7,121,240,240,254,159,1,97,254,122,254,66,1,147,254,109,0,4,0,200,254,20,7,103,7,109,0,9,0,19,0,31,0,43,0,0,1,3,33,5, + 3,37,5,3,37,33,3,19,5,1,19,37,5,19,1,37,1,34,21,17,20,51,33,50,53,17,52,35,37,33,50,21,17,20,35,33,34,53,17,52, + 4,24,100,254,188,1,6,101,1,7,1,5,99,1,5,254,187,98,173,1,178,254,184,96,254,137,254,135,98,254,183,1,179,254,77,120,120,4,191,120, + 120,251,65,4,191,240,240,251,65,240,4,110,254,206,190,254,205,190,190,1,51,190,1,245,254,111,40,254,226,254,84,223,223,1,168,1,34,40,3,85, + 120,248,135,120,120,7,121,120,120,240,248,135,240,240,7,121,240,0,0,0,0,8,0,153,255,106,7,191,7,86,0,7,0,17,0,25,0,35,0,43, + 0,51,0,127,0,183,0,0,0,52,54,50,22,20,6,34,55,34,6,21,20,51,50,54,53,52,36,20,6,34,38,52,54,50,23,34,6,21,20,51, + 50,54,53,52,0,52,54,50,22,20,6,34,54,20,6,34,38,52,54,50,6,50,62,3,55,19,23,7,62,4,53,52,38,39,38,39,62,1,53,52, + 38,35,34,14,1,21,20,23,7,38,53,52,55,38,34,7,22,21,20,7,39,54,53,52,46,1,35,34,6,21,20,22,23,6,7,14,1,21,20,30, + 3,23,39,55,19,30,3,18,50,23,62,1,51,50,22,21,20,7,22,21,20,14,2,7,5,7,37,7,6,7,5,7,37,14,1,34,38,39,5,39, + 37,38,47,1,5,39,37,46,3,53,52,55,38,53,52,54,51,50,22,23,2,230,66,92,66,66,92,116,17,45,13,17,46,1,175,66,92,66,66,92, + 23,17,44,13,17,45,254,111,22,32,22,22,32,236,22,32,22,22,32,161,108,78,46,27,9,2,16,134,12,59,113,115,86,54,67,55,48,65,73,98, + 98,79,83,130,67,18,130,23,1,42,168,42,1,23,130,18,67,130,83,79,98,98,73,65,48,55,67,54,86,115,113,59,12,134,16,2,9,27,46,56, + 152,76,43,202,143,139,173,93,156,75,131,152,89,1,159,4,253,236,1,2,4,1,251,22,254,13,32,169,250,169,32,254,13,22,1,251,4,2,1,253, + 236,4,1,159,89,152,131,75,156,93,173,139,143,202,43,3,56,144,103,103,144,103,130,61,24,18,62,24,17,117,144,103,103,144,103,220,61,24,18,62, + 24,17,253,34,54,39,39,54,39,93,54,39,39,54,39,224,36,57,93,87,62,1,58,6,251,31,76,107,116,147,76,74,152,55,51,40,35,131,88,81, + 105,107,164,92,66,63,38,83,84,27,14,3,3,14,27,84,83,38,63,66,92,164,107,105,81,88,131,35,40,51,55,152,74,76,147,116,107,76,31,251, + 6,254,198,62,87,93,57,6,2,6,134,190,183,140,138,114,172,200,108,200,161,126,51,26,68,35,1,31,31,174,64,172,109,138,138,109,172,64,174,31, + 31,1,35,68,26,51,126,161,200,108,200,172,114,138,140,183,190,134,0,0,0,11,0,75,255,106,9,45,6,138,0,9,0,20,0,24,0,34,0,40, + 0,44,0,142,0,153,0,159,0,253,1,7,0,0,1,34,38,52,54,51,50,22,20,6,39,50,54,53,52,35,34,7,6,21,20,23,51,21,35,1, + 34,38,52,54,51,50,22,20,6,1,55,23,7,39,55,1,21,35,53,37,23,6,7,6,21,20,23,30,1,51,50,55,54,55,54,53,52,39,38,39, + 55,22,23,62,4,55,22,51,50,62,4,55,62,1,53,52,39,46,4,35,34,14,2,15,1,6,7,38,36,32,4,7,38,47,1,46,3,35,34,14, + 3,7,6,21,20,22,23,30,5,51,50,55,30,4,23,54,37,50,54,53,52,35,34,7,6,21,20,1,7,23,7,39,55,1,52,55,39,38,39,35, + 34,46,6,39,46,1,53,52,62,1,55,62,1,51,50,30,2,23,22,31,1,54,55,54,32,23,22,23,55,54,55,62,3,51,50,22,23,30,2,21, + 20,6,7,14,7,43,1,6,15,1,22,21,20,7,6,7,6,7,6,7,14,1,34,38,39,38,39,38,39,38,39,38,1,6,32,39,22,23,22,51, + 50,54,3,121,50,62,61,51,50,62,61,30,18,45,14,17,23,22,53,110,110,2,73,51,61,62,50,51,61,62,251,83,51,197,57,63,42,3,148,110, + 253,210,66,63,17,5,57,52,177,139,105,69,128,66,57,5,17,63,66,24,18,5,30,13,20,10,1,82,39,32,56,37,47,22,54,12,49,46,52,2, + 38,30,43,43,18,17,32,35,16,19,19,63,89,61,254,247,254,190,254,247,61,89,63,19,19,16,35,32,17,18,43,43,30,38,2,52,46,49,12,54, + 22,47,37,56,32,39,82,1,10,20,13,30,5,18,3,6,18,45,14,17,23,22,1,237,170,42,63,57,197,250,203,13,21,57,16,10,33,59,43,53, + 27,55,19,63,10,66,58,41,44,35,51,135,65,29,51,50,25,23,37,17,65,40,55,164,1,164,164,55,40,65,17,37,23,25,50,51,29,65,135,51, + 35,44,41,58,66,10,63,19,55,27,53,43,59,33,10,16,57,21,13,13,34,96,9,22,32,66,54,136,196,136,54,66,32,22,9,95,35,13,3,52, + 97,254,186,97,17,31,55,157,107,126,2,209,110,130,110,110,130,110,27,65,21,17,31,29,25,18,212,210,1,139,110,130,110,110,130,110,2,181,45,218, + 186,24,148,253,77,210,210,147,118,36,68,17,25,75,59,55,34,8,13,68,59,75,25,17,68,36,118,13,15,19,104,53,87,77,39,20,11,12,32,17, + 49,10,42,76,55,46,52,2,40,26,35,19,14,34,17,25,25,78,131,101,109,109,101,131,78,25,25,17,34,14,19,35,26,40,2,52,46,55,76,42, + 10,49,17,32,12,11,20,39,77,87,53,104,19,15,78,65,21,17,31,29,25,18,2,154,187,148,24,186,218,251,239,42,44,80,221,73,9,8,27,13, + 44,15,57,9,58,107,82,52,95,53,34,50,83,18,39,24,25,39,21,82,29,27,78,78,27,29,82,21,39,25,24,39,18,83,50,34,53,95,52,82, + 107,58,9,57,15,44,13,27,8,9,73,221,80,44,42,48,40,115,66,68,48,72,46,38,27,27,38,46,72,48,68,66,115,40,254,224,22,22,36,21, + 39,38,0,0,0,8,0,61,255,106,8,29,7,20,0,17,0,25,0,40,0,50,0,65,0,78,0,127,0,184,0,0,1,55,22,51,50,55,22,51, + 50,55,23,6,35,34,39,6,35,34,1,23,6,34,39,55,22,50,1,6,7,6,35,34,39,38,53,52,55,54,51,50,22,7,34,6,21,20,23,62, + 1,55,38,5,62,1,51,50,23,22,21,20,7,6,35,34,39,38,23,22,51,50,55,54,53,52,39,38,35,34,6,5,54,53,52,46,2,39,38,39, + 6,7,38,35,34,7,38,39,6,7,14,3,21,20,23,37,23,5,22,23,37,23,5,22,23,22,32,55,54,55,37,55,5,54,55,37,55,5,38,53, + 52,62,3,55,54,63,1,23,30,1,23,54,50,23,62,1,63,1,23,22,23,30,4,21,20,7,23,7,39,6,7,23,7,39,2,7,6,33,32,39, + 38,3,7,39,55,38,39,7,39,2,166,92,69,91,58,84,84,58,91,69,92,108,144,74,68,69,73,144,1,184,62,122,194,122,62,90,134,254,252,43, + 81,32,40,70,54,21,53,47,65,70,101,78,36,48,5,43,69,18,22,1,184,5,100,70,66,47,53,21,54,70,40,32,81,121,12,26,48,40,16,4, + 12,13,44,64,1,147,18,10,10,22,4,27,42,243,153,116,155,157,116,153,243,42,27,5,21,11,10,18,1,66,10,254,191,14,23,1,30,26,254,225, + 103,164,181,1,234,181,164,103,254,225,26,1,30,21,15,254,192,10,250,192,17,7,19,12,31,5,23,38,15,60,143,253,93,105,226,105,93,253,143,59, + 16,38,23,5,31,12,19,7,17,108,10,109,15,32,110,26,109,117,195,217,254,224,254,223,217,193,118,109,26,109,30,16,109,10,1,140,98,64,44,44, + 64,98,100,28,28,1,168,120,61,61,120,46,1,6,76,28,11,35,36,45,71,48,44,97,38,48,36,14,15,7,52,37,17,29,67,97,44,48,71,45, + 36,35,11,28,4,3,22,24,28,14,12,3,59,167,130,116,46,102,62,118,25,161,167,58,196,21,21,196,58,167,161,27,114,65,101,46,116,130,43,66, + 44,69,64,121,62,122,231,119,132,132,119,231,122,62,121,57,76,44,66,61,124,143,57,106,119,65,147,24,117,140,58,9,22,137,97,13,13,97,137,22, + 9,58,140,117,24,147,65,119,106,57,143,124,15,66,14,81,87,46,62,46,254,247,142,158,158,140,1,11,46,62,46,81,87,14,66,0,0,11,0,170, + 255,106,8,150,7,11,0,7,0,17,0,29,0,37,0,49,0,59,0,71,0,104,0,152,0,170,0,188,0,0,0,52,54,50,22,20,6,34,55,34, + 6,21,20,51,50,54,53,52,3,34,53,52,55,54,51,50,21,20,7,6,0,20,6,34,38,52,54,50,1,52,51,50,23,22,21,20,35,34,39,38, + 1,34,6,21,20,51,50,54,53,52,1,55,22,51,50,54,55,23,6,33,34,38,18,32,55,54,53,52,39,62,2,53,52,39,38,35,34,6,7,46, + 1,35,34,7,6,21,20,30,1,23,6,21,20,23,18,32,4,23,22,23,54,51,50,22,21,20,7,6,7,14,1,43,1,6,7,14,1,7,6,32, + 39,46,1,39,38,39,35,34,38,39,38,39,38,53,52,54,51,50,23,54,55,54,3,38,35,34,7,14,1,21,20,23,22,23,22,59,1,54,55,38, + 37,6,7,22,23,51,50,55,54,55,54,53,52,38,39,38,35,34,3,25,82,116,82,82,116,145,22,55,16,22,56,16,24,44,37,30,24,44,37,2, + 13,82,116,82,82,116,254,255,24,31,37,44,24,31,37,44,1,30,22,55,16,22,56,252,227,106,130,206,96,180,59,106,168,254,238,128,234,138,1,192, + 165,124,84,30,29,31,86,90,130,71,113,31,28,112,71,130,90,86,31,29,30,84,124,208,1,106,1,55,97,105,16,25,29,106,144,8,13,28,34,134, + 89,7,15,58,56,171,109,148,254,224,148,109,171,56,58,15,7,89,134,34,28,13,8,144,106,29,25,16,105,97,214,24,32,13,21,40,43,7,23,71, + 31,38,4,8,60,53,5,116,16,53,60,8,4,38,31,71,23,7,43,40,21,13,32,4,8,116,82,82,116,82,104,49,19,14,49,19,14,254,82,21, + 32,36,31,21,32,36,31,2,12,116,82,82,116,82,254,5,21,31,36,32,21,31,36,1,107,49,19,14,49,19,14,253,168,84,164,88,76,84,214,114, + 254,222,203,154,184,134,149,44,48,94,49,138,105,111,69,53,53,69,111,105,138,49,94,48,44,149,134,184,154,6,0,164,124,136,155,6,164,135,44,54, + 91,63,75,105,123,112,110,173,55,76,76,55,173,110,112,123,105,75,63,91,54,44,135,164,6,155,136,124,253,204,21,7,15,82,58,30,51,151,47,21, + 135,123,87,96,96,87,123,135,21,47,151,51,30,58,82,15,7,0,0,0,0,9,0,170,255,106,7,173,6,110,0,11,0,22,0,34,0,46,0,52, + 0,57,0,62,0,66,0,70,0,0,1,52,54,51,50,22,21,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38,5,16,0,33,32,0,17, + 16,0,33,32,0,3,16,0,33,32,0,17,16,0,33,32,0,1,33,16,0,32,0,5,54,55,17,35,3,17,35,17,22,37,54,55,35,5,53,35, + 22,2,130,81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,252,109,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,135,2, + 14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,1,20,4,219,254,149,253,252,254,148,2,178,88,76,164,136,164,76,2,12,72,28,100,253,32, + 101,28,3,255,59,81,81,59,58,83,83,58,59,81,81,59,58,83,83,219,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,195,1,117,2,15, + 253,241,254,139,254,140,253,244,2,12,1,106,254,254,254,150,1,106,223,11,42,1,37,254,166,1,90,254,219,42,153,82,100,184,184,102,0,9,0,170, + 255,106,7,173,6,110,0,11,0,23,0,35,0,47,0,53,0,58,0,63,0,67,0,71,0,0,1,16,0,33,32,0,17,16,0,33,32,0,3,16, + 0,33,32,0,17,16,0,33,32,0,1,52,54,50,22,21,35,52,38,34,6,21,33,52,54,50,22,21,35,52,38,34,6,21,7,33,16,0,32,0, + 5,54,55,17,35,3,17,35,17,22,37,54,55,35,5,53,35,22,1,49,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,135,2,14,1, + 116,1,117,2,12,253,244,254,139,254,140,253,242,3,188,140,196,140,135,61,84,61,253,41,140,196,140,135,61,84,61,223,4,219,254,149,253,252,254,148, + 2,178,88,76,164,136,164,76,2,12,72,28,100,253,32,101,28,2,234,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,195,1,117,2,15,253, + 241,254,139,254,140,253,244,2,12,2,22,139,197,197,139,83,119,119,83,139,197,197,139,83,119,119,83,172,254,254,254,150,1,106,223,11,42,1,37,254, + 166,1,90,254,219,42,153,82,100,184,184,102,0,9,0,95,255,106,8,249,6,110,0,3,0,7,0,12,0,17,0,23,0,35,0,47,0,89,0,126, + 0,0,1,53,35,22,5,54,55,35,1,17,35,17,22,23,54,55,17,35,37,33,16,0,32,0,19,52,54,50,22,21,35,52,38,34,6,21,33,52, + 54,50,22,21,35,52,38,34,6,21,5,16,0,33,32,0,17,20,7,23,22,23,22,21,20,6,34,39,38,47,1,2,7,0,33,32,1,38,3,7, + 6,7,6,34,38,53,52,55,54,63,1,38,55,16,0,33,32,0,17,52,39,6,35,34,39,38,47,1,23,22,23,38,39,38,33,32,7,6,7,54, + 63,1,7,6,7,6,34,39,6,3,60,101,28,3,41,72,28,100,254,76,164,76,224,88,76,164,253,78,4,219,254,149,253,252,254,148,88,140,196,140, + 135,61,84,61,1,201,140,196,140,135,61,84,61,251,189,2,14,1,116,1,117,2,12,2,93,59,24,30,54,76,31,25,18,11,42,209,254,250,254,139, + 254,140,254,249,209,43,10,18,25,31,76,54,30,23,60,92,2,135,1,191,1,60,1,61,1,189,1,27,37,38,31,25,18,45,136,41,24,47,154,222, + 254,194,254,196,224,154,47,24,41,136,45,18,25,31,76,27,1,1,161,184,102,80,82,100,254,166,1,90,254,219,42,11,11,42,1,37,135,254,254,254, + 150,1,106,1,174,139,197,197,139,83,119,119,83,139,197,197,139,83,119,119,83,162,1,117,2,15,253,241,254,139,29,27,31,20,24,31,37,38,54,31, + 25,57,32,254,233,209,254,250,1,6,208,1,22,30,57,25,31,54,38,37,31,25,19,30,28,29,254,196,254,67,1,189,1,60,20,19,26,31,25,57, + 136,45,14,15,199,154,224,224,155,198,16,13,45,136,57,25,31,27,20,0,0,6,0,170,255,106,7,173,6,110,0,11,0,22,0,34,0,46,0,52, + 0,60,0,0,1,52,54,51,50,22,21,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,19, + 16,0,33,32,0,17,16,0,33,32,0,19,33,16,0,32,0,37,33,22,23,22,36,55,54,2,130,81,59,58,82,82,58,59,81,2,66,82,116,83, + 83,58,59,81,251,230,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,141, + 4,219,254,149,253,252,254,148,4,66,252,87,33,92,142,1,148,142,92,3,255,59,81,81,59,58,83,83,58,59,81,81,59,58,83,83,219,1,117,2, + 15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,185,254,254,254,150,1,106,123,117,92,142,1, + 142,92,0,0,0,6,0,170,255,106,7,173,6,110,0,11,0,23,0,35,0,47,0,53,0,62,0,0,1,52,54,50,22,21,35,52,38,34,6,21, + 33,52,54,50,22,21,35,52,38,34,6,21,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,19,33,16,0, + 32,0,37,33,22,23,22,55,50,55,54,2,22,140,196,140,135,61,84,61,1,201,140,196,140,135,61,84,61,251,189,2,14,1,116,1,117,2,12,253, + 244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,141,4,219,254,149,253,252,254,148,4,66,252,87,33,92,142, + 202,202,142,92,3,140,139,197,197,139,83,119,119,83,139,197,197,139,83,119,119,83,162,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254, + 196,254,67,1,189,1,60,1,61,1,192,254,64,254,185,254,254,254,150,1,106,123,117,92,142,1,142,92,0,7,0,170,255,106,7,173,6,110,0,11, + 0,23,0,35,0,47,0,59,0,65,0,74,0,0,1,23,22,7,6,7,6,34,38,53,52,55,5,52,54,50,22,21,35,52,38,34,6,21,33,52, + 54,50,22,21,35,52,38,34,6,21,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,19,33,16,0,32,0, + 37,33,22,23,22,55,50,55,54,6,168,65,28,1,1,26,27,76,54,27,251,175,140,196,140,135,61,84,61,1,201,140,196,140,135,61,84,61,251,189, + 2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,141,4,219,254,149,253,252, + 254,148,4,66,252,87,33,92,142,202,202,142,92,4,44,128,56,34,43,26,27,54,44,35,53,32,139,197,197,139,83,119,119,83,139,197,197,139,83,119, + 119,83,162,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,185,254,254,254,150,1, + 106,123,117,92,142,1,142,92,0,6,0,170,255,106,7,173,6,110,0,6,0,13,0,25,0,37,0,43,0,51,0,0,1,37,23,7,23,7,37,39, + 21,5,39,55,39,55,1,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,19,33,16,0,32,0,37,33,22,23, + 22,36,55,54,4,124,1,39,77,198,198,77,254,217,160,254,217,77,198,198,77,253,245,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135, + 1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,141,4,219,254,149,253,252,254,148,4,66,252,87,33,92,142,1,148,142,92,4,39,206,110, + 139,138,110,206,85,85,206,110,138,139,110,253,245,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1, + 192,254,64,254,185,254,254,254,150,1,106,123,117,92,142,1,142,92,0,0,0,7,0,143,255,106,7,200,7,99,0,15,0,31,0,42,0,53,0,73, + 0,87,0,95,0,0,1,55,22,23,22,4,55,54,55,23,6,7,6,32,39,38,1,16,0,33,32,0,17,16,47,1,6,33,32,39,7,6,5,52, + 54,50,22,21,20,6,35,34,38,37,52,54,51,50,22,20,6,35,34,38,1,52,36,33,32,4,21,20,7,22,17,16,0,33,32,0,17,16,55,38, + 37,54,53,52,36,33,32,4,21,20,23,54,33,32,23,38,35,34,7,22,51,50,2,29,115,28,40,143,1,147,142,39,29,115,37,50,182,253,252,182, + 50,254,239,1,191,1,60,1,61,1,189,222,14,229,254,215,254,216,230,14,224,3,148,82,116,83,83,58,59,81,253,190,81,59,58,82,82,58,59,81, + 254,13,2,30,1,127,1,128,2,28,253,226,253,244,254,139,254,140,253,242,227,254,5,219,188,254,67,254,195,254,196,254,65,189,244,1,74,1,75,67, + 176,222,221,176,176,221,222,1,209,71,44,38,141,1,142,39,44,72,57,50,181,181,51,1,81,254,196,254,67,1,189,1,60,1,61,224,14,57,57,14, + 224,42,59,81,81,59,58,83,83,58,59,81,81,118,82,83,2,92,134,190,190,134,130,92,252,254,165,254,140,253,244,2,12,1,116,1,91,252,92,2, + 54,74,81,114,114,81,74,54,207,245,110,110,28,0,0,0,0,7,0,170,255,106,7,173,7,48,0,3,0,14,0,25,0,29,0,45,0,57,0,74, + 0,0,1,5,7,37,1,52,54,50,22,21,20,6,35,34,38,37,52,54,51,50,22,20,6,35,34,38,1,23,5,39,1,55,22,23,22,32,55,54, + 55,23,6,7,6,32,39,38,1,16,0,33,32,0,17,16,0,33,32,0,1,54,32,23,37,17,22,17,16,0,33,32,0,17,16,55,17,2,210,1, + 47,77,254,209,2,63,82,116,83,83,58,59,81,253,190,81,59,58,82,82,58,59,81,3,4,77,254,209,77,253,198,115,28,40,142,1,148,142,39,29, + 115,37,50,182,253,252,182,50,254,239,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,1,226,132,1,42,132,1,187,173,253,244,254,139,254, + 140,253,242,174,5,103,212,111,213,254,188,59,81,81,59,58,83,83,58,59,81,81,118,82,83,1,236,110,213,111,253,62,71,44,38,142,142,39,44,72, + 57,50,181,181,51,1,81,254,196,254,67,1,189,1,60,1,61,1,192,254,64,2,29,42,42,236,253,208,231,254,209,254,140,253,244,2,12,1,116,1, + 47,231,2,48,0,5,0,170,255,106,7,173,6,110,0,15,0,27,0,39,0,50,0,57,0,0,1,55,22,23,22,32,55,54,55,23,6,7,6,32, + 39,38,1,16,0,33,32,0,17,16,0,33,32,0,3,16,0,33,32,0,17,16,0,33,32,0,1,52,54,51,50,22,20,6,35,34,38,45,1,23, + 7,23,7,37,2,29,115,28,40,142,1,148,142,39,29,115,37,50,182,253,252,182,50,254,239,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254, + 65,135,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,1,216,81,59,58,82,82,58,59,81,1,250,1,39,77,198,198,77,254,217,1,209, + 71,44,38,142,142,39,44,72,57,50,181,181,51,1,81,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,195,1,117,2,15,253,241,254,139,254, + 140,253,244,2,12,2,135,59,81,81,118,82,83,100,206,110,139,138,110,206,0,5,0,170,255,106,7,173,6,110,0,15,0,27,0,39,0,51,0,63, + 0,0,1,55,22,23,22,32,55,54,55,23,6,7,6,32,39,38,3,52,54,50,22,21,35,52,38,34,6,21,33,52,54,50,22,21,35,52,38,34, + 6,21,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,2,29,115,28,40,142,1,148,142,39,29,115,37,50, + 182,253,252,182,50,44,140,196,140,135,61,84,61,1,201,140,196,140,135,61,84,61,251,189,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242, + 135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,1,209,71,44,38,142,142,39,44,72,57,50,181,181,51,1,243,139,197,197,139,83,119, + 119,83,139,197,197,139,83,119,119,83,162,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254, + 64,0,0,0,0,5,0,170,255,106,7,173,6,110,0,11,0,23,0,55,0,67,0,81,0,0,1,52,54,50,22,21,35,52,38,34,6,21,33,52, + 54,50,22,21,35,52,38,34,6,21,5,16,0,33,50,55,38,39,6,35,32,0,17,51,20,0,32,0,53,51,20,7,22,29,1,54,17,16,0,33, + 32,0,3,16,0,33,32,0,17,16,0,33,32,0,5,6,7,22,23,22,51,50,55,54,55,52,39,38,4,102,140,196,140,135,61,84,61,253,41,140, + 196,140,135,61,84,61,254,148,1,191,1,60,136,118,101,65,43,45,254,254,254,148,135,1,29,1,148,1,28,135,123,55,209,254,67,254,195,254,196,254, + 65,135,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,5,16,79,92,31,38,36,27,16,13,33,1,1,2,3,140,139,197,197,139,83,119, + 119,83,139,197,197,139,83,119,119,83,162,254,196,254,67,41,48,108,5,1,106,1,2,202,254,229,1,28,201,213,160,100,99,4,218,1,51,1,61,1, + 192,254,64,254,195,1,117,2,15,253,241,254,139,254,140,253,244,2,12,54,67,36,40,24,23,8,19,57,5,6,46,0,0,5,0,170,255,106,7,173, + 6,110,0,15,0,27,0,39,0,51,0,63,0,0,1,55,22,23,22,32,55,54,55,23,6,7,6,32,39,38,1,20,6,34,38,53,51,20,22,50, + 54,53,33,20,6,34,38,53,51,20,22,50,54,53,1,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,2,29, + 115,28,40,142,1,148,142,39,29,115,37,50,182,253,252,182,50,4,0,140,196,140,135,61,84,61,254,55,140,196,140,135,61,84,61,253,63,2,14,1, + 116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,1,209,71,44,38,142,142,39,44,72, + 57,50,181,181,51,2,239,139,197,197,139,83,119,119,83,139,197,197,139,83,119,119,83,254,98,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1, + 116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,5,0,170,255,106,7,173,6,110,0,23,0,47,0,59,0,71,0,87,0,0,1,50, + 23,22,21,6,15,1,35,39,38,53,38,55,54,51,22,23,22,23,51,52,55,54,33,50,23,22,21,51,54,55,54,55,50,23,22,7,20,15,1,35, + 39,38,39,52,55,54,1,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,19,55,22,23,22,32,55,54,55,23, + 6,7,6,32,39,38,5,166,26,25,60,1,50,168,2,159,62,1,10,38,63,41,32,28,10,1,13,35,253,73,61,35,13,1,10,28,32,41,63,38, + 10,1,62,159,2,168,50,1,60,25,254,18,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254, + 195,254,196,254,65,236,115,28,40,142,1,148,142,39,29,115,37,50,182,253,252,182,50,4,192,14,37,63,65,62,207,190,68,76,21,25,68,1,32,32, + 49,14,29,71,71,29,14,49,32,32,1,68,25,21,76,68,190,207,62,65,63,37,14,254,42,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1, + 116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,253,170,71,44,38,142,142,39,44,72,57,50,181,181,51,0,0,0,4,0,170,255,106,7,173, + 6,110,0,23,0,35,0,51,0,60,0,0,1,16,0,33,32,0,17,52,39,35,21,20,6,34,38,53,20,6,34,38,61,1,35,6,7,16,0,33, + 32,0,17,16,0,33,32,0,37,55,22,23,22,4,55,54,55,23,6,7,6,32,39,38,3,33,38,39,38,33,32,7,6,1,49,1,191,1,60,1, + 61,1,189,84,110,166,236,166,166,236,166,110,85,135,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,1,115,115,28,40,143,1,147,142,39, + 29,115,37,50,182,253,252,182,50,96,4,148,22,24,222,254,194,254,196,224,24,2,234,254,196,254,67,1,189,1,60,195,160,79,100,142,142,100,100,142, + 142,100,79,160,195,1,117,2,15,253,241,254,139,254,140,253,244,2,12,91,71,44,38,141,1,142,39,44,72,57,50,181,181,51,3,59,26,25,224,224, + 25,0,0,0,0,5,0,170,255,106,7,173,6,110,0,3,0,7,0,17,0,29,0,41,0,0,1,53,33,21,33,53,33,21,19,50,55,54,55,23, + 6,7,6,33,1,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,4,152,1,170,251,212,1,170,108,202,142,39, + 29,115,37,50,182,254,254,252,126,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196, + 254,65,3,140,135,135,135,135,253,172,142,39,44,72,57,50,181,2,57,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1, + 189,1,60,1,61,1,192,254,64,0,0,0,0,5,0,170,255,106,7,173,6,110,0,3,0,14,0,25,0,37,0,49,0,0,1,53,33,21,1,52, + 54,51,50,22,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16, + 0,33,32,0,2,76,3,192,252,118,81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,251,230,2,14,1,116,1,117,2,12,253,244,254, + 139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,1,113,135,135,2,140,59,81,81,118,82,83,58,59,81,81,59,58, + 83,83,217,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,0,0,5,0,170, + 255,106,7,173,6,110,0,3,0,7,0,11,0,23,0,35,0,0,1,53,33,21,33,53,33,21,1,53,33,21,1,16,0,33,32,0,17,16,0,33, + 32,0,19,16,0,33,32,0,17,16,0,33,32,0,4,152,1,170,251,212,1,170,254,140,3,192,250,158,2,14,1,116,1,117,2,12,253,244,254,139, + 254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,3,140,135,135,135,135,253,229,135,135,1,121,1,117,2,15,253,241,254, + 139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,5,0,170,255,106,7,173,6,110,0,11,0,23,0,27, + 0,41,0,55,0,0,1,16,0,33,32,0,17,16,0,33,32,0,3,16,0,33,32,0,17,16,0,33,32,0,5,53,33,21,1,53,33,50,22,21, + 20,6,35,34,38,53,52,53,33,53,33,50,22,21,20,6,35,34,38,53,52,53,1,49,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65, + 135,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,1,162,3,192,252,2,1,120,58,82,82,58,59,81,1,86,1,120,58,83,83,58,59, + 81,2,234,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,195,1,117,2,15,253,241,254,139,254,140,253,244,2,12,5,135,135,2,45,135,81, + 59,58,83,83,58,3,2,135,81,59,58,83,83,58,3,2,0,8,0,170,255,106,7,173,6,110,0,8,0,12,0,16,0,20,0,31,0,42,0,54, + 0,66,0,0,1,23,22,20,6,34,38,52,55,1,53,33,21,19,37,55,13,1,39,37,23,1,52,54,51,50,22,20,6,35,34,38,37,52,54,50, + 22,21,20,6,35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,6,80,65,27,54,76,54,27,252, + 61,3,192,11,254,168,77,1,88,251,221,77,1,88,77,254,233,81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,251,230,2,14,1,116, + 1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,3,172,128,53,79,54,54,79,53,254,69, + 135,135,2,165,240,111,241,110,110,241,111,254,175,59,81,81,118,82,83,58,59,81,81,59,58,83,83,145,1,117,2,15,253,241,254,139,254,140,253,244, + 2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,0,5,0,170,255,106,7,173,6,110,0,3,0,15,0,27,0,39,0,51, + 0,0,1,53,33,21,19,20,6,34,38,53,51,20,22,50,54,53,33,20,6,34,38,53,51,20,22,50,54,53,1,16,0,33,32,0,17,16,0,33, + 32,0,19,16,0,33,32,0,17,16,0,33,32,0,2,76,3,192,54,140,196,140,135,61,84,61,254,55,140,196,140,135,61,84,61,253,63,2,14,1, + 116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,1,113,135,135,3,23,139,197,197,139, + 83,119,119,83,139,197,197,139,83,119,119,83,254,98,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61, + 1,192,254,64,0,5,0,170,255,106,7,173,6,110,0,3,0,14,0,25,0,37,0,49,0,0,37,39,1,23,1,52,54,51,50,22,20,6,35,34, + 38,37,52,54,50,22,21,20,6,35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,2,149,57,3, + 103,57,252,134,81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,251,230,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135, + 1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,172,123,1,150,123,1,187,59,81,81,118,82,83,58,59,81,81,59,58,83,83,217,1,117, + 2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,5,0,170,255,106,7,173,6,110,0,3, + 0,15,0,27,0,31,0,66,0,0,1,39,1,23,1,16,0,33,32,0,17,16,0,33,32,0,3,16,0,33,32,0,17,16,0,33,32,0,9,1, + 55,1,3,34,7,6,7,14,1,39,38,39,38,35,34,7,39,54,55,54,50,23,22,23,22,51,50,55,54,55,54,50,23,22,23,7,38,2,201,95, + 1,14,95,253,90,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,135,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,4,229, + 254,242,95,1,14,154,52,41,11,24,70,196,70,28,12,34,53,56,32,121,16,25,70,196,70,28,12,34,53,52,40,12,24,70,196,70,24,16,121,31, + 3,92,95,1,14,95,254,128,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,195,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,230, + 1,14,95,254,242,254,87,105,29,34,98,1,99,40,33,95,95,57,40,34,98,98,40,34,95,105,30,34,98,98,34,40,57,95,0,0,0,5,0,170, + 255,106,7,173,6,110,0,11,0,22,0,35,0,47,0,59,0,0,1,52,54,51,50,22,21,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34, + 38,3,55,39,55,5,21,7,23,21,5,39,55,39,1,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,2,130, + 81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,206,80,144,65,1,3,60,60,254,253,65,144,80,252,180,2,14,1,116,1,117,2,12, + 253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,3,255,59,81,81,59,58,83,83,58,59,81,81,59,58, + 83,83,254,36,62,78,118,141,88,46,46,88,141,118,78,62,1,35,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189, + 1,60,1,61,1,192,254,64,0,6,0,170,255,106,7,173,6,110,0,23,0,34,0,41,0,54,0,66,0,78,0,0,1,50,23,22,21,6,15,1, + 35,39,38,53,38,55,54,51,22,23,22,23,51,52,55,54,1,52,54,51,50,22,20,6,35,34,38,45,1,23,7,23,7,37,3,55,39,55,5,21, + 7,23,21,5,39,55,39,1,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,6,106,26,26,60,2,50,168,2, + 158,62,2,10,38,64,40,32,28,10,2,12,34,252,86,81,59,58,82,82,58,59,81,1,250,1,39,77,198,198,77,254,217,134,80,144,65,1,3,60, + 60,254,253,65,144,80,252,180,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254, + 65,2,175,14,37,63,65,62,207,190,68,76,21,25,68,1,32,32,49,14,29,71,1,78,59,81,81,118,82,83,100,206,110,139,138,110,206,254,23,62, + 78,118,141,88,46,46,88,141,118,78,62,1,35,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1, + 192,254,64,0,0,5,0,170,255,106,7,173,6,110,0,11,0,23,0,36,0,48,0,60,0,0,1,52,54,50,22,21,35,52,38,34,6,21,33,52, + 54,50,22,21,35,52,38,34,6,21,3,55,39,55,5,21,7,23,21,5,39,55,39,1,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32, + 0,17,16,0,33,32,0,2,22,140,196,140,135,61,84,61,1,201,140,196,140,135,61,84,61,247,80,144,65,1,3,60,60,254,253,65,144,80,252,180, + 2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,3,140,139,197,197,139,83, + 119,119,83,139,197,197,139,83,119,119,83,254,93,62,78,118,141,88,46,46,88,141,118,78,62,1,35,1,117,2,15,253,241,254,139,254,140,253,244,2, + 12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,0,0,5,0,170,255,106,7,173,6,110,0,12,0,24,0,36,0,48,0,60, + 0,0,1,55,39,55,5,21,7,23,21,5,39,55,39,1,20,6,34,38,53,51,20,22,50,54,53,33,20,6,34,38,53,51,20,22,50,54,53,1, + 16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,3,246,80,144,65,1,3,60,60,254,253,65,144,80,2,76,140, + 196,140,135,61,84,61,254,55,140,196,140,135,61,84,61,253,63,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61, + 1,189,254,67,254,195,254,196,254,65,1,233,62,78,118,141,88,46,46,88,141,118,78,62,2,193,139,197,197,139,83,119,119,83,139,197,197,139,83,119, + 119,83,254,98,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,0,6,0,170, + 255,106,7,173,6,110,0,11,0,22,0,34,0,46,0,56,0,62,0,0,1,52,54,51,50,22,21,20,6,35,34,38,37,52,54,50,22,21,20,6, + 35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,3,16,0,33,32,0,17,16,0,33,32,0,37,53,33,21,35,20,6,34,38,53,33,35,20, + 22,50,54,2,130,81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,252,109,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65, + 135,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,1,162,3,192,242,140,196,140,1,85,206,61,84,61,3,255,59,81,81,59,58,83,83, + 58,59,81,81,59,58,83,83,219,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,195,1,117,2,15,253,241,254,139,254,140,253,244,2,12,99, + 135,135,139,197,197,139,83,119,119,0,0,0,0,6,0,170,255,106,7,173,6,110,0,10,0,17,0,29,0,41,0,51,0,57,0,0,1,52,54,51, + 50,22,20,6,35,34,38,45,1,23,7,23,7,37,5,16,0,33,32,0,17,16,0,33,32,0,3,16,0,33,32,0,17,16,0,33,32,0,37,53, + 33,21,35,20,6,34,38,53,33,35,20,22,50,54,2,130,81,59,58,82,82,58,59,81,1,250,1,39,77,198,198,77,254,217,252,181,1,191,1,60, + 1,61,1,189,254,67,254,195,254,196,254,65,135,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,1,162,3,192,242,140,196,140,1,85,206, + 61,84,61,3,253,59,81,81,118,82,83,100,206,110,139,138,110,206,232,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,195,1,117,2,15,253, + 241,254,139,254,140,253,244,2,12,99,135,135,139,197,197,139,83,119,119,0,0,6,0,170,255,106,7,173,6,110,0,11,0,23,0,30,0,37,0,47, + 0,53,0,0,1,16,0,33,32,0,17,16,0,33,32,0,3,16,0,33,32,0,17,16,0,33,32,0,1,21,5,39,55,39,55,5,37,23,7,23, + 7,37,1,53,33,21,35,20,6,34,38,53,33,35,20,22,50,54,1,49,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,135,2,14,1, + 116,1,117,2,12,253,244,254,139,254,140,253,242,3,50,254,217,77,198,198,77,1,199,1,39,77,198,198,77,254,217,253,208,3,192,242,140,196,140,1, + 85,206,61,84,61,2,234,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,195,1,117,2,15,253,241,254,139,254,140,253,244,2,12,2,177,85, + 206,110,138,139,110,206,206,110,139,138,110,206,254,7,135,135,139,197,197,139,83,119,119,0,0,7,0,170,255,106,7,173,6,110,0,3,0,7,0,18, + 0,29,0,41,0,53,0,70,0,0,1,37,55,13,1,39,37,23,1,52,54,51,50,22,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38, + 5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,19,54,55,54,32,23,22,23,7,38,39,38,35,38,7,6, + 7,6,23,254,168,77,1,88,251,221,77,1,88,77,254,233,81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,251,230,2,14,1,116,1, + 117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,236,37,50,182,2,4,182,51,36,115,28,40, + 142,202,202,142,39,29,4,22,240,111,241,110,110,241,111,254,175,59,81,81,118,82,83,58,59,81,81,59,58,83,83,145,1,117,2,15,253,241,254,139, + 254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,253,37,56,51,181,181,51,56,72,44,39,142,1,142,39,44,0,0, + 0,8,0,170,255,106,7,173,6,110,0,15,0,19,0,23,0,34,0,45,0,57,0,69,0,86,0,0,37,39,54,55,54,50,23,22,23,7,38,39, + 38,34,7,6,1,37,55,13,1,39,37,23,1,52,54,51,50,22,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38,5,16,0,33,32,0, + 17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,19,54,55,54,32,23,22,23,7,38,39,38,35,38,7,6,7,3,213,121,16,24, + 70,196,70,24,16,121,7,8,30,84,30,8,2,59,254,168,77,1,88,251,221,77,1,88,77,254,233,81,59,58,82,82,58,59,81,2,66,82,116,83, + 83,58,59,81,251,230,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,236, + 37,50,182,2,4,182,51,36,115,28,40,142,202,202,142,39,29,159,57,40,34,98,98,34,40,57,19,16,60,60,16,3,100,240,111,241,110,110,241,111, + 254,175,59,81,81,118,82,83,58,59,81,81,59,58,83,83,145,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1, + 60,1,61,1,192,254,64,253,37,56,51,181,181,51,56,72,44,39,142,1,142,39,44,0,0,7,0,170,255,106,7,173,6,110,0,3,0,14,0,25, + 0,29,0,41,0,53,0,70,0,0,1,23,5,39,5,52,54,51,50,22,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38,1,5,7,37, + 1,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,19,54,55,54,32,23,22,23,7,38,39,38,35,38,7,6, + 7,5,134,77,254,209,77,254,43,81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,254,14,1,47,77,254,209,254,37,2,14,1,116,1, + 117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,236,37,50,182,2,4,182,51,36,115,28,40, + 142,202,202,142,39,29,5,103,110,213,111,222,59,81,81,118,82,83,58,59,81,81,59,58,83,83,1,236,212,111,213,253,241,1,117,2,15,253,241,254, + 139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,253,37,56,51,181,181,51,56,72,44,39,142,1,142,39,44,0, + 0,8,0,170,255,106,7,173,6,110,0,16,0,28,0,40,0,44,0,55,0,66,0,70,0,86,0,0,1,54,55,54,32,23,22,23,7,38,39,38, + 35,38,7,6,7,1,16,0,33,32,0,17,16,0,33,32,0,3,16,0,33,32,0,17,16,0,33,32,0,1,5,7,37,1,52,54,50,22,21,20, + 6,35,34,38,37,52,54,51,50,22,20,6,35,34,38,1,23,5,39,3,39,54,55,54,50,23,22,23,7,38,39,38,34,7,6,2,29,37,50,182, + 2,4,182,51,36,115,28,40,142,202,202,142,39,29,254,161,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,135,2,14,1,116,1,117,2, + 12,253,244,254,139,254,140,253,242,2,40,1,47,77,254,209,2,63,82,116,83,83,58,59,81,253,190,81,59,58,82,82,58,59,81,3,4,77,254,209, + 77,130,121,16,24,70,196,70,24,16,121,7,8,30,84,30,8,1,76,56,51,181,181,51,56,72,44,39,142,1,142,39,44,1,229,254,196,254,67,1, + 189,1,60,1,61,1,192,254,64,254,195,1,117,2,15,253,241,254,139,254,140,253,244,2,12,3,241,212,111,213,254,188,59,81,81,59,58,83,83,58, + 59,81,81,118,82,83,1,236,110,213,111,252,12,57,40,34,98,98,34,40,57,19,16,60,60,16,0,0,0,5,0,170,255,106,7,173,6,110,0,11, + 0,23,0,35,0,52,0,79,0,0,1,16,0,33,32,0,17,16,0,33,32,0,3,16,0,33,32,0,17,16,0,33,32,0,1,20,6,34,38,53, + 51,20,22,50,54,53,1,54,55,54,32,23,22,23,7,38,39,38,35,38,7,6,7,1,20,7,6,7,23,22,7,6,7,6,34,38,53,52,63,1, + 38,39,38,53,51,20,22,50,54,53,1,49,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,135,2,14,1,116,1,117,2,12,253,244,254, + 139,254,140,253,242,3,72,140,196,140,135,61,84,61,254,178,37,50,182,2,4,182,51,36,115,28,40,142,202,202,142,39,29,3,178,70,58,77,32,28, + 1,1,26,27,76,54,27,32,77,58,70,135,61,84,61,2,234,254,196,254,67,1,189,1,60,1,61,1,192,254,64,254,195,1,117,2,15,253,241,254, + 139,254,140,253,244,2,12,3,18,139,197,197,139,83,119,119,83,252,196,56,51,181,181,51,56,72,44,39,142,1,142,39,44,3,131,140,98,81,14,63, + 55,35,43,26,27,54,44,35,53,63,13,82,98,140,83,119,119,83,0,0,0,5,0,170,255,106,7,173,6,110,0,16,0,23,0,30,0,42,0,54, + 0,0,1,54,55,54,32,23,22,23,7,38,39,38,35,38,7,6,7,1,37,23,7,23,7,37,39,21,5,39,55,39,55,1,16,0,33,32,0,17, + 16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,2,29,37,50,182,2,4,182,51,36,115,28,40,142,202,202,142,39,29,1,236,1,39, + 77,198,198,77,254,217,160,254,217,77,198,198,77,253,245,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189, + 254,67,254,195,254,196,254,65,1,76,56,51,181,181,51,56,72,44,39,142,1,142,39,44,3,34,206,110,139,138,110,206,85,85,206,110,138,139,110,253, + 245,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,6,0,170,255,106,7,173, + 6,110,0,3,0,7,0,24,0,33,0,45,0,57,0,0,1,39,1,23,9,1,55,9,1,54,55,54,32,23,22,23,7,38,39,38,35,38,7,6, + 7,1,23,22,14,1,34,38,52,55,5,16,0,33,32,0,17,16,0,33,32,0,3,16,0,33,32,0,17,16,0,33,32,0,2,201,95,1,14,95, + 1,184,254,242,95,1,14,252,47,37,50,182,2,4,182,51,36,115,28,40,142,202,202,142,39,29,3,218,66,27,1,54,76,54,28,251,7,1,191,1, + 60,1,61,1,189,254,67,254,195,254,196,254,65,135,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,3,92,95,1,14,95,254,242,1,14, + 95,254,242,253,145,56,51,181,181,51,56,72,44,39,142,1,142,39,44,3,35,128,53,79,54,54,79,53,190,254,196,254,67,1,189,1,60,1,61,1, + 192,254,64,254,195,1,117,2,15,253,241,254,139,254,140,253,244,2,12,0,0,6,0,170,255,106,7,173,6,110,0,11,0,22,0,34,0,46,0,52, + 0,60,0,0,1,52,54,51,50,22,21,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,19, + 16,0,33,32,0,17,16,0,33,32,0,1,33,52,0,32,0,5,33,38,39,38,32,7,6,2,130,81,59,58,82,82,58,59,81,2,66,82,116,83, + 83,58,59,81,251,230,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,4, + 243,252,15,1,39,1,163,1,39,252,169,2,189,24,69,107,254,210,106,69,3,255,59,81,81,59,58,83,83,58,59,81,81,59,58,83,83,219,1,117, + 2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,252,164,232,1,70,254,186,97,96,76,116,117, + 76,0,0,0,0,8,0,170,255,106,7,173,6,110,0,3,0,7,0,18,0,29,0,41,0,53,0,59,0,67,0,0,1,37,55,13,1,39,37,23, + 1,52,54,51,50,22,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0, + 17,16,0,33,32,0,1,33,52,0,32,0,5,33,38,39,38,32,7,6,6,23,254,168,77,1,88,251,221,77,1,88,77,254,233,81,59,58,82,82, + 58,59,81,2,66,82,116,83,83,58,59,81,251,230,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254, + 67,254,195,254,196,254,65,4,243,252,15,1,39,1,163,1,39,252,169,2,189,24,69,107,254,210,106,69,4,22,240,111,241,110,110,241,111,254,175,59, + 81,81,118,82,83,58,59,81,81,59,58,83,83,145,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61, + 1,192,254,64,252,164,232,1,70,254,186,97,96,76,116,117,76,0,0,0,0,14,0,170,255,106,7,173,6,110,0,11,0,19,0,25,0,78,0,90, + 0,102,0,108,0,120,0,132,0,138,0,144,0,150,0,156,0,162,0,0,1,20,22,51,50,54,53,52,38,35,34,6,1,33,38,39,38,32,7,6, + 5,33,52,0,32,0,1,16,0,33,32,0,17,52,39,21,35,17,38,39,17,35,53,14,1,34,39,35,53,38,52,55,17,38,39,17,35,17,6,7, + 17,22,20,7,21,35,6,34,38,39,21,35,17,6,7,17,35,53,6,7,16,0,33,32,0,17,16,0,33,32,0,1,52,54,51,50,22,21,20,6, + 35,34,38,37,54,55,53,6,7,1,52,38,35,34,6,21,20,22,51,50,54,39,20,6,35,34,38,53,52,54,51,50,22,1,21,22,23,53,38,39, + 38,39,21,54,55,37,38,39,21,22,23,37,6,7,21,54,55,37,6,7,21,22,23,4,150,116,74,85,105,111,79,76,114,254,55,2,189,24,69,107, + 254,210,106,69,3,63,252,15,1,39,1,163,1,39,251,13,1,191,1,60,1,61,1,189,53,68,30,37,68,30,109,142,56,68,43,43,33,34,68,34, + 33,43,43,68,56,142,110,29,68,37,30,68,54,135,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,4,113,34,23,24,33,31,26,22,35, + 253,158,32,35,35,32,1,9,114,76,79,111,105,85,74,116,133,35,22,26,31,33,24,23,34,2,31,36,31,32,103,33,34,31,36,1,14,33,34,43, + 24,252,79,35,32,25,42,1,14,34,33,36,31,4,26,82,108,117,73,79,111,111,252,233,96,76,116,117,76,230,232,1,70,254,186,1,55,254,196,254, + 67,1,189,1,60,155,133,186,1,59,46,41,254,110,89,54,71,36,64,60,156,60,1,61,4,1,253,106,2,150,1,4,254,195,60,156,60,64,36,70, + 55,89,1,147,42,46,254,197,188,134,156,1,117,2,15,253,241,254,139,254,140,253,244,2,12,2,164,24,33,33,24,22,35,32,252,10,1,162,15,18, + 254,145,79,111,111,79,73,117,108,82,25,32,35,22,24,33,33,1,121,163,1,10,140,19,40,10,8,242,20,9,38,30,24,132,33,45,210,25,29,156, + 45,33,253,7,11,195,9,20,0,8,0,170,255,106,7,173,6,110,0,3,0,7,0,11,0,15,0,27,0,39,0,45,0,53,0,0,1,39,1,23, + 9,1,55,9,1,39,1,23,9,1,55,1,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,1,33,52,0, + 32,0,5,33,38,39,38,32,7,6,2,201,95,1,14,95,1,184,254,242,95,1,14,252,219,95,1,14,95,1,184,254,242,95,1,14,250,188,2,14, + 1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,4,243,252,15,1,39,1,163,1, + 39,252,169,2,189,24,69,107,254,210,106,69,4,19,95,1,14,95,254,242,1,14,95,254,242,254,88,95,1,14,95,254,242,1,14,95,254,242,63,1, + 117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,252,164,232,1,70,254,186,97,96,76,116, + 117,76,0,0,0,7,0,170,255,106,7,173,6,110,0,17,0,29,0,41,0,53,0,65,0,71,0,79,0,0,1,55,54,55,54,51,50,23,22,23, + 22,21,20,7,6,7,6,35,3,20,6,34,38,53,51,20,22,50,54,53,33,20,6,34,38,53,51,20,22,50,54,53,1,16,0,33,32,0,17,16, + 0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,1,33,52,0,32,0,5,33,38,39,38,32,7,6,5,196,85,37,31,25,22,13,13,36, + 18,10,5,12,39,31,59,18,140,196,140,135,61,84,61,254,55,140,196,140,135,61,84,61,253,63,2,14,1,116,1,117,2,12,253,244,254,139,254,140, + 253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,4,243,252,15,1,39,1,163,1,39,252,169,2,189,24,69,107,254,210,106,69, + 2,200,116,50,15,11,4,12,34,20,21,14,15,36,20,16,1,192,139,197,197,139,83,119,119,83,139,197,197,139,83,119,119,83,254,98,1,117,2,15, + 253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,252,164,232,1,70,254,186,97,96,76,116,117,76,0, + 0,6,0,170,255,106,7,173,6,110,0,6,0,13,0,25,0,37,0,43,0,51,0,0,1,37,23,7,23,7,37,39,21,5,39,55,39,55,1,16, + 0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,1,33,52,0,32,0,5,33,38,39,38,32,7,6,4,124,1,39, + 77,198,198,77,254,217,160,254,217,77,198,198,77,253,245,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189, + 254,67,254,195,254,196,254,65,4,243,252,15,1,39,1,163,1,39,252,169,2,189,24,69,107,254,210,106,69,4,39,206,110,139,138,110,206,85,85,206, + 110,138,139,110,253,245,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,252,164,232,1, + 70,254,186,97,96,76,116,117,76,0,0,0,0,5,0,95,255,106,8,249,6,110,0,5,0,12,0,19,0,61,0,98,0,0,37,33,52,0,32,0, + 1,21,5,39,55,39,55,5,37,23,7,23,7,37,5,16,0,33,32,0,17,20,7,23,22,23,22,21,20,6,34,39,38,47,1,2,7,0,33,32, + 1,38,3,7,6,7,6,34,38,53,52,55,54,63,1,38,55,16,0,33,32,0,17,52,39,6,35,34,39,38,47,1,23,22,23,38,39,38,33,32, + 7,6,7,54,63,1,7,6,7,6,34,39,6,6,164,252,15,1,39,1,163,1,39,253,184,254,217,77,198,198,77,1,199,1,39,77,198,198,77,254, + 217,252,46,2,14,1,116,1,117,2,12,2,93,59,24,30,54,76,31,25,18,11,42,209,254,250,254,139,254,140,254,249,209,43,10,18,25,31,76,54, + 30,23,60,92,2,135,1,191,1,60,1,61,1,189,1,27,37,38,31,25,18,45,136,41,24,47,154,222,254,194,254,196,224,154,47,24,41,136,45,18, + 25,31,76,27,1,203,232,1,70,254,186,2,116,85,206,110,138,139,110,206,206,110,139,138,110,206,232,1,117,2,15,253,241,254,139,29,27,31,20,24, + 31,37,38,54,31,25,57,32,254,233,209,254,250,1,6,208,1,22,30,57,25,31,54,38,37,31,25,19,30,28,29,254,196,254,67,1,189,1,60,20, + 19,26,31,25,57,136,45,14,15,199,154,224,224,155,198,16,13,45,136,57,25,31,27,20,0,5,0,170,255,106,7,173,6,110,0,7,0,19,0,30, + 0,42,0,54,0,0,0,52,54,50,22,20,6,34,1,52,54,51,50,22,21,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38,5,16,0, + 33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,3,44,150,212,150,150,212,254,192,81,59,58,82,82,58,59,81,2,66, + 82,116,83,83,58,59,81,251,230,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196, + 254,65,1,90,212,150,150,212,150,3,59,59,81,81,59,58,83,83,58,59,81,81,59,58,83,83,219,1,117,2,15,253,241,254,139,254,140,253,244,2, + 12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,0,0,7,0,170,255,106,7,173,6,110,0,3,0,7,0,18,0,29,0,37, + 0,49,0,61,0,0,1,37,55,13,1,39,37,23,1,52,54,51,50,22,20,6,35,34,38,37,52,54,50,22,21,20,6,35,34,38,0,52,54,50, + 22,20,6,34,1,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,6,23,254,168,77,1,88,251,221,77,1,88, + 77,254,233,81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,254,232,75,106,75,75,106,252,179,2,14,1,116,1,117,2,12,253,244,254, + 139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,4,22,240,111,241,110,110,241,111,254,175,59,81,81,118,82,83,58, + 59,81,81,59,58,83,83,254,20,106,75,75,106,75,1,166,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60, + 1,61,1,192,254,64,0,0,0,8,0,170,255,106,7,173,6,110,0,8,0,16,0,20,0,24,0,35,0,46,0,58,0,70,0,0,1,23,22,20, + 6,34,38,52,55,0,52,54,50,22,20,6,34,1,37,55,13,1,39,37,23,1,52,54,51,50,22,20,6,35,34,38,37,52,54,50,22,21,20,6, + 35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,6,80,65,27,54,76,54,27,253,29,150,212,150, + 150,212,2,85,254,168,77,1,88,251,221,77,1,88,77,254,233,81,59,58,82,82,58,59,81,2,66,82,116,83,83,58,59,81,251,230,2,14,1,116, + 1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,3,172,128,53,79,54,54,79,53,254,46, + 212,150,150,212,150,3,82,240,111,241,110,110,241,111,254,175,59,81,81,118,82,83,58,59,81,81,59,58,83,83,145,1,117,2,15,253,241,254,139,254, + 140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,0,0,7,0,35,255,60,8,53,6,110,0,7,0,15,0,19, + 0,23,0,31,0,107,0,148,0,0,0,38,52,54,50,22,20,6,32,38,52,54,50,22,20,6,37,39,37,23,5,37,55,5,0,52,54,50,22,20, + 6,34,1,53,46,1,39,2,17,52,54,55,54,55,0,32,1,22,23,30,1,21,16,3,14,1,7,21,35,53,52,55,54,55,54,19,52,38,34,6, + 7,6,7,6,15,1,14,1,29,1,35,53,6,32,39,21,35,53,52,38,47,1,38,39,38,39,46,1,34,6,21,18,23,22,23,22,29,1,37,22, + 32,55,53,52,55,54,55,54,55,54,55,62,1,55,54,55,54,55,38,39,38,32,7,6,7,22,23,30,2,23,22,23,22,23,22,23,22,21,5,21, + 81,82,116,83,83,253,73,81,81,117,82,82,254,249,77,1,88,77,2,126,254,168,77,1,88,252,200,150,212,150,150,212,253,161,72,86,24,138,104,61, + 59,174,1,7,2,233,1,6,174,59,61,104,138,24,86,72,135,38,129,29,122,2,39,58,37,6,14,105,41,56,94,39,27,136,110,254,251,121,136,27, + 39,94,56,41,105,14,6,37,58,39,2,122,29,129,38,1,76,119,1,9,108,27,48,145,56,17,60,17,2,8,12,12,51,15,17,50,143,222,253,134, + 224,143,51,18,15,51,24,8,2,17,60,17,56,145,48,27,3,40,83,117,81,81,117,83,83,117,81,81,118,82,238,110,241,111,240,240,111,241,252,214, + 212,150,150,212,150,254,120,203,62,91,49,1,23,1,39,83,107,10,223,176,1,8,254,248,175,224,10,107,83,254,217,254,233,49,91,62,203,231,36,31, + 110,57,240,1,18,28,40,35,109,243,113,44,37,64,28,60,63,251,76,30,32,78,251,63,60,28,64,37,44,113,243,109,35,40,28,254,238,240,57,110, + 31,36,231,219,38,37,33,89,59,101,86,34,19,68,120,15,134,56,54,48,14,10,181,144,224,224,143,181,11,14,48,110,134,15,120,68,19,34,86,101, + 59,89,0,0,0,9,0,170,255,106,7,173,6,110,0,11,0,23,0,35,0,47,0,59,0,71,0,79,0,91,0,103,0,0,1,20,6,35,34,38, + 53,52,54,51,50,22,23,52,54,51,50,22,21,20,6,35,34,38,55,20,22,51,50,54,53,52,38,35,34,6,23,52,54,51,50,22,21,20,6,35, + 34,38,37,52,38,35,34,6,21,20,22,51,50,54,39,20,6,35,34,38,53,52,54,51,50,22,2,52,54,50,22,20,6,34,1,16,0,33,32,0, + 17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,3,242,146,92,106,132,139,99,95,143,116,143,95,99,139,132,106,92,146,48,116,74, + 85,105,111,79,76,114,133,34,23,24,33,31,26,22,35,254,167,114,76,79,111,105,85,74,116,133,35,22,26,31,33,24,23,34,17,150,212,150,150,212, + 252,232,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,4,26,102,136,147, + 91,99,139,139,99,99,139,139,99,91,147,136,102,82,108,117,73,79,111,111,79,24,33,33,24,22,35,32,25,79,111,111,79,73,117,108,82,25,32,35, + 22,24,33,33,253,40,212,150,150,212,150,2,38,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1, + 192,254,64,0,0,10,0,170,255,106,7,173,6,110,0,74,0,86,0,94,0,98,0,102,0,107,0,112,0,116,0,121,0,126,0,0,1,16,0,33, + 32,0,17,52,39,17,35,17,38,39,21,23,7,17,35,53,35,21,35,53,35,21,35,53,35,21,35,17,51,17,51,17,39,55,23,53,38,32,7,21, + 55,23,7,17,51,17,51,17,35,53,35,21,35,53,35,21,35,53,35,21,35,17,39,55,53,6,7,17,35,17,6,7,16,0,33,32,0,17,16,0, + 33,32,0,36,52,54,50,22,20,6,34,19,17,51,17,1,51,53,39,23,51,53,7,39,17,21,23,53,38,1,53,7,21,3,6,7,21,55,17,53, + 7,39,21,1,49,1,191,1,60,1,61,1,189,64,68,30,38,6,6,68,52,68,68,68,68,68,68,68,91,77,150,167,254,98,167,150,77,91,68,68, + 68,68,68,68,68,52,68,6,6,37,31,68,65,135,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,3,2,75,106,75,75,106,19,68,1, + 16,68,68,136,52,3,49,52,25,252,249,68,68,27,25,52,49,3,2,234,254,196,254,67,1,189,1,60,170,143,254,133,1,243,44,40,103,4,9,254, + 45,136,136,136,136,136,136,2,56,254,215,1,16,63,111,105,123,96,96,123,105,111,63,254,240,1,41,253,200,136,136,136,136,136,136,1,211,9,4,104, + 40,44,254,12,1,125,144,171,1,117,2,15,253,241,254,139,254,140,253,244,2,12,25,106,75,75,106,75,1,100,2,56,253,200,1,15,177,47,224,99, + 4,34,1,35,127,36,122,22,254,111,224,47,177,1,164,19,23,121,36,254,219,129,34,4,99,0,0,0,0,8,0,170,255,106,12,113,7,108,0,9, + 0,19,0,29,0,37,0,49,0,61,0,73,0,85,0,0,1,33,21,3,51,21,33,53,19,35,37,33,21,3,51,21,33,53,19,35,37,33,21,3, + 51,21,33,53,19,35,0,52,54,50,22,20,6,34,1,20,6,34,38,53,51,20,22,50,54,53,33,20,6,34,38,53,51,20,22,50,54,53,1,16, + 0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,10,246,1,123,248,248,254,123,248,238,254,23,1,123,248,248,254,123, + 248,238,254,23,1,123,248,248,254,123,248,238,252,136,75,106,75,75,106,2,75,140,196,140,135,61,84,61,254,55,140,196,140,135,61,84,61,253,63,2, + 14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,7,108,104,254,244,92,104,1, + 12,92,104,254,244,92,104,1,12,92,104,254,244,92,104,1,12,250,127,106,75,75,106,75,3,68,139,197,197,139,83,119,119,83,139,197,197,139,83,119, + 119,83,254,98,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,0,5,0,170, + 255,106,7,173,6,110,0,11,0,23,0,35,0,43,0,55,0,0,1,39,55,39,55,23,55,23,7,23,7,39,5,16,0,33,32,0,17,16,0,33, + 32,0,3,16,0,33,32,0,17,16,0,33,32,0,4,52,54,50,22,20,6,34,1,39,55,39,55,23,55,23,7,23,7,39,2,149,95,113,113,95, + 113,114,95,113,113,95,114,254,43,1,191,1,60,1,61,1,189,254,67,254,195,254,196,254,65,135,2,14,1,116,1,117,2,12,253,244,254,139,254,140, + 253,242,2,130,150,212,150,150,212,1,30,95,113,113,95,113,114,95,113,113,95,114,3,40,95,113,114,95,113,113,95,114,113,95,113,175,254,196,254,67, + 1,189,1,60,1,61,1,192,254,64,254,195,1,117,2,15,253,241,254,139,254,140,253,244,2,12,28,212,150,150,212,150,2,100,95,113,114,95,113,113, + 95,114,113,95,113,0,0,0,0,4,0,170,255,106,7,173,6,110,0,10,0,21,0,33,0,45,0,0,1,52,54,51,50,22,20,6,35,34,38,37, + 52,54,50,22,21,20,6,35,34,38,5,16,0,33,32,0,17,16,0,33,32,0,19,16,0,33,32,0,17,16,0,33,32,0,2,130,81,59,58,82, + 82,58,59,81,2,66,82,116,83,83,58,59,81,251,230,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253,242,135,1,191,1,60,1,61,1,189, + 254,67,254,195,254,196,254,65,3,253,59,81,81,118,82,83,58,59,81,81,59,58,83,83,217,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1, + 116,254,196,254,67,1,189,1,60,1,61,1,192,254,64,0,0,10,0,170,255,106,7,173,6,110,0,11,0,15,0,19,0,23,0,27,0,31,0,36, + 0,40,0,44,0,55,0,0,19,16,0,33,32,0,17,16,0,33,32,0,1,53,33,21,51,53,33,21,37,39,37,23,5,37,55,5,1,33,17,33, + 1,33,22,33,32,37,54,19,7,1,17,39,18,1,2,39,38,33,32,7,6,3,23,33,170,2,14,1,116,1,117,2,12,253,244,254,139,254,140,253, + 242,1,108,1,170,216,1,170,251,255,77,1,88,77,2,126,254,168,77,1,88,252,57,3,30,252,226,3,84,252,118,196,1,1,1,2,1,20,203,22, + 225,251,212,226,22,5,215,27,190,222,254,194,254,196,224,190,28,224,4,44,2,234,1,117,2,15,253,241,254,139,254,140,253,244,2,12,1,186,135,135, + 135,135,230,110,241,111,240,240,111,241,252,135,1,24,254,97,147,217,201,1,17,158,254,196,1,60,158,254,239,1,179,1,2,191,224,224,191,254,255,157, + 0,9,0,58,255,106,8,38,7,20,0,8,0,29,0,82,0,143,0,157,0,171,0,181,0,187,0,193,0,0,0,50,55,23,6,35,34,39,55,23, + 22,51,50,55,22,21,20,7,6,4,32,36,39,38,53,52,55,22,51,50,1,20,23,37,23,5,22,23,37,23,5,22,23,22,23,22,32,55,54,55, + 54,55,37,55,5,54,55,37,55,5,54,53,52,46,2,39,38,39,6,7,38,35,34,7,38,39,6,7,14,3,7,38,53,52,62,3,55,54,63,1, + 23,30,1,23,54,50,23,62,1,63,1,23,22,23,30,4,21,20,7,23,7,39,6,7,23,7,39,6,7,2,7,6,33,32,39,38,3,38,39,7, + 39,55,38,39,7,39,37,52,46,1,34,14,1,21,35,52,54,50,22,21,33,52,46,1,34,14,1,21,35,52,54,50,22,21,1,38,39,6,7,21, + 22,51,50,63,1,21,54,55,6,35,5,53,35,34,39,22,3,236,130,92,62,120,99,101,118,62,160,114,116,158,146,5,29,54,254,237,254,156,254,236, + 59,35,3,149,160,121,253,93,7,1,77,5,254,180,8,14,1,52,22,254,200,18,22,102,163,181,1,234,181,161,103,26,16,254,205,22,1,46,14,8, + 254,186,5,1,71,6,10,10,22,4,27,42,243,153,116,155,157,116,153,243,42,27,5,21,11,10,128,5,7,19,12,31,5,23,38,15,60,143,253,93, + 105,226,105,93,253,143,59,16,38,23,5,31,12,19,7,5,105,4,107,8,21,104,22,100,19,27,116,192,217,254,224,254,223,217,192,116,29,16,94,22, + 98,20,9,101,4,3,49,21,49,66,49,21,135,140,196,140,1,201,21,49,66,49,21,135,140,196,140,254,58,36,40,26,50,43,36,41,32,136,96,51, + 72,58,254,71,21,63,63,52,2,252,46,120,61,61,120,252,37,66,32,25,68,71,129,147,143,125,75,83,23,23,66,1,199,36,98,21,67,22,74,65, + 105,63,108,58,49,226,119,132,132,118,227,56,53,106,63,103,62,76,21,67,21,82,52,46,102,62,118,25,161,167,58,196,21,21,196,58,167,161,27,114, + 65,101,189,77,69,57,106,119,65,147,24,117,140,58,9,22,137,97,13,13,97,137,22,9,58,140,117,24,147,65,119,106,57,68,77,7,68,7,86,87, + 36,64,34,60,60,254,253,140,158,158,140,1,3,64,54,32,64,34,79,96,7,68,81,43,90,69,69,89,44,140,196,196,140,43,90,69,69,89,44,140, + 196,196,140,254,3,7,11,7,10,145,5,4,132,99,39,70,10,97,97,9,67,0,0,0,0,9,0,96,255,106,8,248,7,20,0,63,0,72,0,93, + 0,168,0,182,0,196,0,206,0,212,0,218,0,0,1,54,53,52,46,2,39,38,39,6,7,38,32,7,38,39,6,7,14,3,21,20,23,54,63,1, + 7,14,1,35,34,39,22,23,37,23,5,22,23,22,23,22,32,55,54,55,54,55,37,55,5,54,55,6,35,34,38,47,1,23,22,4,50,55,23,6, + 35,34,39,55,23,22,51,50,55,22,21,20,7,6,4,32,36,39,38,53,52,55,22,51,50,5,34,38,53,52,54,63,1,52,39,7,39,55,38,53, + 52,62,3,55,54,63,1,23,30,1,23,54,50,23,62,1,63,1,23,22,23,30,4,21,20,7,23,7,39,6,7,23,30,1,21,20,6,35,34,38, + 47,1,6,7,2,7,6,32,39,38,3,38,39,7,6,1,52,46,1,34,14,1,21,35,52,54,50,22,21,33,52,46,1,34,14,1,21,35,52,54, + 50,22,21,1,38,39,6,7,21,22,51,50,63,1,21,54,55,6,35,5,53,35,34,39,22,7,186,2,10,10,22,4,26,42,242,154,116,254,200,116, + 152,244,42,28,5,21,10,10,2,24,80,136,44,17,51,44,48,28,8,16,1,52,22,254,200,18,22,102,164,181,1,233,182,162,102,26,16,254,204,22, + 1,46,16,8,28,48,44,52,16,46,138,82,252,200,130,92,62,120,98,102,118,62,160,114,116,158,146,6,30,54,254,238,254,156,254,236,60,34,2,150, + 160,120,252,124,37,55,62,52,90,8,102,4,100,6,8,18,12,32,4,24,38,14,60,143,253,94,105,225,106,93,253,142,60,16,38,22,5,31,12,20, + 6,4,104,4,106,6,4,90,52,60,54,36,44,52,18,14,24,44,116,192,216,253,192,218,192,116,42,26,16,36,2,228,22,48,66,50,20,136,140,196, + 140,1,202,22,48,66,50,20,136,140,196,140,254,58,36,40,26,50,44,36,40,32,136,96,52,72,58,254,70,20,62,64,52,3,124,40,44,46,102,62, + 118,25,161,167,58,196,21,21,196,58,167,161,27,114,65,101,46,42,39,44,25,44,136,51,60,37,87,76,105,63,108,58,49,226,119,132,132,118,227,56, + 53,106,63,103,68,96,40,60,51,136,44,25,175,46,120,61,61,120,252,37,66,32,25,68,71,129,147,143,125,75,83,23,23,66,65,54,37,44,52,17, + 29,3,74,7,68,6,77,69,57,106,119,65,147,24,117,140,58,9,22,137,97,13,13,97,137,22,9,58,140,117,24,147,65,119,106,57,68,77,7,68, + 7,52,25,29,17,52,44,37,54,60,51,42,104,98,254,253,140,158,158,140,1,3,93,112,45,111,1,196,43,90,69,69,89,44,140,196,196,140,43,90, + 69,69,89,44,140,196,196,140,254,3,7,11,7,10,145,5,4,132,99,39,70,10,97,97,9,67,0,0,0,9,0,58,255,106,8,38,7,20,0,8, + 0,29,0,42,0,95,0,156,0,170,0,180,0,195,0,208,0,0,0,50,55,23,6,35,34,39,55,23,22,51,50,55,22,21,20,7,6,4,32,36, + 39,38,53,52,55,22,51,50,23,6,35,34,39,30,1,50,54,55,6,35,34,1,20,23,37,23,5,22,23,37,23,5,22,23,22,23,22,32,55,54, + 55,54,55,37,55,5,54,55,37,55,5,54,53,52,46,2,39,38,39,6,7,38,35,34,7,38,39,6,7,14,3,7,38,53,52,62,3,55,54,63, + 1,23,30,1,23,54,50,23,62,1,63,1,23,22,23,30,4,21,20,7,23,7,39,6,7,23,7,39,6,7,2,7,6,33,32,39,38,3,38,39, + 7,39,55,38,39,7,39,37,52,54,51,50,22,23,6,7,6,35,34,39,38,55,34,6,21,20,23,62,1,55,38,5,20,7,6,35,34,39,38,39, + 54,55,54,51,50,22,7,22,51,50,55,54,53,52,39,38,35,34,6,3,236,130,92,62,120,99,101,118,62,160,114,116,158,146,5,29,54,254,237,254, + 156,254,236,59,35,3,149,160,121,112,114,119,63,63,53,192,234,189,50,72,58,117,252,125,7,1,77,5,254,180,8,14,1,52,22,254,200,18,22,102, + 163,181,1,234,181,161,103,26,16,254,205,22,1,46,14,8,254,186,5,1,71,6,10,10,22,4,27,42,243,153,116,155,157,116,153,243,42,27,5,21, + 11,10,128,5,7,19,12,31,5,23,38,15,60,143,253,93,105,226,105,93,253,143,59,16,38,23,5,31,12,19,7,5,105,4,107,8,21,104,22,100, + 19,27,116,192,217,254,224,254,223,217,192,116,29,16,94,22,98,20,9,101,4,1,226,99,67,62,93,7,48,76,33,40,67,56,8,253,36,48,5,43, + 69,18,21,2,255,8,56,67,37,36,77,47,8,50,45,59,67,99,164,12,26,46,42,16,4,12,13,44,64,2,252,46,120,61,61,120,252,37,66,32, + 25,68,71,129,147,143,125,75,83,23,23,66,104,31,9,69,76,77,69,10,2,78,36,98,21,67,22,74,65,105,63,108,58,49,226,119,132,132,118,227, + 56,53,106,63,103,62,76,21,67,21,82,52,46,102,62,118,25,161,167,58,196,21,21,196,58,167,161,27,114,65,101,189,77,69,57,106,119,65,147,24, + 117,140,58,9,22,137,97,13,13,97,137,22,9,58,140,117,24,147,65,119,106,57,68,77,7,68,7,86,87,36,64,34,60,60,254,253,140,158,158,140, + 1,3,64,54,32,64,34,79,96,7,68,159,70,95,87,59,69,24,11,33,23,73,43,32,13,13,6,47,33,15,45,29,23,33,12,25,67,66,42,38, + 95,122,3,20,21,25,12,11,3,53,0,0,0,6,0,61,255,106,8,29,7,20,0,17,0,25,0,74,0,131,0,152,0,173,0,0,1,55,22,51, + 50,55,22,51,50,55,23,6,35,34,39,6,35,34,1,23,6,34,39,55,22,50,37,54,53,52,46,2,39,38,39,6,7,38,35,34,7,38,39,6, + 7,14,3,21,20,23,37,23,5,22,23,37,23,5,22,23,22,32,55,54,55,37,55,5,54,55,37,55,5,38,53,52,62,3,55,54,63,1,23,30, + 1,23,54,50,23,62,1,63,1,23,22,23,30,4,21,20,7,23,7,39,6,7,23,7,39,2,7,6,33,32,39,38,3,7,39,55,38,39,7,39, + 1,62,1,51,50,22,21,20,15,1,35,39,38,39,52,54,51,50,23,22,21,37,50,22,23,51,52,55,54,51,50,22,21,6,15,1,35,39,38,53, + 52,54,2,166,92,69,91,58,84,84,58,91,69,92,108,144,74,68,69,73,144,1,184,62,122,194,122,62,90,134,2,186,18,10,10,22,4,27,42,243, + 153,116,155,157,116,153,243,42,27,5,21,11,10,18,1,66,10,254,191,14,23,1,30,26,254,225,103,164,181,1,234,181,164,103,254,225,26,1,30,21, + 15,254,192,10,250,192,17,7,19,12,31,5,23,38,15,60,143,253,93,105,226,105,93,253,143,59,16,38,23,5,31,12,19,7,17,108,10,109,15,32, + 110,26,109,117,195,217,254,224,254,223,217,193,118,109,26,109,30,16,109,10,2,227,10,58,45,46,62,62,159,2,168,49,2,64,47,61,35,13,1,168, + 45,58,10,1,13,35,61,47,64,2,49,168,2,159,62,62,1,140,98,64,44,44,64,98,100,28,28,1,168,120,61,61,120,46,56,130,116,46,102,62, + 118,25,161,167,58,196,21,21,196,58,167,161,27,114,65,101,46,116,130,43,66,44,69,64,121,62,122,231,119,132,132,119,231,122,62,121,57,76,44,66, + 61,124,143,57,106,119,65,147,24,117,140,58,9,22,137,97,13,13,97,137,22,9,58,140,117,24,147,65,119,106,57,143,124,15,66,14,81,87,46,62, + 46,254,247,142,158,158,140,1,11,46,62,46,81,87,14,66,1,149,48,66,61,49,74,74,190,207,61,66,42,72,71,27,16,114,66,48,16,27,71,72, + 42,66,61,207,190,74,74,49,61,0,0,0,0,10,0,61,255,106,8,29,7,20,0,3,0,7,0,15,0,30,0,40,0,55,0,68,0,117,0,174, + 0,184,0,0,1,5,7,45,1,23,5,39,19,23,6,34,39,55,22,50,1,6,7,6,35,34,39,38,53,52,55,54,51,50,22,7,34,6,21,20, + 23,62,1,55,38,5,62,1,51,50,23,22,21,20,7,6,35,34,39,38,23,22,51,50,55,54,53,52,39,38,35,34,6,5,54,53,52,46,2,39, + 38,39,6,7,38,35,34,7,38,39,6,7,14,3,21,20,23,37,23,5,22,23,37,23,5,22,23,22,32,55,54,55,37,55,5,54,55,37,55,5, + 38,53,52,62,3,55,54,63,1,23,30,1,23,54,50,23,62,1,63,1,23,22,23,30,4,21,20,7,23,7,39,6,7,23,7,39,2,7,6,33, + 32,39,38,3,7,39,55,38,39,7,39,1,50,55,54,55,23,6,7,6,33,2,210,1,47,77,254,209,3,1,77,254,209,77,115,62,122,194,122,62, + 90,134,254,252,43,81,32,40,70,54,21,53,47,65,70,101,78,36,48,5,43,69,18,22,1,184,5,100,70,66,47,53,21,54,70,40,32,81,121,12, + 26,48,40,16,4,12,13,44,64,1,147,18,10,10,22,4,27,42,243,153,116,155,157,116,153,243,42,27,5,21,11,10,18,1,66,10,254,191,14,23, + 1,30,26,254,225,103,164,181,1,234,181,164,103,254,225,26,1,30,21,15,254,192,10,250,192,17,7,19,12,31,5,23,38,15,60,143,253,93,105,226, + 105,93,253,143,59,16,38,23,5,31,12,19,7,17,108,10,109,15,32,110,26,109,117,195,217,254,224,254,223,217,193,118,109,26,109,30,16,109,10,3, + 239,202,142,40,28,115,34,53,181,254,253,5,103,212,111,213,110,110,213,111,254,61,120,61,61,120,46,1,6,76,28,11,35,36,45,71,48,44,97,38, + 48,36,14,15,7,52,37,17,29,67,97,44,48,71,45,36,35,11,28,4,3,22,24,28,14,12,3,59,167,130,116,46,102,62,118,25,161,167,58,196, + 21,21,196,58,167,161,27,114,65,101,46,116,130,43,66,44,69,64,121,62,122,231,119,132,132,119,231,122,62,121,57,76,44,66,61,124,143,57,106,119, + 65,147,24,117,140,58,9,22,137,97,13,13,97,137,22,9,58,140,117,24,147,65,119,106,57,143,124,15,66,14,81,87,46,62,46,254,247,142,158,158, + 140,1,11,46,62,46,81,87,14,66,254,127,142,40,43,72,54,53,181,0,0,8,0,61,255,106,8,29,7,20,0,14,0,24,0,39,0,52,0,105, + 0,168,0,181,0,190,0,0,1,6,7,6,35,34,39,38,53,52,55,54,51,50,22,7,34,6,21,20,23,62,1,55,38,5,62,1,51,50,23,22, + 21,20,7,6,35,34,39,38,23,22,51,50,55,54,53,52,39,38,35,34,6,5,54,53,52,46,2,39,38,39,6,7,38,35,34,7,38,39,6,7, + 14,3,21,20,23,22,23,37,23,5,22,23,37,23,5,23,22,23,22,32,55,54,63,1,37,55,5,54,55,37,55,0,50,23,62,1,63,1,23,22, + 23,30,4,21,20,6,21,6,7,23,7,39,6,7,23,7,39,7,2,7,6,33,32,39,38,3,39,7,39,55,38,39,7,39,55,38,39,53,52,62, + 3,55,54,63,1,23,30,1,23,19,55,39,55,5,21,7,23,21,5,39,55,39,2,50,55,23,6,35,34,39,55,3,108,43,81,32,40,70,54,21, + 53,47,65,70,101,78,36,48,5,43,69,18,22,1,184,5,100,70,66,47,53,21,54,70,40,32,81,121,12,26,48,40,16,4,12,13,44,64,1,147, + 18,10,10,22,4,27,42,243,153,116,155,157,116,153,243,42,27,5,21,11,10,2,7,9,1,66,10,254,191,14,23,1,30,26,254,225,2,102,163,181, + 1,234,181,161,103,3,254,225,26,1,30,21,15,254,192,10,253,211,226,105,93,253,143,59,16,38,23,5,31,12,19,7,1,3,13,108,10,109,15,32, + 110,26,109,4,116,192,217,254,224,254,223,217,192,116,3,109,26,109,30,16,109,10,108,14,3,7,19,12,31,5,23,38,15,60,143,253,93,163,80,144, + 65,1,3,60,60,254,253,65,144,80,11,132,91,62,119,100,101,118,62,3,168,76,28,11,35,36,45,71,48,44,97,38,48,36,14,15,7,52,37,17, + 29,67,97,44,48,71,45,36,35,11,28,4,3,22,24,28,14,12,3,59,167,131,115,46,102,62,118,25,161,167,58,196,21,21,196,58,167,161,27,114, + 65,101,46,15,36,130,65,43,66,44,69,64,121,62,122,5,226,119,132,132,118,227,5,122,62,121,57,76,44,66,3,19,13,97,137,22,9,58,140,117, + 24,147,65,119,106,57,7,28,7,138,87,15,66,14,81,87,46,62,46,8,254,253,140,158,158,140,1,3,8,46,62,46,81,87,14,66,15,96,129,42, + 57,106,119,65,147,24,117,140,58,9,22,137,97,251,58,61,78,119,141,89,46,45,89,141,119,78,61,1,218,46,120,61,61,120,0,0,0,11,0,61, + 255,106,8,29,7,20,0,14,0,24,0,39,0,52,0,101,0,158,0,166,0,175,0,184,0,188,0,192,0,0,1,6,7,6,35,34,39,38,53,52, + 55,54,51,50,22,7,34,6,21,20,23,62,1,55,38,5,62,1,51,50,23,22,21,20,7,6,35,34,39,38,23,22,51,50,55,54,53,52,39,38, + 35,34,6,5,54,53,52,46,2,39,38,39,6,7,38,35,34,7,38,39,6,7,14,3,21,20,23,37,23,5,22,23,37,23,5,22,23,22,32,55, + 54,55,37,55,5,54,55,37,55,5,38,53,52,62,3,55,54,63,1,23,30,1,23,54,50,23,62,1,63,1,23,22,23,30,4,21,20,7,23,7, + 39,6,7,23,7,39,2,7,6,33,32,39,38,3,7,39,55,38,39,7,39,1,54,50,23,7,38,34,7,37,54,32,23,7,38,35,34,7,0,50, + 55,23,6,35,34,39,55,1,23,5,39,37,5,7,37,3,108,43,81,32,40,70,54,21,53,47,65,70,101,78,36,48,5,43,69,18,22,1,184,5, + 100,70,66,47,53,21,54,70,40,32,81,121,12,26,48,40,16,4,12,13,44,64,1,147,18,10,10,22,4,27,42,243,153,116,155,157,116,153,243,42, + 27,5,21,11,10,18,1,66,10,254,191,14,23,1,30,26,254,225,103,164,181,1,234,181,164,103,254,225,26,1,30,21,15,254,192,10,250,192,17,7, + 19,12,31,5,23,38,15,60,143,253,93,105,226,105,93,253,143,59,16,38,23,5,31,12,19,7,17,108,10,109,15,32,110,26,109,117,195,217,254,224, + 254,223,217,193,118,109,26,109,30,16,109,10,3,71,70,196,70,96,30,84,30,254,144,181,2,6,181,96,142,202,200,144,1,23,132,91,62,119,100,101, + 118,62,1,246,77,254,209,77,254,123,1,47,77,254,209,3,168,76,28,11,35,36,45,71,48,44,97,38,48,36,14,15,7,52,37,17,29,67,97,44, + 48,71,45,36,35,11,28,4,3,22,24,28,14,12,3,59,167,130,116,46,102,62,118,25,161,167,58,196,21,21,196,58,167,161,27,114,65,101,46,116, + 130,43,66,44,69,64,121,62,122,231,119,132,132,119,231,122,62,121,57,76,44,66,61,124,143,57,106,119,65,147,24,117,140,58,9,22,137,97,13,13, + 97,137,22,9,58,140,117,24,147,65,119,106,57,143,124,15,66,14,81,87,46,62,46,254,247,142,158,158,140,1,11,46,62,46,81,87,14,66,254,19, + 99,99,95,60,60,245,181,181,96,142,142,1,250,46,120,61,61,120,2,61,110,213,111,212,212,111,213,0,0,5,0,61,255,106,8,29,7,20,0,32, + 0,44,0,52,0,100,0,142,0,0,1,20,6,7,23,22,20,6,34,38,53,52,53,6,34,39,55,22,50,55,23,54,63,1,46,1,53,51,20,22, + 50,54,53,33,20,6,34,38,53,51,20,22,50,54,53,3,54,32,23,7,38,32,7,1,38,16,54,63,1,54,63,1,23,30,1,23,54,50,23,62, + 1,63,1,23,22,31,1,30,1,20,7,23,7,39,6,7,23,7,39,2,0,32,0,3,7,39,55,38,39,7,39,5,18,33,50,36,55,37,55,5, + 54,55,37,55,5,54,53,52,47,1,38,39,6,7,38,32,7,38,39,6,15,1,6,21,20,23,37,23,5,22,23,37,23,6,66,128,77,32,27,54, + 76,54,110,194,118,62,91,132,91,51,7,15,32,77,128,135,61,84,61,254,55,140,196,140,135,61,84,61,247,181,2,6,181,96,142,254,110,144,253,213, + 17,32,22,20,23,38,15,60,143,253,93,105,226,105,93,253,143,59,16,38,23,20,43,11,17,108,10,109,15,32,110,26,109,117,254,100,253,191,254,102, + 118,109,26,109,30,16,109,10,1,59,215,1,222,245,1,89,103,254,225,26,1,30,21,15,254,192,10,1,65,18,26,30,16,43,243,153,116,254,200,116, + 153,243,42,27,16,32,19,1,66,10,254,191,14,23,1,30,26,4,136,139,180,14,63,53,79,54,54,44,3,3,53,61,120,46,46,99,24,29,63,14, + 180,139,83,119,119,83,139,197,197,139,83,119,119,83,252,218,181,181,96,142,142,1,198,124,1,6,196,106,97,117,140,58,9,22,137,97,13,13,97,137, + 22,9,58,140,117,97,204,160,200,124,15,66,14,81,87,46,62,46,254,247,254,212,1,42,1,11,46,62,46,81,87,14,66,230,254,30,251,231,122,62, + 121,57,76,44,66,43,130,81,136,141,174,98,167,58,196,21,21,196,58,167,161,84,168,110,107,130,43,66,44,69,64,121,62,0,0,0,0,6,0,61, + 255,106,8,29,7,20,0,52,0,115,0,123,0,131,0,135,0,139,0,0,1,54,53,52,46,2,39,38,39,6,7,38,35,34,7,38,39,6,7,14, + 3,21,20,23,22,23,37,23,5,22,23,37,23,5,23,22,23,22,32,55,54,63,1,37,55,5,54,55,37,55,0,50,23,62,1,63,1,23,22,23, + 30,4,21,20,6,21,6,7,23,7,39,6,7,23,7,39,7,2,7,6,33,32,39,38,3,39,7,39,55,38,39,7,39,55,38,39,53,52,62,3, + 55,54,63,1,23,30,1,23,3,33,38,39,38,32,7,6,5,33,52,55,54,51,50,0,3,1,55,1,5,39,1,23,7,42,18,10,10,22,4,27, + 42,243,153,116,155,157,116,153,243,42,27,5,21,11,10,2,7,9,1,66,10,254,191,14,23,1,30,26,254,225,2,102,163,181,1,234,181,161,103,3, + 254,225,26,1,30,21,15,254,192,10,253,211,226,105,93,253,143,59,16,38,23,5,31,12,19,7,1,3,13,108,10,109,15,32,110,26,109,4,116,192, + 217,254,224,254,223,217,192,116,3,109,26,109,30,16,109,10,108,14,3,7,19,12,31,5,23,38,15,60,143,253,93,134,2,189,24,69,107,254,210,106, + 69,3,63,252,15,147,147,210,209,1,40,149,254,242,95,1,14,252,219,95,1,14,95,2,218,131,115,46,102,62,118,25,161,167,58,196,21,21,196,58, + 167,161,27,114,65,101,46,15,36,130,65,43,66,44,69,64,121,62,122,5,226,119,132,132,118,227,5,122,62,121,57,76,44,66,3,19,13,97,137,22, + 9,58,140,117,24,147,65,119,106,57,7,28,7,138,87,15,66,14,81,87,46,62,46,8,254,253,140,158,158,140,1,3,8,46,62,46,81,87,14,66, + 15,96,129,42,57,106,119,65,147,24,117,140,58,9,22,137,97,251,71,97,75,116,117,75,231,231,164,163,254,186,1,126,1,14,95,254,242,95,95,1, + 14,95,0,0,0,1,255,185,4,154,0,199,6,18,0,3,0,10,64,3,0,3,4,0,16,212,204,48,17,51,3,35,199,117,153,6,18,254,136,0, + 0,2,252,215,5,14,255,41,5,217,0,3,0,7,0,165,64,13,4,0,206,6,2,8,1,100,0,5,100,4,8,16,212,252,220,236,49,0,16,212, + 60,236,50,48,0,75,176,14,84,75,176,17,84,91,88,189,0,8,0,64,0,1,0,8,0,8,255,192,56,17,55,56,89,1,75,176,14,84,75,176, + 13,84,91,75,176,23,84,91,88,189,0,8,255,192,0,1,0,8,0,8,0,64,56,17,55,56,89,1,75,176,17,84,75,176,25,84,91,88,189,0, + 8,0,64,0,1,0,8,0,8,255,192,56,17,55,56,89,0,75,176,24,84,88,189,0,8,255,192,0,1,0,8,0,8,0,64,56,17,55,56,89, + 64,17,96,1,96,2,96,5,96,6,112,1,112,2,112,5,112,6,8,1,93,1,51,21,35,37,51,21,35,254,94,203,203,254,121,203,203,5,217,203, + 203,203,0,0,0,1,253,115,4,238,254,240,5,246,0,3,0,127,64,17,2,3,0,3,1,0,0,3,66,0,2,250,4,1,3,3,4,16,196,16, + 192,49,0,16,244,204,48,75,83,88,7,16,5,201,7,16,5,201,89,34,0,75,176,12,84,88,189,0,4,255,192,0,1,0,4,0,4,0,64,56, + 17,55,56,89,0,75,176,14,84,88,189,0,4,0,64,0,1,0,4,0,4,255,192,56,17,55,56,89,64,32,6,2,21,2,37,1,37,2,54,2, + 70,2,86,2,106,1,103,2,9,15,0,15,1,31,0,31,1,47,0,47,1,6,93,1,93,1,51,3,35,254,55,185,228,153,5,246,254,248,0,0, + 0,1,252,182,5,14,255,74,5,233,0,29,0,117,64,33,22,16,15,3,19,12,7,1,0,3,8,23,12,195,4,19,195,27,8,250,30,16,1,15, + 0,7,22,86,24,7,86,9,30,16,212,236,212,236,17,57,57,57,57,49,0,16,244,60,236,212,236,50,18,23,57,17,18,23,57,48,0,75,176,12, + 84,88,189,0,30,255,192,0,1,0,30,0,30,0,64,56,17,55,56,89,0,75,176,14,84,88,189,0,30,0,64,0,1,0,30,0,30,255,192,56, + 17,55,56,89,180,16,11,31,26,2,93,1,39,46,1,35,34,6,29,1,35,52,54,51,50,22,31,1,30,1,51,50,54,61,1,51,14,1,35,34, + 38,253,252,57,25,31,12,36,40,125,103,86,36,61,48,57,23,34,15,32,40,125,2,103,84,34,59,5,57,33,14,11,50,45,6,101,118,16,27,30, + 13,12,51,41,6,100,119,16,0,1,253,12,4,238,254,139,5,246,0,3,0,137,64,17,1,2,3,2,0,3,3,2,66,0,1,250,4,1,3,3, + 4,16,196,16,192,49,0,16,244,204,48,75,83,88,7,16,5,201,7,16,5,201,89,34,0,75,176,12,84,88,189,0,4,255,192,0,1,0,4,0, + 4,0,64,56,17,55,56,89,0,75,176,14,84,88,189,0,4,0,64,0,1,0,4,0,4,255,192,56,17,55,56,89,64,42,6,0,6,1,22,0, + 18,1,36,0,36,1,53,1,67,1,85,0,85,1,159,0,159,1,175,0,175,1,14,15,0,15,3,31,0,31,3,47,0,47,3,6,93,1,93,1, + 19,35,3,253,199,196,153,230,5,246,254,248,1,8,0,0,0,1,252,207,4,238,255,49,5,248,0,6,0,119,64,10,4,0,5,2,250,7,4,2, + 6,7,16,212,196,57,49,0,16,244,60,196,57,48,0,75,176,12,84,88,189,0,7,255,192,0,1,0,7,0,7,0,64,56,17,55,56,89,0,75, + 176,14,84,88,189,0,7,0,64,0,1,0,7,0,7,255,192,56,17,55,56,89,1,75,176,14,84,88,189,0,7,255,192,0,1,0,7,0,7,0, + 64,56,17,55,56,89,64,19,15,0,15,1,12,4,31,0,31,1,29,4,47,0,47,1,45,4,9,0,93,1,51,19,35,39,7,35,253,162,188,211, + 139,166,166,139,5,248,254,246,178,178,0,0,0,1,252,207,4,238,255,49,5,248,0,6,0,134,64,10,3,4,1,0,250,7,3,5,1,7,16,212, + 196,57,49,0,16,244,196,50,57,48,0,75,176,12,84,75,176,9,84,91,75,176,10,84,91,75,176,11,84,91,88,189,0,7,255,192,0,1,0,7, + 0,7,0,64,56,17,55,56,89,0,75,176,14,84,88,189,0,7,0,64,0,1,0,7,0,7,255,192,56,17,55,56,89,1,75,176,14,84,88,189, + 0,7,255,192,0,1,0,7,0,7,0,64,56,17,55,56,89,64,19,0,0,3,3,0,6,16,0,18,3,16,6,32,0,34,3,32,6,9,0,93, + 1,3,51,23,55,51,3,253,162,211,139,166,166,139,211,4,238,1,10,178,178,254,246,0,0,1,252,199,5,6,255,57,5,248,0,13,0,0,3,35, + 46,1,35,34,6,7,35,62,1,51,50,22,199,118,13,99,83,82,97,16,118,10,160,143,144,159,5,6,54,57,55,56,119,123,122,0,0,1,252,199, + 5,6,255,57,5,248,0,13,0,106,64,14,7,0,4,195,11,250,14,7,86,8,1,86,0,14,16,212,236,212,236,49,0,16,244,252,204,50,48,0, + 75,176,12,84,88,189,0,14,255,192,0,1,0,14,0,14,0,64,56,17,55,56,89,0,75,176,14,84,88,189,0,14,0,64,0,1,0,14,0,14, + 255,192,56,17,55,56,89,1,75,176,14,84,75,176,15,84,91,88,189,0,14,255,192,0,1,0,14,0,14,0,64,56,17,55,56,89,1,51,30,1, + 51,50,54,55,51,14,1,35,34,38,252,199,118,13,99,83,82,97,16,118,10,160,143,144,159,5,248,54,57,55,56,119,123,122,0,0,0,1,253,154, + 5,14,254,102,5,219,0,3,0,71,183,0,206,2,4,1,100,0,4,16,212,236,49,0,16,212,236,48,0,75,176,14,84,75,176,17,84,91,88,189, + 0,4,0,64,0,1,0,4,0,4,255,192,56,17,55,56,89,0,75,176,24,84,88,189,0,4,255,192,0,1,0,4,0,4,0,64,56,17,55,56, + 89,1,51,21,35,253,154,204,204,5,219,205,0,2,252,230,4,238,255,178,5,246,0,3,0,7,0,19,64,7,0,4,3,7,8,0,4,16,204,49, + 0,16,212,60,204,50,48,1,51,3,35,3,51,3,35,254,249,185,228,153,139,185,228,153,5,246,254,248,1,8,254,248,0,2,252,78,4,238,255,26, + 5,246,0,3,0,7,0,0,1,19,35,3,33,19,35,3,253,7,196,153,228,2,8,196,153,228,5,246,254,248,1,8,254,248,1,8,0,1,0,0, + 0,0,0,150,0,150,0,3,0,0,53,51,21,35,150,150,150,150,0,0,0,2,0,0,0,0,1,144,0,150,0,3,0,7,0,0,55,51,21,35, + 39,51,21,35,250,150,150,250,150,150,150,150,150,150,0,0,0,3,0,0,0,0,1,144,1,144,0,3,0,7,0,11,0,0,19,51,21,35,23,51, + 21,35,39,51,21,35,125,150,150,125,150,150,250,150,150,1,144,150,100,150,150,150,0,0,0,3,0,0,255,6,1,144,0,150,0,3,0,7,0,11, + 0,0,23,51,21,35,19,51,21,35,39,51,21,35,125,150,150,125,150,150,250,150,150,100,150,1,144,150,150,150,0,0,0,2,0,0,255,6,0,150, + 0,150,0,3,0,7,0,0,21,51,21,35,17,51,21,35,150,150,150,150,100,150,1,144,150,0,0,0,0,4,0,0,255,6,1,144,0,150,0,3, + 0,7,0,11,0,15,0,0,23,51,21,35,17,51,21,35,7,51,21,35,17,51,21,35,250,150,150,150,150,250,150,150,150,150,100,150,1,144,150,100, + 150,1,144,150,0,1,0,130,255,236,7,239,2,157,0,38,0,0,1,20,23,22,59,1,21,35,34,39,38,39,6,7,4,35,34,39,36,3,38,55, + 51,6,21,20,23,22,51,36,55,54,55,54,53,52,39,51,22,6,239,70,63,63,60,102,116,71,80,24,155,233,254,253,211,196,124,254,183,1,1,64, + 184,65,203,104,151,1,4,190,199,123,59,29,184,19,1,248,208,59,53,184,73,83,66,131,53,58,38,101,1,8,138,92,94,136,125,67,34,2,55,58, + 109,52,119,62,55,75,0,0,255,255,255,236,0,0,1,135,2,88,16,6,20,59,0,0,255,255,255,236,0,0,2,126,2,88,16,6,20,60,0,0, + 0,2,0,130,255,165,8,92,3,17,0,44,0,62,0,0,37,6,7,4,33,36,39,36,3,38,55,51,6,21,20,23,22,33,50,37,55,38,39,38, + 53,52,55,54,55,54,51,50,23,22,23,22,21,20,7,22,51,33,21,33,34,39,54,53,52,39,38,39,38,35,34,7,6,7,6,21,20,23,22,6, + 120,104,110,254,232,254,240,254,207,125,254,183,1,1,64,184,65,203,81,1,43,232,1,29,28,34,29,82,4,22,188,58,52,82,81,137,18,4,80,9, + 7,1,7,254,244,105,111,104,5,14,52,34,40,24,22,61,19,6,41,49,36,43,24,60,1,39,103,1,6,138,92,94,136,115,77,31,54,4,27,44, + 124,121,31,36,155,75,23,50,83,150,37,30,144,106,1,184,223,65,122,20,27,71,39,25,10,25,60,19,18,56,66,78,0,2,255,236,0,0,3,63, + 3,217,0,15,0,48,0,0,1,54,53,52,39,38,7,6,7,6,7,20,23,22,51,50,1,51,50,55,54,55,54,55,6,7,6,39,38,53,52,55, + 54,55,54,51,50,23,22,23,22,21,20,7,6,7,6,35,33,2,86,41,66,31,44,52,40,40,1,55,40,42,72,253,174,241,84,151,79,60,31,15, + 63,97,130,78,98,8,23,150,78,76,90,66,96,46,23,78,74,124,109,145,254,191,2,25,43,77,59,51,25,1,1,42,41,51,80,38,25,254,183,23, + 12,93,48,50,55,2,2,69,87,129,52,44,148,69,36,50,72,102,51,140,208,143,136,44,39,0,0,0,0,2,255,236,0,0,4,32,3,8,0,33, + 0,53,0,0,1,22,23,22,21,20,7,6,7,22,59,1,21,35,34,39,6,43,1,53,51,50,55,38,39,38,53,52,55,54,55,54,51,50,7,34, + 7,6,7,6,21,20,23,22,23,54,55,54,53,52,39,38,39,38,2,102,183,24,8,21,29,36,39,147,127,217,136,185,185,136,217,127,147,39,29,36, + 21,8,23,185,30,65,63,63,15,18,56,24,10,24,31,68,63,36,25,11,23,57,19,2,250,80,150,50,42,73,49,67,50,17,184,57,57,184,17,40, + 77,46,76,44,48,143,87,14,184,10,32,53,21,29,43,53,68,22,21,69,50,46,24,26,52,33,10,0,0,2,0,107,254,12,6,192,2,228,0,46, + 0,64,0,0,37,38,39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22,23,22,51,33,21,33,35,6,7,6,7,6,39,36,39,38,53,52, + 55,51,6,21,20,23,22,33,50,55,54,19,54,39,38,39,38,35,34,7,6,7,6,21,20,23,22,23,22,4,184,66,46,121,57,147,6,40,147,41, + 87,112,56,99,50,20,6,26,4,1,7,254,244,48,45,61,128,158,175,205,254,142,94,69,62,184,62,27,60,1,6,140,150,213,108,4,22,19,47,34, + 39,34,21,51,21,10,57,76,100,47,10,5,13,35,43,109,185,61,26,165,69,19,50,88,145,58,214,1,184,122,70,145,78,86,1,2,190,138,125,166, + 96,107,155,76,58,130,68,98,1,90,122,87,75,35,25,10,27,58,30,25,60,44,59,20,9,0,0,0,255,255,255,236,0,0,3,63,3,217,16,6, + 22,206,0,0,255,255,255,236,0,0,4,32,3,8,16,6,22,207,0,0,255,255,255,236,0,0,1,135,3,232,16,38,22,203,0,0,16,7,22,196, + 0,224,3,82,255,255,255,236,0,0,2,126,3,232,16,38,22,204,0,0,16,7,22,196,0,224,3,82,0,2,0,0,0,0,1,182,1,183,0,11, + 0,23,0,0,37,52,39,38,34,6,21,20,23,22,50,62,1,20,7,6,34,39,38,52,55,54,50,23,1,60,28,28,82,56,28,28,82,56,122,63, + 64,184,63,64,64,63,184,64,220,40,28,29,56,41,42,28,27,56,133,184,64,64,64,64,184,64,63,63,255,255,0,130,254,144,7,239,3,32,16,39, + 22,197,2,188,2,138,16,39,22,213,2,169,254,144,16,6,22,202,0,0,255,255,255,236,254,244,2,6,3,232,16,38,22,203,0,0,16,39,22,197, + 0,99,3,82,16,7,22,213,0,80,254,244,255,255,255,236,254,244,2,126,3,232,16,38,22,204,0,0,16,39,22,197,0,99,3,82,16,7,22,213, + 0,80,254,244,255,255,0,130,255,236,7,239,3,182,16,39,22,199,2,188,3,32,16,6,22,202,0,0,255,255,255,236,0,0,1,243,4,226,16,38, + 22,203,0,0,16,7,22,199,0,99,4,76,255,255,255,236,0,0,2,126,4,226,16,38,22,204,0,0,16,7,22,199,0,99,4,76,255,255,0,157, + 254,12,5,62,5,175,16,38,20,134,0,0,16,7,5,124,0,138,255,56,255,255,255,236,0,0,4,92,5,75,16,38,20,135,0,0,16,7,5,124, + 0,88,254,212,255,255,255,236,0,0,5,62,5,75,16,38,20,136,0,0,16,7,5,124,0,88,254,212,255,255,0,157,254,12,5,62,5,170,16,38, + 20,134,0,0,16,7,22,200,2,63,5,20,255,255,255,236,0,0,4,92,5,70,16,38,20,135,0,0,16,7,22,200,2,13,4,176,255,255,255,236, + 0,0,5,62,5,70,16,38,20,136,0,0,16,7,22,200,2,13,4,176,255,255,0,157,254,12,5,62,5,170,16,38,20,134,0,0,16,7,22,198, + 1,194,4,26,255,255,255,236,0,0,4,92,5,70,16,38,20,135,0,0,16,7,22,198,1,144,3,182,255,255,255,236,0,0,5,62,5,70,16,38, + 20,136,0,0,16,7,22,198,1,144,3,182,255,255,0,157,254,12,5,62,4,176,16,38,20,134,0,0,16,39,22,196,2,63,4,26,16,7,22,199, + 1,231,0,25,255,255,255,236,254,62,4,92,4,76,16,38,20,135,0,0,16,39,22,199,1,144,255,56,16,7,22,196,2,13,3,182,255,255,255,236, + 254,62,5,62,4,76,16,38,20,136,0,0,16,39,22,199,1,156,255,56,16,7,22,196,2,13,3,182,0,1,0,0,5,51,3,95,7,43,0,3, + 0,0,9,1,53,1,3,95,252,161,3,95,6,149,254,158,150,1,98,0,0,1,0,213,254,86,5,39,5,213,0,19,0,74,64,33,17,17,1,2, + 1,2,17,16,17,16,66,11,149,10,17,2,3,0,175,16,19,11,16,1,17,2,28,4,54,17,28,0,20,16,220,236,252,236,17,57,57,204,49,0, + 47,60,236,50,57,57,220,236,48,75,83,88,7,16,4,237,7,16,4,237,89,34,178,31,21,1,1,93,19,51,1,17,51,17,20,7,6,43,1,53, + 51,50,55,54,53,1,17,35,213,184,2,226,184,82,81,181,254,233,105,38,38,253,30,184,5,213,251,131,4,125,250,23,214,96,96,156,48,49,173,4, + 125,251,131,0,0,1,0,15,0,0,2,31,4,96,0,11,0,50,64,17,2,11,169,5,8,0,188,6,5,2,1,8,8,11,0,70,12,16,252,60, + 60,236,50,50,49,0,47,228,220,60,236,50,48,64,11,16,13,64,13,80,13,96,13,112,13,5,1,93,19,51,17,51,21,35,17,35,17,35,53,51, + 195,184,164,164,184,180,180,4,96,254,8,164,254,60,1,196,164,0,0,0,0,2,254,242,254,86,2,46,4,96,0,14,0,23,0,0,19,32,53,52, + 33,51,17,51,17,51,21,35,6,7,6,3,35,34,23,22,51,50,55,54,33,254,209,1,14,193,184,181,191,18,53,82,32,181,119,3,4,123,105,38, + 18,254,86,221,205,4,96,251,160,155,112,63,96,1,16,51,65,48,23,0,255,255,1,146,6,99,3,232,8,51,16,39,0,113,0,189,2,61,16,7, + 22,185,4,188,1,85,0,0,255,255,1,146,6,97,3,232,8,52,16,39,0,113,0,189,0,255,16,7,22,185,4,188,2,91,0,0,255,255,1,146, + 6,94,3,232,8,51,16,39,22,193,4,188,1,80,16,7,0,113,0,189,2,61,0,0,255,255,1,147,6,99,3,229,8,90,16,39,22,186,4,240, + 2,100,16,7,22,185,4,188,1,85,0,0,255,255,1,147,6,99,3,229,8,90,16,39,22,188,4,140,2,100,16,7,22,185,4,188,1,85,0,0, + 255,255,1,146,6,97,3,232,8,90,16,39,22,186,4,240,2,100,16,7,0,113,0,189,0,255,0,0,255,255,1,146,6,97,3,232,8,90,16,39, + 22,188,4,140,2,100,16,7,0,113,0,189,0,255,0,0,255,255,1,118,6,106,4,10,8,51,16,39,22,187,4,192,1,92,16,7,0,113,0,189, + 2,61,0,0,255,255,1,139,6,99,3,237,8,90,16,39,22,190,4,188,2,98,16,7,22,185,4,188,1,85,0,0,255,255,1,118,6,106,4,10, + 8,86,16,39,22,185,4,188,2,125,16,7,22,187,4,192,1,92,0,0,255,255,1,139,6,99,3,237,8,87,16,39,22,190,4,188,1,117,16,7, + 22,193,4,188,2,124,0,0,255,255,1,118,6,106,4,48,8,90,16,39,22,186,5,64,2,100,16,7,22,187,4,192,1,92,0,0,255,255,1,139, + 6,99,5,24,8,58,16,39,22,189,4,188,1,117,16,7,22,186,6,40,2,68,0,0,255,255,1,139,6,99,4,109,8,58,16,39,22,188,5,226, + 2,68,16,7,22,189,4,188,1,117,0,0,255,255,1,118,6,99,4,10,8,117,16,39,22,189,4,188,1,117,16,7,22,187,4,192,2,140,0,0, + 255,255,1,118,6,86,4,10,8,89,16,39,22,192,4,188,1,80,16,7,22,187,4,192,2,112,0,0,255,255,1,131,6,86,3,245,8,90,16,39, + 22,192,4,188,1,80,16,7,22,186,4,240,2,100,0,0,255,255,1,131,6,86,3,245,8,90,16,39,22,192,4,188,1,80,16,7,22,188,4,140, + 2,100,0,0,255,255,1,131,6,86,3,245,8,139,16,39,2,186,4,171,2,16,16,7,22,192,4,188,1,80,0,0,255,255,1,139,6,99,5,7, + 8,91,16,39,2,186,6,16,1,224,16,7,22,189,4,188,1,117,0,0,255,255,252,154,4,123,255,80,6,110,16,38,2,178,0,0,16,7,2,184, + 254,248,0,90,0,1,0,0,0,0,1,44,1,44,0,3,0,0,17,33,17,33,1,44,254,212,1,44,254,212,0,0,0,1,0,0,255,227,3,79, + 5,213,0,15,0,0,61,1,30,1,51,50,54,53,17,51,17,16,6,35,34,38,91,194,104,143,113,202,211,247,96,190,61,236,81,81,149,203,3,238, + 252,18,254,230,234,44,0,0,255,255,255,171,254,12,5,19,2,38,16,38,23,4,0,0,16,7,5,127,2,6,249,30,0,1,255,171,254,12,4,246, + 2,38,0,24,0,0,1,51,22,23,22,23,22,59,1,21,35,34,39,2,7,4,33,53,32,55,54,55,54,53,52,2,120,184,30,3,10,73,42,101, + 195,250,130,50,68,251,254,228,254,190,1,48,203,218,35,10,2,38,112,30,103,77,44,184,62,254,234,133,151,184,128,138,208,58,72,126,255,255,0,144, + 254,200,6,35,7,196,16,39,5,127,2,188,1,144,16,6,20,194,0,0,255,255,255,236,0,0,2,96,7,196,16,39,5,127,255,83,1,144,16,6, + 20,195,0,0,255,255,255,236,0,0,2,186,7,196,16,39,5,127,255,83,1,144,16,6,20,196,0,0,255,255,0,130,254,240,6,191,3,70,16,39, + 5,127,0,188,253,18,16,6,20,212,0,0,255,255,255,236,254,212,2,56,4,64,16,39,5,127,255,43,254,12,16,39,22,197,0,99,254,212,16,6, + 20,59,0,0,255,255,255,236,254,212,2,126,4,64,16,39,5,127,255,43,254,12,16,39,22,197,0,99,254,212,16,6,20,60,0,0,255,255,255,171, + 254,12,4,126,4,114,16,39,5,127,0,188,254,62,16,6,20,146,0,0,0,1,0,193,0,0,2,57,6,20,0,11,0,57,181,6,2,8,0,70, + 12,16,252,236,196,75,176,14,83,75,176,16,81,90,88,185,0,6,255,192,56,89,49,0,180,0,151,6,135,7,47,236,228,48,64,13,16,13,64,13, + 80,13,96,13,112,13,240,13,6,1,93,19,51,17,20,22,59,1,21,35,34,38,53,193,184,76,105,11,32,181,163,6,20,251,130,153,97,156,192,214, + 255,255,0,145,0,0,4,94,2,238,16,6,20,206,0,0,255,255,0,113,255,227,5,37,5,240,16,6,1,228,0,0,255,255,0,113,255,227,4,113, + 5,15,16,6,1,229,0,0,255,255,0,150,254,117,2,11,4,123,16,38,0,243,0,0,16,7,2,157,255,74,0,0,0,2,0,79,0,0,2,119, + 4,96,0,3,0,7,0,0,55,51,19,35,19,33,19,33,199,134,178,134,36,254,178,218,1,78,100,3,152,252,4,4,96,0,0,0,0,2,255,22, + 254,86,2,119,4,96,0,8,0,22,0,0,5,19,35,3,6,7,54,55,54,5,35,55,51,50,55,54,55,19,33,3,6,7,6,1,53,202,134,208, + 35,53,72,50,75,254,220,220,20,49,105,48,47,29,233,1,78,222,41,100,101,22,4,18,251,208,181,84,15,48,72,244,100,48,49,153,4,172,251,140, + 214,96,96,0,255,255,255,211,254,118,2,103,4,123,16,39,2,176,255,29,0,0,16,6,0,243,0,0,255,255,0,191,254,137,1,121,4,123,16,38, + 0,243,0,0,16,7,2,212,3,29,0,0,0,2,0,240,0,216,1,195,4,251,0,3,0,7,0,0,19,51,21,35,17,51,21,35,240,211,211,211, + 211,1,214,254,4,35,254,0,0,1,0,151,0,0,2,246,5,213,0,11,0,43,64,22,10,2,149,1,129,9,4,149,6,5,2,28,4,3,28,10, + 8,11,28,9,10,12,16,212,50,236,50,16,252,50,236,50,49,0,47,236,50,244,236,50,48,19,33,21,35,17,51,21,33,53,51,17,35,151,2,94, + 202,203,253,162,201,202,5,213,170,251,127,170,170,4,129,0,0,1,1,173,2,149,5,9,3,63,0,3,0,0,1,21,33,53,5,9,252,164,3,63, + 170,170,0,0,255,255,0,200,4,203,3,56,8,242,16,39,5,115,0,0,2,88,16,6,5,121,0,0,255,255,0,200,4,203,3,56,9,85,16,39, + 5,116,0,0,2,88,16,6,5,121,0,0,255,255,0,200,4,186,3,56,8,232,16,39,5,121,0,0,1,244,16,6,5,115,0,0,255,255,0,200, + 4,203,3,56,8,2,16,39,5,118,0,0,2,88,16,6,5,121,0,0,255,255,0,200,4,203,3,56,9,85,16,39,5,119,0,0,2,88,16,6, + 5,121,0,0,255,255,0,200,4,186,3,56,8,32,16,39,5,121,0,0,1,44,16,6,5,118,0,0,255,255,0,220,4,191,3,36,7,158,16,39, + 5,118,0,0,1,244,16,6,5,124,0,0,255,255,0,220,4,191,3,36,8,241,16,39,5,119,0,0,1,244,16,6,5,124,0,0,0,1,0,193, + 0,0,2,78,5,213,0,5,0,26,64,13,4,84,2,175,0,4,7,4,3,8,1,4,6,16,252,252,252,196,49,0,47,236,236,48,51,17,51,17, + 51,21,193,184,213,5,213,250,190,147,0,0,0,1,255,236,0,0,2,78,5,213,0,7,0,30,64,15,1,4,84,7,175,2,1,9,4,0,8,6, + 4,4,8,16,196,252,252,252,196,49,0,47,236,236,50,48,37,51,21,33,53,51,17,51,1,121,213,253,158,213,184,147,147,147,5,66,0,1,255,236, + 0,0,1,121,5,213,0,5,0,26,64,13,2,84,4,175,0,7,4,0,8,4,4,2,6,16,196,252,252,236,49,0,47,236,236,48,41,1,53,51, + 17,51,1,121,254,115,213,184,147,5,66,0,0,2,0,113,255,227,4,166,3,147,0,7,0,21,0,56,64,13,21,23,69,5,28,8,19,17,1,28, + 13,69,22,16,244,236,212,182,16,17,48,17,160,17,3,93,57,57,236,252,196,49,0,64,11,7,160,15,8,3,160,10,140,19,160,8,47,236,244,236, + 16,212,236,48,0,16,22,32,54,16,38,32,1,6,35,34,0,16,0,32,0,21,20,7,51,21,1,13,185,1,6,185,185,254,250,1,42,78,89,195, + 254,235,1,21,1,134,1,21,104,237,2,62,254,250,185,185,1,6,185,253,9,29,1,21,1,134,1,21,254,235,195,169,127,147,0,0,0,2,255,236, + 255,227,4,166,3,147,0,7,0,25,0,65,64,17,24,27,69,5,28,14,11,8,23,4,21,1,28,16,69,13,26,16,196,244,236,212,182,16,21,48, + 21,160,21,3,93,23,57,236,252,196,49,0,64,13,7,160,19,12,3,160,10,140,14,23,160,25,12,47,60,236,50,244,236,16,212,236,48,0,16,22, + 32,54,16,38,32,1,6,34,39,33,53,51,38,53,52,0,32,0,21,20,7,51,21,1,13,185,1,6,185,185,254,250,1,42,78,178,78,254,74,237, + 104,1,21,1,134,1,21,104,237,2,62,254,250,185,185,1,6,185,253,9,29,29,147,127,169,195,1,21,254,235,195,169,127,147,0,0,0,2,255,236, + 255,227,4,33,3,147,0,7,0,21,0,56,64,13,23,69,5,28,19,8,15,1,28,10,69,21,22,16,196,244,236,212,182,16,15,48,15,160,15,3, + 93,57,57,236,236,49,0,64,11,7,160,13,19,3,160,17,140,8,160,19,47,236,244,236,16,212,236,48,0,16,22,32,54,16,38,32,3,38,53,52, + 0,32,0,16,0,35,34,39,33,53,1,13,185,1,6,185,185,254,250,237,104,1,21,1,134,1,21,254,235,195,89,78,254,74,2,62,254,250,185,185, + 1,6,185,253,156,127,169,195,1,21,254,235,254,122,254,235,29,147,0,0,0,1,0,61,0,0,3,120,5,217,0,10,0,52,64,13,5,8,2,10, + 12,7,6,8,28,3,4,2,11,16,220,196,50,252,196,50,220,196,17,18,57,49,0,64,12,5,2,8,3,3,1,6,3,129,10,135,1,47,236,236, + 50,17,18,23,57,48,41,1,17,1,51,27,1,51,1,17,33,3,120,253,222,254,231,194,179,179,194,254,231,1,106,3,42,2,175,254,93,1,163,253, + 81,253,105,0,0,1,255,236,0,0,3,120,5,217,0,12,0,54,64,14,8,11,5,0,14,10,9,11,28,6,7,5,3,13,16,196,220,196,50,252, + 196,50,220,196,17,18,57,49,0,64,12,8,5,11,3,1,9,6,129,12,3,135,1,47,236,50,236,50,17,23,57,48,37,21,33,53,33,17,1,51, + 27,1,51,1,17,3,120,252,116,1,106,254,231,194,179,179,194,254,231,147,147,147,2,151,2,175,254,93,1,163,253,81,253,105,0,0,0,1,255,236, + 0,0,3,39,5,217,0,10,0,52,64,13,6,9,3,12,8,7,9,28,4,5,3,1,11,16,196,220,196,50,252,196,50,204,17,18,57,49,0,64, + 12,6,3,9,3,4,10,7,4,129,1,135,10,47,236,236,50,17,18,23,57,48,35,53,33,17,1,51,27,1,51,1,17,20,1,106,254,231,194,179, + 179,194,254,231,147,2,151,2,175,254,93,1,163,253,81,252,214,0,0,0,0,1,0,61,0,0,4,208,3,113,0,8,0,0,41,1,9,1,35,1, + 51,1,51,4,208,254,236,254,162,254,162,195,1,164,250,1,109,136,2,189,253,67,3,113,253,34,0,0,0,1,255,236,0,0,4,208,3,113,0,10, + 0,0,41,1,53,51,1,51,1,51,21,33,1,1,0,254,236,136,1,109,250,1,109,136,254,236,254,162,147,2,222,253,34,147,2,189,0,1,255,236, + 0,0,4,127,3,113,0,8,0,0,41,1,53,51,1,51,1,35,1,1,0,254,236,136,1,109,250,1,164,195,254,162,147,2,222,252,143,2,189,0, + 0,1,0,186,0,0,5,79,3,113,0,9,0,36,64,11,9,11,4,7,28,5,4,28,2,4,10,16,252,236,212,252,252,196,49,0,182,6,3,163, + 8,5,135,1,47,236,50,244,60,48,41,1,17,51,17,33,17,51,17,51,5,79,251,107,185,2,85,185,206,3,113,253,34,2,222,253,34,0,0,0, + 0,1,255,236,0,0,5,79,3,113,0,11,0,40,64,12,11,13,4,10,28,8,6,28,4,4,2,12,16,196,252,236,212,252,252,196,49,0,183,8, + 5,163,3,6,10,135,1,47,236,50,50,244,60,48,41,1,53,51,17,51,17,33,17,51,17,51,5,79,250,157,206,185,2,85,185,206,147,2,222,253, + 34,2,222,253,34,0,0,0,0,1,255,236,0,0,4,129,3,113,0,9,0,36,64,11,11,4,0,28,8,6,28,4,4,2,10,16,196,252,236,212, + 252,236,49,0,182,8,5,163,3,6,135,0,47,236,50,244,60,48,41,1,53,51,17,51,17,33,17,51,4,129,251,107,206,185,2,85,185,147,2,222, + 253,34,2,222,0,1,0,186,0,0,5,79,3,113,0,9,0,36,64,10,8,11,4,6,28,2,1,4,4,10,16,252,60,212,252,252,196,49,0,183, + 4,160,6,163,7,2,160,0,47,236,50,244,236,48,51,53,33,17,33,53,33,17,51,21,186,3,14,252,242,3,199,206,147,2,75,147,253,34,147,0, + 0,1,255,236,0,0,5,79,3,113,0,9,0,36,64,10,8,11,4,6,28,2,4,4,1,10,16,196,252,212,252,252,196,49,0,183,4,160,6,163, + 7,2,160,0,47,236,50,244,236,48,35,53,33,17,33,53,33,17,51,21,20,3,220,252,242,3,199,206,147,2,75,147,253,34,147,0,0,1,255,236, + 0,0,4,129,3,113,0,7,0,32,64,9,9,4,0,28,4,6,4,3,8,16,196,252,212,252,236,49,0,182,6,160,0,163,4,160,2,47,236,244, + 236,48,1,17,33,53,33,17,33,53,4,129,251,107,3,220,252,242,3,113,252,143,147,2,75,147,0,0,0,2,0,113,0,0,4,212,5,226,0,19, + 0,31,0,58,64,14,18,33,69,27,28,12,16,28,1,21,28,6,69,32,16,252,236,220,178,64,1,1,93,252,220,178,64,12,1,93,236,252,196,49, + 0,64,11,24,149,1,16,30,149,9,145,17,160,0,47,236,244,236,212,60,236,48,33,17,38,39,46,1,52,62,1,32,30,1,20,6,7,6,7,17, + 33,21,0,20,30,1,50,62,1,52,46,1,34,6,2,4,82,74,114,133,133,228,1,12,230,131,131,115,75,82,2,24,252,57,91,156,184,157,90,90, + 157,184,156,3,14,11,32,49,168,197,169,98,98,169,197,168,49,32,11,253,133,147,4,173,112,96,56,56,96,112,96,56,56,0,0,0,0,2,255,236, + 0,0,4,212,5,226,0,21,0,33,0,62,64,15,1,35,69,29,28,17,21,28,6,23,28,11,69,4,34,16,196,252,236,220,178,64,6,1,93,252, + 220,178,64,17,1,93,236,252,196,49,0,64,12,26,149,6,21,32,149,14,145,0,5,160,2,47,236,50,244,236,212,60,236,48,37,33,21,33,53,33, + 17,38,39,46,1,52,62,1,32,30,1,20,6,7,6,7,0,20,30,1,50,62,1,52,46,1,34,6,2,188,2,24,251,24,2,24,82,74,114,133, + 133,228,1,12,230,131,131,115,75,82,254,81,91,156,184,157,90,90,157,184,156,147,147,147,2,123,11,32,49,168,197,169,98,98,169,197,168,49,32,11, + 1,159,112,96,56,56,96,112,96,56,56,0,0,2,255,236,0,0,4,79,5,226,0,19,0,31,0,58,64,14,33,69,27,28,14,18,28,3,21,28, + 8,69,1,32,16,196,252,236,220,178,64,6,1,93,252,220,178,64,17,1,93,236,236,49,0,64,11,24,149,3,18,30,149,11,145,2,160,19,47,236, + 244,236,212,60,236,48,35,53,33,17,38,39,46,1,52,62,1,32,30,1,20,6,7,6,7,17,0,20,30,1,50,62,1,52,46,1,34,6,20,2, + 24,82,74,114,133,133,228,1,12,230,131,131,115,75,82,254,81,91,156,184,157,90,90,157,184,156,147,2,123,11,32,49,168,197,169,98,98,169,197,168, + 49,32,11,252,242,4,173,112,96,56,56,96,112,96,56,56,0,2,0,186,0,0,5,79,4,166,0,8,0,12,0,38,64,10,2,6,0,5,11,4, + 13,12,14,13,16,212,196,16,252,220,204,204,50,49,0,182,2,3,5,7,11,160,9,47,236,220,220,220,204,48,1,16,51,21,34,7,51,21,35,1, + 33,53,33,2,17,242,132,2,133,241,3,62,251,107,4,149,3,156,1,10,102,154,158,252,248,147,0,0,0,2,255,236,0,0,5,79,4,166,0,8, + 0,12,0,34,183,3,6,0,5,12,14,11,13,16,196,212,196,220,204,204,50,49,0,182,2,3,5,7,11,160,9,47,236,220,220,220,204,48,1,16, + 51,21,34,7,51,21,35,1,33,53,33,2,17,242,132,2,133,241,3,62,250,157,5,99,3,156,1,10,102,154,158,252,248,147,0,0,0,2,255,236, + 0,0,4,129,4,166,0,8,0,12,0,36,64,9,2,6,0,5,12,4,14,11,13,16,196,220,252,220,204,204,50,49,0,182,2,3,5,7,11,160, + 9,47,236,220,220,220,204,48,1,16,51,21,34,7,51,21,35,1,33,53,33,2,17,242,132,2,133,241,2,112,251,107,4,149,3,156,1,10,102,154, + 158,252,248,147,0,2,0,113,0,0,6,181,5,238,0,19,0,29,0,55,64,15,18,31,17,8,1,4,20,8,2,14,27,8,9,69,30,16,252,236, + 212,60,236,50,212,252,220,196,49,0,64,13,3,5,1,160,29,15,24,160,10,145,17,160,0,47,236,244,236,212,60,236,50,204,48,33,17,33,17,35, + 17,35,34,38,16,54,32,23,22,29,1,33,17,51,21,1,53,52,39,38,34,6,20,22,51,5,46,254,67,156,248,188,176,177,1,102,94,139,2,118, + 206,252,32,93,56,198,109,114,94,2,222,254,196,1,60,214,1,85,229,102,152,182,201,253,34,147,3,113,201,131,93,56,152,198,131,0,0,2,255,236, + 0,0,6,181,5,238,0,21,0,31,0,59,64,16,18,33,17,8,1,4,22,8,2,14,29,8,9,69,21,32,16,196,252,236,212,60,236,50,212,252, + 220,196,49,0,64,14,3,5,1,160,31,15,26,160,10,145,0,17,160,19,47,236,50,244,236,212,60,236,50,204,48,37,17,33,17,35,17,35,34,38, + 16,54,32,23,22,29,1,33,17,51,21,33,53,1,53,52,39,38,34,6,20,22,51,5,46,254,67,156,248,188,176,177,1,102,94,139,2,118,206,249, + 55,2,233,93,56,198,109,114,94,147,2,75,254,196,1,60,214,1,85,229,102,152,182,201,253,34,147,147,2,222,201,131,93,56,152,198,131,0,0,0, + 0,2,255,236,0,0,5,231,5,238,0,19,0,29,0,55,64,15,31,17,8,1,4,20,8,2,14,27,8,9,69,19,30,16,196,252,236,212,60,236, + 50,212,252,204,49,0,64,13,3,5,1,160,29,15,24,160,10,145,0,160,17,47,236,244,236,212,60,236,50,204,48,37,17,33,17,35,17,35,34,38, + 16,54,32,23,22,29,1,33,17,33,53,1,53,52,39,38,34,6,20,22,51,5,46,254,67,156,248,188,176,177,1,102,94,139,2,118,250,5,2,233, + 93,56,198,109,114,94,147,2,75,254,196,1,60,214,1,85,229,102,152,182,201,252,143,147,2,222,201,131,93,56,152,198,131,0,0,0,0,1,0,193, + 0,0,3,149,5,213,0,11,0,44,64,11,10,13,7,3,19,5,9,28,1,4,12,16,252,252,60,252,60,220,196,49,0,64,11,5,160,7,0,4, + 160,2,175,10,160,0,47,236,244,236,16,220,236,48,51,17,33,21,33,17,33,21,33,17,33,21,193,2,131,254,53,1,203,254,53,2,28,5,213,147, + 254,47,146,253,180,147,0,0,0,1,255,236,0,0,3,149,5,213,0,13,0,48,64,12,12,15,9,5,19,7,11,28,3,4,1,14,16,196,252,252, + 60,252,60,220,196,49,0,64,12,7,160,9,0,6,160,4,175,2,12,160,0,47,236,50,244,236,16,220,236,48,35,53,51,17,33,21,33,17,33,21, + 33,17,33,21,20,213,2,131,254,53,1,203,254,53,2,28,147,5,66,147,254,47,146,253,180,147,0,0,0,1,255,236,0,0,3,68,5,213,0,11, + 0,44,64,11,13,6,9,19,7,11,28,4,4,2,12,16,196,252,252,60,252,60,204,49,0,64,11,8,160,10,0,7,160,5,175,2,160,0,47,236, + 244,236,16,220,236,48,41,1,53,51,17,33,21,33,17,33,21,33,1,121,254,115,213,2,131,254,53,1,203,254,53,147,5,66,147,254,47,146,0,0, + 0,1,0,61,0,0,3,149,5,213,0,11,0,44,64,11,10,13,4,8,18,0,4,19,2,6,12,16,220,60,252,60,252,252,196,49,0,64,11,4, + 160,2,0,5,160,7,175,10,160,0,47,236,244,236,16,220,236,48,33,17,33,53,33,17,33,53,33,17,51,21,2,8,254,53,1,203,254,53,2,131, + 213,2,223,146,1,209,147,250,190,147,0,0,0,1,255,236,0,0,3,149,5,213,0,13,0,48,64,12,12,15,4,10,18,6,2,19,4,8,1,14, + 16,196,220,60,252,60,252,252,196,49,0,64,12,5,160,3,0,8,160,10,175,12,2,160,0,47,236,50,244,236,16,220,236,48,35,53,33,17,33,53, + 33,17,33,53,33,17,51,21,20,2,28,254,53,1,203,254,53,2,131,213,147,2,76,146,1,209,147,250,190,147,0,0,0,1,255,236,0,0,2,192, + 5,213,0,11,0,44,64,11,13,4,11,18,3,7,19,5,9,2,12,16,196,220,60,252,60,252,236,49,0,64,11,7,160,5,0,8,160,10,175,2, + 160,0,47,236,244,236,16,220,236,48,41,1,53,33,17,33,53,33,17,33,53,33,2,192,253,44,2,28,254,53,1,203,254,53,2,131,147,2,76,146, + 1,209,147,0,0,2,0,186,0,0,4,140,5,213,0,10,0,23,0,42,64,12,22,25,27,7,28,19,14,2,28,12,4,24,16,252,252,60,212,236, + 252,196,49,0,64,9,1,160,15,13,129,3,22,160,11,16,236,50,236,212,236,48,1,33,17,33,50,55,54,53,52,39,38,1,17,51,17,33,50,23, + 22,21,20,7,51,21,2,156,254,208,1,44,82,52,44,44,61,253,217,185,1,85,105,127,88,79,211,2,222,253,181,93,79,122,125,73,95,253,34,5, + 213,253,156,135,95,210,164,130,147,0,0,0,0,2,255,236,0,0,4,140,5,213,0,14,0,25,0,46,64,13,13,27,27,22,28,10,5,17,28,3, + 4,1,26,16,196,252,252,60,212,236,252,196,49,0,64,10,16,160,6,4,129,2,18,13,160,0,47,236,50,50,236,212,236,48,35,53,51,17,51,17, + 33,50,23,22,21,20,7,51,21,1,33,17,33,50,55,54,53,52,39,38,20,206,185,1,85,105,127,88,79,211,254,16,254,208,1,44,82,52,44,44, + 61,147,5,66,253,156,135,95,210,164,130,147,2,222,253,181,93,79,122,125,73,95,0,0,0,2,255,236,0,0,4,8,5,213,0,10,0,25,0,42, + 64,12,27,27,7,28,21,16,2,28,14,4,12,26,16,196,252,252,60,212,236,236,49,0,64,9,1,160,17,15,129,13,3,160,11,47,236,50,236,212, + 236,48,1,33,17,33,50,55,54,53,52,39,38,1,53,51,17,51,17,33,50,23,22,21,20,7,6,35,2,156,254,208,1,44,82,52,44,44,61,253, + 11,206,185,1,85,105,127,88,88,88,108,2,222,253,181,93,79,122,125,73,95,253,34,147,5,66,253,156,135,95,210,173,135,133,0,0,0,1,0,193, + 0,0,4,249,5,213,0,19,0,64,64,11,18,21,4,9,17,28,5,0,6,4,20,16,244,220,178,95,0,1,93,57,252,212,252,196,0,64,11,11, + 5,0,6,10,160,7,129,17,160,0,47,236,244,236,57,17,57,57,64,7,11,18,10,18,5,6,5,7,16,5,236,236,49,48,33,52,2,39,38,39, + 3,53,33,21,5,19,22,23,22,23,22,23,33,21,2,170,27,53,77,137,195,3,99,253,153,157,136,52,66,6,2,1,1,152,153,1,95,150,220,220, + 1,57,86,147,1,254,239,234,184,230,156,64,57,147,0,0,0,1,255,236,0,0,4,249,5,213,0,22,0,68,64,12,21,24,4,12,20,28,8,2, + 9,4,1,23,16,196,244,220,178,95,2,1,93,57,252,212,252,196,0,64,12,14,8,0,9,13,160,10,129,20,2,160,0,47,236,50,244,236,57,17, + 57,57,64,7,14,18,13,18,8,9,8,7,16,5,236,236,49,48,35,53,33,38,39,38,39,38,39,3,53,33,21,5,19,22,23,22,23,22,23,33, + 21,20,2,187,3,8,13,53,77,137,195,3,99,253,153,157,136,52,66,6,2,1,1,152,147,88,93,176,150,220,220,1,57,86,147,1,254,239,234,184, + 230,156,64,57,147,0,0,0,0,1,255,236,0,0,4,36,5,213,0,19,0,64,64,11,21,4,12,19,28,8,2,9,4,1,20,16,196,244,220,178, + 95,2,1,93,57,252,212,236,0,64,11,14,8,0,9,13,160,10,129,2,160,0,47,236,244,236,57,17,57,57,64,7,14,18,13,18,8,9,8,7, + 16,5,236,236,49,48,35,53,33,38,39,38,39,38,39,3,53,33,21,5,19,22,23,22,18,7,20,2,187,3,8,13,53,77,137,195,3,99,253,153, + 157,136,52,66,11,1,147,88,93,176,150,220,220,1,57,86,147,1,254,239,234,184,230,254,201,113,0,0,0,1,0,61,0,0,2,225,5,213,0,8, + 0,58,64,9,7,10,4,3,5,28,1,3,9,16,212,220,252,17,57,220,196,49,0,64,13,2,18,1,18,3,4,3,3,4,129,6,160,8,47,236, + 244,204,178,31,3,1,93,7,16,4,236,236,180,141,2,141,1,2,93,48,33,17,1,53,1,51,17,51,21,1,84,254,233,1,21,186,213,4,223,254, + 199,246,1,57,250,190,147,0,0,1,255,236,0,0,2,225,5,213,0,10,0,62,64,10,9,12,6,5,7,28,3,5,1,11,16,196,212,220,252,17, + 57,220,196,49,0,64,14,4,18,3,18,5,6,5,5,6,129,8,2,160,10,47,236,50,244,204,178,31,5,1,93,7,16,4,236,236,180,141,4,141, + 3,2,93,48,35,53,33,17,1,53,1,51,17,51,21,20,1,104,254,233,1,21,186,213,147,4,76,254,199,246,1,57,250,190,147,0,0,1,255,236, + 0,0,2,12,5,213,0,8,0,58,64,9,10,6,5,7,28,3,5,1,9,16,196,212,220,252,17,57,204,49,0,64,13,4,18,3,18,5,6,5, + 5,6,129,2,160,8,47,236,244,204,178,31,5,1,93,7,16,4,236,236,180,141,4,141,3,2,93,48,35,53,33,17,1,53,1,51,17,20,1,104, + 254,233,1,21,186,147,4,76,254,199,246,1,57,250,43,0,0,3,0,193,0,0,7,192,4,26,0,17,0,26,0,35,0,49,64,14,16,37,28,14, + 28,18,24,28,27,33,28,1,4,36,16,252,236,212,236,212,252,252,196,49,0,64,11,21,160,10,30,160,4,16,26,35,160,0,47,236,50,50,212,236, + 212,236,48,51,17,52,18,51,50,22,23,62,1,51,50,23,22,21,17,51,21,1,52,38,35,34,6,21,17,33,1,52,38,35,34,6,29,1,33,193, + 244,198,125,120,53,37,150,211,210,94,136,213,254,113,164,90,129,127,1,254,253,72,164,90,108,148,1,254,1,238,166,0,255,75,45,45,210,88,128,104, + 253,185,147,2,124,130,128,197,149,254,110,1,99,131,127,167,210,242,0,0,0,3,255,236,0,0,7,192,4,26,0,19,0,28,0,37,0,53,64,15, + 18,39,4,16,28,20,26,28,29,35,28,3,4,1,38,16,196,252,236,212,236,212,252,252,196,49,0,64,12,23,160,12,32,160,6,17,27,36,2,160, + 19,47,236,50,50,50,212,236,212,236,48,35,53,51,17,52,18,51,50,22,23,62,1,51,50,23,22,21,17,51,21,1,52,38,35,34,6,21,17,33, + 1,52,38,35,34,6,29,1,33,20,213,244,198,125,120,53,37,150,211,210,94,136,213,254,113,164,90,129,127,1,254,253,72,164,90,108,148,1,254,147, + 1,91,166,0,255,75,45,45,210,88,128,104,253,185,147,2,124,130,128,197,149,254,110,1,99,131,127,167,210,242,0,0,0,3,255,236,0,0,6,235, + 4,26,0,17,0,26,0,35,0,49,64,14,37,4,16,28,18,24,28,27,33,28,3,4,1,36,16,196,252,236,212,236,212,252,236,49,0,64,11,21, + 160,12,30,160,6,2,34,25,160,17,47,236,50,50,212,236,212,236,48,35,53,51,17,52,18,51,50,22,23,62,1,51,50,23,22,21,17,3,52,38, + 35,34,6,21,17,33,1,52,38,35,34,6,29,1,33,20,213,244,198,125,120,53,37,150,211,210,94,136,186,164,90,129,127,1,254,253,72,164,90,108, + 148,1,254,147,1,91,166,0,255,75,45,45,210,88,128,104,253,38,2,124,130,128,197,149,254,110,1,99,131,127,167,210,242,0,0,0,0,1,0,61, + 0,0,3,220,5,213,0,13,0,45,64,12,12,15,9,31,11,7,28,5,1,31,3,14,16,220,252,60,252,60,252,220,196,49,0,64,10,9,1,160, + 3,7,6,129,12,160,0,47,236,252,220,60,252,60,48,33,17,33,53,33,17,51,17,33,21,33,17,33,21,1,136,254,181,1,75,184,1,75,254,181, + 1,156,3,129,147,1,193,254,63,147,253,18,147,0,0,0,0,1,255,236,0,0,3,220,5,213,0,15,0,49,64,13,14,17,11,31,13,9,28,7, + 3,31,5,1,16,16,196,220,252,60,252,60,252,204,196,49,0,64,11,11,3,160,5,9,8,129,2,14,160,0,47,236,50,244,220,60,252,60,48,35, + 53,33,17,33,53,33,17,51,17,33,21,33,17,33,21,20,1,156,254,181,1,75,184,1,75,254,181,1,156,147,2,238,147,1,193,254,63,147,253,18, + 147,0,0,0,0,1,255,236,0,0,3,139,5,213,0,13,0,45,64,12,15,12,31,0,10,28,8,4,31,6,2,14,16,196,220,252,60,252,60,252, + 204,49,0,64,10,12,4,160,6,10,8,129,2,160,0,47,236,244,220,60,252,60,48,41,1,53,33,17,33,53,33,17,51,17,33,21,33,2,64,253, + 172,1,156,254,181,1,75,184,1,75,254,181,147,2,238,147,1,193,254,63,147,0,0,0,0,2,0,61,0,0,6,88,5,213,0,3,0,21,0,62, + 64,17,20,23,16,31,14,18,28,0,12,10,2,28,4,8,31,6,22,16,220,252,60,252,60,220,60,252,60,252,220,196,49,0,64,14,5,1,17,160, + 7,11,15,9,13,129,3,19,160,4,47,236,50,244,60,220,60,60,236,50,50,48,37,17,33,17,7,17,33,53,33,17,51,17,33,17,51,17,33,21, + 33,17,33,21,4,4,254,61,185,254,181,1,75,185,1,195,184,1,76,254,180,1,156,147,2,238,253,18,147,3,129,147,1,193,254,63,1,193,254,63, + 147,253,18,147,0,2,255,236,0,0,6,88,5,213,0,19,0,23,0,66,64,18,18,25,14,31,12,16,28,20,10,8,22,28,2,6,31,4,0,24, + 16,196,220,252,60,252,60,220,60,252,60,252,220,196,49,0,64,15,15,21,3,160,5,9,13,7,11,129,17,23,1,160,19,47,236,50,50,244,60,220, + 60,60,236,50,50,48,35,53,33,17,33,53,33,17,51,17,33,17,51,17,33,21,33,17,33,21,37,17,33,17,20,1,156,254,181,1,75,185,1,195, + 184,1,76,254,180,1,156,253,172,254,61,147,2,238,147,1,193,254,63,1,193,254,63,147,253,18,147,147,2,238,253,18,0,2,255,236,0,0,6,8, + 5,213,0,17,0,21,0,62,64,17,23,15,31,13,17,18,18,11,9,20,28,3,7,31,5,1,22,16,196,220,252,60,252,60,220,60,252,60,252,204, + 49,0,64,14,16,19,4,160,6,10,14,12,8,129,21,2,160,0,47,236,50,244,60,220,60,60,252,60,60,48,41,1,53,33,17,33,53,33,17,51, + 17,33,17,51,17,33,21,33,3,17,33,17,4,188,251,48,1,156,254,181,1,75,185,1,195,184,1,76,254,180,184,254,61,147,2,238,147,1,193,254, + 63,1,193,254,63,147,253,18,2,238,253,18,0,2,0,186,0,0,5,79,3,113,0,5,0,9,0,37,64,11,4,11,4,2,28,8,7,28,1,4, + 10,16,252,236,212,252,252,196,49,0,183,6,160,2,163,3,8,160,0,47,236,50,244,236,48,51,17,33,17,51,21,1,17,33,17,186,3,199,206,252, + 36,2,85,3,113,253,34,147,2,222,253,181,2,75,0,0,0,2,255,236,0,0,5,79,3,113,0,7,0,11,0,42,64,12,6,13,4,4,28,10, + 9,28,3,4,1,12,16,196,252,236,212,252,252,196,49,0,64,9,8,160,4,163,2,9,5,160,0,47,236,50,50,244,236,48,35,53,51,17,33,17, + 51,21,1,17,33,17,20,206,3,199,206,252,36,2,85,147,2,222,253,34,147,2,222,253,181,2,75,0,0,2,255,236,0,0,4,129,3,113,0,5, + 0,9,0,37,64,11,11,4,5,28,8,7,28,4,4,2,10,16,196,252,236,212,252,236,49,0,183,9,160,4,163,3,7,160,0,47,236,50,244,236, + 48,41,1,53,51,17,33,5,17,33,17,4,129,251,107,206,3,199,252,242,2,85,147,2,222,147,253,181,2,75,0,0,0,2,0,61,0,0,5,20, + 5,213,0,2,0,8,0,67,180,7,10,5,4,9,16,212,196,196,196,49,0,64,10,66,1,149,4,129,2,149,7,160,3,47,236,236,244,236,48,75, + 83,88,64,18,2,17,6,1,2,0,17,5,5,6,2,17,3,1,17,4,4,3,5,7,16,236,16,236,7,16,236,8,16,236,89,1,33,1,7,1, + 33,1,33,21,3,198,253,116,1,70,115,254,48,4,134,254,104,1,233,5,66,251,126,192,5,213,250,190,147,0,0,0,0,2,255,236,0,0,5,20, + 5,213,0,2,0,10,0,70,181,9,12,7,6,4,11,16,196,212,196,196,49,0,64,11,66,1,149,6,129,2,149,4,9,160,3,47,236,50,236,244, + 236,48,75,83,88,64,18,2,17,8,1,2,0,17,7,7,8,2,17,5,1,17,6,6,5,5,7,16,236,16,236,7,16,236,8,16,236,89,1,33, + 1,5,53,33,1,33,1,33,21,3,198,253,116,1,70,253,108,1,233,254,104,4,134,254,104,1,233,5,66,251,126,192,147,5,66,250,190,147,0,0, + 0,2,255,236,0,0,4,195,5,213,0,2,0,8,0,67,180,10,7,6,4,9,16,196,212,196,196,49,0,64,10,66,1,149,6,129,2,149,4,160, + 3,47,236,236,244,236,48,75,83,88,64,18,2,17,8,1,2,0,17,7,7,8,2,17,5,1,17,6,6,5,5,7,16,236,16,236,7,16,236,8, + 16,236,89,1,33,1,5,53,33,1,33,1,3,198,253,116,1,70,253,108,1,233,254,104,4,134,254,48,5,66,251,126,192,147,5,66,250,43,0,0, + 0,3,0,193,0,0,5,243,5,213,0,10,0,14,0,31,0,56,64,16,30,33,4,5,28,23,29,0,28,18,14,12,28,16,4,32,16,252,236,212, + 60,252,60,212,236,252,196,49,0,64,13,28,11,160,1,17,10,160,19,129,13,30,160,15,47,236,50,244,236,220,60,236,50,48,1,51,50,55,54,53, + 52,39,38,43,1,1,17,33,17,1,17,33,17,33,50,23,22,21,6,7,6,47,1,17,33,21,3,109,168,93,37,31,31,29,105,164,254,13,1,59, + 254,12,1,244,1,176,132,64,69,1,68,92,140,212,2,134,3,113,81,69,61,60,100,94,253,156,253,181,2,75,253,34,3,113,2,100,133,144,124,145, + 91,124,1,1,253,181,147,0,0,3,255,236,0,0,5,243,5,213,0,10,0,14,0,33,0,60,64,17,32,35,4,5,28,25,31,0,28,20,14,12, + 28,18,4,16,34,16,196,252,236,212,60,252,60,212,236,252,196,49,0,64,14,30,11,160,1,19,10,160,21,129,17,13,32,160,15,47,236,50,50,244, + 236,220,60,236,50,48,1,51,50,55,54,53,52,39,38,43,1,1,17,33,17,1,53,51,17,33,17,33,50,23,22,21,6,7,6,47,1,17,33,21, + 3,109,168,93,37,31,31,29,105,164,254,13,1,59,253,55,213,1,244,1,176,132,64,69,1,68,92,140,212,2,134,3,113,81,69,61,60,100,94,253, + 156,253,181,2,75,253,34,147,2,222,2,100,133,144,124,145,91,124,1,1,253,181,147,0,0,3,255,236,0,0,5,110,5,213,0,10,0,14,0,31, + 0,56,64,16,33,4,5,28,26,15,0,28,21,14,12,28,19,4,17,32,16,196,252,236,212,60,252,60,212,236,236,49,0,64,13,31,11,160,1,20, + 10,160,22,129,18,13,160,16,47,236,50,244,236,220,60,236,50,48,1,51,50,55,54,53,52,39,38,43,1,1,17,33,17,19,33,53,51,17,33,17, + 33,50,23,22,21,6,7,6,47,1,3,109,168,93,37,31,31,29,105,164,254,13,1,59,184,252,127,213,1,244,1,176,132,64,69,1,68,92,140,212, + 3,113,81,69,61,60,100,94,253,156,253,181,2,75,253,34,147,2,222,2,100,133,144,124,145,91,124,1,1,0,0,0,0,1,0,193,0,0,4,81, + 5,213,0,13,0,46,64,13,12,15,4,11,28,9,1,7,3,28,5,4,14,16,252,252,60,220,60,252,252,196,49,0,64,10,4,2,160,6,8,10, + 129,12,160,0,47,236,244,220,204,252,204,48,33,17,33,17,35,17,51,17,33,17,51,17,51,21,2,197,254,181,185,185,1,75,184,212,3,129,254,252, + 2,155,254,252,1,193,250,190,147,0,0,0,0,1,255,236,0,0,4,81,5,213,0,15,0,50,64,14,14,17,4,13,28,11,3,9,5,28,7,4, + 1,16,16,196,252,252,60,220,60,252,252,196,49,0,64,11,6,4,160,8,10,12,129,2,14,160,0,47,236,50,244,220,204,252,204,48,35,53,33,17, + 33,17,35,17,51,17,33,17,51,17,51,21,20,2,217,254,181,185,185,1,75,184,212,147,2,238,254,252,2,155,254,252,1,193,250,190,147,0,0,0, + 0,1,255,236,0,0,3,125,5,213,0,13,0,46,64,13,15,4,12,28,11,3,9,5,28,7,4,1,14,16,196,252,252,60,220,60,252,236,49,0, + 64,10,6,4,160,8,10,12,129,2,160,0,47,236,244,220,204,252,204,48,35,53,33,17,33,17,35,17,51,17,33,17,51,17,20,2,217,254,181,185, + 185,1,75,184,147,2,238,254,252,2,155,254,252,1,193,250,43,0,0,0,0,2,0,112,0,0,5,223,5,213,0,10,0,29,0,51,64,14,28,31, + 4,24,31,22,26,28,11,1,7,17,27,30,16,252,204,212,60,252,60,252,252,196,49,0,64,12,25,12,160,0,23,2,160,21,129,27,160,29,47,236, + 244,236,212,60,236,50,48,1,33,17,33,34,7,6,21,20,23,22,1,17,33,34,39,38,53,52,55,54,51,33,17,33,21,33,17,33,21,1,220,1, + 48,254,212,82,52,44,44,61,1,110,254,171,107,125,88,88,88,108,2,50,1,76,254,180,2,33,2,247,2,75,93,79,122,125,73,95,253,9,2,100, + 135,95,210,173,135,133,253,34,147,254,47,147,0,2,255,236,0,0,5,223,5,213,0,10,0,31,0,55,64,15,30,33,4,26,31,24,28,28,13,1, + 7,19,27,12,32,16,196,252,204,212,60,252,60,252,252,196,49,0,64,13,27,14,160,0,25,2,160,23,129,29,13,160,31,47,236,50,244,236,212,60, + 236,50,48,1,33,17,33,34,7,6,21,20,23,22,1,53,33,17,33,34,39,38,53,52,55,54,51,33,17,33,21,33,17,33,21,1,220,1,48,254, + 212,82,52,44,44,61,254,85,3,25,254,171,107,125,88,88,88,108,2,50,1,76,254,180,2,33,2,247,2,75,93,79,122,125,73,95,253,9,147,1, + 209,135,95,210,173,135,133,253,34,147,254,47,147,0,0,0,0,2,255,236,0,0,5,10,5,213,0,10,0,29,0,51,64,14,31,4,26,31,24,28, + 28,13,1,7,19,27,12,30,16,196,252,204,212,60,252,60,252,236,49,0,64,12,27,14,160,0,25,2,160,23,129,13,160,29,47,236,244,236,212,60, + 236,50,48,1,33,17,33,34,7,6,21,20,23,22,1,53,33,17,33,34,39,38,53,52,55,54,51,33,17,33,21,33,17,1,220,1,48,254,212,82, + 52,44,44,61,254,85,3,25,254,171,107,125,88,88,88,108,2,50,1,76,254,180,2,247,2,75,93,79,122,125,73,95,253,9,147,1,209,135,95,210, + 173,135,133,253,34,147,253,156,0,1,0,61,0,0,3,220,5,213,0,9,0,36,64,10,8,11,4,31,6,28,0,31,2,10,16,220,252,252,252,220, + 196,49,0,183,1,6,160,3,129,7,160,9,47,236,244,236,50,48,33,17,33,53,33,21,33,17,33,21,1,136,254,181,3,78,254,181,1,156,5,66, + 147,147,251,81,147,0,0,0,0,1,255,236,0,0,3,220,5,213,0,11,0,41,64,11,10,13,6,31,8,28,2,31,4,1,12,16,196,220,252,252, + 252,220,196,49,0,64,9,8,3,160,6,129,2,9,160,0,47,236,50,244,236,50,48,35,53,33,17,33,53,33,21,33,17,33,21,20,1,156,254,181, + 3,78,254,181,1,156,147,4,175,147,147,251,81,147,0,0,0,1,255,236,0,0,3,139,5,213,0,9,0,36,64,10,11,7,31,9,28,3,31,5, + 2,10,16,196,220,252,252,252,204,49,0,183,9,4,160,6,129,3,160,0,47,236,244,236,50,48,41,1,53,33,17,33,53,33,21,33,2,64,253,172, + 1,156,254,181,3,78,254,181,147,4,175,147,147,0,0,0,0,2,0,61,0,0,5,20,5,213,0,2,0,8,0,64,179,8,10,3,9,16,212,196, + 196,49,0,64,9,66,1,149,5,129,6,2,160,3,47,236,50,244,236,48,75,83,88,64,18,1,17,5,2,1,0,17,6,6,5,1,17,4,2,17, + 3,3,4,5,7,16,236,16,236,7,16,236,8,16,236,89,37,9,1,7,1,51,1,51,21,3,198,254,186,254,186,253,1,208,230,1,152,137,147,4, + 130,251,126,147,5,213,250,190,147,0,0,0,0,2,255,236,0,0,5,20,5,213,0,2,0,10,0,66,179,9,12,4,11,16,196,196,196,49,0,64, + 10,66,1,149,6,129,8,4,2,160,3,47,236,50,50,244,236,48,75,83,88,64,18,1,17,7,2,1,0,17,8,8,7,1,17,6,2,17,5,5, + 6,5,7,16,236,16,236,7,16,236,8,16,236,89,37,9,1,5,53,51,1,51,1,51,21,3,198,254,186,254,186,254,178,137,1,152,230,1,152,137, + 147,4,130,251,126,147,147,5,66,250,190,147,0,2,255,236,0,0,4,195,5,213,0,2,0,8,0,64,179,10,8,4,9,16,196,196,196,49,0,64, + 9,66,1,149,6,129,4,2,160,3,47,236,50,244,236,48,75,83,88,64,18,1,17,7,2,1,0,17,8,8,7,1,17,6,2,17,5,5,6,5, + 7,16,236,16,236,7,16,236,8,16,236,89,37,9,1,5,53,51,1,51,1,3,198,254,186,254,186,254,178,137,1,152,230,1,208,147,4,130,251,126, + 147,147,5,66,250,43,0,0,0,2,0,113,0,0,4,212,5,213,0,28,0,40,0,0,33,17,38,39,46,1,52,55,54,55,54,55,53,33,53,33, + 17,22,23,30,1,20,6,7,6,7,21,33,21,0,20,30,1,50,62,1,52,46,1,34,6,2,4,82,74,114,133,67,69,111,74,82,254,181,2,3, + 88,69,114,132,132,114,74,83,2,24,252,57,91,156,184,157,90,90,157,184,156,1,134,11,31,49,166,198,83,86,47,31,11,243,147,254,123,13,30,50, + 166,198,166,49,32,11,242,147,3,34,112,95,56,56,95,112,96,56,56,0,0,2,255,236,0,0,4,212,5,213,0,30,0,42,0,0,35,53,33,53, + 38,39,46,1,52,55,54,55,54,55,53,33,53,33,17,22,23,30,1,20,6,7,6,7,21,33,21,0,20,30,1,50,62,1,52,46,1,34,6,20, + 2,24,82,74,114,133,67,69,111,74,82,254,181,2,3,88,69,114,132,132,114,74,83,2,24,252,57,91,156,184,157,90,90,157,184,156,147,243,11,31, + 49,166,198,83,86,47,31,11,243,147,254,123,13,30,50,166,198,166,49,32,11,242,147,3,34,112,95,56,56,95,112,96,56,56,0,0,0,2,255,236, + 0,0,4,79,5,213,0,28,0,40,0,0,35,53,33,53,38,39,46,1,52,55,54,55,54,55,53,33,53,33,17,22,23,30,1,20,6,7,6,7, + 17,0,20,30,1,50,62,1,52,46,1,34,6,20,2,24,82,74,114,133,67,69,111,74,82,254,181,2,3,88,69,114,132,132,114,74,83,254,81,91, + 156,184,157,90,90,157,184,156,147,243,11,31,49,166,198,83,86,47,31,11,243,147,254,123,13,30,50,166,198,166,49,32,11,254,123,3,34,112,95,56, + 56,95,112,96,56,56,0,0,0,1,0,193,0,0,4,81,5,213,0,9,0,37,64,11,8,11,4,1,28,7,3,28,5,4,10,16,252,236,212,236, + 252,196,49,0,183,4,2,160,5,129,7,160,0,47,236,244,252,204,48,33,17,33,17,35,17,33,17,51,21,2,197,254,181,185,2,188,212,5,66,254, + 197,1,206,250,190,147,0,0,0,1,255,236,0,0,4,81,5,213,0,11,0,42,64,12,10,13,4,2,28,8,4,28,6,4,1,12,16,196,252,236, + 212,236,252,196,49,0,64,9,5,4,160,8,129,2,9,160,0,47,236,50,244,252,204,48,35,53,33,17,33,17,35,17,33,17,51,21,20,2,217,254, + 181,185,2,188,212,147,4,175,254,197,1,206,250,190,147,0,0,1,255,236,0,0,3,125,5,213,0,9,0,37,64,11,11,4,3,28,9,5,28,7, + 4,1,10,16,196,252,236,212,236,236,49,0,183,6,4,160,8,129,2,160,0,47,236,244,252,204,48,35,53,33,17,33,17,35,17,33,17,20,2,217, + 254,181,185,2,188,147,4,175,254,197,1,206,250,43,0,0,0,1,0,193,0,0,4,81,4,230,0,11,0,40,64,12,11,13,4,9,28,1,7,3, + 28,5,4,12,16,252,252,60,220,252,252,196,49,0,183,6,8,160,4,2,10,160,0,47,236,212,204,252,204,48,33,17,33,17,35,17,51,17,33,17, + 51,21,2,197,254,181,185,185,2,3,212,3,79,254,252,2,155,254,252,252,177,147,0,0,0,1,255,236,0,0,4,81,4,230,0,13,0,45,64,13, + 13,15,4,11,28,3,9,5,28,7,4,1,14,16,196,252,252,60,220,252,252,196,49,0,64,9,8,10,160,6,4,2,12,160,0,47,236,50,212,204, + 252,204,48,35,53,33,17,33,17,35,17,51,17,33,17,51,21,20,2,217,254,181,185,185,2,3,212,147,2,188,254,252,2,155,254,252,252,177,147,0, + 0,1,255,236,0,0,3,125,4,230,0,11,0,40,64,12,13,4,11,28,3,9,5,28,7,4,1,12,16,196,252,252,60,220,252,236,49,0,183,8, + 10,160,6,4,2,160,0,47,236,212,204,252,204,48,35,53,33,17,33,17,35,17,51,17,33,17,20,2,217,254,181,185,185,2,3,147,2,188,254,252, + 2,155,254,252,252,30,0,0,0,2,0,193,0,0,4,66,5,213,0,3,0,13,0,47,64,13,13,15,4,11,28,7,3,1,28,5,9,4,14,16, + 252,60,236,220,60,252,252,196,49,0,64,11,0,160,6,8,160,10,129,2,12,160,4,47,236,50,244,236,212,236,48,1,17,33,17,1,17,33,17,33, + 53,33,17,51,21,1,122,1,59,254,12,1,244,254,12,2,172,213,2,222,253,181,2,75,253,34,3,113,1,209,147,250,190,147,0,0,0,2,255,236, + 0,0,4,66,5,213,0,3,0,15,0,51,64,14,15,17,4,13,28,9,3,1,28,7,11,4,5,16,16,196,252,60,236,220,60,252,252,196,49,0, + 64,12,0,160,8,10,160,12,129,6,2,14,160,4,47,236,50,50,244,236,212,236,48,1,17,33,17,1,53,51,17,33,17,33,53,33,17,51,21,1, + 122,1,59,253,55,213,1,244,254,12,2,172,213,2,222,253,181,2,75,253,34,147,2,222,1,209,147,250,190,147,0,0,0,2,255,236,0,0,3,109, + 5,213,0,3,0,13,0,47,64,13,15,4,13,28,9,3,1,28,7,11,4,5,14,16,196,252,60,236,220,60,252,236,49,0,64,11,0,160,8,10, + 160,12,129,6,2,160,4,47,236,50,244,236,212,236,48,1,17,33,17,1,53,51,17,33,17,33,53,33,17,1,122,1,59,253,55,213,1,244,254,12, + 2,172,2,222,253,181,2,75,253,34,147,2,222,1,209,147,250,43,0,0,0,2,0,113,0,0,4,212,5,213,0,11,0,38,0,66,64,16,37,40, + 69,7,28,31,26,35,28,23,13,1,28,18,69,39,16,252,236,220,178,64,13,1,93,60,252,60,220,178,64,31,1,93,236,252,196,49,0,64,13,4, + 149,35,13,10,149,26,23,25,129,36,160,12,47,236,236,212,60,236,212,60,236,48,0,20,30,1,50,62,1,52,46,1,34,6,19,17,38,39,46,1, + 52,55,54,55,54,55,17,51,17,22,23,30,1,20,6,7,6,7,21,33,21,1,13,91,156,184,157,90,90,157,184,156,156,82,74,114,133,67,69,111, + 74,82,184,88,69,114,132,132,114,74,83,2,24,3,34,112,95,56,56,95,112,96,56,56,252,126,1,134,11,31,49,166,198,83,86,47,31,11,1,134, + 254,123,13,30,50,166,198,166,49,32,11,242,147,0,0,0,0,2,255,236,0,0,4,212,5,213,0,11,0,40,0,70,64,17,12,42,69,7,28,35, + 30,39,28,27,17,1,28,22,69,15,41,16,196,252,236,220,178,64,17,1,93,60,252,60,220,178,64,35,1,93,236,252,196,49,0,64,14,4,149,39, + 17,10,149,30,27,29,129,40,16,160,14,47,236,50,236,212,60,236,212,60,236,48,0,20,30,1,50,62,1,52,46,1,34,6,1,21,33,53,33,53, + 38,39,46,1,52,55,54,55,54,55,17,51,17,22,23,30,1,20,6,7,6,7,21,1,13,91,156,184,157,90,90,157,184,156,3,108,251,24,2,24, + 82,74,114,133,67,69,111,74,82,184,88,69,114,132,132,114,74,83,3,34,112,95,56,56,95,112,96,56,56,253,17,147,147,243,11,31,49,166,198,83, + 86,47,31,11,1,134,254,123,13,30,50,166,198,166,49,32,11,242,0,0,0,2,255,236,0,0,4,79,5,213,0,11,0,38,0,66,64,16,40,69, + 7,28,31,26,35,28,23,13,1,28,18,69,38,39,16,196,252,236,220,178,64,13,1,93,60,252,60,220,178,64,31,1,93,236,236,49,0,64,13,4, + 149,35,13,10,149,26,23,25,129,12,160,37,47,236,236,212,60,236,212,60,236,48,0,20,30,1,50,62,1,52,46,1,34,6,19,53,38,39,46,1, + 52,55,54,55,54,55,17,51,17,22,23,30,1,20,6,7,6,7,17,33,53,1,13,91,156,184,157,90,90,157,184,156,156,82,74,114,133,67,69,111, + 74,82,184,88,69,114,132,132,114,74,83,253,48,3,34,112,95,56,56,95,112,96,56,56,253,17,243,11,31,49,166,198,83,86,47,31,11,1,134,254, + 123,13,30,50,166,198,166,49,32,11,254,123,147,0,0,0,0,2,0,113,0,0,4,212,5,213,0,30,0,42,0,0,33,17,38,39,46,1,52,55, + 54,55,54,55,53,33,53,33,21,33,21,22,23,30,1,20,6,7,6,7,21,33,21,0,20,30,1,50,62,1,52,46,1,34,6,2,4,82,74,114, + 133,67,69,111,74,82,254,181,3,78,254,181,88,69,114,132,132,114,74,83,2,24,252,57,91,156,184,157,90,90,157,184,156,1,134,11,31,49,166,198, + 83,86,47,31,11,243,147,147,242,13,30,50,166,198,166,49,32,11,242,147,3,34,112,95,56,56,95,112,96,56,56,0,0,2,255,236,0,0,4,212, + 5,213,0,32,0,44,0,0,37,21,33,53,33,53,38,39,46,1,52,55,54,55,54,55,53,33,53,33,21,33,21,22,23,30,1,20,6,7,6,7, + 21,0,20,30,1,50,62,1,52,46,1,34,6,4,212,251,24,2,24,82,74,114,133,67,69,111,74,82,254,181,3,78,254,181,88,69,114,132,132,114, + 74,83,254,81,91,156,184,157,90,90,157,184,156,147,147,147,243,11,31,49,166,198,83,86,47,31,11,243,147,147,242,13,30,50,166,198,166,49,32,11, + 242,2,143,112,95,56,56,95,112,96,56,56,0,2,255,236,0,0,4,79,5,213,0,30,0,42,0,0,41,1,53,33,53,38,39,46,1,52,55,54, + 55,54,55,53,33,53,33,21,33,21,22,23,30,1,20,6,7,6,7,0,20,30,1,50,62,1,52,46,1,34,6,2,188,253,48,2,24,82,74,114, + 133,67,69,111,74,82,254,181,3,78,254,181,88,69,114,132,132,114,74,83,254,81,91,156,184,157,90,90,157,184,156,147,243,11,31,49,166,198,83,86, + 47,31,11,243,147,147,242,13,30,50,166,198,166,49,32,11,1,157,112,95,56,56,95,112,96,56,56,0,255,255,252,236,3,251,255,16,6,32,16,7, + 2,156,251,254,255,26,0,0,255,255,0,170,2,134,6,130,5,213,18,39,15,92,0,0,2,134,16,39,15,92,0,0,3,202,16,7,15,92,0,0, + 5,13,0,0,255,255,0,170,2,134,6,131,5,213,18,39,15,92,0,0,2,134,16,39,15,92,0,1,3,201,16,7,15,93,0,0,5,13,0,0, + 255,255,0,170,2,134,6,130,5,213,18,39,15,92,0,0,2,134,16,39,15,93,0,0,3,201,16,7,15,92,0,0,5,13,0,0,255,255,0,170, + 2,134,6,130,5,213,18,39,15,92,0,0,2,134,16,39,15,93,0,0,3,201,16,7,15,93,0,0,5,13,0,0,255,255,0,170,2,134,6,130, + 5,213,18,39,15,93,0,0,2,134,16,39,15,92,0,0,3,201,16,7,15,92,0,0,5,13,0,0,255,255,0,170,2,134,6,130,5,213,18,39, + 15,93,0,0,2,134,16,39,15,92,0,0,3,201,16,7,15,93,0,0,5,13,0,0,255,255,0,170,2,134,6,130,5,213,18,39,15,93,0,0, + 2,134,16,39,15,93,0,0,3,201,16,7,15,92,0,0,5,13,0,0,255,255,0,170,2,134,6,130,5,213,18,39,15,93,0,0,2,134,16,39, + 15,93,0,0,3,201,16,7,15,93,0,0,5,13,0,0,0,1,1,151,5,24,5,27,5,224,0,11,0,58,64,13,2,1,0,3,6,5,4,7, + 10,9,8,11,12,16,212,64,9,63,11,111,11,143,11,144,11,4,93,220,57,57,212,220,57,57,212,204,57,57,49,0,182,5,4,7,1,10,11,12, + 16,212,204,50,220,60,204,48,1,7,35,39,35,7,35,39,35,7,35,39,5,27,100,50,50,175,50,50,50,175,50,50,100,5,224,200,100,100,100,100, + 200,0,0,0,0,1,0,201,254,86,5,252,5,213,0,14,0,0,33,35,17,1,33,17,51,17,1,33,17,51,21,1,35,5,51,196,253,106,254,240, + 196,2,150,1,16,201,254,146,134,4,225,251,31,5,213,251,31,4,225,250,213,170,254,86,0,1,0,193,254,86,5,56,4,96,0,14,0,0,33,35, + 17,1,35,17,51,17,1,51,17,51,21,1,35,4,128,183,253,228,236,183,2,27,237,184,254,222,123,3,131,252,125,4,96,252,127,3,129,252,57,153, + 254,86,0,0,0,2,0,174,254,86,4,88,4,123,0,31,0,32,0,0,37,53,14,1,35,34,38,53,17,51,17,20,22,51,50,54,53,17,51,17, + 16,2,33,34,38,39,53,30,1,51,50,54,1,3,160,67,177,117,193,200,184,124,124,149,173,184,254,254,250,97,172,81,81,158,82,181,180,254,221,106, + 66,102,99,240,231,2,166,253,97,159,159,190,164,2,123,252,43,254,226,254,233,29,30,179,44,42,189,4,208,0,0,0,255,255,0,125,254,144,4,71, + 3,82,16,39,22,213,1,25,254,144,16,6,20,142,0,0,255,255,0,125,254,162,4,71,3,82,16,39,22,196,1,169,254,162,16,6,20,142,0,0, + 255,255,0,125,254,162,4,71,5,247,16,39,5,75,255,194,255,6,16,39,22,196,1,169,254,162,16,6,20,142,0,0,255,255,0,125,255,218,4,71, + 5,120,16,39,22,199,0,250,4,226,16,6,20,142,0,0,255,255,0,125,255,218,4,71,5,170,16,39,22,201,0,250,5,20,16,6,20,142,0,0, + 255,255,255,171,254,12,4,126,2,38,16,39,22,213,2,88,254,12,16,6,20,146,0,0,255,255,255,171,254,12,4,126,2,38,16,39,22,196,3,52, + 254,72,16,6,20,146,0,0,255,255,255,171,254,12,4,126,2,38,16,39,22,196,0,180,0,40,16,39,22,196,3,52,254,72,16,6,20,146,0,0, + 255,255,255,171,254,12,4,126,3,182,16,39,22,197,1,244,3,32,16,6,20,146,0,0,255,255,255,171,254,12,4,126,4,176,16,39,22,201,1,244, + 4,26,16,6,20,146,0,0,255,255,0,130,254,12,10,71,3,182,16,38,20,150,0,0,16,39,22,196,5,95,3,32,16,7,22,196,5,245,254,162, + 255,255,255,236,254,162,6,10,3,232,16,38,20,151,0,0,16,39,22,196,3,7,3,82,16,7,22,196,3,157,254,162,255,255,255,236,254,162,7,55, + 3,232,16,38,20,152,0,0,16,39,22,196,3,7,3,82,16,7,22,196,3,157,254,162,255,255,0,130,254,12,10,71,2,238,16,38,20,150,0,0, + 16,7,22,199,5,120,255,6,255,255,255,236,254,12,6,10,2,238,16,38,20,151,0,0,16,7,22,199,3,32,255,6,255,255,255,236,254,12,7,55, + 2,238,16,38,20,152,0,0,16,7,22,199,3,32,255,6,255,255,0,130,254,12,10,71,4,176,16,38,20,150,0,0,16,39,22,198,4,226,3,32, + 16,7,22,199,5,120,255,6,255,255,255,236,254,12,6,10,4,176,16,38,20,151,0,0,16,39,22,198,2,138,3,32,16,7,22,199,3,32,255,6, + 255,255,255,236,254,12,7,55,4,176,16,38,20,152,0,0,16,39,22,198,2,138,3,32,16,7,22,199,3,32,255,6,255,255,0,130,254,12,9,225, + 2,229,16,38,20,158,0,0,16,7,22,197,5,120,254,162,255,255,255,236,254,162,6,50,2,229,16,38,20,159,0,0,16,7,22,197,2,88,254,162, + 255,255,255,236,254,162,7,4,2,229,16,38,20,160,0,0,16,7,22,197,2,88,254,162,255,255,0,130,254,12,9,225,4,176,16,38,20,158,0,0, + 16,7,22,198,4,126,3,32,255,255,255,236,0,0,6,50,4,176,16,38,20,159,0,0,16,7,22,198,1,144,3,32,255,255,255,236,0,0,7,4, + 4,176,16,38,20,160,0,0,16,7,22,198,1,144,3,32,255,255,0,144,0,0,7,172,6,20,16,38,20,166,0,0,16,7,22,198,3,132,3,82, + 255,255,255,236,0,0,5,212,6,20,16,38,20,167,0,0,16,7,22,198,2,124,3,82,255,255,255,236,0,0,6,164,6,20,16,38,20,168,0,0, + 16,7,22,198,2,124,3,82,255,255,0,117,254,12,4,178,5,70,16,38,20,174,0,0,16,7,22,198,1,44,3,182,255,255,255,236,0,0,3,248, + 6,64,16,38,20,175,0,0,16,7,22,198,1,44,4,176,255,255,255,236,0,0,3,240,5,70,16,38,20,176,0,0,16,7,22,198,1,44,3,182, + 255,255,0,130,254,162,8,92,3,17,16,38,22,205,0,0,16,7,22,196,3,107,254,162,255,255,255,236,254,212,3,63,3,217,16,38,22,206,0,0, + 16,7,22,196,1,168,254,212,255,255,255,236,254,212,4,32,3,8,16,38,22,207,0,0,16,7,22,196,1,168,254,212,255,255,0,130,254,162,8,92, + 4,76,16,38,22,205,0,0,16,39,22,196,5,245,3,182,16,7,22,196,3,107,254,162,255,255,255,236,254,212,3,63,5,20,16,38,22,206,0,0, + 16,39,22,196,1,169,4,126,16,7,22,196,1,168,254,212,255,255,255,236,254,212,4,32,4,126,16,38,22,207,0,0,16,39,22,196,1,187,3,232, + 16,7,22,196,1,168,254,212,255,255,0,130,253,168,8,92,3,17,16,38,22,205,0,0,16,7,22,199,2,238,254,162,255,255,255,236,253,218,3,63, + 3,217,16,38,22,206,0,0,16,7,22,199,1,44,254,212,255,255,255,236,253,218,4,32,3,8,16,38,22,207,0,0,16,7,22,199,1,44,254,212, + 255,255,0,107,254,12,6,192,4,1,16,38,22,208,0,0,16,7,22,196,4,1,3,107,255,255,255,236,0,0,3,63,5,20,16,38,22,209,0,0, + 16,7,22,196,1,169,4,126,255,255,255,236,0,0,4,32,4,126,16,38,22,210,0,0,16,7,22,196,1,187,3,232,255,255,0,107,254,12,6,192, + 4,251,16,38,22,208,0,0,16,7,22,198,3,132,3,107,255,255,255,236,0,0,3,63,6,14,16,38,22,209,0,0,16,7,22,198,1,44,4,126, + 255,255,255,236,0,0,4,32,5,120,16,38,22,210,0,0,16,7,22,198,1,62,3,232,0,1,0,130,255,167,8,130,6,20,0,55,0,0,37,50, + 36,54,61,1,52,39,37,36,61,1,52,55,54,55,1,33,1,6,7,6,23,22,23,5,22,29,1,20,23,22,59,1,21,35,34,38,39,6,4,35, + 33,34,39,36,17,52,55,51,6,21,20,23,22,51,4,246,184,1,107,49,121,252,89,254,157,11,19,160,2,176,1,96,252,104,95,15,9,4,6,174, + 3,202,248,47,15,22,46,90,92,57,11,83,254,108,161,254,12,192,128,254,182,63,184,65,203,104,151,88,150,108,5,9,107,18,145,55,190,7,6,62, + 99,96,1,155,253,232,55,35,10,35,53,27,150,38,248,69,94,17,5,184,50,48,57,130,38,98,1,11,138,92,94,136,126,66,34,0,0,1,255,236, + 0,0,6,132,6,20,0,32,0,0,35,53,33,50,55,54,39,38,39,37,36,61,1,52,55,54,55,1,33,1,6,7,6,23,22,23,5,22,21,20, + 7,6,35,20,5,8,147,46,19,3,13,99,252,89,254,157,11,17,162,2,176,1,96,252,104,95,15,9,4,6,174,3,202,248,62,95,223,184,104,44, + 28,110,15,145,55,190,8,5,62,98,97,1,155,253,232,55,35,10,35,53,27,150,38,248,113,101,155,0,0,1,255,236,0,0,7,6,6,20,0,41, + 0,0,35,53,33,50,55,54,53,52,39,37,36,61,1,52,55,54,55,1,33,1,6,7,6,23,22,23,5,22,29,1,20,23,22,59,1,21,35,34, + 38,39,6,35,20,5,8,136,57,16,112,252,89,254,157,11,17,162,2,176,1,96,252,104,95,15,9,4,6,174,3,202,248,47,15,22,46,90,90,56, + 11,96,167,184,104,29,24,127,17,145,55,190,8,4,63,98,97,1,155,253,232,55,35,10,35,53,27,150,38,248,69,95,16,5,184,47,40,87,0,0, + 255,255,0,130,255,167,7,217,6,20,16,38,20,28,0,0,16,7,22,213,5,70,3,132,255,255,255,236,0,0,3,207,6,20,16,38,20,191,0,0, + 16,7,22,213,1,244,3,132,255,255,255,236,0,0,4,127,6,20,16,38,20,192,0,0,16,7,22,213,1,244,3,132,255,255,0,144,255,201,6,210, + 6,20,16,38,20,190,0,0,16,7,22,196,2,238,5,70,255,255,255,236,0,0,3,207,6,114,16,38,20,191,0,0,16,7,22,196,0,200,5,220, + 255,255,255,236,0,0,4,127,6,114,16,38,20,192,0,0,16,7,22,196,0,200,5,220,255,255,0,144,253,168,6,210,6,20,16,38,20,190,0,0, + 16,7,22,199,2,88,254,162,255,255,255,236,253,218,3,207,6,20,16,38,20,191,0,0,16,7,22,199,0,200,254,212,255,255,255,236,253,218,4,127, + 6,20,16,38,20,192,0,0,16,7,22,199,0,200,254,212,255,255,0,130,255,167,7,217,7,43,16,38,20,32,0,0,16,7,22,213,5,70,3,132, + 255,255,255,236,0,0,3,207,7,43,16,38,20,33,0,0,16,7,22,213,1,244,3,132,255,255,255,236,0,0,4,127,7,43,16,38,20,34,0,0, + 16,7,22,213,1,244,3,132,255,255,0,130,254,162,7,217,7,43,16,38,20,32,0,0,16,7,22,197,2,88,254,162,255,255,255,236,254,212,3,207, + 7,43,16,38,20,33,0,0,16,7,22,197,0,200,254,212,255,255,255,236,254,212,4,127,7,43,16,38,20,34,0,0,16,7,22,197,0,200,254,212, + 255,255,0,130,255,167,7,217,8,52,16,38,20,32,0,0,16,7,22,198,3,132,6,164,255,255,255,236,0,0,3,207,8,52,16,38,20,33,0,0, + 16,7,22,198,0,75,6,164,255,255,255,236,0,0,4,127,8,52,16,38,20,34,0,0,16,7,22,198,0,75,6,164,255,255,0,144,254,200,6,35, + 7,158,16,38,20,194,0,0,16,7,22,196,4,106,7,8,255,255,255,236,0,0,1,175,7,158,16,38,20,195,0,0,16,7,22,196,1,1,7,8, + 255,255,255,236,0,0,2,186,7,158,16,38,20,196,0,0,16,7,22,196,1,1,7,8,255,255,0,144,254,200,6,35,8,52,16,38,20,194,0,0, + 16,7,22,198,3,232,6,164,255,255,255,236,0,0,2,15,8,52,16,38,20,195,0,0,16,7,22,198,0,127,6,164,255,255,255,236,0,0,2,186, + 8,52,16,38,20,196,0,0,16,7,22,198,0,127,6,164,255,255,0,144,252,224,6,35,6,20,16,38,20,194,0,0,16,7,22,199,2,38,253,218, + 255,255,255,236,254,12,1,243,6,20,16,38,20,195,0,0,16,7,22,199,0,99,255,6,255,255,255,236,254,12,2,186,6,20,16,38,20,196,0,0, + 16,7,22,199,0,129,255,6,255,255,0,147,252,199,6,43,2,188,16,38,20,44,0,0,16,39,22,196,2,63,2,38,16,7,22,196,2,188,252,199, + 255,255,255,236,254,212,1,135,3,232,16,39,22,196,0,224,3,82,16,38,22,203,0,0,16,7,22,196,0,224,254,212,255,255,255,236,254,212,2,126, + 3,232,16,39,22,196,0,224,3,82,16,38,22,204,0,0,16,7,22,196,0,224,254,212,255,255,0,147,252,174,6,43,2,188,16,38,20,44,0,0, + 16,39,22,196,2,63,2,38,16,7,22,213,2,38,252,174,255,255,255,236,254,244,2,6,3,232,16,39,22,196,0,224,3,82,16,38,22,203,0,0, + 16,7,22,213,0,80,254,244,255,255,255,236,254,244,2,126,3,232,16,39,22,196,0,224,3,82,16,38,22,204,0,0,16,7,22,213,0,80,254,244, + 255,255,0,147,254,12,6,43,3,182,16,38,20,44,0,0,16,7,22,198,1,244,2,38,255,255,255,236,0,0,1,243,4,226,16,38,22,203,0,0, + 16,7,22,198,0,99,3,82,255,255,255,236,0,0,2,126,4,226,16,38,22,204,0,0,16,7,22,198,0,99,3,82,0,1,0,0,0,2,87,10, + 221,218,237,250,95,15,60,245,0,31,8,0,0,0,0,0,206,63,215,178,0,0,0,0,206,63,215,178,247,214,252,174,13,114,9,85,0,0,0,8, + 0,0,0,1,0,0,0,0,0,1,0,0,7,109,254,29,0,0,13,226,247,214,250,81,13,114,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,23,220,4,205,0,102,0,0,0,0,2,170,0,0,2,139,0,0,3,53,1,53,3,174,0,197,6,180,0,158,5,23,0,170,7,154,0,113, + 6,61,0,129,2,51,0,197,3,31,0,176,3,31,0,164,4,0,0,61,6,180,0,217,2,139,0,158,2,227,0,100,2,139,0,219,2,178,0,0, + 5,23,0,135,5,23,0,225,5,23,0,150,5,23,0,156,5,23,0,100,5,23,0,158,5,23,0,143,5,23,0,168,5,23,0,139,5,23,0,129, + 2,178,0,240,2,178,0,158,6,180,0,217,6,180,0,217,6,180,0,217,4,63,0,147,8,0,0,135,5,121,0,16,5,125,0,201,5,150,0,115, + 6,41,0,201,5,14,0,201,4,154,0,201,6,51,0,115,6,4,0,201,2,92,0,201,2,92,255,150,5,63,0,201,4,117,0,201,6,231,0,201, + 5,252,0,201,6,76,0,115,4,211,0,201,6,76,0,115,5,143,0,201,5,20,0,135,4,227,255,250,5,219,0,178,5,121,0,16,7,233,0,68, + 5,123,0,61,4,227,255,252,5,123,0,92,3,31,0,176,2,178,0,0,3,31,0,199,6,180,0,217,4,0,255,236,4,0,0,170,4,231,0,123, + 5,20,0,186,4,102,0,113,5,20,0,113,4,236,0,113,2,209,0,47,5,20,0,113,5,18,0,186,2,57,0,193,2,57,255,219,4,162,0,186, + 2,57,0,193,7,203,0,186,5,18,0,186,4,229,0,113,5,20,0,186,5,20,0,113,3,74,0,186,4,43,0,111,3,35,0,55,5,18,0,174, + 4,188,0,61,6,139,0,86,4,188,0,59,4,188,0,61,4,51,0,88,5,23,1,0,2,178,1,4,5,23,1,0,6,180,0,217,2,139,0,0, + 3,53,1,53,5,23,0,172,5,23,0,129,5,23,0,94,5,23,0,82,2,178,1,4,4,0,0,92,4,0,0,215,8,0,1,27,3,197,0,115, + 4,229,0,158,6,180,0,217,2,227,0,100,8,0,1,27,4,0,0,213,4,0,0,195,6,180,0,217,3,53,0,94,3,53,0,98,4,0,1,115, + 5,23,0,174,5,23,0,158,2,139,0,219,4,0,1,35,3,53,0,137,3,197,0,96,4,229,0,193,7,193,0,137,7,193,0,137,7,193,0,98, + 4,63,0,143,5,121,0,16,5,121,0,16,5,121,0,16,5,121,0,16,5,121,0,16,5,121,0,16,7,203,0,8,5,150,0,115,5,14,0,201, + 5,14,0,201,5,14,0,201,5,14,0,201,2,92,0,59,2,92,0,162,2,92,255,254,2,92,0,6,6,51,0,10,5,252,0,201,6,76,0,115, + 6,76,0,115,6,76,0,115,6,76,0,115,6,76,0,115,6,180,1,25,6,76,0,102,5,219,0,178,5,219,0,178,5,219,0,178,5,219,0,178, + 4,227,255,252,4,215,0,201,5,10,0,186,4,231,0,123,4,231,0,123,4,231,0,123,4,231,0,123,4,231,0,123,4,231,0,123,7,219,0,123, + 4,102,0,113,4,236,0,113,4,236,0,113,4,236,0,113,4,236,0,113,2,57,255,199,2,57,0,144,2,57,255,222,2,57,255,244,4,229,0,113, + 5,18,0,186,4,229,0,113,4,229,0,113,4,229,0,113,4,229,0,113,4,229,0,113,6,180,0,217,4,229,0,72,5,18,0,174,5,18,0,174, + 5,18,0,174,5,18,0,174,4,188,0,61,5,20,0,186,4,188,0,61,5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123,5,121,0,16, + 4,231,0,123,5,150,0,115,4,102,0,113,5,150,0,115,4,102,0,113,5,150,0,115,4,102,0,113,5,150,0,115,4,102,0,113,6,41,0,201, + 5,20,0,113,6,51,0,10,5,20,0,113,5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,5,14,0,201, + 4,236,0,113,5,14,0,201,4,236,0,113,6,51,0,115,5,20,0,113,6,51,0,115,5,20,0,113,6,51,0,115,5,20,0,113,6,51,0,115, + 5,20,0,113,6,4,0,201,5,18,255,229,7,84,0,201,5,143,0,120,2,92,255,228,2,57,255,211,2,92,0,3,2,57,255,242,2,92,255,245, + 2,57,255,228,2,92,0,176,2,57,0,150,2,92,0,201,2,57,0,193,4,184,0,201,4,114,0,193,2,92,255,150,2,57,255,219,5,63,0,201, + 4,162,0,186,4,162,0,186,4,117,0,201,2,57,0,193,4,117,0,201,2,57,0,136,4,117,0,201,3,0,0,193,4,117,0,201,2,188,0,193, + 4,127,255,242,2,70,0,2,5,252,0,201,5,18,0,186,5,252,0,201,5,18,0,186,5,252,0,201,5,18,0,186,6,130,0,205,5,252,0,201, + 5,18,0,186,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113,8,143,0,115,8,47,0,113,5,143,0,201, + 3,74,0,186,5,143,0,201,3,74,0,130,5,143,0,201,3,74,0,186,5,20,0,135,4,43,0,111,5,20,0,135,4,43,0,111,5,20,0,135, + 4,43,0,111,5,20,0,135,4,43,0,111,4,227,255,250,3,35,0,55,4,227,255,250,3,35,0,55,4,227,255,250,3,35,0,55,5,219,0,178, + 5,18,0,174,5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174,5,219,0,178, + 5,18,0,174,7,233,0,68,6,139,0,86,4,227,255,252,4,188,0,61,4,227,255,252,5,123,0,92,4,51,0,88,5,123,0,92,4,51,0,88, + 5,123,0,92,4,51,0,88,2,209,0,47,5,20,0,32,5,225,255,151,5,125,0,201,5,20,0,186,5,125,0,0,5,20,0,0,5,160,0,115, + 5,150,0,115,4,102,0,113,6,51,0,10,6,141,255,151,5,125,0,201,5,20,0,113,4,229,0,113,5,14,0,131,6,76,0,117,4,234,0,164, + 4,154,255,150,2,209,255,127,6,51,0,115,5,126,0,8,7,223,0,186,2,212,0,201,2,92,0,10,5,247,0,201,4,162,0,185,2,57,0,10, + 4,188,0,61,7,203,0,178,5,252,255,150,5,18,0,186,6,76,0,115,7,78,0,103,4,229,0,118,7,151,0,115,6,19,0,113,5,55,255,151, + 5,20,0,185,5,143,0,201,5,20,0,114,4,43,0,100,5,14,0,201,2,176,254,242,3,35,0,55,4,227,0,24,3,35,0,55,4,227,255,250, + 6,221,0,173,5,18,0,176,6,29,0,78,5,196,0,201,5,243,255,252,5,216,0,61,5,123,0,92,4,51,0,88,5,84,0,160,5,84,0,92, + 4,159,0,104,4,51,0,113,5,23,0,150,5,84,0,93,4,159,0,104,4,21,0,88,5,20,0,186,2,92,0,201,3,240,0,201,3,172,0,20, + 2,93,0,201,11,96,0,201,10,100,0,201,9,60,0,113,6,175,0,201,6,75,0,201,3,167,0,193,7,115,0,201,7,100,0,201,6,97,0,186, + 5,121,0,16,4,231,0,123,2,92,255,254,2,57,255,224,6,76,0,115,4,229,0,113,5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174, + 5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174,4,236,0,113,5,121,0,16,4,231,0,123,5,121,0,16, + 4,231,0,123,7,203,0,8,7,219,0,123,6,51,0,115,5,20,0,113,6,51,0,115,5,20,0,113,5,63,0,201,4,162,255,233,6,76,0,115, + 4,229,0,113,6,76,0,115,4,229,0,113,5,84,0,160,4,159,0,88,2,57,255,219,11,96,0,201,10,100,0,201,9,60,0,113,6,51,0,115, + 5,20,0,113,8,231,0,201,5,117,0,201,5,252,0,201,5,18,0,186,5,121,0,16,4,231,0,123,7,203,0,8,7,219,0,123,6,76,0,102, + 4,229,0,72,5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123,5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,2,92,255,167, + 2,57,255,195,2,92,0,5,2,57,255,227,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113,5,143,0,199,3,74,0,130,5,143,0,201, + 3,74,0,186,5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174,5,20,0,135,4,43,0,111,4,227,255,250,3,35,0,55,5,4,0,156, + 4,44,0,71,6,4,0,201,5,18,255,240,5,226,0,201,6,180,0,113,5,150,0,113,4,226,0,113,5,123,0,92,4,51,0,88,5,121,0,16, + 4,231,0,123,5,14,0,201,4,236,0,113,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113,6,76,0,115, + 4,229,0,113,4,227,255,252,4,188,0,61,3,204,0,138,6,190,0,186,3,209,0,55,2,57,255,219,7,252,0,113,7,252,0,113,5,121,255,253, + 5,150,0,12,4,102,0,9,4,117,0,10,4,227,255,178,4,43,0,111,4,51,0,88,4,211,0,80,3,213,0,80,5,125,0,10,5,219,0,12, + 5,121,0,16,5,14,0,201,4,236,0,113,2,92,255,150,2,57,255,219,6,64,0,115,5,20,0,113,5,143,0,10,3,74,0,14,4,227,255,246, + 4,188,0,11,4,205,0,174,5,20,0,113,5,20,0,186,5,20,0,186,4,101,0,127,4,102,0,113,5,20,0,113,5,146,0,113,4,236,0,113, + 4,236,0,113,6,142,0,124,4,83,0,133,4,65,0,133,6,52,0,133,5,80,0,113,2,57,255,219,5,145,0,113,5,20,0,113,5,9,0,113, + 4,196,0,96,4,196,0,96,5,18,0,174,5,18,0,186,5,18,0,186,2,57,0,14,2,181,0,166,2,249,0,116,3,42,0,75,3,230,0,77, + 2,58,0,193,5,166,0,193,7,203,0,186,7,203,0,186,7,203,0,186,5,43,255,219,5,35,0,186,5,18,0,179,4,229,0,113,6,221,0,113, + 5,211,0,148,5,71,0,112,3,80,0,0,3,80,0,0,3,79,0,0,3,74,0,186,3,73,0,186,4,62,0,132,4,62,0,116,4,212,0,186, + 4,212,0,186,4,43,0,111,2,176,255,217,2,176,255,217,3,177,0,55,2,176,254,242,3,35,0,55,3,35,0,55,5,18,0,0,4,241,0,113, + 4,201,0,193,4,188,0,61,6,139,0,86,4,188,0,61,4,227,0,102,4,51,0,88,4,51,0,88,4,159,0,88,4,159,0,109,4,21,0,88, + 4,21,0,88,4,21,0,88,4,21,0,88,6,76,0,115,4,163,0,186,5,80,0,113,5,170,0,113,5,59,0,186,2,86,254,242,5,86,0,186, + 4,14,0,186,5,209,0,113,4,21,0,88,4,21,0,88,8,29,0,113,8,118,0,113,8,26,0,113,6,164,0,55,4,225,0,55,6,58,0,55, + 6,201,0,47,5,165,0,193,5,60,0,193,4,31,0,54,4,31,0,54,5,74,0,0,5,79,0,0,3,60,0,117,3,49,0,117,1,102,255,233, + 2,18,0,117,2,93,0,72,2,94,0,72,3,8,0,32,4,31,0,54,2,251,0,38,2,58,0,160,3,174,0,160,2,139,0,174,2,139,0,178, + 2,139,0,196,2,117,0,117,2,117,0,117,2,245,0,117,2,245,0,117,4,0,1,11,4,0,1,11,4,0,0,193,4,0,0,193,4,0,0,193, + 4,0,0,193,2,51,0,214,4,0,0,213,4,0,1,115,4,0,0,170,2,51,0,214,4,0,0,213,4,0,0,170,4,0,1,115,2,178,0,111, + 2,178,0,111,2,117,0,117,2,117,0,117,4,0,1,31,4,0,1,31,3,30,0,100,2,138,0,100,4,0,0,199,4,0,1,154,4,0,0,238, + 4,0,1,76,4,0,0,182,4,0,0,240,2,134,255,255,4,0,0,239,3,104,0,117,1,84,0,122,2,252,0,117,3,141,0,117,2,245,0,117, + 3,242,0,214,3,242,0,214,3,242,0,214,3,242,0,214,3,242,0,214,4,0,0,193,4,0,0,213,4,37,0,174,4,0,0,238,4,0,0,182, + 0,0,252,168,0,0,253,113,0,0,252,193,0,0,252,180,0,0,252,217,0,0,251,236,0,0,252,191,0,0,253,162,0,0,252,215,0,0,253,55, + 0,0,252,236,0,0,252,244,0,0,252,197,0,0,253,188,0,0,252,240,0,0,252,93,0,0,252,191,0,0,252,191,0,0,254,31,0,0,253,144, + 0,0,253,144,0,0,255,121,0,0,252,168,0,0,253,113,0,0,253,36,0,0,253,196,0,0,254,85,0,0,254,240,0,0,253,128,0,0,253,11, + 0,0,253,11,0,0,253,36,0,0,253,11,0,0,253,122,0,0,253,119,0,0,253,162,0,0,252,213,0,0,253,40,0,0,253,106,0,0,253,35, + 0,0,253,76,0,0,253,188,0,0,252,240,0,0,252,99,0,0,252,197,0,0,252,191,0,0,252,191,0,0,252,191,0,0,252,180,0,0,252,217, + 0,0,251,236,0,0,251,236,0,0,251,140,0,0,253,120,0,0,250,237,0,0,251,104,0,0,250,18,0,0,253,172,0,0,252,241,0,0,253,33, + 0,0,252,99,0,0,253,43,0,0,254,6,0,0,251,236,0,0,252,168,0,0,253,113,0,0,252,180,0,0,253,144,0,0,252,231,0,0,253,198, + 0,0,252,213,0,0,253,31,0,0,253,21,0,0,253,31,0,0,252,182,0,0,252,182,0,0,252,182,0,0,252,99,0,0,253,51,0,0,0,0, + 0,0,253,120,0,0,252,191,0,0,253,43,0,0,253,120,0,0,255,46,0,0,252,144,0,0,252,112,0,0,252,112,0,0,252,112,0,0,252,112, + 0,0,253,42,0,0,252,112,0,0,252,119,5,60,0,201,4,139,0,193,6,229,0,201,5,46,0,201,2,58,0,160,2,58,0,160,5,252,0,201, + 5,51,0,186,4,0,1,182,4,101,0,127,4,102,0,113,4,101,0,127,2,178,0,158,4,0,1,115,4,0,0,215,5,138,0,16,2,139,0,219, + 5,248,255,231,6,248,255,243,3,68,255,237,6,128,255,242,6,153,255,225,6,155,255,219,2,181,0,5,5,121,0,16,5,125,0,201,4,117,0,201, + 5,121,0,16,5,14,0,201,5,123,0,92,6,4,0,201,6,76,0,115,2,92,0,201,5,63,0,201,5,121,0,16,6,231,0,201,5,252,0,201, + 5,14,0,201,6,76,0,115,6,4,0,201,4,211,0,201,5,14,0,201,4,227,255,250,4,227,255,252,6,76,0,115,5,123,0,61,6,76,0,115, + 6,29,0,78,2,92,0,6,4,227,255,252,5,70,0,113,4,83,0,133,5,18,0,186,2,181,0,166,4,161,0,149,5,70,0,113,5,27,0,192, + 4,188,0,32,4,229,0,113,4,83,0,133,4,90,0,107,5,18,0,186,4,229,0,113,2,181,0,166,4,183,0,191,4,188,0,61,5,23,0,174, + 4,120,0,74,4,118,0,107,4,229,0,113,4,209,0,74,5,20,0,186,4,178,0,113,5,18,0,113,4,209,0,100,4,161,0,149,5,71,0,112, + 4,159,0,59,5,71,0,112,6,179,0,135,2,181,0,5,4,161,0,149,4,229,0,113,4,161,0,149,6,179,0,135,5,63,0,201,4,234,0,167, + 4,244,0,113,5,151,0,87,6,189,255,225,5,151,0,87,5,71,0,112,6,179,0,65,5,79,0,112,6,76,0,115,4,229,0,113,5,48,0,139, + 4,178,0,113,4,154,0,201,3,171,255,64,5,71,0,179,5,71,0,191,6,236,0,114,5,5,0,119,7,120,0,115,6,179,0,135,6,17,0,115, + 5,70,0,113,6,85,0,201,4,235,0,45,5,126,0,79,4,219,0,100,6,36,0,115,5,0,0,54,5,152,0,115,4,229,0,113,4,227,0,44, + 4,74,0,55,5,79,0,112,5,20,0,186,4,102,0,113,2,57,255,219,6,76,0,115,4,236,0,113,4,236,0,196,4,215,0,201,5,20,0,186, + 5,150,0,115,6,231,0,201,5,53,0,127,5,20,0,85,5,160,0,115,5,150,0,115,5,160,0,115,5,14,0,201,5,14,0,201,6,74,255,250, + 4,225,0,201,5,150,0,115,5,20,0,135,2,92,0,201,2,92,0,6,2,92,255,150,8,192,0,84,8,92,0,201,6,74,255,250,5,174,0,201, + 5,252,0,201,4,224,0,35,6,4,0,201,5,121,0,16,5,125,0,201,5,125,0,201,4,225,0,201,6,64,0,101,5,14,0,201,8,158,0,40, + 5,33,0,135,5,252,0,201,5,252,0,201,5,174,0,201,6,4,0,84,6,231,0,201,6,4,0,201,6,76,0,115,6,4,0,201,4,211,0,201, + 5,150,0,115,4,227,255,250,4,224,0,35,6,227,0,121,5,123,0,61,6,54,0,201,5,124,0,175,8,142,0,201,8,192,0,201,6,169,0,60, + 7,15,0,201,5,125,0,201,5,150,0,111,8,163,0,211,5,143,0,136,4,231,0,123,4,239,0,112,4,183,0,186,4,52,0,186,5,136,0,107, + 4,236,0,113,7,53,0,70,4,65,0,133,5,51,0,186,5,51,0,186,4,213,0,186,5,29,0,76,6,9,0,186,5,59,0,186,4,229,0,113, + 5,59,0,186,5,20,0,186,4,102,0,113,4,169,0,60,4,188,0,61,6,215,0,112,4,188,0,59,5,114,0,186,4,186,0,150,7,82,0,186, + 7,137,0,186,5,167,0,62,6,81,0,186,4,183,0,186,4,100,0,113,6,188,0,193,4,208,0,116,4,236,0,113,4,236,0,113,5,0,0,47, + 4,52,0,186,4,100,0,113,4,43,0,111,2,57,0,193,2,57,255,244,2,57,255,219,7,56,0,76,7,48,0,186,5,55,0,47,4,213,0,186, + 5,51,0,186,4,188,0,61,5,59,0,186,7,120,0,115,6,179,0,135,6,42,0,30,5,96,0,30,7,138,0,211,5,254,0,193,7,9,0,16, + 6,68,0,51,9,71,0,201,8,3,0,193,6,76,0,115,4,229,0,107,8,55,0,201,6,152,0,193,5,23,0,115,4,83,0,91,6,218,0,16, + 7,3,0,50,6,76,0,115,4,229,0,113,6,64,0,16,5,82,0,50,6,64,0,16,5,82,0,50,7,240,0,115,7,60,0,113,7,160,0,115, + 6,17,0,113,9,112,0,118,8,57,0,152,7,120,0,115,6,179,0,135,5,150,0,115,4,102,0,113,4,5,0,59,0,0,251,218,0,0,253,7, + 0,0,253,179,0,0,253,179,0,0,249,202,3,88,247,214,3,88,248,88,6,46,0,201,5,106,0,193,5,125,0,33,4,183,0,38,4,211,0,201, + 5,20,0,186,4,225,0,201,4,52,0,186,5,102,0,71,4,185,0,56,4,254,0,201,4,61,0,186,8,158,0,40,7,53,0,70,5,33,0,135, + 4,65,0,133,5,174,0,201,4,213,0,186,5,174,0,201,4,213,0,186,5,174,0,33,4,213,0,61,6,218,0,50,6,167,0,42,6,4,0,201, + 5,73,0,193,8,29,0,201,7,4,0,193,8,166,0,201,7,83,0,193,7,6,0,115,5,139,0,113,5,150,0,115,4,102,0,113,4,227,255,250, + 4,169,0,60,4,227,255,252,4,188,0,61,4,227,255,252,4,188,0,61,5,123,0,61,4,188,0,59,7,121,255,250,6,116,0,5,5,124,0,175, + 4,186,0,150,5,124,0,175,4,186,0,150,5,124,0,175,5,18,0,186,7,135,0,20,5,211,0,15,7,135,0,20,5,211,0,15,2,92,0,201, + 8,158,0,40,7,53,0,70,5,63,0,201,4,213,0,191,6,53,0,54,5,93,0,46,6,4,0,201,5,73,0,193,6,54,0,201,5,114,0,193, + 5,124,0,175,4,186,0,150,7,26,0,201,6,50,0,193,2,57,0,193,5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123,7,203,0,8, + 7,219,0,123,5,14,0,201,4,236,0,113,6,76,0,117,4,236,0,113,6,76,0,117,4,236,0,113,8,158,0,40,7,53,0,70,5,33,0,135, + 4,65,0,133,5,84,0,160,4,159,0,88,5,252,0,201,5,51,0,186,5,252,0,201,5,51,0,186,6,76,0,115,4,229,0,113,6,76,0,115, + 4,229,0,113,6,76,0,115,4,229,0,113,5,150,0,111,4,100,0,113,4,224,0,35,4,188,0,61,4,224,0,35,4,188,0,61,4,224,0,35, + 4,188,0,61,5,124,0,175,4,186,0,150,4,225,0,201,4,52,0,186,7,15,0,201,6,81,0,186,5,102,0,71,4,185,0,56,5,123,0,61, + 4,188,0,59,5,123,0,61,4,188,0,59,5,125,0,145,4,183,0,113,8,12,0,145,7,45,0,113,7,204,0,201,6,244,0,171,5,110,0,201, + 4,181,0,171,8,147,0,54,7,168,0,46,8,231,0,201,7,189,0,193,6,51,0,115,5,71,0,113,6,47,255,250,5,176,0,5,4,234,0,164, + 4,83,0,133,6,4,0,84,5,29,0,76,9,90,0,84,7,243,0,76,7,39,0,201,6,234,0,186,8,65,0,136,7,227,0,116,6,76,0,115, + 5,20,0,113,7,233,0,68,6,139,0,86,5,174,0,201,4,213,0,186,8,165,0,84,7,62,0,76,8,166,0,201,7,76,0,186,6,88,0,201, + 5,118,0,186,6,33,0,178,5,219,0,178,6,7,0,93,6,7,0,90,5,219,0,178,6,45,0,178,5,31,0,188,5,219,0,178,6,224,0,178, + 6,7,0,93,5,135,0,188,4,68,0,188,7,96,0,188,6,232,1,8,5,219,0,178,5,186,0,70,6,32,0,168,6,7,0,100,6,35,0,105, + 6,85,0,178,5,210,0,146,5,213,0,0,6,15,0,160,5,219,0,178,5,180,0,120,6,103,0,90,6,37,0,168,6,85,0,178,5,219,0,178, + 6,7,0,100,5,164,0,150,5,141,0,178,5,243,0,160,4,77,0,188,6,124,0,120,6,14,0,50,6,76,0,115,6,82,0,110,2,117,0,117, + 2,139,0,178,1,224,0,0,2,228,0,5,1,231,255,255,3,62,0,8,4,0,0,90,7,203,0,174,5,18,0,186,5,67,0,113,5,78,0,186, + 5,18,0,174,5,20,0,113,4,30,0,186,5,18,0,186,5,232,0,186,5,67,0,113,5,18,0,186,2,44,0,186,7,215,0,186,4,251,0,113, + 5,18,0,174,5,18,0,186,4,221,0,106,5,19,0,186,5,8,0,140,5,18,0,174,2,44,255,212,5,18,255,217,3,253,0,0,5,18,0,186, + 3,60,0,10,7,203,0,174,4,123,0,110,5,48,0,186,5,18,0,174,5,18,0,174,7,202,0,174,5,18,0,186,5,17,0,111,3,122,0,186, + 7,202,0,174,5,23,0,41,4,224,0,111,6,113,0,70,6,126,0,174,2,178,0,240,2,227,0,100,0,0,2,68,0,0,0,171,0,0,0,255, + 0,0,0,255,0,0,2,68,0,0,1,199,0,0,1,199,0,0,1,99,0,0,1,99,0,0,0,0,0,0,0,0,0,0,1,47,0,0,2,78, + 0,0,2,68,2,227,0,100,0,0,1,99,2,92,0,209,0,0,5,25,0,0,0,197,2,92,0,209,3,136,0,102,0,0,1,99,5,89,0,186, + 4,160,0,88,3,76,0,88,4,94,0,88,5,58,0,186,2,46,0,186,2,197,0,88,5,58,0,186,5,48,0,185,1,202,0,136,4,76,0,88, + 4,59,0,88,4,140,0,88,5,79,0,186,5,111,0,88,2,46,0,186,3,52,0,88,5,49,0,185,5,2,0,88,5,30,0,186,4,255,0,186, + 4,81,0,88,4,191,0,88,5,173,0,186,4,132,0,88,5,171,0,88,5,66,0,20,3,196,0,186,3,98,0,136,2,165,0,136,3,83,0,186, + 5,40,0,186,5,25,0,0,5,25,0,0,6,14,0,133,7,208,0,133,2,149,0,219,0,0,0,252,2,139,0,219,4,63,0,147,3,195,0,163, + 2,57,255,181,2,57,0,108,3,221,255,171,2,57,0,108,6,67,0,130,2,57,0,193,7,136,0,130,4,49,0,139,7,136,0,130,7,136,0,130, + 5,42,0,157,5,42,0,157,5,42,0,157,3,144,0,125,3,144,0,125,3,221,255,171,3,221,255,171,9,196,0,130,9,196,0,130,9,172,0,130, + 9,172,0,130,7,102,0,144,7,102,0,144,4,198,0,117,4,198,0,117,2,88,255,236,8,75,0,130,6,53,0,107,6,152,0,144,5,208,0,144, + 4,244,0,140,5,224,0,147,4,49,0,139,3,221,255,171,6,67,0,130,6,67,0,130,0,0,0,220,0,0,0,220,0,0,0,220,0,0,0,220, + 0,0,0,220,0,0,0,220,0,0,0,200,0,0,0,236,0,0,0,152,0,0,1,79,0,0,1,79,0,0,0,220,4,0,0,243,4,76,1,184, + 4,76,1,22,4,76,0,82,4,76,0,76,4,76,0,175,4,76,0,135,4,76,0,85,4,76,0,60,4,76,0,60,4,76,0,100,4,76,0,133, + 2,153,0,0,2,139,0,178,4,92,0,87,7,136,0,130,6,53,0,107,0,0,1,201,2,86,0,122,7,136,0,130,7,136,0,130,7,136,0,130, + 7,136,0,130,7,136,0,130,7,136,0,130,7,136,0,130,7,136,0,130,5,42,0,157,5,42,0,157,5,42,0,157,5,42,0,157,5,42,0,157, + 5,42,0,157,5,42,0,157,3,144,0,125,3,144,0,125,3,144,0,125,3,144,0,125,3,144,0,125,3,144,0,125,3,144,0,125,3,144,0,125, + 3,144,0,125,3,221,255,171,3,221,255,171,3,252,255,171,4,61,255,171,4,226,255,171,4,61,255,171,3,221,255,171,3,221,255,171,3,221,255,171, + 9,196,0,130,9,196,0,130,9,196,0,130,9,172,0,130,9,172,0,130,7,102,0,144,4,198,0,117,8,75,0,130,8,75,0,130,8,75,0,130, + 8,75,0,130,8,75,0,130,8,75,0,130,6,53,0,107,6,53,0,107,7,41,0,130,8,110,0,130,7,41,0,130,6,152,0,144,6,152,0,144, + 6,152,0,144,7,41,0,130,7,41,0,130,7,41,0,130,7,41,0,130,7,41,0,130,7,41,0,130,5,208,0,144,5,208,0,144,5,208,0,144, + 5,208,0,144,5,224,0,147,5,224,0,147,5,224,0,147,5,224,0,147,5,224,0,147,5,150,0,144,5,42,0,157,3,221,255,171,6,67,0,130, + 6,67,0,130,4,49,0,139,4,76,1,184,4,76,1,22,4,76,0,82,4,76,0,76,4,76,0,82,4,76,0,106,4,76,0,208,4,76,0,60, + 4,76,0,60,4,76,0,100,5,23,0,135,5,23,0,225,5,23,0,225,5,23,0,225,5,23,0,225,5,23,0,225,5,23,0,225,5,23,0,214, + 5,23,0,214,5,23,0,157,2,57,0,193,4,146,0,113,3,100,0,61,4,188,0,61,5,59,0,186,5,59,0,186,4,192,0,113,5,59,0,186, + 6,161,0,113,3,129,0,193,3,129,0,61,4,120,0,186,4,229,0,193,2,205,0,61,7,172,0,193,3,200,0,61,6,68,0,61,5,59,0,186, + 5,0,0,61,5,223,0,193,4,61,0,193,5,203,0,112,3,200,0,61,5,0,0,61,4,192,0,113,4,61,0,193,4,61,0,193,4,46,0,193, + 4,192,0,113,4,192,0,113,0,0,0,217,0,0,0,66,0,0,1,164,0,0,0,191,0,0,0,91,0,0,0,66,0,0,0,91,0,0,1,154, + 0,0,0,213,2,130,0,200,2,130,0,200,4,123,0,100,4,123,0,100,2,227,255,236,5,23,0,176,5,93,0,130,5,120,0,139,5,129,0,137, + 3,220,0,109,5,6,0,127,5,120,0,139,5,128,0,115,5,91,0,186,5,34,0,129,5,41,0,0,5,62,0,87,5,69,0,95,5,0,0,73, + 5,0,0,73,5,246,0,89,6,34,0,186,5,126,0,104,5,126,0,104,5,157,0,64,5,128,0,115,5,120,0,139,5,50,0,79,5,15,0,115, + 5,160,0,79,6,141,0,127,5,16,0,115,5,120,0,139,6,77,0,203,5,15,0,111,0,0,251,96,4,80,0,123,4,80,252,154,0,0,251,64, + 0,0,251,64,0,0,251,64,0,0,251,64,0,0,252,254,0,0,252,167,0,0,251,96,0,0,251,28,5,78,0,129,3,0,0,122,5,66,0,122, + 3,174,255,211,4,97,0,92,3,238,0,188,5,100,0,147,0,0,253,18,0,0,251,127,0,0,251,62,0,0,252,78,0,0,251,28,0,0,252,154, + 5,23,0,135,5,32,0,99,5,32,0,99,5,93,0,22,5,0,0,99,5,0,0,99,5,160,0,89,5,93,0,130,5,100,0,150,5,106,0,105, + 8,58,0,127,8,58,0,127,6,254,0,120,5,222,0,110,5,110,0,111,6,173,0,110,4,236,0,100,6,36,0,80,6,7,0,60,7,80,0,121, + 3,160,0,60,4,245,0,120,6,190,0,60,7,15,0,120,4,255,0,130,6,214,0,100,6,64,0,50,5,9,0,80,7,75,0,110,4,247,0,130, + 4,246,0,130,6,214,0,100,6,237,0,100,5,202,0,90,5,10,0,131,4,247,0,110,5,0,0,120,4,245,0,130,6,139,0,121,6,253,0,120, + 4,236,0,130,4,252,0,100,5,0,0,130,5,204,0,60,6,193,0,60,4,196,0,130,5,130,0,111,4,196,0,60,4,192,0,110,5,232,0,80, + 4,16,0,100,4,36,0,100,4,166,0,90,6,139,0,100,4,16,0,100,4,26,0,100,4,1,0,41,6,104,0,100,4,36,0,100,4,21,0,90, + 8,132,0,100,4,46,0,100,4,46,0,130,6,74,0,100,4,16,0,100,4,36,0,100,6,94,0,100,4,46,0,130,5,60,0,90,4,46,0,10, + 6,154,0,100,4,26,0,100,6,74,0,100,4,36,0,100,4,36,0,60,4,46,0,130,4,146,0,90,4,46,0,100,4,36,0,131,4,41,0,100, + 4,46,0,130,3,162,0,20,4,16,0,100,4,36,0,120,4,16,0,100,4,16,0,100,4,36,0,100,4,111,0,100,6,159,0,100,4,106,0,90, + 4,16,0,100,4,146,0,80,4,16,0,100,3,149,0,110,2,151,0,100,5,121,0,16,5,121,0,16,5,121,0,16,5,121,0,16,6,39,0,201, + 6,39,0,201,6,39,0,201,6,39,0,201,6,39,0,119,6,39,0,119,6,174,0,201,6,173,0,16,6,174,0,201,6,173,0,16,6,174,0,201, + 6,173,0,16,7,188,0,201,8,14,0,201,7,188,0,201,8,14,0,201,6,39,0,201,7,188,0,201,8,14,0,119,7,188,0,201,8,14,0,119, + 6,39,0,119,2,12,0,201,4,88,0,137,3,99,0,94,3,99,0,94,3,29,0,137,3,29,0,137,3,37,0,137,3,29,0,137,3,186,0,72, + 3,21,0,137,2,12,0,201,3,29,0,137,3,29,0,137,3,29,0,137,8,184,0,16,7,69,0,16,7,160,0,201,8,239,0,119,5,121,0,16, + 5,121,0,16,5,121,0,16,5,121,0,16,5,213,0,119,5,213,0,119,5,213,0,119,5,213,0,119,5,213,0,119,5,213,0,119,6,174,0,201, + 5,121,0,16,6,174,0,201,6,173,0,16,6,174,0,201,6,173,0,16,7,188,0,201,8,14,0,119,7,188,0,201,8,14,0,119,7,188,0,201, + 8,14,0,119,7,188,0,201,8,14,0,119,5,213,0,119,4,17,0,137,1,137,0,137,5,219,0,178,5,219,0,178,5,219,0,178,5,219,0,178, + 5,215,0,119,5,215,0,119,5,215,0,119,5,215,0,119,5,215,0,121,5,215,0,121,7,94,0,201,7,28,0,178,7,94,0,201,7,28,0,178, + 7,94,0,201,7,28,0,178,7,108,0,201,7,52,0,119,7,108,0,201,7,52,0,119,7,148,0,201,7,52,0,121,7,148,0,201,7,52,0,121, + 7,148,0,240,3,121,0,137,7,5,0,178,7,5,0,178,6,237,0,119,7,31,0,121,5,7,0,70,5,7,0,201,5,7,0,201,5,7,0,201, + 5,7,0,70,5,7,0,70,5,7,0,70,5,7,0,201,5,7,0,201,6,225,0,201,6,42,0,70,6,133,0,201,6,135,0,201,6,133,0,201, + 6,135,0,201,6,225,0,201,6,42,0,70,6,225,0,201,6,42,0,70,6,133,0,201,6,135,0,201,6,133,0,201,6,135,0,201,6,133,0,240, + 3,65,0,137,3,65,0,56,6,1,0,70,6,51,0,201,6,1,0,70,6,51,0,201,5,7,0,70,5,7,0,201,5,7,0,201,5,7,0,201, + 5,7,0,70,5,7,0,70,5,7,0,70,5,7,0,201,5,7,0,201,6,225,0,201,6,42,0,70,6,133,0,201,6,135,0,201,6,133,0,201, + 6,135,0,201,6,225,0,201,6,42,0,70,6,225,0,201,6,42,0,70,6,133,0,201,6,135,0,201,6,133,0,201,6,135,0,201,6,133,0,240, + 3,122,0,137,3,122,0,137,4,225,0,119,4,117,0,201,4,117,0,201,4,117,0,201,4,225,0,119,4,225,0,119,4,225,0,119,4,117,0,201, + 4,117,0,201,5,254,0,201,6,38,0,119,5,248,0,201,6,28,0,201,5,248,0,201,6,28,0,201,5,254,0,201,6,38,0,119,5,254,0,201, + 6,38,0,119,5,248,0,201,6,28,0,201,5,248,0,201,6,28,0,201,5,248,0,240,3,22,0,137,4,17,0,137,3,22,0,137,6,208,0,119, + 6,208,0,70,6,208,0,70,6,208,0,11,6,208,0,119,6,208,0,119,6,208,0,119,6,208,0,70,6,208,0,70,8,142,0,201,8,71,0,119, + 8,121,0,201,6,208,0,70,8,121,0,201,6,208,0,70,6,208,0,70,4,205,0,137,3,159,0,137,4,205,0,137,6,208,0,119,6,208,0,70, + 6,208,0,70,6,208,0,70,6,208,0,119,6,208,0,119,6,208,0,119,6,208,0,70,6,208,0,70,8,142,0,201,8,71,0,119,8,121,0,201, + 8,61,0,70,8,121,0,201,8,61,0,70,8,142,0,201,8,71,0,119,8,142,0,201,8,71,0,119,8,170,0,201,8,61,0,70,8,170,0,201, + 8,61,0,70,4,205,0,137,5,213,0,119,4,211,0,70,4,211,0,201,4,211,0,201,4,211,0,201,4,211,0,70,4,211,0,70,4,211,0,70, + 4,211,0,201,4,211,0,201,6,173,0,201,6,8,0,70,6,86,0,201,6,43,0,201,6,86,0,201,6,43,0,201,6,173,0,201,6,8,0,70, + 6,173,0,201,6,8,0,70,6,86,0,201,6,43,0,201,6,86,0,201,6,43,0,201,6,86,0,240,3,89,0,137,3,93,0,137,3,89,0,137, + 5,178,0,70,5,178,0,70,5,178,0,70,7,34,0,70,7,34,0,70,7,34,0,70,7,34,0,70,7,71,0,201,6,250,0,70,7,71,0,201, + 6,250,0,70,7,71,0,201,6,250,0,70,9,31,0,201,8,204,0,70,9,31,0,201,8,204,0,70,9,31,0,201,8,204,0,70,9,31,0,201, + 8,204,0,70,5,32,0,137,5,4,0,119,5,4,0,201,5,4,0,201,5,4,0,201,5,4,0,119,5,4,0,119,5,4,0,119,5,4,0,201, + 5,4,0,201,6,193,0,201,6,63,0,119,6,135,0,201,6,140,0,201,6,135,0,201,6,140,0,201,6,193,0,201,6,63,0,119,6,193,0,201, + 6,63,0,119,6,135,0,201,6,140,0,201,6,135,0,201,6,140,0,201,6,135,0,240,3,89,0,137,3,29,0,137,3,224,0,137,7,83,0,201, + 7,83,0,119,7,83,0,119,7,83,0,201,7,83,0,201,7,83,0,201,4,211,0,201,4,211,0,201,4,211,0,201,4,211,0,70,4,211,0,70, + 4,211,0,70,6,173,0,201,6,8,0,70,3,89,0,137,5,213,0,119,5,121,0,150,5,121,0,150,5,121,0,150,5,121,0,150,5,207,0,77, + 5,207,0,77,5,207,0,119,5,207,0,119,7,100,0,201,8,14,0,119,4,17,0,137,5,219,0,178,5,219,0,178,5,219,0,178,5,219,0,178, + 5,219,0,178,5,219,0,178,5,215,0,83,5,215,0,83,5,215,0,121,5,215,0,121,7,148,0,201,7,52,0,121,4,17,0,137,6,165,0,70, + 6,165,0,119,6,165,0,119,6,165,0,70,6,165,0,70,6,165,0,119,6,165,0,119,4,130,0,137,6,4,0,201,3,224,0,137,8,96,0,137, + 8,96,0,137,8,96,0,137,8,96,0,137,8,96,0,137,8,96,0,137,8,96,0,137,6,154,0,137,6,165,0,70,6,165,0,119,6,165,0,70, + 6,165,0,119,10,19,0,137,10,19,0,137,10,19,0,137,8,4,0,137,8,4,0,137,10,19,0,137,10,19,0,137,5,153,0,137,8,149,0,137, + 6,208,0,70,6,208,0,70,6,208,0,119,6,208,0,119,6,208,0,70,6,208,0,70,4,205,0,137,5,37,0,119,5,37,0,33,5,37,0,33, + 5,37,0,119,5,37,0,119,5,37,0,33,5,37,0,33,3,89,0,10,5,7,0,201,6,41,0,201,6,35,0,115,3,191,0,137,3,191,0,137, + 3,141,0,117,8,96,0,137,10,122,0,137,13,15,0,137,13,15,0,137,11,0,0,137,11,0,0,137,13,15,0,137,13,15,0,137,3,209,255,236, + 3,241,255,236,5,178,255,236,7,115,255,236,9,52,255,236,10,245,255,236,3,241,255,236,5,178,255,236,7,115,255,236,9,51,255,236,10,245,255,236, + 3,252,255,236,5,191,255,236,7,130,255,236,9,69,255,236,11,8,255,236,3,241,255,236,5,178,255,236,7,112,255,236,9,50,255,236,10,245,255,236, + 3,252,255,236,6,5,255,236,6,79,255,236,9,163,255,236,9,51,255,236,5,119,255,236,4,15,0,113,4,14,255,236,4,188,0,61,5,189,0,11, + 7,219,0,123,4,176,0,62,4,102,0,113,4,215,0,186,4,215,0,36,3,237,0,186,4,83,0,130,2,57,0,193,3,40,0,0,4,162,0,186, + 4,170,0,2,6,9,0,186,5,51,0,186,4,229,0,113,4,102,0,127,5,121,0,113,5,121,0,113,5,121,0,51,8,47,0,113,4,229,0,113, + 4,229,0,113,4,50,0,151,4,208,0,50,4,208,0,50,4,169,0,60,4,152,0,186,5,229,0,174,7,149,0,174,5,26,0,47,4,188,0,61, + 6,139,0,86,4,51,0,88,4,53,0,120,4,170,0,179,4,188,0,61,4,131,0,151,4,50,0,151,4,185,0,90,5,29,0,76,3,114,0,10, + 4,232,0,5,3,117,0,127,3,225,0,127,3,47,0,127,3,47,0,83,3,231,0,72,3,202,0,127,1,124,0,127,1,124,255,189,3,78,0,127, + 2,206,0,127,4,89,0,127,3,197,0,127,3,197,0,127,3,247,0,72,3,132,0,71,3,10,0,127,3,128,0,127,3,20,255,252,3,176,0,112, + 4,251,0,43,3,34,0,77,3,34,0,77,3,62,0,71,5,47,0,77,3,109,0,117,3,62,0,71,3,86,0,71,3,86,0,71,2,226,0,84, + 2,224,0,82,3,62,0,71,1,110,0,122,3,104,0,117,4,252,0,117,3,69,0,117,3,79,0,71,2,246,0,71,3,79,0,71,3,79,0,71, + 3,109,0,117,2,92,0,35,3,61,0,110,3,194,0,110,4,252,0,117,3,86,0,38,3,55,0,121,2,251,0,20,3,21,0,71,3,83,0,71, + 2,233,0,37,1,110,0,122,2,18,0,117,3,61,0,110,3,86,0,38,3,55,0,121,2,251,0,20,3,75,0,121,3,83,0,71,2,233,0,37, + 5,20,0,186,3,202,0,127,2,249,0,116,5,86,0,50,2,57,0,145,3,62,0,71,2,246,0,71,2,246,0,71,3,79,0,71,2,226,0,84, + 2,95,0,30,1,221,255,233,3,62,0,71,3,61,0,110,2,23,0,73,1,255,0,122,2,22,0,73,2,23,0,73,1,224,255,86,1,255,0,122, + 1,225,0,91,3,3,0,113,4,252,0,117,4,252,0,117,3,73,255,233,3,214,0,117,3,69,0,113,3,79,0,71,3,79,0,71,2,226,0,70, + 2,75,255,233,2,92,0,35,4,16,0,94,3,89,0,71,2,228,0,117,3,64,0,122,3,86,0,38,2,238,0,55,3,126,0,55,2,238,0,55, + 3,35,0,55,3,79,0,71,0,0,252,91,0,0,252,91,0,0,252,91,0,0,252,91,0,0,252,66,0,0,252,66,5,121,0,16,4,231,0,123, + 5,125,0,201,5,20,0,184,5,125,0,201,5,20,0,186,5,125,0,201,5,20,0,186,5,150,0,115,4,102,0,113,6,41,0,201,5,20,0,113, + 6,41,0,201,5,20,0,113,6,41,0,201,5,20,0,113,6,41,0,201,5,20,0,113,6,41,0,201,5,20,0,113,5,14,0,201,4,236,0,113, + 5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,4,154,0,201,2,209,0,47, + 6,51,0,115,5,20,0,113,6,4,0,201,5,18,0,184,6,4,0,201,5,18,0,186,6,4,0,201,5,18,255,237,6,4,0,17,5,18,0,2, + 6,4,0,201,5,18,0,186,2,92,0,0,2,57,255,211,2,92,0,7,2,57,255,244,5,63,0,201,4,162,0,186,5,63,0,201,4,162,0,186, + 5,63,0,201,4,162,0,186,4,117,0,201,2,77,0,201,4,117,0,3,2,77,255,253,4,117,0,201,2,57,255,244,4,117,0,201,2,57,255,222, + 6,231,0,201,7,203,0,186,6,231,0,201,7,203,0,186,6,231,0,201,7,203,0,186,5,252,0,201,5,18,0,186,5,252,0,201,5,18,0,186, + 5,252,0,201,5,18,0,186,5,252,0,201,5,18,0,186,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113, + 6,76,0,115,4,229,0,113,4,211,0,201,5,20,0,186,4,211,0,201,5,20,0,186,5,143,0,201,3,74,0,186,5,143,0,201,3,74,0,186, + 5,143,0,201,3,74,0,186,5,143,0,201,3,74,0,84,5,20,0,135,4,43,0,111,5,20,0,135,4,43,0,111,5,20,0,135,4,43,0,111, + 5,20,0,135,4,43,0,111,5,20,0,135,4,43,0,111,4,227,255,250,3,35,0,55,4,227,255,250,3,35,0,55,4,227,255,250,3,35,0,55, + 4,227,255,250,3,35,0,55,5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174, + 5,219,0,178,5,18,0,174,5,121,0,16,4,188,0,61,5,121,0,16,4,188,0,61,7,233,0,68,6,139,0,86,7,233,0,68,6,139,0,86, + 7,233,0,68,6,139,0,86,7,233,0,68,6,139,0,86,7,233,0,68,6,139,0,86,5,123,0,61,4,188,0,59,5,123,0,61,4,188,0,59, + 4,227,255,252,4,188,0,61,5,123,0,92,4,51,0,88,5,123,0,92,4,51,0,88,5,123,0,92,4,51,0,88,5,18,0,186,3,35,0,4, + 6,139,0,86,4,188,0,61,4,231,0,123,2,209,0,47,2,209,0,2,2,209,0,47,6,38,0,178,4,229,0,113,5,121,0,16,4,231,0,123, + 5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123, + 5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123,5,121,0,16,4,231,0,123, + 5,121,0,16,4,231,0,123,5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113, + 5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,5,14,0,201,4,236,0,113,2,92,0,90,2,57,0,68, + 2,92,0,201,2,57,0,191,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113, + 6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113,6,76,0,115,4,229,0,113,7,78,0,103,4,229,0,118,7,78,0,103,4,229,0,118, + 7,78,0,103,4,229,0,118,7,78,0,103,4,229,0,118,7,78,0,103,4,229,0,118,5,219,0,178,5,18,0,174,5,219,0,178,5,18,0,174, + 6,221,0,173,5,18,0,176,6,221,0,173,5,18,0,176,6,221,0,173,5,18,0,176,6,221,0,173,5,18,0,176,6,221,0,173,5,18,0,176, + 4,227,255,252,4,188,0,61,4,227,255,252,4,188,0,61,4,227,255,252,4,188,0,61,4,227,255,252,4,188,0,61,6,39,0,201,3,209,0,32, + 5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,121,0,16,5,121,0,16, + 7,5,0,5,7,5,0,6,6,39,0,7,6,105,0,4,5,170,0,7,5,241,0,4,4,83,0,133,4,83,0,133,4,83,0,133,4,83,0,133, + 4,83,0,133,4,83,0,133,5,176,0,7,5,176,0,7,7,186,0,5,7,204,0,6,7,48,0,7,7,108,0,4,5,18,0,186,5,18,0,186, + 5,18,0,186,5,18,0,186,5,18,0,186,5,18,0,186,5,18,0,186,5,18,0,186,6,178,0,7,6,175,0,7,8,176,0,5,8,182,0,6, + 8,55,0,7,8,104,0,4,7,120,0,7,7,147,0,4,2,181,0,155,2,181,0,145,2,181,255,177,2,181,255,187,2,181,0,5,2,181,255,211, + 2,181,255,203,2,181,255,198,3,10,0,7,2,254,0,7,5,20,0,5,5,20,0,6,4,144,0,7,4,204,0,4,3,234,0,7,3,241,0,4, + 4,229,0,113,4,229,0,113,4,229,0,113,4,229,0,113,4,229,0,113,4,229,0,113,6,111,0,7,6,201,0,7,8,194,0,5,8,204,0,6, + 7,130,0,7,7,195,0,4,4,161,0,149,4,161,0,149,4,161,0,149,4,161,0,149,4,161,0,149,4,161,0,149,4,161,0,149,4,161,0,149, + 6,69,0,7,7,251,0,6,8,25,0,4,7,46,0,4,6,179,0,135,6,179,0,135,6,179,0,135,6,179,0,135,6,179,0,135,6,179,0,135, + 6,179,0,135,6,179,0,135,6,107,0,7,6,191,0,7,8,183,0,5,8,195,0,6,7,145,0,7,7,199,0,4,7,95,0,7,7,158,0,4, + 5,70,0,113,5,70,0,113,4,83,0,133,4,99,0,133,5,18,0,186,5,60,0,186,2,181,255,141,2,181,0,166,4,229,0,113,4,229,0,113, + 4,161,0,149,4,161,0,149,6,179,0,135,6,179,0,135,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113, + 5,70,0,113,5,70,0,113,5,121,0,16,5,121,0,16,7,5,0,5,7,5,0,6,6,39,0,7,6,105,0,4,5,170,0,7,5,241,0,4, + 5,18,0,186,5,18,0,186,5,18,0,186,5,18,0,186,5,18,0,186,5,18,0,186,5,18,0,186,5,18,0,186,6,178,0,7,6,175,0,7, + 8,176,0,5,8,182,0,6,8,55,0,7,8,104,0,4,7,120,0,7,7,147,0,4,6,179,0,135,6,179,0,135,6,179,0,135,6,179,0,135, + 6,179,0,135,6,179,0,135,6,179,0,135,6,179,0,135,6,107,0,7,6,191,0,7,8,183,0,5,8,195,0,6,7,145,0,7,7,199,0,4, + 7,95,0,7,7,158,0,4,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,70,0,113,5,121,0,16, + 5,121,0,16,5,187,255,252,5,138,0,16,5,121,0,16,4,0,1,134,4,0,1,182,4,0,1,134,4,0,0,182,4,0,0,182,5,18,0,186, + 5,18,0,186,5,60,0,186,5,18,0,186,5,18,0,186,6,112,255,252,5,248,255,231,7,114,255,252,6,248,255,243,6,4,0,201,4,0,0,137, + 4,0,0,180,4,0,0,182,2,181,255,235,2,181,255,227,2,181,255,216,2,181,0,5,2,181,255,228,2,181,255,230,2,92,255,245,2,92,0,3, + 3,205,255,252,3,68,255,237,4,0,0,126,4,0,0,149,4,0,0,182,4,161,0,149,4,161,0,149,4,161,0,149,4,161,0,149,5,20,0,186, + 5,20,0,186,4,161,0,149,4,161,0,149,4,227,255,252,4,227,255,252,6,195,255,252,6,153,255,225,5,123,0,7,4,0,0,170,4,0,0,215, + 4,0,0,170,6,179,0,135,6,179,0,135,6,179,0,135,6,179,0,135,6,179,0,135,7,135,255,252,6,128,255,242,7,97,255,252,6,155,255,219, + 6,29,0,78,4,0,1,115,4,0,1,134,4,0,0,0,8,0,0,0,4,0,0,0,8,0,0,0,2,163,0,0,2,0,0,0,1,86,0,0, + 5,23,0,0,2,139,0,0,1,153,0,0,0,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,227,0,100, + 2,227,0,100,5,23,0,100,4,0,0,100,8,0,0,100,8,0,0,0,4,0,1,4,4,0,255,236,2,139,0,174,2,139,0,178,2,139,0,174, + 2,139,0,178,4,37,0,174,4,37,0,174,4,37,0,174,4,37,0,174,4,0,0,57,4,0,0,57,4,184,1,51,4,184,1,51,2,173,0,236, + 5,87,0,236,8,0,0,236,2,139,0,220,0,0,0,0,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,153,0,0,10,188,0,113,13,226,0,113,1,209,0,40,2,253,0,40,4,41,0,40,1,209,0,40,2,253,0,40,4,41,0,40,2,182,0,11, + 3,51,0,158,3,51,0,193,6,180,0,195,3,226,0,147,4,63,0,147,4,0,255,236,6,110,255,167,6,110,255,167,2,0,255,170,8,0,0,61, + 4,0,0,221,1,86,254,137,3,31,0,176,3,31,0,176,7,96,0,74,5,221,0,147,5,221,0,147,3,250,0,100,5,23,0,236,4,0,0,216, + 4,0,0,216,4,0,0,61,2,178,1,29,6,110,255,167,4,0,0,61,3,153,0,145,8,0,0,100,6,110,255,167,6,180,1,56,4,176,0,250, + 5,78,0,40,6,180,1,102,6,180,1,102,2,139,0,219,6,97,0,100,6,180,0,112,2,139,0,219,2,139,0,219,1,199,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 3,53,0,87,1,110,0,122,3,53,0,63,3,53,0,102,3,53,0,92,3,53,0,108,3,53,0,89,3,53,0,83,4,57,0,137,4,57,0,137, + 4,57,0,137,1,247,0,111,1,247,0,103,3,48,0,117,3,53,0,87,3,53,0,137,3,53,0,94,3,53,0,98,3,53,0,63,3,53,0,102, + 3,53,0,92,3,53,0,108,3,53,0,89,3,53,0,83,4,57,0,137,4,57,0,137,4,57,0,137,1,247,0,111,1,247,0,103,3,34,0,77, + 3,86,0,71,3,79,0,71,3,141,0,117,3,86,0,71,3,60,0,117,3,104,0,117,1,84,0,122,4,252,0,117,3,48,0,117,3,109,0,117, + 2,252,0,117,2,92,0,35,7,4,0,86,5,23,0,115,5,23,0,96,5,23,0,133,5,23,0,129,7,203,0,186,5,252,0,117,10,46,0,201, + 8,151,0,201,7,233,0,59,6,70,0,95,5,23,0,113,5,23,0,0,5,23,0,40,5,23,0,20,10,46,0,208,5,23,0,46,5,23,0,68, + 5,23,0,93,5,23,0,16,6,49,0,117,5,23,0,165,5,23,0,20,5,23,0,106,5,110,0,10,0,0,252,19,0,0,252,61,0,0,252,61, + 0,0,252,61,0,0,252,19,0,0,251,80,0,0,252,61,8,38,0,67,8,38,0,67,5,150,0,115,8,252,0,195,5,35,255,214,8,38,0,60, + 8,137,0,60,4,234,0,164,5,150,0,111,7,157,0,195,7,232,0,73,6,9,0,2,6,204,0,201,5,18,0,72,5,18,0,90,3,194,0,59, + 5,148,0,106,5,195,0,68,3,78,255,228,6,139,0,32,6,104,0,198,8,82,0,54,8,0,1,27,5,148,0,110,5,156,0,200,6,76,0,115, + 6,98,0,66,6,131,0,83,6,86,0,200,7,44,0,169,5,121,0,201,8,40,1,3,8,152,255,252,8,0,1,39,5,121,0,16,5,245,0,92, + 4,159,0,88,6,29,0,78,6,29,0,78,4,238,0,24,2,181,0,68,5,63,0,201,5,121,0,16,6,74,0,92,5,160,0,130,6,214,0,125, + 4,188,0,87,4,216,0,162,6,74,0,84,4,154,0,201,8,142,0,57,3,178,0,104,5,246,0,103,5,100,255,251,3,186,0,27,5,40,0,86, + 3,10,0,70,7,104,0,90,9,141,0,151,5,158,0,36,5,210,0,0,5,60,0,200,6,202,0,201,6,124,0,25,6,51,0,163,4,117,0,8, + 4,117,0,7,4,227,255,252,6,141,0,87,5,170,0,90,4,236,0,91,2,207,0,79,2,207,255,22,6,61,0,59,4,54,0,81,7,193,0,137, + 7,193,0,137,10,246,0,137,7,193,0,137,7,193,0,94,7,193,0,137,7,193,0,94,7,193,0,98,7,193,0,63,7,193,0,137,7,193,0,102, + 7,193,0,137,7,193,0,98,7,193,0,102,7,193,0,108,4,139,0,137,2,92,0,201,3,240,0,201,5,132,0,201,7,98,0,201,5,121,0,16, + 7,97,0,16,8,245,0,16,10,137,0,16,7,87,0,201,5,123,0,61,7,119,0,61,9,13,0,61,4,117,0,201,5,150,0,115,6,41,0,201, + 6,231,0,201,2,57,0,193,3,169,0,193,5,25,0,193,6,126,0,193,4,188,0,61,6,125,0,61,7,237,0,61,9,93,0,61,6,141,0,193, + 4,188,0,59,6,148,0,59,8,4,0,59,2,57,0,193,4,102,0,113,5,20,0,113,7,203,0,186,9,246,0,121,6,41,0,201,9,246,0,121, + 5,160,0,115,4,101,0,127,5,150,0,115,7,193,0,87,6,180,0,100,6,180,1,163,6,180,0,117,6,180,1,163,6,180,0,100,6,180,1,163, + 6,180,1,32,6,180,1,32,6,180,1,32,6,180,1,32,6,180,0,100,6,180,0,117,6,180,0,44,6,180,0,22,6,180,0,100,6,180,1,165, + 6,180,0,117,6,180,1,165,6,180,0,100,6,180,0,117,6,180,0,100,6,180,1,165,6,180,0,117,6,180,1,165,6,180,1,165,6,180,0,100, + 6,180,0,118,6,180,0,100,6,180,0,118,6,180,0,100,6,180,0,100,6,180,1,42,6,180,1,90,6,180,1,172,6,180,1,90,6,180,1,172, + 6,180,1,221,6,180,0,100,6,180,0,45,6,180,0,79,6,180,0,222,6,180,0,112,6,180,0,211,6,180,0,157,6,180,0,100,6,180,0,100, + 6,180,3,5,6,180,1,163,6,180,0,117,6,180,0,117,6,180,3,5,6,180,1,163,6,180,0,100,6,180,0,119,6,180,0,100,6,180,0,100, + 6,180,0,120,6,180,0,118,6,180,0,120,6,180,0,100,6,180,0,100,6,180,0,100,6,180,0,100,6,180,0,117,6,180,0,100,6,180,1,165, + 6,180,0,117,6,180,1,165,6,180,0,100,6,180,1,164,6,180,1,32,6,180,0,188,6,180,0,188,6,180,1,32,6,180,0,100,6,180,0,117, + 6,180,0,100,6,180,0,117,6,180,1,163,6,180,1,163,6,180,0,100,6,180,1,163,6,180,0,117,6,180,1,163,6,180,0,107,6,180,0,117, + 6,180,0,55,6,180,1,94,6,180,0,72,6,180,1,94,6,180,1,94,6,180,1,94,6,180,1,64,6,180,1,94,6,180,1,94,6,180,1,94, + 6,180,0,117,6,180,0,122,6,180,0,122,6,180,1,94,6,180,0,117,6,180,0,119,6,180,0,117,6,180,0,100,6,180,0,117,6,180,0,100, + 6,180,0,100,6,180,0,117,6,180,0,100,6,180,0,55,6,180,0,117,6,180,0,55,5,121,0,16,5,23,0,135,4,35,0,95,5,14,0,201, + 5,14,0,201,6,248,0,155,5,90,255,250,5,90,255,250,6,248,0,175,6,248,0,175,5,190,0,217,6,248,0,175,6,248,0,175,5,190,0,217, + 5,23,1,44,6,14,0,156,6,14,0,156,5,100,0,25,6,180,0,217,6,180,0,217,6,180,0,217,2,178,0,0,5,24,1,138,6,180,1,5, + 5,2,1,68,5,2,1,88,5,25,0,61,5,25,0,61,5,25,0,61,5,183,0,220,6,170,0,220,6,180,1,27,7,44,0,175,7,44,0,175, + 6,180,0,237,4,0,1,176,4,0,0,102,4,0,1,16,4,0,0,102,5,219,1,8,5,219,1,8,5,219,1,8,5,219,1,8,4,43,0,117, + 6,80,0,117,8,117,0,117,4,43,0,117,6,80,0,117,8,117,0,117,4,43,0,117,4,43,0,117,4,43,0,117,5,23,0,121,5,23,0,121, + 2,21,0,161,5,23,0,121,6,180,0,217,6,180,0,217,6,180,0,216,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,162,6,180,0,217, + 3,0,0,208,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217, + 6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,216,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,182,0,217,6,182,0,217, + 8,0,0,207,8,0,0,205,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217, + 6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,218,6,180,0,218, + 6,180,0,218,6,180,0,218,8,96,0,148,8,96,0,148,3,182,0,176,6,180,0,216,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217, + 6,180,0,217,6,180,0,218,6,180,0,217,6,180,0,217,6,180,0,208,6,180,0,208,6,180,0,208,6,180,0,208,6,180,0,217,6,180,0,217, + 6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,204,6,180,0,204,6,180,0,204,6,180,0,204, + 6,180,0,190,6,180,0,217,6,180,0,190,6,180,0,217,6,180,0,190,6,180,0,190,5,219,1,8,5,219,1,8,5,219,1,8,6,180,0,217, + 6,180,0,217,6,180,0,217,6,180,0,217,6,62,0,217,6,62,0,217,6,180,0,187,6,180,0,187,6,180,0,187,6,180,0,187,6,180,0,187, + 6,180,0,187,6,180,0,187,6,180,0,187,6,180,0,187,6,180,0,187,6,180,0,187,6,180,0,187,6,180,0,187,6,248,0,175,6,248,0,175, + 6,248,0,175,6,248,0,175,4,42,0,175,4,42,0,175,6,248,0,175,6,248,0,175,6,248,0,175,6,248,0,175,6,248,0,175,6,248,0,175, + 6,248,0,175,6,248,0,175,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,8,0,0,121,8,0,0,121, + 6,180,0,98,6,180,0,121,4,42,0,238,5,219,0,200,5,219,0,200,5,219,0,200,6,180,1,27,6,180,1,27,6,144,255,250,6,144,255,250, + 6,144,0,140,6,144,0,140,3,244,0,6,2,139,0,219,5,2,0,249,6,180,0,217,8,0,0,217,8,0,0,217,8,0,0,217,8,0,0,217, + 8,0,0,217,6,180,0,217,5,220,0,99,5,220,0,99,6,180,0,190,6,180,0,217,6,180,0,210,6,180,0,210,6,180,1,124,6,180,0,217, + 6,180,0,217,6,180,0,217,11,97,0,148,11,97,0,148,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217, + 6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,225, + 6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,213,8,0,3,150,8,0,0,236,8,0,0,236,8,0,0,236,8,0,0,88,6,248,0,175, + 5,190,0,217,6,248,0,175,6,248,0,175,5,190,0,217,6,248,0,175,6,248,0,175,8,0,0,88,6,248,0,175,5,190,0,217,6,248,0,175, + 5,190,0,217,6,248,0,217,4,209,0,74,4,209,0,114,5,20,0,146,6,180,1,163,6,180,1,163,6,180,1,163,6,180,1,163,3,232,1,59, + 3,31,0,176,3,31,0,199,3,31,0,176,3,31,0,199,6,120,2,244,6,120,0,100,6,120,2,244,6,120,0,100,6,180,0,217,4,27,0,6, + 8,0,0,247,6,180,0,217,3,192,0,176,3,192,0,134,3,192,0,176,3,192,0,134,4,43,1,175,4,43,0,42,9,56,0,156,9,56,0,156, + 11,80,0,156,9,56,0,156,11,140,0,120,11,80,0,1,6,252,0,150,2,181,0,166,5,20,0,186,6,179,0,135,5,70,0,113,6,15,0,26, + 9,56,0,156,6,252,0,35,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,2,141,4,0,0,176,4,0,0,176,4,0,0,176, + 4,0,0,176,4,0,0,176,4,0,2,141,4,0,0,176,6,0,2,163,6,0,0,168,6,0,2,163,6,0,2,163,6,0,0,168,6,0,2,163, + 6,0,0,168,4,43,1,175,6,180,0,55,7,143,0,186,6,252,0,150,6,39,0,6,5,23,0,89,5,20,255,131,5,20,0,146,7,44,0,152, + 7,44,0,152,7,44,0,152,7,44,0,152,7,44,0,152,7,44,0,152,7,44,0,152,7,44,0,152,7,44,0,152,7,44,0,152,4,209,255,236, + 4,209,255,236,4,209,2,24,4,209,1,200,4,209,255,236,4,209,255,236,4,209,2,24,4,209,1,200,4,209,255,235,4,209,255,236,4,209,2,24, + 4,209,1,200,4,209,2,24,4,209,2,24,4,209,1,200,4,209,1,200,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,2,24, + 4,209,2,24,4,209,1,200,4,209,1,200,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,2,24,4,209,2,24,4,209,1,200, + 4,209,1,200,4,209,1,200,4,209,1,200,4,209,1,200,4,209,1,200,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236, + 4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236, + 4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236, + 4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236, + 4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,2,24,4,209,1,200,4,209,255,236, + 4,209,1,120,4,209,2,24,4,209,1,120,4,209,1,120,4,209,255,236,4,209,255,236,4,209,255,236,4,209,2,24,4,209,1,120,4,209,1,120, + 4,209,255,236,4,209,255,236,4,209,255,236,4,209,2,24,4,209,1,120,4,209,1,120,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236, + 4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,255,236,4,209,2,24,4,209,255,236, + 4,209,255,236,4,209,2,24,4,209,255,147,4,209,255,147,4,209,255,147,4,209,255,236,4,209,2,24,4,209,2,124,4,209,2,24,4,209,255,236, + 4,209,1,200,4,209,2,124,4,209,1,200,4,209,255,236,4,209,1,200,4,209,255,236,4,209,1,200,6,39,255,236,6,39,255,236,6,39,255,236, + 6,39,255,236,6,39,255,236,6,39,255,236,6,39,255,236,6,39,255,236,6,39,255,236,6,39,255,236,6,39,255,236,6,39,255,236,6,39,255,236, + 6,39,255,236,6,39,255,236,6,39,255,236,6,39,3,19,6,39,255,236,6,39,255,236,6,39,255,236,6,39,255,236,6,39,5,113,6,39,255,236, + 6,39,3,19,6,39,255,236,6,39,255,236,6,39,255,236,6,39,255,236,6,39,255,236,6,39,3,19,6,39,255,236,6,39,255,236,7,143,0,186, + 7,143,0,186,7,143,0,186,7,143,0,186,7,143,0,186,7,143,0,186,7,143,0,186,7,143,0,186,7,143,0,186,7,143,0,186,5,108,0,186, + 5,108,0,186,7,143,0,186,7,143,0,186,4,103,0,186,4,103,0,186,6,39,0,6,6,39,0,6,6,39,0,6,6,39,0,6,4,4,0,6, + 4,4,0,6,6,39,0,6,6,39,0,6,4,4,0,6,4,4,0,6,6,39,0,6,6,39,0,6,6,39,0,6,6,39,0,6,4,4,0,6, + 4,4,0,6,6,39,0,6,6,39,0,6,4,4,0,6,4,4,0,6,6,39,0,6,6,39,0,6,6,39,0,6,6,39,0,6,6,39,0,6, + 6,251,0,112,3,244,0,6,6,251,0,112,6,251,0,114,6,251,0,112,6,251,0,112,6,251,0,112,6,251,0,112,6,251,0,112,6,251,0,112, + 6,251,0,112,6,251,0,112,6,251,0,112,4,55,0,112,4,55,0,186,6,84,0,186,7,195,0,186,7,195,0,186,7,195,0,186,3,25,0,6, + 3,25,0,6,3,25,0,6,3,25,0,6,6,251,0,112,6,251,0,112,6,39,0,6,6,39,0,6,6,39,0,6,6,39,0,6,4,184,1,51, + 7,143,0,186,7,143,0,186,7,143,0,186,7,143,0,186,7,143,0,186,6,39,0,6,6,39,0,6,6,39,0,6,8,244,0,112,7,143,0,186, + 7,143,0,186,7,143,0,186,7,143,0,186,6,251,0,112,6,251,0,112,6,251,0,112,6,251,0,112,6,39,0,6,6,39,0,6,6,39,0,6, + 6,164,0,186,6,164,0,186,5,220,0,186,5,220,0,186,6,39,0,6,7,44,0,171,8,0,0,104,7,44,0,100,7,44,0,170,7,44,0,131, + 7,44,0,133,7,44,0,133,4,149,0,170,7,43,0,170,7,44,0,170,7,27,0,125,7,27,0,125,5,95,0,125,8,26,0,125,9,247,0,140, + 10,1,0,145,7,44,0,184,7,44,0,183,7,44,0,183,4,66,0,154,7,44,0,100,7,44,0,152,7,44,0,172,7,44,0,172,7,44,0,159, + 7,44,0,171,7,44,0,172,7,44,0,172,7,44,0,178,4,223,0,147,7,44,0,177,4,223,0,147,7,44,0,125,7,44,0,172,7,44,0,170, + 7,44,0,100,5,90,0,100,5,248,0,170,5,50,0,170,6,69,0,170,4,92,0,170,7,44,0,170,7,44,0,178,7,44,0,170,5,175,0,170, + 7,44,0,171,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,135,8,87,0,170,8,87,0,170,8,87,0,170,7,44,0,170,7,44,2,221,7,44,0,170,4,233,0,175,5,220,0,175, + 5,220,0,175,7,44,0,162,7,44,1,83,7,44,1,192,7,44,0,248,7,44,1,4,7,44,1,236,7,44,0,93,7,44,0,183,7,44,0,192, + 7,44,0,231,7,44,1,30,7,44,0,109,7,44,0,171,7,44,0,69,7,44,0,169,7,44,0,192,7,44,0,176,7,44,1,65,7,44,0,201, + 7,44,0,226,7,44,1,85,7,44,1,182,7,44,1,81,7,44,1,48,7,44,0,201,7,44,0,226,7,44,1,85,7,44,1,182,7,44,1,76, + 7,44,1,48,7,44,1,67,7,44,0,185,7,44,1,88,7,44,0,228,7,44,1,66,7,44,0,182,7,44,1,88,7,44,0,228,7,44,0,216, + 3,198,0,172,5,27,0,172,7,44,1,120,7,44,0,188,3,198,0,181,2,220,0,172,3,223,0,173,5,252,0,172,6,32,0,132,7,44,0,172, + 7,44,0,156,7,44,0,156,7,44,0,156,7,44,0,156,7,44,0,156,7,44,0,156,7,44,0,156,7,44,0,156,7,44,0,172,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,1,49,6,244,0,150,6,244,0,150,6,244,0,150,6,244,0,150,6,244,0,150,6,244,0,150,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,1,88, + 7,44,1,88,7,44,0,106,7,44,0,198,7,44,1,13,4,84,0,125,7,44,0,121,7,44,0,125,7,44,1,41,7,44,0,194,7,44,1,6, + 7,44,1,5,7,44,1,5,7,44,0,100,5,158,0,170,8,9,0,175,8,183,0,162,9,102,0,175,7,57,0,175,6,180,1,13,6,180,0,207, + 6,180,1,128,6,180,0,9,6,180,1,127,6,180,1,127,6,180,1,250,6,180,1,100,6,180,0,84,6,180,0,10,6,192,0,210,6,180,1,177, + 5,220,0,175,5,220,1,89,5,220,0,176,5,220,0,176,6,204,0,120,5,220,1,142,5,220,1,68,6,180,0,86,6,180,0,86,6,180,0,86, + 6,180,0,86,5,220,0,175,6,180,0,22,6,180,0,86,6,180,0,22,6,180,0,73,6,180,0,86,6,180,0,86,6,180,0,120,6,180,0,132, + 6,180,1,179,6,180,0,43,6,180,0,182,6,180,0,53,6,180,0,182,6,180,0,88,6,180,0,138,6,180,1,51,6,180,0,237,6,180,1,3, + 6,180,0,175,6,180,0,241,6,180,0,252,6,180,0,112,6,180,0,112,6,180,0,112,6,180,0,112,6,180,1,82,6,180,1,12,6,180,1,62, + 6,180,0,112,6,180,0,187,6,180,0,84,6,180,0,86,6,180,0,83,6,180,0,84,6,180,0,87,6,180,0,87,6,180,0,47,6,180,0,86, + 6,180,0,48,6,180,0,47,6,180,0,48,6,180,0,48,6,180,0,48,6,180,0,50,6,180,0,132,6,180,0,152,6,180,0,112,6,180,0,64, + 6,180,0,84,6,180,0,187,6,180,0,84,6,180,0,84,6,180,0,84,6,180,0,112,6,180,0,167,6,180,0,167,6,180,0,161,6,180,0,161, + 6,180,0,110,6,180,0,110,6,180,0,84,6,180,0,86,6,180,0,161,6,180,0,182,6,180,0,156,6,180,0,130,6,180,0,161,6,180,0,97, + 6,180,0,97,6,180,0,84,6,180,0,84,7,44,0,102,7,44,0,122,7,44,0,122,7,44,0,122,7,44,0,122,7,44,0,170,6,180,3,5, + 6,180,2,176,6,180,2,6,2,148,0,174,2,148,0,120,4,78,0,174,4,78,0,120,6,180,1,62,6,180,1,158,6,180,1,78,6,180,0,110, + 6,180,1,88,6,180,0,126,6,180,0,160,6,180,1,145,6,180,1,145,6,180,2,29,6,180,2,29,6,180,1,185,6,180,1,219,6,180,1,35, + 6,180,1,57,6,180,1,85,6,180,1,119,6,180,2,196,6,180,2,108,6,180,1,102,6,180,1,161,7,44,0,152,7,44,0,152,7,44,0,152, + 7,44,0,152,7,44,0,152,7,44,0,152,7,44,0,152,7,44,0,152,7,44,0,152,7,44,0,152,6,180,0,9,6,180,0,9,6,180,0,9, + 6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9, + 6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,9,6,180,0,117,6,180,0,252,6,180,0,117, + 6,180,0,252,6,180,0,117,6,180,0,117,6,180,0,117,6,180,0,117,6,180,0,117,6,180,0,117,6,180,0,117,6,180,0,228,6,180,0,228, + 6,180,0,228,6,180,0,117,6,180,0,117,6,180,1,236,6,180,0,117,6,180,0,117,6,180,0,117,6,180,0,43,6,180,0,43,6,180,1,21, + 6,180,1,21,6,180,0,127,6,180,0,127,6,180,1,60,6,180,0,130,6,180,0,165,6,180,0,117,6,180,0,167,6,180,0,167,6,180,0,117, + 6,180,0,167,6,180,0,115,6,180,0,150,6,180,0,162,6,180,0,162,6,180,0,117,3,31,0,110,3,31,0,79,3,244,0,6,3,246,0,176, + 3,246,0,175,3,31,0,183,3,31,0,164,4,115,0,183,4,115,0,164,6,180,0,91,6,180,0,89,6,180,0,79,6,180,0,79,9,66,0,117, + 11,120,0,100,11,120,0,117,11,120,0,100,11,120,0,100,11,120,0,117,11,120,0,100,11,120,0,100,11,120,0,117,11,120,0,100,11,120,0,117, + 11,120,0,117,5,220,0,0,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,3,132,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44, + 5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,5,220,1,44,6,180,0,100,6,180,0,117,6,180,1,0, + 6,180,1,0,5,119,0,79,5,119,0,79,5,223,1,0,5,223,1,0,6,180,0,217,8,0,0,217,8,0,0,217,8,0,0,217,8,0,0,217, + 8,0,0,217,8,0,0,217,8,0,0,217,3,244,0,6,6,180,0,217,6,180,0,217,8,0,0,58,8,0,0,58,8,0,0,58,10,154,0,117, + 4,43,0,117,4,43,0,117,4,43,0,117,4,43,0,117,4,43,0,117,4,43,0,117,4,43,0,117,4,43,0,117,4,43,0,117,4,43,0,117, + 4,43,255,190,4,43,0,117,4,43,0,117,4,43,0,117,4,43,0,117,4,43,0,107,6,180,1,25,6,180,0,217,6,180,0,217,6,180,0,217, + 6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217, + 6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217, + 6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,218,6,180,0,218,6,180,0,217, + 6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217, + 6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217,6,180,0,217, + 6,180,0,181,6,180,1,32,6,180,0,181,6,180,1,32,6,180,0,55,6,180,0,55,6,180,1,94,6,180,1,94,6,180,0,181,6,180,1,32, + 6,180,0,181,6,180,1,32,6,180,0,55,6,180,1,94,6,176,0,117,6,176,0,117,6,176,0,72,6,176,0,72,7,143,0,186,7,143,0,186, + 7,143,0,186,7,143,0,186,6,39,0,6,6,39,0,6,6,39,0,6,6,39,0,6,7,143,0,186,6,244,0,36,6,244,0,36,6,252,0,150, + 6,252,0,150,6,252,0,34,8,244,0,112,6,244,0,77,6,244,0,77,4,117,0,10,2,57,0,10,4,117,255,215,4,211,0,10,5,143,0,201, + 4,231,0,72,3,35,255,232,6,4,0,201,5,18,0,186,5,63,0,201,4,162,0,186,5,123,0,92,4,51,0,88,6,64,0,115,6,231,0,201, + 5,121,0,16,6,64,0,115,5,224,0,61,9,6,0,68,7,177,0,86,4,188,0,104,5,60,0,201,4,139,0,193,5,71,0,112,3,80,0,0, + 4,229,0,113,3,237,0,98,1,102,255,233,3,114,0,10,5,20,0,135,5,123,0,92,4,186,0,123,4,194,0,50,4,132,0,80,4,208,0,127, + 4,179,0,105,7,73,0,80,5,3,0,0,7,157,0,108,4,195,0,142,4,219,0,104,7,161,0,80,4,245,0,109,4,195,0,80,7,105,0,104, + 4,194,0,104,6,115,0,142,7,115,0,104,4,173,0,104,4,189,0,102,7,99,0,104,7,159,0,123,6,159,0,100,4,196,0,80,4,194,0,104, + 4,184,0,104,4,188,0,80,4,188,0,86,4,247,0,122,7,93,0,80,4,183,0,60,4,177,0,96,4,166,0,70,7,80,0,80,4,196,0,100, + 4,194,0,122,4,189,0,124,5,34,0,104,7,53,0,122,5,44,0,113,7,26,0,115,7,26,0,115,5,117,0,64,5,120,0,67,5,21,0,64, + 4,126,0,150,5,121,0,16,5,121,0,16,5,14,0,201,5,14,0,131,5,118,0,150,6,255,0,219,5,123,0,92,3,237,0,150,5,123,0,92, + 7,26,0,115,7,26,0,115,2,103,0,150,5,4,0,41,6,4,0,201,5,63,0,62,4,56,0,150,5,123,0,92,5,40,0,150,5,14,0,201, + 4,5,0,111,7,159,0,111,6,58,0,111,5,252,0,201,4,247,0,204,2,92,0,201,6,58,0,111,2,92,0,201,6,4,0,159,5,16,0,99, + 7,26,0,115,7,26,0,115,6,4,0,201,2,144,0,201,5,254,0,150,7,26,0,115,7,26,0,115,5,150,0,115,6,36,0,100,5,123,0,61, + 5,150,0,115,4,250,0,201,5,121,0,16,6,4,0,201,5,14,0,201,6,78,0,115,4,137,0,201,6,78,0,115,4,31,0,54,4,63,0,143, + 6,180,0,217,3,31,0,176,3,31,0,199,3,31,0,176,3,31,0,199,4,63,0,147,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 5,125,0,201,4,211,0,201,4,211,0,70,6,41,0,201,4,227,255,250,4,227,255,250,6,51,0,115,5,63,0,201,5,63,255,213,4,24,0,0, + 5,150,0,115,5,160,0,115,5,123,0,92,4,154,0,201,4,154,0,201,6,231,0,201,5,252,0,201,4,117,0,201,5,20,0,135,5,143,0,201, + 5,143,0,59,5,121,0,16,5,121,0,16,6,4,0,201,6,51,0,163,4,24,0,201,7,233,0,68,5,123,0,61,4,227,255,252,5,125,0,145, + 5,121,0,16,5,121,0,16,5,14,0,201,5,14,0,131,2,92,0,201,6,76,0,115,5,219,0,178,5,219,0,178,4,117,0,8,6,35,0,115, + 2,102,0,175,2,102,0,146,4,197,0,175,4,197,0,175,2,102,0,146,2,102,0,175,4,180,0,175,4,180,0,175,5,20,0,114,4,43,0,100, + 2,212,0,201,2,181,0,166,9,112,0,118,8,57,0,152,8,59,0,60,7,64,0,62,8,163,0,115,6,188,0,112,7,208,0,211,6,190,0,193, + 8,127,0,101,7,75,0,107,8,136,0,84,7,53,0,76,9,109,0,201,8,16,0,186,6,76,0,115,4,229,0,113,6,216,0,115,5,179,0,113, + 10,221,0,115,8,38,0,113,7,8,0,58,6,66,255,250,5,122,0,60,4,227,255,250,4,169,0,60,5,124,0,175,5,18,0,186,3,242,0,214, + 3,242,0,214,3,242,0,214,3,242,0,214,3,242,0,214,3,242,0,214,3,242,0,214,3,242,0,214,3,242,0,214,3,242,0,214,3,242,0,214, + 3,242,0,214,3,242,0,214,3,242,0,214,3,242,0,214,2,244,0,102,2,244,0,102,2,5,0,195,2,5,0,195,2,5,0,195,3,21,0,137, + 2,217,0,137,3,198,0,115,3,198,0,115,6,4,0,201,5,18,0,186,7,6,255,250,5,173,0,55,4,234,0,164,4,83,0,133,3,237,0,186, + 4,43,0,111,9,255,0,16,7,225,0,123,9,160,0,16,7,235,0,123,9,35,0,16,7,217,0,123,7,197,0,16,6,139,0,123,7,197,0,16, + 6,139,0,123,7,172,0,16,6,139,0,123,5,160,0,115,4,101,0,127,5,63,0,10,4,170,0,14,5,113,0,201,3,35,0,193,4,167,0,83, + 3,106,0,120,6,116,0,10,5,162,0,10,10,221,0,115,8,38,0,113,4,211,0,10,5,20,255,251,5,223,0,50,6,50,0,50,6,76,0,115, + 5,20,0,113,4,215,0,10,5,20,255,251,4,215,0,10,5,20,255,251,4,117,0,11,2,57,0,193,5,226,0,201,5,18,0,186,2,178,0,240, + 3,2,0,160,3,53,1,53,2,51,0,197,5,124,0,175,3,230,0,77,6,46,0,201,5,85,0,186,6,51,0,4,5,20,0,4,5,63,0,4, + 4,162,0,4,5,252,0,4,5,18,0,4,5,143,0,4,3,74,0,4,5,20,0,4,4,43,0,4,6,104,255,151,7,82,0,186,4,154,0,119, + 4,211,0,70,6,231,0,201,2,92,0,201,9,152,0,68,1,181,0,194,1,231,0,141,2,14,0,110,2,28,0,96,2,35,0,90,1,231,0,141, + 1,181,0,194,1,231,0,141,2,14,0,110,2,28,0,96,2,14,0,110,1,231,0,141,1,181,0,194,1,231,0,141,2,14,0,110,2,28,0,96, + 2,14,0,110,1,231,0,141,1,181,0,194,1,231,0,141,2,35,0,90,2,28,0,96,2,14,0,110,1,231,0,141,1,181,0,194,2,51,0,214, + 7,208,0,150,7,208,0,150,7,208,0,150,7,208,0,150,4,164,0,110,4,164,0,110,4,253,0,110,7,29,0,110,4,174,0,111,4,164,0,110, + 5,57,0,110,7,14,0,110,4,113,0,110,4,164,0,110,9,89,0,110,4,182,0,110,4,184,0,130,6,244,0,110,4,164,0,110,4,183,0,110, + 7,79,0,110,4,184,0,130,5,217,0,110,4,170,0,50,6,250,0,110,4,183,0,110,7,41,0,110,4,182,0,110,4,182,0,110,4,185,0,131, + 5,49,0,112,4,182,0,110,4,183,0,131,4,202,0,110,4,184,0,130,4,33,0,50,4,163,0,110,4,172,0,120,4,164,0,110,4,164,0,110, + 4,165,0,110,5,27,0,110,7,164,0,110,7,115,0,122,6,119,0,100,4,16,0,100,4,16,0,100,4,16,0,100,4,16,0,100,4,16,0,100, + 4,16,0,100,4,16,0,100,4,16,0,100,4,16,0,100,4,16,0,100,4,36,0,100,4,36,0,100,4,36,0,100,6,75,0,100,6,75,0,100, + 6,75,0,100,6,75,0,100,6,75,0,100,4,95,0,60,4,95,0,60,4,95,0,60,4,95,0,60,4,95,0,60,4,95,0,60,4,229,0,113, + 5,131,0,47,5,10,0,47,5,10,0,47,7,188,0,47,7,188,0,47,5,125,0,47,6,227,0,111,9,157,0,171,9,157,0,174,9,145,0,174, + 9,125,0,174,12,60,0,174,1,202,0,136,0,0,1,86,2,165,0,74,5,22,0,78,6,217,0,174,6,49,0,88,7,63,0,186,6,44,0,88, + 6,191,0,88,6,215,0,186,6,117,0,88,7,1,0,96,6,180,0,217,5,171,0,88,5,171,0,78,5,171,0,88,5,171,0,88,5,89,0,186, + 5,89,0,186,5,89,0,186,4,160,0,88,3,76,0,88,4,94,0,88,5,58,0,186,2,216,0,89,3,63,0,89,5,48,0,185,2,164,0,89, + 4,76,0,88,4,59,0,88,4,140,0,88,5,111,0,88,3,50,0,88,5,49,0,185,5,30,0,186,4,255,0,186,4,191,0,88,5,173,0,186, + 4,132,0,88,5,171,0,88,5,66,0,20,2,46,0,186,4,160,0,88,4,59,0,88,4,255,0,186,5,8,0,88,7,136,0,130,7,219,0,130, + 2,58,255,236,2,106,255,236,7,136,0,130,7,219,0,130,2,58,255,236,2,106,255,236,7,136,0,130,7,219,0,130,2,58,255,236,2,106,255,236, + 7,136,0,130,7,219,0,130,2,58,255,236,2,106,255,236,7,136,0,130,7,219,0,130,2,58,255,236,2,106,255,236,7,136,0,130,7,219,0,130, + 2,58,255,236,2,106,255,236,8,75,0,130,8,72,0,130,3,211,255,236,4,12,255,236,8,75,0,130,8,72,0,130,3,211,255,236,4,12,255,236, + 5,42,0,157,5,42,0,157,4,242,255,236,5,42,255,236,5,42,0,157,5,42,0,157,4,242,255,236,5,42,255,236,5,42,0,157,5,42,0,157, + 4,242,255,236,5,42,255,236,5,42,0,157,5,42,0,157,4,242,255,236,5,42,255,236,3,144,0,125,4,51,0,125,3,144,0,125,4,51,0,125, + 3,144,0,125,4,51,0,125,3,144,0,125,4,51,0,125,3,221,255,171,4,106,255,171,3,221,255,171,4,106,255,171,7,41,0,130,7,41,0,130, + 3,207,255,236,4,107,255,236,7,41,0,130,7,41,0,130,3,207,255,236,4,107,255,236,7,41,0,130,7,41,0,130,3,207,255,236,4,107,255,236, + 7,41,0,130,7,41,0,130,3,207,255,236,4,107,255,236,5,224,0,147,6,23,0,147,5,224,0,147,6,23,0,147,2,58,255,236,2,106,255,236, + 5,150,0,144,5,14,0,144,4,56,255,236,3,176,255,236,6,152,0,144,6,190,0,144,3,207,255,236,4,107,255,236,3,221,255,171,4,34,255,171, + 2,58,255,236,2,106,255,236,6,67,0,130,6,171,0,130,2,58,255,236,2,106,255,236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,252,112,0,0,0,0,0,0,253,42,0,0,0,0,2,88,0,8,2,88,255,236,2,88,0,8,2,24,0,105, + 2,88,0,8,2,88,0,8,2,88,255,236,2,88,0,8,2,88,255,236,2,88,0,8,2,88,255,236,2,88,255,244,2,88,255,236,2,88,0,24, + 2,88,255,236,3,195,0,163,2,57,255,181,2,112,255,181,2,57,0,108,2,112,0,108,3,221,255,171,4,34,255,171,2,57,0,108,2,112,0,108, + 6,67,0,130,6,171,0,130,2,58,255,236,2,106,255,236,2,57,0,193,2,112,0,193,7,136,0,130,7,219,0,130,2,58,255,236,2,106,255,236, + 4,49,0,139,4,74,0,145,7,136,0,130,7,219,0,130,2,58,255,236,2,106,255,236,7,136,0,130,7,219,0,130,2,58,255,236,2,106,255,236, + 5,42,0,157,5,42,0,157,4,242,255,236,5,42,255,236,5,42,0,157,5,42,0,157,4,242,255,236,5,42,255,236,5,42,0,157,5,42,0,157, + 4,242,255,236,5,42,255,236,3,144,0,125,4,51,0,125,3,144,0,125,4,51,0,125,3,221,255,171,4,106,255,171,3,221,255,171,4,106,255,171, + 9,196,0,130,10,51,0,130,6,180,255,236,7,35,255,236,9,196,0,130,10,51,0,130,6,180,255,236,7,35,255,236,9,172,0,130,9,205,0,130, + 6,203,255,236,6,240,255,236,9,172,0,130,9,205,0,130,6,203,255,236,6,240,255,236,7,102,0,144,7,152,0,144,6,94,255,236,6,144,255,236, + 7,102,0,144,7,152,0,144,6,94,255,236,6,144,255,236,4,198,0,117,4,66,0,117,4,198,255,236,3,220,255,236,4,198,0,117,4,66,0,117, + 4,47,255,236,3,220,255,236,8,75,0,130,8,72,0,130,3,211,255,236,4,12,255,236,6,53,0,107,6,172,0,107,3,211,255,236,4,12,255,236, + 6,152,0,144,6,190,0,144,3,207,255,236,4,107,255,236,5,208,0,144,6,15,0,144,2,112,255,236,2,166,255,236,4,244,0,140,5,83,0,140, + 4,73,255,236,4,160,255,236,5,224,0,147,6,23,0,147,2,58,255,236,2,106,255,236,4,49,0,139,4,74,0,145,4,56,255,236,3,176,255,236, + 3,221,255,171,4,34,255,171,6,67,0,130,6,171,0,130,6,67,0,130,6,171,0,130,2,58,255,236,2,106,255,236,4,144,255,46,4,198,255,46, + 4,144,255,229,4,198,255,229,4,144,0,23,4,198,0,23,4,144,0,84,4,198,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,8,52,0,30,6,14,0,100,4,220,0,200,4,128,0,100,4,206,0,200,4,100,0,200,4,100,0,200,3,132,0,150,5,0,0,200, + 7,58,0,150,2,68,0,200,5,25,0,200,4,95,0,200,11,106,0,200,7,13,0,200,7,100,0,200,7,58,0,150,5,125,0,200,6,242,0,200, + 4,176,0,150,4,218,0,200,3,136,0,150,5,146,0,100,5,24,0,200,5,125,0,150,5,120,0,150,6,122,0,100,4,56,0,150,4,118,0,200, + 4,118,0,200,3,132,0,100,6,14,0,100,2,68,0,200,6,14,0,100,5,125,0,150,6,139,0,100,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,5,237,0,16,5,217,0,201,6,141,0,232,5,214,0,201,5,99,0,201,6,51,0,115, + 3,36,0,102,3,34,255,150,6,5,0,201,5,61,0,201,8,51,0,196,6,76,0,114,5,20,0,136,5,170,255,250,6,164,0,177,5,200,0,16, + 8,221,0,68,6,114,0,108,5,168,255,252,5,75,0,123,5,170,0,148,4,102,0,113,5,170,0,148,4,236,0,111,3,185,0,47,5,170,0,113, + 5,229,0,186,2,207,0,230,2,207,255,215,5,53,0,186,2,207,0,230,9,34,0,186,5,229,0,186,4,229,0,113,5,170,0,113,5,170,0,113, + 3,223,0,186,4,43,0,111,3,185,0,55,5,234,0,177,4,220,0,61,7,72,0,86,5,104,0,76,4,255,0,61,4,184,0,88,5,121,0,16, + 5,125,0,201,5,150,0,115,6,41,0,201,5,14,0,201,4,154,0,201,6,51,0,115,6,4,0,201,3,140,0,151,2,92,255,150,5,63,0,201, + 4,117,0,201,6,231,0,201,5,252,0,201,6,76,0,115,4,211,0,201,6,76,0,115,5,143,0,201,5,20,0,135,4,227,255,250,5,219,0,178, + 5,121,0,16,7,233,0,68,5,123,0,61,4,227,255,252,5,123,0,92,4,231,0,123,5,20,0,186,4,102,0,113,5,20,0,113,4,236,0,113, + 2,209,0,47,5,20,0,113,5,18,0,186,2,57,0,193,2,57,255,219,4,162,0,186,2,57,0,193,7,203,0,186,5,18,0,186,4,229,0,113, + 5,20,0,186,5,20,0,113,3,74,0,186,4,43,0,111,3,35,0,55,5,18,0,174,4,188,0,61,6,139,0,86,4,188,0,59,4,188,0,61, + 4,51,0,88,5,23,0,136,5,23,0,107,5,23,0,130,5,23,0,156,5,23,0,90,5,23,0,148,5,23,0,113,5,23,0,65,5,23,0,139, + 5,20,0,106,5,23,0,135,5,23,0,225,5,23,0,150,5,23,0,156,5,23,0,100,5,23,0,158,5,23,0,143,5,23,0,168,5,23,0,139, + 5,23,0,129,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200, + 10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200, + 10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200, + 10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200, + 10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200,10,233,0,200, + 10,233,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200, + 6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200, + 6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200, + 6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200, + 6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200,6,133,0,200, + 6,133,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200, + 8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200, + 8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,64,0,217,8,47,0,200, + 8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200, + 8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200, + 8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200,8,47,0,200, + 8,88,0,153,9,120,0,75,8,87,0,61,9,64,0,170,8,87,0,170,8,87,0,170,9,89,0,95,8,87,0,170,8,87,0,170,8,87,0,170, + 8,87,0,170,8,87,0,143,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170, + 8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170, + 8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170, + 8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,170,9,89,0,95,8,87,0,170,8,87,0,170, + 8,87,0,170,8,87,0,35,8,87,0,170,8,87,0,170,12,213,0,170,8,87,0,170,8,87,0,170,8,87,0,170,8,87,0,58,9,89,0,96, + 8,87,0,58,8,87,0,61,8,87,0,61,8,87,0,61,8,87,0,61,8,87,0,61,8,87,0,61,0,0,255,185,0,0,252,215,0,0,253,115, + 0,0,252,182,0,0,253,12,0,0,252,207,0,0,252,207,0,0,252,199,0,0,252,199,0,0,253,154,0,0,252,230,0,0,252,78,0,150,0,0, + 1,144,0,0,1,144,0,0,1,144,0,0,0,150,0,0,1,144,0,0,7,219,0,130,2,58,255,236,2,106,255,236,8,72,0,130,3,211,255,236, + 4,12,255,236,6,172,0,107,3,211,255,236,4,12,255,236,2,58,255,236,2,106,255,236,1,182,0,0,7,219,0,130,2,58,255,236,2,106,255,236, + 7,219,0,130,2,58,255,236,2,106,255,236,5,42,0,157,4,242,255,236,5,42,255,236,5,42,0,157,4,242,255,236,5,42,255,236,5,42,0,157, + 4,242,255,236,5,42,255,236,5,42,0,157,4,242,255,236,5,42,255,236,3,95,0,0,5,252,0,213,2,57,0,15,2,238,254,242,5,120,1,146, + 5,120,1,146,5,120,1,146,5,120,1,147,5,120,1,147,5,120,1,146,5,120,1,146,5,120,1,118,5,120,1,139,5,120,1,118,5,120,1,139, + 5,120,1,118,5,120,1,139,5,120,1,139,5,120,1,118,5,120,1,118,5,120,1,131,5,120,1,131,5,120,1,131,5,120,1,139,0,0,252,154, + 1,44,0,0,4,24,0,0,4,226,255,171,4,226,255,171,6,15,0,144,2,112,255,236,2,166,255,236,6,171,0,130,2,58,255,236,2,106,255,236, + 4,106,255,171,2,57,0,193,4,74,0,145,5,150,0,113,4,226,0,113,2,57,0,150,2,207,0,79,2,207,255,22,2,57,255,211,2,57,0,191, + 2,178,0,240,3,140,0,151,6,180,1,173,0,0,0,200,0,0,0,200,0,0,0,200,0,0,0,200,0,0,0,200,0,0,0,200,0,0,0,220, + 0,0,0,220,2,58,0,193,2,58,255,236,2,58,255,236,4,146,0,113,4,146,255,236,4,146,255,236,3,100,0,61,3,100,255,236,3,100,255,236, + 4,188,0,61,4,188,255,236,4,188,255,236,5,59,0,186,5,59,255,236,5,59,255,236,5,59,0,186,5,59,255,236,5,59,255,236,4,192,0,113, + 4,192,255,236,4,192,255,236,5,59,0,186,5,59,255,236,5,59,255,236,6,161,0,113,6,161,255,236,6,161,255,236,3,129,0,193,3,129,255,236, + 3,129,255,236,3,129,0,61,3,129,255,236,3,129,255,236,4,120,0,186,4,120,255,236,4,120,255,236,4,229,0,193,4,229,255,236,4,229,255,236, + 2,205,0,61,2,205,255,236,2,205,255,236,7,172,0,193,7,172,255,236,7,172,255,236,3,200,0,61,3,200,255,236,3,200,255,236,6,68,0,61, + 6,68,255,236,6,68,255,236,5,59,0,186,5,59,255,236,5,59,255,236,5,0,0,61,5,0,255,236,5,0,255,236,5,223,0,193,5,223,255,236, + 5,223,255,236,4,61,0,193,4,61,255,236,4,61,255,236,5,203,0,112,5,203,255,236,5,203,255,236,3,200,0,61,3,200,255,236,3,200,255,236, + 5,0,0,61,5,0,255,236,5,0,255,236,4,192,0,113,4,192,255,236,4,192,255,236,4,61,0,193,4,61,255,236,4,61,255,236,4,61,0,193, + 4,61,255,236,4,61,255,236,4,46,0,193,4,46,255,236,4,46,255,236,4,192,0,113,4,192,255,236,4,192,255,236,4,192,0,113,4,192,255,236, + 4,192,255,236,0,0,252,236,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170,7,44,0,170, + 6,179,1,151,6,46,0,201,5,106,0,193,5,18,0,174,4,51,0,125,4,51,0,125,4,51,0,125,4,51,0,125,4,51,0,125,4,106,255,171, + 4,106,255,171,4,106,255,171,4,106,255,171,4,106,255,171,10,51,0,130,6,180,255,236,7,35,255,236,10,51,0,130,6,180,255,236,7,35,255,236, + 10,51,0,130,6,180,255,236,7,35,255,236,9,205,0,130,6,203,255,236,6,240,255,236,9,205,0,130,6,203,255,236,6,240,255,236,7,152,0,144, + 6,94,255,236,6,144,255,236,4,66,0,117,4,198,255,236,3,220,255,236,8,72,0,130,3,211,255,236,4,12,255,236,8,72,0,130,3,211,255,236, + 4,12,255,236,8,72,0,130,3,211,255,236,4,12,255,236,6,172,0,107,3,211,255,236,4,12,255,236,6,172,0,107,3,211,255,236,4,12,255,236, + 8,110,0,130,6,242,255,236,6,242,255,236,7,41,0,130,3,207,255,236,4,107,255,236,6,190,0,144,3,207,255,236,4,107,255,236,6,190,0,144, + 3,207,255,236,4,107,255,236,7,41,0,130,3,207,255,236,4,107,255,236,7,41,0,130,3,207,255,236,4,107,255,236,7,41,0,130,3,207,255,236, + 4,107,255,236,6,15,0,144,2,112,255,236,2,166,255,236,6,15,0,144,2,112,255,236,2,166,255,236,6,15,0,144,2,112,255,236,2,166,255,236, + 6,23,0,147,2,58,255,236,2,106,255,236,6,23,0,147,2,58,255,236,2,106,255,236,6,23,0,147,2,58,255,236,2,106,255,236,0,0,0,1, + 0,0,63,248,0,1,10,167,48,0,0,11,15,234,0,16,0,36,255,211,0,16,0,37,255,183,0,16,0,42,0,75,0,16,0,45,0,114,0,16, + 0,50,0,57,0,16,0,52,0,75,0,16,0,55,255,68,0,16,0,57,255,136,0,16,0,58,255,173,0,16,0,59,255,154,0,16,0,60,255,13, + 0,16,0,82,0,38,0,16,0,89,255,201,0,16,0,92,255,220,0,16,0,130,255,211,0,16,0,131,255,211,0,16,0,132,255,211,0,16,0,133, + 255,211,0,16,0,134,255,211,0,16,0,148,0,57,0,16,0,149,0,57,0,16,0,150,0,57,0,16,0,151,0,57,0,16,0,152,0,57,0,16, + 0,159,255,13,0,16,0,180,0,38,0,16,0,181,0,38,0,16,0,182,0,38,0,16,0,183,0,38,0,16,0,184,0,38,0,16,0,191,255,220, + 0,16,0,193,255,220,0,16,0,194,255,211,0,16,0,196,255,211,0,16,0,198,255,211,0,16,0,224,0,75,0,16,1,38,255,68,0,16,1,58, + 255,13,0,36,0,16,255,211,0,36,0,17,255,220,0,36,0,29,255,220,0,36,0,36,0,57,0,36,0,38,255,220,0,36,0,42,255,220,0,36, + 0,50,255,220,0,36,0,52,255,220,0,36,0,55,255,97,0,36,0,57,255,125,0,36,0,58,255,144,0,36,0,60,255,97,0,36,0,70,255,220, + 0,36,0,71,255,220,0,36,0,72,255,220,0,36,0,73,255,183,0,36,0,82,255,220,0,36,0,84,255,220,0,36,0,87,255,220,0,36,0,89, + 255,136,0,36,0,90,255,173,0,36,0,92,255,117,0,36,0,109,255,183,0,36,0,130,0,57,0,36,0,131,0,57,0,36,0,132,0,57,0,36, + 0,133,0,57,0,36,0,134,0,57,0,36,0,137,255,220,0,36,0,148,255,220,0,36,0,149,255,220,0,36,0,150,255,220,0,36,0,151,255,220, + 0,36,0,152,255,220,0,36,0,159,255,97,0,36,0,169,255,220,0,36,0,170,255,220,0,36,0,171,255,220,0,36,0,172,255,220,0,36,0,173, + 255,220,0,36,0,180,255,220,0,36,0,181,255,220,0,36,0,182,255,220,0,36,0,183,255,220,0,36,0,184,255,220,0,36,0,191,255,117,0,36, + 0,193,255,117,0,36,0,194,0,57,0,36,0,196,0,57,0,36,0,198,0,57,0,36,0,200,255,220,0,36,0,201,255,220,0,36,0,202,255,220, + 0,36,0,203,255,220,0,36,0,204,255,220,0,36,0,205,255,220,0,36,0,206,255,220,0,36,0,207,255,220,0,36,0,209,255,220,0,36,0,211, + 255,220,0,36,0,213,255,220,0,36,0,215,255,220,0,36,0,217,255,220,0,36,0,219,255,220,0,36,0,221,255,220,0,36,0,222,255,220,0,36, + 0,224,255,220,0,36,0,226,255,220,0,36,1,14,255,220,0,36,1,15,255,220,0,36,1,16,255,220,0,36,1,17,255,220,0,36,1,18,255,220, + 0,36,1,19,255,220,0,36,1,36,255,97,0,36,1,37,255,220,0,36,1,38,255,97,0,36,1,39,255,220,0,36,1,54,255,144,0,36,1,55, + 255,173,0,36,1,56,255,97,0,36,1,57,255,117,0,36,1,58,255,97,0,36,1,136,255,220,0,36,1,172,255,220,0,36,1,173,255,220,0,36, + 1,174,255,220,0,36,1,175,255,220,0,36,1,220,255,97,0,36,1,221,255,220,0,36,1,240,255,220,0,36,1,243,255,220,0,36,1,244,255,97, + 0,36,1,245,255,117,0,36,9,121,255,144,0,36,9,122,255,173,0,36,9,123,255,144,0,36,9,124,255,173,0,36,9,125,255,144,0,36,9,126, + 255,173,0,36,9,235,255,97,0,36,9,236,255,117,0,36,10,250,254,248,0,36,10,251,255,3,0,36,10,252,0,47,0,37,0,38,255,220,0,37, + 0,42,255,220,0,37,0,50,255,220,0,37,0,54,255,220,0,37,0,57,255,193,0,37,0,58,255,183,0,37,0,60,255,144,0,37,0,109,255,193, + 0,37,0,125,255,220,0,37,0,137,255,220,0,37,0,148,255,220,0,37,0,149,255,220,0,37,0,150,255,220,0,37,0,151,255,220,0,37,0,152, + 255,220,0,37,0,159,255,144,0,37,0,200,255,220,0,37,0,202,255,220,0,37,0,204,255,220,0,37,0,206,255,220,0,37,0,222,255,220,0,37, + 0,224,255,220,0,37,0,226,255,220,0,37,0,228,255,220,0,37,1,14,255,220,0,37,1,16,255,220,0,37,1,18,255,220,0,37,1,28,255,220, + 0,37,1,30,255,220,0,37,1,32,255,220,0,37,1,34,255,220,0,37,1,54,255,183,0,37,1,56,255,144,0,37,1,58,255,144,0,37,1,172, + 255,220,0,37,1,174,255,220,0,37,1,218,255,220,0,37,1,240,255,220,0,37,9,121,255,183,0,37,9,123,255,183,0,37,9,125,255,183,0,37, + 9,235,255,144,0,37,10,250,255,144,0,37,10,251,255,144,0,37,10,252,255,173,0,38,0,60,255,220,0,38,0,109,255,220,0,38,0,125,255,220, + 0,38,0,159,255,220,0,38,1,56,255,220,0,38,1,58,255,220,0,38,1,244,255,220,0,38,9,235,255,220,0,38,10,251,0,38,0,39,0,36, + 255,220,0,39,0,57,255,220,0,39,0,60,255,144,0,39,0,109,255,220,0,39,0,125,255,220,0,39,0,130,255,220,0,39,0,131,255,220,0,39, + 0,132,255,220,0,39,0,133,255,220,0,39,0,134,255,220,0,39,0,159,255,144,0,39,0,194,255,220,0,39,0,196,255,220,0,39,0,198,255,220, + 0,39,1,56,255,144,0,39,1,58,255,144,0,39,1,244,255,144,0,39,9,235,255,144,0,39,10,250,255,211,0,39,10,251,255,201,0,39,10,252, + 255,68,0,41,0,17,254,183,0,41,0,29,255,97,0,41,0,36,255,68,0,41,0,54,255,220,0,41,0,55,255,220,0,41,0,68,255,68,0,41, + 0,72,255,144,0,41,0,76,255,107,0,41,0,82,255,183,0,41,0,85,255,107,0,41,0,88,255,144,0,41,0,92,255,68,0,41,0,130,255,68, + 0,41,0,131,255,68,0,41,0,132,255,68,0,41,0,133,255,68,0,41,0,134,255,68,0,41,0,162,255,68,0,41,0,163,255,68,0,41,0,164, + 255,68,0,41,0,165,255,68,0,41,0,166,255,68,0,41,0,167,255,68,0,41,0,170,255,144,0,41,0,171,255,144,0,41,0,172,255,144,0,41, + 0,173,255,144,0,41,0,180,255,183,0,41,0,181,255,183,0,41,0,182,255,183,0,41,0,183,255,183,0,41,0,184,255,183,0,41,0,187,255,144, + 0,41,0,188,255,144,0,41,0,189,255,144,0,41,0,190,255,144,0,41,0,191,255,68,0,41,0,193,255,68,0,41,0,194,255,68,0,41,0,195, + 255,68,0,41,0,196,255,68,0,41,0,197,255,68,0,41,0,198,255,68,0,41,0,199,255,68,0,41,0,213,255,144,0,41,0,215,255,144,0,41, + 0,217,255,144,0,41,0,219,255,144,0,41,0,221,255,144,0,41,0,241,255,107,0,41,0,245,255,107,0,41,1,15,255,183,0,41,1,17,255,183, + 0,41,1,19,255,183,0,41,1,23,255,107,0,41,1,25,255,107,0,41,1,27,255,107,0,41,1,28,255,220,0,41,1,30,255,220,0,41,1,32, + 255,220,0,41,1,34,255,220,0,41,1,36,255,220,0,41,1,38,255,220,0,41,1,40,255,220,0,41,1,43,255,144,0,41,1,45,255,144,0,41, + 1,47,255,144,0,41,1,49,255,144,0,41,1,51,255,144,0,41,1,53,255,144,0,41,1,57,255,68,0,41,1,173,255,183,0,41,1,175,255,183, + 0,41,1,218,255,220,0,41,1,220,255,220,0,41,1,241,255,183,0,41,1,245,255,68,0,41,9,236,255,68,0,41,10,250,255,211,0,41,10,252, + 254,136,0,42,0,55,255,183,0,42,0,60,255,154,0,42,0,109,255,220,0,42,0,125,255,220,0,42,0,159,255,154,0,42,1,38,255,183,0,42, + 1,58,255,154,0,42,10,250,255,211,0,42,10,251,255,211,0,42,10,252,255,201,0,43,0,17,255,220,0,43,10,250,255,183,0,43,10,251,255,193, + 0,43,10,252,255,183,0,45,0,16,255,183,0,45,0,36,255,220,0,45,0,109,255,220,0,45,0,125,255,220,0,45,0,130,255,220,0,45,0,131, + 255,220,0,45,0,132,255,220,0,45,0,133,255,220,0,45,0,134,255,220,0,45,10,250,255,183,0,45,10,251,255,193,0,45,10,252,255,144,0,46, + 0,16,255,41,0,46,0,36,255,220,0,46,0,38,255,144,0,46,0,50,255,144,0,46,0,55,255,97,0,46,0,56,255,201,0,46,0,58,255,183, + 0,46,0,60,255,183,0,46,0,68,255,220,0,46,0,72,255,154,0,46,0,82,255,154,0,46,0,88,255,154,0,46,0,92,255,107,0,46,0,109, + 255,125,0,46,0,130,255,220,0,46,0,131,255,220,0,46,0,132,255,220,0,46,0,133,255,220,0,46,0,134,255,220,0,46,0,137,255,144,0,46, + 0,148,255,144,0,46,0,149,255,144,0,46,0,150,255,144,0,46,0,151,255,144,0,46,0,152,255,144,0,46,0,155,255,201,0,46,0,156,255,201, + 0,46,0,157,255,201,0,46,0,158,255,201,0,46,0,159,255,183,0,46,0,162,255,220,0,46,0,163,255,220,0,46,0,164,255,220,0,46,0,165, + 255,220,0,46,0,166,255,220,0,46,0,167,255,220,0,46,0,170,255,154,0,46,0,171,255,154,0,46,0,172,255,154,0,46,0,173,255,154,0,46, + 0,180,255,154,0,46,0,181,255,154,0,46,0,182,255,154,0,46,0,183,255,154,0,46,0,184,255,154,0,46,0,187,255,154,0,46,0,188,255,154, + 0,46,0,189,255,154,0,46,0,190,255,154,0,46,0,191,255,107,0,46,0,193,255,107,0,46,0,200,255,144,0,46,0,206,255,144,0,46,0,221, + 255,154,0,46,1,38,255,97,0,46,1,48,255,201,0,46,1,49,255,154,0,46,1,58,255,183,0,46,10,250,255,193,0,46,10,251,255,193,0,47, + 0,16,255,220,0,47,0,36,0,47,0,47,0,50,255,183,0,47,0,55,254,230,0,47,0,56,255,154,0,47,0,57,255,31,0,47,0,58,255,68, + 0,47,0,60,254,240,0,47,0,72,255,220,0,47,0,82,255,220,0,47,0,88,255,220,0,47,0,92,255,68,0,47,0,130,0,47,0,47,0,131, + 0,47,0,47,0,132,0,47,0,47,0,133,0,47,0,47,0,134,0,47,0,47,0,148,255,183,0,47,0,149,255,183,0,47,0,150,255,183,0,47, + 0,151,255,183,0,47,0,152,255,183,0,47,0,155,255,154,0,47,0,156,255,154,0,47,0,157,255,154,0,47,0,158,255,154,0,47,0,159,254,240, + 0,47,0,170,255,220,0,47,0,171,255,220,0,47,0,172,255,220,0,47,0,173,255,220,0,47,0,180,255,220,0,47,0,181,255,220,0,47,0,182, + 255,220,0,47,0,183,255,220,0,47,0,184,255,220,0,47,0,187,255,220,0,47,0,188,255,220,0,47,0,189,255,220,0,47,0,190,255,220,0,47, + 0,191,255,68,0,47,0,193,255,68,0,47,0,221,255,220,0,47,1,38,254,230,0,47,1,48,255,154,0,47,1,49,255,220,0,47,1,58,254,240, + 0,47,10,250,254,97,0,47,10,251,253,230,0,50,0,16,0,57,0,50,0,17,255,173,0,50,0,29,255,220,0,50,0,36,255,220,0,50,0,57, + 255,220,0,50,0,59,255,125,0,50,0,60,255,144,0,50,0,109,255,220,0,50,0,130,255,220,0,50,0,131,255,220,0,50,0,132,255,220,0,50, + 0,133,255,220,0,50,0,134,255,220,0,50,0,159,255,144,0,50,1,58,255,144,0,50,10,250,255,211,0,50,10,251,255,220,0,50,10,252,255,68, + 0,51,0,16,255,211,0,51,0,17,254,193,0,51,0,36,255,125,0,51,0,60,255,211,0,51,0,68,255,164,0,51,0,72,255,183,0,51,0,76, + 255,211,0,51,0,81,255,220,0,51,0,82,255,183,0,51,0,85,255,220,0,51,0,86,255,220,0,51,0,88,255,220,0,51,0,109,255,220,0,51, + 0,130,255,125,0,51,0,131,255,125,0,51,0,132,255,125,0,51,0,133,255,125,0,51,0,134,255,125,0,51,0,159,255,211,0,51,0,162,255,164, + 0,51,0,163,255,164,0,51,0,164,255,164,0,51,0,165,255,164,0,51,0,166,255,164,0,51,0,167,255,164,0,51,0,170,255,183,0,51,0,171, + 255,183,0,51,0,172,255,183,0,51,0,173,255,183,0,51,0,179,255,220,0,51,0,180,255,183,0,51,0,181,255,183,0,51,0,182,255,183,0,51, + 0,183,255,183,0,51,0,184,255,183,0,51,0,187,255,220,0,51,0,188,255,220,0,51,0,189,255,220,0,51,0,190,255,220,0,51,0,221,255,183, + 0,51,1,10,255,220,0,51,1,23,255,220,0,51,1,27,255,220,0,51,1,33,255,220,0,51,1,35,255,220,0,51,1,49,255,220,0,51,1,58, + 255,211,0,51,10,250,0,38,0,51,10,251,0,38,0,51,10,252,254,183,0,52,0,16,0,57,0,52,10,250,255,211,0,52,10,251,255,220,0,52, + 10,252,255,125,0,53,0,16,255,173,0,53,0,17,255,183,0,53,0,29,255,193,0,53,0,36,255,173,0,53,0,38,255,154,0,53,0,55,255,107, + 0,53,0,57,255,144,0,53,0,58,255,173,0,53,0,60,255,125,0,53,0,68,255,211,0,53,0,72,255,164,0,53,0,82,255,164,0,53,0,88, + 255,164,0,53,0,92,255,144,0,53,0,109,255,144,0,53,0,125,255,220,0,53,0,130,255,173,0,53,0,131,255,173,0,53,0,132,255,173,0,53, + 0,133,255,173,0,53,0,134,255,173,0,53,0,137,255,154,0,53,0,159,255,125,0,53,0,162,255,211,0,53,0,163,255,211,0,53,0,164,255,211, + 0,53,0,165,255,211,0,53,0,166,255,211,0,53,0,167,255,211,0,53,0,170,255,164,0,53,0,171,255,164,0,53,0,172,255,164,0,53,0,173, + 255,164,0,53,0,180,255,164,0,53,0,181,255,164,0,53,0,182,255,164,0,53,0,183,255,164,0,53,0,184,255,164,0,53,0,187,255,164,0,53, + 0,188,255,164,0,53,0,189,255,164,0,53,0,190,255,164,0,53,0,191,255,144,0,53,0,193,255,144,0,53,0,200,255,154,0,53,0,206,255,154, + 0,53,0,221,255,164,0,53,1,38,255,107,0,53,1,49,255,164,0,53,1,58,255,125,0,53,10,250,255,107,0,53,10,251,255,125,0,53,10,252, + 255,220,0,54,0,36,0,38,0,54,0,130,0,38,0,54,0,131,0,38,0,54,0,132,0,38,0,54,0,133,0,38,0,54,0,134,0,38,0,55, + 0,16,255,68,0,55,0,17,255,13,0,55,0,29,255,31,0,55,0,36,255,97,0,55,0,38,255,136,0,55,0,55,255,220,0,55,0,68,254,173, + 0,55,0,70,254,164,0,55,0,72,254,164,0,55,0,76,255,193,0,55,0,82,254,164,0,55,0,85,254,211,0,55,0,86,254,173,0,55,0,88, + 254,201,0,55,0,90,254,173,0,55,0,92,254,193,0,55,0,109,255,68,0,55,0,125,255,144,0,55,0,130,255,97,0,55,0,131,255,97,0,55, + 0,132,255,97,0,55,0,133,255,97,0,55,0,134,255,97,0,55,0,137,255,136,0,55,0,162,255,17,0,55,0,163,254,173,0,55,0,164,255,17, + 0,55,0,165,255,17,0,55,0,166,255,17,0,55,0,167,255,17,0,55,0,169,254,164,0,55,0,170,254,224,0,55,0,171,254,164,0,55,0,172, + 254,224,0,55,0,173,254,224,0,55,0,180,254,244,0,55,0,181,254,164,0,55,0,182,254,244,0,55,0,183,254,244,0,55,0,184,254,244,0,55, + 0,187,254,231,0,55,0,188,254,201,0,55,0,189,254,231,0,55,0,190,254,231,0,55,0,191,254,193,0,55,0,193,254,193,0,55,0,200,255,136, + 0,55,0,201,254,164,0,55,0,206,255,136,0,55,0,207,254,164,0,55,0,221,254,164,0,55,1,23,254,211,0,55,1,27,254,211,0,55,1,33, + 254,173,0,55,1,35,254,173,0,55,1,38,255,220,0,55,1,49,254,201,0,55,10,251,255,211,0,55,10,252,254,248,0,56,0,61,255,220,0,56, + 1,63,255,220,0,57,0,16,255,136,0,57,0,17,254,248,0,57,0,29,255,89,0,57,0,36,255,125,0,57,0,50,255,220,0,57,0,68,255,97, + 0,57,0,72,255,97,0,57,0,76,255,211,0,57,0,82,255,97,0,57,0,88,255,117,0,57,0,92,255,201,0,57,0,109,255,78,0,57,0,125, + 255,144,0,57,0,130,255,125,0,57,0,131,255,125,0,57,0,132,255,125,0,57,0,133,255,125,0,57,0,134,255,125,0,57,0,148,255,220,0,57, + 0,149,255,220,0,57,0,150,255,220,0,57,0,151,255,220,0,57,0,152,255,220,0,57,0,162,255,97,0,57,0,163,255,97,0,57,0,164,255,97, + 0,57,0,165,255,97,0,57,0,166,255,97,0,57,0,167,255,97,0,57,0,170,255,97,0,57,0,171,255,97,0,57,0,172,255,97,0,57,0,173, + 255,97,0,57,0,180,255,97,0,57,0,181,255,97,0,57,0,182,255,97,0,57,0,183,255,97,0,57,0,184,255,97,0,57,0,187,255,117,0,57, + 0,188,255,117,0,57,0,189,255,117,0,57,0,190,255,117,0,57,0,191,255,201,0,57,0,193,255,201,0,57,0,221,255,97,0,57,1,49,255,117, + 0,57,10,252,254,230,0,58,0,16,255,173,0,58,0,17,255,21,0,58,0,29,255,136,0,58,0,36,255,144,0,58,0,68,255,125,0,58,0,72, + 255,136,0,58,0,76,255,211,0,58,0,82,255,136,0,58,0,85,255,164,0,58,0,88,255,183,0,58,0,92,255,220,0,58,0,109,255,144,0,58, + 0,125,255,220,0,58,0,130,255,144,0,58,0,131,255,144,0,58,0,132,255,144,0,58,0,133,255,144,0,58,0,134,255,144,0,58,0,162,255,125, + 0,58,0,163,255,125,0,58,0,164,255,125,0,58,0,165,255,125,0,58,0,166,255,125,0,58,0,167,255,125,0,58,0,170,255,136,0,58,0,171, + 255,136,0,58,0,172,255,136,0,58,0,173,255,136,0,58,0,180,255,136,0,58,0,181,255,136,0,58,0,182,255,136,0,58,0,183,255,136,0,58, + 0,184,255,136,0,58,0,187,255,183,0,58,0,188,255,183,0,58,0,189,255,183,0,58,0,190,255,183,0,58,0,191,255,220,0,58,0,193,255,220, + 0,58,0,221,255,136,0,58,1,23,255,164,0,58,1,27,255,164,0,58,1,49,255,183,0,58,10,250,255,220,0,58,10,252,254,248,0,59,0,16, + 255,154,0,59,0,38,255,107,0,59,0,50,255,125,0,59,0,55,255,220,0,59,0,72,255,164,0,59,0,109,255,144,0,59,0,137,255,107,0,59, + 0,148,255,125,0,59,0,149,255,125,0,59,0,150,255,125,0,59,0,151,255,125,0,59,0,152,255,125,0,59,0,170,255,164,0,59,0,171,255,164, + 0,59,0,172,255,164,0,59,0,173,255,164,0,59,0,200,255,107,0,59,0,206,255,107,0,59,0,221,255,164,0,59,1,38,255,220,0,59,10,250, + 255,97,0,59,10,251,255,173,0,59,10,252,255,211,0,60,0,16,255,13,0,60,0,17,254,97,0,60,0,29,254,240,0,60,0,36,255,97,0,60, + 0,38,255,144,0,60,0,50,255,144,0,60,0,68,254,230,0,60,0,72,254,240,0,60,0,76,255,183,0,60,0,82,254,240,0,60,0,88,255,21, + 0,60,0,109,255,31,0,60,0,125,255,107,0,60,0,130,255,97,0,60,0,131,255,97,0,60,0,132,255,97,0,60,0,133,255,97,0,60,0,134, + 255,97,0,60,0,137,255,144,0,60,0,148,255,144,0,60,0,149,255,144,0,60,0,150,255,144,0,60,0,151,255,144,0,60,0,152,255,144,0,60, + 0,162,254,230,0,60,0,163,254,230,0,60,0,164,254,230,0,60,0,165,254,230,0,60,0,166,254,230,0,60,0,167,254,230,0,60,0,170,254,240, + 0,60,0,171,254,240,0,60,0,172,254,240,0,60,0,173,254,240,0,60,0,180,254,240,0,60,0,181,254,240,0,60,0,182,254,240,0,60,0,183, + 254,240,0,60,0,184,254,240,0,60,0,187,255,21,0,60,0,188,255,21,0,60,0,189,255,21,0,60,0,190,255,21,0,60,0,200,255,144,0,60, + 0,206,255,144,0,60,0,221,254,240,0,60,1,49,255,21,0,60,10,250,255,144,0,60,10,251,255,220,0,60,10,252,254,248,0,61,0,16,255,220, + 0,61,10,250,255,220,0,61,10,251,255,220,0,61,10,252,255,220,0,72,0,91,255,220,0,73,0,16,255,144,0,73,0,17,255,107,0,73,0,29, + 255,183,0,73,0,87,255,220,0,73,0,90,255,220,0,73,0,92,255,220,0,73,0,109,255,183,0,73,0,125,255,220,0,73,0,191,255,220,0,73, + 0,193,255,220,0,73,1,39,255,220,0,73,10,250,0,65,0,73,10,252,255,21,0,78,0,68,255,220,0,78,0,72,255,183,0,78,0,82,255,183, + 0,78,0,88,255,193,0,78,0,92,255,183,0,78,0,162,255,220,0,78,0,163,255,220,0,78,0,164,255,220,0,78,0,165,255,220,0,78,0,166, + 255,220,0,78,0,167,255,220,0,78,0,170,255,183,0,78,0,171,255,183,0,78,0,172,255,183,0,78,0,173,255,183,0,78,0,180,255,183,0,78, + 0,181,255,183,0,78,0,182,255,183,0,78,0,183,255,183,0,78,0,184,255,183,0,78,0,187,255,193,0,78,0,188,255,193,0,78,0,189,255,193, + 0,78,0,190,255,193,0,78,0,191,255,183,0,78,0,193,255,183,0,78,0,221,255,183,0,78,1,49,255,193,0,81,10,250,255,107,0,81,10,251, + 255,144,0,81,10,252,255,164,0,82,0,16,0,38,0,82,0,17,255,220,0,82,0,91,255,193,0,82,10,250,255,107,0,82,10,251,255,183,0,82, + 10,252,255,125,0,85,0,16,255,125,0,85,0,17,255,68,0,85,0,29,255,220,0,85,0,70,255,211,0,85,0,71,255,220,0,85,0,72,255,211, + 0,85,0,74,255,220,0,85,0,75,255,220,0,85,0,80,255,220,0,85,0,81,255,220,0,85,0,82,255,211,0,85,0,84,255,220,0,85,0,85, + 255,220,0,85,0,91,255,201,0,85,0,109,255,183,0,85,0,169,255,211,0,85,0,170,255,211,0,85,0,171,255,211,0,85,0,172,255,211,0,85, + 0,173,255,211,0,85,0,179,255,220,0,85,0,180,255,211,0,85,0,181,255,211,0,85,0,182,255,211,0,85,0,183,255,211,0,85,0,184,255,211, + 0,85,0,201,255,211,0,85,0,207,255,211,0,85,0,209,0,72,0,85,0,221,255,211,0,85,0,225,255,220,0,85,1,10,255,220,0,85,1,23, + 255,220,0,85,1,27,255,220,0,85,10,251,0,86,0,85,10,252,254,201,0,89,0,16,255,201,0,89,0,17,255,97,0,89,0,29,255,144,0,89, + 0,109,255,220,0,89,0,125,255,220,0,89,10,251,255,220,0,89,10,252,254,240,0,90,0,17,255,68,0,90,0,29,255,144,0,90,0,109,255,220, + 0,90,0,125,255,220,0,90,10,252,255,41,0,91,0,70,255,220,0,91,0,72,255,193,0,91,0,82,255,193,0,91,0,169,255,220,0,91,0,170, + 255,193,0,91,0,171,255,193,0,91,0,172,255,193,0,91,0,173,255,193,0,91,0,180,255,193,0,91,0,181,255,193,0,91,0,182,255,193,0,91, + 0,183,255,193,0,91,0,184,255,193,0,91,0,201,255,220,0,91,0,207,255,220,0,91,0,221,255,193,0,92,0,16,255,220,0,92,0,17,254,220, + 0,92,0,29,255,107,0,92,0,109,255,220,0,92,0,125,255,220,0,92,10,252,254,211,0,109,0,37,255,220,0,109,0,38,255,220,0,109,0,39, + 255,220,0,109,0,42,255,220,0,109,0,45,255,220,0,109,0,55,255,144,0,109,0,57,255,144,0,109,0,58,255,220,0,109,0,60,255,107,0,109, + 0,89,255,220,0,109,0,90,255,220,0,109,0,92,255,220,0,109,0,136,0,151,0,109,0,137,255,220,0,109,0,159,255,107,0,109,0,191,255,220, + 0,109,0,193,255,220,0,109,0,200,255,220,0,109,0,206,255,220,0,109,0,208,255,220,0,109,0,224,255,220,0,109,1,38,255,144,0,109,1,58, + 255,107,0,125,0,36,255,183,0,125,0,37,255,183,0,125,0,38,255,220,0,125,0,39,255,220,0,125,0,45,255,220,0,125,0,50,255,220,0,125, + 0,55,255,68,0,125,0,57,255,78,0,125,0,58,255,144,0,125,0,59,255,144,0,125,0,60,255,31,0,125,0,89,255,220,0,125,0,90,255,220, + 0,125,0,92,255,220,0,125,0,130,255,183,0,125,0,131,255,183,0,125,0,132,255,183,0,125,0,133,255,183,0,125,0,134,255,183,0,125,0,137, + 255,220,0,125,0,148,255,220,0,125,0,149,255,220,0,125,0,150,255,220,0,125,0,151,255,220,0,125,0,152,255,220,0,125,0,159,255,31,0,125, + 0,191,255,220,0,125,0,193,255,220,0,125,0,200,255,220,0,125,0,206,255,220,0,125,0,208,255,220,0,125,1,38,255,68,0,125,1,58,255,31, + 0,130,0,16,255,211,0,130,0,17,255,220,0,130,0,29,255,220,0,130,0,36,0,57,0,130,0,38,255,220,0,130,0,42,255,220,0,130,0,50, + 255,220,0,130,0,52,255,220,0,130,0,55,255,97,0,130,0,57,255,125,0,130,0,58,255,144,0,130,0,60,255,97,0,130,0,70,255,220,0,130, + 0,71,255,220,0,130,0,72,255,220,0,130,0,73,255,183,0,130,0,82,255,220,0,130,0,84,255,220,0,130,0,87,255,220,0,130,0,89,255,136, + 0,130,0,90,255,173,0,130,0,92,255,117,0,130,0,109,255,183,0,130,0,130,0,57,0,130,0,131,0,57,0,130,0,132,0,57,0,130,0,133, + 0,57,0,130,0,134,0,57,0,130,0,137,255,220,0,130,0,148,255,220,0,130,0,149,255,220,0,130,0,150,255,220,0,130,0,151,255,220,0,130, + 0,152,255,220,0,130,0,159,255,97,0,130,0,169,255,220,0,130,0,170,255,220,0,130,0,171,255,220,0,130,0,172,255,220,0,130,0,173,255,220, + 0,130,0,180,255,220,0,130,0,181,255,220,0,130,0,182,255,220,0,130,0,183,255,220,0,130,0,184,255,220,0,130,0,191,255,117,0,130,0,193, + 255,117,0,130,0,194,0,57,0,130,0,196,0,57,0,130,0,198,0,57,0,130,0,200,255,220,0,130,0,201,255,220,0,130,0,202,255,220,0,130, + 0,204,255,220,0,130,0,205,255,220,0,130,0,206,255,220,0,130,0,207,255,220,0,130,0,209,255,220,0,130,0,213,255,220,0,130,0,215,255,220, + 0,130,0,217,255,220,0,130,0,219,255,220,0,130,0,221,255,220,0,130,0,222,255,220,0,130,0,224,255,220,0,130,0,226,255,220,0,130,1,14, + 255,220,0,130,1,15,255,220,0,130,1,16,255,220,0,130,1,17,255,220,0,130,1,18,255,220,0,130,1,19,255,220,0,130,1,36,255,97,0,130, + 1,37,255,220,0,130,1,38,255,97,0,130,1,39,255,220,0,130,1,54,255,144,0,130,1,55,255,173,0,130,1,56,255,97,0,130,1,57,255,117, + 0,130,1,58,255,97,0,130,1,240,255,220,0,130,1,241,255,220,0,130,9,121,255,144,0,130,9,124,255,173,0,130,9,125,255,144,0,130,9,126, + 255,173,0,130,9,235,255,97,0,130,9,236,255,117,0,130,10,250,254,248,0,130,10,251,255,3,0,130,10,252,0,47,0,131,0,16,255,211,0,131, + 0,17,255,220,0,131,0,29,255,220,0,131,0,36,0,57,0,131,0,38,255,220,0,131,0,42,255,220,0,131,0,50,255,220,0,131,0,52,255,220, + 0,131,0,55,255,97,0,131,0,57,255,125,0,131,0,58,255,144,0,131,0,60,255,97,0,131,0,70,255,220,0,131,0,71,255,220,0,131,0,72, + 255,220,0,131,0,73,255,183,0,131,0,82,255,220,0,131,0,84,255,220,0,131,0,87,255,220,0,131,0,89,255,136,0,131,0,90,255,173,0,131, + 0,92,255,117,0,131,0,109,255,183,0,131,0,130,0,57,0,131,0,131,0,57,0,131,0,132,0,57,0,131,0,133,0,57,0,131,0,134,0,57, + 0,131,0,137,255,220,0,131,0,148,255,220,0,131,0,149,255,220,0,131,0,150,255,220,0,131,0,151,255,220,0,131,0,152,255,220,0,131,0,159, + 255,97,0,131,0,169,255,220,0,131,0,170,255,220,0,131,0,171,255,220,0,131,0,172,255,220,0,131,0,173,255,220,0,131,0,180,255,220,0,131, + 0,181,255,220,0,131,0,182,255,220,0,131,0,183,255,220,0,131,0,184,255,220,0,131,0,191,255,117,0,131,0,193,255,117,0,131,0,194,0,57, + 0,131,0,196,0,57,0,131,0,198,0,57,0,131,0,200,255,220,0,131,0,201,255,220,0,131,0,202,255,220,0,131,0,204,255,220,0,131,0,205, + 255,220,0,131,0,206,255,220,0,131,0,207,255,220,0,131,0,209,255,220,0,131,0,213,255,220,0,131,0,215,255,220,0,131,0,217,255,220,0,131, + 0,219,255,220,0,131,0,221,255,220,0,131,0,222,255,220,0,131,0,224,255,220,0,131,0,226,255,220,0,131,1,14,255,220,0,131,1,15,255,220, + 0,131,1,16,255,220,0,131,1,17,255,220,0,131,1,18,255,220,0,131,1,19,255,220,0,131,1,36,255,97,0,131,1,37,255,220,0,131,1,38, + 255,97,0,131,1,39,255,220,0,131,1,54,255,144,0,131,1,55,255,173,0,131,1,56,255,97,0,131,1,57,255,117,0,131,1,58,255,97,0,131, + 1,240,255,220,0,131,1,241,255,220,0,131,9,121,255,144,0,131,9,123,255,144,0,131,9,124,255,173,0,131,9,125,255,144,0,131,9,126,255,173, + 0,131,9,235,255,97,0,131,9,236,255,117,0,131,10,250,254,248,0,131,10,251,255,3,0,131,10,252,0,47,0,132,0,16,255,211,0,132,0,17, + 255,220,0,132,0,29,255,220,0,132,0,36,0,57,0,132,0,38,255,220,0,132,0,42,255,220,0,132,0,50,255,220,0,132,0,52,255,220,0,132, + 0,55,255,97,0,132,0,57,255,125,0,132,0,58,255,144,0,132,0,60,255,97,0,132,0,70,255,220,0,132,0,71,255,220,0,132,0,72,255,220, + 0,132,0,73,255,183,0,132,0,82,255,220,0,132,0,84,255,220,0,132,0,87,255,220,0,132,0,89,255,136,0,132,0,90,255,173,0,132,0,92, + 255,117,0,132,0,109,255,183,0,132,0,130,0,57,0,132,0,131,0,57,0,132,0,132,0,57,0,132,0,133,0,57,0,132,0,134,0,57,0,132, + 0,137,255,220,0,132,0,148,255,220,0,132,0,149,255,220,0,132,0,150,255,220,0,132,0,151,255,220,0,132,0,152,255,220,0,132,0,159,255,97, + 0,132,0,169,255,220,0,132,0,170,255,220,0,132,0,171,255,220,0,132,0,172,255,220,0,132,0,173,255,220,0,132,0,180,255,220,0,132,0,181, + 255,220,0,132,0,182,255,220,0,132,0,183,255,220,0,132,0,184,255,220,0,132,0,191,255,117,0,132,0,193,255,117,0,132,0,194,0,57,0,132, + 0,196,0,57,0,132,0,198,0,57,0,132,0,200,255,220,0,132,0,201,255,220,0,132,0,202,255,220,0,132,0,204,255,220,0,132,0,205,255,220, + 0,132,0,206,255,220,0,132,0,207,255,220,0,132,0,209,255,220,0,132,0,213,255,220,0,132,0,215,255,220,0,132,0,217,255,220,0,132,0,219, + 255,220,0,132,0,221,255,220,0,132,0,222,255,220,0,132,0,224,255,220,0,132,0,226,255,220,0,132,1,14,255,220,0,132,1,15,255,220,0,132, + 1,16,255,220,0,132,1,17,255,220,0,132,1,18,255,220,0,132,1,19,255,220,0,132,1,36,255,97,0,132,1,37,255,220,0,132,1,38,255,97, + 0,132,1,39,255,220,0,132,1,54,255,144,0,132,1,55,255,173,0,132,1,56,255,97,0,132,1,57,255,117,0,132,1,58,255,97,0,132,1,240, + 255,220,0,132,1,241,255,220,0,132,9,121,255,144,0,132,9,123,255,144,0,132,9,124,255,173,0,132,9,125,255,144,0,132,9,126,255,173,0,132, + 9,235,255,97,0,132,9,236,255,117,0,132,10,250,254,248,0,132,10,251,255,3,0,132,10,252,0,47,0,133,0,16,255,211,0,133,0,17,255,220, + 0,133,0,29,255,220,0,133,0,36,0,57,0,133,0,38,255,220,0,133,0,42,255,220,0,133,0,50,255,220,0,133,0,52,255,220,0,133,0,55, + 255,97,0,133,0,57,255,125,0,133,0,58,255,144,0,133,0,60,255,97,0,133,0,70,255,220,0,133,0,71,255,220,0,133,0,72,255,220,0,133, + 0,73,255,183,0,133,0,82,255,220,0,133,0,84,255,220,0,133,0,87,255,220,0,133,0,89,255,136,0,133,0,90,255,173,0,133,0,92,255,117, + 0,133,0,109,255,183,0,133,0,130,0,57,0,133,0,131,0,57,0,133,0,132,0,57,0,133,0,133,0,57,0,133,0,134,0,57,0,133,0,137, + 255,220,0,133,0,148,255,220,0,133,0,149,255,220,0,133,0,150,255,220,0,133,0,151,255,220,0,133,0,152,255,220,0,133,0,159,255,97,0,133, + 0,169,255,220,0,133,0,170,255,220,0,133,0,171,255,220,0,133,0,172,255,220,0,133,0,173,255,220,0,133,0,180,255,220,0,133,0,181,255,220, + 0,133,0,182,255,220,0,133,0,183,255,220,0,133,0,184,255,220,0,133,0,191,255,117,0,133,0,193,255,117,0,133,0,194,0,57,0,133,0,196, + 0,57,0,133,0,198,0,57,0,133,0,200,255,220,0,133,0,201,255,220,0,133,0,202,255,220,0,133,0,204,255,220,0,133,0,205,255,220,0,133, + 0,206,255,220,0,133,0,207,255,220,0,133,0,209,255,220,0,133,0,213,255,220,0,133,0,215,255,220,0,133,0,217,255,220,0,133,0,219,255,220, + 0,133,0,221,255,220,0,133,0,222,255,220,0,133,0,224,255,220,0,133,0,226,255,220,0,133,1,14,255,220,0,133,1,15,255,220,0,133,1,16, + 255,220,0,133,1,17,255,220,0,133,1,18,255,220,0,133,1,19,255,220,0,133,1,36,255,97,0,133,1,37,255,220,0,133,1,38,255,97,0,133, + 1,39,255,220,0,133,1,54,255,144,0,133,1,55,255,173,0,133,1,56,255,97,0,133,1,57,255,117,0,133,1,58,255,97,0,133,1,240,255,220, + 0,133,9,121,255,144,0,133,9,123,255,144,0,133,9,124,255,173,0,133,9,125,255,144,0,133,9,126,255,173,0,133,9,235,255,97,0,133,9,236, + 255,117,0,133,10,250,254,248,0,133,10,251,255,3,0,133,10,252,0,47,0,134,0,16,255,211,0,134,0,17,255,220,0,134,0,29,255,220,0,134, + 0,36,0,57,0,134,0,38,255,220,0,134,0,42,255,220,0,134,0,50,255,220,0,134,0,52,255,220,0,134,0,55,255,97,0,134,0,57,255,125, + 0,134,0,58,255,144,0,134,0,60,255,97,0,134,0,70,255,220,0,134,0,71,255,220,0,134,0,72,255,220,0,134,0,73,255,183,0,134,0,82, + 255,220,0,134,0,84,255,220,0,134,0,87,255,220,0,134,0,89,255,136,0,134,0,90,255,173,0,134,0,92,255,117,0,134,0,109,255,183,0,134, + 0,130,0,57,0,134,0,131,0,57,0,134,0,132,0,57,0,134,0,133,0,57,0,134,0,134,0,57,0,134,0,137,255,220,0,134,0,148,255,220, + 0,134,0,149,255,220,0,134,0,150,255,220,0,134,0,151,255,220,0,134,0,152,255,220,0,134,0,159,255,97,0,134,0,169,255,220,0,134,0,170, + 255,220,0,134,0,171,255,220,0,134,0,172,255,220,0,134,0,173,255,220,0,134,0,180,255,220,0,134,0,181,255,220,0,134,0,182,255,220,0,134, + 0,183,255,220,0,134,0,184,255,220,0,134,0,191,255,117,0,134,0,193,255,117,0,134,0,194,0,57,0,134,0,196,0,57,0,134,0,198,0,57, + 0,134,0,200,255,220,0,134,0,201,255,220,0,134,0,202,255,220,0,134,0,204,255,220,0,134,0,205,255,220,0,134,0,206,255,220,0,134,0,207, + 255,220,0,134,0,209,255,220,0,134,0,213,255,220,0,134,0,215,255,220,0,134,0,217,255,220,0,134,0,219,255,220,0,134,0,221,255,220,0,134, + 0,222,255,220,0,134,0,224,255,220,0,134,0,226,255,220,0,134,1,14,255,220,0,134,1,15,255,220,0,134,1,16,255,220,0,134,1,17,255,220, + 0,134,1,18,255,220,0,134,1,19,255,220,0,134,1,36,255,97,0,134,1,37,255,220,0,134,1,38,255,97,0,134,1,39,255,220,0,134,1,54, + 255,144,0,134,1,55,255,173,0,134,1,56,255,97,0,134,1,57,255,117,0,134,1,58,255,97,0,134,1,240,255,220,0,134,1,241,255,220,0,134, + 9,121,255,144,0,134,9,123,255,144,0,134,9,124,255,173,0,134,9,125,255,144,0,134,9,126,255,173,0,134,9,235,255,97,0,134,9,236,255,117, + 0,134,10,250,254,248,0,134,10,251,255,3,0,134,10,252,0,47,0,136,10,250,255,173,0,136,10,251,255,164,0,136,10,252,255,144,0,137,0,60, + 255,220,0,137,0,109,255,220,0,137,0,125,255,220,0,137,0,159,255,220,0,137,1,58,255,220,0,137,10,251,0,38,0,146,0,36,255,220,0,146, + 0,57,255,220,0,146,0,60,255,144,0,146,0,109,255,220,0,146,0,125,255,220,0,146,0,130,255,220,0,146,0,131,255,220,0,146,0,132,255,220, + 0,146,0,133,255,220,0,146,0,134,255,220,0,146,0,159,255,144,0,146,0,194,255,220,0,146,0,196,255,220,0,146,0,198,255,220,0,146,1,56, + 255,144,0,146,1,58,255,144,0,146,1,244,255,144,0,146,9,235,255,144,0,146,10,250,255,211,0,146,10,251,255,201,0,146,10,252,255,68,0,148, + 0,16,0,57,0,148,0,17,255,173,0,148,0,29,255,220,0,148,0,36,255,220,0,148,0,57,255,220,0,148,0,59,255,125,0,148,0,60,255,144, + 0,148,0,109,255,220,0,148,0,130,255,220,0,148,0,131,255,220,0,148,0,132,255,220,0,148,0,133,255,220,0,148,0,134,255,220,0,148,0,159, + 255,144,0,148,1,58,255,144,0,148,10,250,255,211,0,148,10,251,255,220,0,148,10,252,255,68,0,149,0,16,0,57,0,149,0,17,255,173,0,149, + 0,29,255,220,0,149,0,36,255,220,0,149,0,57,255,220,0,149,0,59,255,125,0,149,0,60,255,144,0,149,0,109,255,220,0,149,0,130,255,220, + 0,149,0,131,255,220,0,149,0,132,255,220,0,149,0,133,255,220,0,149,0,134,255,220,0,149,0,159,255,144,0,149,1,58,255,144,0,149,10,250, + 255,211,0,149,10,251,255,220,0,149,10,252,255,68,0,150,0,16,0,57,0,150,0,17,255,173,0,150,0,29,255,220,0,150,0,36,255,220,0,150, + 0,57,255,220,0,150,0,59,255,125,0,150,0,60,255,144,0,150,0,109,255,220,0,150,0,130,255,220,0,150,0,131,255,220,0,150,0,132,255,220, + 0,150,0,133,255,220,0,150,0,134,255,220,0,150,0,159,255,144,0,150,1,58,255,144,0,150,10,250,255,211,0,150,10,251,255,220,0,150,10,252, + 255,68,0,151,0,16,0,57,0,151,0,17,255,173,0,151,0,29,255,220,0,151,0,36,255,220,0,151,0,57,255,220,0,151,0,59,255,125,0,151, + 0,60,255,144,0,151,0,109,255,220,0,151,0,130,255,220,0,151,0,131,255,220,0,151,0,132,255,220,0,151,0,133,255,220,0,151,0,134,255,220, + 0,151,0,159,255,144,0,151,1,58,255,144,0,151,10,250,255,211,0,151,10,251,255,220,0,151,10,252,255,68,0,152,0,16,0,57,0,152,0,17, + 255,173,0,152,0,29,255,220,0,152,0,36,255,220,0,152,0,57,255,220,0,152,0,59,255,125,0,152,0,60,255,144,0,152,0,109,255,220,0,152, + 0,130,255,220,0,152,0,131,255,220,0,152,0,132,255,220,0,152,0,133,255,220,0,152,0,134,255,220,0,152,0,159,255,144,0,152,1,58,255,144, + 0,152,10,250,255,211,0,152,10,251,255,220,0,152,10,252,255,68,0,155,0,61,255,220,0,155,1,63,255,220,0,156,0,61,255,220,0,156,1,63, + 255,220,0,157,0,61,255,220,0,157,1,63,255,220,0,158,0,61,255,220,0,158,1,63,255,220,0,159,0,16,255,13,0,159,0,17,254,97,0,159, + 0,29,254,240,0,159,0,36,255,97,0,159,0,38,255,144,0,159,0,50,255,144,0,159,0,68,254,230,0,159,0,72,254,240,0,159,0,76,255,183, + 0,159,0,82,254,240,0,159,0,88,255,21,0,159,0,109,255,31,0,159,0,125,255,107,0,159,0,130,255,97,0,159,0,131,255,97,0,159,0,132, + 255,97,0,159,0,133,255,97,0,159,0,134,255,97,0,159,0,137,255,144,0,159,0,148,255,144,0,159,0,149,255,144,0,159,0,150,255,144,0,159, + 0,151,255,144,0,159,0,152,255,144,0,159,0,162,254,230,0,159,0,163,254,230,0,159,0,164,254,230,0,159,0,165,254,230,0,159,0,166,254,230, + 0,159,0,167,254,230,0,159,0,170,254,240,0,159,0,171,254,240,0,159,0,172,254,240,0,159,0,173,254,240,0,159,0,180,254,240,0,159,0,181, + 254,240,0,159,0,182,254,240,0,159,0,183,254,240,0,159,0,184,254,240,0,159,0,187,255,21,0,159,0,188,255,21,0,159,0,189,255,21,0,159, + 0,190,255,21,0,159,0,200,255,144,0,159,0,206,255,144,0,159,0,221,254,240,0,159,1,49,255,21,0,159,10,250,255,144,0,159,10,251,255,220, + 0,159,10,252,254,248,0,160,0,17,255,107,0,160,0,29,255,183,0,160,10,250,255,220,0,160,10,252,255,68,0,161,0,16,0,38,0,161,10,250, + 255,144,0,161,10,251,255,144,0,161,10,252,255,173,0,170,0,91,255,220,0,171,0,91,255,220,0,172,0,91,255,220,0,173,0,91,255,220,0,178, + 10,250,255,164,0,178,10,251,255,144,0,178,10,252,255,183,0,179,10,250,255,107,0,179,10,251,255,144,0,179,10,252,255,164,0,180,0,16,0,38, + 0,180,0,17,255,220,0,180,0,91,255,193,0,180,10,250,255,107,0,180,10,251,255,183,0,180,10,252,255,125,0,181,0,16,0,38,0,181,0,17, + 255,220,0,181,0,91,255,193,0,181,10,250,255,107,0,181,10,251,255,183,0,181,10,252,255,125,0,182,0,16,0,38,0,182,0,17,255,220,0,182, + 0,91,255,193,0,182,10,250,255,107,0,182,10,251,255,183,0,182,10,252,255,125,0,183,0,16,0,38,0,183,0,17,255,220,0,183,0,91,255,193, + 0,183,10,250,255,107,0,183,10,251,255,183,0,183,10,252,255,125,0,184,0,16,0,38,0,184,0,17,255,220,0,184,0,91,255,193,0,184,10,250, + 255,107,0,184,10,251,255,183,0,184,10,252,255,125,0,191,0,16,255,220,0,191,0,17,254,220,0,191,0,29,255,107,0,191,0,109,255,220,0,191, + 0,125,255,220,0,191,10,252,254,211,0,193,0,16,255,220,0,193,0,17,254,220,0,193,0,29,255,107,0,193,0,109,255,220,0,193,0,125,255,220, + 0,193,10,252,254,211,0,194,0,16,255,211,0,194,0,17,255,220,0,194,0,29,255,220,0,194,0,36,0,57,0,194,0,38,255,220,0,194,0,42, + 255,220,0,194,0,50,255,220,0,194,0,52,255,220,0,194,0,55,255,97,0,194,0,57,255,125,0,194,0,58,255,144,0,194,0,60,255,97,0,194, + 0,70,255,220,0,194,0,71,255,220,0,194,0,72,255,220,0,194,0,73,255,183,0,194,0,82,255,220,0,194,0,84,255,220,0,194,0,87,255,220, + 0,194,0,89,255,136,0,194,0,90,255,173,0,194,0,92,255,117,0,194,0,109,255,183,0,194,0,130,0,57,0,194,0,131,0,57,0,194,0,132, + 0,57,0,194,0,133,0,57,0,194,0,134,0,57,0,194,0,148,255,220,0,194,0,149,255,220,0,194,0,150,255,220,0,194,0,151,255,220,0,194, + 0,152,255,220,0,194,0,159,255,97,0,194,0,169,255,220,0,194,0,170,255,220,0,194,0,171,255,220,0,194,0,172,255,220,0,194,0,173,255,220, + 0,194,0,180,255,220,0,194,0,181,255,220,0,194,0,182,255,220,0,194,0,183,255,220,0,194,0,184,255,220,0,194,0,191,255,117,0,194,0,193, + 255,117,0,194,0,194,0,57,0,194,0,196,0,57,0,194,0,198,0,57,0,194,0,200,255,220,0,194,0,202,255,220,0,194,0,204,255,220,0,194, + 0,205,255,220,0,194,0,206,255,220,0,194,0,209,255,220,0,194,0,211,255,220,0,194,0,213,255,220,0,194,0,215,255,220,0,194,0,217,255,220, + 0,194,0,219,255,220,0,194,0,221,255,220,0,194,0,222,255,220,0,194,0,226,255,220,0,194,1,14,255,220,0,194,1,15,255,220,0,194,1,16, + 255,220,0,194,1,17,255,220,0,194,1,18,255,220,0,194,1,19,255,220,0,194,1,36,255,97,0,194,1,37,255,220,0,194,1,38,255,97,0,194, + 1,39,255,220,0,194,1,54,255,144,0,194,1,55,255,173,0,194,1,56,255,97,0,194,1,57,255,117,0,194,1,58,255,97,0,194,1,240,255,220, + 0,194,1,241,255,220,0,194,9,121,255,144,0,194,9,123,255,144,0,194,9,124,255,173,0,194,9,125,255,144,0,194,9,126,255,173,0,194,9,235, + 255,97,0,194,9,236,255,117,0,194,10,250,254,248,0,194,10,251,255,2,0,194,10,252,0,47,0,196,0,16,255,211,0,196,0,17,255,220,0,196, + 0,29,255,220,0,196,0,36,0,57,0,196,0,38,255,220,0,196,0,42,255,220,0,196,0,50,255,220,0,196,0,52,255,220,0,196,0,55,255,97, + 0,196,0,57,255,125,0,196,0,58,255,144,0,196,0,60,255,97,0,196,0,70,255,220,0,196,0,71,255,220,0,196,0,72,255,220,0,196,0,73, + 255,183,0,196,0,82,255,220,0,196,0,84,255,220,0,196,0,87,255,220,0,196,0,89,255,136,0,196,0,90,255,173,0,196,0,92,255,117,0,196, + 0,109,255,183,0,196,0,130,0,57,0,196,0,131,0,57,0,196,0,132,0,57,0,196,0,133,0,57,0,196,0,134,0,57,0,196,0,148,255,220, + 0,196,0,149,255,220,0,196,0,150,255,220,0,196,0,151,255,220,0,196,0,152,255,220,0,196,0,159,255,97,0,196,0,169,255,220,0,196,0,170, + 255,220,0,196,0,171,255,220,0,196,0,172,255,220,0,196,0,173,255,220,0,196,0,180,255,220,0,196,0,181,255,220,0,196,0,182,255,220,0,196, + 0,183,255,220,0,196,0,184,255,220,0,196,0,191,255,117,0,196,0,193,255,117,0,196,0,194,0,57,0,196,0,196,0,57,0,196,0,198,0,57, + 0,196,0,200,255,220,0,196,0,202,255,220,0,196,0,204,255,220,0,196,0,205,255,220,0,196,0,206,255,220,0,196,0,209,255,220,0,196,0,211, + 255,220,0,196,0,213,255,220,0,196,0,215,255,220,0,196,0,217,255,220,0,196,0,219,255,220,0,196,0,221,255,220,0,196,0,222,255,220,0,196, + 0,226,255,220,0,196,1,14,255,220,0,196,1,15,255,220,0,196,1,16,255,220,0,196,1,17,255,220,0,196,1,18,255,220,0,196,1,19,255,220, + 0,196,1,36,255,97,0,196,1,37,255,220,0,196,1,38,255,97,0,196,1,39,255,220,0,196,1,54,255,144,0,196,1,55,255,173,0,196,1,56, + 255,97,0,196,1,57,255,117,0,196,1,58,255,97,0,196,1,240,255,220,0,196,1,241,255,220,0,196,9,121,255,144,0,196,9,123,255,144,0,196, + 9,124,255,173,0,196,9,125,255,144,0,196,9,126,255,173,0,196,9,235,255,97,0,196,9,236,255,117,0,196,10,250,254,248,0,196,10,251,255,2, + 0,196,10,252,0,47,0,198,0,16,255,211,0,198,0,17,255,220,0,198,0,29,255,220,0,198,0,36,0,57,0,198,0,38,255,220,0,198,0,42, + 255,220,0,198,0,50,255,220,0,198,0,52,255,220,0,198,0,55,255,97,0,198,0,57,255,125,0,198,0,58,255,144,0,198,0,60,255,97,0,198, + 0,70,255,220,0,198,0,71,255,220,0,198,0,72,255,220,0,198,0,73,255,183,0,198,0,82,255,220,0,198,0,84,255,220,0,198,0,87,255,220, + 0,198,0,89,255,136,0,198,0,90,255,173,0,198,0,109,255,183,0,198,0,130,0,57,0,198,0,131,0,57,0,198,0,132,0,57,0,198,0,133, + 0,57,0,198,0,134,0,57,0,198,0,148,255,220,0,198,0,149,255,220,0,198,0,150,255,220,0,198,0,151,255,220,0,198,0,152,255,220,0,198, + 0,159,255,97,0,198,0,169,255,220,0,198,0,170,255,220,0,198,0,171,255,220,0,198,0,172,255,220,0,198,0,173,255,220,0,198,0,180,255,220, + 0,198,0,181,255,220,0,198,0,182,255,220,0,198,0,183,255,220,0,198,0,184,255,220,0,198,0,194,0,57,0,198,0,196,0,57,0,198,0,198, + 0,57,0,198,0,200,255,220,0,198,0,202,255,220,0,198,0,204,255,220,0,198,0,205,255,220,0,198,0,206,255,220,0,198,0,209,255,220,0,198, + 0,211,255,220,0,198,0,213,255,220,0,198,0,215,255,220,0,198,0,217,255,220,0,198,0,219,255,220,0,198,0,221,255,220,0,198,0,222,255,220, + 0,198,0,226,255,220,0,198,1,14,255,220,0,198,1,15,255,220,0,198,1,16,255,220,0,198,1,17,255,220,0,198,1,19,255,220,0,198,1,36, + 255,97,0,198,1,37,255,220,0,198,1,38,255,97,0,198,1,39,255,220,0,198,1,54,255,144,0,198,1,55,255,173,0,198,1,56,255,97,0,198, + 1,58,255,97,0,198,1,240,255,220,0,198,1,241,255,220,0,198,9,121,255,144,0,198,9,123,255,144,0,198,9,124,255,173,0,198,9,125,255,144, + 0,198,9,126,255,173,0,198,9,235,255,97,0,198,10,250,254,248,0,198,10,251,255,2,0,198,10,252,0,47,0,200,0,60,255,220,0,200,0,109, + 255,220,0,200,0,125,255,220,0,200,0,159,255,220,0,200,1,58,255,220,0,200,10,251,0,38,0,206,0,60,255,220,0,206,0,109,255,220,0,206, + 0,125,255,220,0,206,0,159,255,220,0,206,1,58,255,220,0,206,10,251,0,38,0,208,0,36,255,220,0,208,0,57,255,220,0,208,0,60,255,144, + 0,208,0,109,255,220,0,208,0,125,255,220,0,208,0,130,255,220,0,208,0,131,255,220,0,208,0,132,255,220,0,208,0,133,255,220,0,208,0,134, + 255,220,0,208,0,159,255,144,0,208,0,194,255,220,0,208,0,196,255,220,0,208,0,198,255,220,0,208,1,56,255,144,0,208,1,58,255,144,0,208, + 1,244,255,144,0,208,9,235,255,144,0,208,10,250,255,211,0,208,10,251,255,201,0,208,10,252,255,68,0,210,0,36,255,220,0,210,0,57,255,220, + 0,210,0,60,255,144,0,210,0,109,255,220,0,210,0,125,255,220,0,210,0,130,255,220,0,210,0,131,255,220,0,210,0,132,255,220,0,210,0,133, + 255,220,0,210,0,134,255,220,0,210,0,159,255,144,0,210,1,58,255,144,0,210,10,250,255,211,0,210,10,251,255,201,0,210,10,252,255,68,0,221, + 0,91,255,220,0,224,0,55,255,183,0,224,0,60,255,154,0,224,0,109,255,220,0,224,0,125,255,220,0,224,0,159,255,154,0,224,1,38,255,183, + 0,224,1,58,255,154,0,224,10,250,255,211,0,224,10,251,255,211,0,224,10,252,255,201,0,251,0,16,255,220,0,251,0,36,0,47,0,251,0,50, + 255,183,0,251,0,55,254,230,0,251,0,56,255,154,0,251,0,57,255,31,0,251,0,58,255,68,0,251,0,60,254,240,0,251,0,72,255,220,0,251, + 0,82,255,220,0,251,0,88,255,220,0,251,0,92,255,68,0,251,0,130,0,47,0,251,0,131,0,47,0,251,0,132,0,47,0,251,0,133,0,47, + 0,251,0,134,0,47,0,251,0,148,255,183,0,251,0,149,255,183,0,251,0,150,255,183,0,251,0,151,255,183,0,251,0,152,255,183,0,251,0,155, + 255,154,0,251,0,156,255,154,0,251,0,157,255,154,0,251,0,158,255,154,0,251,0,159,254,240,0,251,0,170,255,220,0,251,0,171,255,220,0,251, + 0,172,255,220,0,251,0,173,255,220,0,251,0,180,255,220,0,251,0,181,255,220,0,251,0,182,255,220,0,251,0,183,255,220,0,251,0,184,255,220, + 0,251,0,187,255,220,0,251,0,188,255,220,0,251,0,189,255,220,0,251,0,190,255,220,0,251,0,191,255,68,0,251,0,193,255,68,0,251,0,221, + 255,220,0,251,1,38,254,230,0,251,1,48,255,154,0,251,1,49,255,220,0,251,1,58,254,240,0,251,10,250,254,97,0,251,10,251,253,230,0,255, + 0,16,255,220,0,255,0,36,0,47,0,255,0,50,255,183,0,255,0,55,254,230,0,255,0,56,255,154,0,255,0,57,255,31,0,255,0,58,255,68, + 0,255,0,60,254,240,0,255,0,72,255,220,0,255,0,82,255,220,0,255,0,88,255,220,0,255,0,92,255,68,0,255,0,130,0,47,0,255,0,131, + 0,47,0,255,0,132,0,47,0,255,0,133,0,47,0,255,0,134,0,47,0,255,0,148,255,183,0,255,0,149,255,183,0,255,0,150,255,183,0,255, + 0,151,255,183,0,255,0,152,255,183,0,255,0,155,255,154,0,255,0,156,255,154,0,255,0,157,255,154,0,255,0,158,255,154,0,255,0,159,254,240, + 0,255,0,170,255,220,0,255,0,171,255,220,0,255,0,172,255,220,0,255,0,173,255,220,0,255,0,180,255,220,0,255,0,181,255,220,0,255,0,182, + 255,220,0,255,0,183,255,220,0,255,0,184,255,220,0,255,0,187,255,220,0,255,0,188,255,220,0,255,0,189,255,220,0,255,0,190,255,220,0,255, + 0,191,255,68,0,255,0,193,255,68,0,255,0,221,255,220,0,255,1,38,254,230,0,255,1,48,255,154,0,255,1,49,255,220,0,255,1,58,254,240, + 0,255,10,250,254,97,0,255,10,251,253,230,1,2,0,79,255,63,1,10,10,250,255,107,1,10,10,251,255,144,1,10,10,252,255,164,1,22,0,16, + 255,173,1,22,0,17,255,183,1,22,0,29,255,193,1,22,0,36,255,173,1,22,0,38,255,154,1,22,0,55,255,107,1,22,0,57,255,144,1,22, + 0,58,255,173,1,22,0,60,255,125,1,22,0,68,255,211,1,22,0,72,255,164,1,22,0,82,255,164,1,22,0,88,255,164,1,22,0,92,255,144, + 1,22,0,109,255,144,1,22,0,125,255,220,1,22,0,130,255,173,1,22,0,131,255,173,1,22,0,132,255,173,1,22,0,133,255,173,1,22,0,134, + 255,173,1,22,0,137,255,154,1,22,0,159,255,125,1,22,0,162,255,211,1,22,0,163,255,211,1,22,0,164,255,211,1,22,0,165,255,211,1,22, + 0,166,255,211,1,22,0,167,255,211,1,22,0,170,255,164,1,22,0,171,255,164,1,22,0,172,255,164,1,22,0,173,255,164,1,22,0,180,255,164, + 1,22,0,181,255,164,1,22,0,182,255,164,1,22,0,183,255,164,1,22,0,184,255,164,1,22,0,187,255,164,1,22,0,188,255,164,1,22,0,189, + 255,164,1,22,0,190,255,164,1,22,0,191,255,144,1,22,0,193,255,144,1,22,0,200,255,154,1,22,0,206,255,154,1,22,0,221,255,164,1,22, + 1,38,255,107,1,22,1,49,255,164,1,22,1,58,255,125,1,22,10,250,255,107,1,22,10,251,255,125,1,22,10,252,255,220,1,23,0,16,255,125, + 1,23,0,17,255,68,1,23,0,29,255,220,1,23,0,70,255,211,1,23,0,71,255,220,1,23,0,72,255,211,1,23,0,74,255,220,1,23,0,75, + 255,220,1,23,0,80,255,220,1,23,0,81,255,220,1,23,0,82,255,211,1,23,0,84,255,220,1,23,0,85,255,220,1,23,0,91,255,201,1,23, + 0,109,255,183,1,23,0,169,255,211,1,23,0,170,255,211,1,23,0,171,255,211,1,23,0,172,255,211,1,23,0,173,255,211,1,23,0,179,255,220, + 1,23,0,180,255,211,1,23,0,181,255,211,1,23,0,182,255,211,1,23,0,183,255,211,1,23,0,184,255,211,1,23,0,201,255,211,1,23,0,207, + 255,211,1,23,0,209,0,72,1,23,0,221,255,211,1,23,0,225,255,220,1,23,1,10,255,220,1,23,1,23,255,220,1,23,1,27,255,220,1,23, + 10,251,0,86,1,23,10,252,254,201,1,26,0,16,255,173,1,26,0,17,255,183,1,26,0,29,255,193,1,26,0,36,255,173,1,26,0,38,255,154, + 1,26,0,55,255,107,1,26,0,57,255,144,1,26,0,58,255,173,1,26,0,60,255,125,1,26,0,68,255,211,1,26,0,72,255,164,1,26,0,82, + 255,164,1,26,0,88,255,164,1,26,0,92,255,144,1,26,0,109,255,144,1,26,0,125,255,220,1,26,0,130,255,173,1,26,0,131,255,173,1,26, + 0,132,255,173,1,26,0,133,255,173,1,26,0,134,255,173,1,26,0,137,255,154,1,26,0,159,255,125,1,26,0,162,255,211,1,26,0,163,255,211, + 1,26,0,164,255,211,1,26,0,165,255,211,1,26,0,166,255,211,1,26,0,167,255,211,1,26,0,170,255,164,1,26,0,171,255,164,1,26,0,172, + 255,164,1,26,0,173,255,164,1,26,0,180,255,164,1,26,0,181,255,164,1,26,0,182,255,164,1,26,0,183,255,164,1,26,0,184,255,164,1,26, + 0,187,255,164,1,26,0,188,255,164,1,26,0,189,255,164,1,26,0,190,255,164,1,26,0,191,255,144,1,26,0,193,255,144,1,26,0,200,255,154, + 1,26,0,206,255,154,1,26,0,221,255,164,1,26,1,38,255,107,1,26,1,49,255,164,1,26,1,58,255,125,1,26,10,250,255,107,1,26,10,251, + 255,125,1,26,10,252,255,220,1,27,0,16,255,125,1,27,0,17,255,68,1,27,0,29,255,220,1,27,0,70,255,211,1,27,0,71,255,220,1,27, + 0,72,255,211,1,27,0,74,255,220,1,27,0,75,255,220,1,27,0,80,255,220,1,27,0,81,255,220,1,27,0,82,255,211,1,27,0,84,255,220, + 1,27,0,85,255,220,1,27,0,91,255,201,1,27,0,109,255,183,1,27,0,169,255,211,1,27,0,170,255,211,1,27,0,171,255,211,1,27,0,172, + 255,211,1,27,0,173,255,211,1,27,0,179,255,220,1,27,0,180,255,211,1,27,0,181,255,211,1,27,0,182,255,211,1,27,0,183,255,211,1,27, + 0,184,255,211,1,27,0,201,255,211,1,27,0,207,255,211,1,27,0,209,255,220,1,27,0,221,255,211,1,27,0,225,255,220,1,27,1,10,255,220, + 1,27,1,23,255,220,1,27,1,27,255,220,1,27,10,251,0,86,1,27,10,252,254,201,1,32,0,36,0,38,1,32,0,130,0,38,1,32,0,131, + 0,38,1,32,0,132,0,38,1,32,0,133,0,38,1,32,0,134,0,38,1,34,0,36,0,38,1,34,0,130,0,38,1,34,0,131,0,38,1,34, + 0,132,0,38,1,34,0,133,0,38,1,34,0,134,0,38,1,38,0,16,255,68,1,38,0,17,255,13,1,38,0,29,255,31,1,38,0,36,255,97, + 1,38,0,38,255,136,1,38,0,55,255,220,1,38,0,68,254,173,1,38,0,70,254,164,1,38,0,72,254,164,1,38,0,76,255,193,1,38,0,82, + 254,164,1,38,0,85,254,211,1,38,0,86,254,173,1,38,0,88,254,201,1,38,0,90,254,173,1,38,0,92,254,193,1,38,0,109,255,68,1,38, + 0,125,255,144,1,38,0,130,255,97,1,38,0,131,255,97,1,38,0,132,255,97,1,38,0,133,255,97,1,38,0,134,255,97,1,38,0,137,255,136, + 1,38,0,162,254,173,1,38,0,163,254,173,1,38,0,164,254,173,1,38,0,165,254,173,1,38,0,166,254,173,1,38,0,167,254,173,1,38,0,169, + 254,164,1,38,0,170,254,164,1,38,0,171,254,164,1,38,0,172,254,164,1,38,0,173,254,164,1,38,0,180,254,164,1,38,0,181,254,164,1,38, + 0,182,254,164,1,38,0,183,254,164,1,38,0,184,254,164,1,38,0,187,254,201,1,38,0,188,254,201,1,38,0,189,254,201,1,38,0,190,254,201, + 1,38,0,191,254,193,1,38,0,193,254,193,1,38,0,200,255,136,1,38,0,201,254,164,1,38,0,206,255,136,1,38,0,207,254,164,1,38,0,221, + 254,164,1,38,1,23,254,211,1,38,1,27,254,211,1,38,1,33,254,173,1,38,1,35,254,173,1,38,1,38,255,220,1,38,1,49,254,201,1,38, + 10,251,255,211,1,38,10,252,254,248,1,48,0,61,255,220,1,48,1,63,255,220,1,58,0,16,255,13,1,58,0,17,254,97,1,58,0,29,254,240, + 1,58,0,36,255,97,1,58,0,38,255,144,1,58,0,50,255,144,1,58,0,68,254,230,1,58,0,72,254,240,1,58,0,76,255,183,1,58,0,82, + 254,240,1,58,0,88,255,21,1,58,0,109,255,31,1,58,0,125,255,107,1,58,0,130,255,97,1,58,0,131,255,97,1,58,0,132,255,97,1,58, + 0,133,255,97,1,58,0,134,255,97,1,58,0,137,255,144,1,58,0,148,255,144,1,58,0,149,255,144,1,58,0,150,255,144,1,58,0,151,255,144, + 1,58,0,152,255,144,1,58,0,162,254,230,1,58,0,163,254,230,1,58,0,164,254,230,1,58,0,165,254,230,1,58,0,166,254,230,1,58,0,167, + 254,230,1,58,0,170,254,240,1,58,0,171,254,240,1,58,0,172,254,240,1,58,0,173,254,240,1,58,0,180,254,240,1,58,0,181,254,240,1,58, + 0,182,254,240,1,58,0,183,254,240,1,58,0,184,254,240,1,58,0,187,255,21,1,58,0,188,255,21,1,58,0,189,255,21,1,58,0,190,255,21, + 1,58,0,200,255,144,1,58,0,206,255,144,1,58,0,221,254,240,1,58,1,49,255,21,1,58,10,250,255,144,1,58,10,251,255,220,1,58,10,252, + 254,248,1,63,0,16,255,220,1,63,10,250,255,220,1,63,10,251,255,220,1,63,10,252,255,220,10,238,0,36,255,211,10,238,0,37,255,183,10,238, + 0,42,0,75,10,238,0,45,0,114,10,238,0,50,0,57,10,238,0,52,0,75,10,238,0,55,255,68,10,238,0,57,255,136,10,238,0,58,255,173, + 10,238,0,59,255,154,10,238,0,60,255,13,10,238,0,82,0,38,10,238,0,89,255,201,10,238,0,92,255,220,10,238,0,130,255,211,10,238,0,131, + 255,211,10,238,0,132,255,211,10,238,0,133,255,211,10,238,0,134,255,211,10,238,0,148,0,57,10,238,0,149,0,57,10,238,0,150,0,57,10,238, + 0,151,0,57,10,238,0,152,0,57,10,238,0,159,255,13,10,238,0,180,0,38,10,238,0,181,0,38,10,238,0,182,0,38,10,238,0,183,0,38, + 10,238,0,184,0,38,10,238,0,191,255,220,10,238,0,193,255,220,10,238,0,224,0,75,10,238,1,38,255,68,10,238,1,58,255,13,10,250,0,36, + 254,248,10,250,0,37,255,193,10,250,0,38,255,183,10,250,0,39,255,193,10,250,0,41,255,193,10,250,0,42,255,183,10,250,0,43,255,193,10,250, + 0,45,255,193,10,250,0,46,255,193,10,250,0,47,255,193,10,250,0,50,255,183,10,250,0,51,255,193,10,250,0,52,255,183,10,250,0,53,255,193, + 10,250,0,59,255,136,10,250,0,61,255,220,10,250,0,73,255,183,10,250,0,81,255,144,10,250,0,82,255,107,10,250,0,85,255,144,10,250,0,89, + 255,183,10,250,0,90,255,183,10,250,0,92,255,183,10,250,0,130,254,248,10,250,0,131,254,248,10,250,0,132,254,248,10,250,0,133,254,248,10,250, + 0,134,254,248,10,250,0,136,254,125,10,250,0,137,255,183,10,250,0,148,255,183,10,250,0,149,255,183,10,250,0,150,255,183,10,250,0,151,255,183, + 10,250,0,152,255,183,10,250,0,160,255,193,10,250,0,161,255,193,10,250,0,178,255,183,10,250,0,179,255,144,10,250,0,180,255,107,10,250,0,181, + 255,107,10,250,0,182,255,107,10,250,0,183,255,107,10,250,0,184,255,107,10,250,0,191,255,183,10,250,0,193,255,183,10,250,0,200,255,183,10,250, + 0,206,255,183,10,250,0,208,255,193,10,250,0,224,255,183,10,250,0,251,255,193,10,250,0,255,255,193,10,250,1,10,255,144,10,250,1,22,255,193, + 10,250,1,23,255,144,10,250,1,26,255,193,10,250,1,27,255,144,10,250,1,63,255,220,10,250,19,20,255,193,10,252,0,36,0,38,10,252,0,37, + 255,183,10,252,0,38,255,144,10,252,0,39,255,183,10,252,0,41,255,183,10,252,0,42,255,183,10,252,0,43,255,183,10,252,0,45,0,47,10,252, + 0,46,255,183,10,252,0,47,255,183,10,252,0,50,255,144,10,252,0,51,255,183,10,252,0,52,255,144,10,252,0,53,255,183,10,252,0,55,254,230, + 10,252,0,57,254,136,10,252,0,58,255,3,10,252,0,59,255,183,10,252,0,60,254,136,10,252,0,73,255,220,10,252,0,81,255,183,10,252,0,82, + 255,183,10,252,0,85,255,183,10,252,0,89,255,21,10,252,0,90,255,60,10,252,0,92,255,144,10,252,0,130,0,38,10,252,0,131,0,38,10,252, + 0,132,0,38,10,252,0,133,0,38,10,252,0,134,0,38,10,252,0,136,0,38,10,252,0,137,255,144,10,252,0,148,255,144,10,252,0,149,255,144, + 10,252,0,150,255,144,10,252,0,151,255,144,10,252,0,152,255,144,10,252,0,159,254,136,10,252,0,160,255,183,10,252,0,161,255,183,10,252,0,178, + 255,183,10,252,0,179,255,183,10,252,0,180,255,183,10,252,0,181,255,183,10,252,0,182,255,183,10,252,0,183,255,183,10,252,0,184,255,183,10,252, + 0,191,255,144,10,252,0,193,255,144,10,252,0,200,255,144,10,252,0,206,255,144,10,252,0,208,255,183,10,252,0,224,255,183,10,252,0,251,255,183, + 10,252,0,255,255,183,10,252,1,10,255,183,10,252,1,22,255,183,10,252,1,23,255,183,10,252,1,26,255,183,10,252,1,27,255,183,10,252,1,38, + 254,230,10,252,1,58,254,136,10,252,19,20,255,183,18,252,0,16,255,68,18,252,0,17,255,13,18,252,0,29,255,31,18,252,0,36,255,97,18,252, + 0,38,255,136,18,252,0,55,255,220,18,252,0,68,254,173,18,252,0,70,254,164,18,252,0,72,254,164,18,252,0,76,255,193,18,252,0,82,254,164, + 18,252,0,85,254,211,18,252,0,86,254,173,18,252,0,88,254,201,18,252,0,90,254,173,18,252,0,92,254,193,18,252,0,109,255,68,18,252,0,125, + 255,144,18,252,0,130,255,97,18,252,0,131,255,97,18,252,0,132,255,97,18,252,0,133,255,97,18,252,0,134,255,97,18,252,0,137,255,136,18,252, + 0,162,255,17,18,252,0,163,254,173,18,252,0,164,255,17,18,252,0,165,255,17,18,252,0,166,255,17,18,252,0,167,255,17,18,252,0,169,254,164, + 18,252,0,170,254,224,18,252,0,171,254,164,18,252,0,172,254,224,18,252,0,173,254,224,18,252,0,180,254,244,18,252,0,181,254,164,18,252,0,182, + 254,244,18,252,0,183,254,244,18,252,0,184,254,244,18,252,0,187,254,231,18,252,0,188,254,201,18,252,0,189,254,231,18,252,0,190,254,231,18,252, + 0,191,254,193,18,252,0,193,254,193,18,252,0,200,255,136,18,252,0,201,254,164,18,252,0,206,255,136,18,252,0,207,254,164,18,252,0,221,254,164, + 18,252,1,23,254,211,18,252,1,27,254,211,18,252,1,33,254,173,18,252,1,35,254,173,18,252,1,38,255,220,18,252,1,49,254,201,18,252,10,251, + 255,211,18,252,10,252,254,248,19,20,0,16,255,41,19,20,0,36,255,220,19,20,0,38,255,144,19,20,0,50,255,144,19,20,0,55,255,97,19,20, + 0,56,255,201,19,20,0,58,255,183,19,20,0,60,255,183,19,20,0,68,255,220,19,20,0,72,255,154,19,20,0,82,255,154,19,20,0,88,255,154, + 19,20,0,92,255,107,19,20,0,109,255,125,19,20,0,130,255,220,19,20,0,131,255,220,19,20,0,132,255,220,19,20,0,133,255,220,19,20,0,134, + 255,220,19,20,0,137,255,144,19,20,0,148,255,144,19,20,0,149,255,144,19,20,0,150,255,144,19,20,0,151,255,144,19,20,0,152,255,144,19,20, + 0,155,255,201,19,20,0,156,255,201,19,20,0,157,255,201,19,20,0,158,255,201,19,20,0,159,255,183,19,20,0,162,255,220,19,20,0,163,255,220, + 19,20,0,164,255,220,19,20,0,165,255,220,19,20,0,166,255,220,19,20,0,167,255,220,19,20,0,170,255,154,19,20,0,171,255,154,19,20,0,172, + 255,154,19,20,0,173,255,154,19,20,0,180,255,154,19,20,0,181,255,154,19,20,0,182,255,154,19,20,0,183,255,154,19,20,0,184,255,154,19,20, + 0,187,255,154,19,20,0,188,255,154,19,20,0,189,255,154,19,20,0,190,255,154,19,20,0,191,255,107,19,20,0,193,255,107,19,20,0,200,255,144, + 19,20,0,206,255,144,19,20,0,221,255,154,19,20,1,38,255,97,19,20,1,48,255,201,19,20,1,49,255,154,19,20,1,58,255,183,19,20,10,250, + 255,193,19,20,10,251,255,193,19,21,0,68,255,220,19,21,0,72,255,183,19,21,0,82,255,183,19,21,0,88,255,193,19,21,0,92,255,183,19,21, + 0,162,255,220,19,21,0,163,255,220,19,21,0,164,255,220,19,21,0,165,255,220,19,21,0,166,255,220,19,21,0,167,255,220,19,21,0,170,255,183, + 19,21,0,171,255,183,19,21,0,172,255,183,19,21,0,173,255,183,19,21,0,180,255,183,19,21,0,181,255,183,19,21,0,182,255,183,19,21,0,183, + 255,183,19,21,0,184,255,183,19,21,0,187,255,193,19,21,0,188,255,193,19,21,0,189,255,193,19,21,0,190,255,193,19,21,0,191,255,183,19,21, + 0,193,255,183,19,21,0,221,255,183,19,21,1,49,255,193,19,70,19,94,255,216,19,71,19,94,255,177,19,72,19,94,255,163,19,73,19,94,255,156, + 19,74,19,94,255,216,19,76,19,94,255,216,19,77,19,94,255,177,19,78,19,94,255,163,19,79,19,94,255,177,19,80,19,94,255,216,19,82,19,94, + 255,216,19,83,19,94,255,177,19,84,19,94,255,163,19,85,19,94,255,177,19,86,19,94,255,216,19,88,19,94,255,216,19,89,19,94,255,156,19,90, + 19,94,255,163,19,91,19,94,255,177,19,92,19,94,255,216,0,0,0,0,0,0,0,68,0,0,0,68,0,0,0,68,0,0,0,68,0,0,0,168, + 0,0,1,20,0,0,1,236,0,0,3,68,0,0,4,108,0,0,6,212,0,0,7,40,0,0,7,152,0,0,7,240,0,0,8,140,0,0,8,224, + 0,0,9,24,0,0,9,68,0,0,9,108,0,0,9,184,0,0,10,60,0,0,10,172,0,0,11,172,0,0,12,148,0,0,13,80,0,0,14,16, + 0,0,14,232,0,0,15,116,0,0,16,72,0,0,17,28,0,0,17,92,0,0,17,172,0,0,18,36,0,0,18,104,0,0,18,224,0,0,19,184, + 0,0,21,56,0,0,22,52,0,0,22,228,0,0,23,124,0,0,23,252,0,0,24,92,0,0,24,176,0,0,25,88,0,0,25,180,0,0,25,252, + 0,0,26,108,0,0,27,148,0,0,27,216,0,0,28,212,0,0,29,124,0,0,30,8,0,0,30,136,0,0,31,84,0,0,32,104,0,0,33,96, + 0,0,33,208,0,0,34,84,0,0,35,52,0,0,36,240,0,0,37,148,0,0,38,88,0,0,39,24,0,0,39,120,0,0,39,196,0,0,40,24, + 0,0,40,92,0,0,40,136,0,0,40,216,0,0,42,4,0,0,42,156,0,0,43,52,0,0,43,204,0,0,44,160,0,0,45,56,0,0,46,0, + 0,0,46,120,0,0,46,200,0,0,47,68,0,0,48,52,0,0,48,112,0,0,49,52,0,0,49,172,0,0,50,80,0,0,50,240,0,0,51,144, + 0,0,52,0,0,0,53,96,0,0,53,220,0,0,54,96,0,0,55,132,0,0,57,168,0,0,59,44,0,0,60,248,0,0,61,196,0,0,62,160, + 0,0,62,208,0,0,63,188,0,0,64,64,0,0,64,64,0,0,64,208,0,0,65,156,0,0,66,84,0,0,67,108,0,0,68,144,0,0,68,216, + 0,0,70,32,0,0,70,216,0,0,71,252,0,0,72,216,0,0,73,164,0,0,73,220,0,0,74,8,0,0,75,84,0,0,75,160,0,0,76,24, + 0,0,76,136,0,0,77,40,0,0,77,228,0,0,78,52,0,0,78,232,0,0,79,68,0,0,79,112,0,0,79,208,0,0,80,40,0,0,80,176, + 0,0,81,128,0,0,81,160,0,0,81,192,0,0,81,224,0,0,82,216,0,0,82,240,0,0,83,8,0,0,83,52,0,0,83,100,0,0,83,148, + 0,0,84,212,0,0,85,172,0,0,85,196,0,0,85,220,0,0,85,244,0,0,86,24,0,0,86,60,0,0,86,84,0,0,86,108,0,0,86,144, + 0,0,86,180,0,0,87,128,0,0,87,176,0,0,87,200,0,0,87,224,0,0,88,12,0,0,88,64,0,0,88,112,0,0,89,56,0,0,90,112, + 0,0,90,136,0,0,90,160,0,0,90,208,0,0,91,8,0,0,91,32,0,0,91,168,0,0,92,208,0,0,92,244,0,0,93,24,0,0,93,56, + 0,0,93,100,0,0,93,156,0,0,93,220,0,0,95,152,0,0,95,176,0,0,95,200,0,0,95,224,0,0,96,4,0,0,96,40,0,0,96,64, + 0,0,96,88,0,0,96,124,0,0,96,160,0,0,98,80,0,0,98,104,0,0,98,128,0,0,98,152,0,0,98,184,0,0,98,228,0,0,99,16, + 0,0,99,108,0,0,100,224,0,0,100,248,0,0,101,16,0,0,101,48,0,0,101,96,0,0,101,120,0,0,102,24,0,0,102,72,0,0,102,116, + 0,0,102,156,0,0,102,200,0,0,102,232,0,0,103,0,0,0,103,24,0,0,103,48,0,0,103,72,0,0,103,108,0,0,103,132,0,0,103,156, + 0,0,103,180,0,0,103,216,0,0,103,240,0,0,104,8,0,0,104,48,0,0,104,64,0,0,104,252,0,0,105,20,0,0,105,56,0,0,105,92, + 0,0,105,128,0,0,105,152,0,0,105,176,0,0,105,200,0,0,105,224,0,0,106,4,0,0,106,48,0,0,106,84,0,0,106,120,0,0,106,144, + 0,0,106,168,0,0,106,204,0,0,106,228,0,0,106,252,0,0,107,20,0,0,107,68,0,0,107,136,0,0,108,16,0,0,108,164,0,0,108,200, + 0,0,108,236,0,0,109,16,0,0,109,52,0,0,109,88,0,0,109,124,0,0,109,148,0,0,109,172,0,0,109,220,0,0,110,40,0,0,110,76, + 0,0,110,112,0,0,110,148,0,0,110,184,0,0,110,208,0,0,110,232,0,0,111,216,0,0,111,240,0,0,112,40,0,0,112,64,0,0,112,100, + 0,0,112,124,0,0,112,160,0,0,112,184,0,0,112,236,0,0,113,104,0,0,113,248,0,0,114,28,0,0,114,64,0,0,114,88,0,0,114,112, + 0,0,114,160,0,0,114,204,0,0,114,228,0,0,115,124,0,0,116,24,0,0,116,68,0,0,116,100,0,0,116,144,0,0,116,176,0,0,116,200, + 0,0,116,224,0,0,117,128,0,0,118,168,0,0,118,192,0,0,118,216,0,0,118,240,0,0,119,8,0,0,119,44,0,0,119,84,0,0,119,108, + 0,0,119,132,0,0,119,172,0,0,119,208,0,0,119,232,0,0,120,0,0,0,120,40,0,0,120,80,0,0,120,104,0,0,120,128,0,0,120,172, + 0,0,120,208,0,0,121,84,0,0,121,240,0,0,122,28,0,0,122,64,0,0,122,112,0,0,122,148,0,0,122,192,0,0,122,228,0,0,122,252, + 0,0,123,32,0,0,123,56,0,0,123,80,0,0,123,104,0,0,123,128,0,0,123,164,0,0,123,200,0,0,123,236,0,0,124,12,0,0,124,48, + 0,0,124,72,0,0,124,96,0,0,124,120,0,0,124,160,0,0,124,184,0,0,124,224,0,0,125,56,0,0,126,4,0,0,126,204,0,0,126,220, + 0,0,127,144,0,0,128,28,0,0,128,196,0,0,129,84,0,0,130,20,0,0,130,208,0,0,130,224,0,0,131,116,0,0,131,240,0,0,132,152, + 0,0,133,112,0,0,133,204,0,0,134,124,0,0,135,52,0,0,135,180,0,0,136,108,0,0,137,56,0,0,138,76,0,0,139,28,0,0,139,120, + 0,0,139,232,0,0,140,164,0,0,141,184,0,0,142,24,0,0,143,0,0,0,143,192,0,0,144,144,0,0,144,160,0,0,145,68,0,0,145,92, + 0,0,145,116,0,0,146,28,0,0,146,200,0,0,147,96,0,0,148,32,0,0,148,220,0,0,149,176,0,0,150,248,0,0,151,8,0,0,151,164, + 0,0,152,60,0,0,152,204,0,0,153,104,0,0,153,244,0,0,154,12,0,0,154,36,0,0,154,208,0,0,155,92,0,0,156,24,0,0,157,232, + 0,0,158,240,0,0,159,252,0,0,160,220,0,0,161,172,0,0,162,188,0,0,163,40,0,0,163,156,0,0,164,48,0,0,164,188,0,0,165,48, + 0,0,165,196,0,0,166,4,0,0,166,28,0,0,166,156,0,0,166,172,0,0,166,196,0,0,166,220,0,0,166,244,0,0,167,12,0,0,167,36, + 0,0,167,60,0,0,167,84,0,0,167,108,0,0,167,132,0,0,167,164,0,0,167,196,0,0,167,236,0,0,168,20,0,0,168,44,0,0,168,76, + 0,0,168,108,0,0,168,144,0,0,168,168,0,0,168,192,0,0,168,216,0,0,168,240,0,0,169,8,0,0,169,32,0,0,169,56,0,0,169,80, + 0,0,169,96,0,0,169,120,0,0,169,144,0,0,169,168,0,0,169,192,0,0,169,216,0,0,169,240,0,0,170,196,0,0,171,184,0,0,171,228, + 0,0,171,252,0,0,172,20,0,0,172,88,0,0,172,112,0,0,172,136,0,0,172,160,0,0,172,184,0,0,172,208,0,0,172,232,0,0,173,16, + 0,0,173,40,0,0,173,64,0,0,173,88,0,0,173,112,0,0,173,136,0,0,174,32,0,0,174,184,0,0,174,208,0,0,174,232,0,0,175,0, + 0,0,175,24,0,0,175,48,0,0,175,72,0,0,175,96,0,0,175,120,0,0,175,144,0,0,175,168,0,0,175,192,0,0,175,216,0,0,175,240, + 0,0,176,8,0,0,176,32,0,0,176,56,0,0,176,80,0,0,176,104,0,0,176,128,0,0,176,152,0,0,176,176,0,0,176,200,0,0,176,224, + 0,0,176,248,0,0,177,16,0,0,177,40,0,0,177,64,0,0,177,88,0,0,177,112,0,0,177,136,0,0,177,160,0,0,177,184,0,0,177,208, + 0,0,177,232,0,0,178,0,0,0,178,24,0,0,178,164,0,0,179,56,0,0,179,80,0,0,179,148,0,0,180,8,0,0,180,172,0,0,181,184, + 0,0,182,156,0,0,183,136,0,0,184,128,0,0,184,152,0,0,184,176,0,0,184,200,0,0,184,224,0,0,184,248,0,0,185,16,0,0,185,40, + 0,0,185,64,0,0,185,88,0,0,185,112,0,0,185,136,0,0,185,160,0,0,185,184,0,0,185,208,0,0,186,36,0,0,186,168,0,0,187,16, + 0,0,187,116,0,0,188,84,0,0,189,56,0,0,189,168,0,0,190,64,0,0,190,208,0,0,191,60,0,0,191,144,0,0,192,72,0,0,192,160, + 0,0,193,36,0,0,193,172,0,0,194,136,0,0,195,72,0,0,195,88,0,0,195,192,0,0,196,108,0,0,197,8,0,0,197,164,0,0,198,100, + 0,0,199,32,0,0,200,72,0,0,200,212,0,0,201,36,0,0,201,132,0,0,202,168,0,0,203,64,0,0,203,216,0,0,204,144,0,0,205,24, + 0,0,205,248,0,0,206,184,0,0,207,104,0,0,208,76,0,0,208,240,0,0,210,16,0,0,210,32,0,0,210,48,0,0,211,76,0,0,212,24, + 0,0,212,160,0,0,213,132,0,0,214,60,0,0,214,216,0,0,215,204,0,0,216,192,0,0,217,60,0,0,217,212,0,0,218,128,0,0,218,244, + 0,0,219,4,0,0,219,88,0,0,220,4,0,0,220,140,0,0,220,228,0,0,222,12,0,0,222,220,0,0,223,176,0,0,224,160,0,0,225,72, + 0,0,225,220,0,0,226,132,0,0,227,24,0,0,227,196,0,0,228,116,0,0,228,132,0,0,228,236,0,0,229,84,0,0,229,224,0,0,230,84, + 0,0,230,224,0,0,231,60,0,0,231,152,0,0,232,172,0,0,233,80,0,0,234,92,0,0,234,208,0,0,235,124,0,0,235,220,0,0,236,112, + 0,0,236,228,0,0,237,100,0,0,238,8,0,0,238,192,0,0,239,80,0,0,239,224,0,0,242,8,0,0,242,148,0,0,242,252,0,0,243,236, + 0,0,245,12,0,0,246,32,0,0,246,176,0,0,247,68,0,0,247,216,0,0,248,112,0,0,249,12,0,0,249,152,0,0,249,168,0,0,250,120, + 0,0,251,56,0,0,251,72,0,0,251,216,0,0,252,16,0,0,252,76,0,0,253,4,0,0,253,192,0,0,254,124,0,0,255,12,0,0,255,212, + 0,1,0,144,0,1,1,52,0,1,1,192,0,1,2,144,0,1,3,36,0,1,3,156,0,1,4,104,0,1,4,204,0,1,5,60,0,1,5,192, + 0,1,6,92,0,1,6,208,0,1,7,96,0,1,7,192,0,1,8,32,0,1,8,120,0,1,8,244,0,1,9,96,0,1,9,152,0,1,9,220, + 0,1,9,236,0,1,10,4,0,1,10,20,0,1,10,36,0,1,10,92,0,1,10,196,0,1,11,44,0,1,11,180,0,1,12,64,0,1,12,104, + 0,1,12,144,0,1,12,244,0,1,13,104,0,1,13,196,0,1,14,32,0,1,14,80,0,1,14,96,0,1,14,124,0,1,14,156,0,1,14,204, + 0,1,14,224,0,1,15,0,0,1,15,28,0,1,15,136,0,1,15,216,0,1,15,236,0,1,16,0,0,1,16,36,0,1,16,72,0,1,16,116, + 0,1,16,144,0,1,17,28,0,1,17,132,0,1,17,240,0,1,18,80,0,1,19,16,0,1,19,124,0,1,19,180,0,1,19,232,0,1,20,52, + 0,1,20,92,0,1,20,244,0,1,21,44,0,1,21,60,0,1,21,112,0,1,21,188,0,1,21,252,0,1,22,72,0,1,22,124,0,1,22,144, + 0,1,22,168,0,1,22,184,0,1,22,204,0,1,23,152,0,1,23,244,0,1,24,76,0,1,24,180,0,1,24,200,0,1,24,220,0,1,24,240, + 0,1,25,4,0,1,25,72,0,1,25,188,0,1,26,48,0,1,26,68,0,1,26,88,0,1,26,192,0,1,26,236,0,1,27,8,0,1,27,120, + 0,1,27,148,0,1,27,224,0,1,28,8,0,1,28,48,0,1,28,84,0,1,28,112,0,1,28,132,0,1,28,152,0,1,28,188,0,1,28,220, + 0,1,28,252,0,1,29,112,0,1,29,192,0,1,29,228,0,1,30,8,0,1,30,52,0,1,30,80,0,1,30,128,0,1,30,176,0,1,30,200, + 0,1,30,220,0,1,31,72,0,1,31,108,0,1,31,128,0,1,31,148,0,1,31,188,0,1,31,224,0,1,32,40,0,1,32,100,0,1,32,160, + 0,1,32,180,0,1,32,232,0,1,32,252,0,1,33,16,0,1,33,36,0,1,33,56,0,1,33,148,0,1,33,176,0,1,33,204,0,1,33,236, + 0,1,34,12,0,1,34,88,0,1,34,124,0,1,34,164,0,1,34,236,0,1,35,32,0,1,35,128,0,1,35,156,0,1,35,176,0,1,35,196, + 0,1,35,216,0,1,35,232,0,1,35,252,0,1,36,16,0,1,36,52,0,1,36,92,0,1,36,132,0,1,36,164,0,1,37,32,0,1,37,148, + 0,1,37,172,0,1,37,228,0,1,38,12,0,1,38,12,0,1,38,76,0,1,38,100,0,1,38,120,0,1,38,184,0,1,38,204,0,1,39,48, + 0,1,39,68,0,1,39,88,0,1,39,116,0,1,39,144,0,1,40,4,0,1,40,24,0,1,40,64,0,1,40,80,0,1,40,96,0,1,40,144, + 0,1,40,192,0,1,40,240,0,1,41,32,0,1,41,48,0,1,41,64,0,1,41,116,0,1,41,132,0,1,41,156,0,1,41,180,0,1,41,196, + 0,1,42,20,0,1,42,68,0,1,42,92,0,1,42,108,0,1,42,136,0,1,42,164,0,1,42,192,0,1,42,216,0,1,42,244,0,1,43,12, + 0,1,43,36,0,1,43,52,0,1,43,68,0,1,43,124,0,1,43,232,0,1,43,248,0,1,44,8,0,1,44,24,0,1,44,200,0,1,44,216, + 0,1,44,232,0,1,45,76,0,1,45,92,0,1,45,108,0,1,45,204,0,1,45,220,0,1,45,236,0,1,45,252,0,1,46,120,0,1,46,136, + 0,1,46,152,0,1,47,88,0,1,47,104,0,1,47,252,0,1,48,172,0,1,48,208,0,1,48,244,0,1,49,12,0,1,49,36,0,1,49,60, + 0,1,49,84,0,1,49,108,0,1,50,188,0,1,51,88,0,1,51,216,0,1,52,188,0,1,53,140,0,1,54,48,0,1,54,172,0,1,55,116, + 0,1,55,196,0,1,56,68,0,1,56,200,0,1,56,216,0,1,57,104,0,1,58,36,0,1,58,52,0,1,58,176,0,1,59,68,0,1,59,240, + 0,1,60,132,0,1,60,228,0,1,61,112,0,1,62,48,0,1,63,60,0,1,63,208,0,1,64,100,0,1,64,124,0,1,64,148,0,1,64,172, + 0,1,64,196,0,1,64,220,0,1,65,28,0,1,65,236,0,1,66,148,0,1,67,76,0,1,67,104,0,1,67,128,0,1,68,72,0,1,68,248, + 0,1,69,164,0,1,70,92,0,1,71,8,0,1,71,172,0,1,72,72,0,1,72,88,0,1,73,8,0,1,73,100,0,1,73,212,0,1,74,76, + 0,1,74,168,0,1,75,192,0,1,76,152,0,1,77,44,0,1,77,184,0,1,78,108,0,1,79,84,0,1,79,204,0,1,80,60,0,1,80,240, + 0,1,81,160,0,1,82,52,0,1,82,204,0,1,83,60,0,1,83,168,0,1,84,68,0,1,84,252,0,1,85,12,0,1,85,28,0,1,85,44, + 0,1,85,156,0,1,86,8,0,1,86,24,0,1,86,40,0,1,86,56,0,1,87,8,0,1,87,148,0,1,88,20,0,1,88,36,0,1,88,60, + 0,1,88,84,0,1,88,108,0,1,89,12,0,1,89,152,0,1,89,176,0,1,90,92,0,1,90,108,0,1,90,124,0,1,90,140,0,1,90,156, + 0,1,91,52,0,1,91,196,0,1,92,52,0,1,92,76,0,1,92,100,0,1,92,124,0,1,92,212,0,1,92,228,0,1,93,100,0,1,93,116, + 0,1,93,172,0,1,94,56,0,1,94,72,0,1,95,60,0,1,95,244,0,1,96,160,0,1,96,224,0,1,97,116,0,1,97,212,0,1,97,228, + 0,1,97,244,0,1,98,4,0,1,98,76,0,1,98,92,0,1,98,108,0,1,98,124,0,1,99,0,0,1,99,180,0,1,99,196,0,1,100,28, + 0,1,100,120,0,1,100,212,0,1,101,64,0,1,101,192,0,1,101,216,0,1,102,76,0,1,102,248,0,1,103,184,0,1,104,84,0,1,104,100, + 0,1,105,44,0,1,105,200,0,1,106,0,0,1,106,136,0,1,106,152,0,1,107,136,0,1,108,76,0,1,108,188,0,1,108,252,0,1,109,140, + 0,1,109,236,0,1,110,116,0,1,110,204,0,1,110,220,0,1,111,36,0,1,111,52,0,1,111,68,0,1,111,136,0,1,111,152,0,1,112,128, + 0,1,112,144,0,1,112,232,0,1,113,100,0,1,113,192,0,1,114,44,0,1,114,168,0,1,114,192,0,1,115,48,0,1,115,212,0,1,116,120, + 0,1,117,8,0,1,117,32,0,1,117,192,0,1,118,100,0,1,118,124,0,1,119,32,0,1,119,48,0,1,119,64,0,1,119,80,0,1,119,96, + 0,1,119,252,0,1,120,144,0,1,121,32,0,1,121,56,0,1,121,80,0,1,121,104,0,1,121,192,0,1,122,152,0,1,122,168,0,1,123,72, + 0,1,123,220,0,1,124,108,0,1,124,220,0,1,125,32,0,1,125,96,0,1,125,188,0,1,126,20,0,1,126,252,0,1,127,224,0,1,128,92, + 0,1,128,212,0,1,129,192,0,1,130,156,0,1,131,0,0,1,131,100,0,1,131,116,0,1,131,132,0,1,131,208,0,1,132,32,0,1,132,56, + 0,1,132,80,0,1,132,244,0,1,133,120,0,1,134,112,0,1,135,92,0,1,135,124,0,1,135,156,0,1,135,180,0,1,135,204,0,1,136,104, + 0,1,137,0,0,1,137,76,0,1,137,228,0,1,138,24,0,1,138,64,0,1,138,104,0,1,138,168,0,1,139,236,0,1,140,168,0,1,140,192, + 0,1,140,216,0,1,141,116,0,1,142,20,0,1,142,116,0,1,142,252,0,1,143,60,0,1,143,128,0,1,143,224,0,1,144,64,0,1,144,204, + 0,1,145,92,0,1,145,192,0,1,146,32,0,1,146,56,0,1,146,80,0,1,146,148,0,1,146,216,0,1,147,36,0,1,147,108,0,1,147,184, + 0,1,148,4,0,1,148,164,0,1,149,68,0,1,149,180,0,1,150,32,0,1,150,132,0,1,150,228,0,1,151,124,0,1,152,20,0,1,153,8, + 0,1,153,228,0,1,153,252,0,1,154,20,0,1,154,112,0,1,154,200,0,1,154,216,0,1,155,116,0,1,155,188,0,1,156,0,0,1,156,72, + 0,1,156,144,0,1,157,0,0,1,157,112,0,1,157,228,0,1,158,112,0,1,158,192,0,1,159,12,0,1,159,108,0,1,159,124,0,1,160,88, + 0,1,161,84,0,1,161,240,0,1,162,136,0,1,162,152,0,1,162,176,0,1,162,200,0,1,163,36,0,1,163,136,0,1,163,212,0,1,164,32, + 0,1,164,152,0,1,165,16,0,1,165,76,0,1,165,136,0,1,166,0,0,1,166,144,0,1,166,220,0,1,167,40,0,1,167,56,0,1,167,100, + 0,1,167,132,0,1,167,180,0,1,167,236,0,1,167,252,0,1,168,12,0,1,168,48,0,1,168,84,0,1,168,100,0,1,168,116,0,1,168,140, + 0,1,168,164,0,1,168,188,0,1,168,212,0,1,168,236,0,1,169,4,0,1,169,20,0,1,169,36,0,1,169,60,0,1,169,84,0,1,169,108, + 0,1,169,132,0,1,169,180,0,1,169,224,0,1,169,240,0,1,170,0,0,1,170,24,0,1,170,48,0,1,170,72,0,1,170,96,0,1,170,120, + 0,1,170,144,0,1,170,168,0,1,170,192,0,1,170,216,0,1,170,240,0,1,171,8,0,1,171,32,0,1,171,108,0,1,171,184,0,1,171,208, + 0,1,171,232,0,1,172,116,0,1,173,0,0,1,173,96,0,1,173,192,0,1,174,16,0,1,174,96,0,1,174,216,0,1,175,84,0,1,176,36, + 0,1,176,240,0,1,177,208,0,1,178,180,0,1,179,104,0,1,180,36,0,1,180,200,0,1,181,104,0,1,181,120,0,1,182,12,0,1,182,156, + 0,1,183,36,0,1,183,168,0,1,184,48,0,1,184,64,0,1,184,80,0,1,184,208,0,1,185,80,0,1,185,180,0,1,186,28,0,1,186,124, + 0,1,186,244,0,1,187,96,0,1,187,248,0,1,188,8,0,1,188,24,0,1,188,40,0,1,188,56,0,1,188,140,0,1,188,216,0,1,189,132, + 0,1,190,52,0,1,190,220,0,1,191,136,0,1,191,184,0,1,191,232,0,1,192,96,0,1,192,184,0,1,193,40,0,1,193,124,0,1,193,212, + 0,1,194,76,0,1,194,120,0,1,194,200,0,1,195,108,0,1,195,216,0,1,196,36,0,1,196,72,0,1,196,168,0,1,197,92,0,1,197,168, + 0,1,198,4,0,1,198,196,0,1,199,20,0,1,199,148,0,1,199,232,0,1,200,132,0,1,200,216,0,1,201,96,0,1,201,172,0,1,202,28, + 0,1,202,120,0,1,203,36,0,1,203,124,0,1,203,140,0,1,203,224,0,1,204,140,0,1,204,216,0,1,205,144,0,1,205,184,0,1,206,56, + 0,1,206,192,0,1,206,208,0,1,207,112,0,1,207,168,0,1,207,204,0,1,207,232,0,1,208,48,0,1,208,68,0,1,208,188,0,1,208,220, + 0,1,209,88,0,1,209,164,0,1,210,32,0,1,210,104,0,1,210,188,0,1,211,68,0,1,211,112,0,1,211,180,0,1,212,92,0,1,212,208, + 0,1,213,20,0,1,213,52,0,1,213,176,0,1,214,60,0,1,214,128,0,1,214,144,0,1,215,84,0,1,215,156,0,1,216,76,0,1,216,152, + 0,1,216,196,0,1,217,16,0,1,217,152,0,1,217,168,0,1,218,56,0,1,218,180,0,1,219,112,0,1,219,220,0,1,219,236,0,1,220,56, + 0,1,220,172,0,1,220,244,0,1,221,4,0,1,221,36,0,1,221,156,0,1,222,32,0,1,222,48,0,1,222,216,0,1,223,36,0,1,223,72, + 0,1,223,112,0,1,223,176,0,1,223,224,0,1,224,52,0,1,224,152,0,1,224,192,0,1,224,232,0,1,225,104,0,1,225,148,0,1,225,208, + 0,1,225,248,0,1,226,8,0,1,226,104,0,1,226,148,0,1,226,192,0,1,226,220,0,1,227,8,0,1,227,64,0,1,227,108,0,1,227,148, + 0,1,227,220,0,1,228,44,0,1,228,104,0,1,229,80,0,1,229,204,0,1,230,108,0,1,230,188,0,1,231,56,0,1,231,116,0,1,231,236, + 0,1,232,92,0,1,233,28,0,1,233,92,0,1,233,208,0,1,234,88,0,1,234,188,0,1,235,48,0,1,236,12,0,1,236,76,0,1,236,176, + 0,1,237,96,0,1,237,248,0,1,238,164,0,1,239,108,0,1,240,4,0,1,240,200,0,1,241,84,0,1,241,212,0,1,242,236,0,1,243,148, + 0,1,243,172,0,1,243,196,0,1,243,220,0,1,244,12,0,1,244,84,0,1,244,244,0,1,245,164,0,1,245,228,0,1,246,48,0,1,246,80, + 0,1,246,172,0,1,246,220,0,1,247,76,0,1,247,188,0,1,247,212,0,1,247,236,0,1,248,4,0,1,248,28,0,1,248,52,0,1,248,80, + 0,1,248,104,0,1,248,128,0,1,248,152,0,1,248,176,0,1,248,200,0,1,249,48,0,1,249,72,0,1,249,156,0,1,249,180,0,1,249,248, + 0,1,250,16,0,1,250,208,0,1,250,232,0,1,251,172,0,1,251,196,0,1,252,48,0,1,252,72,0,1,252,200,0,1,252,224,0,1,252,248, + 0,1,253,16,0,1,253,40,0,1,253,228,0,1,254,68,0,1,254,208,0,1,254,232,0,1,255,80,0,1,255,208,0,2,0,124,0,2,0,148, + 0,2,0,192,0,2,1,96,0,2,1,136,0,2,1,164,0,2,2,48,0,2,2,76,0,2,2,200,0,2,3,12,0,2,3,84,0,2,3,104, + 0,2,3,124,0,2,4,8,0,2,4,48,0,2,4,76,0,2,4,124,0,2,4,212,0,2,5,80,0,2,5,212,0,2,6,60,0,2,6,132, + 0,2,6,212,0,2,7,36,0,2,7,156,0,2,7,208,0,2,8,16,0,2,8,52,0,2,8,104,0,2,8,204,0,2,9,124,0,2,9,152, + 0,2,9,236,0,2,10,4,0,2,10,28,0,2,10,52,0,2,10,84,0,2,10,108,0,2,10,132,0,2,10,156,0,2,10,180,0,2,10,204, + 0,2,10,228,0,2,10,252,0,2,11,20,0,2,11,44,0,2,11,68,0,2,11,92,0,2,11,116,0,2,11,140,0,2,11,164,0,2,11,196, + 0,2,11,220,0,2,11,244,0,2,12,12,0,2,12,36,0,2,12,60,0,2,12,84,0,2,12,108,0,2,12,132,0,2,12,156,0,2,12,180, + 0,2,12,212,0,2,12,236,0,2,13,4,0,2,13,28,0,2,13,60,0,2,13,84,0,2,13,116,0,2,13,140,0,2,13,164,0,2,13,188, + 0,2,13,212,0,2,14,144,0,2,14,168,0,2,14,200,0,2,14,224,0,2,14,248,0,2,15,16,0,2,15,40,0,2,15,64,0,2,15,212, + 0,2,16,108,0,2,16,132,0,2,16,156,0,2,16,180,0,2,16,204,0,2,16,228,0,2,16,252,0,2,17,20,0,2,17,44,0,2,17,68, + 0,2,17,92,0,2,17,116,0,2,17,140,0,2,17,164,0,2,17,188,0,2,17,220,0,2,18,60,0,2,18,84,0,2,18,116,0,2,18,140, + 0,2,19,76,0,2,19,108,0,2,19,132,0,2,19,148,0,2,19,172,0,2,19,188,0,2,19,204,0,2,19,220,0,2,19,236,0,2,19,252, + 0,2,20,124,0,2,20,252,0,2,21,96,0,2,21,112,0,2,21,128,0,2,21,144,0,2,22,20,0,2,22,108,0,2,22,184,0,2,23,0, + 0,2,23,76,0,2,23,144,0,2,23,208,0,2,24,32,0,2,24,124,0,2,25,24,0,2,25,72,0,2,25,196,0,2,26,28,0,2,26,68, + 0,2,26,136,0,2,26,208,0,2,27,128,0,2,27,220,0,2,28,108,0,2,28,192,0,2,29,20,0,2,29,140,0,2,30,12,0,2,30,104, + 0,2,31,4,0,2,31,92,0,2,31,220,0,2,32,40,0,2,32,148,0,2,33,48,0,2,33,136,0,2,34,20,0,2,34,88,0,2,34,196, + 0,2,35,68,0,2,35,140,0,2,35,220,0,2,36,64,0,2,36,248,0,2,37,128,0,2,37,172,0,2,37,244,0,2,38,28,0,2,38,120, + 0,2,38,228,0,2,39,44,0,2,39,148,0,2,39,188,0,2,39,252,0,2,40,64,0,2,40,128,0,2,40,196,0,2,41,32,0,2,41,76, + 0,2,41,236,0,2,42,176,0,2,43,128,0,2,44,40,0,2,44,208,0,2,45,132,0,2,46,96,0,2,47,44,0,2,47,184,0,2,48,124, + 0,2,49,64,0,2,50,0,0,2,50,168,0,2,51,68,0,2,51,224,0,2,52,176,0,2,53,96,0,2,54,36,0,2,54,232,0,2,55,92, + 0,2,56,40,0,2,56,232,0,2,57,200,0,2,58,112,0,2,59,56,0,2,59,244,0,2,60,176,0,2,61,144,0,2,62,24,0,2,62,52, + 0,2,62,196,0,2,63,64,0,2,63,88,0,2,63,188,0,2,64,44,0,2,64,164,0,2,65,40,0,2,65,112,0,2,65,236,0,2,66,80, + 0,2,66,200,0,2,67,100,0,2,67,248,0,2,68,16,0,2,68,148,0,2,69,56,0,2,69,172,0,2,70,96,0,2,70,136,0,2,71,16, + 0,2,71,172,0,2,71,248,0,2,72,12,0,2,72,88,0,2,72,188,0,2,73,60,0,2,73,180,0,2,74,64,0,2,74,196,0,2,75,104, + 0,2,76,40,0,2,76,152,0,2,77,156,0,2,78,8,0,2,78,240,0,2,80,0,0,2,80,104,0,2,80,180,0,2,81,4,0,2,81,120, + 0,2,81,192,0,2,82,20,0,2,82,120,0,2,82,220,0,2,83,4,0,2,83,104,0,2,83,216,0,2,84,76,0,2,84,160,0,2,85,40, + 0,2,85,112,0,2,85,192,0,2,86,28,0,2,86,104,0,2,86,192,0,2,87,68,0,2,87,200,0,2,88,8,0,2,88,76,0,2,88,140, + 0,2,88,240,0,2,89,48,0,2,89,152,0,2,90,4,0,2,90,92,0,2,90,204,0,2,91,20,0,2,91,92,0,2,91,172,0,2,91,232, + 0,2,92,88,0,2,92,152,0,2,92,232,0,2,93,132,0,2,93,204,0,2,94,48,0,2,94,172,0,2,95,56,0,2,95,136,0,2,95,244, + 0,2,96,108,0,2,96,216,0,2,97,28,0,2,97,124,0,2,98,28,0,2,98,132,0,2,98,224,0,2,99,72,0,2,99,164,0,2,100,0, + 0,2,100,128,0,2,100,204,0,2,101,56,0,2,101,160,0,2,102,76,0,2,102,164,0,2,103,32,0,2,103,124,0,2,103,252,0,2,104,88, + 0,2,104,200,0,2,105,20,0,2,105,144,0,2,106,8,0,2,106,84,0,2,106,204,0,2,107,64,0,2,107,180,0,2,108,20,0,2,108,120, + 0,2,108,240,0,2,109,112,0,2,109,232,0,2,110,84,0,2,110,176,0,2,111,44,0,2,111,140,0,2,111,188,0,2,112,8,0,2,112,116, + 0,2,112,140,0,2,112,156,0,2,112,180,0,2,113,32,0,2,113,56,0,2,113,80,0,2,113,104,0,2,113,216,0,2,113,240,0,2,114,8, + 0,2,114,32,0,2,114,56,0,2,114,80,0,2,114,104,0,2,114,128,0,2,114,152,0,2,114,176,0,2,114,200,0,2,114,224,0,2,114,248, + 0,2,115,16,0,2,115,40,0,2,115,64,0,2,115,88,0,2,115,112,0,2,115,136,0,2,115,180,0,2,115,212,0,2,115,244,0,2,116,48, + 0,2,116,108,0,2,116,168,0,2,116,236,0,2,117,32,0,2,117,104,0,2,117,128,0,2,117,156,0,2,117,200,0,2,117,236,0,2,118,4, + 0,2,118,28,0,2,118,52,0,2,118,76,0,2,118,92,0,2,118,116,0,2,118,132,0,2,118,156,0,2,119,0,0,2,119,24,0,2,119,48, + 0,2,119,72,0,2,119,172,0,2,119,196,0,2,119,220,0,2,119,244,0,2,120,12,0,2,120,36,0,2,120,60,0,2,120,84,0,2,120,108, + 0,2,120,132,0,2,120,156,0,2,120,180,0,2,120,204,0,2,120,228,0,2,120,252,0,2,121,20,0,2,121,44,0,2,121,144,0,2,121,192, + 0,2,121,208,0,2,121,232,0,2,122,84,0,2,122,108,0,2,122,212,0,2,122,236,0,2,123,4,0,2,123,28,0,2,123,132,0,2,123,156, + 0,2,123,180,0,2,123,204,0,2,123,228,0,2,123,252,0,2,124,20,0,2,124,44,0,2,124,68,0,2,124,92,0,2,124,116,0,2,124,140, + 0,2,124,164,0,2,124,188,0,2,124,212,0,2,124,236,0,2,125,4,0,2,125,96,0,2,125,120,0,2,125,144,0,2,125,168,0,2,125,192, + 0,2,126,60,0,2,126,84,0,2,126,208,0,2,126,232,0,2,127,104,0,2,127,128,0,2,127,152,0,2,128,24,0,2,128,48,0,2,128,72, + 0,2,128,96,0,2,128,120,0,2,128,144,0,2,128,168,0,2,128,192,0,2,128,216,0,2,128,240,0,2,129,8,0,2,129,32,0,2,129,56, + 0,2,129,80,0,2,129,104,0,2,129,128,0,2,129,152,0,2,130,16,0,2,130,100,0,2,130,124,0,2,130,148,0,2,130,172,0,2,130,196, + 0,2,131,24,0,2,131,48,0,2,131,136,0,2,131,160,0,2,131,248,0,2,132,16,0,2,132,40,0,2,132,128,0,2,132,152,0,2,132,176, + 0,2,132,200,0,2,132,224,0,2,132,248,0,2,133,16,0,2,133,40,0,2,133,64,0,2,133,88,0,2,133,112,0,2,133,136,0,2,133,160, + 0,2,133,184,0,2,133,208,0,2,133,232,0,2,134,0,0,2,134,88,0,2,134,144,0,2,134,200,0,2,134,224,0,2,135,24,0,2,135,48, + 0,2,135,104,0,2,135,128,0,2,135,152,0,2,135,168,0,2,135,192,0,2,135,216,0,2,135,240,0,2,136,8,0,2,136,32,0,2,136,56, + 0,2,136,80,0,2,136,104,0,2,136,128,0,2,136,152,0,2,136,176,0,2,136,200,0,2,136,224,0,2,136,248,0,2,137,16,0,2,137,40, + 0,2,137,100,0,2,137,196,0,2,137,228,0,2,138,96,0,2,138,120,0,2,138,248,0,2,139,16,0,2,139,136,0,2,139,160,0,2,139,184, + 0,2,140,48,0,2,140,72,0,2,140,96,0,2,140,120,0,2,140,144,0,2,140,168,0,2,140,192,0,2,140,216,0,2,140,240,0,2,141,64, + 0,2,141,128,0,2,141,212,0,2,142,40,0,2,142,64,0,2,142,148,0,2,142,172,0,2,143,0,0,2,143,24,0,2,143,48,0,2,143,132, + 0,2,143,156,0,2,143,180,0,2,143,204,0,2,143,228,0,2,143,252,0,2,144,20,0,2,144,44,0,2,144,68,0,2,144,92,0,2,144,116, + 0,2,144,140,0,2,144,164,0,2,144,188,0,2,144,212,0,2,144,236,0,2,145,36,0,2,145,96,0,2,145,180,0,2,145,204,0,2,146,36, + 0,2,146,60,0,2,146,144,0,2,146,168,0,2,146,192,0,2,147,24,0,2,147,48,0,2,147,72,0,2,147,96,0,2,147,120,0,2,147,144, + 0,2,147,168,0,2,147,192,0,2,147,216,0,2,147,240,0,2,148,8,0,2,148,32,0,2,148,56,0,2,148,80,0,2,148,104,0,2,148,128, + 0,2,148,152,0,2,148,232,0,2,149,108,0,2,149,160,0,2,149,248,0,2,150,80,0,2,150,104,0,2,150,228,0,2,150,252,0,2,151,124, + 0,2,151,148,0,2,151,172,0,2,151,196,0,2,151,220,0,2,151,244,0,2,152,12,0,2,152,36,0,2,152,60,0,2,152,84,0,2,152,108, + 0,2,152,132,0,2,152,156,0,2,152,180,0,2,152,204,0,2,152,228,0,2,153,88,0,2,153,176,0,2,153,200,0,2,154,36,0,2,154,60, + 0,2,154,152,0,2,154,176,0,2,154,200,0,2,155,36,0,2,155,60,0,2,155,84,0,2,155,108,0,2,155,132,0,2,155,156,0,2,155,180, + 0,2,155,204,0,2,155,228,0,2,155,252,0,2,156,20,0,2,156,44,0,2,156,68,0,2,156,92,0,2,156,116,0,2,156,140,0,2,156,164, + 0,2,157,4,0,2,157,20,0,2,157,80,0,2,157,188,0,2,158,40,0,2,158,140,0,2,158,164,0,2,159,8,0,2,159,32,0,2,159,136, + 0,2,159,160,0,2,160,8,0,2,160,112,0,2,160,136,0,2,160,236,0,2,161,4,0,2,161,28,0,2,161,136,0,2,161,196,0,2,162,120, + 0,2,162,144,0,2,163,68,0,2,163,92,0,2,164,20,0,2,164,44,0,2,164,224,0,2,164,248,0,2,165,16,0,2,165,40,0,2,165,148, + 0,2,166,16,0,2,166,140,0,2,167,8,0,2,167,132,0,2,167,156,0,2,167,180,0,2,168,48,0,2,168,72,0,2,168,200,0,2,168,224, + 0,2,168,248,0,2,169,16,0,2,169,136,0,2,169,236,0,2,170,84,0,2,170,108,0,2,170,208,0,2,170,232,0,2,171,76,0,2,171,100, + 0,2,171,196,0,2,171,212,0,2,171,228,0,2,171,252,0,2,172,20,0,2,172,44,0,2,172,68,0,2,172,92,0,2,172,116,0,2,172,140, + 0,2,172,164,0,2,173,36,0,2,173,164,0,2,174,40,0,2,174,176,0,2,174,200,0,2,174,224,0,2,174,248,0,2,175,16,0,2,175,40, + 0,2,175,64,0,2,175,88,0,2,175,204,0,2,176,120,0,2,176,248,0,2,177,16,0,2,177,140,0,2,177,164,0,2,178,36,0,2,178,60, + 0,2,178,128,0,2,178,188,0,2,178,248,0,2,179,16,0,2,179,76,0,2,179,100,0,2,179,160,0,2,179,184,0,2,179,244,0,2,180,120, + 0,2,180,136,0,2,180,248,0,2,181,40,0,2,181,136,0,2,181,192,0,2,181,216,0,2,181,240,0,2,182,8,0,2,182,32,0,2,182,56, + 0,2,182,80,0,2,182,104,0,2,182,128,0,2,182,156,0,2,182,196,0,2,182,244,0,2,183,48,0,2,183,116,0,2,183,196,0,2,183,236, + 0,2,184,28,0,2,184,88,0,2,184,156,0,2,184,236,0,2,185,32,0,2,185,108,0,2,185,208,0,2,186,76,0,2,186,224,0,2,187,16, + 0,2,187,84,0,2,187,172,0,2,188,24,0,2,188,152,0,2,188,224,0,2,189,56,0,2,189,112,0,2,190,8,0,2,190,224,0,2,191,8, + 0,2,191,60,0,2,191,112,0,2,191,168,0,2,191,248,0,2,192,212,0,2,193,64,0,2,193,80,0,2,193,152,0,2,193,240,0,2,194,32, + 0,2,194,176,0,2,194,212,0,2,195,16,0,2,195,32,0,2,195,88,0,2,195,104,0,2,195,120,0,2,195,136,0,2,195,152,0,2,195,240, + 0,2,196,72,0,2,196,216,0,2,197,148,0,2,197,204,0,2,198,4,0,2,198,72,0,2,198,184,0,2,199,40,0,2,199,56,0,2,199,116, + 0,2,199,184,0,2,200,20,0,2,200,136,0,2,200,152,0,2,200,168,0,2,200,184,0,2,201,8,0,2,201,40,0,2,201,56,0,2,201,96, + 0,2,201,112,0,2,201,204,0,2,201,220,0,2,202,16,0,2,202,92,0,2,202,216,0,2,203,40,0,2,203,88,0,2,203,136,0,2,203,248, + 0,2,204,40,0,2,204,68,0,2,204,116,0,2,204,168,0,2,204,200,0,2,205,0,0,2,205,48,0,2,205,96,0,2,205,192,0,2,206,124, + 0,2,206,200,0,2,207,52,0,2,207,92,0,2,207,160,0,2,207,216,0,2,208,88,0,2,208,224,0,2,209,72,0,2,210,32,0,2,210,132, + 0,2,210,236,0,2,211,96,0,2,212,8,0,2,212,156,0,2,213,44,0,2,213,192,0,2,213,228,0,2,214,24,0,2,214,180,0,2,215,72, + 0,2,215,204,0,2,216,52,0,2,216,112,0,2,216,168,0,2,217,12,0,2,217,76,0,2,217,152,0,2,217,228,0,2,218,96,0,2,218,136, + 0,2,218,232,0,2,219,32,0,2,219,168,0,2,220,36,0,2,220,124,0,2,220,144,0,2,220,164,0,2,220,184,0,2,220,204,0,2,220,224, + 0,2,220,244,0,2,221,80,0,2,221,100,0,2,221,120,0,2,221,248,0,2,222,8,0,2,222,72,0,2,222,212,0,2,223,16,0,2,223,120, + 0,2,223,216,0,2,224,92,0,2,224,236,0,2,225,124,0,2,225,192,0,2,226,4,0,2,226,140,0,2,226,216,0,2,227,16,0,2,227,64, + 0,2,227,108,0,2,227,168,0,2,228,0,0,2,228,52,0,2,228,116,0,2,228,148,0,2,229,44,0,2,229,168,0,2,230,8,0,2,230,108, + 0,2,230,156,0,2,231,12,0,2,231,156,0,2,232,68,0,2,232,148,0,2,232,236,0,2,233,84,0,2,233,204,0,2,234,16,0,2,234,116, + 0,2,234,156,0,2,234,204,0,2,235,24,0,2,235,116,0,2,235,224,0,2,236,76,0,2,236,108,0,2,236,144,0,2,236,180,0,2,236,212, + 0,2,237,0,0,2,237,48,0,2,237,72,0,2,237,96,0,2,237,120,0,2,237,144,0,2,237,168,0,2,237,192,0,2,237,216,0,2,237,240, + 0,2,238,8,0,2,238,32,0,2,238,56,0,2,238,80,0,2,238,104,0,2,238,128,0,2,238,152,0,2,238,176,0,2,238,200,0,2,238,224, + 0,2,238,248,0,2,239,16,0,2,239,40,0,2,239,64,0,2,239,88,0,2,239,112,0,2,239,136,0,2,239,160,0,2,239,184,0,2,239,208, + 0,2,239,240,0,2,240,16,0,2,240,40,0,2,240,64,0,2,240,88,0,2,240,112,0,2,240,136,0,2,240,160,0,2,240,184,0,2,240,208, + 0,2,240,232,0,2,241,0,0,2,241,24,0,2,241,48,0,2,241,72,0,2,241,96,0,2,241,120,0,2,241,144,0,2,241,168,0,2,241,192, + 0,2,241,216,0,2,241,240,0,2,242,8,0,2,242,32,0,2,242,56,0,2,242,80,0,2,242,104,0,2,242,128,0,2,242,160,0,2,242,184, + 0,2,242,208,0,2,242,232,0,2,243,0,0,2,243,24,0,2,243,48,0,2,243,72,0,2,243,96,0,2,243,120,0,2,243,144,0,2,243,168, + 0,2,243,192,0,2,243,216,0,2,243,240,0,2,244,8,0,2,244,32,0,2,244,56,0,2,244,80,0,2,244,104,0,2,244,128,0,2,244,152, + 0,2,244,176,0,2,244,208,0,2,244,232,0,2,245,0,0,2,245,24,0,2,245,48,0,2,245,72,0,2,245,96,0,2,245,120,0,2,245,144, + 0,2,245,168,0,2,245,192,0,2,245,216,0,2,245,240,0,2,246,8,0,2,246,32,0,2,246,56,0,2,246,80,0,2,246,104,0,2,246,128, + 0,2,246,152,0,2,246,176,0,2,246,208,0,2,246,240,0,2,247,8,0,2,247,32,0,2,247,56,0,2,247,80,0,2,247,104,0,2,247,128, + 0,2,247,152,0,2,247,176,0,2,247,200,0,2,247,224,0,2,247,248,0,2,248,16,0,2,248,40,0,2,248,64,0,2,248,88,0,2,248,112, + 0,2,248,136,0,2,248,160,0,2,248,184,0,2,248,208,0,2,248,232,0,2,249,0,0,2,249,24,0,2,249,48,0,2,249,72,0,2,249,96, + 0,2,249,120,0,2,249,144,0,2,249,168,0,2,249,192,0,2,249,216,0,2,249,240,0,2,250,8,0,2,250,32,0,2,250,56,0,2,250,80, + 0,2,250,104,0,2,250,128,0,2,250,152,0,2,250,176,0,2,250,200,0,2,250,224,0,2,250,248,0,2,251,16,0,2,251,40,0,2,251,64, + 0,2,251,88,0,2,251,112,0,2,251,136,0,2,251,160,0,2,251,184,0,2,251,208,0,2,251,232,0,2,252,0,0,2,252,80,0,2,252,152, + 0,2,253,48,0,2,253,64,0,2,253,88,0,2,253,112,0,2,253,136,0,2,253,160,0,2,253,184,0,2,253,208,0,2,253,232,0,2,254,0, + 0,2,254,24,0,2,254,48,0,2,254,72,0,2,254,96,0,2,254,120,0,2,254,144,0,2,254,168,0,2,254,192,0,2,254,216,0,2,254,240, + 0,2,255,8,0,2,255,32,0,2,255,56,0,2,255,80,0,2,255,104,0,2,255,128,0,2,255,152,0,2,255,176,0,2,255,200,0,2,255,224, + 0,2,255,248,0,3,0,16,0,3,0,40,0,3,0,64,0,3,0,88,0,3,0,112,0,3,0,136,0,3,0,160,0,3,0,184,0,3,0,208, + 0,3,0,232,0,3,1,8,0,3,1,32,0,3,1,56,0,3,1,80,0,3,1,104,0,3,1,128,0,3,1,152,0,3,1,176,0,3,1,200, + 0,3,1,224,0,3,1,248,0,3,2,16,0,3,2,40,0,3,2,64,0,3,2,88,0,3,2,112,0,3,2,136,0,3,2,160,0,3,2,192, + 0,3,2,216,0,3,2,240,0,3,3,8,0,3,3,32,0,3,3,56,0,3,3,80,0,3,3,104,0,3,3,128,0,3,3,152,0,3,3,176, + 0,3,3,200,0,3,3,224,0,3,3,248,0,3,4,16,0,3,4,40,0,3,4,64,0,3,4,88,0,3,4,112,0,3,4,136,0,3,4,160, + 0,3,4,184,0,3,4,208,0,3,4,232,0,3,5,0,0,3,5,24,0,3,5,48,0,3,5,72,0,3,5,96,0,3,5,120,0,3,5,144, + 0,3,5,168,0,3,5,192,0,3,5,236,0,3,6,40,0,3,6,64,0,3,6,88,0,3,6,112,0,3,6,136,0,3,6,160,0,3,6,184, + 0,3,6,208,0,3,6,232,0,3,7,0,0,3,7,24,0,3,7,52,0,3,7,76,0,3,7,104,0,3,7,132,0,3,7,156,0,3,7,180, + 0,3,7,204,0,3,7,228,0,3,7,252,0,3,8,20,0,3,8,44,0,3,8,68,0,3,8,96,0,3,8,124,0,3,8,152,0,3,8,176, + 0,3,8,204,0,3,8,232,0,3,9,0,0,3,9,24,0,3,9,48,0,3,9,72,0,3,9,96,0,3,9,120,0,3,9,144,0,3,9,168, + 0,3,9,196,0,3,9,224,0,3,9,252,0,3,10,20,0,3,10,48,0,3,10,76,0,3,10,104,0,3,10,132,0,3,10,156,0,3,10,180, + 0,3,10,204,0,3,10,228,0,3,10,252,0,3,11,20,0,3,11,44,0,3,11,68,0,3,11,96,0,3,11,124,0,3,11,152,0,3,11,176, + 0,3,11,204,0,3,11,232,0,3,12,4,0,3,12,32,0,3,12,56,0,3,12,80,0,3,12,104,0,3,12,128,0,3,12,152,0,3,12,176, + 0,3,12,200,0,3,12,224,0,3,12,252,0,3,13,20,0,3,13,48,0,3,13,76,0,3,13,100,0,3,13,124,0,3,13,148,0,3,13,172, + 0,3,13,196,0,3,13,220,0,3,13,244,0,3,14,12,0,3,14,40,0,3,14,64,0,3,14,92,0,3,14,120,0,3,14,144,0,3,14,168, + 0,3,14,192,0,3,14,216,0,3,14,240,0,3,15,8,0,3,15,32,0,3,15,56,0,3,15,80,0,3,15,108,0,3,15,136,0,3,15,160, + 0,3,15,188,0,3,15,216,0,3,15,244,0,3,16,16,0,3,16,40,0,3,16,56,0,3,16,80,0,3,16,96,0,3,16,120,0,3,16,136, + 0,3,16,160,0,3,16,176,0,3,16,200,0,3,16,216,0,3,16,240,0,3,17,0,0,3,17,24,0,3,17,40,0,3,17,64,0,3,17,88, + 0,3,17,112,0,3,17,136,0,3,17,160,0,3,17,184,0,3,17,208,0,3,17,232,0,3,18,0,0,3,18,24,0,3,18,48,0,3,18,72, + 0,3,18,96,0,3,18,120,0,3,18,144,0,3,18,168,0,3,18,192,0,3,18,216,0,3,18,240,0,3,19,8,0,3,19,32,0,3,19,56, + 0,3,19,80,0,3,19,104,0,3,19,128,0,3,19,152,0,3,19,176,0,3,19,200,0,3,19,224,0,3,19,248,0,3,20,16,0,3,20,40, + 0,3,20,64,0,3,20,88,0,3,20,112,0,3,20,136,0,3,20,160,0,3,20,184,0,3,20,208,0,3,20,232,0,3,21,0,0,3,21,24, + 0,3,21,48,0,3,21,72,0,3,21,96,0,3,21,120,0,3,21,144,0,3,21,168,0,3,21,192,0,3,21,216,0,3,21,240,0,3,22,8, + 0,3,22,32,0,3,22,56,0,3,22,80,0,3,22,104,0,3,22,128,0,3,22,152,0,3,22,168,0,3,22,192,0,3,22,208,0,3,22,224, + 0,3,23,80,0,3,23,96,0,3,23,120,0,3,23,144,0,3,23,168,0,3,23,192,0,3,23,216,0,3,23,240,0,3,24,12,0,3,24,28, + 0,3,24,56,0,3,24,72,0,3,24,96,0,3,24,124,0,3,24,148,0,3,24,172,0,3,24,196,0,3,24,220,0,3,24,244,0,3,25,4, + 0,3,25,28,0,3,25,52,0,3,25,76,0,3,25,100,0,3,25,128,0,3,25,144,0,3,25,172,0,3,25,196,0,3,25,220,0,3,25,244, + 0,3,26,12,0,3,26,36,0,3,26,52,0,3,26,76,0,3,26,100,0,3,26,124,0,3,26,148,0,3,26,172,0,3,26,196,0,3,26,224, + 0,3,26,240,0,3,27,12,0,3,27,36,0,3,27,52,0,3,27,68,0,3,27,92,0,3,27,116,0,3,27,140,0,3,27,164,0,3,27,188, + 0,3,27,216,0,3,27,232,0,3,28,4,0,3,28,20,0,3,28,44,0,3,28,60,0,3,28,168,0,3,28,168,0,3,28,168,0,3,28,168, + 0,3,28,168,0,3,28,168,0,3,28,168,0,3,28,168,0,3,28,168,0,3,28,168,0,3,28,168,0,3,28,168,0,3,28,168,0,3,28,168, + 0,3,28,168,0,3,28,168,0,3,28,168,0,3,28,212,0,3,28,228,0,3,29,16,0,3,29,60,0,3,29,104,0,3,29,144,0,3,29,168, + 0,3,29,192,0,3,29,252,0,3,30,56,0,3,30,112,0,3,30,148,0,3,30,240,0,3,31,76,0,3,31,168,0,3,31,220,0,3,32,52, + 0,3,32,184,0,3,32,248,0,3,33,20,0,3,33,60,0,3,33,124,0,3,33,208,0,3,33,232,0,3,33,232,0,3,33,232,0,3,33,232, + 0,3,33,232,0,3,33,232,0,3,33,232,0,3,33,232,0,3,33,232,0,3,35,116,0,3,36,132,0,3,36,164,0,3,36,188,0,3,36,220, + 0,3,36,248,0,3,37,16,0,3,37,48,0,3,37,84,0,3,37,196,0,3,38,56,0,3,38,104,0,3,38,132,0,3,39,0,0,3,39,20, + 0,3,39,116,0,3,39,212,0,3,40,0,0,3,40,36,0,3,40,64,0,3,40,136,0,3,40,184,0,3,40,232,0,3,41,0,0,3,41,24, + 0,3,41,52,0,3,41,160,0,3,41,216,0,3,42,8,0,3,42,56,0,3,42,76,0,3,42,124,0,3,42,148,0,3,42,176,0,3,42,212, + 0,3,43,52,0,3,43,72,0,3,43,156,0,3,43,208,0,3,43,248,0,3,44,56,0,3,44,132,0,3,44,168,0,3,44,228,0,3,45,72, + 0,3,45,120,0,3,45,180,0,3,45,180,0,3,45,180,0,3,45,180,0,3,45,180,0,3,45,180,0,3,45,180,0,3,45,180,0,3,45,180, + 0,3,45,180,0,3,45,180,0,3,45,180,0,3,45,180,0,3,46,8,0,3,46,76,0,3,47,88,0,3,47,188,0,3,48,76,0,3,48,116, + 0,3,49,36,0,3,49,176,0,3,49,228,0,3,50,0,0,3,50,40,0,3,50,96,0,3,50,156,0,3,51,16,0,3,51,36,0,3,51,56, + 0,3,51,76,0,3,51,96,0,3,51,116,0,3,51,136,0,3,51,156,0,3,51,176,0,3,51,196,0,3,51,216,0,3,51,236,0,3,52,0, + 0,3,52,20,0,3,52,40,0,3,52,60,0,3,52,80,0,3,52,100,0,3,52,120,0,3,52,140,0,3,52,160,0,3,52,180,0,3,52,200, + 0,3,52,220,0,3,52,240,0,3,53,4,0,3,53,24,0,3,53,44,0,3,53,64,0,3,53,180,0,3,54,100,0,3,54,244,0,3,55,52, + 0,3,55,156,0,3,56,32,0,3,56,164,0,3,57,136,0,3,58,88,0,3,59,4,0,3,59,104,0,3,59,128,0,3,61,52,0,3,61,124, + 0,3,61,212,0,3,63,96,0,3,63,252,0,3,64,148,0,3,65,40,0,3,65,148,0,3,66,52,0,3,66,196,0,3,66,248,0,3,67,120, + 0,3,67,224,0,3,68,4,0,3,68,36,0,3,68,76,0,3,68,116,0,3,68,172,0,3,68,240,0,3,69,40,0,3,69,232,0,3,70,192, + 0,3,71,56,0,3,71,80,0,3,72,120,0,3,73,20,0,3,73,172,0,3,73,188,0,3,73,208,0,3,73,232,0,3,75,40,0,3,76,24, + 0,3,76,104,0,3,76,196,0,3,77,36,0,3,77,208,0,3,78,100,0,3,79,68,0,3,79,196,0,3,80,64,0,3,80,132,0,3,83,44, + 0,3,83,212,0,3,84,136,0,3,84,248,0,3,85,152,0,3,86,176,0,3,87,172,0,3,88,92,0,3,89,116,0,3,90,28,0,3,90,188, + 0,3,91,28,0,3,91,168,0,3,91,252,0,3,92,60,0,3,92,168,0,3,92,184,0,3,92,200,0,3,93,188,0,3,93,240,0,3,94,0, + 0,3,94,16,0,3,95,8,0,3,95,204,0,3,96,84,0,3,96,208,0,3,97,152,0,3,98,120,0,3,98,164,0,3,99,232,0,3,100,60, + 0,3,100,224,0,3,101,112,0,3,101,252,0,3,102,116,0,3,102,188,0,3,103,48,0,3,103,180,0,3,104,72,0,3,104,188,0,3,104,236, + 0,3,105,48,0,3,105,132,0,3,105,244,0,3,106,44,0,3,106,100,0,3,106,144,0,3,107,20,0,3,107,196,0,3,108,100,0,3,108,156, + 0,3,109,4,0,3,109,156,0,3,109,236,0,3,110,12,0,3,110,44,0,3,110,84,0,3,110,116,0,3,110,148,0,3,110,180,0,3,110,212, + 0,3,110,244,0,3,111,20,0,3,111,52,0,3,111,84,0,3,111,116,0,3,111,148,0,3,111,180,0,3,111,212,0,3,111,236,0,3,111,252, + 0,3,112,20,0,3,112,52,0,3,112,76,0,3,112,92,0,3,112,116,0,3,112,148,0,3,112,188,0,3,112,212,0,3,112,228,0,3,112,252, + 0,3,113,28,0,3,113,44,0,3,113,60,0,3,113,76,0,3,113,92,0,3,113,108,0,3,113,132,0,3,113,164,0,3,113,188,0,3,113,204, + 0,3,113,228,0,3,114,4,0,3,114,44,0,3,114,68,0,3,114,84,0,3,114,108,0,3,114,140,0,3,114,156,0,3,114,172,0,3,114,188, + 0,3,114,204,0,3,115,80,0,3,116,204,0,3,117,172,0,3,117,188,0,3,117,204,0,3,118,56,0,3,118,88,0,3,119,8,0,3,119,184, + 0,3,120,104,0,3,121,24,0,3,122,56,0,3,123,92,0,3,123,140,0,3,123,188,0,3,123,236,0,3,124,28,0,3,124,104,0,3,124,180, + 0,3,125,92,0,3,126,4,0,3,126,80,0,3,126,156,0,3,126,232,0,3,127,52,0,3,127,124,0,3,127,200,0,3,128,4,0,3,128,64, + 0,3,129,4,0,3,129,64,0,3,129,148,0,3,130,20,0,3,130,160,0,3,131,100,0,3,132,40,0,3,133,60,0,3,133,156,0,3,133,228, + 0,3,134,28,0,3,134,84,0,3,134,140,0,3,134,196,0,3,134,252,0,3,135,52,0,3,135,184,0,3,136,56,0,3,136,116,0,3,136,224, + 0,3,137,136,0,3,138,48,0,3,138,160,0,3,139,16,0,3,139,56,0,3,139,96,0,3,139,212,0,3,140,68,0,3,140,104,0,3,140,140, + 0,3,140,168,0,3,140,196,0,3,140,224,0,3,141,40,0,3,141,112,0,3,141,184,0,3,142,0,0,3,142,28,0,3,142,56,0,3,142,160, + 0,3,143,32,0,3,143,136,0,3,143,200,0,3,144,8,0,3,144,72,0,3,144,136,0,3,144,228,0,3,145,64,0,3,145,128,0,3,145,192, + 0,3,146,0,0,3,146,64,0,3,146,128,0,3,146,192,0,3,147,28,0,3,147,120,0,3,147,208,0,3,148,40,0,3,148,112,0,3,148,184, + 0,3,149,4,0,3,149,80,0,3,149,140,0,3,149,200,0,3,150,12,0,3,150,80,0,3,150,144,0,3,150,208,0,3,151,52,0,3,151,136, + 0,3,151,232,0,3,152,72,0,3,152,180,0,3,153,52,0,3,153,136,0,3,153,204,0,3,154,16,0,3,154,108,0,3,155,72,0,3,155,100, + 0,3,155,196,0,3,156,8,0,3,156,80,0,3,156,172,0,3,157,4,0,3,157,96,0,3,157,208,0,3,158,4,0,3,158,56,0,3,158,136, + 0,3,158,196,0,3,159,152,0,3,160,48,0,3,160,100,0,3,160,204,0,3,161,140,0,3,161,240,0,3,162,32,0,3,162,132,0,3,163,40, + 0,3,163,124,0,3,163,224,0,3,164,132,0,3,164,216,0,3,165,0,0,3,165,68,0,3,165,136,0,3,166,32,0,3,166,76,0,3,166,136, + 0,3,167,28,0,3,167,44,0,3,167,64,0,3,167,140,0,3,167,160,0,3,167,176,0,3,168,16,0,3,168,40,0,3,168,64,0,3,168,216, + 0,3,169,144,0,3,169,176,0,3,169,212,0,3,170,128,0,3,171,44,0,3,171,72,0,3,171,180,0,3,171,220,0,3,172,160,0,3,172,204, + 0,3,172,244,0,3,173,52,0,3,173,116,0,3,173,196,0,3,173,220,0,3,173,252,0,3,174,200,0,3,176,0,0,3,177,168,0,3,178,72, + 0,3,179,16,0,3,179,216,0,3,179,252,0,3,180,32,0,3,180,60,0,3,180,104,0,3,180,128,0,3,180,180,0,3,180,228,0,3,181,4, + 0,3,181,100,0,3,181,196,0,3,182,64,0,3,182,136,0,3,182,232,0,3,183,72,0,3,183,180,0,3,184,28,0,3,184,156,0,3,185,16, + 0,3,185,164,0,3,186,52,0,3,187,40,0,3,187,200,0,3,188,120,0,3,189,96,0,3,189,212,0,3,190,44,0,3,190,232,0,3,191,92, + 0,3,191,116,0,3,191,148,0,3,191,180,0,3,191,212,0,3,191,248,0,3,192,24,0,3,192,116,0,3,192,224,0,3,193,40,0,3,193,108, + 0,3,193,172,0,3,193,248,0,3,194,60,0,3,195,28,0,3,195,160,0,3,196,44,0,3,196,184,0,3,197,16,0,3,197,112,0,3,197,220, + 0,3,198,108,0,3,198,248,0,3,199,64,0,3,199,128,0,3,199,232,0,3,200,76,0,3,200,148,0,3,200,216,0,3,201,96,0,3,201,204, + 0,3,202,32,0,3,202,116,0,3,202,224,0,3,203,76,0,3,203,204,0,3,204,68,0,3,204,248,0,3,205,172,0,3,205,240,0,3,206,56, + 0,3,206,196,0,3,207,76,0,3,207,136,0,3,207,192,0,3,208,20,0,3,208,100,0,3,208,244,0,3,209,128,0,3,209,240,0,3,210,96, + 0,3,210,164,0,3,210,232,0,3,211,84,0,3,211,192,0,3,212,20,0,3,212,100,0,3,212,224,0,3,213,96,0,3,213,204,0,3,214,56, + 0,3,214,152,0,3,214,176,0,3,215,16,0,3,215,80,0,3,215,148,0,3,215,200,0,3,215,252,0,3,216,36,0,3,216,72,0,3,217,20, + 0,3,217,200,0,3,218,152,0,3,219,84,0,3,220,8,0,3,220,240,0,3,221,212,0,3,222,148,0,3,223,72,0,3,223,152,0,3,223,212, + 0,3,224,56,0,3,224,112,0,3,224,172,0,3,224,208,0,3,224,248,0,3,225,28,0,3,225,64,0,3,225,112,0,3,225,160,0,3,225,208, + 0,3,226,16,0,3,226,76,0,3,226,144,0,3,226,236,0,3,227,64,0,3,227,172,0,3,228,48,0,3,228,184,0,3,228,232,0,3,229,20, + 0,3,229,76,0,3,229,132,0,3,229,240,0,3,230,92,0,3,230,172,0,3,230,240,0,3,231,20,0,3,231,72,0,3,231,128,0,3,231,180, + 0,3,232,8,0,3,232,56,0,3,232,100,0,3,232,144,0,3,232,244,0,3,233,84,0,3,233,100,0,3,233,144,0,3,233,196,0,3,234,48, + 0,3,234,116,0,3,234,180,0,3,234,244,0,3,235,32,0,3,235,80,0,3,235,180,0,3,235,236,0,3,236,36,0,3,236,168,0,3,237,44, + 0,3,237,164,0,3,238,28,0,3,238,120,0,3,238,220,0,3,239,20,0,3,239,72,0,3,239,176,0,3,240,16,0,3,240,104,0,3,240,188, + 0,3,240,244,0,3,241,44,0,3,241,128,0,3,241,212,0,3,242,104,0,3,242,252,0,3,243,100,0,3,243,204,0,3,244,24,0,3,244,100, + 0,3,244,220,0,3,245,84,0,3,245,220,0,3,246,100,0,3,246,188,0,3,247,20,0,3,247,136,0,3,247,248,0,3,248,28,0,3,248,60, + 0,3,248,96,0,3,248,132,0,3,248,248,0,3,249,96,0,3,249,184,0,3,249,208,0,3,250,68,0,3,250,164,0,3,251,24,0,3,251,132, + 0,3,251,248,0,3,252,96,0,3,252,188,0,3,253,48,0,3,253,148,0,3,253,200,0,3,254,64,0,3,254,108,0,3,254,164,0,3,254,212, + 0,3,255,0,0,3,255,24,0,3,255,56,0,3,255,144,0,3,255,176,0,3,255,208,0,3,255,240,0,4,0,16,0,4,0,56,0,4,0,96, + 0,4,0,136,0,4,0,176,0,4,0,208,0,4,1,36,0,4,2,32,0,4,2,68,0,4,2,104,0,4,2,136,0,4,2,168,0,4,2,200, + 0,4,3,32,0,4,3,120,0,4,3,196,0,4,3,252,0,4,4,104,0,4,4,200,0,4,9,128,0,4,9,236,0,4,10,96,0,4,10,112, + 0,4,10,128,0,4,10,144,0,4,10,160,0,4,10,208,0,4,11,28,0,4,11,96,0,4,11,152,0,4,11,180,0,4,11,236,0,4,12,36, + 0,4,12,64,0,4,12,120,0,4,12,152,0,4,12,180,0,4,12,216,0,4,12,252,0,4,13,24,0,4,13,56,0,4,13,108,0,4,13,196, + 0,4,13,252,0,4,14,24,0,4,14,80,0,4,14,168,0,4,14,220,0,4,14,248,0,4,15,76,0,4,15,120,0,4,16,32,0,4,16,48, + 0,4,16,156,0,4,17,16,0,4,17,56,0,4,18,168,0,4,20,172,0,4,23,60,0,4,24,204,0,4,26,216,0,4,29,60,0,4,30,180, + 0,4,33,176,0,4,36,24,0,4,38,132,0,4,38,160,0,4,38,188,0,4,38,216,0,4,38,244,0,4,39,40,0,4,39,96,0,4,39,152, + 0,4,39,212,0,4,40,12,0,4,40,76,0,4,40,148,0,4,40,224,0,4,41,4,0,4,41,40,0,4,41,76,0,4,41,112,0,4,41,148, + 0,4,41,184,0,4,41,220,0,4,42,0,0,4,42,32,0,4,42,68,0,4,42,104,0,4,42,140,0,4,42,172,0,4,42,204,0,4,42,236, + 0,4,43,16,0,4,43,56,0,4,43,96,0,4,43,140,0,4,43,184,0,4,43,224,0,4,44,16,0,4,44,60,0,4,44,100,0,4,44,140, + 0,4,44,180,0,4,44,224,0,4,45,12,0,4,45,52,0,4,45,100,0,4,45,144,0,4,45,184,0,4,45,224,0,4,46,12,0,4,46,56, + 0,4,46,96,0,4,46,136,0,4,46,180,0,4,46,224,0,4,47,8,0,4,47,44,0,4,47,88,0,4,47,132,0,4,47,172,0,4,47,212, + 0,4,48,0,0,4,48,44,0,4,48,84,0,4,48,132,0,4,48,184,0,4,48,236,0,4,49,32,0,4,49,84,0,4,49,136,0,4,49,188, + 0,4,49,244,0,4,50,44,0,4,50,100,0,4,50,156,0,4,50,208,0,4,51,4,0,4,51,56,0,4,51,108,0,4,51,160,0,4,51,196, + 0,4,51,240,0,4,52,28,0,4,52,72,0,4,52,112,0,4,52,152,0,4,52,196,0,4,52,240,0,4,53,36,0,4,53,80,0,4,53,124, + 0,4,53,176,0,4,53,220,0,4,54,8,0,4,54,60,0,4,54,104,0,4,54,148,0,4,54,200,0,4,54,248,0,4,55,44,0,4,55,112, + 0,4,55,160,0,4,55,212,0,4,56,20,0,4,56,72,0,4,56,120,0,4,56,184,0,4,56,236,0,4,57,28,0,4,57,92,0,4,57,164, + 0,4,57,232,0,4,58,68,0,4,58,120,0,4,58,176,0,4,58,224,0,4,59,20,0,4,59,52,0,4,59,80,0,4,59,144,0,4,59,172, + 0,4,59,200,0,4,59,228,0,4,60,0,0,4,60,28,0,4,60,56,0,4,60,84,0,4,60,112,0,4,60,148,0,4,60,188,0,4,60,224, + 0,4,61,8,0,4,61,28,0,4,61,56,0,4,61,84,0,4,61,112,0,4,61,140,0,4,61,168,0,4,61,196,0,4,61,224,0,4,61,252, + 0,4,62,24,0,4,62,52,0,4,62,80,0,4,62,108,0,4,62,136,0,4,62,164,0,4,62,192,0,4,62,212,0,4,63,136,0,4,66,156, + 0,4,67,68,0,4,67,88,0,4,67,108,0,4,67,136,0,4,67,164,0,4,67,192,0,4,67,228,0,4,68,12,0,4,68,48,0,4,68,84, + 0,4,68,112,0,4,68,152,0,4,68,188,0,4,68,216,0,4,69,4,0,4,69,88,0,4,69,112,0,4,69,200,0,4,70,40,0,4,71,100, + 0,4,71,236,0,4,72,116,0,4,74,52,0,4,74,80,0,4,74,124,0,4,74,152,0,4,74,196,0,4,74,224,0,4,75,12,0,4,75,44, + 0,4,75,96,0,4,75,124,0,4,75,164,0,4,75,192,0,4,75,232,0,4,76,4,0,4,76,48,0,4,76,76,0,4,76,120,0,4,76,148, + 0,4,76,192,0,4,76,220,0,4,77,8,0,4,77,36,0,4,77,80,0,4,77,108,0,4,77,152,0,4,77,180,0,4,77,224,0,4,77,252, + 0,4,78,40,0,4,78,72,0,4,78,124,0,4,78,192,0,4,79,80,0,4,79,164,0,4,80,12,0,4,81,4,0,4,81,184,0,4,82,116, + 0,4,82,216,0,4,83,48,0,4,83,136,0,4,83,228,0,4,84,64,0,4,84,168,0,4,84,248,0,4,85,32,0,4,85,72,0,4,85,132, + 0,4,85,252,0,4,86,80,0,4,86,164,0,4,86,208,0,4,86,252,0,4,87,40,0,4,87,88,0,4,87,156,0,4,87,224,0,4,87,252, + 0,4,88,24,0,4,88,48,0,4,88,72,0,4,88,144,0,4,88,188,0,4,88,232,0,4,89,16,0,4,89,56,0,4,89,116,0,4,89,184, + 0,4,89,228,0,4,90,12,0,4,90,120,0,4,90,184,0,4,90,248,0,4,91,56,0,4,91,120,0,4,91,248,0,4,92,120,0,4,92,248, + 0,4,93,120,0,4,93,160,0,4,93,200,0,4,93,240,0,4,94,28,0,4,94,56,0,4,94,100,0,4,94,128,0,4,94,168,0,4,95,152, + 0,4,96,4,0,4,96,188,0,4,105,160,0,4,108,132,0,4,108,188,0,4,109,32,0,4,109,112,0,4,109,212,0,4,110,104,0,4,111,52, + 0,4,112,0,0,4,112,100,0,4,113,8,0,4,115,140,0,4,118,108,0,4,118,164,0,4,119,28,0,4,119,144,0,4,119,232,0,4,121,72, + 0,4,122,244,0,4,123,60,0,4,123,112,0,4,124,100,0,4,125,56,0,4,125,208,0,4,126,104,0,4,127,44,0,4,127,244,0,4,128,184, + 0,4,129,124,0,4,133,4,0,4,133,128,0,4,134,164,0,4,136,68,0,4,139,172,0,4,140,44,0,4,140,180,0,4,141,40,0,4,141,140, + 0,4,142,16,0,4,142,160,0,4,143,232,0,4,145,24,0,4,145,180,0,4,146,72,0,4,146,252,0,4,147,28,0,4,147,60,0,4,147,92, + 0,4,147,124,0,4,147,156,0,4,147,188,0,4,147,220,0,4,147,252,0,4,149,112,0,4,150,76,0,4,151,40,0,4,151,212,0,4,152,240, + 0,4,153,132,0,4,154,20,0,4,154,204,0,4,155,68,0,4,155,188,0,4,156,48,0,4,156,136,0,4,156,228,0,4,157,120,0,4,158,36, + 0,4,158,140,0,4,159,0,0,4,159,152,0,4,159,252,0,4,160,188,0,4,161,156,0,4,162,108,0,4,162,224,0,4,163,132,0,4,163,224, + 0,4,164,124,0,4,165,104,0,4,165,232,0,4,167,16,0,4,169,60,0,4,169,216,0,4,170,244,0,4,172,60,0,4,173,80,0,4,174,228, + 0,4,175,220,0,4,176,92,0,4,177,36,0,4,178,12,0,4,178,160,0,4,179,20,0,4,179,184,0,4,180,0,0,4,180,160,0,4,181,104, + 0,4,181,188,0,4,181,236,0,4,183,16,0,4,183,252,0,4,184,60,0,4,184,152,0,4,184,252,0,4,185,92,0,4,185,176,0,4,185,252, + 0,4,186,144,0,4,187,80,0,4,188,56,0,4,190,68,0,4,191,56,0,4,192,92,0,4,193,152,0,4,194,152,0,4,195,188,0,4,196,240, + 0,4,197,224,0,4,198,180,0,4,199,192,0,4,200,248,0,4,202,80,0,4,203,84,0,4,203,240,0,4,204,96,0,4,205,20,0,4,206,8, + 0,4,207,64,0,4,208,188,0,4,210,124,0,4,211,24,0,4,211,216,0,4,212,64,0,4,212,204,0,4,212,232,0,4,213,16,0,4,213,40, + 0,4,213,64,0,4,213,88,0,4,213,112,0,4,213,240,0,4,214,64,0,4,214,196,0,4,215,188,0,4,216,104,0,4,217,140,0,4,218,72, + 0,4,218,208,0,4,219,116,0,4,220,124,0,4,222,100,0,4,225,40,0,4,226,232,0,4,227,108,0,4,227,184,0,4,228,152,0,4,229,128, + 0,4,230,104,0,4,230,248,0,4,231,216,0,4,232,236,0,4,233,200,0,4,234,164,0,4,235,24,0,4,235,96,0,4,235,216,0,4,236,220, + 0,4,238,40,0,4,239,108,0,4,239,168,0,4,240,44,0,4,240,132,0,4,240,224,0,4,241,56,0,4,241,168,0,4,242,16,0,4,242,120, + 0,4,242,224,0,4,243,136,0,4,244,104,0,4,245,124,0,4,246,236,0,4,247,132,0,4,249,20,0,4,250,120,0,4,252,4,0,4,255,196, + 0,5,1,80,0,5,2,200,0,5,3,84,0,5,4,4,0,5,6,188,0,5,8,92,0,5,9,116,0,5,10,96,0,5,11,116,0,5,12,92, + 0,5,12,228,0,5,13,72,0,5,13,176,0,5,13,244,0,5,14,52,0,5,15,0,0,5,15,248,0,5,16,120,0,5,16,172,0,5,16,232, + 0,5,17,44,0,5,17,92,0,5,17,188,0,5,18,60,0,5,19,32,0,5,19,184,0,5,20,116,0,5,21,244,0,5,23,120,0,5,26,216, + 0,5,27,56,0,5,27,232,0,5,28,80,0,5,28,220,0,5,29,108,0,5,30,44,0,5,30,184,0,5,31,56,0,5,31,180,0,5,32,36, + 0,5,32,120,0,5,32,224,0,5,33,68,0,5,33,156,0,5,34,96,0,5,34,164,0,5,34,252,0,5,35,76,0,5,35,188,0,5,36,120, + 0,5,38,36,0,5,40,24,0,5,41,68,0,5,43,116,0,5,44,212,0,5,47,76,0,5,52,160,0,5,53,216,0,5,56,40,0,5,56,236, + 0,5,57,180,0,5,58,136,0,5,60,12,0,5,61,140,0,5,62,236,0,5,64,76,0,5,65,152,0,5,67,4,0,5,67,112,0,5,67,220, + 0,5,68,68,0,5,68,172,0,5,69,16,0,5,69,44,0,5,69,72,0,5,69,100,0,5,69,164,0,5,69,240,0,5,70,8,0,5,70,32, + 0,5,70,252,0,5,71,148,0,5,72,80,0,5,72,192,0,5,73,52,0,5,74,84,0,5,75,60,0,5,75,168,0,5,76,24,0,5,76,84, + 0,5,76,144,0,5,76,184,0,5,76,228,0,5,77,12,0,5,77,56,0,5,77,96,0,5,77,140,0,5,77,184,0,5,77,228,0,5,78,72, + 0,5,78,172,0,5,79,40,0,5,79,212,0,5,81,20,0,5,81,156,0,5,82,180,0,5,84,72,0,5,84,188,0,5,87,8,0,5,88,148, + 0,5,90,8,0,5,90,220,0,5,91,224,0,5,92,248,0,5,93,212,0,5,94,212,0,5,95,236,0,5,96,184,0,5,97,228,0,5,98,252, + 0,5,100,44,0,5,100,172,0,5,101,92,0,5,102,36,0,5,102,176,0,5,103,96,0,5,104,40,0,5,104,160,0,5,105,120,0,5,106,64, + 0,5,107,4,0,5,107,52,0,5,107,96,0,5,107,140,0,5,107,184,0,5,107,232,0,5,108,116,0,5,108,156,0,5,108,196,0,5,109,24, + 0,5,109,108,0,5,109,148,0,5,109,196,0,5,109,244,0,5,110,20,0,5,110,100,0,5,110,180,0,5,110,224,0,5,111,16,0,5,111,88, + 0,5,111,160,0,5,111,244,0,5,112,68,0,5,112,144,0,5,112,224,0,5,113,56,0,5,113,144,0,5,113,252,0,5,114,160,0,5,114,248, + 0,5,115,64,0,5,115,152,0,5,116,36,0,5,116,164,0,5,117,48,0,5,118,0,0,5,118,144,0,5,119,184,0,5,120,228,0,5,121,112, + 0,5,121,208,0,5,122,48,0,5,122,108,0,5,122,160,0,5,122,212,0,5,122,252,0,5,123,36,0,5,123,60,0,5,123,84,0,5,123,172, + 0,5,124,0,0,5,124,196,0,5,125,132,0,5,126,128,0,5,127,48,0,5,127,224,0,5,129,0,0,5,129,64,0,5,129,128,0,5,129,220, + 0,5,130,24,0,5,130,84,0,5,130,160,0,5,130,236,0,5,131,112,0,5,131,112,0,5,131,132,0,5,131,152,0,5,131,180,0,5,131,200, + 0,5,131,228,0,5,132,0,0,5,132,36,0,5,132,56,0,5,132,84,0,5,132,112,0,5,132,148,0,5,132,176,0,5,132,212,0,5,132,248, + 0,5,133,36,0,5,133,56,0,5,133,84,0,5,133,112,0,5,133,148,0,5,133,176,0,5,133,212,0,5,133,248,0,5,134,36,0,5,134,64, + 0,5,134,100,0,5,134,136,0,5,134,180,0,5,134,216,0,5,135,4,0,5,135,48,0,5,135,100,0,5,135,120,0,5,135,148,0,5,135,176, + 0,5,135,212,0,5,135,240,0,5,136,20,0,5,136,56,0,5,136,100,0,5,136,128,0,5,136,164,0,5,136,200,0,5,136,244,0,5,137,24, + 0,5,137,68,0,5,137,112,0,5,137,164,0,5,137,192,0,5,137,228,0,5,138,8,0,5,138,52,0,5,138,88,0,5,138,132,0,5,138,176, + 0,5,138,228,0,5,139,8,0,5,139,52,0,5,139,96,0,5,139,148,0,5,139,192,0,5,139,244,0,5,140,40,0,5,140,100,0,5,140,120, + 0,5,140,148,0,5,140,176,0,5,140,212,0,5,140,240,0,5,141,20,0,5,141,56,0,5,141,100,0,5,141,128,0,5,141,164,0,5,141,200, + 0,5,141,244,0,5,142,24,0,5,142,68,0,5,142,112,0,5,142,164,0,5,142,192,0,5,142,228,0,5,143,8,0,5,143,52,0,5,143,88, + 0,5,143,132,0,5,143,176,0,5,143,228,0,5,144,8,0,5,144,52,0,5,144,96,0,5,144,148,0,5,144,192,0,5,144,244,0,5,145,40, + 0,5,145,100,0,5,145,128,0,5,145,164,0,5,145,200,0,5,145,244,0,5,146,24,0,5,146,68,0,5,146,112,0,5,146,164,0,5,146,200, + 0,5,146,244,0,5,147,32,0,5,147,84,0,5,147,128,0,5,147,180,0,5,147,232,0,5,148,36,0,5,148,72,0,5,148,116,0,5,148,160, + 0,5,148,212,0,5,149,0,0,5,149,52,0,5,149,104,0,5,149,164,0,5,149,208,0,5,150,4,0,5,150,56,0,5,150,116,0,5,150,168, + 0,5,150,228,0,5,151,32,0,5,151,100,0,5,151,120,0,5,151,148,0,5,151,176,0,5,151,212,0,5,151,240,0,5,152,20,0,5,152,56, + 0,5,152,100,0,5,152,128,0,5,152,164,0,5,152,200,0,5,152,244,0,5,153,24,0,5,153,68,0,5,153,112,0,5,153,164,0,5,153,192, + 0,5,153,228,0,5,154,8,0,5,154,52,0,5,154,88,0,5,154,132,0,5,154,176,0,5,154,228,0,5,155,8,0,5,155,52,0,5,155,96, + 0,5,155,148,0,5,155,192,0,5,155,244,0,5,156,40,0,5,156,100,0,5,156,128,0,5,156,164,0,5,156,200,0,5,156,244,0,5,157,24, + 0,5,157,68,0,5,157,112,0,5,157,164,0,5,157,200,0,5,157,244,0,5,158,32,0,5,158,84,0,5,158,128,0,5,158,180,0,5,158,232, + 0,5,159,36,0,5,159,72,0,5,159,116,0,5,159,160,0,5,159,212,0,5,160,0,0,5,160,52,0,5,160,104,0,5,160,164,0,5,160,208, + 0,5,161,4,0,5,161,56,0,5,161,116,0,5,161,168,0,5,161,228,0,5,162,32,0,5,162,100,0,5,162,128,0,5,162,164,0,5,162,200, + 0,5,162,244,0,5,163,24,0,5,163,68,0,5,163,112,0,5,163,164,0,5,163,200,0,5,163,244,0,5,164,32,0,5,164,84,0,5,164,128, + 0,5,164,180,0,5,164,232,0,5,165,36,0,5,165,72,0,5,165,116,0,5,165,160,0,5,165,212,0,5,166,0,0,5,166,52,0,5,166,104, + 0,5,166,164,0,5,166,208,0,5,167,4,0,5,167,56,0,5,167,116,0,5,167,168,0,5,167,228,0,5,168,32,0,5,168,100,0,5,168,136, + 0,5,168,180,0,5,168,224,0,5,169,20,0,5,169,64,0,5,169,116,0,5,169,168,0,5,169,228,0,5,170,16,0,5,170,68,0,5,170,120, + 0,5,170,180,0,5,170,232,0,5,171,36,0,5,171,96,0,5,171,164,0,5,171,208,0,5,172,4,0,5,172,56,0,5,172,116,0,5,172,168, + 0,5,172,228,0,5,173,32,0,5,173,100,0,5,173,152,0,5,173,212,0,5,174,16,0,5,174,84,0,5,174,144,0,5,174,212,0,5,175,24, + 0,5,175,100,0,5,175,176,0,5,175,252,0,5,176,68,0,5,176,136,0,5,177,84,0,5,178,28,0,5,179,0,0,5,179,224,0,5,180,44, + 0,5,180,104,0,5,180,164,0,5,180,216,0,5,181,12,0,5,181,52,0,5,181,104,0,5,181,156,0,5,181,188,0,5,182,4,0,5,182,92, + 0,5,183,28,0,5,183,240,0,5,184,212,0,5,184,252,0,5,185,100,0,5,185,224,0,5,186,76,0,5,186,248,0,5,187,152,0,5,188,12, + 0,5,188,156,0,5,189,48,0,5,189,212,0,5,190,88,0,5,190,240,0,5,191,108,0,5,191,244,0,5,192,120,0,5,192,216,0,5,193,56, + 0,5,193,72,0,5,193,96,0,5,193,128,0,5,193,188,0,5,193,244,0,5,194,12,0,5,194,36,0,5,194,60,0,5,194,84,0,5,194,108, + 0,5,194,132,0,5,195,84,0,5,196,32,0,5,196,112,0,5,196,192,0,5,197,132,0,5,198,64,0,5,198,164,0,5,199,0,0,5,199,132, + 0,5,200,4,0,5,200,148,0,5,201,36,0,5,201,128,0,5,201,228,0,5,202,76,0,5,202,176,0,5,202,236,0,5,203,40,0,5,203,64, + 0,5,203,88,0,5,203,156,0,5,203,228,0,5,204,44,0,5,204,124,0,5,204,244,0,5,205,112,0,5,206,4,0,5,206,156,0,5,207,32, + 0,5,207,104,0,5,207,172,0,5,208,16,0,5,208,112,0,5,208,196,0,5,209,24,0,5,209,144,0,5,210,4,0,5,210,228,0,5,211,196, + 0,5,212,148,0,5,213,100,0,5,213,176,0,5,213,248,0,5,214,64,0,5,214,136,0,5,214,208,0,5,215,24,0,5,215,116,0,5,215,156, + 0,5,215,196,0,5,215,236,0,5,216,24,0,5,216,68,0,5,216,112,0,5,216,156,0,5,216,212,0,5,217,12,0,5,217,64,0,5,217,120, + 0,5,217,176,0,5,217,228,0,5,218,16,0,5,218,60,0,5,218,104,0,5,218,144,0,5,218,192,0,5,218,240,0,5,219,32,0,5,219,80, + 0,5,219,252,0,5,220,32,0,5,220,92,0,5,220,160,0,5,220,200,0,5,220,244,0,5,221,48,0,5,221,84,0,5,221,144,0,5,221,216, + 0,5,222,24,0,5,222,136,0,5,222,228,0,5,224,32,0,5,224,208,0,5,225,44,0,5,225,60,0,5,225,140,0,5,225,204,0,5,226,12, + 0,5,226,64,0,5,226,116,0,5,227,12,0,5,227,92,0,5,227,148,0,5,227,244,0,5,228,64,0,5,228,176,0,5,229,16,0,5,229,112, + 0,5,229,152,0,5,229,192,0,5,230,64,0,5,230,140,0,5,231,8,0,5,231,60,0,5,231,80,0,5,231,124,0,5,232,40,0,5,232,128, + 0,5,232,232,0,5,233,92,0,5,233,208,0,5,234,108,0,5,234,180,0,5,235,28,0,5,235,152,0,5,236,20,0,5,236,80,0,5,236,180, + 0,5,237,48,0,5,237,188,0,5,238,28,0,5,238,124,0,5,238,188,0,5,239,44,0,5,239,152,0,5,239,224,0,5,240,76,0,5,240,184, + 0,5,241,92,0,5,241,188,0,5,241,252,0,5,242,64,0,5,242,148,0,5,242,228,0,5,243,68,0,5,243,164,0,5,244,12,0,5,244,128, + 0,5,244,196,0,5,245,56,0,5,245,152,0,5,245,244,0,5,246,80,0,5,246,160,0,5,246,236,0,5,247,120,0,5,247,236,0,5,248,180, + 0,5,249,152,0,5,250,64,0,5,250,232,0,5,251,160,0,5,251,248,0,5,252,8,0,5,252,24,0,5,252,40,0,5,252,56,0,5,253,36, + 0,5,253,168,0,5,254,56,0,5,254,152,0,5,255,40,0,5,255,248,0,6,1,0,0,6,1,100,0,6,1,204,0,6,2,44,0,6,2,244, + 0,6,3,96,0,6,3,204,0,6,4,40,0,6,4,56,0,6,4,140,0,6,5,84,0,6,6,16,0,6,6,32,0,6,6,96,0,6,6,112, + 0,6,6,240,0,6,7,76,0,6,7,236,0,6,8,184,0,6,9,96,0,6,10,68,0,6,10,164,0,6,10,252,0,6,11,132,0,6,12,80, + 0,6,13,52,0,6,14,56,0,6,14,140,0,6,14,156,0,6,15,216,0,6,16,88,0,6,16,104,0,6,16,172,0,6,17,24,0,6,17,220, + 0,6,18,48,0,6,19,28,0,6,19,92,0,6,19,216,0,6,19,240,0,6,20,16,0,6,20,48,0,6,20,80,0,6,20,112,0,6,20,128, + 0,6,20,152,0,6,20,176,0,6,20,200,0,6,20,224,0,6,20,248,0,6,21,16,0,6,21,40,0,6,21,64,0,6,21,88,0,6,21,112, + 0,6,21,136,0,6,21,160,0,6,21,184,0,6,21,208,0,6,21,232,0,6,22,0,0,6,22,24,0,6,22,48,0,6,22,72,0,6,22,96, + 0,6,22,120,0,6,22,144,0,6,22,168,0,6,22,192,0,6,22,216,0,6,22,240,0,6,23,8,0,6,23,32,0,6,23,56,0,6,23,80, + 0,6,23,104,0,6,23,128,0,6,23,152,0,6,23,176,0,6,23,200,0,6,23,224,0,6,23,248,0,6,24,16,0,6,24,40,0,6,24,64, + 0,6,24,88,0,6,24,112,0,6,24,136,0,6,24,160,0,6,24,184,0,6,24,208,0,6,24,232,0,6,25,0,0,6,25,24,0,6,25,48, + 0,6,25,72,0,6,25,96,0,6,25,120,0,6,25,144,0,6,25,168,0,6,25,192,0,6,25,216,0,6,25,240,0,6,26,8,0,6,26,32, + 0,6,26,56,0,6,26,80,0,6,26,104,0,6,26,128,0,6,26,144,0,6,26,160,0,6,26,232,0,6,26,248,0,6,27,8,0,6,27,44, + 0,6,27,60,0,6,27,76,0,6,27,132,0,6,27,148,0,6,27,164,0,6,27,180,0,6,27,196,0,6,27,212,0,6,27,228,0,6,27,244, + 0,6,28,4,0,6,28,20,0,6,28,36,0,6,28,52,0,6,28,152,0,6,28,168,0,6,28,184,0,6,28,200,0,6,28,216,0,6,29,20, + 0,6,29,36,0,6,29,52,0,6,29,68,0,6,29,180,0,6,29,196,0,6,29,212,0,6,29,228,0,6,30,20,0,6,30,36,0,6,30,52, + 0,6,30,68,0,6,30,176,0,6,30,192,0,6,31,48,0,6,31,76,0,6,31,112,0,6,31,136,0,6,31,160,0,6,31,212,0,6,32,0, + 0,6,32,44,0,6,32,84,0,6,32,100,0,6,32,116,0,6,32,132,0,6,32,148,0,6,33,112,0,6,34,32,0,6,34,56,0,6,34,80, + 0,6,34,200,0,6,35,48,0,6,35,128,0,6,36,8,0,6,36,104,0,6,36,196,0,6,37,4,0,6,37,68,0,6,37,136,0,6,37,200, + 0,6,37,224,0,6,37,248,0,6,38,108,0,6,38,224,0,6,39,0,0,6,39,32,0,6,40,168,0,6,41,8,0,6,41,108,0,6,41,164, + 0,6,41,228,0,6,42,92,0,6,42,108,0,6,42,148,0,6,42,188,0,6,42,228,0,6,43,12,0,6,43,52,0,6,43,92,0,6,43,132, + 0,6,43,172,0,6,43,212,0,6,43,248,0,6,44,24,0,6,44,60,0,6,44,96,0,6,44,132,0,6,44,164,0,6,44,208,0,6,44,252, + 0,6,45,40,0,6,45,84,0,6,45,104,0,6,45,172,0,6,45,240,0,6,46,32,0,6,46,80,0,6,46,148,0,6,46,236,0,6,47,112, + 0,6,48,0,0,6,48,16,0,6,48,160,0,6,48,204,0,6,48,220,0,6,49,64,0,6,50,28,0,6,50,164,0,6,51,84,0,6,51,176, + 0,6,52,68,0,6,52,140,0,6,53,8,0,6,53,100,0,6,53,244,0,6,54,88,0,6,54,240,0,6,55,0,0,6,55,16,0,6,55,88, + 0,6,55,160,0,6,55,204,0,6,55,244,0,6,56,36,0,6,56,80,0,6,56,216,0,6,57,92,0,6,58,20,0,6,58,184,0,6,59,20, + 0,6,59,128,0,6,59,248,0,6,60,144,0,6,61,28,0,6,61,132,0,6,61,224,0,6,62,72,0,6,62,160,0,6,63,12,0,6,63,44, + 0,6,63,76,0,6,63,148,0,6,63,216,0,6,63,232,0,6,64,16,0,6,64,108,0,6,64,192,0,6,64,208,0,6,65,48,0,6,65,108, + 0,6,65,184,0,6,66,72,0,6,66,252,0,6,67,92,0,6,67,184,0,6,68,36,0,6,68,148,0,6,69,40,0,6,69,128,0,6,70,24, + 0,6,70,172,0,6,70,244,0,6,71,4,0,6,71,48,0,6,71,120,0,6,71,180,0,6,71,208,0,6,72,28,0,6,72,72,0,6,72,104, + 0,6,72,140,0,6,72,176,0,6,72,212,0,6,72,244,0,6,73,8,0,6,73,28,0,6,73,48,0,6,73,68,0,6,73,104,0,6,73,124, + 0,6,73,144,0,6,73,164,0,6,73,184,0,6,73,220,0,6,73,240,0,6,74,4,0,6,74,24,0,6,74,44,0,6,74,80,0,6,74,100, + 0,6,74,120,0,6,74,140,0,6,74,168,0,6,74,208,0,6,77,124,0,6,80,44,0,6,82,216,0,6,85,136,0,6,85,220,0,6,86,68, + 0,6,86,184,0,6,87,96,0,6,87,188,0,6,88,44,0,6,88,176,0,6,89,48,0,6,89,132,0,6,89,232,0,6,90,152,0,6,91,4, + 0,6,91,100,0,6,91,216,0,6,92,60,0,6,92,148,0,6,93,32,0,6,93,112,0,6,93,240,0,6,94,88,0,6,95,8,0,6,95,104, + 0,6,95,252,0,6,96,100,0,6,96,216,0,6,97,64,0,6,97,192,0,6,98,20,0,6,98,136,0,6,99,0,0,6,99,84,0,6,99,204, + 0,6,100,60,0,6,100,180,0,6,101,44,0,6,101,144,0,6,102,0,0,6,102,132,0,6,103,24,0,6,103,164,0,6,104,116,0,6,104,200, + 0,6,105,40,0,6,105,152,0,6,105,240,0,6,106,84,0,6,106,184,0,6,107,24,0,6,107,124,0,6,107,236,0,6,108,92,0,6,108,180, + 0,6,109,12,0,6,109,112,0,6,109,232,0,6,110,104,0,6,110,248,0,6,111,112,0,6,111,248,0,6,112,112,0,6,112,244,0,6,113,132, + 0,6,113,252,0,6,114,132,0,6,115,8,0,6,115,124,0,6,116,44,0,6,116,208,0,6,117,80,0,6,118,48,0,6,118,240,0,6,119,112, + 0,6,120,104,0,6,121,52,0,6,121,220,0,6,122,120,0,6,123,40,0,6,123,240,0,6,124,8,0,6,124,60,0,6,124,84,0,6,124,160, + 0,6,125,12,0,6,125,52,0,6,125,132,0,6,125,216,0,6,126,4,0,6,126,76,0,6,126,136,0,6,126,232,0,6,127,16,0,6,127,40, + 0,6,127,64,0,6,127,96,0,6,127,128,0,6,127,152,0,6,127,176,0,6,127,200,0,6,127,224,0,6,127,248,0,6,128,16,0,6,128,40, + 0,6,128,68,0,6,128,92,0,6,128,116,0,6,128,144,0,6,128,168,0,6,128,192,0,6,128,216,0,6,128,240,0,6,129,8,0,6,129,32, + 0,6,129,56,0,6,129,80,0,6,129,104,0,6,129,128,0,6,129,152,0,6,129,176,0,6,129,200,0,6,129,224,0,6,129,248,0,6,130,16, + 0,6,130,40,0,6,130,172,0,6,130,196,0,6,130,220,0,6,130,244,0,6,131,12,0,6,131,36,0,6,131,60,0,6,131,84,0,6,131,108, + 0,6,131,132,0,6,131,156,0,6,131,180,0,6,131,204,0,6,131,228,0,6,131,252,0,6,132,20,0,6,132,44,0,6,132,68,0,6,132,92, + 0,6,132,116,0,6,132,140,0,6,132,164,0,6,132,188,0,6,132,212,0,6,132,236,0,6,133,4,0,6,133,28,0,6,133,52,0,6,133,76, + 0,6,133,100,0,6,133,124,0,6,133,148,0,6,133,172,0,6,133,196,0,6,133,220,0,6,133,244,0,6,134,12,0,6,134,36,0,6,134,60, + 0,6,134,84,0,6,134,108,0,6,134,132,0,6,134,156,0,6,134,180,0,6,134,204,0,6,134,228,0,6,134,252,0,6,135,20,0,6,135,44, + 0,6,135,68,0,6,135,92,0,6,135,116,0,6,135,140,0,6,135,164,0,6,135,188,0,6,135,212,0,6,135,236,0,6,136,4,0,6,136,28, + 0,6,136,52,0,6,136,76,0,6,136,92,0,6,137,8,0,6,137,24,0,6,137,40,0,6,137,64,0,6,137,88,0,6,137,112,0,6,137,136, + 0,6,137,160,0,6,137,184,0,6,137,208,0,6,137,232,0,6,138,0,0,6,138,24,0,6,138,48,0,6,138,72,0,6,138,88,0,6,138,208, + 0,6,138,232,0,6,139,0,0,6,139,24,0,6,139,48,0,6,139,64,0,6,139,228,0,6,139,244,0,6,140,4,0,6,140,28,0,6,140,52, + 0,6,140,76,0,6,140,100,0,6,140,124,0,6,140,148,0,6,140,196,0,6,141,4,0,6,141,20,0,6,141,36,0,6,141,60,0,6,141,84, + 0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,84, + 0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,84,0,6,141,124,0,6,141,164,0,6,141,236,0,6,142,52, + 0,6,142,72,0,6,142,96,0,6,142,116,0,6,142,168,0,6,142,188,0,6,142,208,0,6,142,232,0,6,142,252,0,6,143,20,0,6,143,40, + 0,6,143,64,0,6,143,84,0,6,143,108,0,6,143,128,0,6,143,152,0,6,143,168,0,6,143,192,0,6,143,216,0,6,143,240,0,6,144,8, + 0,6,144,32,0,6,144,56,0,6,144,80,0,6,144,104,0,6,144,128,0,6,144,152,0,6,144,176,0,6,144,200,0,6,144,216,0,6,145,12, + 0,6,145,36,0,6,145,60,0,6,145,84,0,6,145,108,0,6,145,132,0,6,145,156,0,6,145,180,0,6,145,204,0,6,145,228,0,6,145,252, + 0,6,146,20,0,6,146,44,0,6,146,68,0,6,146,92,0,6,146,116,0,6,146,140,0,6,146,164,0,6,146,188,0,6,146,204,0,6,147,96, + 0,6,147,200,0,6,148,76,0,6,148,100,0,6,148,124,0,6,148,148,0,6,148,172,0,6,148,188,0,6,149,32,0,6,149,56,0,6,149,80, + 0,6,149,96,0,6,149,180,0,6,149,204,0,6,149,228,0,6,149,244,0,6,150,200,0,6,151,88,0,6,151,248,0,6,152,16,0,6,152,40, + 0,6,152,64,0,6,152,88,0,6,152,104,0,6,153,68,0,6,153,208,0,6,154,116,0,6,154,140,0,6,154,164,0,6,154,188,0,6,154,212, + 0,6,154,228,0,6,155,104,0,6,155,212,0,6,156,88,0,6,156,112,0,6,156,136,0,6,156,160,0,6,156,184,0,6,156,200,0,6,157,80, + 0,6,157,168,0,6,158,56,0,6,158,80,0,6,158,104,0,6,158,128,0,6,158,152,0,6,158,176,0,6,158,200,0,6,158,224,0,6,158,248, + 0,6,159,16,0,6,159,40,0,6,159,64,0,6,159,88,0,6,159,104,0,6,160,52,0,6,160,160,0,6,161,40,0,6,161,56,0,6,161,172, + 0,6,161,224,0,6,162,36,0,6,162,52,0,6,162,212,0,6,163,68,0,6,163,212,0,6,163,236,0,6,164,4,0,6,164,28,0,6,164,52, + 0,6,164,68,0,6,164,188,0,6,165,120,0,6,166,8,0,6,166,24,0,6,166,172,0,6,166,188,0,6,167,96,0,6,167,120,0,6,167,144, + 0,6,167,168,0,6,167,192,0,6,167,216,0,6,167,240,0,6,168,8,0,6,168,32,0,6,168,56,0,6,168,80,0,6,168,164,0,6,169,12, + 0,6,169,12,0,6,169,12,0,6,169,12,0,6,169,12,0,6,169,12,0,6,169,152,0,6,169,212,0,6,170,76,0,6,170,120,0,6,170,200, + 0,6,171,8,0,6,171,56,0,6,171,100,0,6,171,160,0,6,172,60,0,6,172,88,0,6,172,144,0,6,172,184,0,6,172,248,0,6,173,40, + 0,6,173,132,0,6,174,20,0,6,174,92,0,6,174,148,0,6,174,252,0,6,175,84,0,6,175,140,0,6,175,184,0,6,175,224,0,6,176,36, + 0,6,176,160,0,6,176,216,0,6,177,88,0,6,177,156,0,6,177,228,0,6,178,8,0,6,178,80,0,6,178,96,0,6,178,140,0,6,178,156, + 0,6,178,208,0,6,179,8,0,6,179,36,0,6,179,64,0,6,179,92,0,6,179,120,0,6,179,148,0,6,179,188,0,6,179,228,0,6,180,16, + 0,6,180,56,0,6,180,96,0,6,180,140,0,6,180,180,0,6,180,220,0,6,181,4,0,6,181,44,0,6,181,84,0,6,181,128,0,6,181,168, + 0,6,181,208,0,6,181,252,0,6,182,36,0,6,182,76,0,6,182,116,0,6,182,156,0,6,182,196,0,6,182,240,0,6,183,24,0,6,183,64, + 0,6,183,108,0,6,183,148,0,6,183,188,0,6,183,228,0,6,184,12,0,6,184,52,0,6,184,96,0,6,184,136,0,6,184,176,0,6,184,220, + 0,6,185,4,0,6,185,44,0,6,185,84,0,6,185,124,0,6,185,164,0,6,185,208,0,6,185,248,0,6,186,32,0,6,186,76,0,6,186,116, + 0,6,186,156,0,6,186,196,0,6,186,236,0,6,187,20,0,6,187,64,0,6,187,104,0,6,187,144,0,6,187,188,0,6,187,228,0,6,188,12, + 0,6,188,52,0,6,188,92,0,6,188,132,0,6,188,176,0,6,188,216,0,6,189,0,0,6,189,44,0,6,189,84,0,6,189,124,0,6,189,164, + 0,6,189,204,0,6,189,244,0,6,190,32,0,6,190,72,0,6,190,112,0,6,190,156,0,6,190,196,0,6,190,236,0,6,191,20,0,6,191,60, + 0,6,191,100,0,6,191,144,0,6,191,184,0,6,191,224,0,6,192,12,0,6,192,52,0,6,192,92,0,6,192,132,0,6,192,208,0,6,193,96, + 0,6,193,204,0,6,194,12,0,6,194,72,0,6,194,212,0,6,195,16,0,6,195,92,0,6,195,160,0,6,195,208,0,6,196,44,0,6,196,200, + 0,6,197,100,0,6,197,156,0,6,198,16,0,6,198,76,0,6,198,180,0,6,199,8,0,6,199,80,0,6,199,244,0,6,200,144,0,6,201,8, + 0,6,201,164,0,6,202,28,0,6,202,132,0,6,203,76,0,6,203,192,0,6,203,248,0,6,204,84,0,6,204,152,0,6,204,228,0,6,205,160, + 0,6,206,20,0,6,206,160,0,6,207,60,0,6,207,216,0,6,208,36,0,6,208,240,0,6,209,76,0,6,209,192,0,6,209,252,0,6,210,92, + 0,6,210,176,0,6,211,0,0,6,211,68,0,6,211,84,0,6,211,100,0,6,211,116,0,6,211,132,0,6,211,148,0,6,211,164,0,6,211,180, + 0,6,211,196,0,6,211,212,0,6,211,228,0,6,211,244,0,6,212,4,0,6,212,20,0,6,212,36,0,6,212,52,0,6,212,68,0,6,212,84, + 0,6,212,100,0,6,212,116,0,6,212,132,0,6,212,148,0,6,212,164,0,6,212,180,0,6,212,196,0,6,212,212,0,6,212,228,0,6,212,244, + 0,6,213,4,0,6,213,20,0,6,213,36,0,6,213,52,0,6,213,68,0,6,213,84,0,6,213,100,0,6,213,116,0,6,213,132,0,6,213,148, + 0,6,213,164,0,6,213,180,0,6,213,196,0,6,213,212,0,6,213,228,0,6,213,244,0,6,214,4,0,6,214,20,0,6,214,36,0,6,214,52, + 0,6,214,68,0,6,214,84,0,6,214,100,0,6,214,116,0,6,214,132,0,6,214,240,0,6,215,48,0,6,215,192,0,6,216,84,0,6,216,160, + 0,6,217,16,0,6,217,156,0,6,217,216,0,6,218,180,0,6,219,64,0,6,219,80,0,6,219,96,0,6,219,112,0,6,219,128,0,6,219,144, + 0,6,219,160,0,6,219,176,0,6,219,192,0,6,219,208,0,6,219,224,0,6,220,12,0,6,220,68,0,6,220,192,0,6,221,124,0,6,222,120, + 0,6,223,180,0,6,225,48,0,6,226,228,0,6,227,96,0,6,228,28,0,6,229,28,0,6,230,88,0,6,231,212,0,6,233,144,0,6,235,132, + 0,6,236,64,0,6,237,60,0,6,238,120,0,6,239,244,0,6,241,164,0,6,243,160,0,6,245,212,0,6,246,208,0,6,248,12,0,6,249,140, + 0,6,251,72,0,6,253,68,0,6,255,128,0,7,1,244,0,7,3,40,0,7,4,156,0,7,6,92,0,7,8,88,0,7,10,148,0,7,13,16, + 0,7,15,196,0,7,17,60,0,7,18,248,0,7,20,248,0,7,23,52,0,7,25,176,0,7,28,108,0,7,31,96,0,7,33,32,0,7,35,40, + 0,7,37,112,0,7,39,248,0,7,42,188,0,7,45,196,0,7,48,244,0,7,49,32,0,7,49,88,0,7,49,212,0,7,50,144,0,7,51,140, + 0,7,52,200,0,7,54,68,0,7,55,248,0,7,56,116,0,7,57,48,0,7,58,48,0,7,59,108,0,7,60,232,0,7,62,164,0,7,64,152, + 0,7,65,84,0,7,66,80,0,7,67,140,0,7,69,8,0,7,70,196,0,7,72,192,0,7,74,244,0,7,75,240,0,7,77,44,0,7,78,172, + 0,7,80,104,0,7,82,100,0,7,84,160,0,7,87,20,0,7,88,72,0,7,89,188,0,7,91,120,0,7,93,116,0,7,95,176,0,7,98,28, + 0,7,100,208,0,7,102,72,0,7,104,4,0,7,105,244,0,7,108,48,0,7,110,172,0,7,113,104,0,7,116,92,0,7,118,32,0,7,120,40, + 0,7,122,112,0,7,124,244,0,7,127,184,0,7,130,168,0,7,133,216,0,7,134,52,0,7,134,240,0,7,135,204,0,7,136,200,0,7,137,136, + 0,7,138,116,0,7,139,140,0,7,140,56,0,7,141,108,0,7,142,128,0,7,143,112,0,7,144,36,0,7,144,252,0,7,145,220,0,7,146,152, + 0,7,147,80,0,7,148,40,0,7,149,32,0,7,149,220,0,7,150,196,0,7,151,216,0,7,152,128,0,7,153,176,0,7,154,192,0,7,155,172, + 0,7,156,92,0,7,157,48,0,7,158,12,0,7,158,196,0,7,159,84,0,7,160,4,0,7,160,212,0,7,161,100,0,7,162,36,0,7,163,12, + 0,7,163,140,0,7,164,148,0,7,165,124,0,7,166,64,0,7,166,200,0,7,167,116,0,7,168,40,0,7,168,180,0,7,169,48,0,7,170,8, + 0,7,171,0,0,7,172,24,0,7,172,240,0,7,173,248,0,7,175,40,0,7,175,240,0,7,177,64,0,7,178,112,0,7,179,124,0,7,180,76, + 0,7,181,64,0,7,182,60,0,7,183,16,0,7,183,180,0,7,185,188,0,7,188,164,0,7,190,204,0,7,192,236,0,7,193,236,0,7,194,236, + 0,7,196,132,0,7,197,100,0,7,198,68,0,7,199,72,0,7,200,28,0,7,201,88,0,7,202,100,0,7,203,60,0,7,204,28,0,7,205,40, + 0,7,206,8,0,7,207,48,0,7,208,4,0,7,208,172,0,7,209,100,0,7,209,248,0,7,210,184,0,7,211,172,0,7,212,100,0,7,213,28, + 0,7,214,20,0,7,214,232,0,7,215,252,0,7,216,212,0,7,217,172,0,7,218,132,0,7,219,84,0,7,220,32,0,7,221,32,0,7,222,80, + 0,7,223,80,0,7,224,132,0,7,225,148,0,7,226,104,0,7,227,76,0,7,228,44,0,7,229,44,0,7,231,40,0,7,232,20,0,7,233,40, + 0,7,233,252,0,7,235,72,0,7,236,12,0,7,236,240,0,7,237,240,0,7,239,188,0,7,240,252,0,7,242,124,0,7,243,156,0,7,244,112, + 0,7,245,24,0,7,245,248,0,7,248,64,0,7,250,196,0,7,253,52,0,7,255,60,0,8,1,116,0,8,3,180,0,8,6,4,0,8,7,196, + 0,8,9,132,0,8,9,168,0,8,10,116,0,8,11,16,0,8,11,224,0,8,12,136,0,8,13,36,0,8,13,208,0,8,14,4,0,8,14,164, + 0,8,15,4,0,8,15,64,0,8,15,108,0,8,15,132,0,8,15,168,0,8,15,216,0,8,16,8,0,8,16,44,0,8,16,100,0,8,16,224, + 0,8,16,240,0,8,17,0,0,8,17,192,0,8,18,92,0,8,18,252,0,8,19,196,0,8,19,212,0,8,19,228,0,8,19,252,0,8,20,20, + 0,8,20,100,0,8,20,132,0,8,20,164,0,8,20,196,0,8,20,220,0,8,20,244,0,8,21,12,0,8,21,36,0,8,21,60,0,8,21,84, + 0,8,21,108,0,8,21,132,0,8,21,156,0,8,21,180,0,8,21,204,0,8,21,228,0,8,22,4,0,8,22,36,0,8,22,68,0,8,22,100, + 0,8,22,244,0,8,23,84,0,8,23,164,0,8,23,192,0,8,23,220,0,8,23,248,0,8,24,20,0,8,24,48,0,8,24,76,0,8,24,104, + 0,8,24,132,0,8,24,160,0,8,24,188,0,8,24,216,0,8,24,244,0,8,25,16,0,8,25,44,0,8,25,72,0,8,25,100,0,8,25,128, + 0,8,25,156,0,8,25,184,0,8,25,212,0,8,25,236,0,8,26,8,0,8,26,64,0,8,26,88,0,8,26,172,0,8,26,196,0,8,26,220, + 0,8,26,244,0,8,27,12,0,8,27,44,0,8,27,76,0,8,27,100,0,8,27,200,0,8,27,216,0,8,27,232,0,8,27,248,0,8,28,16, + 0,8,28,60,0,8,28,148,0,8,28,172,0,8,28,196,0,8,28,232,0,8,29,64,0,8,29,92,0,8,29,116,0,8,29,140,0,8,29,164, + 0,8,29,188,0,8,29,212,0,8,29,236,0,8,30,4,0,8,30,28,0,8,30,84,0,8,30,148,0,8,30,204,0,8,31,92,0,8,31,252, + 0,8,32,140,0,8,32,244,0,8,33,100,0,8,33,204,0,8,33,252,0,8,34,44,0,8,34,88,0,8,34,168,0,8,35,0,0,8,35,76, + 0,8,35,152,0,8,35,228,0,8,36,44,0,8,36,212,0,8,37,132,0,8,38,40,0,8,38,132,0,8,38,220,0,8,39,52,0,8,39,204, + 0,8,40,112,0,8,41,12,0,8,41,104,0,8,41,204,0,8,42,40,0,8,42,132,0,8,42,232,0,8,43,68,0,8,43,196,0,8,44,72, + 0,8,44,204,0,8,45,88,0,8,45,240,0,8,46,124,0,8,46,224,0,8,47,76,0,8,47,176,0,8,48,84,0,8,49,0,0,8,49,164, + 0,8,50,8,0,8,50,116,0,8,50,216,0,8,51,100,0,8,51,248,0,8,52,132,0,8,52,216,0,8,53,52,0,8,53,136,0,8,54,0, + 0,8,54,128,0,8,54,248,0,8,55,160,0,8,56,80,0,8,56,248,0,8,57,92,0,8,57,200,0,8,58,44,0,8,58,196,0,8,59,104, + 0,8,60,0,0,8,60,80,0,8,60,168,0,8,60,248,0,8,61,108,0,8,61,228,0,8,62,88,0,8,62,220,0,8,63,100,0,8,63,232, + 0,8,64,56,0,8,64,144,0,8,64,224,0,8,65,56,0,8,65,152,0,8,65,240,0,8,66,92,0,8,66,208,0,8,67,60,0,8,68,0, + 0,8,68,204,0,8,69,144,0,8,70,24,0,8,70,164,0,8,71,44,0,8,71,64,0,8,71,100,0,8,71,136,0,8,71,172,0,8,71,208, + 0,8,71,244,0,8,72,24,0,8,72,60,0,8,72,96,0,8,72,204,0,8,73,8,0,8,73,68,0,8,73,176,0,8,73,200,0,8,73,224, + 0,8,74,0,0,8,74,24,0,8,74,48,0,8,74,72,0,8,74,96,0,8,74,128,0,8,74,152,0,8,74,176,0,8,74,208,0,8,74,240, + 0,8,75,16,0,8,75,40,0,8,75,64,0,8,75,88,0,8,75,120,0,8,75,152,0,8,75,184,0,8,75,208,0,8,75,232,0,8,76,0, + 0,8,76,24,0,8,76,48,0,8,76,72,0,8,76,96,0,8,76,120,0,8,76,144,0,8,76,168,0,8,76,192,0,8,76,216,0,8,76,240, + 0,8,77,8,0,8,77,32,0,8,77,64,0,8,77,96,0,8,77,128,0,8,77,152,0,8,77,176,0,8,77,200,0,8,77,224,0,8,77,248, + 0,8,78,16,0,8,78,40,0,8,78,64,0,8,78,88,0,8,79,4,0,8,79,116,0,8,79,248,0,8,80,16,0,8,80,40,0,8,80,64, + 0,8,80,88,0,8,80,112,0,8,80,136,0,8,80,160,0,8,80,184,0,8,80,208,0,8,80,232,0,8,81,0,0,8,81,24,0,8,81,48, + 0,8,81,72,0,8,81,96,0,8,81,120,0,8,81,144,0,8,81,168,0,8,81,192,0,8,81,216,0,8,81,240,0,8,82,8,0,8,82,32, + 0,8,82,56,0,8,82,80,0,8,82,104,0,8,82,128,0,8,82,160,0,8,82,192,0,8,82,224,0,8,83,0,0,8,83,32,0,8,83,64, + 0,8,83,88,0,8,83,112,0,8,83,136,0,1,0,0,23,220,3,84,0,43,0,104,0,12,0,2,0,16,0,153,0,8,0,0,4,21,2,22, + 0,8,0,4,0,0,0,26,1,62,0,1,0,0,0,0,0,0,0,152,1,50,0,1,0,0,0,0,0,1,0,11,1,227,0,1,0,0,0,0, + 0,2,0,4,1,249,0,1,0,0,0,0,0,3,0,11,2,22,0,1,0,0,0,0,0,4,0,11,2,58,0,1,0,0,0,0,0,5,0,12, + 2,96,0,1,0,0,0,0,0,6,0,10,2,131,0,1,0,0,0,0,0,8,0,17,2,178,0,1,0,0,0,0,0,11,0,29,3,0,0,1, + 0,0,0,0,0,13,18,157,40,90,0,1,0,0,0,0,0,14,0,52,59,98,0,1,0,0,0,0,0,16,0,11,59,175,0,1,0,0,0,0, + 0,17,0,4,59,197,0,3,0,1,4,9,0,0,1,48,0,0,0,3,0,1,4,9,0,1,0,22,1,203,0,3,0,1,4,9,0,2,0,8, + 1,239,0,3,0,1,4,9,0,3,0,22,1,254,0,3,0,1,4,9,0,4,0,22,2,34,0,3,0,1,4,9,0,5,0,24,2,70,0,3, + 0,1,4,9,0,6,0,20,2,109,0,3,0,1,4,9,0,8,0,34,2,142,0,3,0,1,4,9,0,11,0,58,2,196,0,3,0,1,4,9, + 0,13,37,58,3,30,0,3,0,1,4,9,0,14,0,104,58,248,0,3,0,1,4,9,0,16,0,22,59,151,0,3,0,1,4,9,0,17,0,8, + 59,187,0,67,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,32,0,40,0,99,0,41,0,32,0,50,0,48,0,48,0,51,0,32, + 0,98,0,121,0,32,0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,44,0,32,0,73,0,110,0,99,0,46,0,32,0,65, + 0,108,0,108,0,32,0,82,0,105,0,103,0,104,0,116,0,115,0,32,0,82,0,101,0,115,0,101,0,114,0,118,0,101,0,100,0,46,0,10, + 0,67,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,32,0,40,0,99,0,41,0,32,0,50,0,48,0,48,0,54,0,32,0,98, + 0,121,0,32,0,84,0,97,0,118,0,109,0,106,0,111,0,110,0,103,0,32,0,66,0,97,0,104,0,46,0,32,0,65,0,108,0,108,0,32, + 0,82,0,105,0,103,0,104,0,116,0,115,0,32,0,82,0,101,0,115,0,101,0,114,0,118,0,101,0,100,0,46,0,10,0,68,0,101,0,106, + 0,97,0,86,0,117,0,32,0,99,0,104,0,97,0,110,0,103,0,101,0,115,0,32,0,97,0,114,0,101,0,32,0,105,0,110,0,32,0,112, + 0,117,0,98,0,108,0,105,0,99,0,32,0,100,0,111,0,109,0,97,0,105,0,110,0,10,0,0,67,111,112,121,114,105,103,104,116,32,40,99, + 41,32,50,48,48,51,32,98,121,32,66,105,116,115,116,114,101,97,109,44,32,73,110,99,46,32,65,108,108,32,82,105,103,104,116,115,32,82,101,115, + 101,114,118,101,100,46,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,48,54,32,98,121,32,84,97,118,109,106,111,110,103,32,66,97, + 104,46,32,65,108,108,32,82,105,103,104,116,115,32,82,101,115,101,114,118,101,100,46,10,68,101,106,97,86,117,32,99,104,97,110,103,101,115,32,97, + 114,101,32,105,110,32,112,117,98,108,105,99,32,100,111,109,97,105,110,10,0,0,68,0,101,0,106,0,97,0,86,0,117,0,32,0,83,0,97,0, + 110,0,115,0,0,68,101,106,97,86,117,32,83,97,110,115,0,0,66,0,111,0,111,0,107,0,0,66,111,111,107,0,0,68,0,101,0,106,0,97, + 0,86,0,117,0,32,0,83,0,97,0,110,0,115,0,0,68,101,106,97,86,117,32,83,97,110,115,0,0,68,0,101,0,106,0,97,0,86,0,117, + 0,32,0,83,0,97,0,110,0,115,0,0,68,101,106,97,86,117,32,83,97,110,115,0,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32, + 0,50,0,46,0,51,0,52,0,0,86,101,114,115,105,111,110,32,50,46,51,52,0,0,68,0,101,0,106,0,97,0,86,0,117,0,83,0,97,0, + 110,0,115,0,0,68,101,106,97,86,117,83,97,110,115,0,0,68,0,101,0,106,0,97,0,86,0,117,0,32,0,102,0,111,0,110,0,116,0,115, + 0,32,0,116,0,101,0,97,0,109,0,0,68,101,106,97,86,117,32,102,111,110,116,115,32,116,101,97,109,0,0,104,0,116,0,116,0,112,0,58, + 0,47,0,47,0,100,0,101,0,106,0,97,0,118,0,117,0,46,0,115,0,111,0,117,0,114,0,99,0,101,0,102,0,111,0,114,0,103,0,101, + 0,46,0,110,0,101,0,116,0,0,104,116,116,112,58,47,47,100,101,106,97,118,117,46,115,111,117,114,99,101,102,111,114,103,101,46,110,101,116,0, + 0,70,0,111,0,110,0,116,0,115,0,32,0,97,0,114,0,101,0,32,0,40,0,99,0,41,0,32,0,66,0,105,0,116,0,115,0,116,0,114, + 0,101,0,97,0,109,0,32,0,40,0,115,0,101,0,101,0,32,0,98,0,101,0,108,0,111,0,119,0,41,0,46,0,32,0,68,0,101,0,106, + 0,97,0,86,0,117,0,32,0,99,0,104,0,97,0,110,0,103,0,101,0,115,0,32,0,97,0,114,0,101,0,32,0,105,0,110,0,32,0,112, + 0,117,0,98,0,108,0,105,0,99,0,32,0,100,0,111,0,109,0,97,0,105,0,110,0,46,0,32,0,71,0,108,0,121,0,112,0,104,0,115, + 0,32,0,105,0,109,0,112,0,111,0,114,0,116,0,101,0,100,0,32,0,102,0,114,0,111,0,109,0,32,0,65,0,114,0,101,0,118,0,32, + 0,102,0,111,0,110,0,116,0,115,0,32,0,97,0,114,0,101,0,32,0,40,0,99,0,41,0,32,0,84,0,97,0,118,0,109,0,106,0,117, + 0,110,0,103,0,32,0,66,0,97,0,104,0,32,0,40,0,115,0,101,0,101,0,32,0,98,0,101,0,108,0,111,0,119,0,41,0,10,0,10, + 0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,32,0,86,0,101,0,114,0,97,0,32,0,70,0,111,0,110,0,116,0,115, + 0,32,0,67,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,10,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45, + 0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45, + 0,45,0,10,0,10,0,67,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,32,0,40,0,99,0,41,0,32,0,50,0,48,0,48, + 0,51,0,32,0,98,0,121,0,32,0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,44,0,32,0,73,0,110,0,99,0,46, + 0,32,0,65,0,108,0,108,0,32,0,82,0,105,0,103,0,104,0,116,0,115,0,32,0,82,0,101,0,115,0,101,0,114,0,118,0,101,0,100, + 0,46,0,32,0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,32,0,86,0,101,0,114,0,97,0,32,0,105,0,115,0,10, + 0,97,0,32,0,116,0,114,0,97,0,100,0,101,0,109,0,97,0,114,0,107,0,32,0,111,0,102,0,32,0,66,0,105,0,116,0,115,0,116, + 0,114,0,101,0,97,0,109,0,44,0,32,0,73,0,110,0,99,0,46,0,10,0,10,0,80,0,101,0,114,0,109,0,105,0,115,0,115,0,105, + 0,111,0,110,0,32,0,105,0,115,0,32,0,104,0,101,0,114,0,101,0,98,0,121,0,32,0,103,0,114,0,97,0,110,0,116,0,101,0,100, + 0,44,0,32,0,102,0,114,0,101,0,101,0,32,0,111,0,102,0,32,0,99,0,104,0,97,0,114,0,103,0,101,0,44,0,32,0,116,0,111, + 0,32,0,97,0,110,0,121,0,32,0,112,0,101,0,114,0,115,0,111,0,110,0,32,0,111,0,98,0,116,0,97,0,105,0,110,0,105,0,110, + 0,103,0,32,0,97,0,32,0,99,0,111,0,112,0,121,0,10,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,102,0,111,0,110,0,116, + 0,115,0,32,0,97,0,99,0,99,0,111,0,109,0,112,0,97,0,110,0,121,0,105,0,110,0,103,0,32,0,116,0,104,0,105,0,115,0,32, + 0,108,0,105,0,99,0,101,0,110,0,115,0,101,0,32,0,40,0,34,0,70,0,111,0,110,0,116,0,115,0,34,0,41,0,32,0,97,0,110, + 0,100,0,32,0,97,0,115,0,115,0,111,0,99,0,105,0,97,0,116,0,101,0,100,0,10,0,100,0,111,0,99,0,117,0,109,0,101,0,110, + 0,116,0,97,0,116,0,105,0,111,0,110,0,32,0,102,0,105,0,108,0,101,0,115,0,32,0,40,0,116,0,104,0,101,0,32,0,34,0,70, + 0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,34,0,41,0,44,0,32,0,116,0,111,0,32,0,114, + 0,101,0,112,0,114,0,111,0,100,0,117,0,99,0,101,0,32,0,97,0,110,0,100,0,32,0,100,0,105,0,115,0,116,0,114,0,105,0,98, + 0,117,0,116,0,101,0,32,0,116,0,104,0,101,0,10,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114, + 0,101,0,44,0,32,0,105,0,110,0,99,0,108,0,117,0,100,0,105,0,110,0,103,0,32,0,119,0,105,0,116,0,104,0,111,0,117,0,116, + 0,32,0,108,0,105,0,109,0,105,0,116,0,97,0,116,0,105,0,111,0,110,0,32,0,116,0,104,0,101,0,32,0,114,0,105,0,103,0,104, + 0,116,0,115,0,32,0,116,0,111,0,32,0,117,0,115,0,101,0,44,0,32,0,99,0,111,0,112,0,121,0,44,0,32,0,109,0,101,0,114, + 0,103,0,101,0,44,0,10,0,112,0,117,0,98,0,108,0,105,0,115,0,104,0,44,0,32,0,100,0,105,0,115,0,116,0,114,0,105,0,98, + 0,117,0,116,0,101,0,44,0,32,0,97,0,110,0,100,0,47,0,111,0,114,0,32,0,115,0,101,0,108,0,108,0,32,0,99,0,111,0,112, + 0,105,0,101,0,115,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116, + 0,119,0,97,0,114,0,101,0,44,0,32,0,97,0,110,0,100,0,32,0,116,0,111,0,32,0,112,0,101,0,114,0,109,0,105,0,116,0,10, + 0,112,0,101,0,114,0,115,0,111,0,110,0,115,0,32,0,116,0,111,0,32,0,119,0,104,0,111,0,109,0,32,0,116,0,104,0,101,0,32, + 0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,105,0,115,0,32,0,102,0,117,0,114, + 0,110,0,105,0,115,0,104,0,101,0,100,0,32,0,116,0,111,0,32,0,100,0,111,0,32,0,115,0,111,0,44,0,32,0,115,0,117,0,98, + 0,106,0,101,0,99,0,116,0,32,0,116,0,111,0,32,0,116,0,104,0,101,0,10,0,102,0,111,0,108,0,108,0,111,0,119,0,105,0,110, + 0,103,0,32,0,99,0,111,0,110,0,100,0,105,0,116,0,105,0,111,0,110,0,115,0,58,0,10,0,10,0,84,0,104,0,101,0,32,0,97, + 0,98,0,111,0,118,0,101,0,32,0,99,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,32,0,97,0,110,0,100,0,32,0,116, + 0,114,0,97,0,100,0,101,0,109,0,97,0,114,0,107,0,32,0,110,0,111,0,116,0,105,0,99,0,101,0,115,0,32,0,97,0,110,0,100, + 0,32,0,116,0,104,0,105,0,115,0,32,0,112,0,101,0,114,0,109,0,105,0,115,0,115,0,105,0,111,0,110,0,32,0,110,0,111,0,116, + 0,105,0,99,0,101,0,32,0,115,0,104,0,97,0,108,0,108,0,10,0,98,0,101,0,32,0,105,0,110,0,99,0,108,0,117,0,100,0,101, + 0,100,0,32,0,105,0,110,0,32,0,97,0,108,0,108,0,32,0,99,0,111,0,112,0,105,0,101,0,115,0,32,0,111,0,102,0,32,0,111, + 0,110,0,101,0,32,0,111,0,114,0,32,0,109,0,111,0,114,0,101,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,111, + 0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,116,0,121,0,112,0,101,0,102,0,97,0,99,0,101, + 0,115,0,46,0,10,0,10,0,84,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114, + 0,101,0,32,0,109,0,97,0,121,0,32,0,98,0,101,0,32,0,109,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,44,0,32,0,97, + 0,108,0,116,0,101,0,114,0,101,0,100,0,44,0,32,0,111,0,114,0,32,0,97,0,100,0,100,0,101,0,100,0,32,0,116,0,111,0,44, + 0,32,0,97,0,110,0,100,0,32,0,105,0,110,0,32,0,112,0,97,0,114,0,116,0,105,0,99,0,117,0,108,0,97,0,114,0,10,0,116, + 0,104,0,101,0,32,0,100,0,101,0,115,0,105,0,103,0,110,0,115,0,32,0,111,0,102,0,32,0,103,0,108,0,121,0,112,0,104,0,115, + 0,32,0,111,0,114,0,32,0,99,0,104,0,97,0,114,0,97,0,99,0,116,0,101,0,114,0,115,0,32,0,105,0,110,0,32,0,116,0,104, + 0,101,0,32,0,70,0,111,0,110,0,116,0,115,0,32,0,109,0,97,0,121,0,32,0,98,0,101,0,32,0,109,0,111,0,100,0,105,0,102, + 0,105,0,101,0,100,0,32,0,97,0,110,0,100,0,10,0,97,0,100,0,100,0,105,0,116,0,105,0,111,0,110,0,97,0,108,0,32,0,103, + 0,108,0,121,0,112,0,104,0,115,0,32,0,111,0,114,0,32,0,99,0,104,0,97,0,114,0,97,0,99,0,116,0,101,0,114,0,115,0,32, + 0,109,0,97,0,121,0,32,0,98,0,101,0,32,0,97,0,100,0,100,0,101,0,100,0,32,0,116,0,111,0,32,0,116,0,104,0,101,0,32, + 0,70,0,111,0,110,0,116,0,115,0,44,0,32,0,111,0,110,0,108,0,121,0,32,0,105,0,102,0,32,0,116,0,104,0,101,0,32,0,102, + 0,111,0,110,0,116,0,115,0,10,0,97,0,114,0,101,0,32,0,114,0,101,0,110,0,97,0,109,0,101,0,100,0,32,0,116,0,111,0,32, + 0,110,0,97,0,109,0,101,0,115,0,32,0,110,0,111,0,116,0,32,0,99,0,111,0,110,0,116,0,97,0,105,0,110,0,105,0,110,0,103, + 0,32,0,101,0,105,0,116,0,104,0,101,0,114,0,32,0,116,0,104,0,101,0,32,0,119,0,111,0,114,0,100,0,115,0,32,0,34,0,66, + 0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,34,0,32,0,111,0,114,0,32,0,116,0,104,0,101,0,32,0,119,0,111,0,114, + 0,100,0,10,0,34,0,86,0,101,0,114,0,97,0,34,0,46,0,10,0,10,0,84,0,104,0,105,0,115,0,32,0,76,0,105,0,99,0,101, + 0,110,0,115,0,101,0,32,0,98,0,101,0,99,0,111,0,109,0,101,0,115,0,32,0,110,0,117,0,108,0,108,0,32,0,97,0,110,0,100, + 0,32,0,118,0,111,0,105,0,100,0,32,0,116,0,111,0,32,0,116,0,104,0,101,0,32,0,101,0,120,0,116,0,101,0,110,0,116,0,32, + 0,97,0,112,0,112,0,108,0,105,0,99,0,97,0,98,0,108,0,101,0,32,0,116,0,111,0,32,0,70,0,111,0,110,0,116,0,115,0,32, + 0,111,0,114,0,32,0,70,0,111,0,110,0,116,0,10,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,116,0,104,0,97, + 0,116,0,32,0,104,0,97,0,115,0,32,0,98,0,101,0,101,0,110,0,32,0,109,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,32, + 0,97,0,110,0,100,0,32,0,105,0,115,0,32,0,100,0,105,0,115,0,116,0,114,0,105,0,98,0,117,0,116,0,101,0,100,0,32,0,117, + 0,110,0,100,0,101,0,114,0,32,0,116,0,104,0,101,0,32,0,34,0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,10, + 0,86,0,101,0,114,0,97,0,34,0,32,0,110,0,97,0,109,0,101,0,115,0,46,0,10,0,10,0,84,0,104,0,101,0,32,0,70,0,111, + 0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,109,0,97,0,121,0,32,0,98,0,101,0,32,0,115, + 0,111,0,108,0,100,0,32,0,97,0,115,0,32,0,112,0,97,0,114,0,116,0,32,0,111,0,102,0,32,0,97,0,32,0,108,0,97,0,114, + 0,103,0,101,0,114,0,32,0,115,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,112,0,97,0,99,0,107,0,97,0,103,0,101, + 0,32,0,98,0,117,0,116,0,32,0,110,0,111,0,10,0,99,0,111,0,112,0,121,0,32,0,111,0,102,0,32,0,111,0,110,0,101,0,32, + 0,111,0,114,0,32,0,109,0,111,0,114,0,101,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32, + 0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,116,0,121,0,112,0,101,0,102,0,97,0,99,0,101,0,115,0,32,0,109, + 0,97,0,121,0,32,0,98,0,101,0,32,0,115,0,111,0,108,0,100,0,32,0,98,0,121,0,32,0,105,0,116,0,115,0,101,0,108,0,102, + 0,46,0,10,0,10,0,84,0,72,0,69,0,32,0,70,0,79,0,78,0,84,0,32,0,83,0,79,0,70,0,84,0,87,0,65,0,82,0,69, + 0,32,0,73,0,83,0,32,0,80,0,82,0,79,0,86,0,73,0,68,0,69,0,68,0,32,0,34,0,65,0,83,0,32,0,73,0,83,0,34, + 0,44,0,32,0,87,0,73,0,84,0,72,0,79,0,85,0,84,0,32,0,87,0,65,0,82,0,82,0,65,0,78,0,84,0,89,0,32,0,79, + 0,70,0,32,0,65,0,78,0,89,0,32,0,75,0,73,0,78,0,68,0,44,0,32,0,69,0,88,0,80,0,82,0,69,0,83,0,83,0,10, + 0,79,0,82,0,32,0,73,0,77,0,80,0,76,0,73,0,69,0,68,0,44,0,32,0,73,0,78,0,67,0,76,0,85,0,68,0,73,0,78, + 0,71,0,32,0,66,0,85,0,84,0,32,0,78,0,79,0,84,0,32,0,76,0,73,0,77,0,73,0,84,0,69,0,68,0,32,0,84,0,79, + 0,32,0,65,0,78,0,89,0,32,0,87,0,65,0,82,0,82,0,65,0,78,0,84,0,73,0,69,0,83,0,32,0,79,0,70,0,32,0,77, + 0,69,0,82,0,67,0,72,0,65,0,78,0,84,0,65,0,66,0,73,0,76,0,73,0,84,0,89,0,44,0,10,0,70,0,73,0,84,0,78, + 0,69,0,83,0,83,0,32,0,70,0,79,0,82,0,32,0,65,0,32,0,80,0,65,0,82,0,84,0,73,0,67,0,85,0,76,0,65,0,82, + 0,32,0,80,0,85,0,82,0,80,0,79,0,83,0,69,0,32,0,65,0,78,0,68,0,32,0,78,0,79,0,78,0,73,0,78,0,70,0,82, + 0,73,0,78,0,71,0,69,0,77,0,69,0,78,0,84,0,32,0,79,0,70,0,32,0,67,0,79,0,80,0,89,0,82,0,73,0,71,0,72, + 0,84,0,44,0,32,0,80,0,65,0,84,0,69,0,78,0,84,0,44,0,10,0,84,0,82,0,65,0,68,0,69,0,77,0,65,0,82,0,75, + 0,44,0,32,0,79,0,82,0,32,0,79,0,84,0,72,0,69,0,82,0,32,0,82,0,73,0,71,0,72,0,84,0,46,0,32,0,73,0,78, + 0,32,0,78,0,79,0,32,0,69,0,86,0,69,0,78,0,84,0,32,0,83,0,72,0,65,0,76,0,76,0,32,0,66,0,73,0,84,0,83, + 0,84,0,82,0,69,0,65,0,77,0,32,0,79,0,82,0,32,0,84,0,72,0,69,0,32,0,71,0,78,0,79,0,77,0,69,0,10,0,70, + 0,79,0,85,0,78,0,68,0,65,0,84,0,73,0,79,0,78,0,32,0,66,0,69,0,32,0,76,0,73,0,65,0,66,0,76,0,69,0,32, + 0,70,0,79,0,82,0,32,0,65,0,78,0,89,0,32,0,67,0,76,0,65,0,73,0,77,0,44,0,32,0,68,0,65,0,77,0,65,0,71, + 0,69,0,83,0,32,0,79,0,82,0,32,0,79,0,84,0,72,0,69,0,82,0,32,0,76,0,73,0,65,0,66,0,73,0,76,0,73,0,84, + 0,89,0,44,0,32,0,73,0,78,0,67,0,76,0,85,0,68,0,73,0,78,0,71,0,10,0,65,0,78,0,89,0,32,0,71,0,69,0,78, + 0,69,0,82,0,65,0,76,0,44,0,32,0,83,0,80,0,69,0,67,0,73,0,65,0,76,0,44,0,32,0,73,0,78,0,68,0,73,0,82, + 0,69,0,67,0,84,0,44,0,32,0,73,0,78,0,67,0,73,0,68,0,69,0,78,0,84,0,65,0,76,0,44,0,32,0,79,0,82,0,32, + 0,67,0,79,0,78,0,83,0,69,0,81,0,85,0,69,0,78,0,84,0,73,0,65,0,76,0,32,0,68,0,65,0,77,0,65,0,71,0,69, + 0,83,0,44,0,10,0,87,0,72,0,69,0,84,0,72,0,69,0,82,0,32,0,73,0,78,0,32,0,65,0,78,0,32,0,65,0,67,0,84, + 0,73,0,79,0,78,0,32,0,79,0,70,0,32,0,67,0,79,0,78,0,84,0,82,0,65,0,67,0,84,0,44,0,32,0,84,0,79,0,82, + 0,84,0,32,0,79,0,82,0,32,0,79,0,84,0,72,0,69,0,82,0,87,0,73,0,83,0,69,0,44,0,32,0,65,0,82,0,73,0,83, + 0,73,0,78,0,71,0,32,0,70,0,82,0,79,0,77,0,44,0,32,0,79,0,85,0,84,0,32,0,79,0,70,0,10,0,84,0,72,0,69, + 0,32,0,85,0,83,0,69,0,32,0,79,0,82,0,32,0,73,0,78,0,65,0,66,0,73,0,76,0,73,0,84,0,89,0,32,0,84,0,79, + 0,32,0,85,0,83,0,69,0,32,0,84,0,72,0,69,0,32,0,70,0,79,0,78,0,84,0,32,0,83,0,79,0,70,0,84,0,87,0,65, + 0,82,0,69,0,32,0,79,0,82,0,32,0,70,0,82,0,79,0,77,0,32,0,79,0,84,0,72,0,69,0,82,0,32,0,68,0,69,0,65, + 0,76,0,73,0,78,0,71,0,83,0,32,0,73,0,78,0,32,0,84,0,72,0,69,0,10,0,70,0,79,0,78,0,84,0,32,0,83,0,79, + 0,70,0,84,0,87,0,65,0,82,0,69,0,46,0,10,0,10,0,69,0,120,0,99,0,101,0,112,0,116,0,32,0,97,0,115,0,32,0,99, + 0,111,0,110,0,116,0,97,0,105,0,110,0,101,0,100,0,32,0,105,0,110,0,32,0,116,0,104,0,105,0,115,0,32,0,110,0,111,0,116, + 0,105,0,99,0,101,0,44,0,32,0,116,0,104,0,101,0,32,0,110,0,97,0,109,0,101,0,115,0,32,0,111,0,102,0,32,0,71,0,110, + 0,111,0,109,0,101,0,44,0,32,0,116,0,104,0,101,0,32,0,71,0,110,0,111,0,109,0,101,0,10,0,70,0,111,0,117,0,110,0,100, + 0,97,0,116,0,105,0,111,0,110,0,44,0,32,0,97,0,110,0,100,0,32,0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,109, + 0,32,0,73,0,110,0,99,0,46,0,44,0,32,0,115,0,104,0,97,0,108,0,108,0,32,0,110,0,111,0,116,0,32,0,98,0,101,0,32, + 0,117,0,115,0,101,0,100,0,32,0,105,0,110,0,32,0,97,0,100,0,118,0,101,0,114,0,116,0,105,0,115,0,105,0,110,0,103,0,32, + 0,111,0,114,0,10,0,111,0,116,0,104,0,101,0,114,0,119,0,105,0,115,0,101,0,32,0,116,0,111,0,32,0,112,0,114,0,111,0,109, + 0,111,0,116,0,101,0,32,0,116,0,104,0,101,0,32,0,115,0,97,0,108,0,101,0,44,0,32,0,117,0,115,0,101,0,32,0,111,0,114, + 0,32,0,111,0,116,0,104,0,101,0,114,0,32,0,100,0,101,0,97,0,108,0,105,0,110,0,103,0,115,0,32,0,105,0,110,0,32,0,116, + 0,104,0,105,0,115,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,10,0,119,0,105, + 0,116,0,104,0,111,0,117,0,116,0,32,0,112,0,114,0,105,0,111,0,114,0,32,0,119,0,114,0,105,0,116,0,116,0,101,0,110,0,32, + 0,97,0,117,0,116,0,104,0,111,0,114,0,105,0,122,0,97,0,116,0,105,0,111,0,110,0,32,0,102,0,114,0,111,0,109,0,32,0,116, + 0,104,0,101,0,32,0,71,0,110,0,111,0,109,0,101,0,32,0,70,0,111,0,117,0,110,0,100,0,97,0,116,0,105,0,111,0,110,0,32, + 0,111,0,114,0,32,0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,10,0,73,0,110,0,99,0,46,0,44,0,32,0,114, + 0,101,0,115,0,112,0,101,0,99,0,116,0,105,0,118,0,101,0,108,0,121,0,46,0,32,0,70,0,111,0,114,0,32,0,102,0,117,0,114, + 0,116,0,104,0,101,0,114,0,32,0,105,0,110,0,102,0,111,0,114,0,109,0,97,0,116,0,105,0,111,0,110,0,44,0,32,0,99,0,111, + 0,110,0,116,0,97,0,99,0,116,0,58,0,32,0,102,0,111,0,110,0,116,0,115,0,32,0,97,0,116,0,32,0,103,0,110,0,111,0,109, + 0,101,0,32,0,100,0,111,0,116,0,10,0,111,0,114,0,103,0,46,0,32,0,10,0,10,0,65,0,114,0,101,0,118,0,32,0,70,0,111, + 0,110,0,116,0,115,0,32,0,67,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,10,0,45,0,45,0,45,0,45,0,45,0,45, + 0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45,0,45, + 0,45,0,45,0,45,0,45,0,10,0,10,0,67,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,32,0,40,0,99,0,41,0,32, + 0,50,0,48,0,48,0,54,0,32,0,98,0,121,0,32,0,84,0,97,0,118,0,109,0,106,0,111,0,110,0,103,0,32,0,66,0,97,0,104, + 0,46,0,32,0,65,0,108,0,108,0,32,0,82,0,105,0,103,0,104,0,116,0,115,0,32,0,82,0,101,0,115,0,101,0,114,0,118,0,101, + 0,100,0,46,0,10,0,10,0,80,0,101,0,114,0,109,0,105,0,115,0,115,0,105,0,111,0,110,0,32,0,105,0,115,0,32,0,104,0,101, + 0,114,0,101,0,98,0,121,0,32,0,103,0,114,0,97,0,110,0,116,0,101,0,100,0,44,0,32,0,102,0,114,0,101,0,101,0,32,0,111, + 0,102,0,32,0,99,0,104,0,97,0,114,0,103,0,101,0,44,0,32,0,116,0,111,0,32,0,97,0,110,0,121,0,32,0,112,0,101,0,114, + 0,115,0,111,0,110,0,32,0,111,0,98,0,116,0,97,0,105,0,110,0,105,0,110,0,103,0,10,0,97,0,32,0,99,0,111,0,112,0,121, + 0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,102,0,111,0,110,0,116,0,115,0,32,0,97,0,99,0,99,0,111,0,109,0,112, + 0,97,0,110,0,121,0,105,0,110,0,103,0,32,0,116,0,104,0,105,0,115,0,32,0,108,0,105,0,99,0,101,0,110,0,115,0,101,0,32, + 0,40,0,34,0,70,0,111,0,110,0,116,0,115,0,34,0,41,0,32,0,97,0,110,0,100,0,10,0,97,0,115,0,115,0,111,0,99,0,105, + 0,97,0,116,0,101,0,100,0,32,0,100,0,111,0,99,0,117,0,109,0,101,0,110,0,116,0,97,0,116,0,105,0,111,0,110,0,32,0,102, + 0,105,0,108,0,101,0,115,0,32,0,40,0,116,0,104,0,101,0,32,0,34,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116, + 0,119,0,97,0,114,0,101,0,34,0,41,0,44,0,32,0,116,0,111,0,32,0,114,0,101,0,112,0,114,0,111,0,100,0,117,0,99,0,101, + 0,10,0,97,0,110,0,100,0,32,0,100,0,105,0,115,0,116,0,114,0,105,0,98,0,117,0,116,0,101,0,32,0,116,0,104,0,101,0,32, + 0,109,0,111,0,100,0,105,0,102,0,105,0,99,0,97,0,116,0,105,0,111,0,110,0,115,0,32,0,116,0,111,0,32,0,116,0,104,0,101, + 0,32,0,66,0,105,0,116,0,115,0,116,0,114,0,101,0,97,0,109,0,32,0,86,0,101,0,114,0,97,0,32,0,70,0,111,0,110,0,116, + 0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,44,0,10,0,105,0,110,0,99,0,108,0,117,0,100,0,105,0,110,0,103, + 0,32,0,119,0,105,0,116,0,104,0,111,0,117,0,116,0,32,0,108,0,105,0,109,0,105,0,116,0,97,0,116,0,105,0,111,0,110,0,32, + 0,116,0,104,0,101,0,32,0,114,0,105,0,103,0,104,0,116,0,115,0,32,0,116,0,111,0,32,0,117,0,115,0,101,0,44,0,32,0,99, + 0,111,0,112,0,121,0,44,0,32,0,109,0,101,0,114,0,103,0,101,0,44,0,32,0,112,0,117,0,98,0,108,0,105,0,115,0,104,0,44, + 0,10,0,100,0,105,0,115,0,116,0,114,0,105,0,98,0,117,0,116,0,101,0,44,0,32,0,97,0,110,0,100,0,47,0,111,0,114,0,32, + 0,115,0,101,0,108,0,108,0,32,0,99,0,111,0,112,0,105,0,101,0,115,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,70, + 0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,44,0,32,0,97,0,110,0,100,0,32,0,116,0,111, + 0,32,0,112,0,101,0,114,0,109,0,105,0,116,0,10,0,112,0,101,0,114,0,115,0,111,0,110,0,115,0,32,0,116,0,111,0,32,0,119, + 0,104,0,111,0,109,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114, + 0,101,0,32,0,105,0,115,0,32,0,102,0,117,0,114,0,110,0,105,0,115,0,104,0,101,0,100,0,32,0,116,0,111,0,32,0,100,0,111, + 0,32,0,115,0,111,0,44,0,32,0,115,0,117,0,98,0,106,0,101,0,99,0,116,0,32,0,116,0,111,0,10,0,116,0,104,0,101,0,32, + 0,102,0,111,0,108,0,108,0,111,0,119,0,105,0,110,0,103,0,32,0,99,0,111,0,110,0,100,0,105,0,116,0,105,0,111,0,110,0,115, + 0,58,0,10,0,10,0,84,0,104,0,101,0,32,0,97,0,98,0,111,0,118,0,101,0,32,0,99,0,111,0,112,0,121,0,114,0,105,0,103, + 0,104,0,116,0,32,0,97,0,110,0,100,0,32,0,116,0,114,0,97,0,100,0,101,0,109,0,97,0,114,0,107,0,32,0,110,0,111,0,116, + 0,105,0,99,0,101,0,115,0,32,0,97,0,110,0,100,0,32,0,116,0,104,0,105,0,115,0,32,0,112,0,101,0,114,0,109,0,105,0,115, + 0,115,0,105,0,111,0,110,0,32,0,110,0,111,0,116,0,105,0,99,0,101,0,10,0,115,0,104,0,97,0,108,0,108,0,32,0,98,0,101, + 0,32,0,105,0,110,0,99,0,108,0,117,0,100,0,101,0,100,0,32,0,105,0,110,0,32,0,97,0,108,0,108,0,32,0,99,0,111,0,112, + 0,105,0,101,0,115,0,32,0,111,0,102,0,32,0,111,0,110,0,101,0,32,0,111,0,114,0,32,0,109,0,111,0,114,0,101,0,32,0,111, + 0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,10, + 0,116,0,121,0,112,0,101,0,102,0,97,0,99,0,101,0,115,0,46,0,10,0,10,0,84,0,104,0,101,0,32,0,70,0,111,0,110,0,116, + 0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,109,0,97,0,121,0,32,0,98,0,101,0,32,0,109,0,111,0,100, + 0,105,0,102,0,105,0,101,0,100,0,44,0,32,0,97,0,108,0,116,0,101,0,114,0,101,0,100,0,44,0,32,0,111,0,114,0,32,0,97, + 0,100,0,100,0,101,0,100,0,32,0,116,0,111,0,44,0,32,0,97,0,110,0,100,0,32,0,105,0,110,0,10,0,112,0,97,0,114,0,116, + 0,105,0,99,0,117,0,108,0,97,0,114,0,32,0,116,0,104,0,101,0,32,0,100,0,101,0,115,0,105,0,103,0,110,0,115,0,32,0,111, + 0,102,0,32,0,103,0,108,0,121,0,112,0,104,0,115,0,32,0,111,0,114,0,32,0,99,0,104,0,97,0,114,0,97,0,99,0,116,0,101, + 0,114,0,115,0,32,0,105,0,110,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,115,0,32,0,109,0,97,0,121,0,32, + 0,98,0,101,0,10,0,109,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,32,0,97,0,110,0,100,0,32,0,97,0,100,0,100,0,105, + 0,116,0,105,0,111,0,110,0,97,0,108,0,32,0,103,0,108,0,121,0,112,0,104,0,115,0,32,0,111,0,114,0,32,0,99,0,104,0,97, + 0,114,0,97,0,99,0,116,0,101,0,114,0,115,0,32,0,109,0,97,0,121,0,32,0,98,0,101,0,32,0,97,0,100,0,100,0,101,0,100, + 0,32,0,116,0,111,0,32,0,116,0,104,0,101,0,10,0,70,0,111,0,110,0,116,0,115,0,44,0,32,0,111,0,110,0,108,0,121,0,32, + 0,105,0,102,0,32,0,116,0,104,0,101,0,32,0,102,0,111,0,110,0,116,0,115,0,32,0,97,0,114,0,101,0,32,0,114,0,101,0,110, + 0,97,0,109,0,101,0,100,0,32,0,116,0,111,0,32,0,110,0,97,0,109,0,101,0,115,0,32,0,110,0,111,0,116,0,32,0,99,0,111, + 0,110,0,116,0,97,0,105,0,110,0,105,0,110,0,103,0,32,0,101,0,105,0,116,0,104,0,101,0,114,0,10,0,116,0,104,0,101,0,32, + 0,119,0,111,0,114,0,100,0,115,0,32,0,34,0,84,0,97,0,118,0,109,0,106,0,111,0,110,0,103,0,32,0,66,0,97,0,104,0,34, + 0,32,0,111,0,114,0,32,0,116,0,104,0,101,0,32,0,119,0,111,0,114,0,100,0,32,0,34,0,65,0,114,0,101,0,118,0,34,0,46, + 0,10,0,10,0,84,0,104,0,105,0,115,0,32,0,76,0,105,0,99,0,101,0,110,0,115,0,101,0,32,0,98,0,101,0,99,0,111,0,109, + 0,101,0,115,0,32,0,110,0,117,0,108,0,108,0,32,0,97,0,110,0,100,0,32,0,118,0,111,0,105,0,100,0,32,0,116,0,111,0,32, + 0,116,0,104,0,101,0,32,0,101,0,120,0,116,0,101,0,110,0,116,0,32,0,97,0,112,0,112,0,108,0,105,0,99,0,97,0,98,0,108, + 0,101,0,32,0,116,0,111,0,32,0,70,0,111,0,110,0,116,0,115,0,10,0,111,0,114,0,32,0,70,0,111,0,110,0,116,0,32,0,83, + 0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,116,0,104,0,97,0,116,0,32,0,104,0,97,0,115,0,32,0,98,0,101,0,101, + 0,110,0,32,0,109,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,32,0,97,0,110,0,100,0,32,0,105,0,115,0,32,0,100,0,105, + 0,115,0,116,0,114,0,105,0,98,0,117,0,116,0,101,0,100,0,32,0,117,0,110,0,100,0,101,0,114,0,32,0,116,0,104,0,101,0,32, + 0,10,0,34,0,84,0,97,0,118,0,109,0,106,0,111,0,110,0,103,0,32,0,66,0,97,0,104,0,32,0,65,0,114,0,101,0,118,0,34, + 0,32,0,110,0,97,0,109,0,101,0,115,0,46,0,10,0,10,0,84,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111, + 0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,109,0,97,0,121,0,32,0,98,0,101,0,32,0,115,0,111,0,108,0,100,0,32,0,97, + 0,115,0,32,0,112,0,97,0,114,0,116,0,32,0,111,0,102,0,32,0,97,0,32,0,108,0,97,0,114,0,103,0,101,0,114,0,32,0,115, + 0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,112,0,97,0,99,0,107,0,97,0,103,0,101,0,32,0,98,0,117,0,116,0,10, + 0,110,0,111,0,32,0,99,0,111,0,112,0,121,0,32,0,111,0,102,0,32,0,111,0,110,0,101,0,32,0,111,0,114,0,32,0,109,0,111, + 0,114,0,101,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119, + 0,97,0,114,0,101,0,32,0,116,0,121,0,112,0,101,0,102,0,97,0,99,0,101,0,115,0,32,0,109,0,97,0,121,0,32,0,98,0,101, + 0,32,0,115,0,111,0,108,0,100,0,32,0,98,0,121,0,10,0,105,0,116,0,115,0,101,0,108,0,102,0,46,0,10,0,10,0,84,0,72, + 0,69,0,32,0,70,0,79,0,78,0,84,0,32,0,83,0,79,0,70,0,84,0,87,0,65,0,82,0,69,0,32,0,73,0,83,0,32,0,80, + 0,82,0,79,0,86,0,73,0,68,0,69,0,68,0,32,0,34,0,65,0,83,0,32,0,73,0,83,0,34,0,44,0,32,0,87,0,73,0,84, + 0,72,0,79,0,85,0,84,0,32,0,87,0,65,0,82,0,82,0,65,0,78,0,84,0,89,0,32,0,79,0,70,0,32,0,65,0,78,0,89, + 0,32,0,75,0,73,0,78,0,68,0,44,0,10,0,69,0,88,0,80,0,82,0,69,0,83,0,83,0,32,0,79,0,82,0,32,0,73,0,77, + 0,80,0,76,0,73,0,69,0,68,0,44,0,32,0,73,0,78,0,67,0,76,0,85,0,68,0,73,0,78,0,71,0,32,0,66,0,85,0,84, + 0,32,0,78,0,79,0,84,0,32,0,76,0,73,0,77,0,73,0,84,0,69,0,68,0,32,0,84,0,79,0,32,0,65,0,78,0,89,0,32, + 0,87,0,65,0,82,0,82,0,65,0,78,0,84,0,73,0,69,0,83,0,32,0,79,0,70,0,10,0,77,0,69,0,82,0,67,0,72,0,65, + 0,78,0,84,0,65,0,66,0,73,0,76,0,73,0,84,0,89,0,44,0,32,0,70,0,73,0,84,0,78,0,69,0,83,0,83,0,32,0,70, + 0,79,0,82,0,32,0,65,0,32,0,80,0,65,0,82,0,84,0,73,0,67,0,85,0,76,0,65,0,82,0,32,0,80,0,85,0,82,0,80, + 0,79,0,83,0,69,0,32,0,65,0,78,0,68,0,32,0,78,0,79,0,78,0,73,0,78,0,70,0,82,0,73,0,78,0,71,0,69,0,77, + 0,69,0,78,0,84,0,10,0,79,0,70,0,32,0,67,0,79,0,80,0,89,0,82,0,73,0,71,0,72,0,84,0,44,0,32,0,80,0,65, + 0,84,0,69,0,78,0,84,0,44,0,32,0,84,0,82,0,65,0,68,0,69,0,77,0,65,0,82,0,75,0,44,0,32,0,79,0,82,0,32, + 0,79,0,84,0,72,0,69,0,82,0,32,0,82,0,73,0,71,0,72,0,84,0,46,0,32,0,73,0,78,0,32,0,78,0,79,0,32,0,69, + 0,86,0,69,0,78,0,84,0,32,0,83,0,72,0,65,0,76,0,76,0,10,0,84,0,65,0,86,0,77,0,74,0,79,0,78,0,71,0,32, + 0,66,0,65,0,72,0,32,0,66,0,69,0,32,0,76,0,73,0,65,0,66,0,76,0,69,0,32,0,70,0,79,0,82,0,32,0,65,0,78, + 0,89,0,32,0,67,0,76,0,65,0,73,0,77,0,44,0,32,0,68,0,65,0,77,0,65,0,71,0,69,0,83,0,32,0,79,0,82,0,32, + 0,79,0,84,0,72,0,69,0,82,0,32,0,76,0,73,0,65,0,66,0,73,0,76,0,73,0,84,0,89,0,44,0,10,0,73,0,78,0,67, + 0,76,0,85,0,68,0,73,0,78,0,71,0,32,0,65,0,78,0,89,0,32,0,71,0,69,0,78,0,69,0,82,0,65,0,76,0,44,0,32, + 0,83,0,80,0,69,0,67,0,73,0,65,0,76,0,44,0,32,0,73,0,78,0,68,0,73,0,82,0,69,0,67,0,84,0,44,0,32,0,73, + 0,78,0,67,0,73,0,68,0,69,0,78,0,84,0,65,0,76,0,44,0,32,0,79,0,82,0,32,0,67,0,79,0,78,0,83,0,69,0,81, + 0,85,0,69,0,78,0,84,0,73,0,65,0,76,0,10,0,68,0,65,0,77,0,65,0,71,0,69,0,83,0,44,0,32,0,87,0,72,0,69, + 0,84,0,72,0,69,0,82,0,32,0,73,0,78,0,32,0,65,0,78,0,32,0,65,0,67,0,84,0,73,0,79,0,78,0,32,0,79,0,70, + 0,32,0,67,0,79,0,78,0,84,0,82,0,65,0,67,0,84,0,44,0,32,0,84,0,79,0,82,0,84,0,32,0,79,0,82,0,32,0,79, + 0,84,0,72,0,69,0,82,0,87,0,73,0,83,0,69,0,44,0,32,0,65,0,82,0,73,0,83,0,73,0,78,0,71,0,10,0,70,0,82, + 0,79,0,77,0,44,0,32,0,79,0,85,0,84,0,32,0,79,0,70,0,32,0,84,0,72,0,69,0,32,0,85,0,83,0,69,0,32,0,79, + 0,82,0,32,0,73,0,78,0,65,0,66,0,73,0,76,0,73,0,84,0,89,0,32,0,84,0,79,0,32,0,85,0,83,0,69,0,32,0,84, + 0,72,0,69,0,32,0,70,0,79,0,78,0,84,0,32,0,83,0,79,0,70,0,84,0,87,0,65,0,82,0,69,0,32,0,79,0,82,0,32, + 0,70,0,82,0,79,0,77,0,10,0,79,0,84,0,72,0,69,0,82,0,32,0,68,0,69,0,65,0,76,0,73,0,78,0,71,0,83,0,32, + 0,73,0,78,0,32,0,84,0,72,0,69,0,32,0,70,0,79,0,78,0,84,0,32,0,83,0,79,0,70,0,84,0,87,0,65,0,82,0,69, + 0,46,0,10,0,10,0,69,0,120,0,99,0,101,0,112,0,116,0,32,0,97,0,115,0,32,0,99,0,111,0,110,0,116,0,97,0,105,0,110, + 0,101,0,100,0,32,0,105,0,110,0,32,0,116,0,104,0,105,0,115,0,32,0,110,0,111,0,116,0,105,0,99,0,101,0,44,0,32,0,116, + 0,104,0,101,0,32,0,110,0,97,0,109,0,101,0,32,0,111,0,102,0,32,0,84,0,97,0,118,0,109,0,106,0,111,0,110,0,103,0,32, + 0,66,0,97,0,104,0,32,0,115,0,104,0,97,0,108,0,108,0,32,0,110,0,111,0,116,0,10,0,98,0,101,0,32,0,117,0,115,0,101, + 0,100,0,32,0,105,0,110,0,32,0,97,0,100,0,118,0,101,0,114,0,116,0,105,0,115,0,105,0,110,0,103,0,32,0,111,0,114,0,32, + 0,111,0,116,0,104,0,101,0,114,0,119,0,105,0,115,0,101,0,32,0,116,0,111,0,32,0,112,0,114,0,111,0,109,0,111,0,116,0,101, + 0,32,0,116,0,104,0,101,0,32,0,115,0,97,0,108,0,101,0,44,0,32,0,117,0,115,0,101,0,32,0,111,0,114,0,32,0,111,0,116, + 0,104,0,101,0,114,0,10,0,100,0,101,0,97,0,108,0,105,0,110,0,103,0,115,0,32,0,105,0,110,0,32,0,116,0,104,0,105,0,115, + 0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,119,0,105,0,116,0,104,0,111, + 0,117,0,116,0,32,0,112,0,114,0,105,0,111,0,114,0,32,0,119,0,114,0,105,0,116,0,116,0,101,0,110,0,32,0,97,0,117,0,116, + 0,104,0,111,0,114,0,105,0,122,0,97,0,116,0,105,0,111,0,110,0,10,0,102,0,114,0,111,0,109,0,32,0,84,0,97,0,118,0,109, + 0,106,0,111,0,110,0,103,0,32,0,66,0,97,0,104,0,46,0,32,0,70,0,111,0,114,0,32,0,102,0,117,0,114,0,116,0,104,0,101, + 0,114,0,32,0,105,0,110,0,102,0,111,0,114,0,109,0,97,0,116,0,105,0,111,0,110,0,44,0,32,0,99,0,111,0,110,0,116,0,97, + 0,99,0,116,0,58,0,32,0,116,0,97,0,118,0,109,0,106,0,111,0,110,0,103,0,32,0,64,0,32,0,102,0,114,0,101,0,101,0,10, + 0,46,0,32,0,102,0,114,0,46,0,0,70,111,110,116,115,32,97,114,101,32,40,99,41,32,66,105,116,115,116,114,101,97,109,32,40,115,101,101, + 32,98,101,108,111,119,41,46,32,68,101,106,97,86,117,32,99,104,97,110,103,101,115,32,97,114,101,32,105,110,32,112,117,98,108,105,99,32,100,111, + 109,97,105,110,46,32,71,108,121,112,104,115,32,105,109,112,111,114,116,101,100,32,102,114,111,109,32,65,114,101,118,32,102,111,110,116,115,32,97,114, + 101,32,40,99,41,32,84,97,118,109,106,117,110,103,32,66,97,104,32,40,115,101,101,32,98,101,108,111,119,41,10,10,66,105,116,115,116,114,101,97, + 109,32,86,101,114,97,32,70,111,110,116,115,32,67,111,112,121,114,105,103,104,116,10,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, + 45,45,45,45,45,45,45,45,45,45,45,45,45,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,48,51,32,98,121,32,66,105,116, + 115,116,114,101,97,109,44,32,73,110,99,46,32,65,108,108,32,82,105,103,104,116,115,32,82,101,115,101,114,118,101,100,46,32,66,105,116,115,116,114, + 101,97,109,32,86,101,114,97,32,105,115,10,97,32,116,114,97,100,101,109,97,114,107,32,111,102,32,66,105,116,115,116,114,101,97,109,44,32,73,110, + 99,46,10,10,80,101,114,109,105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111, + 102,32,99,104,97,114,103,101,44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,32,97,32,99,111,112,121, + 10,111,102,32,116,104,101,32,102,111,110,116,115,32,97,99,99,111,109,112,97,110,121,105,110,103,32,116,104,105,115,32,108,105,99,101,110,115,101,32, + 40,34,70,111,110,116,115,34,41,32,97,110,100,32,97,115,115,111,99,105,97,116,101,100,10,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102, + 105,108,101,115,32,40,116,104,101,32,34,70,111,110,116,32,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,114,101,112,114,111,100,117,99,101, + 32,97,110,100,32,100,105,115,116,114,105,98,117,116,101,32,116,104,101,10,70,111,110,116,32,83,111,102,116,119,97,114,101,44,32,105,110,99,108,117, + 100,105,110,103,32,119,105,116,104,111,117,116,32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115, + 101,44,32,99,111,112,121,44,32,109,101,114,103,101,44,10,112,117,98,108,105,115,104,44,32,100,105,115,116,114,105,98,117,116,101,44,32,97,110,100, + 47,111,114,32,115,101,108,108,32,99,111,112,105,101,115,32,111,102,32,116,104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,44,32,97,110, + 100,32,116,111,32,112,101,114,109,105,116,10,112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,70,111,110,116,32,83,111,102, + 116,119,97,114,101,32,105,115,32,102,117,114,110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,32, + 116,104,101,10,102,111,108,108,111,119,105,110,103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112, + 121,114,105,103,104,116,32,97,110,100,32,116,114,97,100,101,109,97,114,107,32,110,111,116,105,99,101,115,32,97,110,100,32,116,104,105,115,32,112,101, + 114,109,105,115,115,105,111,110,32,110,111,116,105,99,101,32,115,104,97,108,108,10,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108, + 32,99,111,112,105,101,115,32,111,102,32,111,110,101,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,32,70,111,110,116,32,83,111,102,116,119, + 97,114,101,32,116,121,112,101,102,97,99,101,115,46,10,10,84,104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,32,109,97,121,32,98,101, + 32,109,111,100,105,102,105,101,100,44,32,97,108,116,101,114,101,100,44,32,111,114,32,97,100,100,101,100,32,116,111,44,32,97,110,100,32,105,110,32, + 112,97,114,116,105,99,117,108,97,114,10,116,104,101,32,100,101,115,105,103,110,115,32,111,102,32,103,108,121,112,104,115,32,111,114,32,99,104,97,114, + 97,99,116,101,114,115,32,105,110,32,116,104,101,32,70,111,110,116,115,32,109,97,121,32,98,101,32,109,111,100,105,102,105,101,100,32,97,110,100,10, + 97,100,100,105,116,105,111,110,97,108,32,103,108,121,112,104,115,32,111,114,32,99,104,97,114,97,99,116,101,114,115,32,109,97,121,32,98,101,32,97, + 100,100,101,100,32,116,111,32,116,104,101,32,70,111,110,116,115,44,32,111,110,108,121,32,105,102,32,116,104,101,32,102,111,110,116,115,10,97,114,101, + 32,114,101,110,97,109,101,100,32,116,111,32,110,97,109,101,115,32,110,111,116,32,99,111,110,116,97,105,110,105,110,103,32,101,105,116,104,101,114,32, + 116,104,101,32,119,111,114,100,115,32,34,66,105,116,115,116,114,101,97,109,34,32,111,114,32,116,104,101,32,119,111,114,100,10,34,86,101,114,97,34, + 46,10,10,84,104,105,115,32,76,105,99,101,110,115,101,32,98,101,99,111,109,101,115,32,110,117,108,108,32,97,110,100,32,118,111,105,100,32,116,111, + 32,116,104,101,32,101,120,116,101,110,116,32,97,112,112,108,105,99,97,98,108,101,32,116,111,32,70,111,110,116,115,32,111,114,32,70,111,110,116,10, + 83,111,102,116,119,97,114,101,32,116,104,97,116,32,104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101,100,32,97,110,100,32,105,115,32,100, + 105,115,116,114,105,98,117,116,101,100,32,117,110,100,101,114,32,116,104,101,32,34,66,105,116,115,116,114,101,97,109,10,86,101,114,97,34,32,110,97, + 109,101,115,46,10,10,84,104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,32,109,97,121,32,98,101,32,115,111,108,100,32,97,115,32,112, + 97,114,116,32,111,102,32,97,32,108,97,114,103,101,114,32,115,111,102,116,119,97,114,101,32,112,97,99,107,97,103,101,32,98,117,116,32,110,111,10, + 99,111,112,121,32,111,102,32,111,110,101,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101, + 32,116,121,112,101,102,97,99,101,115,32,109,97,121,32,98,101,32,115,111,108,100,32,98,121,32,105,116,115,101,108,102,46,10,10,84,72,69,32,70, + 79,78,84,32,83,79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85, + 84,32,87,65,82,82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,32,69,88,80,82,69,83,83,10,79,82,32,73,77,80,76,73, + 69,68,44,32,73,78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,65,78,89,32,87,65,82, + 82,65,78,84,73,69,83,32,79,70,32,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,10,70,73,84,78,69,83,83,32,70,79,82,32, + 65,32,80,65,82,84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84, + 32,79,70,32,67,79,80,89,82,73,71,72,84,44,32,80,65,84,69,78,84,44,10,84,82,65,68,69,77,65,82,75,44,32,79,82,32,79,84,72, + 69,82,32,82,73,71,72,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,32,66,73,84,83,84,82,69,65,77,32,79,82, + 32,84,72,69,32,71,78,79,77,69,10,70,79,85,78,68,65,84,73,79,78,32,66,69,32,76,73,65,66,76,69,32,70,79,82,32,65,78,89,32, + 67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73,65,66,73,76,73,84,89,44,32,73,78,67,76,85, + 68,73,78,71,10,65,78,89,32,71,69,78,69,82,65,76,44,32,83,80,69,67,73,65,76,44,32,73,78,68,73,82,69,67,84,44,32,73,78,67, + 73,68,69,78,84,65,76,44,32,79,82,32,67,79,78,83,69,81,85,69,78,84,73,65,76,32,68,65,77,65,71,69,83,44,10,87,72,69,84,72, + 69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67,84,44,32,84,79,82,84,32,79,82,32,79,84,72, + 69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,32,70,82,79,77,44,32,79,85,84,32,79,70,10,84,72,69,32,85,83,69,32,79,82,32, + 73,78,65,66,73,76,73,84,89,32,84,79,32,85,83,69,32,84,72,69,32,70,79,78,84,32,83,79,70,84,87,65,82,69,32,79,82,32,70,82, + 79,77,32,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,10,70,79,78,84,32,83,79,70,84,87,65,82,69,46,10, + 10,69,120,99,101,112,116,32,97,115,32,99,111,110,116,97,105,110,101,100,32,105,110,32,116,104,105,115,32,110,111,116,105,99,101,44,32,116,104,101, + 32,110,97,109,101,115,32,111,102,32,71,110,111,109,101,44,32,116,104,101,32,71,110,111,109,101,10,70,111,117,110,100,97,116,105,111,110,44,32,97, + 110,100,32,66,105,116,115,116,114,101,97,109,32,73,110,99,46,44,32,115,104,97,108,108,32,110,111,116,32,98,101,32,117,115,101,100,32,105,110,32, + 97,100,118,101,114,116,105,115,105,110,103,32,111,114,10,111,116,104,101,114,119,105,115,101,32,116,111,32,112,114,111,109,111,116,101,32,116,104,101,32, + 115,97,108,101,44,32,117,115,101,32,111,114,32,111,116,104,101,114,32,100,101,97,108,105,110,103,115,32,105,110,32,116,104,105,115,32,70,111,110,116, + 32,83,111,102,116,119,97,114,101,10,119,105,116,104,111,117,116,32,112,114,105,111,114,32,119,114,105,116,116,101,110,32,97,117,116,104,111,114,105,122, + 97,116,105,111,110,32,102,114,111,109,32,116,104,101,32,71,110,111,109,101,32,70,111,117,110,100,97,116,105,111,110,32,111,114,32,66,105,116,115,116, + 114,101,97,109,10,73,110,99,46,44,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,70,111,114,32,102,117,114,116,104,101,114,32,105,110,102, + 111,114,109,97,116,105,111,110,44,32,99,111,110,116,97,99,116,58,32,102,111,110,116,115,32,97,116,32,103,110,111,109,101,32,100,111,116,10,111,114, + 103,46,32,10,10,65,114,101,118,32,70,111,110,116,115,32,67,111,112,121,114,105,103,104,116,10,45,45,45,45,45,45,45,45,45,45,45,45,45,45, + 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,10,67,111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,48,54,32,98,121,32, + 84,97,118,109,106,111,110,103,32,66,97,104,46,32,65,108,108,32,82,105,103,104,116,115,32,82,101,115,101,114,118,101,100,46,10,10,80,101,114,109, + 105,115,115,105,111,110,32,105,115,32,104,101,114,101,98,121,32,103,114,97,110,116,101,100,44,32,102,114,101,101,32,111,102,32,99,104,97,114,103,101, + 44,32,116,111,32,97,110,121,32,112,101,114,115,111,110,32,111,98,116,97,105,110,105,110,103,10,97,32,99,111,112,121,32,111,102,32,116,104,101,32, + 102,111,110,116,115,32,97,99,99,111,109,112,97,110,121,105,110,103,32,116,104,105,115,32,108,105,99,101,110,115,101,32,40,34,70,111,110,116,115,34, + 41,32,97,110,100,10,97,115,115,111,99,105,97,116,101,100,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,105,108,101,115,32,40,116,104, + 101,32,34,70,111,110,116,32,83,111,102,116,119,97,114,101,34,41,44,32,116,111,32,114,101,112,114,111,100,117,99,101,10,97,110,100,32,100,105,115, + 116,114,105,98,117,116,101,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,115,32,116,111,32,116,104,101,32,66,105,116,115,116,114,101, + 97,109,32,86,101,114,97,32,70,111,110,116,32,83,111,102,116,119,97,114,101,44,10,105,110,99,108,117,100,105,110,103,32,119,105,116,104,111,117,116, + 32,108,105,109,105,116,97,116,105,111,110,32,116,104,101,32,114,105,103,104,116,115,32,116,111,32,117,115,101,44,32,99,111,112,121,44,32,109,101,114, + 103,101,44,32,112,117,98,108,105,115,104,44,10,100,105,115,116,114,105,98,117,116,101,44,32,97,110,100,47,111,114,32,115,101,108,108,32,99,111,112, + 105,101,115,32,111,102,32,116,104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,44,32,97,110,100,32,116,111,32,112,101,114,109,105,116,10, + 112,101,114,115,111,110,115,32,116,111,32,119,104,111,109,32,116,104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,32,105,115,32,102,117,114, + 110,105,115,104,101,100,32,116,111,32,100,111,32,115,111,44,32,115,117,98,106,101,99,116,32,116,111,10,116,104,101,32,102,111,108,108,111,119,105,110, + 103,32,99,111,110,100,105,116,105,111,110,115,58,10,10,84,104,101,32,97,98,111,118,101,32,99,111,112,121,114,105,103,104,116,32,97,110,100,32,116, + 114,97,100,101,109,97,114,107,32,110,111,116,105,99,101,115,32,97,110,100,32,116,104,105,115,32,112,101,114,109,105,115,115,105,111,110,32,110,111,116, + 105,99,101,10,115,104,97,108,108,32,98,101,32,105,110,99,108,117,100,101,100,32,105,110,32,97,108,108,32,99,111,112,105,101,115,32,111,102,32,111, + 110,101,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,10,116,121,112,101,102,97,99,101, + 115,46,10,10,84,104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,32,109,97,121,32,98,101,32,109,111,100,105,102,105,101,100,44,32,97, + 108,116,101,114,101,100,44,32,111,114,32,97,100,100,101,100,32,116,111,44,32,97,110,100,32,105,110,10,112,97,114,116,105,99,117,108,97,114,32,116, + 104,101,32,100,101,115,105,103,110,115,32,111,102,32,103,108,121,112,104,115,32,111,114,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,116,104, + 101,32,70,111,110,116,115,32,109,97,121,32,98,101,10,109,111,100,105,102,105,101,100,32,97,110,100,32,97,100,100,105,116,105,111,110,97,108,32,103, + 108,121,112,104,115,32,111,114,32,99,104,97,114,97,99,116,101,114,115,32,109,97,121,32,98,101,32,97,100,100,101,100,32,116,111,32,116,104,101,10, + 70,111,110,116,115,44,32,111,110,108,121,32,105,102,32,116,104,101,32,102,111,110,116,115,32,97,114,101,32,114,101,110,97,109,101,100,32,116,111,32, + 110,97,109,101,115,32,110,111,116,32,99,111,110,116,97,105,110,105,110,103,32,101,105,116,104,101,114,10,116,104,101,32,119,111,114,100,115,32,34,84, + 97,118,109,106,111,110,103,32,66,97,104,34,32,111,114,32,116,104,101,32,119,111,114,100,32,34,65,114,101,118,34,46,10,10,84,104,105,115,32,76, + 105,99,101,110,115,101,32,98,101,99,111,109,101,115,32,110,117,108,108,32,97,110,100,32,118,111,105,100,32,116,111,32,116,104,101,32,101,120,116,101, + 110,116,32,97,112,112,108,105,99,97,98,108,101,32,116,111,32,70,111,110,116,115,10,111,114,32,70,111,110,116,32,83,111,102,116,119,97,114,101,32, + 116,104,97,116,32,104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101,100,32,97,110,100,32,105,115,32,100,105,115,116,114,105,98,117,116,101, + 100,32,117,110,100,101,114,32,116,104,101,32,10,34,84,97,118,109,106,111,110,103,32,66,97,104,32,65,114,101,118,34,32,110,97,109,101,115,46,10, + 10,84,104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,32,109,97,121,32,98,101,32,115,111,108,100,32,97,115,32,112,97,114,116,32,111, + 102,32,97,32,108,97,114,103,101,114,32,115,111,102,116,119,97,114,101,32,112,97,99,107,97,103,101,32,98,117,116,10,110,111,32,99,111,112,121,32, + 111,102,32,111,110,101,32,111,114,32,109,111,114,101,32,111,102,32,116,104,101,32,70,111,110,116,32,83,111,102,116,119,97,114,101,32,116,121,112,101, + 102,97,99,101,115,32,109,97,121,32,98,101,32,115,111,108,100,32,98,121,10,105,116,115,101,108,102,46,10,10,84,72,69,32,70,79,78,84,32,83, + 79,70,84,87,65,82,69,32,73,83,32,80,82,79,86,73,68,69,68,32,34,65,83,32,73,83,34,44,32,87,73,84,72,79,85,84,32,87,65,82, + 82,65,78,84,89,32,79,70,32,65,78,89,32,75,73,78,68,44,10,69,88,80,82,69,83,83,32,79,82,32,73,77,80,76,73,69,68,44,32,73, + 78,67,76,85,68,73,78,71,32,66,85,84,32,78,79,84,32,76,73,77,73,84,69,68,32,84,79,32,65,78,89,32,87,65,82,82,65,78,84,73, + 69,83,32,79,70,10,77,69,82,67,72,65,78,84,65,66,73,76,73,84,89,44,32,70,73,84,78,69,83,83,32,70,79,82,32,65,32,80,65,82, + 84,73,67,85,76,65,82,32,80,85,82,80,79,83,69,32,65,78,68,32,78,79,78,73,78,70,82,73,78,71,69,77,69,78,84,10,79,70,32,67, + 79,80,89,82,73,71,72,84,44,32,80,65,84,69,78,84,44,32,84,82,65,68,69,77,65,82,75,44,32,79,82,32,79,84,72,69,82,32,82,73, + 71,72,84,46,32,73,78,32,78,79,32,69,86,69,78,84,32,83,72,65,76,76,10,84,65,86,77,74,79,78,71,32,66,65,72,32,66,69,32,76, + 73,65,66,76,69,32,70,79,82,32,65,78,89,32,67,76,65,73,77,44,32,68,65,77,65,71,69,83,32,79,82,32,79,84,72,69,82,32,76,73, + 65,66,73,76,73,84,89,44,10,73,78,67,76,85,68,73,78,71,32,65,78,89,32,71,69,78,69,82,65,76,44,32,83,80,69,67,73,65,76,44, + 32,73,78,68,73,82,69,67,84,44,32,73,78,67,73,68,69,78,84,65,76,44,32,79,82,32,67,79,78,83,69,81,85,69,78,84,73,65,76,10, + 68,65,77,65,71,69,83,44,32,87,72,69,84,72,69,82,32,73,78,32,65,78,32,65,67,84,73,79,78,32,79,70,32,67,79,78,84,82,65,67, + 84,44,32,84,79,82,84,32,79,82,32,79,84,72,69,82,87,73,83,69,44,32,65,82,73,83,73,78,71,10,70,82,79,77,44,32,79,85,84,32, + 79,70,32,84,72,69,32,85,83,69,32,79,82,32,73,78,65,66,73,76,73,84,89,32,84,79,32,85,83,69,32,84,72,69,32,70,79,78,84,32, + 83,79,70,84,87,65,82,69,32,79,82,32,70,82,79,77,10,79,84,72,69,82,32,68,69,65,76,73,78,71,83,32,73,78,32,84,72,69,32,70, + 79,78,84,32,83,79,70,84,87,65,82,69,46,10,10,69,120,99,101,112,116,32,97,115,32,99,111,110,116,97,105,110,101,100,32,105,110,32,116,104, + 105,115,32,110,111,116,105,99,101,44,32,116,104,101,32,110,97,109,101,32,111,102,32,84,97,118,109,106,111,110,103,32,66,97,104,32,115,104,97,108, + 108,32,110,111,116,10,98,101,32,117,115,101,100,32,105,110,32,97,100,118,101,114,116,105,115,105,110,103,32,111,114,32,111,116,104,101,114,119,105,115, + 101,32,116,111,32,112,114,111,109,111,116,101,32,116,104,101,32,115,97,108,101,44,32,117,115,101,32,111,114,32,111,116,104,101,114,10,100,101,97,108, + 105,110,103,115,32,105,110,32,116,104,105,115,32,70,111,110,116,32,83,111,102,116,119,97,114,101,32,119,105,116,104,111,117,116,32,112,114,105,111,114, + 32,119,114,105,116,116,101,110,32,97,117,116,104,111,114,105,122,97,116,105,111,110,10,102,114,111,109,32,84,97,118,109,106,111,110,103,32,66,97,104, + 46,32,70,111,114,32,102,117,114,116,104,101,114,32,105,110,102,111,114,109,97,116,105,111,110,44,32,99,111,110,116,97,99,116,58,32,116,97,118,109, + 106,111,110,103,32,64,32,102,114,101,101,10,46,32,102,114,46,0,0,104,0,116,0,116,0,112,0,58,0,47,0,47,0,100,0,101,0,106,0,97, + 0,118,0,117,0,46,0,115,0,111,0,117,0,114,0,99,0,101,0,102,0,111,0,114,0,103,0,101,0,46,0,110,0,101,0,116,0,47,0,119, + 0,105,0,107,0,105,0,47,0,105,0,110,0,100,0,101,0,120,0,46,0,112,0,104,0,112,0,47,0,76,0,105,0,99,0,101,0,110,0,115, + 0,101,0,0,104,116,116,112,58,47,47,100,101,106,97,118,117,46,115,111,117,114,99,101,102,111,114,103,101,46,110,101,116,47,119,105,107,105,47,105, + 110,100,101,120,46,112,104,112,47,76,105,99,101,110,115,101,0,0,68,0,101,0,106,0,97,0,86,0,117,0,32,0,83,0,97,0,110,0,115,0, + 0,68,101,106,97,86,117,32,83,97,110,115,0,0,66,0,111,0,111,0,107,0,0,66,111,111,107,0,0,2,0,0,0,0,0,0,255,126,0,90, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,220,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8, + 0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28, + 0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48, + 0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,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,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88, + 0,89,0,90,0,91,0,92,0,93,0,94,0,95,0,96,0,97,0,172,0,163,0,132,0,133,0,189,0,150,0,232,0,134,0,142,0,139,0,157, + 0,169,0,164,1,2,0,138,0,218,0,131,0,147,0,242,0,243,0,141,0,151,0,136,0,195,0,222,0,241,0,158,0,170,0,245,0,244,0,246, + 0,162,0,173,0,201,0,199,0,174,0,98,0,99,0,144,0,100,0,203,0,101,0,200,0,202,0,207,0,204,0,205,0,206,0,233,0,102,0,211, + 0,208,0,209,0,175,0,103,0,240,0,145,0,214,0,212,0,213,0,104,0,235,0,237,0,137,0,106,0,105,0,107,0,109,0,108,0,110,0,160, + 0,111,0,113,0,112,0,114,0,115,0,117,0,116,0,118,0,119,0,234,0,120,0,122,0,121,0,123,0,125,0,124,0,184,0,161,0,127,0,126, + 0,128,0,129,0,236,0,238,0,186,1,3,1,4,1,5,1,6,1,7,1,8,0,253,0,254,1,9,1,10,1,11,1,12,0,255,1,0,1,13, + 1,14,1,15,1,1,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25,1,26,1,27,0,248,0,249,1,28,1,29,1,30, + 1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1,43,0,250,0,215,1,44,1,45,1,46,1,47,1,48, + 1,49,1,50,1,51,1,52,1,53,1,54,1,55,1,56,1,57,1,58,0,226,0,227,1,59,1,60,1,61,1,62,1,63,1,64,1,65,1,66, + 1,67,1,68,1,69,1,70,1,71,1,72,1,73,0,176,0,177,1,74,1,75,1,76,1,77,1,78,1,79,1,80,1,81,1,82,1,83,0,251, + 0,252,0,228,0,229,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,94,1,95,1,96,1,97,1,98,1,99,1,100, + 1,101,1,102,1,103,1,104,1,105,0,187,1,106,1,107,1,108,1,109,0,230,0,231,1,110,1,111,1,112,1,113,1,114,1,115,1,116,1,117, + 1,118,1,119,1,120,1,121,1,122,1,123,1,124,1,125,1,126,1,127,1,128,0,166,1,129,1,130,1,131,1,132,1,133,1,134,1,135,1,136, + 1,137,1,138,1,139,1,140,1,141,1,142,1,143,1,144,1,145,1,146,1,147,1,148,1,149,1,150,1,151,1,152,1,153,1,154,1,155,1,156, + 1,157,1,158,1,159,1,160,1,161,1,162,1,163,1,164,1,165,1,166,1,167,1,168,1,169,1,170,1,171,1,172,1,173,1,174,1,175,1,176, + 1,177,1,178,1,179,1,180,1,181,1,182,1,183,1,184,1,185,1,186,1,187,1,188,1,189,1,190,1,191,1,192,1,193,1,194,1,195,1,196, + 1,197,1,198,1,199,1,200,1,201,1,202,1,203,1,204,1,205,1,206,1,207,1,208,1,209,1,210,1,211,1,212,1,213,1,214,1,215,1,216, + 1,217,1,218,1,219,1,220,1,221,1,222,1,223,1,224,1,225,1,226,1,227,1,228,1,229,1,230,1,231,1,232,1,233,1,234,1,235,1,236, + 1,237,1,238,1,239,1,240,1,241,1,242,1,243,1,244,1,245,1,246,1,247,1,248,1,249,1,250,1,251,1,252,1,253,1,254,1,255,2,0, + 2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20, + 2,21,2,22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40, + 2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60, + 2,61,2,62,2,63,2,64,2,65,2,66,2,67,2,68,2,69,2,70,2,71,2,72,2,73,2,74,2,75,2,76,2,77,2,78,2,79,2,80, + 2,81,2,82,2,83,2,84,2,85,2,86,2,87,2,88,2,89,2,90,2,91,2,92,2,93,2,94,2,95,2,96,2,97,2,98,2,99,2,100, + 2,101,2,102,2,103,2,104,2,105,2,106,2,107,2,108,2,109,2,110,2,111,2,112,2,113,2,114,2,115,2,116,2,117,2,118,2,119,2,120, + 2,121,2,122,2,123,2,124,2,125,2,126,2,127,2,128,2,129,2,130,2,131,2,132,2,133,2,134,2,135,2,136,2,137,2,138,2,139,2,140, + 2,141,2,142,2,143,2,144,2,145,2,146,2,147,2,148,2,149,2,150,2,151,2,152,2,153,2,154,2,155,2,156,2,157,2,158,2,159,2,160, + 2,161,2,162,2,163,2,164,2,165,2,166,2,167,2,168,2,169,2,170,2,171,2,172,2,173,2,174,2,175,2,176,2,177,2,178,2,179,0,216, + 0,225,2,180,2,181,2,182,2,183,2,184,2,185,2,186,2,187,2,188,2,189,2,190,2,191,2,192,2,193,2,194,2,195,0,219,0,220,0,221, + 0,224,0,217,0,223,2,196,2,197,2,198,2,199,2,200,2,201,2,202,2,203,2,204,2,205,2,206,2,207,2,208,2,209,2,210,2,211,2,212, + 2,213,2,214,2,215,2,216,2,217,2,218,2,219,2,220,2,221,2,222,2,223,2,224,2,225,2,226,2,227,2,228,2,229,2,230,2,231,2,232, + 2,233,2,234,2,235,2,236,2,237,2,238,2,239,2,240,2,241,2,242,2,243,2,244,2,245,2,246,2,247,2,248,2,249,2,250,2,251,2,252, + 2,253,2,254,2,255,3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16, + 3,17,3,18,3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26,3,27,3,28,3,29,3,30,3,31,3,32,3,33,3,34,3,35,3,36, + 3,37,3,38,3,39,3,40,3,41,3,42,3,43,3,44,3,45,3,46,3,47,3,48,3,49,3,50,3,51,3,52,3,53,3,54,3,55,3,56, + 3,57,3,58,3,59,3,60,3,61,3,62,3,63,3,64,3,65,3,66,3,67,3,68,3,69,3,70,3,71,3,72,3,73,3,74,3,75,3,76, + 3,77,3,78,3,79,3,80,3,81,3,82,3,83,3,84,3,85,3,86,3,87,3,88,3,89,3,90,3,91,3,92,3,93,3,94,3,95,3,96, + 0,159,3,97,3,98,3,99,3,100,3,101,3,102,3,103,3,104,3,105,3,106,3,107,3,108,3,109,3,110,3,111,3,112,3,113,3,114,3,115, + 3,116,3,117,3,118,0,155,3,119,3,120,3,121,3,122,3,123,3,124,3,125,3,126,3,127,3,128,3,129,3,130,3,131,3,132,3,133,3,134, + 3,135,3,136,3,137,3,138,3,139,3,140,3,141,3,142,3,143,3,144,3,145,3,146,3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154, + 3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,162,3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,170,3,171,3,172,3,173,3,174, + 3,175,3,176,3,177,3,178,3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186,3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,194, + 3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,202,3,203,3,204,3,205,3,206,3,207,3,208,3,209,3,210,3,211,3,212,3,213,3,214, + 3,215,3,216,3,217,3,218,3,219,3,220,3,221,3,222,3,223,3,224,3,225,3,226,3,227,3,228,3,229,3,230,3,231,3,232,3,233,3,234, + 3,235,3,236,3,237,3,238,3,239,3,240,3,241,3,242,3,243,3,244,3,245,3,246,3,247,3,248,3,249,3,250,3,251,3,252,3,253,3,254, + 3,255,4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15,4,16,4,17,4,18, + 4,19,4,20,4,21,4,22,4,23,4,24,4,25,4,26,4,27,4,28,4,29,4,30,4,31,4,32,4,33,4,34,4,35,4,36,4,37,4,38, + 4,39,4,40,4,41,4,42,4,43,4,44,4,45,4,46,4,47,4,48,4,49,4,50,4,51,4,52,4,53,4,54,4,55,4,56,4,57,4,58, + 4,59,4,60,4,61,4,62,4,63,4,64,4,65,4,66,4,67,4,68,4,69,4,70,4,71,4,72,4,73,4,74,4,75,4,76,4,77,4,78, + 4,79,4,80,4,81,4,82,4,83,4,84,4,85,4,86,4,87,4,88,4,89,4,90,4,91,4,92,4,93,4,94,4,95,4,96,4,97,4,98, + 4,99,4,100,4,101,4,102,4,103,4,104,4,105,4,106,4,107,4,108,4,109,4,110,4,111,4,112,4,113,4,114,4,115,4,116,4,117,4,118, + 4,119,4,120,4,121,4,122,4,123,4,124,4,125,4,126,4,127,4,128,4,129,4,130,4,131,4,132,4,133,4,134,4,135,4,136,4,137,4,138, + 4,139,4,140,4,141,4,142,4,143,4,144,4,145,4,146,4,147,4,148,4,149,4,150,4,151,4,152,4,153,4,154,4,155,4,156,4,157,4,158, + 4,159,4,160,4,161,4,162,4,163,4,164,4,165,4,166,4,167,4,168,4,169,4,170,4,171,4,172,4,173,4,174,4,175,4,176,4,177,4,178, + 4,179,4,180,4,181,4,182,4,183,4,184,4,185,4,186,4,187,4,188,4,189,4,190,4,191,4,192,4,193,4,194,4,195,4,196,4,197,4,198, + 4,199,4,200,4,201,4,202,4,203,4,204,4,205,4,206,4,207,4,208,4,209,4,210,4,211,4,212,4,213,4,214,4,215,4,216,4,217,4,218, + 4,219,4,220,4,221,4,222,4,223,4,224,4,225,4,226,4,227,4,228,4,229,4,230,4,231,4,232,4,233,4,234,4,235,4,236,4,237,4,238, + 4,239,4,240,4,241,4,242,4,243,4,244,4,245,4,246,4,247,4,248,4,249,4,250,4,251,4,252,4,253,4,254,4,255,5,0,5,1,5,2, + 5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,18,5,19,5,20,5,21,5,22, + 5,23,5,24,5,25,5,26,5,27,5,28,5,29,5,30,5,31,5,32,5,33,5,34,5,35,5,36,5,37,5,38,5,39,5,40,5,41,5,42, + 5,43,5,44,5,45,5,46,5,47,5,48,5,49,5,50,5,51,5,52,5,53,5,54,5,55,5,56,5,57,5,58,5,59,5,60,5,61,5,62, + 5,63,5,64,5,65,5,66,5,67,5,68,5,69,5,70,5,71,5,72,5,73,5,74,5,75,5,76,5,77,5,78,5,79,5,80,5,81,5,82, + 5,83,5,84,5,85,5,86,5,87,5,88,5,89,5,90,5,91,5,92,5,93,5,94,5,95,5,96,5,97,5,98,5,99,5,100,5,101,5,102, + 5,103,5,104,5,105,5,106,5,107,5,108,5,109,5,110,5,111,5,112,5,113,5,114,5,115,5,116,5,117,5,118,5,119,5,120,5,121,5,122, + 5,123,5,124,5,125,5,126,5,127,5,128,5,129,5,130,5,131,5,132,5,133,5,134,5,135,5,136,5,137,5,138,5,139,5,140,5,141,5,142, + 5,143,5,144,5,145,5,146,5,147,5,148,5,149,5,150,5,151,5,152,5,153,5,154,5,155,5,156,5,157,5,158,5,159,5,160,5,161,5,162, + 5,163,5,164,5,165,5,166,5,167,5,168,5,169,5,170,5,171,5,172,5,173,5,174,5,175,5,176,5,177,5,178,5,179,5,180,5,181,5,182, + 5,183,5,184,5,185,5,186,5,187,5,188,5,189,5,190,5,191,5,192,5,193,5,194,5,195,5,196,5,197,5,198,5,199,5,200,5,201,5,202, + 5,203,5,204,5,205,5,206,5,207,5,208,5,209,5,210,5,211,5,212,5,213,5,214,5,215,5,216,5,217,5,218,5,219,5,220,5,221,5,222, + 5,223,5,224,5,225,5,226,5,227,5,228,5,229,5,230,5,231,5,232,5,233,5,234,5,235,5,236,5,237,5,238,5,239,5,240,5,241,5,242, + 5,243,5,244,5,245,5,246,5,247,5,248,5,249,5,250,5,251,5,252,5,253,5,254,5,255,6,0,6,1,6,2,6,3,6,4,6,5,6,6, + 6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26, + 6,27,6,28,6,29,6,30,6,31,6,32,6,33,6,34,6,35,6,36,6,37,6,38,6,39,6,40,6,41,6,42,6,43,6,44,6,45,6,46, + 6,47,6,48,6,49,6,50,6,51,6,52,6,53,6,54,6,55,6,56,6,57,6,58,6,59,6,60,6,61,6,62,6,63,6,64,6,65,6,66, + 6,67,6,68,6,69,6,70,6,71,6,72,6,73,6,74,6,75,6,76,6,77,6,78,6,79,6,80,6,81,6,82,6,83,6,84,6,85,6,86, + 6,87,6,88,6,89,6,90,6,91,6,92,6,93,6,94,6,95,6,96,6,97,6,98,6,99,6,100,6,101,6,102,6,103,6,104,6,105,6,106, + 6,107,6,108,6,109,6,110,6,111,6,112,6,113,6,114,6,115,6,116,6,117,6,118,6,119,6,120,6,121,6,122,6,123,6,124,6,125,6,126, + 6,127,6,128,6,129,6,130,6,131,6,132,6,133,6,134,6,135,6,136,6,137,6,138,6,139,6,140,6,141,6,142,6,143,6,144,6,145,6,146, + 6,147,6,148,6,149,6,150,6,151,6,152,6,153,6,154,6,155,6,156,6,157,6,158,6,159,6,160,6,161,6,162,6,163,6,164,6,165,6,166, + 6,167,6,168,6,169,6,170,6,171,6,172,6,173,6,174,6,175,6,176,6,177,6,178,6,179,6,180,6,181,6,182,6,183,6,184,6,185,6,186, + 6,187,6,188,6,189,6,190,6,191,6,192,6,193,6,194,6,195,6,196,6,197,6,198,6,199,6,200,6,201,6,202,6,203,6,204,6,205,6,206, + 6,207,6,208,6,209,6,210,6,211,6,212,6,213,6,214,6,215,6,216,6,217,6,218,6,219,6,220,6,221,6,222,6,223,6,224,6,225,6,226, + 6,227,6,228,6,229,6,230,6,231,6,232,6,233,6,234,6,235,6,236,6,237,6,238,6,239,6,240,6,241,6,242,6,243,6,244,6,245,6,246, + 6,247,6,248,6,249,6,250,6,251,6,252,6,253,6,254,6,255,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10, + 7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18,7,19,7,20,7,21,7,22,7,23,7,24,7,25,7,26,7,27,7,28,7,29,7,30, + 7,31,7,32,7,33,7,34,7,35,7,36,7,37,7,38,7,39,7,40,7,41,7,42,7,43,7,44,7,45,7,46,7,47,7,48,7,49,7,50, + 7,51,7,52,7,53,7,54,7,55,7,56,7,57,7,58,7,59,7,60,7,61,7,62,7,63,7,64,7,65,7,66,7,67,7,68,7,69,7,70, + 7,71,7,72,7,73,7,74,7,75,7,76,7,77,7,78,7,79,7,80,7,81,7,82,7,83,7,84,7,85,7,86,7,87,7,88,7,89,7,90, + 7,91,7,92,7,93,7,94,7,95,7,96,7,97,7,98,7,99,7,100,7,101,7,102,7,103,7,104,7,105,7,106,7,107,7,108,7,109,7,110, + 7,111,7,112,7,113,7,114,7,115,7,116,7,117,7,118,7,119,7,120,7,121,7,122,7,123,7,124,7,125,7,126,7,127,7,128,7,129,7,130, + 7,131,7,132,7,133,7,134,7,135,7,136,7,137,7,138,7,139,7,140,7,141,7,142,7,143,7,144,7,145,7,146,7,147,7,148,7,149,7,150, + 7,151,7,152,7,153,7,154,7,155,7,156,7,157,7,158,7,159,7,160,7,161,7,162,7,163,7,164,7,165,7,166,7,167,7,168,7,169,7,170, + 7,171,7,172,7,173,7,174,7,175,7,176,7,177,7,178,7,179,7,180,7,181,7,182,7,183,7,184,7,185,7,186,7,187,7,188,7,189,7,190, + 7,191,7,192,7,193,7,194,7,195,7,196,7,197,7,198,7,199,7,200,7,201,7,202,7,203,7,204,7,205,7,206,7,207,7,208,7,209,7,210, + 7,211,7,212,7,213,7,214,7,215,7,216,7,217,7,218,7,219,7,220,7,221,7,222,7,223,7,224,7,225,7,226,7,227,7,228,7,229,7,230, + 7,231,7,232,7,233,7,234,7,235,7,236,7,237,7,238,7,239,7,240,7,241,7,242,7,243,7,244,7,245,7,246,7,247,7,248,7,249,7,250, + 7,251,7,252,7,253,7,254,7,255,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,14, + 8,15,8,16,8,17,8,18,8,19,8,20,8,21,8,22,8,23,8,24,8,25,8,26,8,27,8,28,8,29,8,30,8,31,8,32,8,33,8,34, + 8,35,8,36,8,37,8,38,8,39,8,40,8,41,8,42,8,43,8,44,8,45,8,46,8,47,8,48,8,49,8,50,8,51,8,52,8,53,8,54, + 8,55,8,56,8,57,8,58,8,59,8,60,8,61,8,62,8,63,8,64,8,65,8,66,8,67,8,68,8,69,8,70,8,71,8,72,8,73,8,74, + 8,75,8,76,8,77,8,78,8,79,8,80,8,81,8,82,8,83,8,84,8,85,8,86,8,87,8,88,8,89,8,90,8,91,8,92,8,93,8,94, + 8,95,8,96,8,97,8,98,8,99,8,100,8,101,8,102,8,103,8,104,8,105,8,106,8,107,8,108,8,109,8,110,8,111,8,112,8,113,8,114, + 8,115,8,116,8,117,8,118,8,119,8,120,8,121,8,122,8,123,8,124,8,125,8,126,8,127,8,128,8,129,8,130,8,131,8,132,8,133,8,134, + 8,135,8,136,8,137,8,138,8,139,8,140,8,141,8,142,8,143,8,144,8,145,8,146,8,147,8,148,8,149,8,150,8,151,8,152,8,153,8,154, + 8,155,8,156,8,157,8,158,8,159,8,160,8,161,8,162,8,163,8,164,8,165,8,166,8,167,8,168,8,169,8,170,8,171,8,172,8,173,8,174, + 8,175,8,176,8,177,8,178,8,179,8,180,8,181,8,182,8,183,8,184,8,185,8,186,8,187,8,188,8,189,8,190,8,191,8,192,8,193,8,194, + 8,195,8,196,8,197,8,198,8,199,8,200,8,201,8,202,8,203,8,204,8,205,8,206,8,207,8,208,8,209,8,210,8,211,8,212,8,213,8,214, + 8,215,8,216,8,217,8,218,8,219,8,220,8,221,8,222,8,223,8,224,8,225,8,226,8,227,8,228,8,229,8,230,8,231,8,232,8,233,8,234, + 8,235,8,236,8,237,8,238,8,239,8,240,8,241,8,242,8,243,8,244,8,245,8,246,8,247,8,248,8,249,8,250,8,251,8,252,8,253,8,254, + 8,255,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12,9,13,9,14,9,15,9,16,9,17,9,18, + 9,19,9,20,9,21,9,22,9,23,9,24,9,25,9,26,9,27,9,28,9,29,9,30,9,31,9,32,9,33,9,34,9,35,9,36,9,37,9,38, + 9,39,9,40,9,41,9,42,9,43,9,44,9,45,9,46,9,47,9,48,9,49,9,50,9,51,9,52,9,53,9,54,9,55,9,56,9,57,9,58, + 9,59,9,60,9,61,9,62,9,63,9,64,9,65,9,66,9,67,9,68,9,69,9,70,9,71,9,72,9,73,9,74,9,75,9,76,9,77,9,78, + 9,79,9,80,9,81,9,82,9,83,9,84,9,85,9,86,9,87,9,88,9,89,9,90,9,91,9,92,9,93,9,94,9,95,9,96,9,97,9,98, + 9,99,9,100,9,101,9,102,9,103,9,104,9,105,9,106,9,107,9,108,9,109,9,110,9,111,9,112,9,113,9,114,9,115,9,116,9,117,9,118, + 9,119,9,120,9,121,9,122,9,123,9,124,9,125,9,126,9,127,9,128,9,129,9,130,9,131,9,132,9,133,9,134,9,135,9,136,9,137,9,138, + 9,139,9,140,9,141,9,142,9,143,9,144,9,145,9,146,9,147,9,148,9,149,9,150,9,151,9,152,9,153,9,154,9,155,9,156,9,157,9,158, + 9,159,9,160,9,161,9,162,9,163,9,164,9,165,9,166,9,167,9,168,9,169,9,170,9,171,9,172,9,173,9,174,9,175,9,176,9,177,9,178, + 9,179,9,180,9,181,9,182,9,183,9,184,9,185,9,186,9,187,9,188,9,189,9,190,9,191,9,192,9,193,9,194,9,195,9,196,9,197,9,198, + 9,199,9,200,9,201,9,202,9,203,9,204,9,205,9,206,9,207,9,208,9,209,9,210,9,211,9,212,9,213,9,214,9,215,9,216,9,217,9,218, + 9,219,9,220,9,221,9,222,9,223,9,224,9,225,9,226,9,227,9,228,9,229,9,230,9,231,9,232,9,233,9,234,9,235,9,236,9,237,9,238, + 9,239,9,240,9,241,9,242,9,243,9,244,9,245,9,246,9,247,9,248,9,249,9,250,9,251,9,252,9,253,9,254,9,255,10,0,10,1,10,2, + 10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10,17,10,18,10,19,10,20,10,21,10,22, + 10,23,10,24,10,25,10,26,10,27,10,28,10,29,10,30,10,31,10,32,10,33,10,34,10,35,10,36,10,37,10,38,10,39,10,40,10,41,10,42, + 10,43,10,44,10,45,10,46,10,47,10,48,10,49,10,50,10,51,10,52,10,53,10,54,10,55,10,56,10,57,10,58,10,59,10,60,10,61,10,62, + 10,63,10,64,10,65,10,66,10,67,10,68,10,69,10,70,10,71,10,72,10,73,10,74,10,75,10,76,10,77,10,78,10,79,10,80,10,81,10,82, + 10,83,10,84,10,85,10,86,10,87,10,88,10,89,10,90,10,91,10,92,10,93,10,94,10,95,10,96,10,97,10,98,10,99,10,100,10,101,10,102, + 10,103,10,104,10,105,10,106,10,107,10,108,10,109,10,110,10,111,10,112,10,113,10,114,10,115,10,116,10,117,10,118,10,119,10,120,10,121,10,122, + 10,123,10,124,10,125,10,126,10,127,10,128,10,129,10,130,10,131,10,132,10,133,10,134,10,135,10,136,10,137,10,138,10,139,10,140,10,141,10,142, + 10,143,10,144,10,145,10,146,10,147,10,148,10,149,10,150,10,151,10,152,10,153,10,154,10,155,10,156,10,157,10,158,10,159,10,160,10,161,10,162, + 10,163,10,164,10,165,10,166,10,167,10,168,10,169,10,170,10,171,10,172,10,173,10,174,10,175,10,176,10,177,10,178,10,179,10,180,10,181,10,182, + 10,183,10,184,10,185,10,186,10,187,10,188,10,189,10,190,10,191,10,192,10,193,10,194,10,195,10,196,10,197,10,198,10,199,10,200,10,201,10,202, + 10,203,10,204,10,205,10,206,10,207,10,208,10,209,10,210,10,211,10,212,10,213,10,214,10,215,10,216,10,217,10,218,10,219,10,220,10,221,10,222, + 10,223,10,224,10,225,10,226,10,227,10,228,10,229,10,230,10,231,10,232,10,233,10,234,10,235,10,236,10,237,10,238,10,239,10,240,10,241,10,242, + 10,243,10,244,10,245,10,246,10,247,10,248,10,249,10,250,10,251,10,252,10,253,10,254,10,255,11,0,11,1,11,2,11,3,11,4,11,5,11,6, + 11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,11,15,11,16,11,17,11,18,0,178,0,179,11,19,11,20,11,21,0,182,0,183,0,196, + 11,22,0,180,0,181,0,197,11,23,0,130,0,194,0,135,11,24,11,25,11,26,0,171,11,27,11,28,11,29,11,30,11,31,11,32,11,33,11,34, + 11,35,0,198,11,36,11,37,11,38,11,39,11,40,11,41,11,42,11,43,0,190,0,191,11,44,11,45,11,46,11,47,11,48,11,49,11,50,11,51, + 11,52,0,188,11,53,11,54,11,55,11,56,11,57,11,58,11,59,11,60,11,61,11,62,11,63,11,64,11,65,11,66,11,67,11,68,11,69,11,70, + 11,71,11,72,11,73,11,74,11,75,11,76,11,77,11,78,11,79,11,80,11,81,11,82,11,83,11,84,11,85,11,86,11,87,11,88,11,89,11,90, + 11,91,11,92,11,93,11,94,11,95,11,96,11,97,11,98,11,99,11,100,11,101,11,102,11,103,11,104,11,105,11,106,11,107,11,108,11,109,11,110, + 11,111,11,112,11,113,11,114,11,115,11,116,11,117,11,118,11,119,11,120,11,121,11,122,11,123,11,124,11,125,11,126,11,127,11,128,11,129,11,130, + 11,131,11,132,11,133,11,134,11,135,0,247,11,136,11,137,11,138,11,139,11,140,11,141,11,142,11,143,11,144,11,145,11,146,11,147,11,148,11,149, + 11,150,11,151,11,152,11,153,11,154,11,155,11,156,11,157,11,158,11,159,11,160,11,161,11,162,11,163,11,164,11,165,11,166,11,167,11,168,11,169, + 11,170,11,171,11,172,11,173,11,174,11,175,11,176,11,177,11,178,11,179,11,180,11,181,11,182,11,183,11,184,11,185,11,186,11,187,11,188,11,189, + 11,190,11,191,11,192,11,193,11,194,11,195,11,196,0,140,11,197,11,198,11,199,11,200,11,201,11,202,11,203,11,204,11,205,11,206,11,207,11,208, + 11,209,11,210,11,211,11,212,11,213,11,214,11,215,11,216,11,217,11,218,11,219,11,220,11,221,11,222,11,223,11,224,11,225,11,226,11,227,11,228, + 11,229,11,230,11,231,11,232,11,233,11,234,11,235,11,236,11,237,11,238,11,239,11,240,11,241,11,242,11,243,11,244,11,245,11,246,11,247,11,248, + 11,249,11,250,11,251,11,252,11,253,11,254,11,255,12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12, + 12,13,12,14,12,15,12,16,12,17,12,18,12,19,12,20,12,21,12,22,12,23,12,24,12,25,12,26,12,27,12,28,12,29,12,30,12,31,12,32, + 12,33,12,34,12,35,12,36,12,37,12,38,12,39,12,40,12,41,12,42,12,43,12,44,12,45,12,46,12,47,12,48,12,49,12,50,12,51,12,52, + 12,53,12,54,12,55,12,56,12,57,12,58,12,59,12,60,12,61,12,62,12,63,12,64,12,65,12,66,12,67,12,68,12,69,12,70,12,71,12,72, + 12,73,12,74,12,75,12,76,12,77,12,78,12,79,12,80,12,81,12,82,12,83,12,84,12,85,12,86,12,87,12,88,12,89,12,90,12,91,12,92, + 12,93,12,94,12,95,12,96,12,97,12,98,12,99,12,100,12,101,12,102,12,103,12,104,12,105,12,106,12,107,12,108,12,109,12,110,12,111,12,112, + 12,113,12,114,12,115,12,116,12,117,12,118,12,119,12,120,12,121,12,122,12,123,12,124,12,125,12,126,12,127,12,128,12,129,12,130,12,131,12,132, + 12,133,12,134,12,135,12,136,12,137,12,138,12,139,12,140,12,141,12,142,12,143,12,144,12,145,12,146,12,147,12,148,12,149,12,150,0,152,12,151, + 12,152,12,153,0,168,12,154,12,155,12,156,12,157,12,158,12,159,12,160,12,161,0,154,12,162,0,153,0,239,12,163,12,164,12,165,12,166,12,167, + 12,168,12,169,0,165,12,170,12,171,12,172,0,146,12,173,12,174,12,175,12,176,12,177,12,178,12,179,12,180,12,181,12,182,12,183,12,184,0,156, + 12,185,12,186,12,187,12,188,12,189,12,190,12,191,12,192,12,193,12,194,12,195,12,196,12,197,12,198,12,199,12,200,12,201,12,202,12,203,12,204, + 12,205,12,206,12,207,12,208,12,209,12,210,12,211,12,212,0,167,12,213,12,214,12,215,12,216,12,217,12,218,12,219,12,220,12,221,12,222,12,223, + 12,224,12,225,12,226,12,227,12,228,12,229,12,230,12,231,12,232,12,233,12,234,12,235,0,143,12,236,12,237,12,238,0,148,0,149,12,239,12,240, + 12,241,12,242,12,243,12,244,12,245,12,246,12,247,12,248,12,249,12,250,12,251,12,252,12,253,12,254,12,255,13,0,13,1,13,2,13,3,13,4, + 13,5,13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,15,13,16,13,17,13,18,13,19,13,20,13,21,13,22,13,23,13,24, + 13,25,13,26,13,27,13,28,13,29,13,30,13,31,13,32,13,33,13,34,13,35,13,36,13,37,13,38,13,39,13,40,13,41,13,42,13,43,13,44, + 13,45,13,46,13,47,13,48,13,49,13,50,13,51,13,52,13,53,13,54,13,55,13,56,13,57,13,58,13,59,13,60,13,61,13,62,13,63,13,64, + 13,65,13,66,13,67,13,68,13,69,13,70,13,71,13,72,13,73,13,74,13,75,13,76,13,77,13,78,13,79,13,80,13,81,13,82,13,83,13,84, + 13,85,13,86,13,87,13,88,13,89,13,90,13,91,13,92,13,93,13,94,13,95,13,96,13,97,13,98,13,99,13,100,13,101,13,102,13,103,13,104, + 13,105,13,106,13,107,13,108,13,109,13,110,13,111,13,112,13,113,13,114,13,115,13,116,13,117,13,118,13,119,13,120,13,121,13,122,13,123,13,124, + 13,125,13,126,13,127,13,128,13,129,13,130,13,131,13,132,13,133,13,134,13,135,13,136,13,137,13,138,13,139,13,140,13,141,13,142,13,143,13,144, + 13,145,13,146,13,147,13,148,13,149,13,150,13,151,13,152,13,153,13,154,13,155,13,156,13,157,13,158,13,159,13,160,13,161,13,162,13,163,13,164, + 13,165,13,166,13,167,13,168,13,169,13,170,13,171,13,172,13,173,13,174,13,175,13,176,13,177,13,178,13,179,13,180,13,181,13,182,13,183,13,184, + 13,185,13,186,13,187,13,188,13,189,13,190,13,191,13,192,13,193,13,194,13,195,13,196,13,197,13,198,13,199,13,200,13,201,13,202,13,203,13,204, + 13,205,13,206,13,207,13,208,13,209,13,210,13,211,13,212,13,213,13,214,13,215,13,216,13,217,13,218,13,219,13,220,13,221,13,222,13,223,13,224, + 13,225,13,226,13,227,13,228,13,229,13,230,13,231,13,232,13,233,13,234,13,235,13,236,13,237,13,238,13,239,13,240,13,241,13,242,13,243,13,244, + 13,245,13,246,13,247,13,248,13,249,13,250,13,251,13,252,13,253,13,254,13,255,14,0,14,1,14,2,14,3,14,4,14,5,14,6,14,7,14,8, + 14,9,14,10,14,11,14,12,14,13,14,14,14,15,14,16,14,17,14,18,14,19,14,20,14,21,14,22,14,23,14,24,14,25,14,26,14,27,14,28, + 14,29,14,30,14,31,14,32,14,33,14,34,14,35,14,36,14,37,14,38,14,39,14,40,14,41,14,42,14,43,14,44,14,45,14,46,14,47,14,48, + 14,49,14,50,14,51,14,52,14,53,14,54,14,55,14,56,14,57,14,58,14,59,14,60,14,61,14,62,14,63,14,64,14,65,14,66,14,67,14,68, + 14,69,14,70,14,71,14,72,14,73,14,74,14,75,14,76,14,77,14,78,14,79,14,80,14,81,14,82,14,83,14,84,14,85,14,86,14,87,14,88, + 14,89,14,90,14,91,14,92,14,93,14,94,14,95,14,96,14,97,14,98,14,99,14,100,14,101,14,102,14,103,14,104,14,105,14,106,14,107,14,108, + 14,109,14,110,14,111,14,112,14,113,14,114,14,115,14,116,14,117,14,118,14,119,14,120,14,121,14,122,14,123,14,124,14,125,14,126,14,127,14,128, + 14,129,14,130,14,131,14,132,14,133,14,134,14,135,14,136,14,137,14,138,14,139,14,140,14,141,14,142,14,143,14,144,14,145,14,146,14,147,14,148, + 14,149,14,150,14,151,14,152,14,153,14,154,14,155,14,156,14,157,14,158,14,159,0,185,14,160,14,161,14,162,14,163,14,164,14,165,14,166,14,167, + 14,168,14,169,14,170,14,171,14,172,14,173,14,174,14,175,14,176,14,177,14,178,14,179,14,180,14,181,14,182,14,183,14,184,14,185,14,186,14,187, + 14,188,14,189,14,190,14,191,14,192,14,193,14,194,14,195,14,196,14,197,14,198,14,199,14,200,14,201,14,202,14,203,14,204,14,205,14,206,14,207, + 14,208,14,209,14,210,14,211,14,212,14,213,14,214,14,215,14,216,14,217,14,218,14,219,14,220,14,221,14,222,14,223,14,224,14,225,14,226,14,227, + 14,228,14,229,14,230,14,231,14,232,14,233,14,234,14,235,14,236,14,237,14,238,14,239,14,240,14,241,14,242,14,243,14,244,14,245,14,246,14,247, + 14,248,14,249,14,250,14,251,14,252,14,253,14,254,14,255,15,0,15,1,15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10,15,11, + 15,12,15,13,15,14,15,15,15,16,15,17,15,18,15,19,15,20,15,21,15,22,15,23,15,24,15,25,15,26,15,27,15,28,15,29,15,30,15,31, + 15,32,15,33,15,34,15,35,15,36,15,37,15,38,15,39,15,40,15,41,15,42,15,43,15,44,15,45,15,46,15,47,15,48,15,49,15,50,15,51, + 15,52,15,53,15,54,15,55,15,56,15,57,15,58,15,59,15,60,15,61,15,62,15,63,15,64,15,65,15,66,15,67,15,68,15,69,15,70,15,71, + 15,72,15,73,15,74,15,75,15,76,15,77,15,78,15,79,15,80,15,81,15,82,15,83,15,84,15,85,15,86,15,87,15,88,15,89,15,90,15,91, + 15,92,15,93,15,94,15,95,15,96,15,97,15,98,15,99,15,100,15,101,15,102,15,103,15,104,15,105,15,106,15,107,15,108,15,109,15,110,15,111, + 15,112,15,113,15,114,15,115,15,116,15,117,15,118,15,119,15,120,15,121,15,122,15,123,15,124,15,125,15,126,15,127,15,128,15,129,15,130,15,131, + 15,132,15,133,15,134,15,135,15,136,15,137,15,138,15,139,15,140,15,141,15,142,15,143,15,144,15,145,15,146,15,147,15,148,15,149,15,150,15,151, + 15,152,15,153,15,154,15,155,15,156,15,157,15,158,15,159,15,160,15,161,15,162,15,163,15,164,15,165,15,166,15,167,15,168,15,169,15,170,15,171, + 15,172,15,173,15,174,15,175,15,176,15,177,15,178,15,179,15,180,15,181,15,182,15,183,15,184,15,185,15,186,15,187,15,188,15,189,15,190,15,191, + 15,192,15,193,15,194,15,195,15,196,15,197,15,198,15,199,15,200,15,201,15,202,15,203,15,204,15,205,15,206,15,207,15,208,15,209,15,210,15,211, + 15,212,15,213,15,214,15,215,15,216,15,217,15,218,15,219,15,220,15,221,15,222,15,223,15,224,15,225,15,226,15,227,15,228,15,229,15,230,15,231, + 15,232,15,233,15,234,15,235,15,236,15,237,15,238,15,239,15,240,15,241,15,242,15,243,15,244,15,245,15,246,15,247,15,248,15,249,15,250,15,251, + 15,252,15,253,15,254,15,255,16,0,16,1,16,2,16,3,16,4,16,5,16,6,16,7,16,8,16,9,16,10,16,11,16,12,16,13,16,14,16,15, + 16,16,16,17,16,18,16,19,16,20,16,21,16,22,16,23,16,24,16,25,16,26,16,27,16,28,16,29,16,30,16,31,16,32,16,33,16,34,16,35, + 16,36,16,37,16,38,16,39,16,40,16,41,16,42,16,43,16,44,16,45,16,46,16,47,16,48,16,49,16,50,16,51,16,52,16,53,16,54,16,55, + 16,56,16,57,16,58,16,59,16,60,16,61,16,62,16,63,16,64,16,65,16,66,16,67,16,68,16,69,16,70,16,71,16,72,16,73,16,74,16,75, + 16,76,16,77,16,78,16,79,16,80,16,81,16,82,16,83,16,84,16,85,16,86,16,87,16,88,16,89,16,90,16,91,16,92,16,93,16,94,16,95, + 16,96,16,97,16,98,16,99,16,100,16,101,16,102,16,103,16,104,16,105,16,106,16,107,16,108,16,109,16,110,16,111,16,112,16,113,16,114,16,115, + 16,116,16,117,16,118,16,119,16,120,16,121,16,122,16,123,16,124,16,125,16,126,16,127,16,128,16,129,16,130,16,131,16,132,16,133,16,134,16,135, + 16,136,16,137,16,138,16,139,16,140,16,141,16,142,16,143,16,144,16,145,16,146,16,147,16,148,16,149,16,150,16,151,16,152,16,153,16,154,16,155, + 16,156,16,157,16,158,16,159,16,160,16,161,16,162,16,163,16,164,16,165,16,166,16,167,16,168,16,169,16,170,16,171,16,172,16,173,16,174,16,175, + 16,176,16,177,16,178,16,179,16,180,16,181,16,182,16,183,16,184,16,185,16,186,16,187,16,188,16,189,16,190,16,191,16,192,16,193,16,194,16,195, + 16,196,16,197,16,198,16,199,16,200,16,201,16,202,16,203,16,204,16,205,16,206,16,207,16,208,16,209,16,210,16,211,16,212,16,213,16,214,16,215, + 16,216,16,217,16,218,16,219,16,220,16,221,16,222,16,223,16,224,16,225,16,226,16,227,16,228,16,229,16,230,16,231,16,232,16,233,16,234,16,235, + 16,236,16,237,16,238,16,239,16,240,16,241,16,242,16,243,16,244,16,245,16,246,16,247,16,248,16,249,16,250,16,251,16,252,16,253,16,254,16,255, + 17,0,17,1,17,2,17,3,17,4,17,5,17,6,17,7,17,8,17,9,17,10,17,11,17,12,17,13,17,14,17,15,17,16,17,17,17,18,17,19, + 17,20,17,21,17,22,17,23,17,24,17,25,17,26,17,27,17,28,17,29,17,30,17,31,17,32,17,33,17,34,17,35,17,36,17,37,17,38,17,39, + 17,40,17,41,17,42,17,43,17,44,17,45,17,46,17,47,17,48,17,49,17,50,17,51,17,52,17,53,17,54,17,55,17,56,17,57,17,58,17,59, + 17,60,17,61,17,62,17,63,17,64,17,65,17,66,17,67,17,68,17,69,17,70,17,71,17,72,17,73,17,74,17,75,17,76,17,77,17,78,17,79, + 17,80,17,81,17,82,17,83,17,84,17,85,17,86,17,87,17,88,17,89,17,90,17,91,17,92,17,93,17,94,17,95,17,96,17,97,17,98,17,99, + 17,100,17,101,17,102,17,103,17,104,17,105,17,106,17,107,17,108,17,109,17,110,17,111,17,112,17,113,17,114,17,115,17,116,17,117,17,118,17,119, + 17,120,17,121,17,122,17,123,17,124,17,125,17,126,17,127,17,128,17,129,17,130,17,131,17,132,17,133,17,134,17,135,17,136,17,137,17,138,17,139, + 17,140,17,141,17,142,17,143,17,144,17,145,17,146,17,147,17,148,17,149,17,150,17,151,17,152,17,153,17,154,17,155,17,156,17,157,17,158,17,159, + 17,160,17,161,17,162,17,163,17,164,17,165,17,166,17,167,17,168,17,169,17,170,17,171,17,172,17,173,17,174,17,175,17,176,17,177,17,178,17,179, + 17,180,17,181,17,182,17,183,17,184,17,185,17,186,17,187,17,188,17,189,17,190,17,191,17,192,17,193,17,194,17,195,17,196,17,197,17,198,17,199, + 17,200,17,201,17,202,17,203,17,204,17,205,17,206,17,207,17,208,17,209,17,210,17,211,17,212,17,213,17,214,17,215,17,216,17,217,17,218,17,219, + 17,220,17,221,17,222,17,223,17,224,17,225,17,226,17,227,17,228,17,229,17,230,17,231,17,232,17,233,17,234,17,235,17,236,17,237,17,238,17,239, + 17,240,17,241,17,242,17,243,17,244,17,245,17,246,17,247,17,248,17,249,17,250,17,251,17,252,17,253,17,254,17,255,18,0,18,1,18,2,18,3, + 18,4,18,5,18,6,18,7,18,8,18,9,18,10,18,11,18,12,18,13,18,14,18,15,18,16,18,17,18,18,18,19,18,20,18,21,18,22,18,23, + 18,24,18,25,18,26,18,27,18,28,18,29,18,30,18,31,18,32,18,33,18,34,18,35,18,36,18,37,18,38,18,39,18,40,18,41,18,42,18,43, + 18,44,18,45,18,46,18,47,18,48,18,49,18,50,18,51,18,52,18,53,18,54,18,55,18,56,18,57,18,58,18,59,18,60,18,61,18,62,18,63, + 18,64,18,65,18,66,18,67,18,68,18,69,18,70,18,71,18,72,18,73,18,74,18,75,18,76,18,77,18,78,18,79,18,80,18,81,18,82,18,83, + 18,84,18,85,18,86,18,87,18,88,18,89,18,90,18,91,18,92,18,93,18,94,18,95,18,96,18,97,18,98,18,99,18,100,18,101,18,102,18,103, + 18,104,18,105,18,106,18,107,18,108,18,109,18,110,18,111,18,112,18,113,18,114,18,115,18,116,18,117,18,118,18,119,18,120,18,121,18,122,18,123, + 18,124,18,125,18,126,18,127,18,128,18,129,18,130,18,131,18,132,18,133,18,134,18,135,18,136,18,137,18,138,18,139,18,140,18,141,18,142,18,143, + 18,144,18,145,18,146,18,147,18,148,18,149,18,150,18,151,18,152,18,153,18,154,18,155,18,156,18,157,18,158,18,159,18,160,18,161,18,162,18,163, + 18,164,18,165,18,166,18,167,18,168,18,169,18,170,18,171,18,172,18,173,18,174,18,175,18,176,18,177,18,178,18,179,18,180,18,181,18,182,18,183, + 18,184,18,185,18,186,18,187,18,188,18,189,18,190,18,191,18,192,18,193,18,194,18,195,18,196,18,197,18,198,18,199,18,200,18,201,18,202,18,203, + 18,204,18,205,18,206,18,207,18,208,18,209,18,210,18,211,18,212,18,213,18,214,18,215,18,216,18,217,18,218,18,219,18,220,18,221,18,222,18,223, + 18,224,18,225,18,226,18,227,18,228,18,229,18,230,18,231,18,232,18,233,18,234,18,235,18,236,18,237,18,238,18,239,18,240,18,241,18,242,18,243, + 18,244,18,245,18,246,18,247,18,248,18,249,18,250,18,251,18,252,18,253,18,254,18,255,19,0,19,1,19,2,19,3,19,4,19,5,19,6,19,7, + 19,8,19,9,19,10,19,11,19,12,19,13,19,14,19,15,19,16,19,17,19,18,19,19,19,20,19,21,19,22,19,23,19,24,19,25,19,26,19,27, + 19,28,19,29,19,30,19,31,19,32,19,33,19,34,19,35,19,36,19,37,19,38,19,39,19,40,19,41,19,42,19,43,19,44,19,45,19,46,19,47, + 19,48,19,49,19,50,19,51,19,52,19,53,19,54,19,55,19,56,19,57,19,58,19,59,19,60,19,61,19,62,19,63,19,64,19,65,19,66,19,67, + 19,68,19,69,19,70,19,71,19,72,19,73,19,74,19,75,19,76,19,77,19,78,19,79,19,80,19,81,19,82,19,83,19,84,19,85,19,86,19,87, + 19,88,19,89,19,90,19,91,19,92,19,93,19,94,19,95,19,96,19,97,19,98,19,99,19,100,19,101,19,102,19,103,19,104,19,105,19,106,19,107, + 19,108,19,109,19,110,19,111,19,112,19,113,19,114,19,115,19,116,19,117,19,118,19,119,19,120,19,121,19,122,19,123,19,124,19,125,19,126,19,127, + 19,128,19,129,19,130,19,131,19,132,19,133,19,134,19,135,19,136,19,137,19,138,19,139,19,140,19,141,19,142,19,143,19,144,19,145,19,146,19,147, + 19,148,19,149,19,150,19,151,19,152,19,153,19,154,19,155,19,156,19,157,19,158,19,159,19,160,19,161,19,162,19,163,19,164,19,165,19,166,19,167, + 19,168,0,192,0,193,19,169,19,170,19,171,19,172,19,173,19,174,19,175,19,176,19,177,19,178,19,179,19,180,19,181,19,182,19,183,19,184,19,185, + 19,186,19,187,19,188,19,189,19,190,19,191,19,192,19,193,19,194,19,195,19,196,19,197,19,198,19,199,19,200,19,201,19,202,19,203,19,204,19,205, + 19,206,19,207,19,208,19,209,19,210,19,211,19,212,19,213,19,214,19,215,19,216,19,217,19,218,19,219,19,220,19,221,19,222,19,223,19,224,19,225, + 19,226,19,227,19,228,19,229,19,230,19,231,19,232,19,233,19,234,19,235,19,236,19,237,19,238,19,239,19,240,19,241,19,242,19,243,19,244,19,245, + 19,246,19,247,19,248,19,249,19,250,19,251,19,252,19,253,19,254,19,255,20,0,20,1,20,2,20,3,20,4,20,5,20,6,20,7,20,8,20,9, + 20,10,20,11,20,12,20,13,20,14,20,15,20,16,20,17,20,18,20,19,20,20,20,21,20,22,20,23,20,24,20,25,20,26,20,27,20,28,20,29, + 20,30,20,31,20,32,20,33,20,34,20,35,20,36,20,37,20,38,20,39,20,40,20,41,20,42,20,43,20,44,20,45,20,46,20,47,20,48,20,49, + 20,50,20,51,20,52,20,53,20,54,20,55,20,56,20,57,20,58,20,59,20,60,20,61,20,62,20,63,20,64,20,65,20,66,20,67,20,68,20,69, + 20,70,20,71,20,72,20,73,20,74,20,75,20,76,20,77,20,78,20,79,20,80,20,81,20,82,20,83,20,84,20,85,20,86,20,87,20,88,20,89, + 20,90,20,91,20,92,20,93,20,94,20,95,20,96,20,97,20,98,20,99,20,100,20,101,20,102,20,103,20,104,20,105,20,106,20,107,20,108,20,109, + 20,110,20,111,20,112,20,113,20,114,20,115,20,116,20,117,20,118,20,119,20,120,20,121,20,122,20,123,20,124,20,125,20,126,20,127,20,128,20,129, + 20,130,20,131,20,132,20,133,20,134,20,135,20,136,20,137,20,138,20,139,20,140,20,141,20,142,20,143,20,144,20,145,20,146,20,147,20,148,20,149, + 20,150,20,151,20,152,20,153,20,154,20,155,20,156,20,157,20,158,20,159,20,160,20,161,20,162,20,163,20,164,20,165,20,166,20,167,20,168,20,169, + 20,170,20,171,20,172,20,173,20,174,20,175,20,176,20,177,20,178,20,179,20,180,20,181,20,182,20,183,20,184,20,185,20,186,20,187,20,188,20,189, + 20,190,20,191,20,192,20,193,20,194,20,195,20,196,20,197,20,198,20,199,20,200,20,201,20,202,20,203,20,204,20,205,20,206,20,207,20,208,20,209, + 20,210,20,211,20,212,20,213,20,214,20,215,20,216,20,217,20,218,20,219,20,220,20,221,20,222,20,223,20,224,20,225,20,226,20,227,20,228,20,229, + 20,230,20,231,20,232,20,233,20,234,20,235,20,236,20,237,20,238,20,239,20,240,20,241,20,242,20,243,20,244,20,245,20,246,20,247,20,248,20,249, + 20,250,20,251,20,252,20,253,20,254,20,255,21,0,21,1,21,2,21,3,21,4,21,5,21,6,21,7,21,8,21,9,21,10,21,11,21,12,21,13, + 21,14,21,15,21,16,21,17,21,18,21,19,21,20,21,21,21,22,21,23,21,24,21,25,21,26,21,27,21,28,21,29,21,30,21,31,21,32,21,33, + 21,34,21,35,21,36,21,37,21,38,21,39,21,40,21,41,21,42,21,43,21,44,21,45,21,46,21,47,21,48,21,49,21,50,21,51,21,52,21,53, + 21,54,21,55,21,56,21,57,21,58,21,59,21,60,21,61,21,62,21,63,21,64,21,65,21,66,21,67,21,68,21,69,21,70,21,71,21,72,21,73, + 21,74,21,75,21,76,21,77,21,78,21,79,21,80,21,81,21,82,21,83,21,84,21,85,21,86,21,87,21,88,21,89,21,90,21,91,21,92,21,93, + 21,94,21,95,21,96,21,97,21,98,21,99,21,100,21,101,21,102,21,103,21,104,21,105,21,106,21,107,21,108,21,109,21,110,21,111,21,112,21,113, + 21,114,21,115,21,116,21,117,21,118,21,119,21,120,21,121,21,122,21,123,21,124,21,125,21,126,21,127,21,128,21,129,21,130,21,131,21,132,21,133, + 21,134,21,135,21,136,21,137,21,138,21,139,21,140,21,141,21,142,21,143,21,144,21,145,21,146,21,147,21,148,21,149,21,150,21,151,21,152,21,153, + 21,154,21,155,21,156,21,157,21,158,21,159,21,160,21,161,21,162,21,163,21,164,21,165,21,166,21,167,21,168,21,169,21,170,21,171,21,172,21,173, + 21,174,21,175,21,176,21,177,21,178,21,179,21,180,21,181,21,182,21,183,21,184,21,185,21,186,21,187,21,188,21,189,21,190,21,191,21,192,21,193, + 21,194,21,195,21,196,21,197,21,198,21,199,21,200,21,201,21,202,21,203,21,204,21,205,21,206,21,207,21,208,21,209,21,210,21,211,21,212,21,213, + 21,214,21,215,21,216,21,217,21,218,21,219,21,220,21,221,21,222,21,223,21,224,21,225,21,226,21,227,21,228,21,229,21,230,21,231,21,232,21,233, + 21,234,21,235,21,236,21,237,21,238,21,239,21,240,21,241,21,242,21,243,21,244,21,245,21,246,21,247,21,248,21,249,21,250,21,251,21,252,21,253, + 21,254,21,255,22,0,22,1,22,2,22,3,22,4,22,5,22,6,22,7,22,8,22,9,22,10,22,11,22,12,22,13,22,14,22,15,22,16,22,17, + 22,18,22,19,22,20,22,21,22,22,22,23,22,24,22,25,22,26,22,27,22,28,22,29,22,30,22,31,22,32,22,33,22,34,22,35,22,36,22,37, + 22,38,22,39,22,40,22,41,22,42,22,43,22,44,22,45,22,46,22,47,22,48,22,49,22,50,22,51,22,52,22,53,22,54,22,55,22,56,22,57, + 22,58,22,59,22,60,22,61,22,62,22,63,22,64,22,65,22,66,22,67,22,68,22,69,22,70,22,71,22,72,22,73,22,74,22,75,22,76,22,77, + 22,78,22,79,22,80,22,81,22,82,22,83,22,84,22,85,22,86,22,87,22,88,22,89,22,90,22,91,22,92,22,93,22,94,22,95,22,96,22,97, + 22,98,22,99,22,100,22,101,22,102,22,103,22,104,22,105,22,106,22,107,22,108,22,109,22,110,22,111,22,112,22,113,22,114,22,115,22,116,22,117, + 22,118,22,119,22,120,22,121,22,122,22,123,22,124,22,125,22,126,22,127,22,128,22,129,22,130,22,131,22,132,22,133,22,134,22,135,22,136,22,137, + 22,138,22,139,22,140,22,141,22,142,22,143,22,144,22,145,22,146,22,147,22,148,22,149,22,150,22,151,22,152,22,153,22,154,22,155,22,156,22,157, + 22,158,22,159,22,160,22,161,22,162,22,163,22,164,22,165,22,166,22,167,22,168,22,169,22,170,22,171,22,172,22,173,22,174,22,175,22,176,22,177, + 22,178,22,179,22,180,22,181,22,182,22,183,22,184,22,185,22,186,22,187,22,188,22,189,22,190,22,191,22,192,22,193,22,194,22,195,22,196,22,197, + 22,198,22,199,22,200,22,201,22,202,22,203,22,204,22,205,22,206,22,207,22,208,22,209,22,210,22,211,22,212,22,213,22,214,22,215,22,216,22,217, + 22,218,22,219,22,220,22,221,22,222,22,223,22,224,22,225,22,226,22,227,22,228,22,229,22,230,22,231,22,232,22,233,22,234,22,235,22,236,22,237, + 22,238,22,239,22,240,22,241,22,242,22,243,22,244,22,245,22,246,22,247,22,248,22,249,22,250,22,251,22,252,22,253,22,254,22,255,23,0,23,1, + 23,2,23,3,23,4,23,5,23,6,23,7,23,8,23,9,23,10,23,11,23,12,23,13,23,14,23,15,23,16,23,17,23,18,23,19,23,20,23,21, + 23,22,23,23,23,24,23,25,23,26,23,27,23,28,23,29,23,30,23,31,23,32,23,33,23,34,23,35,23,36,23,37,23,38,23,39,23,40,23,41, + 23,42,23,43,23,44,23,45,23,46,23,47,23,48,23,49,23,50,23,51,23,52,23,53,23,54,23,55,23,56,23,57,23,58,23,59,23,60,23,61, + 23,62,23,63,23,64,23,65,23,66,23,67,23,68,23,69,23,70,23,71,23,72,23,73,23,74,23,75,23,76,23,77,23,78,23,79,23,80,23,81, + 23,82,23,83,23,84,23,85,23,86,23,87,23,88,23,89,23,90,23,91,23,92,23,93,23,94,23,95,23,96,23,97,23,98,23,99,23,100,23,101, + 23,102,23,103,23,104,23,105,23,106,23,107,23,108,23,109,23,110,23,111,23,112,23,113,23,114,23,115,23,116,23,117,23,118,23,119,23,120,23,121, + 23,122,23,123,23,124,23,125,23,126,23,127,23,128,23,129,23,130,23,131,23,132,23,133,23,134,23,135,23,136,23,137,23,138,23,139,23,140,23,141, + 23,142,23,143,23,144,23,145,23,146,23,147,23,148,23,149,23,150,23,151,23,152,23,153,23,154,23,155,23,156,23,157,23,158,23,159,23,160,23,161, + 23,162,23,163,23,164,23,165,23,166,23,167,23,168,23,169,23,170,23,171,23,172,23,173,23,174,23,175,23,176,23,177,23,178,23,179,23,180,23,181, + 23,182,23,183,23,184,23,185,23,186,23,187,23,188,23,189,23,190,23,191,23,192,23,193,23,194,23,195,23,196,23,197,23,198,23,199,23,200,23,201, + 23,202,23,203,23,204,23,205,23,206,23,207,23,208,23,209,23,210,23,211,23,212,23,213,23,214,23,215,23,216,23,217,23,218,23,219,23,220,9,115, + 102,116,104,121,112,104,101,110,7,65,109,97,99,114,111,110,7,97,109,97,99,114,111,110,6,65,98,114,101,118,101,6,97,98,114,101,118,101,7,65, + 111,103,111,110,101,107,7,97,111,103,111,110,101,107,11,67,99,105,114,99,117,109,102,108,101,120,11,99,99,105,114,99,117,109,102,108,101,120,10,67, + 100,111,116,97,99,99,101,110,116,10,99,100,111,116,97,99,99,101,110,116,6,68,99,97,114,111,110,6,100,99,97,114,111,110,6,68,99,114,111,97, + 116,7,69,109,97,99,114,111,110,7,101,109,97,99,114,111,110,6,69,98,114,101,118,101,6,101,98,114,101,118,101,10,69,100,111,116,97,99,99,101, + 110,116,10,101,100,111,116,97,99,99,101,110,116,7,69,111,103,111,110,101,107,7,101,111,103,111,110,101,107,6,69,99,97,114,111,110,6,101,99,97, + 114,111,110,11,71,99,105,114,99,117,109,102,108,101,120,11,103,99,105,114,99,117,109,102,108,101,120,10,71,100,111,116,97,99,99,101,110,116,10,103, + 100,111,116,97,99,99,101,110,116,12,71,99,111,109,109,97,97,99,99,101,110,116,12,103,99,111,109,109,97,97,99,99,101,110,116,11,72,99,105,114, + 99,117,109,102,108,101,120,11,104,99,105,114,99,117,109,102,108,101,120,4,72,98,97,114,4,104,98,97,114,6,73,116,105,108,100,101,6,105,116,105, + 108,100,101,7,73,109,97,99,114,111,110,7,105,109,97,99,114,111,110,6,73,98,114,101,118,101,6,105,98,114,101,118,101,7,73,111,103,111,110,101, + 107,7,105,111,103,111,110,101,107,2,73,74,2,105,106,11,74,99,105,114,99,117,109,102,108,101,120,11,106,99,105,114,99,117,109,102,108,101,120,12, + 75,99,111,109,109,97,97,99,99,101,110,116,12,107,99,111,109,109,97,97,99,99,101,110,116,12,107,103,114,101,101,110,108,97,110,100,105,99,6,76, + 97,99,117,116,101,6,108,97,99,117,116,101,12,76,99,111,109,109,97,97,99,99,101,110,116,12,108,99,111,109,109,97,97,99,99,101,110,116,6,76, + 99,97,114,111,110,6,108,99,97,114,111,110,4,76,100,111,116,4,108,100,111,116,6,78,97,99,117,116,101,6,110,97,99,117,116,101,12,78,99,111, + 109,109,97,97,99,99,101,110,116,12,110,99,111,109,109,97,97,99,99,101,110,116,6,78,99,97,114,111,110,6,110,99,97,114,111,110,11,110,97,112, + 111,115,116,114,111,112,104,101,3,69,110,103,3,101,110,103,7,79,109,97,99,114,111,110,7,111,109,97,99,114,111,110,6,79,98,114,101,118,101,6, + 111,98,114,101,118,101,13,79,104,117,110,103,97,114,117,109,108,97,117,116,13,111,104,117,110,103,97,114,117,109,108,97,117,116,6,82,97,99,117,116, + 101,6,114,97,99,117,116,101,12,82,99,111,109,109,97,97,99,99,101,110,116,12,114,99,111,109,109,97,97,99,99,101,110,116,6,82,99,97,114,111, + 110,6,114,99,97,114,111,110,6,83,97,99,117,116,101,6,115,97,99,117,116,101,11,83,99,105,114,99,117,109,102,108,101,120,11,115,99,105,114,99, + 117,109,102,108,101,120,12,84,99,111,109,109,97,97,99,99,101,110,116,12,116,99,111,109,109,97,97,99,99,101,110,116,6,84,99,97,114,111,110,6, + 116,99,97,114,111,110,4,84,98,97,114,4,116,98,97,114,6,85,116,105,108,100,101,6,117,116,105,108,100,101,7,85,109,97,99,114,111,110,7,117, + 109,97,99,114,111,110,6,85,98,114,101,118,101,6,117,98,114,101,118,101,5,85,114,105,110,103,5,117,114,105,110,103,13,85,104,117,110,103,97,114, + 117,109,108,97,117,116,13,117,104,117,110,103,97,114,117,109,108,97,117,116,7,85,111,103,111,110,101,107,7,117,111,103,111,110,101,107,11,87,99,105, + 114,99,117,109,102,108,101,120,11,119,99,105,114,99,117,109,102,108,101,120,11,89,99,105,114,99,117,109,102,108,101,120,11,121,99,105,114,99,117,109, + 102,108,101,120,6,90,97,99,117,116,101,6,122,97,99,117,116,101,10,90,100,111,116,97,99,99,101,110,116,10,122,100,111,116,97,99,99,101,110,116, + 5,108,111,110,103,115,7,117,110,105,48,49,56,48,7,117,110,105,48,49,56,49,7,117,110,105,48,49,56,50,7,117,110,105,48,49,56,51,7,117, + 110,105,48,49,56,52,7,117,110,105,48,49,56,53,7,117,110,105,48,49,56,54,7,117,110,105,48,49,56,55,7,117,110,105,48,49,56,56,7,117, + 110,105,48,49,56,57,7,117,110,105,48,49,56,65,7,117,110,105,48,49,56,66,7,117,110,105,48,49,56,67,7,117,110,105,48,49,56,68,7,117, + 110,105,48,49,56,69,7,117,110,105,48,49,56,70,7,117,110,105,48,49,57,48,7,117,110,105,48,49,57,49,7,117,110,105,48,49,57,51,7,117, + 110,105,48,49,57,52,7,117,110,105,48,49,57,53,7,117,110,105,48,49,57,54,7,117,110,105,48,49,57,55,7,117,110,105,48,49,57,56,7,117, + 110,105,48,49,57,57,7,117,110,105,48,49,57,65,7,117,110,105,48,49,57,66,7,117,110,105,48,49,57,67,7,117,110,105,48,49,57,68,7,117, + 110,105,48,49,57,69,7,117,110,105,48,49,57,70,5,79,104,111,114,110,5,111,104,111,114,110,7,117,110,105,48,49,65,50,7,117,110,105,48,49, + 65,51,7,117,110,105,48,49,65,52,7,117,110,105,48,49,65,53,7,117,110,105,48,49,65,54,7,117,110,105,48,49,65,55,7,117,110,105,48,49, + 65,56,7,117,110,105,48,49,65,57,7,117,110,105,48,49,65,65,7,117,110,105,48,49,65,66,7,117,110,105,48,49,65,67,7,117,110,105,48,49, + 65,68,7,117,110,105,48,49,65,69,5,85,104,111,114,110,5,117,104,111,114,110,7,117,110,105,48,49,66,49,7,117,110,105,48,49,66,50,7,117, + 110,105,48,49,66,51,7,117,110,105,48,49,66,52,7,117,110,105,48,49,66,53,7,117,110,105,48,49,66,54,7,117,110,105,48,49,66,55,7,117, + 110,105,48,49,66,56,7,117,110,105,48,49,66,57,7,117,110,105,48,49,66,65,7,117,110,105,48,49,66,66,7,117,110,105,48,49,66,67,7,117, + 110,105,48,49,66,68,7,117,110,105,48,49,66,69,7,117,110,105,48,49,66,70,7,117,110,105,48,49,67,48,7,117,110,105,48,49,67,49,7,117, + 110,105,48,49,67,50,7,117,110,105,48,49,67,51,7,117,110,105,48,49,67,52,7,117,110,105,48,49,67,53,7,117,110,105,48,49,67,54,7,117, + 110,105,48,49,67,55,7,117,110,105,48,49,67,56,7,117,110,105,48,49,67,57,7,117,110,105,48,49,67,65,7,117,110,105,48,49,67,66,7,117, + 110,105,48,49,67,67,7,117,110,105,48,49,67,68,7,117,110,105,48,49,67,69,7,117,110,105,48,49,67,70,7,117,110,105,48,49,68,48,7,117, + 110,105,48,49,68,49,7,117,110,105,48,49,68,50,7,117,110,105,48,49,68,51,7,117,110,105,48,49,68,52,7,117,110,105,48,49,68,53,7,117, + 110,105,48,49,68,54,7,117,110,105,48,49,68,55,7,117,110,105,48,49,68,56,7,117,110,105,48,49,68,57,7,117,110,105,48,49,68,65,7,117, + 110,105,48,49,68,66,7,117,110,105,48,49,68,67,7,117,110,105,48,49,68,68,7,117,110,105,48,49,68,69,7,117,110,105,48,49,68,70,7,117, + 110,105,48,49,69,48,7,117,110,105,48,49,69,49,7,117,110,105,48,49,69,50,7,117,110,105,48,49,69,51,7,117,110,105,48,49,69,52,7,117, + 110,105,48,49,69,53,6,71,99,97,114,111,110,6,103,99,97,114,111,110,7,117,110,105,48,49,69,56,7,117,110,105,48,49,69,57,7,117,110,105, + 48,49,69,65,7,117,110,105,48,49,69,66,7,117,110,105,48,49,69,67,7,117,110,105,48,49,69,68,7,117,110,105,48,49,69,69,7,117,110,105, + 48,49,69,70,7,117,110,105,48,49,70,48,7,117,110,105,48,49,70,49,7,117,110,105,48,49,70,50,7,117,110,105,48,49,70,51,7,117,110,105, + 48,49,70,52,7,117,110,105,48,49,70,53,7,117,110,105,48,49,70,54,7,117,110,105,48,49,70,55,7,117,110,105,48,49,70,56,7,117,110,105, + 48,49,70,57,10,65,114,105,110,103,97,99,117,116,101,10,97,114,105,110,103,97,99,117,116,101,7,65,69,97,99,117,116,101,7,97,101,97,99,117, + 116,101,11,79,115,108,97,115,104,97,99,117,116,101,11,111,115,108,97,115,104,97,99,117,116,101,7,117,110,105,48,50,48,48,7,117,110,105,48,50, + 48,49,7,117,110,105,48,50,48,50,7,117,110,105,48,50,48,51,7,117,110,105,48,50,48,52,7,117,110,105,48,50,48,53,7,117,110,105,48,50, + 48,54,7,117,110,105,48,50,48,55,7,117,110,105,48,50,48,56,7,117,110,105,48,50,48,57,7,117,110,105,48,50,48,65,7,117,110,105,48,50, + 48,66,7,117,110,105,48,50,48,67,7,117,110,105,48,50,48,68,7,117,110,105,48,50,48,69,7,117,110,105,48,50,48,70,7,117,110,105,48,50, + 49,48,7,117,110,105,48,50,49,49,7,117,110,105,48,50,49,50,7,117,110,105,48,50,49,51,7,117,110,105,48,50,49,52,7,117,110,105,48,50, + 49,53,7,117,110,105,48,50,49,54,7,117,110,105,48,50,49,55,12,83,99,111,109,109,97,97,99,99,101,110,116,12,115,99,111,109,109,97,97,99, + 99,101,110,116,7,117,110,105,48,50,49,65,7,117,110,105,48,50,49,66,7,117,110,105,48,50,49,67,7,117,110,105,48,50,49,68,7,117,110,105, + 48,50,49,69,7,117,110,105,48,50,49,70,7,117,110,105,48,50,50,48,7,117,110,105,48,50,50,49,7,117,110,105,48,50,50,50,7,117,110,105, + 48,50,50,51,7,117,110,105,48,50,50,52,7,117,110,105,48,50,50,53,7,117,110,105,48,50,50,54,7,117,110,105,48,50,50,55,7,117,110,105, + 48,50,50,56,7,117,110,105,48,50,50,57,7,117,110,105,48,50,50,65,7,117,110,105,48,50,50,66,7,117,110,105,48,50,50,67,7,117,110,105, + 48,50,50,68,7,117,110,105,48,50,50,69,7,117,110,105,48,50,50,70,7,117,110,105,48,50,51,48,7,117,110,105,48,50,51,49,7,117,110,105, + 48,50,51,50,7,117,110,105,48,50,51,51,7,117,110,105,48,50,51,52,7,117,110,105,48,50,51,53,7,117,110,105,48,50,51,54,8,100,111,116, + 108,101,115,115,106,7,117,110,105,48,50,51,56,7,117,110,105,48,50,51,57,7,117,110,105,48,50,51,65,7,117,110,105,48,50,51,66,7,117,110, + 105,48,50,51,67,7,117,110,105,48,50,51,68,7,117,110,105,48,50,51,69,7,117,110,105,48,50,51,70,7,117,110,105,48,50,52,48,7,117,110, + 105,48,50,52,49,7,117,110,105,48,50,52,50,7,117,110,105,48,50,52,51,7,117,110,105,48,50,52,52,7,117,110,105,48,50,52,53,7,117,110, + 105,48,50,52,54,7,117,110,105,48,50,52,55,7,117,110,105,48,50,52,56,7,117,110,105,48,50,52,57,7,117,110,105,48,50,52,65,7,117,110, + 105,48,50,52,66,7,117,110,105,48,50,52,67,7,117,110,105,48,50,52,68,7,117,110,105,48,50,52,69,7,117,110,105,48,50,52,70,7,117,110, + 105,48,50,53,48,7,117,110,105,48,50,53,49,7,117,110,105,48,50,53,50,7,117,110,105,48,50,53,51,7,117,110,105,48,50,53,52,7,117,110, + 105,48,50,53,53,7,117,110,105,48,50,53,54,7,117,110,105,48,50,53,55,7,117,110,105,48,50,53,56,7,117,110,105,48,50,53,57,7,117,110, + 105,48,50,53,65,7,117,110,105,48,50,53,66,7,117,110,105,48,50,53,67,7,117,110,105,48,50,53,68,7,117,110,105,48,50,53,69,7,117,110, + 105,48,50,53,70,7,117,110,105,48,50,54,48,7,117,110,105,48,50,54,49,7,117,110,105,48,50,54,50,7,117,110,105,48,50,54,51,7,117,110, + 105,48,50,54,52,7,117,110,105,48,50,54,53,7,117,110,105,48,50,54,54,7,117,110,105,48,50,54,55,7,117,110,105,48,50,54,56,7,117,110, + 105,48,50,54,57,7,117,110,105,48,50,54,65,7,117,110,105,48,50,54,66,7,117,110,105,48,50,54,67,7,117,110,105,48,50,54,68,7,117,110, + 105,48,50,54,69,7,117,110,105,48,50,54,70,7,117,110,105,48,50,55,48,7,117,110,105,48,50,55,49,7,117,110,105,48,50,55,50,7,117,110, + 105,48,50,55,51,7,117,110,105,48,50,55,52,7,117,110,105,48,50,55,53,7,117,110,105,48,50,55,54,7,117,110,105,48,50,55,55,7,117,110, + 105,48,50,55,56,7,117,110,105,48,50,55,57,7,117,110,105,48,50,55,65,7,117,110,105,48,50,55,66,7,117,110,105,48,50,55,67,7,117,110, + 105,48,50,55,68,7,117,110,105,48,50,55,69,7,117,110,105,48,50,55,70,7,117,110,105,48,50,56,48,7,117,110,105,48,50,56,49,7,117,110, + 105,48,50,56,50,7,117,110,105,48,50,56,51,7,117,110,105,48,50,56,52,7,117,110,105,48,50,56,53,7,117,110,105,48,50,56,54,7,117,110, + 105,48,50,56,55,7,117,110,105,48,50,56,56,7,117,110,105,48,50,56,57,7,117,110,105,48,50,56,65,7,117,110,105,48,50,56,66,7,117,110, + 105,48,50,56,67,7,117,110,105,48,50,56,68,7,117,110,105,48,50,56,69,7,117,110,105,48,50,56,70,7,117,110,105,48,50,57,48,7,117,110, + 105,48,50,57,49,7,117,110,105,48,50,57,50,7,117,110,105,48,50,57,51,7,117,110,105,48,50,57,52,7,117,110,105,48,50,57,53,7,117,110, + 105,48,50,57,54,7,117,110,105,48,50,57,55,7,117,110,105,48,50,57,56,7,117,110,105,48,50,57,57,7,117,110,105,48,50,57,65,7,117,110, + 105,48,50,57,66,7,117,110,105,48,50,57,67,7,117,110,105,48,50,57,68,7,117,110,105,48,50,57,69,7,117,110,105,48,50,57,70,7,117,110, + 105,48,50,65,48,7,117,110,105,48,50,65,49,7,117,110,105,48,50,65,50,7,117,110,105,48,50,65,51,7,117,110,105,48,50,65,52,7,117,110, + 105,48,50,65,53,7,117,110,105,48,50,65,54,7,117,110,105,48,50,65,55,7,117,110,105,48,50,65,56,7,117,110,105,48,50,65,57,7,117,110, + 105,48,50,65,65,7,117,110,105,48,50,65,66,7,117,110,105,48,50,65,67,7,117,110,105,48,50,65,68,7,117,110,105,48,50,65,69,7,117,110, + 105,48,50,65,70,7,117,110,105,48,50,66,48,7,117,110,105,48,50,66,49,7,117,110,105,48,50,66,50,7,117,110,105,48,50,66,51,7,117,110, + 105,48,50,66,52,7,117,110,105,48,50,66,53,7,117,110,105,48,50,66,54,7,117,110,105,48,50,66,55,7,117,110,105,48,50,66,56,7,117,110, + 105,48,50,66,57,7,117,110,105,48,50,66,65,7,117,110,105,48,50,66,66,7,117,110,105,48,50,66,67,7,117,110,105,48,50,66,68,7,117,110, + 105,48,50,66,69,7,117,110,105,48,50,66,70,7,117,110,105,48,50,67,48,7,117,110,105,48,50,67,49,7,117,110,105,48,50,67,50,7,117,110, + 105,48,50,67,51,7,117,110,105,48,50,67,52,7,117,110,105,48,50,67,53,7,117,110,105,48,50,67,56,7,117,110,105,48,50,67,57,7,117,110, + 105,48,50,67,65,7,117,110,105,48,50,67,66,7,117,110,105,48,50,67,67,7,117,110,105,48,50,67,68,7,117,110,105,48,50,67,69,7,117,110, + 105,48,50,67,70,7,117,110,105,48,50,68,48,7,117,110,105,48,50,68,49,7,117,110,105,48,50,68,50,7,117,110,105,48,50,68,51,7,117,110, + 105,48,50,68,52,7,117,110,105,48,50,68,53,7,117,110,105,48,50,68,54,7,117,110,105,48,50,68,55,7,117,110,105,48,50,68,69,7,117,110, + 105,48,50,68,70,7,117,110,105,48,50,69,48,7,117,110,105,48,50,69,49,7,117,110,105,48,50,69,50,7,117,110,105,48,50,69,51,7,117,110, + 105,48,50,69,52,7,117,110,105,48,50,69,53,7,117,110,105,48,50,69,54,7,117,110,105,48,50,69,55,7,117,110,105,48,50,69,56,7,117,110, + 105,48,50,69,57,7,117,110,105,48,50,69,67,7,117,110,105,48,50,69,68,7,117,110,105,48,50,69,69,7,117,110,105,48,50,70,51,7,117,110, + 105,48,50,70,55,9,103,114,97,118,101,99,111,109,98,9,97,99,117,116,101,99,111,109,98,7,117,110,105,48,51,48,50,9,116,105,108,100,101,99, + 111,109,98,7,117,110,105,48,51,48,52,7,117,110,105,48,51,48,53,7,117,110,105,48,51,48,54,7,117,110,105,48,51,48,55,7,117,110,105,48, + 51,48,56,13,104,111,111,107,97,98,111,118,101,99,111,109,98,7,117,110,105,48,51,48,65,7,117,110,105,48,51,48,66,7,117,110,105,48,51,48, + 67,7,117,110,105,48,51,48,68,7,117,110,105,48,51,48,69,7,117,110,105,48,51,48,70,7,117,110,105,48,51,49,48,7,117,110,105,48,51,49, + 49,7,117,110,105,48,51,49,50,7,117,110,105,48,51,49,51,7,117,110,105,48,51,49,52,7,117,110,105,48,51,49,53,7,117,110,105,48,51,49, + 54,7,117,110,105,48,51,49,55,7,117,110,105,48,51,49,56,7,117,110,105,48,51,49,57,7,117,110,105,48,51,49,65,7,117,110,105,48,51,49, + 66,7,117,110,105,48,51,49,67,7,117,110,105,48,51,49,68,7,117,110,105,48,51,49,69,7,117,110,105,48,51,49,70,7,117,110,105,48,51,50, + 48,7,117,110,105,48,51,50,49,7,117,110,105,48,51,50,50,12,100,111,116,98,101,108,111,119,99,111,109,98,7,117,110,105,48,51,50,52,7,117, + 110,105,48,51,50,53,7,117,110,105,48,51,50,54,7,117,110,105,48,51,50,55,7,117,110,105,48,51,50,56,7,117,110,105,48,51,50,57,7,117, + 110,105,48,51,50,65,7,117,110,105,48,51,50,66,7,117,110,105,48,51,50,67,7,117,110,105,48,51,50,68,7,117,110,105,48,51,50,69,7,117, + 110,105,48,51,50,70,7,117,110,105,48,51,51,48,7,117,110,105,48,51,51,49,7,117,110,105,48,51,51,50,7,117,110,105,48,51,51,51,7,117, + 110,105,48,51,51,52,7,117,110,105,48,51,51,53,7,117,110,105,48,51,51,54,7,117,110,105,48,51,51,55,7,117,110,105,48,51,51,56,7,117, + 110,105,48,51,51,57,7,117,110,105,48,51,51,65,7,117,110,105,48,51,51,66,7,117,110,105,48,51,51,67,7,117,110,105,48,51,51,68,7,117, + 110,105,48,51,51,69,7,117,110,105,48,51,51,70,7,117,110,105,48,51,52,48,7,117,110,105,48,51,52,49,7,117,110,105,48,51,52,50,7,117, + 110,105,48,51,52,51,7,117,110,105,48,51,52,52,7,117,110,105,48,51,52,53,7,117,110,105,48,51,52,54,7,117,110,105,48,51,52,55,7,117, + 110,105,48,51,52,56,7,117,110,105,48,51,52,57,7,117,110,105,48,51,52,65,7,117,110,105,48,51,52,66,7,117,110,105,48,51,52,67,7,117, + 110,105,48,51,52,68,7,117,110,105,48,51,52,69,7,117,110,105,48,51,52,70,7,117,110,105,48,51,53,49,7,117,110,105,48,51,53,50,7,117, + 110,105,48,51,53,51,7,117,110,105,48,51,53,55,7,117,110,105,48,51,53,56,7,117,110,105,48,51,53,65,7,117,110,105,48,51,53,67,7,117, + 110,105,48,51,53,68,7,117,110,105,48,51,53,69,7,117,110,105,48,51,53,70,7,117,110,105,48,51,54,48,7,117,110,105,48,51,54,49,7,117, + 110,105,48,51,54,50,7,117,110,105,48,51,55,48,7,117,110,105,48,51,55,49,7,117,110,105,48,51,55,50,7,117,110,105,48,51,55,51,7,117, + 110,105,48,51,55,52,7,117,110,105,48,51,55,53,7,117,110,105,48,51,55,54,7,117,110,105,48,51,55,55,7,117,110,105,48,51,55,65,7,117, + 110,105,48,51,55,66,7,117,110,105,48,51,55,67,7,117,110,105,48,51,55,68,7,117,110,105,48,51,55,69,5,116,111,110,111,115,13,100,105,101, + 114,101,115,105,115,116,111,110,111,115,10,65,108,112,104,97,116,111,110,111,115,9,97,110,111,116,101,108,101,105,97,12,69,112,115,105,108,111,110,116, + 111,110,111,115,8,69,116,97,116,111,110,111,115,9,73,111,116,97,116,111,110,111,115,12,79,109,105,99,114,111,110,116,111,110,111,115,12,85,112,115, + 105,108,111,110,116,111,110,111,115,10,79,109,101,103,97,116,111,110,111,115,17,105,111,116,97,100,105,101,114,101,115,105,115,116,111,110,111,115,5,65, + 108,112,104,97,4,66,101,116,97,5,71,97,109,109,97,7,117,110,105,48,51,57,52,7,69,112,115,105,108,111,110,4,90,101,116,97,3,69,116,97, + 5,84,104,101,116,97,4,73,111,116,97,5,75,97,112,112,97,6,76,97,109,98,100,97,2,77,117,2,78,117,2,88,105,7,79,109,105,99,114,111, + 110,2,80,105,3,82,104,111,5,83,105,103,109,97,3,84,97,117,7,85,112,115,105,108,111,110,3,80,104,105,3,67,104,105,3,80,115,105,12,73, + 111,116,97,100,105,101,114,101,115,105,115,15,85,112,115,105,108,111,110,100,105,101,114,101,115,105,115,10,97,108,112,104,97,116,111,110,111,115,12,101, + 112,115,105,108,111,110,116,111,110,111,115,8,101,116,97,116,111,110,111,115,9,105,111,116,97,116,111,110,111,115,20,117,112,115,105,108,111,110,100,105, + 101,114,101,115,105,115,116,111,110,111,115,5,97,108,112,104,97,4,98,101,116,97,5,103,97,109,109,97,5,100,101,108,116,97,7,101,112,115,105,108, + 111,110,4,122,101,116,97,3,101,116,97,5,116,104,101,116,97,4,105,111,116,97,5,107,97,112,112,97,6,108,97,109,98,100,97,7,117,110,105,48, + 51,66,67,2,110,117,2,120,105,7,111,109,105,99,114,111,110,3,114,104,111,6,115,105,103,109,97,49,5,115,105,103,109,97,3,116,97,117,7,117, + 112,115,105,108,111,110,3,112,104,105,3,99,104,105,3,112,115,105,5,111,109,101,103,97,12,105,111,116,97,100,105,101,114,101,115,105,115,15,117,112, + 115,105,108,111,110,100,105,101,114,101,115,105,115,12,111,109,105,99,114,111,110,116,111,110,111,115,12,117,112,115,105,108,111,110,116,111,110,111,115,10, + 111,109,101,103,97,116,111,110,111,115,7,117,110,105,48,51,67,70,7,117,110,105,48,51,68,48,6,116,104,101,116,97,49,8,85,112,115,105,108,111, + 110,49,7,117,110,105,48,51,68,51,7,117,110,105,48,51,68,52,4,112,104,105,49,6,111,109,101,103,97,49,7,117,110,105,48,51,68,55,7,117, + 110,105,48,51,68,56,7,117,110,105,48,51,68,57,7,117,110,105,48,51,68,65,7,117,110,105,48,51,68,66,7,117,110,105,48,51,68,67,7,117, + 110,105,48,51,68,68,7,117,110,105,48,51,68,69,7,117,110,105,48,51,68,70,7,117,110,105,48,51,69,48,7,117,110,105,48,51,69,49,7,117, + 110,105,48,51,69,50,7,117,110,105,48,51,69,51,7,117,110,105,48,51,69,52,7,117,110,105,48,51,69,53,7,117,110,105,48,51,69,54,7,117, + 110,105,48,51,69,55,7,117,110,105,48,51,69,56,7,117,110,105,48,51,69,57,7,117,110,105,48,51,69,65,7,117,110,105,48,51,69,66,7,117, + 110,105,48,51,69,67,7,117,110,105,48,51,69,68,7,117,110,105,48,51,69,69,7,117,110,105,48,51,69,70,7,117,110,105,48,51,70,48,7,117, + 110,105,48,51,70,49,7,117,110,105,48,51,70,50,7,117,110,105,48,51,70,51,7,117,110,105,48,51,70,52,7,117,110,105,48,51,70,53,7,117, + 110,105,48,51,70,54,7,117,110,105,48,51,70,55,7,117,110,105,48,51,70,56,7,117,110,105,48,51,70,57,7,117,110,105,48,51,70,65,7,117, + 110,105,48,51,70,66,7,117,110,105,48,51,70,67,7,117,110,105,48,51,70,68,7,117,110,105,48,51,70,69,7,117,110,105,48,51,70,70,7,117, + 110,105,48,52,48,48,7,117,110,105,48,52,48,49,7,117,110,105,48,52,48,50,7,117,110,105,48,52,48,51,7,117,110,105,48,52,48,52,7,117, + 110,105,48,52,48,53,7,117,110,105,48,52,48,54,7,117,110,105,48,52,48,55,7,117,110,105,48,52,48,56,7,117,110,105,48,52,48,57,7,117, + 110,105,48,52,48,65,7,117,110,105,48,52,48,66,7,117,110,105,48,52,48,67,7,117,110,105,48,52,48,68,7,117,110,105,48,52,48,69,7,117, + 110,105,48,52,48,70,7,117,110,105,48,52,49,48,7,117,110,105,48,52,49,49,7,117,110,105,48,52,49,50,7,117,110,105,48,52,49,51,7,117, + 110,105,48,52,49,52,7,117,110,105,48,52,49,53,7,117,110,105,48,52,49,54,7,117,110,105,48,52,49,55,7,117,110,105,48,52,49,56,7,117, + 110,105,48,52,49,57,7,117,110,105,48,52,49,65,7,117,110,105,48,52,49,66,7,117,110,105,48,52,49,67,7,117,110,105,48,52,49,68,7,117, + 110,105,48,52,49,69,7,117,110,105,48,52,49,70,7,117,110,105,48,52,50,48,7,117,110,105,48,52,50,49,7,117,110,105,48,52,50,50,7,117, + 110,105,48,52,50,51,7,117,110,105,48,52,50,52,7,117,110,105,48,52,50,53,7,117,110,105,48,52,50,54,7,117,110,105,48,52,50,55,7,117, + 110,105,48,52,50,56,7,117,110,105,48,52,50,57,7,117,110,105,48,52,50,65,7,117,110,105,48,52,50,66,7,117,110,105,48,52,50,67,7,117, + 110,105,48,52,50,68,7,117,110,105,48,52,50,69,7,117,110,105,48,52,50,70,7,117,110,105,48,52,51,48,7,117,110,105,48,52,51,49,7,117, + 110,105,48,52,51,50,7,117,110,105,48,52,51,51,7,117,110,105,48,52,51,52,7,117,110,105,48,52,51,53,7,117,110,105,48,52,51,54,7,117, + 110,105,48,52,51,55,7,117,110,105,48,52,51,56,7,117,110,105,48,52,51,57,7,117,110,105,48,52,51,65,7,117,110,105,48,52,51,66,7,117, + 110,105,48,52,51,67,7,117,110,105,48,52,51,68,7,117,110,105,48,52,51,69,7,117,110,105,48,52,51,70,7,117,110,105,48,52,52,48,7,117, + 110,105,48,52,52,49,7,117,110,105,48,52,52,50,7,117,110,105,48,52,52,51,7,117,110,105,48,52,52,52,7,117,110,105,48,52,52,53,7,117, + 110,105,48,52,52,54,7,117,110,105,48,52,52,55,7,117,110,105,48,52,52,56,7,117,110,105,48,52,52,57,7,117,110,105,48,52,52,65,7,117, + 110,105,48,52,52,66,7,117,110,105,48,52,52,67,7,117,110,105,48,52,52,68,7,117,110,105,48,52,52,69,7,117,110,105,48,52,52,70,7,117, + 110,105,48,52,53,48,7,117,110,105,48,52,53,49,7,117,110,105,48,52,53,50,7,117,110,105,48,52,53,51,7,117,110,105,48,52,53,52,7,117, + 110,105,48,52,53,53,7,117,110,105,48,52,53,54,7,117,110,105,48,52,53,55,7,117,110,105,48,52,53,56,7,117,110,105,48,52,53,57,7,117, + 110,105,48,52,53,65,7,117,110,105,48,52,53,66,7,117,110,105,48,52,53,67,7,117,110,105,48,52,53,68,7,117,110,105,48,52,53,69,7,117, + 110,105,48,52,53,70,7,117,110,105,48,52,54,48,7,117,110,105,48,52,54,49,7,117,110,105,48,52,54,50,7,117,110,105,48,52,54,51,7,117, + 110,105,48,52,54,52,7,117,110,105,48,52,54,53,7,117,110,105,48,52,54,54,7,117,110,105,48,52,54,55,7,117,110,105,48,52,54,56,7,117, + 110,105,48,52,54,57,7,117,110,105,48,52,54,65,7,117,110,105,48,52,54,66,7,117,110,105,48,52,54,67,7,117,110,105,48,52,54,68,7,117, + 110,105,48,52,54,69,7,117,110,105,48,52,54,70,7,117,110,105,48,52,55,48,7,117,110,105,48,52,55,49,7,117,110,105,48,52,55,50,7,117, + 110,105,48,52,55,51,7,117,110,105,48,52,55,52,7,117,110,105,48,52,55,53,7,117,110,105,48,52,55,54,7,117,110,105,48,52,55,55,7,117, + 110,105,48,52,55,56,7,117,110,105,48,52,55,57,7,117,110,105,48,52,55,65,7,117,110,105,48,52,55,66,7,117,110,105,48,52,55,67,7,117, + 110,105,48,52,55,68,7,117,110,105,48,52,55,69,7,117,110,105,48,52,55,70,7,117,110,105,48,52,56,48,7,117,110,105,48,52,56,49,7,117, + 110,105,48,52,56,50,7,117,110,105,48,52,56,51,7,117,110,105,48,52,56,52,7,117,110,105,48,52,56,53,7,117,110,105,48,52,56,54,7,117, + 110,105,48,52,56,55,7,117,110,105,48,52,56,56,7,117,110,105,48,52,56,57,7,117,110,105,48,52,56,65,7,117,110,105,48,52,56,66,7,117, + 110,105,48,52,56,67,7,117,110,105,48,52,56,68,7,117,110,105,48,52,56,69,7,117,110,105,48,52,56,70,7,117,110,105,48,52,57,48,7,117, + 110,105,48,52,57,49,7,117,110,105,48,52,57,50,7,117,110,105,48,52,57,51,7,117,110,105,48,52,57,52,7,117,110,105,48,52,57,53,7,117, + 110,105,48,52,57,54,7,117,110,105,48,52,57,55,7,117,110,105,48,52,57,56,7,117,110,105,48,52,57,57,7,117,110,105,48,52,57,65,7,117, + 110,105,48,52,57,66,7,117,110,105,48,52,57,67,7,117,110,105,48,52,57,68,7,117,110,105,48,52,57,69,7,117,110,105,48,52,57,70,7,117, + 110,105,48,52,65,48,7,117,110,105,48,52,65,49,7,117,110,105,48,52,65,50,7,117,110,105,48,52,65,51,7,117,110,105,48,52,65,52,7,117, + 110,105,48,52,65,53,7,117,110,105,48,52,65,54,7,117,110,105,48,52,65,55,7,117,110,105,48,52,65,56,7,117,110,105,48,52,65,57,7,117, + 110,105,48,52,65,65,7,117,110,105,48,52,65,66,7,117,110,105,48,52,65,67,7,117,110,105,48,52,65,68,7,117,110,105,48,52,65,69,7,117, + 110,105,48,52,65,70,7,117,110,105,48,52,66,48,7,117,110,105,48,52,66,49,7,117,110,105,48,52,66,50,7,117,110,105,48,52,66,51,7,117, + 110,105,48,52,66,52,7,117,110,105,48,52,66,53,7,117,110,105,48,52,66,54,7,117,110,105,48,52,66,55,7,117,110,105,48,52,66,56,7,117, + 110,105,48,52,66,57,7,117,110,105,48,52,66,65,7,117,110,105,48,52,66,66,7,117,110,105,48,52,66,67,7,117,110,105,48,52,66,68,7,117, + 110,105,48,52,66,69,7,117,110,105,48,52,66,70,7,117,110,105,48,52,67,48,7,117,110,105,48,52,67,49,7,117,110,105,48,52,67,50,7,117, + 110,105,48,52,67,51,7,117,110,105,48,52,67,52,7,117,110,105,48,52,67,53,7,117,110,105,48,52,67,54,7,117,110,105,48,52,67,55,7,117, + 110,105,48,52,67,56,7,117,110,105,48,52,67,57,7,117,110,105,48,52,67,65,7,117,110,105,48,52,67,66,7,117,110,105,48,52,67,67,7,117, + 110,105,48,52,67,68,7,117,110,105,48,52,67,69,7,117,110,105,48,52,67,70,7,117,110,105,48,52,68,48,7,117,110,105,48,52,68,49,7,117, + 110,105,48,52,68,50,7,117,110,105,48,52,68,51,7,117,110,105,48,52,68,52,7,117,110,105,48,52,68,53,7,117,110,105,48,52,68,54,7,117, + 110,105,48,52,68,55,7,117,110,105,48,52,68,56,7,117,110,105,48,52,68,57,7,117,110,105,48,52,68,65,7,117,110,105,48,52,68,66,7,117, + 110,105,48,52,68,67,7,117,110,105,48,52,68,68,7,117,110,105,48,52,68,69,7,117,110,105,48,52,68,70,7,117,110,105,48,52,69,48,7,117, + 110,105,48,52,69,49,7,117,110,105,48,52,69,50,7,117,110,105,48,52,69,51,7,117,110,105,48,52,69,52,7,117,110,105,48,52,69,53,7,117, + 110,105,48,52,69,54,7,117,110,105,48,52,69,55,7,117,110,105,48,52,69,56,7,117,110,105,48,52,69,57,7,117,110,105,48,52,69,65,7,117, + 110,105,48,52,69,66,7,117,110,105,48,52,69,67,7,117,110,105,48,52,69,68,7,117,110,105,48,52,69,69,7,117,110,105,48,52,69,70,7,117, + 110,105,48,52,70,48,7,117,110,105,48,52,70,49,7,117,110,105,48,52,70,50,7,117,110,105,48,52,70,51,7,117,110,105,48,52,70,52,7,117, + 110,105,48,52,70,53,7,117,110,105,48,52,70,54,7,117,110,105,48,52,70,55,7,117,110,105,48,52,70,56,7,117,110,105,48,52,70,57,7,117, + 110,105,48,52,70,65,7,117,110,105,48,52,70,66,7,117,110,105,48,52,70,67,7,117,110,105,48,52,70,68,7,117,110,105,48,52,70,69,7,117, + 110,105,48,52,70,70,7,117,110,105,48,53,48,48,7,117,110,105,48,53,48,49,7,117,110,105,48,53,48,50,7,117,110,105,48,53,48,51,7,117, + 110,105,48,53,48,52,7,117,110,105,48,53,48,53,7,117,110,105,48,53,48,54,7,117,110,105,48,53,48,55,7,117,110,105,48,53,48,56,7,117, + 110,105,48,53,48,57,7,117,110,105,48,53,48,65,7,117,110,105,48,53,48,66,7,117,110,105,48,53,48,67,7,117,110,105,48,53,48,68,7,117, + 110,105,48,53,48,69,7,117,110,105,48,53,48,70,7,117,110,105,48,53,49,48,7,117,110,105,48,53,49,49,7,117,110,105,48,53,49,50,7,117, + 110,105,48,53,49,51,7,117,110,105,48,53,49,52,7,117,110,105,48,53,49,53,7,117,110,105,48,53,49,54,7,117,110,105,48,53,49,55,7,117, + 110,105,48,53,49,56,7,117,110,105,48,53,49,57,7,117,110,105,48,53,49,65,7,117,110,105,48,53,49,66,7,117,110,105,48,53,49,67,7,117, + 110,105,48,53,49,68,7,117,110,105,48,53,49,69,7,117,110,105,48,53,49,70,7,117,110,105,48,53,50,48,7,117,110,105,48,53,50,49,7,117, + 110,105,48,53,50,50,7,117,110,105,48,53,50,51,7,117,110,105,48,53,50,52,7,117,110,105,48,53,50,53,7,117,110,105,48,53,51,49,7,117, + 110,105,48,53,51,50,7,117,110,105,48,53,51,51,7,117,110,105,48,53,51,52,7,117,110,105,48,53,51,53,7,117,110,105,48,53,51,54,7,117, + 110,105,48,53,51,55,7,117,110,105,48,53,51,56,7,117,110,105,48,53,51,57,7,117,110,105,48,53,51,65,7,117,110,105,48,53,51,66,7,117, + 110,105,48,53,51,67,7,117,110,105,48,53,51,68,7,117,110,105,48,53,51,69,7,117,110,105,48,53,51,70,7,117,110,105,48,53,52,48,7,117, + 110,105,48,53,52,49,7,117,110,105,48,53,52,50,7,117,110,105,48,53,52,51,7,117,110,105,48,53,52,52,7,117,110,105,48,53,52,53,7,117, + 110,105,48,53,52,54,7,117,110,105,48,53,52,55,7,117,110,105,48,53,52,56,7,117,110,105,48,53,52,57,7,117,110,105,48,53,52,65,7,117, + 110,105,48,53,52,66,7,117,110,105,48,53,52,67,7,117,110,105,48,53,52,68,7,117,110,105,48,53,52,69,7,117,110,105,48,53,52,70,7,117, + 110,105,48,53,53,48,7,117,110,105,48,53,53,49,7,117,110,105,48,53,53,50,7,117,110,105,48,53,53,51,7,117,110,105,48,53,53,52,7,117, + 110,105,48,53,53,53,7,117,110,105,48,53,53,54,7,117,110,105,48,53,53,57,7,117,110,105,48,53,53,65,7,117,110,105,48,53,53,66,7,117, + 110,105,48,53,53,67,7,117,110,105,48,53,53,68,7,117,110,105,48,53,53,69,7,117,110,105,48,53,53,70,7,117,110,105,48,53,54,49,7,117, + 110,105,48,53,54,50,7,117,110,105,48,53,54,51,7,117,110,105,48,53,54,52,7,117,110,105,48,53,54,53,7,117,110,105,48,53,54,54,7,117, + 110,105,48,53,54,55,7,117,110,105,48,53,54,56,7,117,110,105,48,53,54,57,7,117,110,105,48,53,54,65,7,117,110,105,48,53,54,66,7,117, + 110,105,48,53,54,67,7,117,110,105,48,53,54,68,7,117,110,105,48,53,54,69,7,117,110,105,48,53,54,70,7,117,110,105,48,53,55,48,7,117, + 110,105,48,53,55,49,7,117,110,105,48,53,55,50,7,117,110,105,48,53,55,51,7,117,110,105,48,53,55,52,7,117,110,105,48,53,55,53,7,117, + 110,105,48,53,55,54,7,117,110,105,48,53,55,55,7,117,110,105,48,53,55,56,7,117,110,105,48,53,55,57,7,117,110,105,48,53,55,65,7,117, + 110,105,48,53,55,66,7,117,110,105,48,53,55,67,7,117,110,105,48,53,55,68,7,117,110,105,48,53,55,69,7,117,110,105,48,53,55,70,7,117, + 110,105,48,53,56,48,7,117,110,105,48,53,56,49,7,117,110,105,48,53,56,50,7,117,110,105,48,53,56,51,7,117,110,105,48,53,56,52,7,117, + 110,105,48,53,56,53,7,117,110,105,48,53,56,54,7,117,110,105,48,53,56,55,7,117,110,105,48,53,56,57,7,117,110,105,48,53,56,65,7,117, + 110,105,48,53,66,48,7,117,110,105,48,53,66,49,7,117,110,105,48,53,66,50,7,117,110,105,48,53,66,51,7,117,110,105,48,53,66,52,7,117, + 110,105,48,53,66,53,7,117,110,105,48,53,66,54,7,117,110,105,48,53,66,55,7,117,110,105,48,53,66,56,7,117,110,105,48,53,66,57,7,117, + 110,105,48,53,66,65,7,117,110,105,48,53,66,66,7,117,110,105,48,53,66,67,7,117,110,105,48,53,66,68,7,117,110,105,48,53,66,69,7,117, + 110,105,48,53,66,70,7,117,110,105,48,53,67,48,7,117,110,105,48,53,67,49,7,117,110,105,48,53,67,50,7,117,110,105,48,53,67,51,7,117, + 110,105,48,53,67,54,7,117,110,105,48,53,67,55,7,117,110,105,48,53,68,48,7,117,110,105,48,53,68,49,7,117,110,105,48,53,68,50,7,117, + 110,105,48,53,68,51,7,117,110,105,48,53,68,52,7,117,110,105,48,53,68,53,7,117,110,105,48,53,68,54,7,117,110,105,48,53,68,55,7,117, + 110,105,48,53,68,56,7,117,110,105,48,53,68,57,7,117,110,105,48,53,68,65,7,117,110,105,48,53,68,66,7,117,110,105,48,53,68,67,7,117, + 110,105,48,53,68,68,7,117,110,105,48,53,68,69,7,117,110,105,48,53,68,70,7,117,110,105,48,53,69,48,7,117,110,105,48,53,69,49,7,117, + 110,105,48,53,69,50,7,117,110,105,48,53,69,51,7,117,110,105,48,53,69,52,7,117,110,105,48,53,69,53,7,117,110,105,48,53,69,54,7,117, + 110,105,48,53,69,55,7,117,110,105,48,53,69,56,7,117,110,105,48,53,69,57,7,117,110,105,48,53,69,65,7,117,110,105,48,53,70,48,7,117, + 110,105,48,53,70,49,7,117,110,105,48,53,70,50,7,117,110,105,48,53,70,51,7,117,110,105,48,53,70,52,7,117,110,105,48,54,48,54,7,117, + 110,105,48,54,48,55,7,117,110,105,48,54,48,57,7,117,110,105,48,54,48,65,7,117,110,105,48,54,48,67,7,117,110,105,48,54,49,53,7,117, + 110,105,48,54,49,66,7,117,110,105,48,54,49,70,7,117,110,105,48,54,50,49,7,117,110,105,48,54,50,50,7,117,110,105,48,54,50,51,7,117, + 110,105,48,54,50,52,7,117,110,105,48,54,50,53,7,117,110,105,48,54,50,54,7,117,110,105,48,54,50,55,7,117,110,105,48,54,50,56,7,117, + 110,105,48,54,50,57,7,117,110,105,48,54,50,65,7,117,110,105,48,54,50,66,7,117,110,105,48,54,50,67,7,117,110,105,48,54,50,68,7,117, + 110,105,48,54,50,69,7,117,110,105,48,54,50,70,7,117,110,105,48,54,51,48,7,117,110,105,48,54,51,49,7,117,110,105,48,54,51,50,7,117, + 110,105,48,54,51,51,7,117,110,105,48,54,51,52,7,117,110,105,48,54,51,53,7,117,110,105,48,54,51,54,7,117,110,105,48,54,51,55,7,117, + 110,105,48,54,51,56,7,117,110,105,48,54,51,57,7,117,110,105,48,54,51,65,7,117,110,105,48,54,52,48,7,117,110,105,48,54,52,49,7,117, + 110,105,48,54,52,50,7,117,110,105,48,54,52,51,7,117,110,105,48,54,52,52,7,117,110,105,48,54,52,53,7,117,110,105,48,54,52,54,7,117, + 110,105,48,54,52,55,7,117,110,105,48,54,52,56,7,117,110,105,48,54,52,57,7,117,110,105,48,54,52,65,7,117,110,105,48,54,52,66,7,117, + 110,105,48,54,52,67,7,117,110,105,48,54,52,68,7,117,110,105,48,54,52,69,7,117,110,105,48,54,52,70,7,117,110,105,48,54,53,48,7,117, + 110,105,48,54,53,49,7,117,110,105,48,54,53,50,7,117,110,105,48,54,53,51,7,117,110,105,48,54,53,52,7,117,110,105,48,54,53,53,7,117, + 110,105,48,54,53,55,7,117,110,105,48,54,53,65,7,117,110,105,48,54,54,48,7,117,110,105,48,54,54,49,7,117,110,105,48,54,54,50,7,117, + 110,105,48,54,54,51,7,117,110,105,48,54,54,52,7,117,110,105,48,54,54,53,7,117,110,105,48,54,54,54,7,117,110,105,48,54,54,55,7,117, + 110,105,48,54,54,56,7,117,110,105,48,54,54,57,7,117,110,105,48,54,54,65,7,117,110,105,48,54,54,66,7,117,110,105,48,54,54,67,7,117, + 110,105,48,54,54,68,7,117,110,105,48,54,54,69,7,117,110,105,48,54,54,70,7,117,110,105,48,54,55,48,7,117,110,105,48,54,55,52,7,117, + 110,105,48,54,55,57,7,117,110,105,48,54,55,65,7,117,110,105,48,54,55,66,7,117,110,105,48,54,55,67,7,117,110,105,48,54,55,68,7,117, + 110,105,48,54,55,69,7,117,110,105,48,54,55,70,7,117,110,105,48,54,56,48,7,117,110,105,48,54,56,49,7,117,110,105,48,54,56,50,7,117, + 110,105,48,54,56,51,7,117,110,105,48,54,56,52,7,117,110,105,48,54,56,53,7,117,110,105,48,54,56,54,7,117,110,105,48,54,56,55,7,117, + 110,105,48,54,56,56,7,117,110,105,48,54,56,57,7,117,110,105,48,54,56,65,7,117,110,105,48,54,56,66,7,117,110,105,48,54,56,67,7,117, + 110,105,48,54,56,68,7,117,110,105,48,54,56,69,7,117,110,105,48,54,56,70,7,117,110,105,48,54,57,48,7,117,110,105,48,54,57,49,7,117, + 110,105,48,54,57,50,7,117,110,105,48,54,57,51,7,117,110,105,48,54,57,52,7,117,110,105,48,54,57,53,7,117,110,105,48,54,57,54,7,117, + 110,105,48,54,57,55,7,117,110,105,48,54,57,56,7,117,110,105,48,54,57,57,7,117,110,105,48,54,57,65,7,117,110,105,48,54,57,66,7,117, + 110,105,48,54,57,67,7,117,110,105,48,54,57,68,7,117,110,105,48,54,57,69,7,117,110,105,48,54,57,70,7,117,110,105,48,54,65,48,7,117, + 110,105,48,54,65,49,7,117,110,105,48,54,65,50,7,117,110,105,48,54,65,51,7,117,110,105,48,54,65,52,7,117,110,105,48,54,65,53,7,117, + 110,105,48,54,65,54,7,117,110,105,48,54,65,55,7,117,110,105,48,54,65,56,7,117,110,105,48,54,65,57,7,117,110,105,48,54,65,65,7,117, + 110,105,48,54,65,66,7,117,110,105,48,54,65,67,7,117,110,105,48,54,65,68,7,117,110,105,48,54,65,69,7,117,110,105,48,54,65,70,7,117, + 110,105,48,54,66,48,7,117,110,105,48,54,66,49,7,117,110,105,48,54,66,50,7,117,110,105,48,54,66,51,7,117,110,105,48,54,66,52,7,117, + 110,105,48,54,66,53,7,117,110,105,48,54,66,54,7,117,110,105,48,54,66,55,7,117,110,105,48,54,66,56,7,117,110,105,48,54,66,57,7,117, + 110,105,48,54,66,65,7,117,110,105,48,54,66,66,7,117,110,105,48,54,66,67,7,117,110,105,48,54,66,68,7,117,110,105,48,54,66,69,7,117, + 110,105,48,54,66,70,7,117,110,105,48,54,67,54,7,117,110,105,48,54,67,67,7,117,110,105,48,54,67,69,7,117,110,105,48,54,68,53,7,117, + 110,105,48,54,70,48,7,117,110,105,48,54,70,49,7,117,110,105,48,54,70,50,7,117,110,105,48,54,70,51,7,117,110,105,48,54,70,52,7,117, + 110,105,48,54,70,53,7,117,110,105,48,54,70,54,7,117,110,105,48,54,70,55,7,117,110,105,48,54,70,56,7,117,110,105,48,54,70,57,7,117, + 110,105,48,55,67,48,7,117,110,105,48,55,67,49,7,117,110,105,48,55,67,50,7,117,110,105,48,55,67,51,7,117,110,105,48,55,67,52,7,117, + 110,105,48,55,67,53,7,117,110,105,48,55,67,54,7,117,110,105,48,55,67,55,7,117,110,105,48,55,67,56,7,117,110,105,48,55,67,57,7,117, + 110,105,48,55,67,65,7,117,110,105,48,55,67,66,7,117,110,105,48,55,67,67,7,117,110,105,48,55,67,68,7,117,110,105,48,55,67,69,7,117, + 110,105,48,55,67,70,7,117,110,105,48,55,68,48,7,117,110,105,48,55,68,49,7,117,110,105,48,55,68,50,7,117,110,105,48,55,68,51,7,117, + 110,105,48,55,68,52,7,117,110,105,48,55,68,53,7,117,110,105,48,55,68,54,7,117,110,105,48,55,68,55,7,117,110,105,48,55,68,56,7,117, + 110,105,48,55,68,57,7,117,110,105,48,55,68,65,7,117,110,105,48,55,68,66,7,117,110,105,48,55,68,67,7,117,110,105,48,55,68,68,7,117, + 110,105,48,55,68,69,7,117,110,105,48,55,68,70,7,117,110,105,48,55,69,48,7,117,110,105,48,55,69,49,7,117,110,105,48,55,69,50,7,117, + 110,105,48,55,69,51,7,117,110,105,48,55,69,52,7,117,110,105,48,55,69,53,7,117,110,105,48,55,69,54,7,117,110,105,48,55,69,55,7,117, + 110,105,48,55,69,66,7,117,110,105,48,55,69,67,7,117,110,105,48,55,69,68,7,117,110,105,48,55,69,69,7,117,110,105,48,55,69,70,7,117, + 110,105,48,55,70,48,7,117,110,105,48,55,70,49,7,117,110,105,48,55,70,50,7,117,110,105,48,55,70,51,7,117,110,105,48,55,70,52,7,117, + 110,105,48,55,70,53,7,117,110,105,48,55,70,56,7,117,110,105,48,55,70,57,7,117,110,105,48,55,70,65,7,117,110,105,48,69,51,70,7,117, + 110,105,48,69,56,49,7,117,110,105,48,69,56,50,7,117,110,105,48,69,56,52,7,117,110,105,48,69,56,55,7,117,110,105,48,69,56,56,7,117, + 110,105,48,69,56,65,7,117,110,105,48,69,56,68,7,117,110,105,48,69,57,52,7,117,110,105,48,69,57,53,7,117,110,105,48,69,57,54,7,117, + 110,105,48,69,57,55,7,117,110,105,48,69,57,57,7,117,110,105,48,69,57,65,7,117,110,105,48,69,57,66,7,117,110,105,48,69,57,67,7,117, + 110,105,48,69,57,68,7,117,110,105,48,69,57,69,7,117,110,105,48,69,57,70,7,117,110,105,48,69,65,49,7,117,110,105,48,69,65,50,7,117, + 110,105,48,69,65,51,7,117,110,105,48,69,65,53,7,117,110,105,48,69,65,55,7,117,110,105,48,69,65,65,7,117,110,105,48,69,65,66,7,117, + 110,105,48,69,65,68,7,117,110,105,48,69,65,69,7,117,110,105,48,69,65,70,7,117,110,105,48,69,66,48,7,117,110,105,48,69,66,49,7,117, + 110,105,48,69,66,50,7,117,110,105,48,69,66,51,7,117,110,105,48,69,66,52,7,117,110,105,48,69,66,53,7,117,110,105,48,69,66,54,7,117, + 110,105,48,69,66,55,7,117,110,105,48,69,66,56,7,117,110,105,48,69,66,57,7,117,110,105,48,69,66,66,7,117,110,105,48,69,66,67,7,117, + 110,105,48,69,66,68,7,117,110,105,48,69,67,48,7,117,110,105,48,69,67,49,7,117,110,105,48,69,67,50,7,117,110,105,48,69,67,51,7,117, + 110,105,48,69,67,52,7,117,110,105,48,69,67,54,7,117,110,105,48,69,67,56,7,117,110,105,48,69,67,57,7,117,110,105,48,69,67,65,7,117, + 110,105,48,69,67,66,7,117,110,105,48,69,67,67,7,117,110,105,48,69,67,68,7,117,110,105,48,69,68,48,7,117,110,105,48,69,68,49,7,117, + 110,105,48,69,68,50,7,117,110,105,48,69,68,51,7,117,110,105,48,69,68,52,7,117,110,105,48,69,68,53,7,117,110,105,48,69,68,54,7,117, + 110,105,48,69,68,55,7,117,110,105,48,69,68,56,7,117,110,105,48,69,68,57,7,117,110,105,48,69,68,67,7,117,110,105,48,69,68,68,7,117, + 110,105,49,48,65,48,7,117,110,105,49,48,65,49,7,117,110,105,49,48,65,50,7,117,110,105,49,48,65,51,7,117,110,105,49,48,65,52,7,117, + 110,105,49,48,65,53,7,117,110,105,49,48,65,54,7,117,110,105,49,48,65,55,7,117,110,105,49,48,65,56,7,117,110,105,49,48,65,57,7,117, + 110,105,49,48,65,65,7,117,110,105,49,48,65,66,7,117,110,105,49,48,65,67,7,117,110,105,49,48,65,68,7,117,110,105,49,48,65,69,7,117, + 110,105,49,48,65,70,7,117,110,105,49,48,66,48,7,117,110,105,49,48,66,49,7,117,110,105,49,48,66,50,7,117,110,105,49,48,66,51,7,117, + 110,105,49,48,66,52,7,117,110,105,49,48,66,53,7,117,110,105,49,48,66,54,7,117,110,105,49,48,66,55,7,117,110,105,49,48,66,56,7,117, + 110,105,49,48,66,57,7,117,110,105,49,48,66,65,7,117,110,105,49,48,66,66,7,117,110,105,49,48,66,67,7,117,110,105,49,48,66,68,7,117, + 110,105,49,48,66,69,7,117,110,105,49,48,66,70,7,117,110,105,49,48,67,48,7,117,110,105,49,48,67,49,7,117,110,105,49,48,67,50,7,117, + 110,105,49,48,67,51,7,117,110,105,49,48,67,52,7,117,110,105,49,48,67,53,7,117,110,105,49,48,68,48,7,117,110,105,49,48,68,49,7,117, + 110,105,49,48,68,50,7,117,110,105,49,48,68,51,7,117,110,105,49,48,68,52,7,117,110,105,49,48,68,53,7,117,110,105,49,48,68,54,7,117, + 110,105,49,48,68,55,7,117,110,105,49,48,68,56,7,117,110,105,49,48,68,57,7,117,110,105,49,48,68,65,7,117,110,105,49,48,68,66,7,117, + 110,105,49,48,68,67,7,117,110,105,49,48,68,68,7,117,110,105,49,48,68,69,7,117,110,105,49,48,68,70,7,117,110,105,49,48,69,48,7,117, + 110,105,49,48,69,49,7,117,110,105,49,48,69,50,7,117,110,105,49,48,69,51,7,117,110,105,49,48,69,52,7,117,110,105,49,48,69,53,7,117, + 110,105,49,48,69,54,7,117,110,105,49,48,69,55,7,117,110,105,49,48,69,56,7,117,110,105,49,48,69,57,7,117,110,105,49,48,69,65,7,117, + 110,105,49,48,69,66,7,117,110,105,49,48,69,67,7,117,110,105,49,48,69,68,7,117,110,105,49,48,69,69,7,117,110,105,49,48,69,70,7,117, + 110,105,49,48,70,48,7,117,110,105,49,48,70,49,7,117,110,105,49,48,70,50,7,117,110,105,49,48,70,51,7,117,110,105,49,48,70,52,7,117, + 110,105,49,48,70,53,7,117,110,105,49,48,70,54,7,117,110,105,49,48,70,55,7,117,110,105,49,48,70,56,7,117,110,105,49,48,70,57,7,117, + 110,105,49,48,70,65,7,117,110,105,49,48,70,66,7,117,110,105,49,48,70,67,7,117,110,105,49,52,48,49,7,117,110,105,49,52,48,50,7,117, + 110,105,49,52,48,51,7,117,110,105,49,52,48,52,7,117,110,105,49,52,48,53,7,117,110,105,49,52,48,54,7,117,110,105,49,52,48,55,7,117, + 110,105,49,52,48,57,7,117,110,105,49,52,48,65,7,117,110,105,49,52,48,66,7,117,110,105,49,52,48,67,7,117,110,105,49,52,48,68,7,117, + 110,105,49,52,48,69,7,117,110,105,49,52,48,70,7,117,110,105,49,52,49,48,7,117,110,105,49,52,49,49,7,117,110,105,49,52,49,50,7,117, + 110,105,49,52,49,51,7,117,110,105,49,52,49,52,7,117,110,105,49,52,49,53,7,117,110,105,49,52,49,54,7,117,110,105,49,52,49,55,7,117, + 110,105,49,52,49,56,7,117,110,105,49,52,49,57,7,117,110,105,49,52,49,65,7,117,110,105,49,52,49,66,7,117,110,105,49,52,49,68,7,117, + 110,105,49,52,49,69,7,117,110,105,49,52,49,70,7,117,110,105,49,52,50,48,7,117,110,105,49,52,50,49,7,117,110,105,49,52,50,50,7,117, + 110,105,49,52,50,51,7,117,110,105,49,52,50,52,7,117,110,105,49,52,50,53,7,117,110,105,49,52,50,54,7,117,110,105,49,52,50,55,7,117, + 110,105,49,52,50,56,7,117,110,105,49,52,50,57,7,117,110,105,49,52,50,65,7,117,110,105,49,52,50,66,7,117,110,105,49,52,50,67,7,117, + 110,105,49,52,50,68,7,117,110,105,49,52,50,69,7,117,110,105,49,52,50,70,7,117,110,105,49,52,51,48,7,117,110,105,49,52,51,49,7,117, + 110,105,49,52,51,50,7,117,110,105,49,52,51,51,7,117,110,105,49,52,51,52,7,117,110,105,49,52,51,53,7,117,110,105,49,52,51,55,7,117, + 110,105,49,52,51,56,7,117,110,105,49,52,51,57,7,117,110,105,49,52,51,65,7,117,110,105,49,52,51,66,7,117,110,105,49,52,51,67,7,117, + 110,105,49,52,51,68,7,117,110,105,49,52,51,69,7,117,110,105,49,52,51,70,7,117,110,105,49,52,52,48,7,117,110,105,49,52,52,49,7,117, + 110,105,49,52,52,50,7,117,110,105,49,52,52,51,7,117,110,105,49,52,52,52,7,117,110,105,49,52,52,53,7,117,110,105,49,52,52,54,7,117, + 110,105,49,52,52,55,7,117,110,105,49,52,52,56,7,117,110,105,49,52,52,57,7,117,110,105,49,52,52,65,7,117,110,105,49,52,52,67,7,117, + 110,105,49,52,52,68,7,117,110,105,49,52,52,69,7,117,110,105,49,52,52,70,7,117,110,105,49,52,53,48,7,117,110,105,49,52,53,49,7,117, + 110,105,49,52,53,50,7,117,110,105,49,52,53,52,7,117,110,105,49,52,53,53,7,117,110,105,49,52,53,54,7,117,110,105,49,52,53,55,7,117, + 110,105,49,52,53,56,7,117,110,105,49,52,53,57,7,117,110,105,49,52,53,65,7,117,110,105,49,52,53,66,7,117,110,105,49,52,53,67,7,117, + 110,105,49,52,53,68,7,117,110,105,49,52,53,69,7,117,110,105,49,52,53,70,7,117,110,105,49,52,54,48,7,117,110,105,49,52,54,49,7,117, + 110,105,49,52,54,50,7,117,110,105,49,52,54,51,7,117,110,105,49,52,54,52,7,117,110,105,49,52,54,53,7,117,110,105,49,52,54,54,7,117, + 110,105,49,52,54,55,7,117,110,105,49,52,54,56,7,117,110,105,49,52,54,57,7,117,110,105,49,52,54,65,7,117,110,105,49,52,54,66,7,117, + 110,105,49,52,54,67,7,117,110,105,49,52,54,68,7,117,110,105,49,52,54,69,7,117,110,105,49,52,54,70,7,117,110,105,49,52,55,48,7,117, + 110,105,49,52,55,49,7,117,110,105,49,52,55,50,7,117,110,105,49,52,55,51,7,117,110,105,49,52,55,52,7,117,110,105,49,52,55,53,7,117, + 110,105,49,52,55,54,7,117,110,105,49,52,55,55,7,117,110,105,49,52,55,56,7,117,110,105,49,52,55,57,7,117,110,105,49,52,55,65,7,117, + 110,105,49,52,55,66,7,117,110,105,49,52,55,67,7,117,110,105,49,52,55,68,7,117,110,105,49,52,55,69,7,117,110,105,49,52,55,70,7,117, + 110,105,49,52,56,48,7,117,110,105,49,52,56,49,7,117,110,105,49,52,56,50,7,117,110,105,49,52,56,51,7,117,110,105,49,52,56,52,7,117, + 110,105,49,52,56,53,7,117,110,105,49,52,56,54,7,117,110,105,49,52,56,55,7,117,110,105,49,52,56,56,7,117,110,105,49,52,56,57,7,117, + 110,105,49,52,56,65,7,117,110,105,49,52,56,66,7,117,110,105,49,52,56,67,7,117,110,105,49,52,56,68,7,117,110,105,49,52,56,69,7,117, + 110,105,49,52,56,70,7,117,110,105,49,52,57,48,7,117,110,105,49,52,57,49,7,117,110,105,49,52,57,50,7,117,110,105,49,52,57,51,7,117, + 110,105,49,52,57,52,7,117,110,105,49,52,57,53,7,117,110,105,49,52,57,54,7,117,110,105,49,52,57,55,7,117,110,105,49,52,57,56,7,117, + 110,105,49,52,57,57,7,117,110,105,49,52,57,65,7,117,110,105,49,52,57,66,7,117,110,105,49,52,57,67,7,117,110,105,49,52,57,68,7,117, + 110,105,49,52,57,69,7,117,110,105,49,52,57,70,7,117,110,105,49,52,65,48,7,117,110,105,49,52,65,49,7,117,110,105,49,52,65,50,7,117, + 110,105,49,52,65,51,7,117,110,105,49,52,65,52,7,117,110,105,49,52,65,53,7,117,110,105,49,52,65,54,7,117,110,105,49,52,65,55,7,117, + 110,105,49,52,65,56,7,117,110,105,49,52,65,57,7,117,110,105,49,52,65,65,7,117,110,105,49,52,65,66,7,117,110,105,49,52,65,67,7,117, + 110,105,49,52,65,68,7,117,110,105,49,52,65,69,7,117,110,105,49,52,65,70,7,117,110,105,49,52,66,48,7,117,110,105,49,52,66,49,7,117, + 110,105,49,52,66,50,7,117,110,105,49,52,66,51,7,117,110,105,49,52,66,52,7,117,110,105,49,52,66,53,7,117,110,105,49,52,66,54,7,117, + 110,105,49,52,66,55,7,117,110,105,49,52,66,56,7,117,110,105,49,52,66,57,7,117,110,105,49,52,66,65,7,117,110,105,49,52,66,66,7,117, + 110,105,49,52,66,67,7,117,110,105,49,52,66,68,7,117,110,105,49,52,67,48,7,117,110,105,49,52,67,49,7,117,110,105,49,52,67,50,7,117, + 110,105,49,52,67,51,7,117,110,105,49,52,67,52,7,117,110,105,49,52,67,53,7,117,110,105,49,52,67,54,7,117,110,105,49,52,67,55,7,117, + 110,105,49,52,67,56,7,117,110,105,49,52,67,57,7,117,110,105,49,52,67,65,7,117,110,105,49,52,67,66,7,117,110,105,49,52,67,67,7,117, + 110,105,49,52,67,68,7,117,110,105,49,52,67,69,7,117,110,105,49,52,67,70,7,117,110,105,49,52,68,48,7,117,110,105,49,52,68,49,7,117, + 110,105,49,52,68,50,7,117,110,105,49,52,68,51,7,117,110,105,49,52,68,52,7,117,110,105,49,52,68,53,7,117,110,105,49,52,68,54,7,117, + 110,105,49,52,68,55,7,117,110,105,49,52,68,56,7,117,110,105,49,52,68,57,7,117,110,105,49,52,68,65,7,117,110,105,49,52,68,66,7,117, + 110,105,49,52,68,67,7,117,110,105,49,52,68,68,7,117,110,105,49,52,68,69,7,117,110,105,49,52,68,70,7,117,110,105,49,52,69,48,7,117, + 110,105,49,52,69,49,7,117,110,105,49,52,69,50,7,117,110,105,49,52,69,51,7,117,110,105,49,52,69,52,7,117,110,105,49,52,69,53,7,117, + 110,105,49,52,69,54,7,117,110,105,49,52,69,55,7,117,110,105,49,52,69,56,7,117,110,105,49,52,69,57,7,117,110,105,49,52,69,65,7,117, + 110,105,49,52,69,67,7,117,110,105,49,52,69,68,7,117,110,105,49,52,69,69,7,117,110,105,49,52,69,70,7,117,110,105,49,52,70,48,7,117, + 110,105,49,52,70,49,7,117,110,105,49,52,70,50,7,117,110,105,49,52,70,51,7,117,110,105,49,52,70,52,7,117,110,105,49,52,70,53,7,117, + 110,105,49,52,70,54,7,117,110,105,49,52,70,55,7,117,110,105,49,52,70,56,7,117,110,105,49,52,70,57,7,117,110,105,49,52,70,65,7,117, + 110,105,49,52,70,66,7,117,110,105,49,52,70,67,7,117,110,105,49,52,70,68,7,117,110,105,49,52,70,69,7,117,110,105,49,52,70,70,7,117, + 110,105,49,53,48,48,7,117,110,105,49,53,48,49,7,117,110,105,49,53,48,50,7,117,110,105,49,53,48,51,7,117,110,105,49,53,48,52,7,117, + 110,105,49,53,48,53,7,117,110,105,49,53,48,54,7,117,110,105,49,53,48,55,7,117,110,105,49,53,49,48,7,117,110,105,49,53,49,49,7,117, + 110,105,49,53,49,50,7,117,110,105,49,53,49,51,7,117,110,105,49,53,49,52,7,117,110,105,49,53,49,53,7,117,110,105,49,53,49,54,7,117, + 110,105,49,53,49,55,7,117,110,105,49,53,49,56,7,117,110,105,49,53,49,57,7,117,110,105,49,53,49,65,7,117,110,105,49,53,49,66,7,117, + 110,105,49,53,49,67,7,117,110,105,49,53,49,68,7,117,110,105,49,53,49,69,7,117,110,105,49,53,49,70,7,117,110,105,49,53,50,48,7,117, + 110,105,49,53,50,49,7,117,110,105,49,53,50,50,7,117,110,105,49,53,50,51,7,117,110,105,49,53,50,52,7,117,110,105,49,53,50,53,7,117, + 110,105,49,53,50,54,7,117,110,105,49,53,50,55,7,117,110,105,49,53,50,56,7,117,110,105,49,53,50,57,7,117,110,105,49,53,50,65,7,117, + 110,105,49,53,50,66,7,117,110,105,49,53,50,67,7,117,110,105,49,53,50,68,7,117,110,105,49,53,50,69,7,117,110,105,49,53,50,70,7,117, + 110,105,49,53,51,48,7,117,110,105,49,53,51,49,7,117,110,105,49,53,51,50,7,117,110,105,49,53,51,51,7,117,110,105,49,53,51,52,7,117, + 110,105,49,53,51,53,7,117,110,105,49,53,51,54,7,117,110,105,49,53,51,55,7,117,110,105,49,53,51,56,7,117,110,105,49,53,51,57,7,117, + 110,105,49,53,51,65,7,117,110,105,49,53,51,66,7,117,110,105,49,53,51,67,7,117,110,105,49,53,51,68,7,117,110,105,49,53,51,69,7,117, + 110,105,49,53,52,48,7,117,110,105,49,53,52,49,7,117,110,105,49,53,52,50,7,117,110,105,49,53,52,51,7,117,110,105,49,53,52,52,7,117, + 110,105,49,53,52,53,7,117,110,105,49,53,52,54,7,117,110,105,49,53,52,55,7,117,110,105,49,53,52,56,7,117,110,105,49,53,52,57,7,117, + 110,105,49,53,52,65,7,117,110,105,49,53,52,66,7,117,110,105,49,53,52,67,7,117,110,105,49,53,52,68,7,117,110,105,49,53,52,69,7,117, + 110,105,49,53,52,70,7,117,110,105,49,53,53,48,7,117,110,105,49,53,53,50,7,117,110,105,49,53,53,51,7,117,110,105,49,53,53,52,7,117, + 110,105,49,53,53,53,7,117,110,105,49,53,53,54,7,117,110,105,49,53,53,55,7,117,110,105,49,53,53,56,7,117,110,105,49,53,53,57,7,117, + 110,105,49,53,53,65,7,117,110,105,49,53,53,66,7,117,110,105,49,53,53,67,7,117,110,105,49,53,53,68,7,117,110,105,49,53,53,69,7,117, + 110,105,49,53,53,70,7,117,110,105,49,53,54,48,7,117,110,105,49,53,54,49,7,117,110,105,49,53,54,50,7,117,110,105,49,53,54,51,7,117, + 110,105,49,53,54,52,7,117,110,105,49,53,54,53,7,117,110,105,49,53,54,54,7,117,110,105,49,53,54,55,7,117,110,105,49,53,54,56,7,117, + 110,105,49,53,54,57,7,117,110,105,49,53,54,65,7,117,110,105,49,53,55,52,7,117,110,105,49,53,55,53,7,117,110,105,49,53,55,54,7,117, + 110,105,49,53,55,55,7,117,110,105,49,53,55,56,7,117,110,105,49,53,55,57,7,117,110,105,49,53,55,65,7,117,110,105,49,53,55,66,7,117, + 110,105,49,53,55,67,7,117,110,105,49,53,55,68,7,117,110,105,49,53,55,69,7,117,110,105,49,53,55,70,7,117,110,105,49,53,56,48,7,117, + 110,105,49,53,56,49,7,117,110,105,49,53,56,50,7,117,110,105,49,53,56,51,7,117,110,105,49,53,56,52,7,117,110,105,49,53,56,53,7,117, + 110,105,49,53,56,65,7,117,110,105,49,53,56,66,7,117,110,105,49,53,56,67,7,117,110,105,49,53,56,68,7,117,110,105,49,53,56,69,7,117, + 110,105,49,53,56,70,7,117,110,105,49,53,57,48,7,117,110,105,49,53,57,49,7,117,110,105,49,53,57,50,7,117,110,105,49,53,57,51,7,117, + 110,105,49,53,57,52,7,117,110,105,49,53,57,53,7,117,110,105,49,53,57,54,7,117,110,105,49,53,65,48,7,117,110,105,49,53,65,49,7,117, + 110,105,49,53,65,50,7,117,110,105,49,53,65,51,7,117,110,105,49,53,65,52,7,117,110,105,49,53,65,53,7,117,110,105,49,53,65,54,7,117, + 110,105,49,53,65,55,7,117,110,105,49,53,65,56,7,117,110,105,49,53,65,57,7,117,110,105,49,53,65,65,7,117,110,105,49,53,65,66,7,117, + 110,105,49,53,65,67,7,117,110,105,49,53,65,68,7,117,110,105,49,53,65,69,7,117,110,105,49,53,65,70,7,117,110,105,49,53,68,69,7,117, + 110,105,49,53,69,49,7,117,110,105,49,54,52,54,7,117,110,105,49,54,52,55,7,117,110,105,49,54,54,69,7,117,110,105,49,54,54,70,7,117, + 110,105,49,54,55,48,7,117,110,105,49,54,55,49,7,117,110,105,49,54,55,50,7,117,110,105,49,54,55,51,7,117,110,105,49,54,55,52,7,117, + 110,105,49,54,55,53,7,117,110,105,49,54,55,54,7,117,110,105,49,54,56,48,7,117,110,105,49,54,56,49,7,117,110,105,49,54,56,50,7,117, + 110,105,49,54,56,51,7,117,110,105,49,54,56,52,7,117,110,105,49,54,56,53,7,117,110,105,49,54,56,54,7,117,110,105,49,54,56,55,7,117, + 110,105,49,54,56,56,7,117,110,105,49,54,56,57,7,117,110,105,49,54,56,65,7,117,110,105,49,54,56,66,7,117,110,105,49,54,56,67,7,117, + 110,105,49,54,56,68,7,117,110,105,49,54,56,69,7,117,110,105,49,54,56,70,7,117,110,105,49,54,57,48,7,117,110,105,49,54,57,49,7,117, + 110,105,49,54,57,50,7,117,110,105,49,54,57,51,7,117,110,105,49,54,57,52,7,117,110,105,49,54,57,53,7,117,110,105,49,54,57,54,7,117, + 110,105,49,54,57,55,7,117,110,105,49,54,57,56,7,117,110,105,49,54,57,57,7,117,110,105,49,54,57,65,7,117,110,105,49,54,57,66,7,117, + 110,105,49,54,57,67,7,117,110,105,49,68,48,48,7,117,110,105,49,68,48,49,7,117,110,105,49,68,48,50,7,117,110,105,49,68,48,51,7,117, + 110,105,49,68,48,52,7,117,110,105,49,68,48,53,7,117,110,105,49,68,48,54,7,117,110,105,49,68,48,55,7,117,110,105,49,68,48,56,7,117, + 110,105,49,68,48,57,7,117,110,105,49,68,48,65,7,117,110,105,49,68,48,66,7,117,110,105,49,68,48,67,7,117,110,105,49,68,48,68,7,117, + 110,105,49,68,48,69,7,117,110,105,49,68,48,70,7,117,110,105,49,68,49,48,7,117,110,105,49,68,49,49,7,117,110,105,49,68,49,50,7,117, + 110,105,49,68,49,51,7,117,110,105,49,68,49,52,7,117,110,105,49,68,49,54,7,117,110,105,49,68,49,55,7,117,110,105,49,68,49,56,7,117, + 110,105,49,68,49,57,7,117,110,105,49,68,49,65,7,117,110,105,49,68,49,66,7,117,110,105,49,68,49,67,7,117,110,105,49,68,49,68,7,117, + 110,105,49,68,49,69,7,117,110,105,49,68,49,70,7,117,110,105,49,68,50,48,7,117,110,105,49,68,50,49,7,117,110,105,49,68,50,50,7,117, + 110,105,49,68,50,51,7,117,110,105,49,68,50,54,7,117,110,105,49,68,50,55,7,117,110,105,49,68,50,56,7,117,110,105,49,68,50,57,7,117, + 110,105,49,68,50,65,7,117,110,105,49,68,50,66,7,117,110,105,49,68,50,67,7,117,110,105,49,68,50,68,7,117,110,105,49,68,50,69,7,117, + 110,105,49,68,51,48,7,117,110,105,49,68,51,49,7,117,110,105,49,68,51,50,7,117,110,105,49,68,51,51,7,117,110,105,49,68,51,52,7,117, + 110,105,49,68,51,53,7,117,110,105,49,68,51,54,7,117,110,105,49,68,51,55,7,117,110,105,49,68,51,56,7,117,110,105,49,68,51,57,7,117, + 110,105,49,68,51,65,7,117,110,105,49,68,51,66,7,117,110,105,49,68,51,67,7,117,110,105,49,68,51,68,7,117,110,105,49,68,51,69,7,117, + 110,105,49,68,51,70,7,117,110,105,49,68,52,48,7,117,110,105,49,68,52,49,7,117,110,105,49,68,52,50,7,117,110,105,49,68,52,51,7,117, + 110,105,49,68,52,52,7,117,110,105,49,68,52,53,7,117,110,105,49,68,52,54,7,117,110,105,49,68,52,55,7,117,110,105,49,68,52,56,7,117, + 110,105,49,68,52,57,7,117,110,105,49,68,52,65,7,117,110,105,49,68,52,66,7,117,110,105,49,68,52,67,7,117,110,105,49,68,52,68,7,117, + 110,105,49,68,52,69,7,117,110,105,49,68,52,70,7,117,110,105,49,68,53,48,7,117,110,105,49,68,53,49,7,117,110,105,49,68,53,50,7,117, + 110,105,49,68,53,51,7,117,110,105,49,68,53,52,7,117,110,105,49,68,53,53,7,117,110,105,49,68,53,54,7,117,110,105,49,68,53,55,7,117, + 110,105,49,68,53,56,7,117,110,105,49,68,53,57,7,117,110,105,49,68,53,65,7,117,110,105,49,68,53,66,7,117,110,105,49,68,53,68,7,117, + 110,105,49,68,53,69,7,117,110,105,49,68,53,70,7,117,110,105,49,68,54,48,7,117,110,105,49,68,54,49,7,117,110,105,49,68,54,50,7,117, + 110,105,49,68,54,51,7,117,110,105,49,68,54,52,7,117,110,105,49,68,54,53,7,117,110,105,49,68,54,54,7,117,110,105,49,68,54,55,7,117, + 110,105,49,68,54,56,7,117,110,105,49,68,54,57,7,117,110,105,49,68,54,65,7,117,110,105,49,68,55,55,7,117,110,105,49,68,55,56,7,117, + 110,105,49,68,55,66,7,117,110,105,49,68,55,68,7,117,110,105,49,68,56,53,7,117,110,105,49,68,57,66,7,117,110,105,49,68,57,67,7,117, + 110,105,49,68,57,68,7,117,110,105,49,68,57,69,7,117,110,105,49,68,57,70,7,117,110,105,49,68,65,48,7,117,110,105,49,68,65,49,7,117, + 110,105,49,68,65,50,7,117,110,105,49,68,65,51,7,117,110,105,49,68,65,52,7,117,110,105,49,68,65,53,7,117,110,105,49,68,65,54,7,117, + 110,105,49,68,65,55,7,117,110,105,49,68,65,56,7,117,110,105,49,68,65,57,7,117,110,105,49,68,65,65,7,117,110,105,49,68,65,66,7,117, + 110,105,49,68,65,67,7,117,110,105,49,68,65,68,7,117,110,105,49,68,65,69,7,117,110,105,49,68,65,70,7,117,110,105,49,68,66,48,7,117, + 110,105,49,68,66,49,7,117,110,105,49,68,66,50,7,117,110,105,49,68,66,51,7,117,110,105,49,68,66,52,7,117,110,105,49,68,66,53,7,117, + 110,105,49,68,66,54,7,117,110,105,49,68,66,55,7,117,110,105,49,68,66,56,7,117,110,105,49,68,66,57,7,117,110,105,49,68,66,65,7,117, + 110,105,49,68,66,66,7,117,110,105,49,68,66,67,7,117,110,105,49,68,66,68,7,117,110,105,49,68,66,69,7,117,110,105,49,68,66,70,7,117, + 110,105,49,68,67,52,7,117,110,105,49,68,67,53,7,117,110,105,49,68,67,54,7,117,110,105,49,68,67,55,7,117,110,105,49,68,67,56,7,117, + 110,105,49,68,67,57,7,117,110,105,49,69,48,48,7,117,110,105,49,69,48,49,7,117,110,105,49,69,48,50,7,117,110,105,49,69,48,51,7,117, + 110,105,49,69,48,52,7,117,110,105,49,69,48,53,7,117,110,105,49,69,48,54,7,117,110,105,49,69,48,55,7,117,110,105,49,69,48,56,7,117, + 110,105,49,69,48,57,7,117,110,105,49,69,48,65,7,117,110,105,49,69,48,66,7,117,110,105,49,69,48,67,7,117,110,105,49,69,48,68,7,117, + 110,105,49,69,48,69,7,117,110,105,49,69,48,70,7,117,110,105,49,69,49,48,7,117,110,105,49,69,49,49,7,117,110,105,49,69,49,50,7,117, + 110,105,49,69,49,51,7,117,110,105,49,69,49,52,7,117,110,105,49,69,49,53,7,117,110,105,49,69,49,54,7,117,110,105,49,69,49,55,7,117, + 110,105,49,69,49,56,7,117,110,105,49,69,49,57,7,117,110,105,49,69,49,65,7,117,110,105,49,69,49,66,7,117,110,105,49,69,49,67,7,117, + 110,105,49,69,49,68,7,117,110,105,49,69,49,69,7,117,110,105,49,69,49,70,7,117,110,105,49,69,50,48,7,117,110,105,49,69,50,49,7,117, + 110,105,49,69,50,50,7,117,110,105,49,69,50,51,7,117,110,105,49,69,50,52,7,117,110,105,49,69,50,53,7,117,110,105,49,69,50,54,7,117, + 110,105,49,69,50,55,7,117,110,105,49,69,50,56,7,117,110,105,49,69,50,57,7,117,110,105,49,69,50,65,7,117,110,105,49,69,50,66,7,117, + 110,105,49,69,50,67,7,117,110,105,49,69,50,68,7,117,110,105,49,69,50,69,7,117,110,105,49,69,50,70,7,117,110,105,49,69,51,48,7,117, + 110,105,49,69,51,49,7,117,110,105,49,69,51,50,7,117,110,105,49,69,51,51,7,117,110,105,49,69,51,52,7,117,110,105,49,69,51,53,7,117, + 110,105,49,69,51,54,7,117,110,105,49,69,51,55,7,117,110,105,49,69,51,56,7,117,110,105,49,69,51,57,7,117,110,105,49,69,51,65,7,117, + 110,105,49,69,51,66,7,117,110,105,49,69,51,67,7,117,110,105,49,69,51,68,7,117,110,105,49,69,51,69,7,117,110,105,49,69,51,70,7,117, + 110,105,49,69,52,48,7,117,110,105,49,69,52,49,7,117,110,105,49,69,52,50,7,117,110,105,49,69,52,51,7,117,110,105,49,69,52,52,7,117, + 110,105,49,69,52,53,7,117,110,105,49,69,52,54,7,117,110,105,49,69,52,55,7,117,110,105,49,69,52,56,7,117,110,105,49,69,52,57,7,117, + 110,105,49,69,52,65,7,117,110,105,49,69,52,66,7,117,110,105,49,69,52,67,7,117,110,105,49,69,52,68,7,117,110,105,49,69,52,69,7,117, + 110,105,49,69,52,70,7,117,110,105,49,69,53,48,7,117,110,105,49,69,53,49,7,117,110,105,49,69,53,50,7,117,110,105,49,69,53,51,7,117, + 110,105,49,69,53,52,7,117,110,105,49,69,53,53,7,117,110,105,49,69,53,54,7,117,110,105,49,69,53,55,7,117,110,105,49,69,53,56,7,117, + 110,105,49,69,53,57,7,117,110,105,49,69,53,65,7,117,110,105,49,69,53,66,7,117,110,105,49,69,53,67,7,117,110,105,49,69,53,68,7,117, + 110,105,49,69,53,69,7,117,110,105,49,69,53,70,7,117,110,105,49,69,54,48,7,117,110,105,49,69,54,49,7,117,110,105,49,69,54,50,7,117, + 110,105,49,69,54,51,7,117,110,105,49,69,54,52,7,117,110,105,49,69,54,53,7,117,110,105,49,69,54,54,7,117,110,105,49,69,54,55,7,117, + 110,105,49,69,54,56,7,117,110,105,49,69,54,57,7,117,110,105,49,69,54,65,7,117,110,105,49,69,54,66,7,117,110,105,49,69,54,67,7,117, + 110,105,49,69,54,68,7,117,110,105,49,69,54,69,7,117,110,105,49,69,54,70,7,117,110,105,49,69,55,48,7,117,110,105,49,69,55,49,7,117, + 110,105,49,69,55,50,7,117,110,105,49,69,55,51,7,117,110,105,49,69,55,52,7,117,110,105,49,69,55,53,7,117,110,105,49,69,55,54,7,117, + 110,105,49,69,55,55,7,117,110,105,49,69,55,56,7,117,110,105,49,69,55,57,7,117,110,105,49,69,55,65,7,117,110,105,49,69,55,66,7,117, + 110,105,49,69,55,67,7,117,110,105,49,69,55,68,7,117,110,105,49,69,55,69,7,117,110,105,49,69,55,70,6,87,103,114,97,118,101,6,119,103, + 114,97,118,101,6,87,97,99,117,116,101,6,119,97,99,117,116,101,9,87,100,105,101,114,101,115,105,115,9,119,100,105,101,114,101,115,105,115,7,117, + 110,105,49,69,56,54,7,117,110,105,49,69,56,55,7,117,110,105,49,69,56,56,7,117,110,105,49,69,56,57,7,117,110,105,49,69,56,65,7,117, + 110,105,49,69,56,66,7,117,110,105,49,69,56,67,7,117,110,105,49,69,56,68,7,117,110,105,49,69,56,69,7,117,110,105,49,69,56,70,7,117, + 110,105,49,69,57,48,7,117,110,105,49,69,57,49,7,117,110,105,49,69,57,50,7,117,110,105,49,69,57,51,7,117,110,105,49,69,57,52,7,117, + 110,105,49,69,57,53,7,117,110,105,49,69,57,54,7,117,110,105,49,69,57,55,7,117,110,105,49,69,57,56,7,117,110,105,49,69,57,57,7,117, + 110,105,49,69,57,65,7,117,110,105,49,69,57,66,7,117,110,105,49,69,57,67,7,117,110,105,49,69,57,68,7,117,110,105,49,69,57,69,7,117, + 110,105,49,69,57,70,7,117,110,105,49,69,65,48,7,117,110,105,49,69,65,49,7,117,110,105,49,69,65,50,7,117,110,105,49,69,65,51,7,117, + 110,105,49,69,65,52,7,117,110,105,49,69,65,53,7,117,110,105,49,69,65,54,7,117,110,105,49,69,65,55,7,117,110,105,49,69,65,56,7,117, + 110,105,49,69,65,57,7,117,110,105,49,69,65,65,7,117,110,105,49,69,65,66,7,117,110,105,49,69,65,67,7,117,110,105,49,69,65,68,7,117, + 110,105,49,69,65,69,7,117,110,105,49,69,65,70,7,117,110,105,49,69,66,48,7,117,110,105,49,69,66,49,7,117,110,105,49,69,66,50,7,117, + 110,105,49,69,66,51,7,117,110,105,49,69,66,52,7,117,110,105,49,69,66,53,7,117,110,105,49,69,66,54,7,117,110,105,49,69,66,55,7,117, + 110,105,49,69,66,56,7,117,110,105,49,69,66,57,7,117,110,105,49,69,66,65,7,117,110,105,49,69,66,66,7,117,110,105,49,69,66,67,7,117, + 110,105,49,69,66,68,7,117,110,105,49,69,66,69,7,117,110,105,49,69,66,70,7,117,110,105,49,69,67,48,7,117,110,105,49,69,67,49,7,117, + 110,105,49,69,67,50,7,117,110,105,49,69,67,51,7,117,110,105,49,69,67,52,7,117,110,105,49,69,67,53,7,117,110,105,49,69,67,54,7,117, + 110,105,49,69,67,55,7,117,110,105,49,69,67,56,7,117,110,105,49,69,67,57,7,117,110,105,49,69,67,65,7,117,110,105,49,69,67,66,7,117, + 110,105,49,69,67,67,7,117,110,105,49,69,67,68,7,117,110,105,49,69,67,69,7,117,110,105,49,69,67,70,7,117,110,105,49,69,68,48,7,117, + 110,105,49,69,68,49,7,117,110,105,49,69,68,50,7,117,110,105,49,69,68,51,7,117,110,105,49,69,68,52,7,117,110,105,49,69,68,53,7,117, + 110,105,49,69,68,54,7,117,110,105,49,69,68,55,7,117,110,105,49,69,68,56,7,117,110,105,49,69,68,57,7,117,110,105,49,69,68,65,7,117, + 110,105,49,69,68,66,7,117,110,105,49,69,68,67,7,117,110,105,49,69,68,68,7,117,110,105,49,69,68,69,7,117,110,105,49,69,68,70,7,117, + 110,105,49,69,69,48,7,117,110,105,49,69,69,49,7,117,110,105,49,69,69,50,7,117,110,105,49,69,69,51,7,117,110,105,49,69,69,52,7,117, + 110,105,49,69,69,53,7,117,110,105,49,69,69,54,7,117,110,105,49,69,69,55,7,117,110,105,49,69,69,56,7,117,110,105,49,69,69,57,7,117, + 110,105,49,69,69,65,7,117,110,105,49,69,69,66,7,117,110,105,49,69,69,67,7,117,110,105,49,69,69,68,7,117,110,105,49,69,69,69,7,117, + 110,105,49,69,69,70,7,117,110,105,49,69,70,48,7,117,110,105,49,69,70,49,6,89,103,114,97,118,101,6,121,103,114,97,118,101,7,117,110,105, + 49,69,70,52,7,117,110,105,49,69,70,53,7,117,110,105,49,69,70,54,7,117,110,105,49,69,70,55,7,117,110,105,49,69,70,56,7,117,110,105, + 49,69,70,57,7,117,110,105,49,69,70,65,7,117,110,105,49,69,70,66,7,117,110,105,49,70,48,48,7,117,110,105,49,70,48,49,7,117,110,105, + 49,70,48,50,7,117,110,105,49,70,48,51,7,117,110,105,49,70,48,52,7,117,110,105,49,70,48,53,7,117,110,105,49,70,48,54,7,117,110,105, + 49,70,48,55,7,117,110,105,49,70,48,56,7,117,110,105,49,70,48,57,7,117,110,105,49,70,48,65,7,117,110,105,49,70,48,66,7,117,110,105, + 49,70,48,67,7,117,110,105,49,70,48,68,7,117,110,105,49,70,48,69,7,117,110,105,49,70,48,70,7,117,110,105,49,70,49,48,7,117,110,105, + 49,70,49,49,7,117,110,105,49,70,49,50,7,117,110,105,49,70,49,51,7,117,110,105,49,70,49,52,7,117,110,105,49,70,49,53,7,117,110,105, + 49,70,49,56,7,117,110,105,49,70,49,57,7,117,110,105,49,70,49,65,7,117,110,105,49,70,49,66,7,117,110,105,49,70,49,67,7,117,110,105, + 49,70,49,68,7,117,110,105,49,70,50,48,7,117,110,105,49,70,50,49,7,117,110,105,49,70,50,50,7,117,110,105,49,70,50,51,7,117,110,105, + 49,70,50,52,7,117,110,105,49,70,50,53,7,117,110,105,49,70,50,54,7,117,110,105,49,70,50,55,7,117,110,105,49,70,50,56,7,117,110,105, + 49,70,50,57,7,117,110,105,49,70,50,65,7,117,110,105,49,70,50,66,7,117,110,105,49,70,50,67,7,117,110,105,49,70,50,68,7,117,110,105, + 49,70,50,69,7,117,110,105,49,70,50,70,7,117,110,105,49,70,51,48,7,117,110,105,49,70,51,49,7,117,110,105,49,70,51,50,7,117,110,105, + 49,70,51,51,7,117,110,105,49,70,51,52,7,117,110,105,49,70,51,53,7,117,110,105,49,70,51,54,7,117,110,105,49,70,51,55,7,117,110,105, + 49,70,51,56,7,117,110,105,49,70,51,57,7,117,110,105,49,70,51,65,7,117,110,105,49,70,51,66,7,117,110,105,49,70,51,67,7,117,110,105, + 49,70,51,68,7,117,110,105,49,70,51,69,7,117,110,105,49,70,51,70,7,117,110,105,49,70,52,48,7,117,110,105,49,70,52,49,7,117,110,105, + 49,70,52,50,7,117,110,105,49,70,52,51,7,117,110,105,49,70,52,52,7,117,110,105,49,70,52,53,7,117,110,105,49,70,52,56,7,117,110,105, + 49,70,52,57,7,117,110,105,49,70,52,65,7,117,110,105,49,70,52,66,7,117,110,105,49,70,52,67,7,117,110,105,49,70,52,68,7,117,110,105, + 49,70,53,48,7,117,110,105,49,70,53,49,7,117,110,105,49,70,53,50,7,117,110,105,49,70,53,51,7,117,110,105,49,70,53,52,7,117,110,105, + 49,70,53,53,7,117,110,105,49,70,53,54,7,117,110,105,49,70,53,55,7,117,110,105,49,70,53,57,7,117,110,105,49,70,53,66,7,117,110,105, + 49,70,53,68,7,117,110,105,49,70,53,70,7,117,110,105,49,70,54,48,7,117,110,105,49,70,54,49,7,117,110,105,49,70,54,50,7,117,110,105, + 49,70,54,51,7,117,110,105,49,70,54,52,7,117,110,105,49,70,54,53,7,117,110,105,49,70,54,54,7,117,110,105,49,70,54,55,7,117,110,105, + 49,70,54,56,7,117,110,105,49,70,54,57,7,117,110,105,49,70,54,65,7,117,110,105,49,70,54,66,7,117,110,105,49,70,54,67,7,117,110,105, + 49,70,54,68,7,117,110,105,49,70,54,69,7,117,110,105,49,70,54,70,7,117,110,105,49,70,55,48,7,117,110,105,49,70,55,49,7,117,110,105, + 49,70,55,50,7,117,110,105,49,70,55,51,7,117,110,105,49,70,55,52,7,117,110,105,49,70,55,53,7,117,110,105,49,70,55,54,7,117,110,105, + 49,70,55,55,7,117,110,105,49,70,55,56,7,117,110,105,49,70,55,57,7,117,110,105,49,70,55,65,7,117,110,105,49,70,55,66,7,117,110,105, + 49,70,55,67,7,117,110,105,49,70,55,68,7,117,110,105,49,70,56,48,7,117,110,105,49,70,56,49,7,117,110,105,49,70,56,50,7,117,110,105, + 49,70,56,51,7,117,110,105,49,70,56,52,7,117,110,105,49,70,56,53,7,117,110,105,49,70,56,54,7,117,110,105,49,70,56,55,7,117,110,105, + 49,70,56,56,7,117,110,105,49,70,56,57,7,117,110,105,49,70,56,65,7,117,110,105,49,70,56,66,7,117,110,105,49,70,56,67,7,117,110,105, + 49,70,56,68,7,117,110,105,49,70,56,69,7,117,110,105,49,70,56,70,7,117,110,105,49,70,57,48,7,117,110,105,49,70,57,49,7,117,110,105, + 49,70,57,50,7,117,110,105,49,70,57,51,7,117,110,105,49,70,57,52,7,117,110,105,49,70,57,53,7,117,110,105,49,70,57,54,7,117,110,105, + 49,70,57,55,7,117,110,105,49,70,57,56,7,117,110,105,49,70,57,57,7,117,110,105,49,70,57,65,7,117,110,105,49,70,57,66,7,117,110,105, + 49,70,57,67,7,117,110,105,49,70,57,68,7,117,110,105,49,70,57,69,7,117,110,105,49,70,57,70,7,117,110,105,49,70,65,48,7,117,110,105, + 49,70,65,49,7,117,110,105,49,70,65,50,7,117,110,105,49,70,65,51,7,117,110,105,49,70,65,52,7,117,110,105,49,70,65,53,7,117,110,105, + 49,70,65,54,7,117,110,105,49,70,65,55,7,117,110,105,49,70,65,56,7,117,110,105,49,70,65,57,7,117,110,105,49,70,65,65,7,117,110,105, + 49,70,65,66,7,117,110,105,49,70,65,67,7,117,110,105,49,70,65,68,7,117,110,105,49,70,65,69,7,117,110,105,49,70,65,70,7,117,110,105, + 49,70,66,48,7,117,110,105,49,70,66,49,7,117,110,105,49,70,66,50,7,117,110,105,49,70,66,51,7,117,110,105,49,70,66,52,7,117,110,105, + 49,70,66,54,7,117,110,105,49,70,66,55,7,117,110,105,49,70,66,56,7,117,110,105,49,70,66,57,7,117,110,105,49,70,66,65,7,117,110,105, + 49,70,66,66,7,117,110,105,49,70,66,67,7,117,110,105,49,70,66,68,7,117,110,105,49,70,66,69,7,117,110,105,49,70,66,70,7,117,110,105, + 49,70,67,48,7,117,110,105,49,70,67,49,7,117,110,105,49,70,67,50,7,117,110,105,49,70,67,51,7,117,110,105,49,70,67,52,7,117,110,105, + 49,70,67,54,7,117,110,105,49,70,67,55,7,117,110,105,49,70,67,56,7,117,110,105,49,70,67,57,7,117,110,105,49,70,67,65,7,117,110,105, + 49,70,67,66,7,117,110,105,49,70,67,67,7,117,110,105,49,70,67,68,7,117,110,105,49,70,67,69,7,117,110,105,49,70,67,70,7,117,110,105, + 49,70,68,48,7,117,110,105,49,70,68,49,7,117,110,105,49,70,68,50,7,117,110,105,49,70,68,51,7,117,110,105,49,70,68,54,7,117,110,105, + 49,70,68,55,7,117,110,105,49,70,68,56,7,117,110,105,49,70,68,57,7,117,110,105,49,70,68,65,7,117,110,105,49,70,68,66,7,117,110,105, + 49,70,68,68,7,117,110,105,49,70,68,69,7,117,110,105,49,70,68,70,7,117,110,105,49,70,69,48,7,117,110,105,49,70,69,49,7,117,110,105, + 49,70,69,50,7,117,110,105,49,70,69,51,7,117,110,105,49,70,69,52,7,117,110,105,49,70,69,53,7,117,110,105,49,70,69,54,7,117,110,105, + 49,70,69,55,7,117,110,105,49,70,69,56,7,117,110,105,49,70,69,57,7,117,110,105,49,70,69,65,7,117,110,105,49,70,69,66,7,117,110,105, + 49,70,69,67,7,117,110,105,49,70,69,68,7,117,110,105,49,70,69,69,7,117,110,105,49,70,69,70,7,117,110,105,49,70,70,50,7,117,110,105, + 49,70,70,51,7,117,110,105,49,70,70,52,7,117,110,105,49,70,70,54,7,117,110,105,49,70,70,55,7,117,110,105,49,70,70,56,7,117,110,105, + 49,70,70,57,7,117,110,105,49,70,70,65,7,117,110,105,49,70,70,66,7,117,110,105,49,70,70,67,7,117,110,105,49,70,70,68,7,117,110,105, + 49,70,70,69,7,117,110,105,50,48,48,48,7,117,110,105,50,48,48,49,7,117,110,105,50,48,48,50,7,117,110,105,50,48,48,51,7,117,110,105, + 50,48,48,52,7,117,110,105,50,48,48,53,7,117,110,105,50,48,48,54,7,117,110,105,50,48,48,55,7,117,110,105,50,48,48,56,7,117,110,105, + 50,48,48,57,7,117,110,105,50,48,48,65,7,117,110,105,50,48,48,66,7,117,110,105,50,48,48,67,7,117,110,105,50,48,48,68,7,117,110,105, + 50,48,48,69,7,117,110,105,50,48,48,70,7,117,110,105,50,48,49,48,7,117,110,105,50,48,49,49,10,102,105,103,117,114,101,100,97,115,104,7, + 117,110,105,50,48,49,53,7,117,110,105,50,48,49,54,13,117,110,100,101,114,115,99,111,114,101,100,98,108,13,113,117,111,116,101,114,101,118,101,114, + 115,101,100,7,117,110,105,50,48,49,70,7,117,110,105,50,48,50,51,14,111,110,101,100,111,116,101,110,108,101,97,100,101,114,14,116,119,111,100,111, + 116,101,110,108,101,97,100,101,114,7,117,110,105,50,48,50,55,7,117,110,105,50,48,50,56,7,117,110,105,50,48,50,57,7,117,110,105,50,48,50, + 65,7,117,110,105,50,48,50,66,7,117,110,105,50,48,50,67,7,117,110,105,50,48,50,68,7,117,110,105,50,48,50,69,7,117,110,105,50,48,50, + 70,7,117,110,105,50,48,51,49,6,109,105,110,117,116,101,6,115,101,99,111,110,100,7,117,110,105,50,48,51,52,7,117,110,105,50,48,51,53,7, + 117,110,105,50,48,51,54,7,117,110,105,50,48,51,55,7,117,110,105,50,48,51,56,7,117,110,105,50,48,51,66,9,101,120,99,108,97,109,100,98, + 108,7,117,110,105,50,48,51,68,7,117,110,105,50,48,51,69,7,117,110,105,50,48,51,70,7,117,110,105,50,48,52,48,7,117,110,105,50,48,52, + 49,7,117,110,105,50,48,52,50,7,117,110,105,50,48,52,51,7,117,110,105,50,48,52,53,7,117,110,105,50,48,52,54,7,117,110,105,50,48,52, + 55,7,117,110,105,50,48,52,56,7,117,110,105,50,48,52,57,7,117,110,105,50,48,52,65,7,117,110,105,50,48,52,66,7,117,110,105,50,48,52, + 67,7,117,110,105,50,48,52,68,7,117,110,105,50,48,52,69,7,117,110,105,50,48,52,70,7,117,110,105,50,48,53,48,7,117,110,105,50,48,53, + 49,7,117,110,105,50,48,53,50,7,117,110,105,50,48,53,51,7,117,110,105,50,48,53,52,7,117,110,105,50,48,53,53,7,117,110,105,50,48,53, + 54,7,117,110,105,50,48,53,55,7,117,110,105,50,48,53,56,7,117,110,105,50,48,53,57,7,117,110,105,50,48,53,65,7,117,110,105,50,48,53, + 66,7,117,110,105,50,48,53,67,7,117,110,105,50,48,53,68,7,117,110,105,50,48,53,69,7,117,110,105,50,48,53,70,7,117,110,105,50,48,54, + 48,7,117,110,105,50,48,54,49,7,117,110,105,50,48,54,50,7,117,110,105,50,48,54,51,7,117,110,105,50,48,54,52,7,117,110,105,50,48,54, + 65,7,117,110,105,50,48,54,66,7,117,110,105,50,48,54,67,7,117,110,105,50,48,54,68,7,117,110,105,50,48,54,69,7,117,110,105,50,48,54, + 70,7,117,110,105,50,48,55,48,7,117,110,105,50,48,55,49,7,117,110,105,50,48,55,52,7,117,110,105,50,48,55,53,7,117,110,105,50,48,55, + 54,7,117,110,105,50,48,55,55,7,117,110,105,50,48,55,56,7,117,110,105,50,48,55,57,7,117,110,105,50,48,55,65,7,117,110,105,50,48,55, + 66,7,117,110,105,50,48,55,67,7,117,110,105,50,48,55,68,7,117,110,105,50,48,55,69,7,117,110,105,50,48,55,70,7,117,110,105,50,48,56, + 48,7,117,110,105,50,48,56,49,7,117,110,105,50,48,56,50,7,117,110,105,50,48,56,51,7,117,110,105,50,48,56,52,7,117,110,105,50,48,56, + 53,7,117,110,105,50,48,56,54,7,117,110,105,50,48,56,55,7,117,110,105,50,48,56,56,7,117,110,105,50,48,56,57,7,117,110,105,50,48,56, + 65,7,117,110,105,50,48,56,66,7,117,110,105,50,48,56,67,7,117,110,105,50,48,56,68,7,117,110,105,50,48,56,69,7,117,110,105,50,48,57, + 48,7,117,110,105,50,48,57,49,7,117,110,105,50,48,57,50,7,117,110,105,50,48,57,51,7,117,110,105,50,48,57,52,7,117,110,105,50,48,57, + 53,7,117,110,105,50,48,57,54,7,117,110,105,50,48,57,55,7,117,110,105,50,48,57,56,7,117,110,105,50,48,57,57,7,117,110,105,50,48,57, + 65,7,117,110,105,50,48,57,66,7,117,110,105,50,48,57,67,7,117,110,105,50,48,65,48,13,99,111,108,111,110,109,111,110,101,116,97,114,121,7, + 117,110,105,50,48,65,50,4,108,105,114,97,7,117,110,105,50,48,65,53,7,117,110,105,50,48,65,54,6,112,101,115,101,116,97,7,117,110,105,50, + 48,65,56,7,117,110,105,50,48,65,57,7,117,110,105,50,48,65,65,4,100,111,110,103,4,69,117,114,111,7,117,110,105,50,48,65,68,7,117,110, + 105,50,48,65,69,7,117,110,105,50,48,65,70,7,117,110,105,50,48,66,48,7,117,110,105,50,48,66,49,7,117,110,105,50,48,66,50,7,117,110, + 105,50,48,66,51,7,117,110,105,50,48,66,52,7,117,110,105,50,48,66,53,7,117,110,105,50,48,66,56,7,117,110,105,50,48,66,57,7,117,110, + 105,50,48,66,65,7,117,110,105,50,48,68,48,7,117,110,105,50,48,68,49,7,117,110,105,50,48,68,54,7,117,110,105,50,48,68,55,7,117,110, + 105,50,48,68,66,7,117,110,105,50,48,68,67,7,117,110,105,50,48,69,49,7,117,110,105,50,49,48,48,7,117,110,105,50,49,48,49,7,117,110, + 105,50,49,48,50,7,117,110,105,50,49,48,51,7,117,110,105,50,49,48,52,7,117,110,105,50,49,48,53,7,117,110,105,50,49,48,54,7,117,110, + 105,50,49,48,55,7,117,110,105,50,49,48,56,7,117,110,105,50,49,48,57,7,117,110,105,50,49,48,66,7,117,110,105,50,49,48,67,7,117,110, + 105,50,49,48,68,7,117,110,105,50,49,48,69,7,117,110,105,50,49,48,70,7,117,110,105,50,49,49,48,8,73,102,114,97,107,116,117,114,7,117, + 110,105,50,49,49,50,7,117,110,105,50,49,49,51,7,117,110,105,50,49,49,52,7,117,110,105,50,49,49,53,7,117,110,105,50,49,49,54,7,117, + 110,105,50,49,49,55,11,119,101,105,101,114,115,116,114,97,115,115,7,117,110,105,50,49,49,57,7,117,110,105,50,49,49,65,7,117,110,105,50,49, + 49,66,8,82,102,114,97,107,116,117,114,7,117,110,105,50,49,49,68,12,112,114,101,115,99,114,105,112,116,105,111,110,7,117,110,105,50,49,49,70, + 7,117,110,105,50,49,50,48,7,117,110,105,50,49,50,49,7,117,110,105,50,49,50,51,7,117,110,105,50,49,50,52,7,117,110,105,50,49,50,53, + 7,117,110,105,50,49,50,54,7,117,110,105,50,49,50,55,7,117,110,105,50,49,50,56,7,117,110,105,50,49,50,57,7,117,110,105,50,49,50,65, + 7,117,110,105,50,49,50,66,7,117,110,105,50,49,50,67,7,117,110,105,50,49,50,68,9,101,115,116,105,109,97,116,101,100,7,117,110,105,50,49, + 50,70,7,117,110,105,50,49,51,48,7,117,110,105,50,49,51,49,7,117,110,105,50,49,51,50,7,117,110,105,50,49,51,51,7,117,110,105,50,49, + 51,52,5,97,108,101,112,104,7,117,110,105,50,49,51,54,7,117,110,105,50,49,51,55,7,117,110,105,50,49,51,56,7,117,110,105,50,49,51,57, + 7,117,110,105,50,49,51,65,7,117,110,105,50,49,51,66,7,117,110,105,50,49,51,67,7,117,110,105,50,49,51,68,7,117,110,105,50,49,51,69, + 7,117,110,105,50,49,51,70,7,117,110,105,50,49,52,48,7,117,110,105,50,49,52,49,7,117,110,105,50,49,52,50,7,117,110,105,50,49,52,51, + 7,117,110,105,50,49,52,52,7,117,110,105,50,49,52,53,7,117,110,105,50,49,52,54,7,117,110,105,50,49,52,55,7,117,110,105,50,49,52,56, + 7,117,110,105,50,49,52,57,7,117,110,105,50,49,52,66,7,117,110,105,50,49,52,69,7,117,110,105,50,49,53,48,7,117,110,105,50,49,53,49, + 7,117,110,105,50,49,53,50,8,111,110,101,116,104,105,114,100,9,116,119,111,116,104,105,114,100,115,7,117,110,105,50,49,53,53,7,117,110,105,50, + 49,53,54,7,117,110,105,50,49,53,55,7,117,110,105,50,49,53,56,7,117,110,105,50,49,53,57,7,117,110,105,50,49,53,65,9,111,110,101,101, + 105,103,104,116,104,12,116,104,114,101,101,101,105,103,104,116,104,115,11,102,105,118,101,101,105,103,104,116,104,115,12,115,101,118,101,110,101,105,103,104, + 116,104,115,7,117,110,105,50,49,53,70,7,117,110,105,50,49,54,48,7,117,110,105,50,49,54,49,7,117,110,105,50,49,54,50,7,117,110,105,50, + 49,54,51,7,117,110,105,50,49,54,52,7,117,110,105,50,49,54,53,7,117,110,105,50,49,54,54,7,117,110,105,50,49,54,55,7,117,110,105,50, + 49,54,56,7,117,110,105,50,49,54,57,7,117,110,105,50,49,54,65,7,117,110,105,50,49,54,66,7,117,110,105,50,49,54,67,7,117,110,105,50, + 49,54,68,7,117,110,105,50,49,54,69,7,117,110,105,50,49,54,70,7,117,110,105,50,49,55,48,7,117,110,105,50,49,55,49,7,117,110,105,50, + 49,55,50,7,117,110,105,50,49,55,51,7,117,110,105,50,49,55,52,7,117,110,105,50,49,55,53,7,117,110,105,50,49,55,54,7,117,110,105,50, + 49,55,55,7,117,110,105,50,49,55,56,7,117,110,105,50,49,55,57,7,117,110,105,50,49,55,65,7,117,110,105,50,49,55,66,7,117,110,105,50, + 49,55,67,7,117,110,105,50,49,55,68,7,117,110,105,50,49,55,69,7,117,110,105,50,49,55,70,7,117,110,105,50,49,56,48,7,117,110,105,50, + 49,56,49,7,117,110,105,50,49,56,50,7,117,110,105,50,49,56,51,7,117,110,105,50,49,56,52,7,117,110,105,50,49,56,53,7,117,110,105,50, + 49,56,57,9,97,114,114,111,119,108,101,102,116,7,97,114,114,111,119,117,112,10,97,114,114,111,119,114,105,103,104,116,9,97,114,114,111,119,100,111, + 119,110,9,97,114,114,111,119,98,111,116,104,9,97,114,114,111,119,117,112,100,110,7,117,110,105,50,49,57,54,7,117,110,105,50,49,57,55,7,117, + 110,105,50,49,57,56,7,117,110,105,50,49,57,57,7,117,110,105,50,49,57,65,7,117,110,105,50,49,57,66,7,117,110,105,50,49,57,67,7,117, + 110,105,50,49,57,68,7,117,110,105,50,49,57,69,7,117,110,105,50,49,57,70,7,117,110,105,50,49,65,48,7,117,110,105,50,49,65,49,7,117, + 110,105,50,49,65,50,7,117,110,105,50,49,65,51,7,117,110,105,50,49,65,52,7,117,110,105,50,49,65,53,7,117,110,105,50,49,65,54,7,117, + 110,105,50,49,65,55,12,97,114,114,111,119,117,112,100,110,98,115,101,7,117,110,105,50,49,65,57,7,117,110,105,50,49,65,65,7,117,110,105,50, + 49,65,66,7,117,110,105,50,49,65,67,7,117,110,105,50,49,65,68,7,117,110,105,50,49,65,69,7,117,110,105,50,49,65,70,7,117,110,105,50, + 49,66,48,7,117,110,105,50,49,66,49,7,117,110,105,50,49,66,50,7,117,110,105,50,49,66,51,7,117,110,105,50,49,66,52,14,99,97,114,114, + 105,97,103,101,114,101,116,117,114,110,7,117,110,105,50,49,66,54,7,117,110,105,50,49,66,55,7,117,110,105,50,49,66,56,7,117,110,105,50,49, + 66,57,7,117,110,105,50,49,66,65,7,117,110,105,50,49,66,66,7,117,110,105,50,49,66,67,7,117,110,105,50,49,66,68,7,117,110,105,50,49, + 66,69,7,117,110,105,50,49,66,70,7,117,110,105,50,49,67,48,7,117,110,105,50,49,67,49,7,117,110,105,50,49,67,50,7,117,110,105,50,49, + 67,51,7,117,110,105,50,49,67,52,7,117,110,105,50,49,67,53,7,117,110,105,50,49,67,54,7,117,110,105,50,49,67,55,7,117,110,105,50,49, + 67,56,7,117,110,105,50,49,67,57,7,117,110,105,50,49,67,65,7,117,110,105,50,49,67,66,7,117,110,105,50,49,67,67,7,117,110,105,50,49, + 67,68,7,117,110,105,50,49,67,69,7,117,110,105,50,49,67,70,12,97,114,114,111,119,100,98,108,108,101,102,116,10,97,114,114,111,119,100,98,108, + 117,112,13,97,114,114,111,119,100,98,108,114,105,103,104,116,12,97,114,114,111,119,100,98,108,100,111,119,110,12,97,114,114,111,119,100,98,108,98,111, + 116,104,7,117,110,105,50,49,68,53,7,117,110,105,50,49,68,54,7,117,110,105,50,49,68,55,7,117,110,105,50,49,68,56,7,117,110,105,50,49, + 68,57,7,117,110,105,50,49,68,65,7,117,110,105,50,49,68,66,7,117,110,105,50,49,68,67,7,117,110,105,50,49,68,68,7,117,110,105,50,49, + 68,69,7,117,110,105,50,49,68,70,7,117,110,105,50,49,69,48,7,117,110,105,50,49,69,49,7,117,110,105,50,49,69,50,7,117,110,105,50,49, + 69,51,7,117,110,105,50,49,69,52,7,117,110,105,50,49,69,53,7,117,110,105,50,49,69,54,7,117,110,105,50,49,69,55,7,117,110,105,50,49, + 69,56,7,117,110,105,50,49,69,57,7,117,110,105,50,49,69,65,7,117,110,105,50,49,69,66,7,117,110,105,50,49,69,67,7,117,110,105,50,49, + 69,68,7,117,110,105,50,49,69,69,7,117,110,105,50,49,69,70,7,117,110,105,50,49,70,48,7,117,110,105,50,49,70,49,7,117,110,105,50,49, + 70,50,7,117,110,105,50,49,70,51,7,117,110,105,50,49,70,52,7,117,110,105,50,49,70,53,7,117,110,105,50,49,70,54,7,117,110,105,50,49, + 70,55,7,117,110,105,50,49,70,56,7,117,110,105,50,49,70,57,7,117,110,105,50,49,70,65,7,117,110,105,50,49,70,66,7,117,110,105,50,49, + 70,67,7,117,110,105,50,49,70,68,7,117,110,105,50,49,70,69,7,117,110,105,50,49,70,70,9,117,110,105,118,101,114,115,97,108,7,117,110,105, + 50,50,48,49,11,101,120,105,115,116,101,110,116,105,97,108,7,117,110,105,50,50,48,52,8,101,109,112,116,121,115,101,116,8,103,114,97,100,105,101, + 110,116,7,101,108,101,109,101,110,116,10,110,111,116,101,108,101,109,101,110,116,7,117,110,105,50,50,48,65,8,115,117,99,104,116,104,97,116,7,117, + 110,105,50,50,48,67,7,117,110,105,50,50,48,68,7,117,110,105,50,50,48,69,7,117,110,105,50,50,49,48,7,117,110,105,50,50,49,51,7,117, + 110,105,50,50,49,52,7,117,110,105,50,50,49,53,7,117,110,105,50,50,49,54,12,97,115,116,101,114,105,115,107,109,97,116,104,7,117,110,105,50, + 50,49,56,7,117,110,105,50,50,49,57,7,117,110,105,50,50,49,66,7,117,110,105,50,50,49,67,12,112,114,111,112,111,114,116,105,111,110,97,108, + 10,111,114,116,104,111,103,111,110,97,108,5,97,110,103,108,101,7,117,110,105,50,50,50,49,7,117,110,105,50,50,50,50,7,117,110,105,50,50,50, + 51,7,117,110,105,50,50,50,52,7,117,110,105,50,50,50,53,7,117,110,105,50,50,50,54,10,108,111,103,105,99,97,108,97,110,100,9,108,111,103, + 105,99,97,108,111,114,12,105,110,116,101,114,115,101,99,116,105,111,110,5,117,110,105,111,110,7,117,110,105,50,50,50,67,7,117,110,105,50,50,50, + 68,7,117,110,105,50,50,50,69,7,117,110,105,50,50,50,70,7,117,110,105,50,50,51,48,7,117,110,105,50,50,51,49,7,117,110,105,50,50,51, + 50,7,117,110,105,50,50,51,51,9,116,104,101,114,101,102,111,114,101,7,117,110,105,50,50,51,53,7,117,110,105,50,50,51,54,7,117,110,105,50, + 50,51,55,7,117,110,105,50,50,51,56,7,117,110,105,50,50,51,57,7,117,110,105,50,50,51,65,7,117,110,105,50,50,51,66,7,115,105,109,105, + 108,97,114,7,117,110,105,50,50,51,68,7,117,110,105,50,50,51,69,7,117,110,105,50,50,51,70,7,117,110,105,50,50,52,48,7,117,110,105,50, + 50,52,49,7,117,110,105,50,50,52,50,7,117,110,105,50,50,52,51,7,117,110,105,50,50,52,52,9,99,111,110,103,114,117,101,110,116,7,117,110, + 105,50,50,52,54,7,117,110,105,50,50,52,55,7,117,110,105,50,50,52,57,7,117,110,105,50,50,52,65,7,117,110,105,50,50,52,66,7,117,110, + 105,50,50,52,67,7,117,110,105,50,50,52,68,7,117,110,105,50,50,52,69,7,117,110,105,50,50,52,70,7,117,110,105,50,50,53,48,7,117,110, + 105,50,50,53,49,7,117,110,105,50,50,53,50,7,117,110,105,50,50,53,51,7,117,110,105,50,50,53,52,7,117,110,105,50,50,53,53,7,117,110, + 105,50,50,53,54,7,117,110,105,50,50,53,55,7,117,110,105,50,50,53,56,7,117,110,105,50,50,53,57,7,117,110,105,50,50,53,65,7,117,110, + 105,50,50,53,66,7,117,110,105,50,50,53,67,7,117,110,105,50,50,53,68,7,117,110,105,50,50,53,69,7,117,110,105,50,50,53,70,11,101,113, + 117,105,118,97,108,101,110,99,101,7,117,110,105,50,50,54,50,7,117,110,105,50,50,54,51,7,117,110,105,50,50,54,54,7,117,110,105,50,50,54, + 55,7,117,110,105,50,50,54,56,7,117,110,105,50,50,54,57,7,117,110,105,50,50,54,65,7,117,110,105,50,50,54,66,7,117,110,105,50,50,54, + 67,7,117,110,105,50,50,54,68,7,117,110,105,50,50,54,69,7,117,110,105,50,50,54,70,7,117,110,105,50,50,55,48,7,117,110,105,50,50,55, + 49,7,117,110,105,50,50,55,50,7,117,110,105,50,50,55,51,7,117,110,105,50,50,55,52,7,117,110,105,50,50,55,53,7,117,110,105,50,50,55, + 54,7,117,110,105,50,50,55,55,7,117,110,105,50,50,55,56,7,117,110,105,50,50,55,57,7,117,110,105,50,50,55,65,7,117,110,105,50,50,55, + 66,7,117,110,105,50,50,55,67,7,117,110,105,50,50,55,68,7,117,110,105,50,50,55,69,7,117,110,105,50,50,55,70,7,117,110,105,50,50,56, + 48,7,117,110,105,50,50,56,49,12,112,114,111,112,101,114,115,117,98,115,101,116,14,112,114,111,112,101,114,115,117,112,101,114,115,101,116,9,110,111, + 116,115,117,98,115,101,116,7,117,110,105,50,50,56,53,12,114,101,102,108,101,120,115,117,98,115,101,116,14,114,101,102,108,101,120,115,117,112,101,114, + 115,101,116,7,117,110,105,50,50,56,56,7,117,110,105,50,50,56,57,7,117,110,105,50,50,56,65,7,117,110,105,50,50,56,66,7,117,110,105,50, + 50,56,67,7,117,110,105,50,50,56,68,7,117,110,105,50,50,56,69,7,117,110,105,50,50,56,70,7,117,110,105,50,50,57,48,7,117,110,105,50, + 50,57,49,7,117,110,105,50,50,57,50,7,117,110,105,50,50,57,51,7,117,110,105,50,50,57,52,10,99,105,114,99,108,101,112,108,117,115,7,117, + 110,105,50,50,57,54,14,99,105,114,99,108,101,109,117,108,116,105,112,108,121,7,117,110,105,50,50,57,56,7,117,110,105,50,50,57,57,7,117,110, + 105,50,50,57,65,7,117,110,105,50,50,57,66,7,117,110,105,50,50,57,67,7,117,110,105,50,50,57,68,7,117,110,105,50,50,57,69,7,117,110, + 105,50,50,57,70,7,117,110,105,50,50,65,48,7,117,110,105,50,50,65,49,7,117,110,105,50,50,65,50,7,117,110,105,50,50,65,51,7,117,110, + 105,50,50,65,52,13,112,101,114,112,101,110,100,105,99,117,108,97,114,7,117,110,105,50,50,65,54,7,117,110,105,50,50,65,55,7,117,110,105,50, + 50,65,56,7,117,110,105,50,50,65,57,7,117,110,105,50,50,65,65,7,117,110,105,50,50,65,66,7,117,110,105,50,50,65,67,7,117,110,105,50, + 50,65,68,7,117,110,105,50,50,65,69,7,117,110,105,50,50,65,70,7,117,110,105,50,50,66,48,7,117,110,105,50,50,66,49,7,117,110,105,50, + 50,66,50,7,117,110,105,50,50,66,51,7,117,110,105,50,50,66,52,7,117,110,105,50,50,66,53,7,117,110,105,50,50,66,54,7,117,110,105,50, + 50,66,55,7,117,110,105,50,50,66,56,7,117,110,105,50,50,66,57,7,117,110,105,50,50,66,65,7,117,110,105,50,50,66,66,7,117,110,105,50, + 50,66,67,7,117,110,105,50,50,66,68,7,117,110,105,50,50,66,69,7,117,110,105,50,50,66,70,7,117,110,105,50,50,67,48,7,117,110,105,50, + 50,67,49,7,117,110,105,50,50,67,50,7,117,110,105,50,50,67,51,7,117,110,105,50,50,67,52,7,100,111,116,109,97,116,104,7,117,110,105,50, + 50,67,54,7,117,110,105,50,50,67,55,7,117,110,105,50,50,67,56,7,117,110,105,50,50,67,57,7,117,110,105,50,50,67,65,7,117,110,105,50, + 50,67,66,7,117,110,105,50,50,67,67,7,117,110,105,50,50,67,68,7,117,110,105,50,50,67,69,7,117,110,105,50,50,67,70,7,117,110,105,50, + 50,68,48,7,117,110,105,50,50,68,49,7,117,110,105,50,50,68,50,7,117,110,105,50,50,68,51,7,117,110,105,50,50,68,52,7,117,110,105,50, + 50,68,53,7,117,110,105,50,50,68,54,7,117,110,105,50,50,68,55,7,117,110,105,50,50,68,56,7,117,110,105,50,50,68,57,7,117,110,105,50, + 50,68,65,7,117,110,105,50,50,68,66,7,117,110,105,50,50,68,67,7,117,110,105,50,50,68,68,7,117,110,105,50,50,68,69,7,117,110,105,50, + 50,68,70,7,117,110,105,50,50,69,48,7,117,110,105,50,50,69,49,7,117,110,105,50,50,69,50,7,117,110,105,50,50,69,51,7,117,110,105,50, + 50,69,52,7,117,110,105,50,50,69,53,7,117,110,105,50,50,69,54,7,117,110,105,50,50,69,55,7,117,110,105,50,50,69,56,7,117,110,105,50, + 50,69,57,7,117,110,105,50,50,69,65,7,117,110,105,50,50,69,66,7,117,110,105,50,50,69,67,7,117,110,105,50,50,69,68,7,117,110,105,50, + 50,69,69,7,117,110,105,50,50,69,70,7,117,110,105,50,50,70,48,7,117,110,105,50,50,70,49,7,117,110,105,50,50,70,50,7,117,110,105,50, + 50,70,51,7,117,110,105,50,50,70,52,7,117,110,105,50,50,70,53,7,117,110,105,50,50,70,54,7,117,110,105,50,50,70,55,7,117,110,105,50, + 50,70,56,7,117,110,105,50,50,70,57,7,117,110,105,50,50,70,65,7,117,110,105,50,50,70,66,7,117,110,105,50,50,70,67,7,117,110,105,50, + 50,70,68,7,117,110,105,50,50,70,69,7,117,110,105,50,50,70,70,7,117,110,105,50,51,48,48,7,117,110,105,50,51,48,49,5,104,111,117,115, + 101,7,117,110,105,50,51,48,51,7,117,110,105,50,51,48,52,7,117,110,105,50,51,48,53,7,117,110,105,50,51,48,54,7,117,110,105,50,51,48, + 55,7,117,110,105,50,51,48,56,7,117,110,105,50,51,48,57,7,117,110,105,50,51,48,65,7,117,110,105,50,51,48,66,7,117,110,105,50,51,48, + 67,7,117,110,105,50,51,48,68,7,117,110,105,50,51,48,69,7,117,110,105,50,51,48,70,13,114,101,118,108,111,103,105,99,97,108,110,111,116,7, + 117,110,105,50,51,49,49,7,117,110,105,50,51,49,56,7,117,110,105,50,51,49,57,7,117,110,105,50,51,49,67,7,117,110,105,50,51,49,68,7, + 117,110,105,50,51,49,69,7,117,110,105,50,51,49,70,10,105,110,116,101,103,114,97,108,116,112,10,105,110,116,101,103,114,97,108,98,116,7,117,110, + 105,50,51,50,52,7,117,110,105,50,51,50,53,7,117,110,105,50,51,50,54,7,117,110,105,50,51,50,55,7,117,110,105,50,51,50,56,7,117,110, + 105,50,51,50,66,7,117,110,105,50,51,50,67,7,117,110,105,50,51,55,51,7,117,110,105,50,51,55,52,7,117,110,105,50,51,55,53,7,117,110, + 105,50,51,55,65,7,117,110,105,50,51,55,68,7,117,110,105,50,51,56,55,7,117,110,105,50,51,57,52,7,117,110,105,50,51,57,66,7,117,110, + 105,50,51,57,67,7,117,110,105,50,51,57,68,7,117,110,105,50,51,57,69,7,117,110,105,50,51,57,70,7,117,110,105,50,51,65,48,7,117,110, + 105,50,51,65,49,7,117,110,105,50,51,65,50,7,117,110,105,50,51,65,51,7,117,110,105,50,51,65,52,7,117,110,105,50,51,65,53,7,117,110, + 105,50,51,65,54,7,117,110,105,50,51,65,55,7,117,110,105,50,51,65,56,7,117,110,105,50,51,65,57,7,117,110,105,50,51,65,65,7,117,110, + 105,50,51,65,66,7,117,110,105,50,51,65,67,7,117,110,105,50,51,65,68,7,117,110,105,50,51,65,69,7,117,110,105,50,51,67,69,7,117,110, + 105,50,51,67,70,7,117,110,105,50,51,69,51,7,117,110,105,50,51,69,53,7,117,110,105,50,51,69,56,7,117,110,105,50,52,50,50,7,117,110, + 105,50,52,50,51,7,117,110,105,50,52,54,48,7,117,110,105,50,52,54,49,7,117,110,105,50,52,54,50,7,117,110,105,50,52,54,51,7,117,110, + 105,50,52,54,52,7,117,110,105,50,52,54,53,7,117,110,105,50,52,54,54,7,117,110,105,50,52,54,55,7,117,110,105,50,52,54,56,7,117,110, + 105,50,52,54,57,8,83,70,49,48,48,48,48,48,7,117,110,105,50,53,48,49,8,83,70,49,49,48,48,48,48,7,117,110,105,50,53,48,51,7, + 117,110,105,50,53,48,52,7,117,110,105,50,53,48,53,7,117,110,105,50,53,48,54,7,117,110,105,50,53,48,55,7,117,110,105,50,53,48,56,7, + 117,110,105,50,53,48,57,7,117,110,105,50,53,48,65,7,117,110,105,50,53,48,66,8,83,70,48,49,48,48,48,48,7,117,110,105,50,53,48,68, + 7,117,110,105,50,53,48,69,7,117,110,105,50,53,48,70,8,83,70,48,51,48,48,48,48,7,117,110,105,50,53,49,49,7,117,110,105,50,53,49, + 50,7,117,110,105,50,53,49,51,8,83,70,48,50,48,48,48,48,7,117,110,105,50,53,49,53,7,117,110,105,50,53,49,54,7,117,110,105,50,53, + 49,55,8,83,70,48,52,48,48,48,48,7,117,110,105,50,53,49,57,7,117,110,105,50,53,49,65,7,117,110,105,50,53,49,66,8,83,70,48,56, + 48,48,48,48,7,117,110,105,50,53,49,68,7,117,110,105,50,53,49,69,7,117,110,105,50,53,49,70,7,117,110,105,50,53,50,48,7,117,110,105, + 50,53,50,49,7,117,110,105,50,53,50,50,7,117,110,105,50,53,50,51,8,83,70,48,57,48,48,48,48,7,117,110,105,50,53,50,53,7,117,110, + 105,50,53,50,54,7,117,110,105,50,53,50,55,7,117,110,105,50,53,50,56,7,117,110,105,50,53,50,57,7,117,110,105,50,53,50,65,7,117,110, + 105,50,53,50,66,8,83,70,48,54,48,48,48,48,7,117,110,105,50,53,50,68,7,117,110,105,50,53,50,69,7,117,110,105,50,53,50,70,7,117, + 110,105,50,53,51,48,7,117,110,105,50,53,51,49,7,117,110,105,50,53,51,50,7,117,110,105,50,53,51,51,8,83,70,48,55,48,48,48,48,7, + 117,110,105,50,53,51,53,7,117,110,105,50,53,51,54,7,117,110,105,50,53,51,55,7,117,110,105,50,53,51,56,7,117,110,105,50,53,51,57,7, + 117,110,105,50,53,51,65,7,117,110,105,50,53,51,66,8,83,70,48,53,48,48,48,48,7,117,110,105,50,53,51,68,7,117,110,105,50,53,51,69, + 7,117,110,105,50,53,51,70,7,117,110,105,50,53,52,48,7,117,110,105,50,53,52,49,7,117,110,105,50,53,52,50,7,117,110,105,50,53,52,51, + 7,117,110,105,50,53,52,52,7,117,110,105,50,53,52,53,7,117,110,105,50,53,52,54,7,117,110,105,50,53,52,55,7,117,110,105,50,53,52,56, + 7,117,110,105,50,53,52,57,7,117,110,105,50,53,52,65,7,117,110,105,50,53,52,66,7,117,110,105,50,53,52,67,7,117,110,105,50,53,52,68, + 7,117,110,105,50,53,52,69,7,117,110,105,50,53,52,70,8,83,70,52,51,48,48,48,48,8,83,70,50,52,48,48,48,48,8,83,70,53,49,48, + 48,48,48,8,83,70,53,50,48,48,48,48,8,83,70,51,57,48,48,48,48,8,83,70,50,50,48,48,48,48,8,83,70,50,49,48,48,48,48,8, + 83,70,50,53,48,48,48,48,8,83,70,53,48,48,48,48,48,8,83,70,52,57,48,48,48,48,8,83,70,51,56,48,48,48,48,8,83,70,50,56, + 48,48,48,48,8,83,70,50,55,48,48,48,48,8,83,70,50,54,48,48,48,48,8,83,70,51,54,48,48,48,48,8,83,70,51,55,48,48,48,48, + 8,83,70,52,50,48,48,48,48,8,83,70,49,57,48,48,48,48,8,83,70,50,48,48,48,48,48,8,83,70,50,51,48,48,48,48,8,83,70,52, + 55,48,48,48,48,8,83,70,52,56,48,48,48,48,8,83,70,52,49,48,48,48,48,8,83,70,52,53,48,48,48,48,8,83,70,52,54,48,48,48, + 48,8,83,70,52,48,48,48,48,48,8,83,70,53,52,48,48,48,48,8,83,70,53,51,48,48,48,48,8,83,70,52,52,48,48,48,48,7,117,110, + 105,50,53,54,68,7,117,110,105,50,53,54,69,7,117,110,105,50,53,54,70,7,117,110,105,50,53,55,48,7,117,110,105,50,53,55,49,7,117,110, + 105,50,53,55,50,7,117,110,105,50,53,55,51,7,117,110,105,50,53,55,52,7,117,110,105,50,53,55,53,7,117,110,105,50,53,55,54,7,117,110, + 105,50,53,55,55,7,117,110,105,50,53,55,56,7,117,110,105,50,53,55,57,7,117,110,105,50,53,55,65,7,117,110,105,50,53,55,66,7,117,110, + 105,50,53,55,67,7,117,110,105,50,53,55,68,7,117,110,105,50,53,55,69,7,117,110,105,50,53,55,70,7,117,112,98,108,111,99,107,7,117,110, + 105,50,53,56,49,7,117,110,105,50,53,56,50,7,117,110,105,50,53,56,51,7,100,110,98,108,111,99,107,7,117,110,105,50,53,56,53,7,117,110, + 105,50,53,56,54,7,117,110,105,50,53,56,55,5,98,108,111,99,107,7,117,110,105,50,53,56,57,7,117,110,105,50,53,56,65,7,117,110,105,50, + 53,56,66,7,108,102,98,108,111,99,107,7,117,110,105,50,53,56,68,7,117,110,105,50,53,56,69,7,117,110,105,50,53,56,70,7,114,116,98,108, + 111,99,107,7,108,116,115,104,97,100,101,5,115,104,97,100,101,7,100,107,115,104,97,100,101,7,117,110,105,50,53,57,52,7,117,110,105,50,53,57, + 53,7,117,110,105,50,53,57,54,7,117,110,105,50,53,57,55,7,117,110,105,50,53,57,56,7,117,110,105,50,53,57,57,7,117,110,105,50,53,57, + 65,7,117,110,105,50,53,57,66,7,117,110,105,50,53,57,67,7,117,110,105,50,53,57,68,7,117,110,105,50,53,57,69,7,117,110,105,50,53,57, + 70,9,102,105,108,108,101,100,98,111,120,6,72,50,50,48,55,51,7,117,110,105,50,53,65,50,7,117,110,105,50,53,65,51,7,117,110,105,50,53, + 65,52,7,117,110,105,50,53,65,53,7,117,110,105,50,53,65,54,7,117,110,105,50,53,65,55,7,117,110,105,50,53,65,56,7,117,110,105,50,53, + 65,57,6,72,49,56,53,52,51,6,72,49,56,53,53,49,10,102,105,108,108,101,100,114,101,99,116,7,117,110,105,50,53,65,68,7,117,110,105,50, + 53,65,69,7,117,110,105,50,53,65,70,7,117,110,105,50,53,66,48,7,117,110,105,50,53,66,49,7,116,114,105,97,103,117,112,7,117,110,105,50, + 53,66,51,7,117,110,105,50,53,66,52,7,117,110,105,50,53,66,53,7,117,110,105,50,53,66,54,7,117,110,105,50,53,66,55,7,117,110,105,50, + 53,66,56,7,117,110,105,50,53,66,57,7,116,114,105,97,103,114,116,7,117,110,105,50,53,66,66,7,116,114,105,97,103,100,110,7,117,110,105,50, + 53,66,68,7,117,110,105,50,53,66,69,7,117,110,105,50,53,66,70,7,117,110,105,50,53,67,48,7,117,110,105,50,53,67,49,7,117,110,105,50, + 53,67,50,7,117,110,105,50,53,67,51,7,116,114,105,97,103,108,102,7,117,110,105,50,53,67,53,7,117,110,105,50,53,67,54,7,117,110,105,50, + 53,67,55,7,117,110,105,50,53,67,56,7,117,110,105,50,53,67,57,6,99,105,114,99,108,101,7,117,110,105,50,53,67,67,7,117,110,105,50,53, + 67,68,7,117,110,105,50,53,67,69,6,72,49,56,53,51,51,7,117,110,105,50,53,68,48,7,117,110,105,50,53,68,49,7,117,110,105,50,53,68, + 50,7,117,110,105,50,53,68,51,7,117,110,105,50,53,68,52,7,117,110,105,50,53,68,53,7,117,110,105,50,53,68,54,7,117,110,105,50,53,68, + 55,9,105,110,118,98,117,108,108,101,116,9,105,110,118,99,105,114,99,108,101,7,117,110,105,50,53,68,65,7,117,110,105,50,53,68,66,7,117,110, + 105,50,53,68,67,7,117,110,105,50,53,68,68,7,117,110,105,50,53,68,69,7,117,110,105,50,53,68,70,7,117,110,105,50,53,69,48,7,117,110, + 105,50,53,69,49,7,117,110,105,50,53,69,50,7,117,110,105,50,53,69,51,7,117,110,105,50,53,69,52,7,117,110,105,50,53,69,53,10,111,112, + 101,110,98,117,108,108,101,116,7,117,110,105,50,53,69,55,7,117,110,105,50,53,69,56,7,117,110,105,50,53,69,57,7,117,110,105,50,53,69,65, + 7,117,110,105,50,53,69,66,7,117,110,105,50,53,69,67,7,117,110,105,50,53,69,68,7,117,110,105,50,53,69,69,7,117,110,105,50,53,69,70, + 7,117,110,105,50,53,70,48,7,117,110,105,50,53,70,49,7,117,110,105,50,53,70,50,7,117,110,105,50,53,70,51,7,117,110,105,50,53,70,52, + 7,117,110,105,50,53,70,53,7,117,110,105,50,53,70,54,7,117,110,105,50,53,70,55,7,117,110,105,50,53,70,56,7,117,110,105,50,53,70,57, + 7,117,110,105,50,53,70,65,7,117,110,105,50,53,70,66,7,117,110,105,50,53,70,67,7,117,110,105,50,53,70,68,7,117,110,105,50,53,70,69, + 7,117,110,105,50,53,70,70,7,117,110,105,50,54,48,48,7,117,110,105,50,54,48,49,7,117,110,105,50,54,48,50,7,117,110,105,50,54,48,51, + 7,117,110,105,50,54,48,52,7,117,110,105,50,54,48,53,7,117,110,105,50,54,48,54,7,117,110,105,50,54,48,55,7,117,110,105,50,54,48,56, + 7,117,110,105,50,54,48,57,7,117,110,105,50,54,48,65,7,117,110,105,50,54,48,66,7,117,110,105,50,54,48,67,7,117,110,105,50,54,48,68, + 7,117,110,105,50,54,48,69,7,117,110,105,50,54,48,70,7,117,110,105,50,54,49,48,7,117,110,105,50,54,49,49,7,117,110,105,50,54,49,50, + 7,117,110,105,50,54,49,51,7,117,110,105,50,54,49,52,7,117,110,105,50,54,49,53,7,117,110,105,50,54,49,54,7,117,110,105,50,54,49,55, + 7,117,110,105,50,54,49,56,7,117,110,105,50,54,49,57,7,117,110,105,50,54,49,65,7,117,110,105,50,54,49,66,7,117,110,105,50,54,49,67, + 7,117,110,105,50,54,49,68,7,117,110,105,50,54,49,69,7,117,110,105,50,54,49,70,7,117,110,105,50,54,50,48,7,117,110,105,50,54,50,49, + 7,117,110,105,50,54,50,50,7,117,110,105,50,54,50,51,7,117,110,105,50,54,50,52,7,117,110,105,50,54,50,53,7,117,110,105,50,54,50,54, + 7,117,110,105,50,54,50,55,7,117,110,105,50,54,50,56,7,117,110,105,50,54,50,57,7,117,110,105,50,54,50,65,7,117,110,105,50,54,50,66, + 7,117,110,105,50,54,50,67,7,117,110,105,50,54,50,68,7,117,110,105,50,54,50,69,7,117,110,105,50,54,50,70,7,117,110,105,50,54,51,48, + 7,117,110,105,50,54,51,49,7,117,110,105,50,54,51,50,7,117,110,105,50,54,51,51,7,117,110,105,50,54,51,52,7,117,110,105,50,54,51,53, + 7,117,110,105,50,54,51,54,7,117,110,105,50,54,51,55,7,117,110,105,50,54,51,56,7,117,110,105,50,54,51,57,9,115,109,105,108,101,102,97, + 99,101,12,105,110,118,115,109,105,108,101,102,97,99,101,3,115,117,110,7,117,110,105,50,54,51,68,7,117,110,105,50,54,51,69,7,117,110,105,50, + 54,51,70,6,102,101,109,97,108,101,7,117,110,105,50,54,52,49,4,109,97,108,101,7,117,110,105,50,54,52,51,7,117,110,105,50,54,52,52,7, + 117,110,105,50,54,52,53,7,117,110,105,50,54,52,54,7,117,110,105,50,54,52,55,7,117,110,105,50,54,52,56,7,117,110,105,50,54,52,57,7, + 117,110,105,50,54,52,65,7,117,110,105,50,54,52,66,7,117,110,105,50,54,52,67,7,117,110,105,50,54,52,68,7,117,110,105,50,54,52,69,7, + 117,110,105,50,54,52,70,7,117,110,105,50,54,53,48,7,117,110,105,50,54,53,49,7,117,110,105,50,54,53,50,7,117,110,105,50,54,53,51,7, + 117,110,105,50,54,53,52,7,117,110,105,50,54,53,53,7,117,110,105,50,54,53,54,7,117,110,105,50,54,53,55,7,117,110,105,50,54,53,56,7, + 117,110,105,50,54,53,57,7,117,110,105,50,54,53,65,7,117,110,105,50,54,53,66,7,117,110,105,50,54,53,67,7,117,110,105,50,54,53,68,7, + 117,110,105,50,54,53,69,7,117,110,105,50,54,53,70,5,115,112,97,100,101,7,117,110,105,50,54,54,49,7,117,110,105,50,54,54,50,4,99,108, + 117,98,7,117,110,105,50,54,54,52,5,104,101,97,114,116,7,100,105,97,109,111,110,100,7,117,110,105,50,54,54,55,7,117,110,105,50,54,54,56, + 7,117,110,105,50,54,54,57,11,109,117,115,105,99,97,108,110,111,116,101,14,109,117,115,105,99,97,108,110,111,116,101,100,98,108,7,117,110,105,50, + 54,54,67,7,117,110,105,50,54,54,68,7,117,110,105,50,54,54,69,7,117,110,105,50,54,54,70,7,117,110,105,50,54,55,48,7,117,110,105,50, + 54,55,49,7,117,110,105,50,54,55,50,7,117,110,105,50,54,55,51,7,117,110,105,50,54,55,52,7,117,110,105,50,54,55,53,7,117,110,105,50, + 54,55,54,7,117,110,105,50,54,55,55,7,117,110,105,50,54,55,56,7,117,110,105,50,54,55,57,7,117,110,105,50,54,55,65,7,117,110,105,50, + 54,55,66,7,117,110,105,50,54,55,67,7,117,110,105,50,54,55,68,7,117,110,105,50,54,55,69,7,117,110,105,50,54,55,70,7,117,110,105,50, + 54,56,48,7,117,110,105,50,54,56,49,7,117,110,105,50,54,56,50,7,117,110,105,50,54,56,51,7,117,110,105,50,54,56,52,7,117,110,105,50, + 54,56,53,7,117,110,105,50,54,56,54,7,117,110,105,50,54,56,55,7,117,110,105,50,54,56,56,7,117,110,105,50,54,56,57,7,117,110,105,50, + 54,56,65,7,117,110,105,50,54,56,66,7,117,110,105,50,54,56,67,7,117,110,105,50,54,56,68,7,117,110,105,50,54,56,69,7,117,110,105,50, + 54,56,70,7,117,110,105,50,54,57,48,7,117,110,105,50,54,57,49,7,117,110,105,50,54,57,50,7,117,110,105,50,54,57,51,7,117,110,105,50, + 54,57,52,7,117,110,105,50,54,57,53,7,117,110,105,50,54,57,54,7,117,110,105,50,54,57,55,7,117,110,105,50,54,57,56,7,117,110,105,50, + 54,57,57,7,117,110,105,50,54,57,65,7,117,110,105,50,54,57,66,7,117,110,105,50,54,57,67,7,117,110,105,50,54,65,48,7,117,110,105,50, + 54,65,49,7,117,110,105,50,54,65,50,7,117,110,105,50,54,65,51,7,117,110,105,50,54,65,52,7,117,110,105,50,54,65,53,7,117,110,105,50, + 54,65,54,7,117,110,105,50,54,65,55,7,117,110,105,50,54,65,56,7,117,110,105,50,54,65,57,7,117,110,105,50,54,65,65,7,117,110,105,50, + 54,65,66,7,117,110,105,50,54,65,67,7,117,110,105,50,54,65,68,7,117,110,105,50,54,65,69,7,117,110,105,50,54,65,70,7,117,110,105,50, + 54,66,48,7,117,110,105,50,54,66,49,7,117,110,105,50,54,66,50,7,117,110,105,50,54,66,51,7,117,110,105,50,54,66,52,7,117,110,105,50, + 54,66,53,7,117,110,105,50,54,66,54,7,117,110,105,50,54,66,55,7,117,110,105,50,54,66,56,7,117,110,105,50,54,67,48,7,117,110,105,50, + 54,67,49,7,117,110,105,50,54,67,50,7,117,110,105,50,54,67,51,7,117,110,105,50,54,69,50,7,117,110,105,50,55,48,49,7,117,110,105,50, + 55,48,50,7,117,110,105,50,55,48,51,7,117,110,105,50,55,48,52,7,117,110,105,50,55,48,54,7,117,110,105,50,55,48,55,7,117,110,105,50, + 55,48,56,7,117,110,105,50,55,48,57,7,117,110,105,50,55,48,67,7,117,110,105,50,55,48,68,7,117,110,105,50,55,48,69,7,117,110,105,50, + 55,48,70,7,117,110,105,50,55,49,48,7,117,110,105,50,55,49,49,7,117,110,105,50,55,49,50,7,117,110,105,50,55,49,51,7,117,110,105,50, + 55,49,52,7,117,110,105,50,55,49,53,7,117,110,105,50,55,49,54,7,117,110,105,50,55,49,55,7,117,110,105,50,55,49,56,7,117,110,105,50, + 55,49,57,7,117,110,105,50,55,49,65,7,117,110,105,50,55,49,66,7,117,110,105,50,55,49,67,7,117,110,105,50,55,49,68,7,117,110,105,50, + 55,49,69,7,117,110,105,50,55,49,70,7,117,110,105,50,55,50,48,7,117,110,105,50,55,50,49,7,117,110,105,50,55,50,50,7,117,110,105,50, + 55,50,51,7,117,110,105,50,55,50,52,7,117,110,105,50,55,50,53,7,117,110,105,50,55,50,54,7,117,110,105,50,55,50,55,7,117,110,105,50, + 55,50,57,7,117,110,105,50,55,50,65,7,117,110,105,50,55,50,66,7,117,110,105,50,55,50,67,7,117,110,105,50,55,50,68,7,117,110,105,50, + 55,50,69,7,117,110,105,50,55,50,70,7,117,110,105,50,55,51,48,7,117,110,105,50,55,51,49,7,117,110,105,50,55,51,50,7,117,110,105,50, + 55,51,51,7,117,110,105,50,55,51,52,7,117,110,105,50,55,51,53,7,117,110,105,50,55,51,54,7,117,110,105,50,55,51,55,7,117,110,105,50, + 55,51,56,7,117,110,105,50,55,51,57,7,117,110,105,50,55,51,65,7,117,110,105,50,55,51,66,7,117,110,105,50,55,51,67,7,117,110,105,50, + 55,51,68,7,117,110,105,50,55,51,69,7,117,110,105,50,55,51,70,7,117,110,105,50,55,52,48,7,117,110,105,50,55,52,49,7,117,110,105,50, + 55,52,50,7,117,110,105,50,55,52,51,7,117,110,105,50,55,52,52,7,117,110,105,50,55,52,53,7,117,110,105,50,55,52,54,7,117,110,105,50, + 55,52,55,7,117,110,105,50,55,52,56,7,117,110,105,50,55,52,57,7,117,110,105,50,55,52,65,7,117,110,105,50,55,52,66,7,117,110,105,50, + 55,52,68,7,117,110,105,50,55,52,70,7,117,110,105,50,55,53,48,7,117,110,105,50,55,53,49,7,117,110,105,50,55,53,50,7,117,110,105,50, + 55,53,54,7,117,110,105,50,55,53,56,7,117,110,105,50,55,53,57,7,117,110,105,50,55,53,65,7,117,110,105,50,55,53,66,7,117,110,105,50, + 55,53,67,7,117,110,105,50,55,53,68,7,117,110,105,50,55,53,69,7,117,110,105,50,55,54,49,7,117,110,105,50,55,54,50,7,117,110,105,50, + 55,54,51,7,117,110,105,50,55,54,52,7,117,110,105,50,55,54,53,7,117,110,105,50,55,54,54,7,117,110,105,50,55,54,55,7,117,110,105,50, + 55,54,56,7,117,110,105,50,55,54,57,7,117,110,105,50,55,54,65,7,117,110,105,50,55,54,66,7,117,110,105,50,55,54,67,7,117,110,105,50, + 55,54,68,7,117,110,105,50,55,54,69,7,117,110,105,50,55,54,70,7,117,110,105,50,55,55,48,7,117,110,105,50,55,55,49,7,117,110,105,50, + 55,55,50,7,117,110,105,50,55,55,51,7,117,110,105,50,55,55,52,7,117,110,105,50,55,55,53,7,117,110,105,50,55,55,54,7,117,110,105,50, + 55,55,55,7,117,110,105,50,55,55,56,7,117,110,105,50,55,55,57,7,117,110,105,50,55,55,65,7,117,110,105,50,55,55,66,7,117,110,105,50, + 55,55,67,7,117,110,105,50,55,55,68,7,117,110,105,50,55,55,69,7,117,110,105,50,55,55,70,7,117,110,105,50,55,56,48,7,117,110,105,50, + 55,56,49,7,117,110,105,50,55,56,50,7,117,110,105,50,55,56,51,7,117,110,105,50,55,56,52,7,117,110,105,50,55,56,53,7,117,110,105,50, + 55,56,54,7,117,110,105,50,55,56,55,7,117,110,105,50,55,56,56,7,117,110,105,50,55,56,57,7,117,110,105,50,55,56,65,7,117,110,105,50, + 55,56,66,7,117,110,105,50,55,56,67,7,117,110,105,50,55,56,68,7,117,110,105,50,55,56,69,7,117,110,105,50,55,56,70,7,117,110,105,50, + 55,57,48,7,117,110,105,50,55,57,49,7,117,110,105,50,55,57,50,7,117,110,105,50,55,57,51,7,117,110,105,50,55,57,52,7,117,110,105,50, + 55,57,56,7,117,110,105,50,55,57,57,7,117,110,105,50,55,57,65,7,117,110,105,50,55,57,66,7,117,110,105,50,55,57,67,7,117,110,105,50, + 55,57,68,7,117,110,105,50,55,57,69,7,117,110,105,50,55,57,70,7,117,110,105,50,55,65,48,7,117,110,105,50,55,65,49,7,117,110,105,50, + 55,65,50,7,117,110,105,50,55,65,51,7,117,110,105,50,55,65,52,7,117,110,105,50,55,65,53,7,117,110,105,50,55,65,54,7,117,110,105,50, + 55,65,55,7,117,110,105,50,55,65,56,7,117,110,105,50,55,65,57,7,117,110,105,50,55,65,65,7,117,110,105,50,55,65,66,7,117,110,105,50, + 55,65,67,7,117,110,105,50,55,65,68,7,117,110,105,50,55,65,69,7,117,110,105,50,55,65,70,7,117,110,105,50,55,66,49,7,117,110,105,50, + 55,66,50,7,117,110,105,50,55,66,51,7,117,110,105,50,55,66,52,7,117,110,105,50,55,66,53,7,117,110,105,50,55,66,54,7,117,110,105,50, + 55,66,55,7,117,110,105,50,55,66,56,7,117,110,105,50,55,66,57,7,117,110,105,50,55,66,65,7,117,110,105,50,55,66,66,7,117,110,105,50, + 55,66,67,7,117,110,105,50,55,66,68,7,117,110,105,50,55,66,69,7,117,110,105,50,55,67,53,7,117,110,105,50,55,67,54,7,117,110,105,50, + 55,69,48,7,117,110,105,50,55,69,54,7,117,110,105,50,55,69,55,7,117,110,105,50,55,69,56,7,117,110,105,50,55,69,57,7,117,110,105,50, + 55,69,65,7,117,110,105,50,55,69,66,7,117,110,105,50,55,70,48,7,117,110,105,50,55,70,49,7,117,110,105,50,55,70,50,7,117,110,105,50, + 55,70,51,7,117,110,105,50,55,70,52,7,117,110,105,50,55,70,53,7,117,110,105,50,55,70,54,7,117,110,105,50,55,70,55,7,117,110,105,50, + 55,70,56,7,117,110,105,50,55,70,57,7,117,110,105,50,55,70,65,7,117,110,105,50,55,70,66,7,117,110,105,50,55,70,67,7,117,110,105,50, + 55,70,68,7,117,110,105,50,55,70,69,7,117,110,105,50,55,70,70,7,117,110,105,50,56,48,48,7,117,110,105,50,56,48,49,7,117,110,105,50, + 56,48,50,7,117,110,105,50,56,48,51,7,117,110,105,50,56,48,52,7,117,110,105,50,56,48,53,7,117,110,105,50,56,48,54,7,117,110,105,50, + 56,48,55,7,117,110,105,50,56,48,56,7,117,110,105,50,56,48,57,7,117,110,105,50,56,48,65,7,117,110,105,50,56,48,66,7,117,110,105,50, + 56,48,67,7,117,110,105,50,56,48,68,7,117,110,105,50,56,48,69,7,117,110,105,50,56,48,70,7,117,110,105,50,56,49,48,7,117,110,105,50, + 56,49,49,7,117,110,105,50,56,49,50,7,117,110,105,50,56,49,51,7,117,110,105,50,56,49,52,7,117,110,105,50,56,49,53,7,117,110,105,50, + 56,49,54,7,117,110,105,50,56,49,55,7,117,110,105,50,56,49,56,7,117,110,105,50,56,49,57,7,117,110,105,50,56,49,65,7,117,110,105,50, + 56,49,66,7,117,110,105,50,56,49,67,7,117,110,105,50,56,49,68,7,117,110,105,50,56,49,69,7,117,110,105,50,56,49,70,7,117,110,105,50, + 56,50,48,7,117,110,105,50,56,50,49,7,117,110,105,50,56,50,50,7,117,110,105,50,56,50,51,7,117,110,105,50,56,50,52,7,117,110,105,50, + 56,50,53,7,117,110,105,50,56,50,54,7,117,110,105,50,56,50,55,7,117,110,105,50,56,50,56,7,117,110,105,50,56,50,57,7,117,110,105,50, + 56,50,65,7,117,110,105,50,56,50,66,7,117,110,105,50,56,50,67,7,117,110,105,50,56,50,68,7,117,110,105,50,56,50,69,7,117,110,105,50, + 56,50,70,7,117,110,105,50,56,51,48,7,117,110,105,50,56,51,49,7,117,110,105,50,56,51,50,7,117,110,105,50,56,51,51,7,117,110,105,50, + 56,51,52,7,117,110,105,50,56,51,53,7,117,110,105,50,56,51,54,7,117,110,105,50,56,51,55,7,117,110,105,50,56,51,56,7,117,110,105,50, + 56,51,57,7,117,110,105,50,56,51,65,7,117,110,105,50,56,51,66,7,117,110,105,50,56,51,67,7,117,110,105,50,56,51,68,7,117,110,105,50, + 56,51,69,7,117,110,105,50,56,51,70,7,117,110,105,50,56,52,48,7,117,110,105,50,56,52,49,7,117,110,105,50,56,52,50,7,117,110,105,50, + 56,52,51,7,117,110,105,50,56,52,52,7,117,110,105,50,56,52,53,7,117,110,105,50,56,52,54,7,117,110,105,50,56,52,55,7,117,110,105,50, + 56,52,56,7,117,110,105,50,56,52,57,7,117,110,105,50,56,52,65,7,117,110,105,50,56,52,66,7,117,110,105,50,56,52,67,7,117,110,105,50, + 56,52,68,7,117,110,105,50,56,52,69,7,117,110,105,50,56,52,70,7,117,110,105,50,56,53,48,7,117,110,105,50,56,53,49,7,117,110,105,50, + 56,53,50,7,117,110,105,50,56,53,51,7,117,110,105,50,56,53,52,7,117,110,105,50,56,53,53,7,117,110,105,50,56,53,54,7,117,110,105,50, + 56,53,55,7,117,110,105,50,56,53,56,7,117,110,105,50,56,53,57,7,117,110,105,50,56,53,65,7,117,110,105,50,56,53,66,7,117,110,105,50, + 56,53,67,7,117,110,105,50,56,53,68,7,117,110,105,50,56,53,69,7,117,110,105,50,56,53,70,7,117,110,105,50,56,54,48,7,117,110,105,50, + 56,54,49,7,117,110,105,50,56,54,50,7,117,110,105,50,56,54,51,7,117,110,105,50,56,54,52,7,117,110,105,50,56,54,53,7,117,110,105,50, + 56,54,54,7,117,110,105,50,56,54,55,7,117,110,105,50,56,54,56,7,117,110,105,50,56,54,57,7,117,110,105,50,56,54,65,7,117,110,105,50, + 56,54,66,7,117,110,105,50,56,54,67,7,117,110,105,50,56,54,68,7,117,110,105,50,56,54,69,7,117,110,105,50,56,54,70,7,117,110,105,50, + 56,55,48,7,117,110,105,50,56,55,49,7,117,110,105,50,56,55,50,7,117,110,105,50,56,55,51,7,117,110,105,50,56,55,52,7,117,110,105,50, + 56,55,53,7,117,110,105,50,56,55,54,7,117,110,105,50,56,55,55,7,117,110,105,50,56,55,56,7,117,110,105,50,56,55,57,7,117,110,105,50, + 56,55,65,7,117,110,105,50,56,55,66,7,117,110,105,50,56,55,67,7,117,110,105,50,56,55,68,7,117,110,105,50,56,55,69,7,117,110,105,50, + 56,55,70,7,117,110,105,50,56,56,48,7,117,110,105,50,56,56,49,7,117,110,105,50,56,56,50,7,117,110,105,50,56,56,51,7,117,110,105,50, + 56,56,52,7,117,110,105,50,56,56,53,7,117,110,105,50,56,56,54,7,117,110,105,50,56,56,55,7,117,110,105,50,56,56,56,7,117,110,105,50, + 56,56,57,7,117,110,105,50,56,56,65,7,117,110,105,50,56,56,66,7,117,110,105,50,56,56,67,7,117,110,105,50,56,56,68,7,117,110,105,50, + 56,56,69,7,117,110,105,50,56,56,70,7,117,110,105,50,56,57,48,7,117,110,105,50,56,57,49,7,117,110,105,50,56,57,50,7,117,110,105,50, + 56,57,51,7,117,110,105,50,56,57,52,7,117,110,105,50,56,57,53,7,117,110,105,50,56,57,54,7,117,110,105,50,56,57,55,7,117,110,105,50, + 56,57,56,7,117,110,105,50,56,57,57,7,117,110,105,50,56,57,65,7,117,110,105,50,56,57,66,7,117,110,105,50,56,57,67,7,117,110,105,50, + 56,57,68,7,117,110,105,50,56,57,69,7,117,110,105,50,56,57,70,7,117,110,105,50,56,65,48,7,117,110,105,50,56,65,49,7,117,110,105,50, + 56,65,50,7,117,110,105,50,56,65,51,7,117,110,105,50,56,65,52,7,117,110,105,50,56,65,53,7,117,110,105,50,56,65,54,7,117,110,105,50, + 56,65,55,7,117,110,105,50,56,65,56,7,117,110,105,50,56,65,57,7,117,110,105,50,56,65,65,7,117,110,105,50,56,65,66,7,117,110,105,50, + 56,65,67,7,117,110,105,50,56,65,68,7,117,110,105,50,56,65,69,7,117,110,105,50,56,65,70,7,117,110,105,50,56,66,48,7,117,110,105,50, + 56,66,49,7,117,110,105,50,56,66,50,7,117,110,105,50,56,66,51,7,117,110,105,50,56,66,52,7,117,110,105,50,56,66,53,7,117,110,105,50, + 56,66,54,7,117,110,105,50,56,66,55,7,117,110,105,50,56,66,56,7,117,110,105,50,56,66,57,7,117,110,105,50,56,66,65,7,117,110,105,50, + 56,66,66,7,117,110,105,50,56,66,67,7,117,110,105,50,56,66,68,7,117,110,105,50,56,66,69,7,117,110,105,50,56,66,70,7,117,110,105,50, + 56,67,48,7,117,110,105,50,56,67,49,7,117,110,105,50,56,67,50,7,117,110,105,50,56,67,51,7,117,110,105,50,56,67,52,7,117,110,105,50, + 56,67,53,7,117,110,105,50,56,67,54,7,117,110,105,50,56,67,55,7,117,110,105,50,56,67,56,7,117,110,105,50,56,67,57,7,117,110,105,50, + 56,67,65,7,117,110,105,50,56,67,66,7,117,110,105,50,56,67,67,7,117,110,105,50,56,67,68,7,117,110,105,50,56,67,69,7,117,110,105,50, + 56,67,70,7,117,110,105,50,56,68,48,7,117,110,105,50,56,68,49,7,117,110,105,50,56,68,50,7,117,110,105,50,56,68,51,7,117,110,105,50, + 56,68,52,7,117,110,105,50,56,68,53,7,117,110,105,50,56,68,54,7,117,110,105,50,56,68,55,7,117,110,105,50,56,68,56,7,117,110,105,50, + 56,68,57,7,117,110,105,50,56,68,65,7,117,110,105,50,56,68,66,7,117,110,105,50,56,68,67,7,117,110,105,50,56,68,68,7,117,110,105,50, + 56,68,69,7,117,110,105,50,56,68,70,7,117,110,105,50,56,69,48,7,117,110,105,50,56,69,49,7,117,110,105,50,56,69,50,7,117,110,105,50, + 56,69,51,7,117,110,105,50,56,69,52,7,117,110,105,50,56,69,53,7,117,110,105,50,56,69,54,7,117,110,105,50,56,69,55,7,117,110,105,50, + 56,69,56,7,117,110,105,50,56,69,57,7,117,110,105,50,56,69,65,7,117,110,105,50,56,69,66,7,117,110,105,50,56,69,67,7,117,110,105,50, + 56,69,68,7,117,110,105,50,56,69,69,7,117,110,105,50,56,69,70,7,117,110,105,50,56,70,48,7,117,110,105,50,56,70,49,7,117,110,105,50, + 56,70,50,7,117,110,105,50,56,70,51,7,117,110,105,50,56,70,52,7,117,110,105,50,56,70,53,7,117,110,105,50,56,70,54,7,117,110,105,50, + 56,70,55,7,117,110,105,50,56,70,56,7,117,110,105,50,56,70,57,7,117,110,105,50,56,70,65,7,117,110,105,50,56,70,66,7,117,110,105,50, + 56,70,67,7,117,110,105,50,56,70,68,7,117,110,105,50,56,70,69,7,117,110,105,50,56,70,70,7,117,110,105,50,57,48,54,7,117,110,105,50, + 57,48,55,7,117,110,105,50,57,48,65,7,117,110,105,50,57,48,66,7,117,110,105,50,57,52,48,7,117,110,105,50,57,52,49,7,117,110,105,50, + 57,56,51,7,117,110,105,50,57,56,52,7,117,110,105,50,57,67,69,7,117,110,105,50,57,67,70,7,117,110,105,50,57,68,48,7,117,110,105,50, + 57,68,49,7,117,110,105,50,57,68,50,7,117,110,105,50,57,68,51,7,117,110,105,50,57,68,52,7,117,110,105,50,57,68,53,7,117,110,105,50, + 57,69,66,7,117,110,105,50,57,70,65,7,117,110,105,50,57,70,66,7,117,110,105,50,65,48,48,7,117,110,105,50,65,48,49,7,117,110,105,50, + 65,48,50,7,117,110,105,50,65,48,67,7,117,110,105,50,65,48,68,7,117,110,105,50,65,48,69,7,117,110,105,50,65,48,70,7,117,110,105,50, + 65,49,48,7,117,110,105,50,65,49,49,7,117,110,105,50,65,49,50,7,117,110,105,50,65,49,51,7,117,110,105,50,65,49,52,7,117,110,105,50, + 65,49,53,7,117,110,105,50,65,49,54,7,117,110,105,50,65,49,55,7,117,110,105,50,65,49,56,7,117,110,105,50,65,49,57,7,117,110,105,50, + 65,49,65,7,117,110,105,50,65,49,66,7,117,110,105,50,65,49,67,7,117,110,105,50,65,50,70,7,117,110,105,50,65,54,65,7,117,110,105,50, + 65,54,66,7,117,110,105,50,65,55,68,7,117,110,105,50,65,55,69,7,117,110,105,50,65,55,70,7,117,110,105,50,65,56,48,7,117,110,105,50, + 65,56,49,7,117,110,105,50,65,56,50,7,117,110,105,50,65,56,51,7,117,110,105,50,65,56,52,7,117,110,105,50,65,56,53,7,117,110,105,50, + 65,56,54,7,117,110,105,50,65,56,55,7,117,110,105,50,65,56,56,7,117,110,105,50,65,56,57,7,117,110,105,50,65,56,65,7,117,110,105,50, + 65,56,66,7,117,110,105,50,65,56,67,7,117,110,105,50,65,56,68,7,117,110,105,50,65,56,69,7,117,110,105,50,65,56,70,7,117,110,105,50, + 65,57,48,7,117,110,105,50,65,57,49,7,117,110,105,50,65,57,50,7,117,110,105,50,65,57,51,7,117,110,105,50,65,57,52,7,117,110,105,50, + 65,57,53,7,117,110,105,50,65,57,54,7,117,110,105,50,65,57,55,7,117,110,105,50,65,57,56,7,117,110,105,50,65,57,57,7,117,110,105,50, + 65,57,65,7,117,110,105,50,65,57,66,7,117,110,105,50,65,57,67,7,117,110,105,50,65,57,68,7,117,110,105,50,65,57,69,7,117,110,105,50, + 65,57,70,7,117,110,105,50,65,65,48,7,117,110,105,50,65,65,69,7,117,110,105,50,65,65,70,7,117,110,105,50,65,66,48,7,117,110,105,50, + 65,66,49,7,117,110,105,50,65,66,50,7,117,110,105,50,65,66,51,7,117,110,105,50,65,66,52,7,117,110,105,50,65,66,53,7,117,110,105,50, + 65,66,54,7,117,110,105,50,65,66,55,7,117,110,105,50,65,66,56,7,117,110,105,50,65,66,57,7,117,110,105,50,65,66,65,7,117,110,105,50, + 65,70,57,7,117,110,105,50,65,70,65,7,117,110,105,50,66,48,48,7,117,110,105,50,66,48,49,7,117,110,105,50,66,48,50,7,117,110,105,50, + 66,48,51,7,117,110,105,50,66,48,52,7,117,110,105,50,66,48,53,7,117,110,105,50,66,48,54,7,117,110,105,50,66,48,55,7,117,110,105,50, + 66,48,56,7,117,110,105,50,66,48,57,7,117,110,105,50,66,48,65,7,117,110,105,50,66,48,66,7,117,110,105,50,66,48,67,7,117,110,105,50, + 66,48,68,7,117,110,105,50,66,48,69,7,117,110,105,50,66,48,70,7,117,110,105,50,66,49,48,7,117,110,105,50,66,49,49,7,117,110,105,50, + 66,49,50,7,117,110,105,50,66,49,51,7,117,110,105,50,66,49,52,7,117,110,105,50,66,49,53,7,117,110,105,50,66,49,54,7,117,110,105,50, + 66,49,55,7,117,110,105,50,66,49,56,7,117,110,105,50,66,49,57,7,117,110,105,50,66,49,65,7,117,110,105,50,66,49,70,7,117,110,105,50, + 66,50,48,7,117,110,105,50,66,50,49,7,117,110,105,50,66,50,50,7,117,110,105,50,66,50,51,7,117,110,105,50,66,50,52,7,117,110,105,50, + 66,53,51,7,117,110,105,50,66,53,52,7,117,110,105,50,67,54,48,7,117,110,105,50,67,54,49,7,117,110,105,50,67,54,50,7,117,110,105,50, + 67,54,51,7,117,110,105,50,67,54,52,7,117,110,105,50,67,54,53,7,117,110,105,50,67,54,54,7,117,110,105,50,67,54,55,7,117,110,105,50, + 67,54,56,7,117,110,105,50,67,54,57,7,117,110,105,50,67,54,65,7,117,110,105,50,67,54,66,7,117,110,105,50,67,54,67,7,117,110,105,50, + 67,54,68,7,117,110,105,50,67,54,69,7,117,110,105,50,67,54,70,7,117,110,105,50,67,55,48,7,117,110,105,50,67,55,49,7,117,110,105,50, + 67,55,50,7,117,110,105,50,67,55,51,7,117,110,105,50,67,55,52,7,117,110,105,50,67,55,53,7,117,110,105,50,67,55,54,7,117,110,105,50, + 67,55,55,7,117,110,105,50,67,55,57,7,117,110,105,50,67,55,65,7,117,110,105,50,67,55,66,7,117,110,105,50,67,55,67,7,117,110,105,50, + 67,55,68,7,117,110,105,50,67,55,69,7,117,110,105,50,67,55,70,7,117,110,105,50,68,48,48,7,117,110,105,50,68,48,49,7,117,110,105,50, + 68,48,50,7,117,110,105,50,68,48,51,7,117,110,105,50,68,48,52,7,117,110,105,50,68,48,53,7,117,110,105,50,68,48,54,7,117,110,105,50, + 68,48,55,7,117,110,105,50,68,48,56,7,117,110,105,50,68,48,57,7,117,110,105,50,68,48,65,7,117,110,105,50,68,48,66,7,117,110,105,50, + 68,48,67,7,117,110,105,50,68,48,68,7,117,110,105,50,68,48,69,7,117,110,105,50,68,48,70,7,117,110,105,50,68,49,48,7,117,110,105,50, + 68,49,49,7,117,110,105,50,68,49,50,7,117,110,105,50,68,49,51,7,117,110,105,50,68,49,52,7,117,110,105,50,68,49,53,7,117,110,105,50, + 68,49,54,7,117,110,105,50,68,49,55,7,117,110,105,50,68,49,56,7,117,110,105,50,68,49,57,7,117,110,105,50,68,49,65,7,117,110,105,50, + 68,49,66,7,117,110,105,50,68,49,67,7,117,110,105,50,68,49,68,7,117,110,105,50,68,49,69,7,117,110,105,50,68,49,70,7,117,110,105,50, + 68,50,48,7,117,110,105,50,68,50,49,7,117,110,105,50,68,50,50,7,117,110,105,50,68,50,51,7,117,110,105,50,68,50,52,7,117,110,105,50, + 68,50,53,7,117,110,105,50,68,51,48,7,117,110,105,50,68,51,49,7,117,110,105,50,68,51,50,7,117,110,105,50,68,51,51,7,117,110,105,50, + 68,51,52,7,117,110,105,50,68,51,53,7,117,110,105,50,68,51,54,7,117,110,105,50,68,51,55,7,117,110,105,50,68,51,56,7,117,110,105,50, + 68,51,57,7,117,110,105,50,68,51,65,7,117,110,105,50,68,51,66,7,117,110,105,50,68,51,67,7,117,110,105,50,68,51,68,7,117,110,105,50, + 68,51,69,7,117,110,105,50,68,51,70,7,117,110,105,50,68,52,48,7,117,110,105,50,68,52,49,7,117,110,105,50,68,52,50,7,117,110,105,50, + 68,52,51,7,117,110,105,50,68,52,52,7,117,110,105,50,68,52,53,7,117,110,105,50,68,52,54,7,117,110,105,50,68,52,55,7,117,110,105,50, + 68,52,56,7,117,110,105,50,68,52,57,7,117,110,105,50,68,52,65,7,117,110,105,50,68,52,66,7,117,110,105,50,68,52,67,7,117,110,105,50, + 68,52,68,7,117,110,105,50,68,52,69,7,117,110,105,50,68,52,70,7,117,110,105,50,68,53,48,7,117,110,105,50,68,53,49,7,117,110,105,50, + 68,53,50,7,117,110,105,50,68,53,51,7,117,110,105,50,68,53,52,7,117,110,105,50,68,53,53,7,117,110,105,50,68,53,54,7,117,110,105,50, + 68,53,55,7,117,110,105,50,68,53,56,7,117,110,105,50,68,53,57,7,117,110,105,50,68,53,65,7,117,110,105,50,68,53,66,7,117,110,105,50, + 68,53,67,7,117,110,105,50,68,53,68,7,117,110,105,50,68,53,69,7,117,110,105,50,68,53,70,7,117,110,105,50,68,54,48,7,117,110,105,50, + 68,54,49,7,117,110,105,50,68,54,50,7,117,110,105,50,68,54,51,7,117,110,105,50,68,54,52,7,117,110,105,50,68,54,53,7,117,110,105,50, + 68,54,70,7,117,110,105,50,69,49,56,7,117,110,105,50,69,49,69,7,117,110,105,50,69,50,50,7,117,110,105,50,69,50,51,7,117,110,105,50, + 69,50,52,7,117,110,105,50,69,50,53,7,117,110,105,50,69,50,69,7,117,110,105,52,68,67,48,7,117,110,105,52,68,67,49,7,117,110,105,52, + 68,67,50,7,117,110,105,52,68,67,51,7,117,110,105,52,68,67,52,7,117,110,105,52,68,67,53,7,117,110,105,52,68,67,54,7,117,110,105,52, + 68,67,55,7,117,110,105,52,68,67,56,7,117,110,105,52,68,67,57,7,117,110,105,52,68,67,65,7,117,110,105,52,68,67,66,7,117,110,105,52, + 68,67,67,7,117,110,105,52,68,67,68,7,117,110,105,52,68,67,69,7,117,110,105,52,68,67,70,7,117,110,105,52,68,68,48,7,117,110,105,52, + 68,68,49,7,117,110,105,52,68,68,50,7,117,110,105,52,68,68,51,7,117,110,105,52,68,68,52,7,117,110,105,52,68,68,53,7,117,110,105,52, + 68,68,54,7,117,110,105,52,68,68,55,7,117,110,105,52,68,68,56,7,117,110,105,52,68,68,57,7,117,110,105,52,68,68,65,7,117,110,105,52, + 68,68,66,7,117,110,105,52,68,68,67,7,117,110,105,52,68,68,68,7,117,110,105,52,68,68,69,7,117,110,105,52,68,68,70,7,117,110,105,52, + 68,69,48,7,117,110,105,52,68,69,49,7,117,110,105,52,68,69,50,7,117,110,105,52,68,69,51,7,117,110,105,52,68,69,52,7,117,110,105,52, + 68,69,53,7,117,110,105,52,68,69,54,7,117,110,105,52,68,69,55,7,117,110,105,52,68,69,56,7,117,110,105,52,68,69,57,7,117,110,105,52, + 68,69,65,7,117,110,105,52,68,69,66,7,117,110,105,52,68,69,67,7,117,110,105,52,68,69,68,7,117,110,105,52,68,69,69,7,117,110,105,52, + 68,69,70,7,117,110,105,52,68,70,48,7,117,110,105,52,68,70,49,7,117,110,105,52,68,70,50,7,117,110,105,52,68,70,51,7,117,110,105,52, + 68,70,52,7,117,110,105,52,68,70,53,7,117,110,105,52,68,70,54,7,117,110,105,52,68,70,55,7,117,110,105,52,68,70,56,7,117,110,105,52, + 68,70,57,7,117,110,105,52,68,70,65,7,117,110,105,52,68,70,66,7,117,110,105,52,68,70,67,7,117,110,105,52,68,70,68,7,117,110,105,52, + 68,70,69,7,117,110,105,52,68,70,70,7,117,110,105,65,52,68,48,7,117,110,105,65,52,68,49,7,117,110,105,65,52,68,50,7,117,110,105,65, + 52,68,51,7,117,110,105,65,52,68,52,7,117,110,105,65,52,68,53,7,117,110,105,65,52,68,54,7,117,110,105,65,52,68,55,7,117,110,105,65, + 52,68,56,7,117,110,105,65,52,68,57,7,117,110,105,65,52,68,65,7,117,110,105,65,52,68,66,7,117,110,105,65,52,68,67,7,117,110,105,65, + 52,68,68,7,117,110,105,65,52,68,69,7,117,110,105,65,52,68,70,7,117,110,105,65,52,69,48,7,117,110,105,65,52,69,49,7,117,110,105,65, + 52,69,50,7,117,110,105,65,52,69,51,7,117,110,105,65,52,69,52,7,117,110,105,65,52,69,53,7,117,110,105,65,52,69,54,7,117,110,105,65, + 52,69,55,7,117,110,105,65,52,69,56,7,117,110,105,65,52,69,57,7,117,110,105,65,52,69,65,7,117,110,105,65,52,69,66,7,117,110,105,65, + 52,69,67,7,117,110,105,65,52,69,68,7,117,110,105,65,52,69,69,7,117,110,105,65,52,69,70,7,117,110,105,65,52,70,48,7,117,110,105,65, + 52,70,49,7,117,110,105,65,52,70,50,7,117,110,105,65,52,70,51,7,117,110,105,65,52,70,52,7,117,110,105,65,52,70,53,7,117,110,105,65, + 52,70,54,7,117,110,105,65,52,70,55,7,117,110,105,65,52,70,56,7,117,110,105,65,52,70,57,7,117,110,105,65,52,70,65,7,117,110,105,65, + 52,70,66,7,117,110,105,65,52,70,67,7,117,110,105,65,52,70,68,7,117,110,105,65,52,70,69,7,117,110,105,65,52,70,70,7,117,110,105,65, + 54,52,52,7,117,110,105,65,54,52,53,7,117,110,105,65,54,52,54,7,117,110,105,65,54,52,55,7,117,110,105,65,54,52,67,7,117,110,105,65, + 54,52,68,7,117,110,105,65,54,53,48,7,117,110,105,65,54,53,49,7,117,110,105,65,54,53,52,7,117,110,105,65,54,53,53,7,117,110,105,65, + 54,53,54,7,117,110,105,65,54,53,55,7,117,110,105,65,54,54,50,7,117,110,105,65,54,54,51,7,117,110,105,65,54,54,52,7,117,110,105,65, + 54,54,53,7,117,110,105,65,54,54,54,7,117,110,105,65,54,54,55,7,117,110,105,65,54,54,56,7,117,110,105,65,54,54,57,7,117,110,105,65, + 54,54,65,7,117,110,105,65,54,54,66,7,117,110,105,65,54,54,67,7,117,110,105,65,54,54,68,7,117,110,105,65,54,54,69,7,117,110,105,65, + 54,56,65,7,117,110,105,65,54,56,66,7,117,110,105,65,54,56,67,7,117,110,105,65,54,56,68,7,117,110,105,65,54,57,52,7,117,110,105,65, + 54,57,53,7,117,110,105,65,55,48,56,7,117,110,105,65,55,48,57,7,117,110,105,65,55,48,65,7,117,110,105,65,55,48,66,7,117,110,105,65, + 55,48,67,7,117,110,105,65,55,48,68,7,117,110,105,65,55,48,69,7,117,110,105,65,55,48,70,7,117,110,105,65,55,49,48,7,117,110,105,65, + 55,49,49,7,117,110,105,65,55,49,50,7,117,110,105,65,55,49,51,7,117,110,105,65,55,49,52,7,117,110,105,65,55,49,53,7,117,110,105,65, + 55,49,54,7,117,110,105,65,55,49,66,7,117,110,105,65,55,49,67,7,117,110,105,65,55,49,68,7,117,110,105,65,55,49,69,7,117,110,105,65, + 55,49,70,7,117,110,105,65,55,50,50,7,117,110,105,65,55,50,51,7,117,110,105,65,55,50,52,7,117,110,105,65,55,50,53,7,117,110,105,65, + 55,50,54,7,117,110,105,65,55,50,55,7,117,110,105,65,55,50,56,7,117,110,105,65,55,50,57,7,117,110,105,65,55,50,65,7,117,110,105,65, + 55,50,66,7,117,110,105,65,55,51,48,7,117,110,105,65,55,51,49,7,117,110,105,65,55,51,50,7,117,110,105,65,55,51,51,7,117,110,105,65, + 55,51,52,7,117,110,105,65,55,51,53,7,117,110,105,65,55,51,54,7,117,110,105,65,55,51,55,7,117,110,105,65,55,51,56,7,117,110,105,65, + 55,51,57,7,117,110,105,65,55,51,65,7,117,110,105,65,55,51,66,7,117,110,105,65,55,51,67,7,117,110,105,65,55,51,68,7,117,110,105,65, + 55,51,69,7,117,110,105,65,55,51,70,7,117,110,105,65,55,52,48,7,117,110,105,65,55,52,49,7,117,110,105,65,55,52,54,7,117,110,105,65, + 55,52,55,7,117,110,105,65,55,52,56,7,117,110,105,65,55,52,57,7,117,110,105,65,55,52,65,7,117,110,105,65,55,52,66,7,117,110,105,65, + 55,52,69,7,117,110,105,65,55,52,70,7,117,110,105,65,55,53,48,7,117,110,105,65,55,53,49,7,117,110,105,65,55,53,50,7,117,110,105,65, + 55,53,51,7,117,110,105,65,55,53,54,7,117,110,105,65,55,53,55,7,117,110,105,65,55,54,52,7,117,110,105,65,55,54,53,7,117,110,105,65, + 55,54,54,7,117,110,105,65,55,54,55,7,117,110,105,65,55,56,48,7,117,110,105,65,55,56,49,7,117,110,105,65,55,56,50,7,117,110,105,65, + 55,56,51,7,117,110,105,65,55,56,57,7,117,110,105,65,55,56,65,7,117,110,105,65,55,56,66,7,117,110,105,65,55,56,67,7,117,110,105,65, + 55,56,68,7,117,110,105,65,55,56,69,7,117,110,105,65,55,57,48,7,117,110,105,65,55,57,49,7,117,110,105,65,55,65,48,7,117,110,105,65, + 55,65,49,7,117,110,105,65,55,65,50,7,117,110,105,65,55,65,51,7,117,110,105,65,55,65,52,7,117,110,105,65,55,65,53,7,117,110,105,65, + 55,65,54,7,117,110,105,65,55,65,55,7,117,110,105,65,55,65,56,7,117,110,105,65,55,65,57,7,117,110,105,65,55,65,65,7,117,110,105,65, + 55,70,65,7,117,110,105,65,55,70,66,7,117,110,105,65,55,70,67,7,117,110,105,65,55,70,68,7,117,110,105,65,55,70,69,7,117,110,105,65, + 55,70,70,9,117,110,105,48,50,69,53,46,53,9,117,110,105,48,50,69,54,46,53,9,117,110,105,48,50,69,55,46,53,9,117,110,105,48,50,69, + 56,46,53,9,117,110,105,48,50,69,57,46,53,9,117,110,105,48,50,69,53,46,52,9,117,110,105,48,50,69,54,46,52,9,117,110,105,48,50,69, + 55,46,52,9,117,110,105,48,50,69,56,46,52,9,117,110,105,48,50,69,57,46,52,9,117,110,105,48,50,69,53,46,51,9,117,110,105,48,50,69, + 54,46,51,9,117,110,105,48,50,69,55,46,51,9,117,110,105,48,50,69,56,46,51,9,117,110,105,48,50,69,57,46,51,9,117,110,105,48,50,69, + 53,46,50,9,117,110,105,48,50,69,54,46,50,9,117,110,105,48,50,69,55,46,50,9,117,110,105,48,50,69,56,46,50,9,117,110,105,48,50,69, + 57,46,50,9,117,110,105,48,50,69,53,46,49,9,117,110,105,48,50,69,54,46,49,9,117,110,105,48,50,69,55,46,49,9,117,110,105,48,50,69, + 56,46,49,9,117,110,105,48,50,69,57,46,49,4,115,116,101,109,7,117,110,105,70,48,48,48,7,117,110,105,70,48,48,49,7,117,110,105,70,48, + 48,50,7,117,110,105,70,48,48,51,7,117,110,105,70,52,48,48,7,117,110,105,70,52,48,49,7,117,110,105,70,52,48,50,7,117,110,105,70,52, + 48,51,7,117,110,105,70,52,48,52,7,117,110,105,70,52,48,53,7,117,110,105,70,52,48,54,7,117,110,105,70,52,48,55,7,117,110,105,70,52, + 48,56,7,117,110,105,70,52,48,57,7,117,110,105,70,52,48,65,7,117,110,105,70,52,48,66,7,117,110,105,70,52,48,67,7,117,110,105,70,52, + 48,68,7,117,110,105,70,52,48,69,7,117,110,105,70,52,48,70,7,117,110,105,70,52,49,48,7,117,110,105,70,52,49,49,7,117,110,105,70,52, + 49,50,7,117,110,105,70,52,49,51,7,117,110,105,70,52,49,52,7,117,110,105,70,52,49,53,7,117,110,105,70,52,49,54,7,117,110,105,70,52, + 49,55,7,117,110,105,70,52,49,56,7,117,110,105,70,52,49,57,7,117,110,105,70,52,49,65,7,117,110,105,70,52,49,66,7,117,110,105,70,52, + 49,67,7,117,110,105,70,52,49,68,7,117,110,105,70,52,49,69,7,117,110,105,70,52,49,70,7,117,110,105,70,52,50,48,7,117,110,105,70,52, + 50,49,7,117,110,105,70,52,50,50,7,117,110,105,70,52,50,51,7,117,110,105,70,52,50,52,7,117,110,105,70,52,50,53,7,117,110,105,70,52, + 50,54,7,117,110,105,70,52,50,56,7,117,110,105,70,52,50,57,7,117,110,105,70,52,50,65,7,117,110,105,70,52,50,66,7,117,110,105,70,52, + 50,67,7,117,110,105,70,52,50,68,7,117,110,105,70,52,50,69,7,117,110,105,70,52,50,70,7,117,110,105,70,52,51,48,7,117,110,105,70,52, + 51,49,7,117,110,105,70,52,51,50,7,117,110,105,70,52,51,51,7,117,110,105,70,52,51,52,7,117,110,105,70,52,51,53,7,117,110,105,70,52, + 51,54,7,117,110,105,70,52,51,55,7,117,110,105,70,52,51,56,7,117,110,105,70,52,51,57,7,117,110,105,70,52,51,65,7,117,110,105,70,52, + 51,66,7,117,110,105,70,52,51,67,7,117,110,105,70,52,51,68,7,117,110,105,70,52,51,69,7,117,110,105,70,52,51,70,7,117,110,105,70,52, + 52,48,7,117,110,105,70,52,52,49,7,117,110,105,70,54,67,53,7,117,110,105,70,66,48,48,7,117,110,105,70,66,48,51,7,117,110,105,70,66, + 48,52,7,117,110,105,70,66,48,53,7,117,110,105,70,66,48,54,7,117,110,105,70,66,49,51,7,117,110,105,70,66,49,52,7,117,110,105,70,66, + 49,53,7,117,110,105,70,66,49,54,7,117,110,105,70,66,49,55,7,117,110,105,70,66,49,68,7,117,110,105,70,66,49,69,7,117,110,105,70,66, + 49,70,7,117,110,105,70,66,50,48,7,117,110,105,70,66,50,49,7,117,110,105,70,66,50,50,7,117,110,105,70,66,50,51,7,117,110,105,70,66, + 50,52,7,117,110,105,70,66,50,53,7,117,110,105,70,66,50,54,7,117,110,105,70,66,50,55,7,117,110,105,70,66,50,56,7,117,110,105,70,66, + 50,57,7,117,110,105,70,66,50,65,7,117,110,105,70,66,50,66,7,117,110,105,70,66,50,67,7,117,110,105,70,66,50,68,7,117,110,105,70,66, + 50,69,7,117,110,105,70,66,50,70,7,117,110,105,70,66,51,48,7,117,110,105,70,66,51,49,7,117,110,105,70,66,51,50,7,117,110,105,70,66, + 51,51,7,117,110,105,70,66,51,52,7,117,110,105,70,66,51,53,7,117,110,105,70,66,51,54,7,117,110,105,70,66,51,56,7,117,110,105,70,66, + 51,57,7,117,110,105,70,66,51,65,7,117,110,105,70,66,51,66,7,117,110,105,70,66,51,67,7,117,110,105,70,66,51,69,7,117,110,105,70,66, + 52,48,7,117,110,105,70,66,52,49,7,117,110,105,70,66,52,51,7,117,110,105,70,66,52,52,7,117,110,105,70,66,52,54,7,117,110,105,70,66, + 52,55,7,117,110,105,70,66,52,56,7,117,110,105,70,66,52,57,7,117,110,105,70,66,52,65,7,117,110,105,70,66,52,66,7,117,110,105,70,66, + 52,67,7,117,110,105,70,66,52,68,7,117,110,105,70,66,52,69,7,117,110,105,70,66,52,70,7,117,110,105,70,66,53,50,7,117,110,105,70,66, + 53,51,7,117,110,105,70,66,53,52,7,117,110,105,70,66,53,53,7,117,110,105,70,66,53,54,7,117,110,105,70,66,53,55,7,117,110,105,70,66, + 53,56,7,117,110,105,70,66,53,57,7,117,110,105,70,66,53,65,7,117,110,105,70,66,53,66,7,117,110,105,70,66,53,67,7,117,110,105,70,66, + 53,68,7,117,110,105,70,66,53,69,7,117,110,105,70,66,53,70,7,117,110,105,70,66,54,48,7,117,110,105,70,66,54,49,7,117,110,105,70,66, + 54,50,7,117,110,105,70,66,54,51,7,117,110,105,70,66,54,52,7,117,110,105,70,66,54,53,7,117,110,105,70,66,54,54,7,117,110,105,70,66, + 54,55,7,117,110,105,70,66,54,56,7,117,110,105,70,66,54,57,7,117,110,105,70,66,54,65,7,117,110,105,70,66,54,66,7,117,110,105,70,66, + 54,67,7,117,110,105,70,66,54,68,7,117,110,105,70,66,54,69,7,117,110,105,70,66,54,70,7,117,110,105,70,66,55,48,7,117,110,105,70,66, + 55,49,7,117,110,105,70,66,55,50,7,117,110,105,70,66,55,51,7,117,110,105,70,66,55,52,7,117,110,105,70,66,55,53,7,117,110,105,70,66, + 55,54,7,117,110,105,70,66,55,55,7,117,110,105,70,66,55,56,7,117,110,105,70,66,55,57,7,117,110,105,70,66,55,65,7,117,110,105,70,66, + 55,66,7,117,110,105,70,66,55,67,7,117,110,105,70,66,55,68,7,117,110,105,70,66,55,69,7,117,110,105,70,66,55,70,7,117,110,105,70,66, + 56,48,7,117,110,105,70,66,56,49,7,117,110,105,70,66,56,50,7,117,110,105,70,66,56,51,7,117,110,105,70,66,56,52,7,117,110,105,70,66, + 56,53,7,117,110,105,70,66,56,54,7,117,110,105,70,66,56,55,7,117,110,105,70,66,56,56,7,117,110,105,70,66,56,57,7,117,110,105,70,66, + 56,65,7,117,110,105,70,66,56,66,7,117,110,105,70,66,56,67,7,117,110,105,70,66,56,68,7,117,110,105,70,66,56,69,7,117,110,105,70,66, + 56,70,7,117,110,105,70,66,57,48,7,117,110,105,70,66,57,49,7,117,110,105,70,66,57,50,7,117,110,105,70,66,57,51,7,117,110,105,70,66, + 57,52,7,117,110,105,70,66,57,53,7,117,110,105,70,66,57,54,7,117,110,105,70,66,57,55,7,117,110,105,70,66,57,56,7,117,110,105,70,66, + 57,57,7,117,110,105,70,66,57,65,7,117,110,105,70,66,57,66,7,117,110,105,70,66,57,67,7,117,110,105,70,66,57,68,7,117,110,105,70,66, + 57,69,7,117,110,105,70,66,57,70,7,117,110,105,70,66,65,48,7,117,110,105,70,66,65,49,7,117,110,105,70,66,65,50,7,117,110,105,70,66, + 65,51,7,117,110,105,70,66,65,65,7,117,110,105,70,66,65,66,7,117,110,105,70,66,65,67,7,117,110,105,70,66,65,68,7,117,110,105,70,66, + 68,51,7,117,110,105,70,66,68,52,7,117,110,105,70,66,68,53,7,117,110,105,70,66,68,54,7,117,110,105,70,66,68,57,7,117,110,105,70,66, + 68,65,7,117,110,105,70,66,69,56,7,117,110,105,70,66,69,57,7,117,110,105,70,66,70,67,7,117,110,105,70,66,70,68,7,117,110,105,70,66, + 70,69,7,117,110,105,70,66,70,70,7,117,110,105,70,69,48,48,7,117,110,105,70,69,48,49,7,117,110,105,70,69,48,50,7,117,110,105,70,69, + 48,51,7,117,110,105,70,69,48,52,7,117,110,105,70,69,48,53,7,117,110,105,70,69,48,54,7,117,110,105,70,69,48,55,7,117,110,105,70,69, + 48,56,7,117,110,105,70,69,48,57,7,117,110,105,70,69,48,65,7,117,110,105,70,69,48,66,7,117,110,105,70,69,48,67,7,117,110,105,70,69, + 48,68,7,117,110,105,70,69,48,69,7,117,110,105,70,69,48,70,7,117,110,105,70,69,50,48,7,117,110,105,70,69,50,49,7,117,110,105,70,69, + 50,50,7,117,110,105,70,69,50,51,7,117,110,105,70,69,55,48,7,117,110,105,70,69,55,49,7,117,110,105,70,69,55,50,7,117,110,105,70,69, + 55,51,7,117,110,105,70,69,55,52,7,117,110,105,70,69,55,54,7,117,110,105,70,69,55,55,7,117,110,105,70,69,55,56,7,117,110,105,70,69, + 55,57,7,117,110,105,70,69,55,65,7,117,110,105,70,69,55,66,7,117,110,105,70,69,55,67,7,117,110,105,70,69,55,68,7,117,110,105,70,69, + 55,69,7,117,110,105,70,69,55,70,7,117,110,105,70,69,56,48,7,117,110,105,70,69,56,49,7,117,110,105,70,69,56,50,7,117,110,105,70,69, + 56,51,7,117,110,105,70,69,56,52,7,117,110,105,70,69,56,53,7,117,110,105,70,69,56,54,7,117,110,105,70,69,56,55,7,117,110,105,70,69, + 56,56,7,117,110,105,70,69,56,57,7,117,110,105,70,69,56,65,7,117,110,105,70,69,56,66,7,117,110,105,70,69,56,67,7,117,110,105,70,69, + 56,68,7,117,110,105,70,69,56,69,7,117,110,105,70,69,56,70,7,117,110,105,70,69,57,48,7,117,110,105,70,69,57,49,7,117,110,105,70,69, + 57,50,7,117,110,105,70,69,57,51,7,117,110,105,70,69,57,52,7,117,110,105,70,69,57,53,7,117,110,105,70,69,57,54,7,117,110,105,70,69, + 57,55,7,117,110,105,70,69,57,56,7,117,110,105,70,69,57,57,7,117,110,105,70,69,57,65,7,117,110,105,70,69,57,66,7,117,110,105,70,69, + 57,67,7,117,110,105,70,69,57,68,7,117,110,105,70,69,57,69,7,117,110,105,70,69,57,70,7,117,110,105,70,69,65,48,7,117,110,105,70,69, + 65,49,7,117,110,105,70,69,65,50,7,117,110,105,70,69,65,51,7,117,110,105,70,69,65,52,7,117,110,105,70,69,65,53,7,117,110,105,70,69, + 65,54,7,117,110,105,70,69,65,55,7,117,110,105,70,69,65,56,7,117,110,105,70,69,65,57,7,117,110,105,70,69,65,65,7,117,110,105,70,69, + 65,66,7,117,110,105,70,69,65,67,7,117,110,105,70,69,65,68,7,117,110,105,70,69,65,69,7,117,110,105,70,69,65,70,7,117,110,105,70,69, + 66,48,7,117,110,105,70,69,66,49,7,117,110,105,70,69,66,50,7,117,110,105,70,69,66,51,7,117,110,105,70,69,66,52,7,117,110,105,70,69, + 66,53,7,117,110,105,70,69,66,54,7,117,110,105,70,69,66,55,7,117,110,105,70,69,66,56,7,117,110,105,70,69,66,57,7,117,110,105,70,69, + 66,65,7,117,110,105,70,69,66,66,7,117,110,105,70,69,66,67,7,117,110,105,70,69,66,68,7,117,110,105,70,69,66,69,7,117,110,105,70,69, + 66,70,7,117,110,105,70,69,67,48,7,117,110,105,70,69,67,49,7,117,110,105,70,69,67,50,7,117,110,105,70,69,67,51,7,117,110,105,70,69, + 67,52,7,117,110,105,70,69,67,53,7,117,110,105,70,69,67,54,7,117,110,105,70,69,67,55,7,117,110,105,70,69,67,56,7,117,110,105,70,69, + 67,57,7,117,110,105,70,69,67,65,7,117,110,105,70,69,67,66,7,117,110,105,70,69,67,67,7,117,110,105,70,69,67,68,7,117,110,105,70,69, + 67,69,7,117,110,105,70,69,67,70,7,117,110,105,70,69,68,48,7,117,110,105,70,69,68,49,7,117,110,105,70,69,68,50,7,117,110,105,70,69, + 68,51,7,117,110,105,70,69,68,52,7,117,110,105,70,69,68,53,7,117,110,105,70,69,68,54,7,117,110,105,70,69,68,55,7,117,110,105,70,69, + 68,56,7,117,110,105,70,69,68,57,7,117,110,105,70,69,68,65,7,117,110,105,70,69,68,66,7,117,110,105,70,69,68,67,7,117,110,105,70,69, + 68,68,7,117,110,105,70,69,68,69,7,117,110,105,70,69,68,70,7,117,110,105,70,69,69,48,7,117,110,105,70,69,69,49,7,117,110,105,70,69, + 69,50,7,117,110,105,70,69,69,51,7,117,110,105,70,69,69,52,7,117,110,105,70,69,69,53,7,117,110,105,70,69,69,54,7,117,110,105,70,69, + 69,55,7,117,110,105,70,69,69,56,7,117,110,105,70,69,69,57,7,117,110,105,70,69,69,65,7,117,110,105,70,69,69,66,7,117,110,105,70,69, + 69,67,7,117,110,105,70,69,69,68,7,117,110,105,70,69,69,69,7,117,110,105,70,69,69,70,7,117,110,105,70,69,70,48,7,117,110,105,70,69, + 70,49,7,117,110,105,70,69,70,50,7,117,110,105,70,69,70,51,7,117,110,105,70,69,70,52,7,117,110,105,70,69,70,53,7,117,110,105,70,69, + 70,54,7,117,110,105,70,69,70,55,7,117,110,105,70,69,70,56,7,117,110,105,70,69,70,57,7,117,110,105,70,69,70,65,7,117,110,105,70,69, + 70,66,7,117,110,105,70,69,70,67,7,117,110,105,70,69,70,70,7,117,110,105,70,70,70,57,7,117,110,105,70,70,70,65,7,117,110,105,70,70, + 70,66,7,117,110,105,70,70,70,67,7,117,110,105,70,70,70,68,6,117,49,48,51,48,48,6,117,49,48,51,48,49,6,117,49,48,51,48,50,6, + 117,49,48,51,48,51,6,117,49,48,51,48,52,6,117,49,48,51,48,53,6,117,49,48,51,48,54,6,117,49,48,51,48,55,6,117,49,48,51,48, + 56,6,117,49,48,51,48,57,6,117,49,48,51,48,65,6,117,49,48,51,48,66,6,117,49,48,51,48,67,6,117,49,48,51,48,68,6,117,49,48, + 51,48,69,6,117,49,48,51,48,70,6,117,49,48,51,49,48,6,117,49,48,51,49,49,6,117,49,48,51,49,50,6,117,49,48,51,49,51,6,117, + 49,48,51,49,52,6,117,49,48,51,49,53,6,117,49,48,51,49,54,6,117,49,48,51,49,55,6,117,49,48,51,49,56,6,117,49,48,51,49,57, + 6,117,49,48,51,49,65,6,117,49,48,51,49,66,6,117,49,48,51,49,67,6,117,49,48,51,49,68,6,117,49,48,51,49,69,6,117,49,48,51, + 50,48,6,117,49,48,51,50,49,6,117,49,48,51,50,50,6,117,49,48,51,50,51,6,117,49,68,51,48,48,6,117,49,68,51,48,49,6,117,49, + 68,51,48,50,6,117,49,68,51,48,51,6,117,49,68,51,48,52,6,117,49,68,51,48,53,6,117,49,68,51,48,54,6,117,49,68,51,48,55,6, + 117,49,68,51,48,56,6,117,49,68,51,48,57,6,117,49,68,51,48,65,6,117,49,68,51,48,66,6,117,49,68,51,48,67,6,117,49,68,51,48, + 68,6,117,49,68,51,48,69,6,117,49,68,51,48,70,6,117,49,68,51,49,48,6,117,49,68,51,49,49,6,117,49,68,51,49,50,6,117,49,68, + 51,49,51,6,117,49,68,51,49,52,6,117,49,68,51,49,53,6,117,49,68,51,49,54,6,117,49,68,51,49,55,6,117,49,68,51,49,56,6,117, + 49,68,51,49,57,6,117,49,68,51,49,65,6,117,49,68,51,49,66,6,117,49,68,51,49,67,6,117,49,68,51,49,68,6,117,49,68,51,49,69, + 6,117,49,68,51,49,70,6,117,49,68,51,50,48,6,117,49,68,51,50,49,6,117,49,68,51,50,50,6,117,49,68,51,50,51,6,117,49,68,51, + 50,52,6,117,49,68,51,50,53,6,117,49,68,51,50,54,6,117,49,68,51,50,55,6,117,49,68,51,50,56,6,117,49,68,51,50,57,6,117,49, + 68,51,50,65,6,117,49,68,51,50,66,6,117,49,68,51,50,67,6,117,49,68,51,50,68,6,117,49,68,51,50,69,6,117,49,68,51,50,70,6, + 117,49,68,51,51,48,6,117,49,68,51,51,49,6,117,49,68,51,51,50,6,117,49,68,51,51,51,6,117,49,68,51,51,52,6,117,49,68,51,51, + 53,6,117,49,68,51,51,54,6,117,49,68,51,51,55,6,117,49,68,51,51,56,6,117,49,68,51,51,57,6,117,49,68,51,51,65,6,117,49,68, + 51,51,66,6,117,49,68,51,51,67,6,117,49,68,51,51,68,6,117,49,68,51,51,69,6,117,49,68,51,51,70,6,117,49,68,51,52,48,6,117, + 49,68,51,52,49,6,117,49,68,51,52,50,6,117,49,68,51,52,51,6,117,49,68,51,52,52,6,117,49,68,51,52,53,6,117,49,68,51,52,54, + 6,117,49,68,51,52,55,6,117,49,68,51,52,56,6,117,49,68,51,52,57,6,117,49,68,51,52,65,6,117,49,68,51,52,66,6,117,49,68,51, + 52,67,6,117,49,68,51,52,68,6,117,49,68,51,52,69,6,117,49,68,51,52,70,6,117,49,68,51,53,48,6,117,49,68,51,53,49,6,117,49, + 68,51,53,50,6,117,49,68,51,53,51,6,117,49,68,51,53,52,6,117,49,68,51,53,53,6,117,49,68,51,53,54,6,117,49,68,53,51,56,6, + 117,49,68,53,51,57,6,117,49,68,53,51,66,6,117,49,68,53,51,67,6,117,49,68,53,51,68,6,117,49,68,53,51,69,6,117,49,68,53,52, + 48,6,117,49,68,53,52,49,6,117,49,68,53,52,50,6,117,49,68,53,52,51,6,117,49,68,53,52,52,6,117,49,68,53,52,54,6,117,49,68, + 53,52,65,6,117,49,68,53,52,66,6,117,49,68,53,52,67,6,117,49,68,53,52,68,6,117,49,68,53,52,69,6,117,49,68,53,52,70,6,117, + 49,68,53,53,48,6,117,49,68,53,53,50,6,117,49,68,53,53,51,6,117,49,68,53,53,52,6,117,49,68,53,53,53,6,117,49,68,53,53,54, + 6,117,49,68,53,53,55,6,117,49,68,53,53,56,6,117,49,68,53,53,57,6,117,49,68,53,53,65,6,117,49,68,53,53,66,6,117,49,68,53, + 53,67,6,117,49,68,53,53,68,6,117,49,68,53,53,69,6,117,49,68,53,53,70,6,117,49,68,53,54,48,6,117,49,68,53,54,49,6,117,49, + 68,53,54,50,6,117,49,68,53,54,51,6,117,49,68,53,54,52,6,117,49,68,53,54,53,6,117,49,68,53,54,54,6,117,49,68,53,54,55,6, + 117,49,68,53,54,56,6,117,49,68,53,54,57,6,117,49,68,53,54,65,6,117,49,68,53,54,66,6,117,49,68,53,65,48,6,117,49,68,53,65, + 49,6,117,49,68,53,65,50,6,117,49,68,53,65,51,6,117,49,68,53,65,52,6,117,49,68,53,65,53,6,117,49,68,53,65,54,6,117,49,68, + 53,65,55,6,117,49,68,53,65,56,6,117,49,68,53,65,57,6,117,49,68,53,65,65,6,117,49,68,53,65,66,6,117,49,68,53,65,67,6,117, + 49,68,53,65,68,6,117,49,68,53,65,69,6,117,49,68,53,65,70,6,117,49,68,53,66,48,6,117,49,68,53,66,49,6,117,49,68,53,66,50, + 6,117,49,68,53,66,51,6,117,49,68,53,66,52,6,117,49,68,53,66,53,6,117,49,68,53,66,54,6,117,49,68,53,66,55,6,117,49,68,53, + 66,56,6,117,49,68,53,66,57,6,117,49,68,53,66,65,6,117,49,68,53,66,66,6,117,49,68,53,66,67,6,117,49,68,53,66,68,6,117,49, + 68,53,66,69,6,117,49,68,53,66,70,6,117,49,68,53,67,48,6,117,49,68,53,67,49,6,117,49,68,53,67,50,6,117,49,68,53,67,51,6, + 117,49,68,53,67,52,6,117,49,68,53,67,53,6,117,49,68,53,67,54,6,117,49,68,53,67,55,6,117,49,68,53,67,56,6,117,49,68,53,67, + 57,6,117,49,68,53,67,65,6,117,49,68,53,67,66,6,117,49,68,53,67,67,6,117,49,68,53,67,68,6,117,49,68,53,67,69,6,117,49,68, + 53,67,70,6,117,49,68,53,68,48,6,117,49,68,53,68,49,6,117,49,68,53,68,50,6,117,49,68,53,68,51,6,117,49,68,55,68,56,6,117, + 49,68,55,68,57,6,117,49,68,55,68,65,6,117,49,68,55,68,66,6,117,49,68,55,68,67,6,117,49,68,55,68,68,6,117,49,68,55,68,69, + 6,117,49,68,55,68,70,6,117,49,68,55,69,48,6,117,49,68,55,69,49,6,117,49,68,55,69,50,6,117,49,68,55,69,51,6,117,49,68,55, + 69,52,6,117,49,68,55,69,53,6,117,49,68,55,69,54,6,117,49,68,55,69,55,6,117,49,68,55,69,56,6,117,49,68,55,69,57,6,117,49, + 68,55,69,65,6,117,49,68,55,69,66,6,117,49,70,48,51,48,6,117,49,70,48,51,49,6,117,49,70,48,51,50,6,117,49,70,48,51,51,6, + 117,49,70,48,51,52,6,117,49,70,48,51,53,6,117,49,70,48,51,54,6,117,49,70,48,51,55,6,117,49,70,48,51,56,6,117,49,70,48,51, + 57,6,117,49,70,48,51,65,6,117,49,70,48,51,66,6,117,49,70,48,51,67,6,117,49,70,48,51,68,6,117,49,70,48,51,69,6,117,49,70, + 48,51,70,6,117,49,70,48,52,48,6,117,49,70,48,52,49,6,117,49,70,48,52,50,6,117,49,70,48,52,51,6,117,49,70,48,52,52,6,117, + 49,70,48,52,53,6,117,49,70,48,52,54,6,117,49,70,48,52,55,6,117,49,70,48,52,56,6,117,49,70,48,52,57,6,117,49,70,48,52,65, + 6,117,49,70,48,52,66,6,117,49,70,48,52,67,6,117,49,70,48,52,68,6,117,49,70,48,52,69,6,117,49,70,48,52,70,6,117,49,70,48, + 53,48,6,117,49,70,48,53,49,6,117,49,70,48,53,50,6,117,49,70,48,53,51,6,117,49,70,48,53,52,6,117,49,70,48,53,53,6,117,49, + 70,48,53,54,6,117,49,70,48,53,55,6,117,49,70,48,53,56,6,117,49,70,48,53,57,6,117,49,70,48,53,65,6,117,49,70,48,53,66,6, + 117,49,70,48,53,67,6,117,49,70,48,53,68,6,117,49,70,48,53,69,6,117,49,70,48,53,70,6,117,49,70,48,54,48,6,117,49,70,48,54, + 49,6,117,49,70,48,54,50,6,117,49,70,48,54,51,6,117,49,70,48,54,52,6,117,49,70,48,54,53,6,117,49,70,48,54,54,6,117,49,70, + 48,54,55,6,117,49,70,48,54,56,6,117,49,70,48,54,57,6,117,49,70,48,54,65,6,117,49,70,48,54,66,6,117,49,70,48,54,67,6,117, + 49,70,48,54,68,6,117,49,70,48,54,69,6,117,49,70,48,54,70,6,117,49,70,48,55,48,6,117,49,70,48,55,49,6,117,49,70,48,55,50, + 6,117,49,70,48,55,51,6,117,49,70,48,55,52,6,117,49,70,48,55,53,6,117,49,70,48,55,54,6,117,49,70,48,55,55,6,117,49,70,48, + 55,56,6,117,49,70,48,55,57,6,117,49,70,48,55,65,6,117,49,70,48,55,66,6,117,49,70,48,55,67,6,117,49,70,48,55,68,6,117,49, + 70,48,55,69,6,117,49,70,48,55,70,6,117,49,70,48,56,48,6,117,49,70,48,56,49,6,117,49,70,48,56,50,6,117,49,70,48,56,51,6, + 117,49,70,48,56,52,6,117,49,70,48,56,53,6,117,49,70,48,56,54,6,117,49,70,48,56,55,6,117,49,70,48,56,56,6,117,49,70,48,56, + 57,6,117,49,70,48,56,65,6,117,49,70,48,56,66,6,117,49,70,48,56,67,6,117,49,70,48,56,68,6,117,49,70,48,56,69,6,117,49,70, + 48,56,70,6,117,49,70,48,57,48,6,117,49,70,48,57,49,6,117,49,70,48,57,50,6,117,49,70,48,57,51,6,117,49,70,48,65,48,6,117, + 49,70,48,65,49,6,117,49,70,48,65,50,6,117,49,70,48,65,51,6,117,49,70,48,65,52,6,117,49,70,48,65,53,6,117,49,70,48,65,54, + 6,117,49,70,48,65,55,6,117,49,70,48,65,56,6,117,49,70,48,65,57,6,117,49,70,48,65,65,6,117,49,70,48,65,66,6,117,49,70,48, + 65,67,6,117,49,70,48,65,68,6,117,49,70,48,65,69,6,117,49,70,48,66,49,6,117,49,70,48,66,50,6,117,49,70,48,66,51,6,117,49, + 70,48,66,52,6,117,49,70,48,66,53,6,117,49,70,48,66,54,6,117,49,70,48,66,55,6,117,49,70,48,66,56,6,117,49,70,48,66,57,6, + 117,49,70,48,66,65,6,117,49,70,48,66,66,6,117,49,70,48,66,67,6,117,49,70,48,66,68,6,117,49,70,48,66,69,6,117,49,70,48,67, + 49,6,117,49,70,48,67,50,6,117,49,70,48,67,51,6,117,49,70,48,67,52,6,117,49,70,48,67,53,6,117,49,70,48,67,54,6,117,49,70, + 48,67,55,6,117,49,70,48,67,56,6,117,49,70,48,67,57,6,117,49,70,48,67,65,6,117,49,70,48,67,66,6,117,49,70,48,67,67,6,117, + 49,70,48,67,68,6,117,49,70,48,67,69,6,117,49,70,48,67,70,6,117,49,70,48,68,49,6,117,49,70,48,68,50,6,117,49,70,48,68,51, + 6,117,49,70,48,68,52,6,117,49,70,48,68,53,6,117,49,70,48,68,54,6,117,49,70,48,68,55,6,117,49,70,48,68,56,6,117,49,70,48, + 68,57,6,117,49,70,48,68,65,6,117,49,70,48,68,66,6,117,49,70,48,68,67,6,117,49,70,48,68,68,6,117,49,70,48,68,69,6,117,49, + 70,48,68,70,6,117,49,70,52,50,68,6,117,49,70,52,50,69,6,117,49,70,52,51,49,6,117,49,70,52,51,53,6,117,49,70,54,48,48,6, + 117,49,70,54,48,49,6,117,49,70,54,48,50,6,117,49,70,54,48,51,6,117,49,70,54,48,52,6,117,49,70,54,48,53,6,117,49,70,54,48, + 54,6,117,49,70,54,48,55,6,117,49,70,54,48,56,6,117,49,70,54,48,57,6,117,49,70,54,48,65,6,117,49,70,54,48,66,6,117,49,70, + 54,48,67,6,117,49,70,54,48,68,6,117,49,70,54,48,69,6,117,49,70,54,48,70,6,117,49,70,54,49,48,6,117,49,70,54,49,49,6,117, + 49,70,54,49,50,6,117,49,70,54,49,51,6,117,49,70,54,49,52,6,117,49,70,54,49,53,6,117,49,70,54,49,54,6,117,49,70,54,49,55, + 6,117,49,70,54,49,56,6,117,49,70,54,49,57,6,117,49,70,54,49,65,6,117,49,70,54,49,66,6,117,49,70,54,49,67,6,117,49,70,54, + 49,68,6,117,49,70,54,49,69,6,117,49,70,54,49,70,6,117,49,70,54,50,48,6,117,49,70,54,50,49,6,117,49,70,54,50,50,6,117,49, + 70,54,50,51,6,117,49,70,54,50,53,6,117,49,70,54,50,54,6,117,49,70,54,50,55,6,117,49,70,54,50,56,6,117,49,70,54,50,57,6, + 117,49,70,54,50,65,6,117,49,70,54,50,66,6,117,49,70,54,50,68,6,117,49,70,54,50,69,6,117,49,70,54,50,70,6,117,49,70,54,51, + 48,6,117,49,70,54,51,49,6,117,49,70,54,51,50,6,117,49,70,54,51,51,6,117,49,70,54,51,52,6,117,49,70,54,51,53,6,117,49,70, + 54,51,54,6,117,49,70,54,51,55,6,117,49,70,54,51,56,6,117,49,70,54,51,57,6,117,49,70,54,51,65,6,117,49,70,54,51,66,6,117, + 49,70,54,51,67,6,117,49,70,54,51,68,6,117,49,70,54,51,69,6,117,49,70,54,51,70,6,117,49,70,54,52,48,9,100,108,76,116,99,97, + 114,111,110,8,68,105,101,114,101,115,105,115,5,65,99,117,116,101,5,84,105,108,100,101,5,71,114,97,118,101,10,67,105,114,99,117,109,102,108,101, + 120,5,67,97,114,111,110,12,117,110,105,48,51,49,49,46,99,97,115,101,5,66,114,101,118,101,9,68,111,116,97,99,99,101,110,116,12,72,117,110, + 103,97,114,117,109,108,97,117,116,11,68,111,117,98,108,101,103,114,97,118,101,10,97,114,97,98,105,99,95,100,111,116,12,97,114,97,98,105,99,95, + 50,100,111,116,115,12,97,114,97,98,105,99,95,51,100,111,116,115,14,97,114,97,98,105,99,95,51,100,111,116,115,95,97,14,97,114,97,98,105,99, + 95,50,100,111,116,115,95,97,12,97,114,97,98,105,99,95,52,100,111,116,115,12,117,110,105,48,54,54,69,46,102,105,110,97,12,117,110,105,48,54, + 54,69,46,105,110,105,116,12,117,110,105,48,54,54,69,46,109,101,100,105,12,117,110,105,48,54,65,49,46,102,105,110,97,12,117,110,105,48,54,65, + 49,46,105,110,105,116,12,117,110,105,48,54,65,49,46,109,101,100,105,12,117,110,105,48,54,54,70,46,102,105,110,97,12,117,110,105,48,54,54,70, + 46,105,110,105,116,12,117,110,105,48,54,54,70,46,109,101,100,105,12,117,110,105,48,54,66,65,46,105,110,105,116,12,117,110,105,48,54,66,65,46, + 109,101,100,105,11,97,114,97,98,105,99,95,114,105,110,103,12,117,110,105,48,54,55,67,46,102,105,110,97,12,117,110,105,48,54,55,67,46,105,110, + 105,116,12,117,110,105,48,54,55,67,46,109,101,100,105,12,117,110,105,48,54,55,68,46,102,105,110,97,12,117,110,105,48,54,55,68,46,105,110,105, + 116,12,117,110,105,48,54,55,68,46,109,101,100,105,12,117,110,105,48,54,56,49,46,102,105,110,97,12,117,110,105,48,54,56,49,46,105,110,105,116, + 12,117,110,105,48,54,56,49,46,109,101,100,105,12,117,110,105,48,54,56,50,46,102,105,110,97,12,117,110,105,48,54,56,50,46,105,110,105,116,12, + 117,110,105,48,54,56,50,46,109,101,100,105,12,117,110,105,48,54,56,53,46,102,105,110,97,12,117,110,105,48,54,56,53,46,105,110,105,116,12,117, + 110,105,48,54,56,53,46,109,101,100,105,12,117,110,105,48,54,66,70,46,102,105,110,97,12,117,110,105,48,54,66,70,46,105,110,105,116,12,117,110, + 105,48,54,66,70,46,109,101,100,105,14,97,114,97,98,105,99,95,103,97,102,95,98,97,114,7,69,110,103,46,97,108,116,15,117,110,105,48,50,54, + 56,46,100,111,116,108,101,115,115,15,117,110,105,48,50,57,68,46,100,111,116,108,101,115,115,11,117,110,105,48,51,48,56,48,51,48,52,11,117,110, + 105,48,51,48,52,48,51,48,56,11,117,110,105,48,51,48,55,48,51,48,52,11,117,110,105,48,51,48,56,48,51,48,49,11,117,110,105,48,51,48, + 56,48,51,48,48,11,117,110,105,48,51,48,52,48,51,48,49,11,117,110,105,48,51,48,52,48,51,48,48,11,117,110,105,48,51,48,51,48,51,48, + 52,11,117,110,105,48,51,48,56,48,51,48,67,11,117,110,105,48,51,48,51,48,51,48,56,11,117,110,105,48,51,48,67,48,51,48,55,11,117,110, + 105,48,51,48,51,48,51,48,49,11,117,110,105,48,51,48,50,48,51,48,49,11,117,110,105,48,51,48,50,48,51,48,48,11,117,110,105,48,51,48, + 50,48,51,48,51,11,117,110,105,48,51,48,54,48,51,48,51,11,117,110,105,48,51,48,54,48,51,48,49,11,117,110,105,48,51,48,54,48,51,48, + 48,11,117,110,105,48,51,48,54,48,51,48,57,11,117,110,105,48,51,48,50,48,51,48,57,11,117,110,105,48,51,48,49,48,51,48,55,10,98,114, + 97,105,108,108,101,100,111,116,5,74,46,97,108,116,12,117,110,105,48,54,57,53,46,102,105,110,97,22,117,110,105,70,69,65,69,46,102,105,110,97, + 46,108,111,110,103,115,116,97,114,116,12,117,110,105,48,54,66,53,46,102,105,110,97,12,117,110,105,48,54,66,53,46,105,110,105,116,12,117,110,105, + 48,54,66,53,46,109,101,100,105,12,117,110,105,48,54,67,69,46,102,105,110,97,12,117,110,105,48,54,67,69,46,105,110,105,116,12,117,110,105,48, + 54,67,69,46,109,101,100,105,12,117,110,105,48,54,57,50,46,102,105,110,97,5,108,46,97,108,116,12,117,110,105,48,54,68,53,46,102,105,110,97, + 17,117,110,105,48,52,55,56,46,109,111,110,111,103,114,97,112,104,17,117,110,105,48,52,55,57,46,109,111,110,111,103,114,97,112,104,15,105,111,103, + 111,110,101,107,46,100,111,116,108,101,115,115,15,117,110,105,50,49,52,56,46,100,111,116,108,101,115,115,15,117,110,105,50,49,52,57,46,100,111,116, + 108,101,115,115,15,117,110,105,49,69,50,68,46,100,111,116,108,101,115,115,15,117,110,105,49,69,67,66,46,100,111,116,108,101,115,115,3,100,99,111, + 5,73,46,97,108,116,10,97,114,114,111,119,46,98,97,115,101,11,117,110,105,48,54,53,49,48,54,52,66,11,117,110,105,48,54,53,49,48,54,52, + 67,11,117,110,105,48,54,52,66,48,54,53,49,11,117,110,105,48,54,53,49,48,54,52,69,11,117,110,105,48,54,53,49,48,54,52,70,11,117,110, + 105,48,54,52,69,48,54,53,49,11,117,110,105,48,54,53,52,48,54,52,69,11,117,110,105,48,54,53,52,48,54,52,70,12,117,110,105,48,55,67, + 65,46,102,105,110,97,12,117,110,105,48,55,67,65,46,109,101,100,105,12,117,110,105,48,55,67,65,46,105,110,105,116,12,117,110,105,48,55,67,66, + 46,102,105,110,97,12,117,110,105,48,55,67,66,46,109,101,100,105,12,117,110,105,48,55,67,66,46,105,110,105,116,12,117,110,105,48,55,67,67,46, + 102,105,110,97,12,117,110,105,48,55,67,67,46,109,101,100,105,12,117,110,105,48,55,67,67,46,105,110,105,116,12,117,110,105,48,55,67,68,46,102, + 105,110,97,12,117,110,105,48,55,67,68,46,109,101,100,105,12,117,110,105,48,55,67,68,46,105,110,105,116,12,117,110,105,48,55,67,69,46,102,105, + 110,97,12,117,110,105,48,55,67,69,46,109,101,100,105,12,117,110,105,48,55,67,69,46,105,110,105,116,12,117,110,105,48,55,67,70,46,102,105,110, + 97,12,117,110,105,48,55,67,70,46,109,101,100,105,12,117,110,105,48,55,67,70,46,105,110,105,116,12,117,110,105,48,55,68,48,46,102,105,110,97, + 12,117,110,105,48,55,68,48,46,109,101,100,105,12,117,110,105,48,55,68,48,46,105,110,105,116,12,117,110,105,48,55,68,49,46,102,105,110,97,12, + 117,110,105,48,55,68,49,46,109,101,100,105,12,117,110,105,48,55,68,49,46,105,110,105,116,12,117,110,105,48,55,68,50,46,102,105,110,97,12,117, + 110,105,48,55,68,50,46,109,101,100,105,12,117,110,105,48,55,68,50,46,105,110,105,116,12,117,110,105,48,55,68,51,46,102,105,110,97,12,117,110, + 105,48,55,68,51,46,109,101,100,105,12,117,110,105,48,55,68,51,46,105,110,105,116,12,117,110,105,48,55,68,52,46,102,105,110,97,12,117,110,105, + 48,55,68,52,46,109,101,100,105,12,117,110,105,48,55,68,52,46,105,110,105,116,12,117,110,105,48,55,68,53,46,102,105,110,97,12,117,110,105,48, + 55,68,53,46,109,101,100,105,12,117,110,105,48,55,68,53,46,105,110,105,116,12,117,110,105,48,55,68,54,46,102,105,110,97,12,117,110,105,48,55, + 68,54,46,109,101,100,105,12,117,110,105,48,55,68,54,46,105,110,105,116,12,117,110,105,48,55,68,55,46,102,105,110,97,12,117,110,105,48,55,68, + 55,46,109,101,100,105,12,117,110,105,48,55,68,55,46,105,110,105,116,12,117,110,105,48,55,68,56,46,102,105,110,97,12,117,110,105,48,55,68,56, + 46,109,101,100,105,12,117,110,105,48,55,68,56,46,105,110,105,116,12,117,110,105,48,55,68,57,46,102,105,110,97,12,117,110,105,48,55,68,57,46, + 109,101,100,105,12,117,110,105,48,55,68,57,46,105,110,105,116,12,117,110,105,48,55,68,65,46,102,105,110,97,12,117,110,105,48,55,68,65,46,109, + 101,100,105,12,117,110,105,48,55,68,65,46,105,110,105,116,12,117,110,105,48,55,68,66,46,102,105,110,97,12,117,110,105,48,55,68,66,46,109,101, + 100,105,12,117,110,105,48,55,68,66,46,105,110,105,116,12,117,110,105,48,55,68,67,46,102,105,110,97,12,117,110,105,48,55,68,67,46,109,101,100, + 105,12,117,110,105,48,55,68,67,46,105,110,105,116,12,117,110,105,48,55,68,68,46,102,105,110,97,12,117,110,105,48,55,68,68,46,109,101,100,105, + 12,117,110,105,48,55,68,68,46,105,110,105,116,12,117,110,105,48,55,68,69,46,102,105,110,97,12,117,110,105,48,55,68,69,46,109,101,100,105,12, + 117,110,105,48,55,68,69,46,105,110,105,116,12,117,110,105,48,55,68,70,46,102,105,110,97,12,117,110,105,48,55,68,70,46,109,101,100,105,12,117, + 110,105,48,55,68,70,46,105,110,105,116,12,117,110,105,48,55,69,48,46,102,105,110,97,12,117,110,105,48,55,69,48,46,109,101,100,105,12,117,110, + 105,48,55,69,48,46,105,110,105,116,12,117,110,105,48,55,69,49,46,102,105,110,97,12,117,110,105,48,55,69,49,46,109,101,100,105,12,117,110,105, + 48,55,69,49,46,105,110,105,116,12,117,110,105,48,55,69,50,46,102,105,110,97,12,117,110,105,48,55,69,50,46,109,101,100,105,12,117,110,105,48, + 55,69,50,46,105,110,105,116,12,117,110,105,48,55,69,51,46,102,105,110,97,12,117,110,105,48,55,69,51,46,109,101,100,105,12,117,110,105,48,55, + 69,51,46,105,110,105,116,12,117,110,105,48,55,69,52,46,102,105,110,97,12,117,110,105,48,55,69,52,46,109,101,100,105,12,117,110,105,48,55,69, + 52,46,105,110,105,116,12,117,110,105,48,55,69,53,46,102,105,110,97,12,117,110,105,48,55,69,53,46,109,101,100,105,12,117,110,105,48,55,69,53, + 46,105,110,105,116,12,117,110,105,48,55,69,54,46,102,105,110,97,12,117,110,105,48,55,69,54,46,109,101,100,105,12,117,110,105,48,55,69,54,46, + 105,110,105,116,12,117,110,105,48,55,69,55,46,102,105,110,97,12,117,110,105,48,55,69,55,46,109,101,100,105,12,117,110,105,48,55,69,55,46,105, + 110,105,116,9,82,105,110,103,97,98,111,118,101,11,117,110,105,50,54,51,48,46,97,108,116,11,117,110,105,50,54,51,49,46,97,108,116,11,117,110, + 105,50,54,51,50,46,97,108,116,11,117,110,105,50,54,51,51,46,97,108,116,11,117,110,105,50,54,51,52,46,97,108,116,11,117,110,105,50,54,51, + 53,46,97,108,116,11,117,110,105,50,54,51,54,46,97,108,116,11,117,110,105,50,54,51,55,46,97,108,116,12,117,110,105,48,52,55,69,46,100,105, + 97,99,17,117,110,105,48,52,56,65,46,98,114,101,118,101,108,101,115,115,17,117,110,105,48,52,56,66,46,98,114,101,118,101,108,101,115,115,5,121, + 46,97,108,116,12,117,110,105,48,54,56,57,46,102,105,110,97,12,117,110,105,48,54,56,65,46,102,105,110,97,12,117,110,105,48,54,56,66,46,102, + 105,110,97,12,117,110,105,48,54,56,70,46,102,105,110,97,12,117,110,105,48,54,57,48,46,102,105,110,97,12,117,110,105,48,54,57,51,46,102,105, + 110,97,12,117,110,105,48,54,57,52,46,102,105,110,97,12,117,110,105,48,54,57,54,46,102,105,110,97,12,117,110,105,48,54,57,55,46,102,105,110, + 97,12,117,110,105,48,54,57,57,46,102,105,110,97,12,117,110,105,48,54,57,65,46,102,105,110,97,12,117,110,105,48,54,57,65,46,105,110,105,116, + 12,117,110,105,48,54,57,65,46,109,101,100,105,12,117,110,105,48,54,57,66,46,102,105,110,97,12,117,110,105,48,54,57,66,46,105,110,105,116,12, + 117,110,105,48,54,57,66,46,109,101,100,105,12,117,110,105,48,54,57,67,46,102,105,110,97,12,117,110,105,48,54,57,67,46,105,110,105,116,12,117, + 110,105,48,54,57,67,46,109,101,100,105,12,117,110,105,48,54,57,68,46,102,105,110,97,12,117,110,105,48,54,57,68,46,105,110,105,116,12,117,110, + 105,48,54,57,68,46,109,101,100,105,12,117,110,105,48,54,57,69,46,102,105,110,97,12,117,110,105,48,54,57,69,46,105,110,105,116,12,117,110,105, + 48,54,57,69,46,109,101,100,105,12,117,110,105,48,54,57,70,46,102,105,110,97,12,117,110,105,48,54,57,70,46,105,110,105,116,12,117,110,105,48, + 54,57,70,46,109,101,100,105,12,117,110,105,48,54,65,48,46,102,105,110,97,12,117,110,105,48,54,65,48,46,105,110,105,116,12,117,110,105,48,54, + 65,48,46,109,101,100,105,12,117,110,105,48,54,65,50,46,102,105,110,97,12,117,110,105,48,54,65,50,46,105,110,105,116,12,117,110,105,48,54,65, + 50,46,109,101,100,105,12,117,110,105,48,54,65,51,46,102,105,110,97,12,117,110,105,48,54,65,51,46,105,110,105,116,12,117,110,105,48,54,65,51, + 46,109,101,100,105,12,117,110,105,48,54,65,53,46,102,105,110,97,12,117,110,105,48,54,65,53,46,105,110,105,116,12,117,110,105,48,54,65,53,46, + 109,101,100,105,12,117,110,105,48,54,65,55,46,102,105,110,97,12,117,110,105,48,54,65,55,46,105,110,105,116,12,117,110,105,48,54,65,55,46,109, + 101,100,105,12,117,110,105,48,54,65,56,46,102,105,110,97,12,117,110,105,48,54,65,56,46,105,110,105,116,12,117,110,105,48,54,65,56,46,109,101, + 100,105,12,117,110,105,48,54,65,65,46,102,105,110,97,12,117,110,105,48,54,65,65,46,105,110,105,116,12,117,110,105,48,54,65,65,46,109,101,100, + 105,12,117,110,105,48,54,65,66,46,102,105,110,97,12,117,110,105,48,54,65,66,46,105,110,105,116,12,117,110,105,48,54,65,66,46,109,101,100,105, + 12,117,110,105,48,54,65,67,46,102,105,110,97,12,117,110,105,48,54,65,67,46,105,110,105,116,12,117,110,105,48,54,65,67,46,109,101,100,105,12, + 117,110,105,48,54,65,69,46,102,105,110,97,12,117,110,105,48,54,65,69,46,105,110,105,116,12,117,110,105,48,54,65,69,46,109,101,100,105,12,117, + 110,105,48,54,66,48,46,102,105,110,97,12,117,110,105,48,54,66,48,46,105,110,105,116,12,117,110,105,48,54,66,48,46,109,101,100,105,12,117,110, + 105,48,54,66,50,46,102,105,110,97,12,117,110,105,48,54,66,50,46,105,110,105,116,12,117,110,105,48,54,66,50,46,109,101,100,105,12,117,110,105, + 48,54,66,52,46,102,105,110,97,12,117,110,105,48,54,66,52,46,105,110,105,116,12,117,110,105,48,54,66,52,46,109,101,100,105,12,117,110,105,48, + 54,66,54,46,102,105,110,97,12,117,110,105,48,54,66,54,46,105,110,105,116,12,117,110,105,48,54,66,54,46,109,101,100,105,12,117,110,105,48,54, + 66,55,46,102,105,110,97,12,117,110,105,48,54,66,55,46,105,110,105,116,12,117,110,105,48,54,66,55,46,109,101,100,105,12,117,110,105,48,54,66, + 56,46,102,105,110,97,12,117,110,105,48,54,66,56,46,105,110,105,116,12,117,110,105,48,54,66,56,46,109,101,100,105,12,117,110,105,48,54,66,57, + 46,102,105,110,97,12,117,110,105,48,54,66,57,46,105,110,105,116,12,117,110,105,48,54,66,57,46,109,101,100,105,12,117,110,105,48,54,66,67,46, + 102,105,110,97,12,117,110,105,48,54,66,67,46,105,110,105,116,12,117,110,105,48,54,66,67,46,109,101,100,105,12,117,110,105,48,54,66,68,46,102, + 105,110,97,12,117,110,105,48,54,66,68,46,105,110,105,116,12,117,110,105,48,54,66,68,46,109,101,100,105,0,0,0,184,2,128,64,255,251,254,3, + 250,20,3,249,37,3,248,50,3,247,150,3,246,14,3,245,254,3,244,254,3,243,37,3,242,14,3,241,150,3,240,37,3,239,138,65,5,239,254,3, + 238,150,3,237,150,3,236,250,3,235,250,3,234,254,3,233,58,3,232,66,3,231,254,3,230,50,3,229,228,83,5,229,150,3,228,138,65,5,228,83, + 3,227,226,47,5,227,250,3,226,47,3,225,254,3,224,254,3,223,50,3,222,20,3,221,150,3,220,254,3,219,18,3,218,125,3,217,187,3,216,254, + 3,214,138,65,5,214,125,3,213,212,71,5,213,125,3,212,71,3,211,210,27,5,211,254,3,210,27,3,209,254,3,208,254,3,207,254,3,206,254,3, + 205,150,3,204,203,30,5,204,254,3,203,30,3,202,50,3,201,254,3,198,133,17,5,198,28,3,197,22,3,196,254,3,195,254,3,194,254,3,193,254, + 3,192,254,3,191,254,3,190,254,3,189,254,3,188,254,3,187,254,3,186,17,3,185,134,37,5,185,254,3,184,183,187,5,184,254,3,183,182,93,5, + 183,187,3,183,128,4,182,181,37,5,182,93,64,255,3,182,64,4,181,37,3,180,254,3,179,150,3,178,254,3,177,254,3,176,254,3,175,254,3,174, + 100,3,173,14,3,172,171,37,5,172,100,3,171,170,18,5,171,37,3,170,18,3,169,138,65,5,169,250,3,168,254,3,167,254,3,166,254,3,165,18, + 3,164,254,3,163,162,14,5,163,50,3,162,14,3,161,100,3,160,138,65,5,160,150,3,159,254,3,158,157,12,5,158,254,3,157,12,3,156,155,25, + 5,156,100,3,155,154,16,5,155,25,3,154,16,3,153,10,3,152,254,3,151,150,13,5,151,254,3,150,13,3,149,138,65,5,149,150,3,148,147,14, + 5,148,40,3,147,14,3,146,250,3,145,144,187,5,145,254,3,144,143,93,5,144,187,3,144,128,4,143,142,37,5,143,93,3,143,64,4,142,37,3, + 141,254,3,140,139,46,5,140,254,3,139,46,3,138,134,37,5,138,65,3,137,136,11,5,137,20,3,136,11,3,135,134,37,5,135,100,3,134,133,17, + 5,134,37,3,133,17,3,132,254,3,131,130,17,5,131,254,3,130,17,3,129,254,3,128,254,3,127,254,3,64,255,126,125,125,5,126,254,3,125,125, + 3,124,100,3,123,84,21,5,123,37,3,122,254,3,121,254,3,120,14,3,119,12,3,118,10,3,117,254,3,116,250,3,115,250,3,114,250,3,113,250, + 3,112,254,3,111,254,3,110,254,3,108,33,3,107,254,3,106,17,66,5,106,83,3,105,254,3,104,125,3,103,17,66,5,102,254,3,101,254,3,100, + 254,3,99,254,3,98,254,3,97,58,3,96,250,3,94,12,3,93,254,3,91,254,3,90,254,3,89,88,10,5,89,250,3,88,10,3,87,22,25,5, + 87,50,3,86,254,3,85,84,21,5,85,66,3,84,21,3,83,1,16,5,83,24,3,82,20,3,81,74,19,5,81,254,3,80,11,3,79,254,3,78, + 77,16,5,78,254,3,77,16,3,76,254,3,75,74,19,5,75,254,3,74,73,16,5,74,19,3,73,29,13,5,73,16,3,72,13,3,71,254,3,70, + 150,3,69,150,3,68,254,3,67,2,45,5,67,250,3,66,187,3,65,75,3,64,254,3,63,254,3,62,61,18,5,62,20,3,61,60,15,5,61,18, + 3,60,59,13,5,60,64,255,15,3,59,13,3,58,254,3,57,254,3,56,55,20,5,56,250,3,55,54,16,5,55,20,3,54,53,11,5,54,16,3, + 53,11,3,52,30,3,51,13,3,50,49,11,5,50,254,3,49,11,3,48,47,11,5,48,13,3,47,11,3,46,45,9,5,46,16,3,45,9,3,44, + 50,3,43,42,37,5,43,100,3,42,41,18,5,42,37,3,41,18,3,40,39,37,5,40,65,3,39,37,3,38,37,11,5,38,15,3,37,11,3,36, + 254,3,35,254,3,34,15,3,33,1,16,5,33,18,3,32,100,3,31,250,3,30,29,13,5,30,100,3,29,13,3,28,17,66,5,28,254,3,27,250, + 3,26,66,3,25,17,66,5,25,254,3,24,100,3,23,22,25,5,23,254,3,22,1,16,5,22,25,3,21,254,3,20,254,3,19,254,3,18,17,66, + 5,18,254,3,17,2,45,5,17,66,3,16,125,3,15,100,3,14,254,3,13,12,22,5,13,254,3,12,1,16,5,12,22,3,11,254,3,10,16,3, + 9,254,3,8,2,45,5,8,254,3,7,20,3,6,100,3,4,1,16,5,4,254,3,64,21,3,2,45,5,3,254,3,2,1,16,5,2,45,3,1, + 16,3,0,254,3,1,184,1,100,133,141,1,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,0,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, + 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,29,0,0}; +const char* blendish_resources::dejavusans_ttf = (const char*) temp2; + diff --git a/dpf/dgl/src/oui-blendish/blendish_resources.h b/dpf/dgl/src/oui-blendish/blendish_resources.h new file mode 100644 index 0000000..cdb8bb2 --- /dev/null +++ b/dpf/dgl/src/oui-blendish/blendish_resources.h @@ -0,0 +1,15 @@ +/* (Auto-generated binary data file). */ + +#ifndef BINARY_BLENDISH_RESOURCES_H +#define BINARY_BLENDISH_RESOURCES_H + +namespace blendish_resources +{ + extern const char* blender_icons16_png; + const unsigned int blender_icons16_png_size = 250706; + + extern const char* dejavusans_ttf; + const unsigned int dejavusans_ttf_size = 741536; +}; + +#endif diff --git a/dpf/dgl/src/oui-blendish/oui.h b/dpf/dgl/src/oui-blendish/oui.h new file mode 100644 index 0000000..b6807f9 --- /dev/null +++ b/dpf/dgl/src/oui-blendish/oui.h @@ -0,0 +1,2025 @@ +/* +OUI - A minimal semi-immediate GUI handling & layouting library + +Copyright (c) 2014 Leonard Ritter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + */ + +#ifndef _OUI_H_ +#define _OUI_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* +Revision 4 (2014-12-17) + +OUI (short for "Open UI", spoken like the french "oui" for "yes") is a +platform agnostic single-header C library for layouting GUI elements and +handling related user input. Together with a set of widget drawing and logic +routines it can be used to build complex user interfaces. + +OUI is a semi-immediate GUI. Widget declarations are persistent for the duration +of the setup and evaluation, but do not need to be kept around longer than one +frame. + +OUI has no widget types; instead, it provides only one kind of element, "Items", +which can be tailored to the application by the user and expanded with custom +buffers and event handlers to behave as containers, buttons, sliders, radio +buttons, and so on. + +OUI also does not draw anything; Instead it provides a set of functions to +iterate and query the layouted items in order to allow client code to render +each widget with its current state using a preferred graphics library. + +See example.cpp in the repository for a full usage example. + +A basic setup for OUI usage in C looks like this: +================================================= + +// a header for each widget +typedef struct Data { + int type; + UIhandler handler; +} Data; + +/// global event dispatch +void ui_handler(int item, UIevent event) { + Data *data = (Data *)uiGetHandle(item); + if (data && data->handler) { + data->handler(item, event); + } +} + +void app_main(...) { + UIcontext *context = uiCreateContext(4096, 1<<20); + uiMakeCurrent(context); + uiSetHandler(ui_handler); + + while (app_running()) { + // update position of mouse cursor; the ui can also be updated + // from received events. + uiSetCursor(app_get_mouse_x(), app_get_mouse_y()); + + // update button state + for (int i = 0; i < 3; ++i) + uiSetButton(i, app_get_button_state(i)); + + // you can also send keys and scroll events; see example.cpp for more + + // -------------- + // this section does not have to be regenerated on frame; a good + // policy is to invalidate it on events, as this usually alters + // structure and layout. + + // begin new UI declarations + uiBeginLayout(); + + // - UI setup code goes here - + app_setup_ui(); + + // layout UI + uiEndLayout(); + + // -------------- + + // draw UI, starting with the first item, index 0 + app_draw_ui(render_context,0); + + // update states and fire handlers + uiProcess(get_time_ms()); + } + + uiDestroyContext(context); +} + +Here's an example setup for a checkbox control: +=============================================== + +typedef struct CheckBoxData { + Data head; + const char *label; + bool *checked; +} CheckBoxData; + +// called when the item is clicked (see checkbox()) +void app_checkbox_handler(int item, UIevent event) { + // retrieve custom data (see checkbox()) + CheckBoxData *data = (CheckBoxData *)uiGetHandle(item); + + switch(event) { + default: break; + case UI_BUTTON0_DOWN: { + // toggle value + *data->checked = !(*data->checked); + } break; + } +} + +// creates a checkbox control for a pointer to a boolean +int checkbox(const char *label, bool *checked) { + + // create new ui item + int item = uiItem(); + + // set minimum size of wiget; horizontal size is dynamic, vertical is fixed + uiSetSize(item, 0, APP_WIDGET_HEIGHT); + + // store some custom data with the checkbox that we use for rendering + // and value changes. + CheckBoxData *data = (CheckBoxData *)uiAllocHandle(item, sizeof(CheckBoxData)); + + // assign a custom typeid to the data so the renderer knows how to + // render this control, and our event handler + data->head.type = APP_WIDGET_CHECKBOX; + data->head.handler = app_checkbox_handler; + data->label = label; + data->checked = checked; + + // set to fire as soon as the left button is + // pressed; UI_BUTTON0_HOT_UP is also a popular alternative. + uiSetEvents(item, UI_BUTTON0_DOWN); + + return item; +} + +A simple recursive drawing routine can look like this: +====================================================== + +void app_draw_ui(AppRenderContext *ctx, int item) { + // retrieve custom data and cast it to Data; we assume the first member + // of every widget data item to be a Data field. + Data *head = (Data *)uiGetHandle(item); + + // if a handle is set, this is a specialized widget + if (head) { + // get the widgets absolute rectangle + UIrect rect = uiGetRect(item); + + switch(head->type) { + default: break; + case APP_WIDGET_LABEL: { + // ... + } break; + case APP_WIDGET_BUTTON: { + // ... + } break; + case APP_WIDGET_CHECKBOX: { + // cast to the full data type + CheckBoxData *data = (CheckBoxData*)head; + + // get the widgets current state + int state = uiGetState(item); + + // if the value is set, the state is always active + if (*data->checked) + state = UI_ACTIVE; + + // draw the checkbox + app_draw_checkbox(ctx, rect, state, data->label); + } break; + } + } + + // iterate through all children and draw + int kid = uiFirstChild(item); + while (kid != -1) { + app_draw_ui(ctx, kid); + kid = uiNextSibling(kid); + } +} + +Layouting items works like this: +================================ + +void layout_window(int w, int h) { + // create root item; the first item always has index 0 + int parent = uiItem(); + // assign fixed size + uiSetSize(parent, w, h); + + // create column box and use as new parent + parent = uiInsert(parent, uiItem()); + // configure as column + uiSetBox(parent, UI_COLUMN); + // span horizontally, attach to top + uiSetLayout(parent, UI_HFILL | UI_TOP); + + // add a label - we're assuming custom control functions to exist + int item = uiInsert(parent, label("Hello World")); + // set a fixed height for the label + uiSetSize(item, 0, APP_WIDGET_HEIGHT); + // span the label horizontally + uiSetLayout(item, UI_HFILL); + + static bool checked = false; + + // add a checkbox to the same parent as item; this is faster than + // calling uiInsert on the same parent repeatedly. + item = uiAppend(item, checkbox("Checked:", &checked)); + // set a fixed height for the checkbox + uiSetSize(item, 0, APP_WIDGET_HEIGHT); + // span the checkbox in the same way as the label + uiSetLayout(item, UI_HFILL); +} + + + + */ + +// you can override this from the outside to pick +// the export level you need +#ifndef OUI_EXPORT +#define OUI_EXPORT +#endif + +// limits + +enum { + // maximum size in bytes of a single data buffer passed to uiAllocData(). + UI_MAX_DATASIZE = 4096, + // maximum depth of nested containers + UI_MAX_DEPTH = 64, + // maximum number of buffered input events + UI_MAX_INPUT_EVENTS = 64, + // consecutive click threshold in ms + UI_CLICK_THRESHOLD = 250, +}; + +typedef unsigned int UIuint; + +// opaque UI context +typedef struct UIcontext UIcontext; + +// item states as returned by uiGetState() + +typedef enum UIitemState { + // the item is inactive + UI_COLD = 0, + // the item is inactive, but the cursor is hovering over this item + UI_HOT = 1, + // the item is toggled, activated, focused (depends on item kind) + UI_ACTIVE = 2, + // the item is unresponsive + UI_FROZEN = 3, +} UIitemState; + +// container flags to pass to uiSetBox() +typedef enum UIboxFlags { + // flex-direction (bit 0+1) + + // left to right + UI_ROW = 0x002, + // top to bottom + UI_COLUMN = 0x003, + + // model (bit 1) + + // free layout + UI_LAYOUT = 0x000, + // flex model + UI_FLEX = 0x002, + + // flex-wrap (bit 2) + + // single-line + UI_NOWRAP = 0x000, + // multi-line, wrap left to right + UI_WRAP = 0x004, + + + // justify-content (start, end, center, space-between) + // at start of row/column + UI_START = 0x008, + // at center of row/column + UI_MIDDLE = 0x000, + // at end of row/column + UI_END = 0x010, + // insert spacing to stretch across whole row/column + UI_JUSTIFY = 0x018, + + // align-items + // can be implemented by putting a flex container in a layout container, + // then using UI_TOP, UI_DOWN, UI_VFILL, UI_VCENTER, etc. + // FILL is equivalent to stretch/grow + + // align-content (start, end, center, stretch) + // can be implemented by putting a flex container in a layout container, + // then using UI_TOP, UI_DOWN, UI_VFILL, UI_VCENTER, etc. + // FILL is equivalent to stretch; space-between is not supported. +} UIboxFlags; + +// child layout flags to pass to uiSetLayout() +typedef enum UIlayoutFlags { + // attachments (bit 5-8) + // fully valid when parent uses UI_LAYOUT model + // partially valid when in UI_FLEX model + + // anchor to left item or left side of parent + UI_LEFT = 0x020, + // anchor to top item or top side of parent + UI_TOP = 0x040, + // anchor to right item or right side of parent + UI_RIGHT = 0x080, + // anchor to bottom item or bottom side of parent + UI_DOWN = 0x100, + // anchor to both left and right item or parent borders + UI_HFILL = 0x0a0, + // anchor to both top and bottom item or parent borders + UI_VFILL = 0x140, + // center horizontally, with left margin as offset + UI_HCENTER = 0x000, + // center vertically, with top margin as offset + UI_VCENTER = 0x000, + // center in both directions, with left/top margin as offset + UI_CENTER = 0x000, + // anchor to all four directions + UI_FILL = 0x1e0, + // when wrapping, put this element on a new line + // wrapping layout code auto-inserts UI_BREAK flags, + // drawing routines can read them with uiGetLayout() + UI_BREAK = 0x200 +} UIlayoutFlags; + +// event flags +typedef enum UIevent { + // on button 0 down + UI_BUTTON0_DOWN = 0x0400, + // on button 0 up + // when this event has a handler, uiGetState() will return UI_ACTIVE as + // long as button 0 is down. + UI_BUTTON0_UP = 0x0800, + // on button 0 up while item is hovered + // when this event has a handler, uiGetState() will return UI_ACTIVE + // when the cursor is hovering the items rectangle; this is the + // behavior expected for buttons. + UI_BUTTON0_HOT_UP = 0x1000, + // item is being captured (button 0 constantly pressed); + // when this event has a handler, uiGetState() will return UI_ACTIVE as + // long as button 0 is down. + UI_BUTTON0_CAPTURE = 0x2000, + // on button 2 down (right mouse button, usually triggers context menu) + UI_BUTTON2_DOWN = 0x4000, + // item has received a scrollwheel event + // the accumulated wheel offset can be queried with uiGetScroll() + UI_SCROLL = 0x8000, + // item is focused and has received a key-down event + // the respective key can be queried using uiGetKey() and uiGetModifier() + UI_KEY_DOWN = 0x10000, + // item is focused and has received a key-up event + // the respective key can be queried using uiGetKey() and uiGetModifier() + UI_KEY_UP = 0x20000, + // item is focused and has received a character event + // the respective character can be queried using uiGetKey() + UI_CHAR = 0x40000, +} UIevent; + +enum { + // these bits, starting at bit 24, can be safely assigned by the + // application, e.g. as item types, other event types, drop targets, etc. + // they can be set and queried using uiSetFlags() and uiGetFlags() + UI_USERMASK = 0xff000000, + + // a special mask passed to uiFindItem() + UI_ANY = 0xffffffff, +}; + +// handler callback; event is one of UI_EVENT_* +typedef void (*UIhandler)(UIcontext* ui_context, int item, UIevent event); + +// for cursor positions, mainly +typedef struct UIvec2 { + union { + int v[2]; + struct { int x, y; }; + }; +} UIvec2; + +// layout rectangle +typedef struct UIrect { + union { + int v[4]; + struct { int x, y, w, h; }; + }; +} UIrect; + +// unless declared otherwise, all operations have the complexity O(1). + +// Context Management +// ------------------ + +// create a new UI context; call uiMakeCurrent() to make this context the +// current context. The context is managed by the client and must be released +// using uiDestroyContext() +// item_capacity is the maximum of number of items that can be declared. +// buffer_capacity is the maximum total size of bytes that can be allocated +// using uiAllocHandle(); you may pass 0 if you don't need to allocate +// handles. +// 4096 and (1<<20) are good starting values. +OUI_EXPORT UIcontext *uiCreateContext( + unsigned int item_capacity, + unsigned int buffer_capacity); + +// release the memory of an UI context created with uiCreateContext(); if the +// context is the current context, the current context will be set to NULL +OUI_EXPORT void uiDestroyContext(UIcontext *ctx); + +// User Data +OUI_EXPORT void uiSetContextHandle(UIcontext *ui_context, void *handle); +OUI_EXPORT void *uiGetContextHandle(UIcontext *ui_context); + +// Input Control +// ------------- + +// sets the current cursor position (usually belonging to a mouse) to the +// screen coordinates at (x,y) +OUI_EXPORT void uiSetCursor(UIcontext *ui_context, int x, int y); + +// returns the current cursor position in screen coordinates as set by +// uiSetCursor() +OUI_EXPORT UIvec2 uiGetCursor(UIcontext *ui_context); + +// returns the offset of the cursor relative to the last call to uiProcess() +OUI_EXPORT UIvec2 uiGetCursorDelta(UIcontext *ui_context); + +// returns the beginning point of a drag operation. +OUI_EXPORT UIvec2 uiGetCursorStart(UIcontext *ui_context); + +// returns the offset of the cursor relative to the beginning point of a drag +// operation. +OUI_EXPORT UIvec2 uiGetCursorStartDelta(UIcontext *ui_context); + +// sets a mouse or gamepad button as pressed/released +// button is in the range 0..63 and maps to an application defined input +// source. +// mod is an application defined set of flags for modifier keys +// enabled is 1 for pressed, 0 for released +OUI_EXPORT void uiSetButton(UIcontext *ui_context, unsigned int button, unsigned int mod, bool enabled); + +// returns the current state of an application dependent input button +// as set by uiSetButton(). +// the function returns 1 if the button has been set to pressed, 0 for released. +OUI_EXPORT int uiGetButton(UIcontext *ui_context, unsigned int button); + +// returns the number of chained clicks; 1 is a single click, +// 2 is a double click, etc. +OUI_EXPORT int uiGetClicks(UIcontext *ui_context); + +// sets a key as down/up; the key can be any application defined keycode +// mod is an application defined set of flags for modifier keys +// enabled is 1 for key down, 0 for key up +// all key events are being buffered until the next call to uiProcess() +OUI_EXPORT void uiSetKey(UIcontext *ui_context, unsigned int key, unsigned int mod, bool enabled); + +// sends a single character for text input; the character is usually in the +// unicode range, but can be application defined. +// all char events are being buffered until the next call to uiProcess() +OUI_EXPORT void uiSetChar(UIcontext *ui_context, unsigned int value); + +// accumulates scroll wheel offsets for the current frame +// all offsets are being accumulated until the next call to uiProcess() +OUI_EXPORT void uiSetScroll(UIcontext *ui_context, int x, int y); + +// returns the currently accumulated scroll wheel offsets for this frame +OUI_EXPORT UIvec2 uiGetScroll(UIcontext *ui_context); + + + + + +// Stages +// ------ + +// clear the item buffer; uiBeginLayout() should be called before the first +// UI declaration for this frame to avoid concatenation of the same UI multiple +// times. +// After the call, all previously declared item IDs are invalid, and all +// application dependent context data has been freed. +// uiBeginLayout() must be followed by uiEndLayout(). +OUI_EXPORT void uiBeginLayout(UIcontext *ui_context); + +// layout all added items starting from the root item 0. +// after calling uiEndLayout(), no further modifications to the item tree should +// be done until the next call to uiBeginLayout(). +// It is safe to immediately draw the items after a call to uiEndLayout(). +// this is an O(N) operation for N = number of declared items. +OUI_EXPORT void uiEndLayout(UIcontext *ui_context); + +// update the current hot item; this only needs to be called if items are kept +// for more than one frame and uiEndLayout() is not called +OUI_EXPORT void uiUpdateHotItem(UIcontext *ui_context); + +// update the internal state according to the current cursor position and +// button states, and call all registered handlers. +// timestamp is the time in milliseconds relative to the last call to uiProcess() +// and is used to estimate the threshold for double-clicks +// after calling uiProcess(), no further modifications to the item tree should +// be done until the next call to uiBeginLayout(). +// Items should be drawn before a call to uiProcess() +// this is an O(N) operation for N = number of declared items. +OUI_EXPORT void uiProcess(UIcontext *ui_context, int timestamp); + +// reset the currently stored hot/active etc. handles; this should be called when +// a re-declaration of the UI changes the item indices, to avoid state +// related glitches because item identities have changed. +OUI_EXPORT void uiClearState(UIcontext *ui_context); + +// UI Declaration +// -------------- + +// create a new UI item and return the new items ID. +OUI_EXPORT int uiItem(UIcontext *ui_context); + +// set an items state to frozen; the UI will not recurse into frozen items +// when searching for hot or active items; subsequently, frozen items and +// their child items will not cause mouse event notifications. +// The frozen state is not applied recursively; uiGetState() will report +// UI_COLD for child items. Upon encountering a frozen item, the drawing +// routine needs to handle rendering of child items appropriately. +// see example.cpp for a demonstration. +OUI_EXPORT void uiSetFrozen(UIcontext *ui_context, int item, bool enable); + +// set the application-dependent handle of an item. +// handle is an application defined 64-bit handle. If handle is NULL, the item +// will not be interactive. +OUI_EXPORT void uiSetHandle(UIcontext *ui_context, int item, void *handle); + +// allocate space for application-dependent context data and assign it +// as the handle to the item. +// The memory of the pointer is managed by the UI context and released +// upon the next call to uiBeginLayout() +OUI_EXPORT void *uiAllocHandle(UIcontext *ui_context, int item, unsigned int size); + +// set the global handler callback for interactive items. +// the handler will be called for each item whose event flags are set using +// uiSetEvents. +OUI_EXPORT void uiSetHandler(UIcontext *ui_context, UIhandler handler); + +// flags is a combination of UI_EVENT_* and designates for which events the +// handler should be called. +OUI_EXPORT void uiSetEvents(UIcontext *ui_context, int item, unsigned int flags); + +// flags is a user-defined set of flags defined by UI_USERMASK. +OUI_EXPORT void uiSetFlags(UIcontext *ui_context, int item, unsigned int flags); + +// assign an item to a container. +// an item ID of 0 refers to the root item. +// the function returns the child item ID +// if the container has already added items, the function searches +// for the last item and calls uiAppend() on it, which is an +// O(N) operation for N siblings. +// it is usually more efficient to call uiInsert() for the first child, +// then chain additional siblings using uiAppend(). +OUI_EXPORT int uiInsert(UIcontext *ui_context, int item, int child); + +// assign an item to the same container as another item +// sibling is inserted after item. +OUI_EXPORT int uiAppend(UIcontext *ui_context, int item, int sibling); + +// insert child into container item like uiInsert(), but prepend +// it to the first child item, effectively putting it in +// the background. +// it is efficient to call uiInsertBack() repeatedly +// in cases where drawing or layout order doesn't matter. +OUI_EXPORT int uiInsertBack(UIcontext *ui_context, int item, int child); + +// same as uiInsert() +OUI_EXPORT int uiInsertFront(UIcontext *ui_context, int item, int child); + +// set the size of the item; a size of 0 indicates the dimension to be +// dynamic; if the size is set, the item can not expand beyond that size. +OUI_EXPORT void uiSetSize(UIcontext *ui_context, int item, int w, int h); + +// set the anchoring behavior of the item to one or multiple UIlayoutFlags +OUI_EXPORT void uiSetLayout(UIcontext *ui_context, int item, unsigned int flags); + +// set the box model behavior of the item to one or multiple UIboxFlags +OUI_EXPORT void uiSetBox(UIcontext *ui_context, int item, unsigned int flags); + +// set the left, top, right and bottom margins of an item; when the item is +// anchored to the parent or another item, the margin controls the distance +// from the neighboring element. +OUI_EXPORT void uiSetMargins(UIcontext *ui_context, int item, short l, short t, short r, short b); + +// set item as recipient of all keyboard events; if item is -1, no item will +// be focused. +OUI_EXPORT void uiFocus(UIcontext *ui_context, int item); + +// Iteration +// --------- + +// returns the first child item of a container item. If the item is not +// a container or does not contain any items, -1 is returned. +// if item is 0, the first child item of the root item will be returned. +OUI_EXPORT int uiFirstChild(UIcontext *ui_context, int item); + +// returns an items next sibling in the list of the parent containers children. +// if item is 0 or the item is the last child item, -1 will be returned. +OUI_EXPORT int uiNextSibling(UIcontext *ui_context, int item); + +// Querying +// -------- + +// return the total number of allocated items +OUI_EXPORT int uiGetItemCount(UIcontext *ui_context); + +// return the total bytes that have been allocated by uiAllocHandle() +OUI_EXPORT unsigned int uiGetAllocSize(UIcontext *ui_context); + +// return the current state of the item. This state is only valid after +// a call to uiProcess(). +// The returned value is one of UI_COLD, UI_HOT, UI_ACTIVE, UI_FROZEN. +OUI_EXPORT UIitemState uiGetState(UIcontext *ui_context, int item); + +// return the application-dependent handle of the item as passed to uiSetHandle() +// or uiAllocHandle(). +OUI_EXPORT void *uiGetHandle(UIcontext *ui_context, int item); + +// return the item that is currently under the cursor or -1 for none +OUI_EXPORT int uiGetHotItem(UIcontext *ui_context); + +// return the item that is currently focused or -1 for none +OUI_EXPORT int uiGetFocusedItem(UIcontext *ui_context); + +// returns the topmost item containing absolute location (x,y), starting with +// item as parent, using a set of flags and masks as filter: +// if both flags and mask are UI_ANY, the first topmost item is returned. +// if mask is UI_ANY, the first topmost item matching *any* of flags is returned. +// otherwise the first item matching (item.flags & flags) == mask is returned. +// you may combine box, layout, event and user flags. +// frozen items will always be ignored. +OUI_EXPORT int uiFindItem(UIcontext *ui_context, int item, int x, int y, + unsigned int flags, unsigned int mask); + +// return the handler callback as passed to uiSetHandler() +OUI_EXPORT UIhandler uiGetHandler(UIcontext *ui_context); +// return the event flags for an item as passed to uiSetEvents() +OUI_EXPORT unsigned int uiGetEvents(UIcontext *ui_context, int item); +// return the user-defined flags for an item as passed to uiSetFlags() +OUI_EXPORT unsigned int uiGetFlags(UIcontext *ui_context, int item); + +// when handling a KEY_DOWN/KEY_UP event: the key that triggered this event +OUI_EXPORT unsigned int uiGetKey(UIcontext *ui_context); +// when handling a keyboard or mouse event: the active modifier keys +OUI_EXPORT unsigned int uiGetModifier(UIcontext *ui_context); + +// returns the items layout rectangle in absolute coordinates. If +// uiGetRect() is called before uiEndLayout(), the values of the returned +// rectangle are undefined. +OUI_EXPORT UIrect uiGetRect(UIcontext *ui_context, int item); + +// returns 1 if an items absolute rectangle contains a given coordinate +// otherwise 0 +OUI_EXPORT int uiContains(UIcontext *ui_context, int item, int x, int y); + +// return the width of the item as set by uiSetSize() +OUI_EXPORT int uiGetWidth(UIcontext *ui_context, int item); +// return the height of the item as set by uiSetSize() +OUI_EXPORT int uiGetHeight(UIcontext *ui_context, int item); + +// return the anchoring behavior as set by uiSetLayout() +OUI_EXPORT unsigned int uiGetLayout(UIcontext *ui_context, int item); +// return the box model as set by uiSetBox() +OUI_EXPORT unsigned int uiGetBox(UIcontext *ui_context, int item); + +// return the left margin of the item as set with uiSetMargins() +OUI_EXPORT short uiGetMarginLeft(UIcontext *ui_context, int item); +// return the top margin of the item as set with uiSetMargins() +OUI_EXPORT short uiGetMarginTop(UIcontext *ui_context, int item); +// return the right margin of the item as set with uiSetMargins() +OUI_EXPORT short uiGetMarginRight(UIcontext *ui_context, int item); +// return the bottom margin of the item as set with uiSetMargins() +OUI_EXPORT short uiGetMarginDown(UIcontext *ui_context, int item); + +// when uiBeginLayout() is called, the most recently declared items are retained. +// when uiEndLayout() completes, it matches the old item hierarchy to the new one +// and attempts to map old items to new items as well as possible. +// when passed an item Id from the previous frame, uiRecoverItem() returns the +// items new assumed Id, or -1 if the item could not be mapped. +// it is valid to pass -1 as item. +OUI_EXPORT int uiRecoverItem(UIcontext *ui_context, int olditem); + +// in cases where it is important to recover old state over changes in +// the view, and the built-in remapping fails, the UI declaration can manually +// remap old items to new IDs in cases where e.g. the previous item ID has been +// temporarily saved; uiRemapItem() would then be called after creating the +// new item using uiItem(). +OUI_EXPORT void uiRemapItem(UIcontext *ui_context, int olditem, int newitem); + +// returns the number if items that have been allocated in the last frame +OUI_EXPORT int uiGetLastItemCount(UIcontext *ui_context); + +#ifdef __cplusplus +}; +#endif + +#endif // _OUI_H_ + +#ifdef OUI_IMPLEMENTATION + +#include + +#ifdef _MSC_VER + #pragma warning (disable: 4996) // Switch off security warnings + #pragma warning (disable: 4100) // Switch off unreferenced formal parameter warnings + #pragma warning (disable: 4244) + #pragma warning (disable: 4305) + + #ifdef __cplusplus + #define UI_INLINE inline + #else + #define UI_INLINE + #endif +#else + #ifdef __clang__ + #define UI_INLINE static inline + #else + #define UI_INLINE inline + #endif +#endif + +#define UI_MAX_KIND 16 + +#define UI_ANY_BUTTON0_INPUT (UI_BUTTON0_DOWN \ + |UI_BUTTON0_UP \ + |UI_BUTTON0_HOT_UP \ + |UI_BUTTON0_CAPTURE) + +#define UI_ANY_BUTTON2_INPUT (UI_BUTTON2_DOWN) + +#define UI_ANY_MOUSE_INPUT (UI_ANY_BUTTON0_INPUT \ + |UI_ANY_BUTTON2_INPUT) + +#define UI_ANY_KEY_INPUT (UI_KEY_DOWN \ + |UI_KEY_UP \ + |UI_CHAR) + +#define UI_ANY_INPUT (UI_ANY_MOUSE_INPUT \ + |UI_ANY_KEY_INPUT) + +enum { + // extra item flags + + // bit 0-2 + UI_ITEM_BOX_MODEL_MASK = 0x000007, + // bit 0-4 + UI_ITEM_BOX_MASK = 0x00001F, + // bit 5-8 + UI_ITEM_LAYOUT_MASK = 0x0003E0, + // bit 9-18 + UI_ITEM_EVENT_MASK = 0x07FC00, + // item is frozen (bit 19) + UI_ITEM_FROZEN = 0x080000, + // item handle is pointer to data (bit 20) + UI_ITEM_DATA = 0x100000, + // item has been inserted (bit 21) + UI_ITEM_INSERTED = 0x200000, + // horizontal size has been explicitly set (bit 22) + UI_ITEM_HFIXED = 0x400000, + // vertical size has been explicitly set (bit 23) + UI_ITEM_VFIXED = 0x800000, + // bit 22-23 + UI_ITEM_FIXED_MASK = 0xC00000, + + // which flag bits will be compared + UI_ITEM_COMPARE_MASK = UI_ITEM_BOX_MODEL_MASK + | (UI_ITEM_LAYOUT_MASK & ~UI_BREAK) + | UI_ITEM_EVENT_MASK + | UI_USERMASK, +}; + +typedef struct UIitem { + // data handle + void *handle; + + // about 27 bits worth of flags + unsigned int flags; + + // index of first kid + // if old item: index of equivalent new item + int firstkid; + // index of next sibling with same parent + int nextitem; + + // margin offsets, interpretation depends on flags + // after layouting, the first two components are absolute coordinates + short margins[4]; + // size + short size[2]; +} UIitem; + +typedef enum UIstate { + UI_STATE_IDLE = 0, + UI_STATE_CAPTURE, +} UIstate; + +typedef enum UIstage { + UI_STAGE_LAYOUT = 0, + UI_STAGE_POST_LAYOUT, + UI_STAGE_PROCESS, +} UIstage; + +typedef struct UIhandleEntry { + unsigned int key; + int item; +} UIhandleEntry; + +typedef struct UIinputEvent { + unsigned int key; + unsigned int mod; + UIevent event; +} UIinputEvent; + +struct UIcontext { + unsigned int item_capacity; + unsigned int buffer_capacity; + + // handler + UIhandler handler; + // User data + void *handle; + + // button state in this frame + unsigned long long buttons; + // button state in the previous frame + unsigned long long last_buttons; + + // where the cursor was at the beginning of the active state + UIvec2 start_cursor; + // where the cursor was last frame + UIvec2 last_cursor; + // where the cursor is currently + UIvec2 cursor; + // accumulated scroll wheel offsets + UIvec2 scroll; + + int active_item; + int focus_item; + int last_hot_item; + int last_click_item; + int hot_item; + + UIstate state; + UIstage stage; + unsigned int active_key; + unsigned int active_modifier; + unsigned int active_button_modifier; + int last_timestamp; + int last_click_timestamp; + int clicks; + + int count; + int last_count; + int eventcount; + unsigned int datasize; + + UIitem *items; + unsigned char *data; + UIitem *last_items; + int *item_map; + UIinputEvent events[UI_MAX_INPUT_EVENTS]; +}; + +UI_INLINE int ui_max(int a, int b) { + return (a>b)?a:b; +} + +UI_INLINE int ui_min(int a, int b) { + return (ab)?a:b; +} + +UI_INLINE float ui_minf(float a, float b) { + return (alast_count = ui_context->count; + ui_context->count = 0; + ui_context->datasize = 0; + ui_context->hot_item = -1; + // swap buffers + UIitem *items = ui_context->items; + ui_context->items = ui_context->last_items; + ui_context->last_items = items; + for (i = 0; i < ui_context->last_count; ++i) { + ui_context->item_map[i] = -1; + } +} + +static UIcontext *uiInitializeContext( + UIcontext *ctx, + unsigned int item_capacity, + unsigned int buffer_capacity) { + memset(ctx, 0, sizeof(UIcontext)); + ctx->item_capacity = item_capacity; + ctx->buffer_capacity = buffer_capacity; + ctx->stage = UI_STAGE_PROCESS; + ctx->items = (UIitem *)malloc(sizeof(UIitem) * item_capacity); + ctx->last_items = (UIitem *)malloc(sizeof(UIitem) * item_capacity); + ctx->item_map = (int *)malloc(sizeof(int) * item_capacity); + if (buffer_capacity) { + ctx->data = (unsigned char *)malloc(buffer_capacity); + } + return ctx; +} + +UIcontext *uiCreateContext( + unsigned int item_capacity, + unsigned int buffer_capacity) { + assert(item_capacity); + UIcontext *ctx = (UIcontext *)malloc(sizeof(UIcontext)); + uiInitializeContext(ctx, item_capacity, buffer_capacity); + uiClear(ctx); + uiClearState(ctx); + return ctx; +} + +void uiDestroyContext(UIcontext *ctx) { + free(ctx->items); + free(ctx->last_items); + free(ctx->item_map); + free(ctx->data); + free(ctx); +} + +void uiSetContextHandle(UIcontext *ui_context, void *handle) { + assert(ui_context); + ui_context->handle = handle; +} + +void *uiGetContextHandle(UIcontext *ui_context) { + assert(ui_context); + return ui_context->handle; +} + + +void uiSetButton(UIcontext *ui_context, unsigned int button, unsigned int mod, bool enabled) { + assert(ui_context); + unsigned long long mask = 1ull<buttons = (enabled)? + (ui_context->buttons | mask): + (ui_context->buttons & ~mask); + ui_context->active_button_modifier = mod; +} + +static void uiAddInputEvent(UIcontext *ui_context, UIinputEvent event) { + assert(ui_context); + if (ui_context->eventcount == UI_MAX_INPUT_EVENTS) return; + ui_context->events[ui_context->eventcount++] = event; +} + +static void uiClearInputEvents(UIcontext *ui_context) { + assert(ui_context); + ui_context->eventcount = 0; + ui_context->scroll.x = 0; + ui_context->scroll.y = 0; +} + +void uiSetKey(UIcontext *ui_context, unsigned int key, unsigned int mod, bool enabled) { + assert(ui_context); + UIinputEvent event = { key, mod, enabled?UI_KEY_DOWN:UI_KEY_UP }; + uiAddInputEvent(ui_context, event); +} + +void uiSetChar(UIcontext *ui_context, unsigned int value) { + assert(ui_context); + UIinputEvent event = { value, 0, UI_CHAR }; + uiAddInputEvent(ui_context, event); +} + +void uiSetScroll(UIcontext *ui_context, int x, int y) { + assert(ui_context); + ui_context->scroll.x += x; + ui_context->scroll.y += y; +} + +UIvec2 uiGetScroll(UIcontext *ui_context) { + assert(ui_context); + return ui_context->scroll; +} + +int uiGetLastButton(UIcontext *ui_context, unsigned int button) { + assert(ui_context); + return (ui_context->last_buttons & (1ull<buttons & (1ull<cursor.x = x; + ui_context->cursor.y = y; +} + +UIvec2 uiGetCursor(UIcontext *ui_context) { + assert(ui_context); + return ui_context->cursor; +} + +UIvec2 uiGetCursorStart(UIcontext *ui_context) { + assert(ui_context); + return ui_context->start_cursor; +} + +UIvec2 uiGetCursorDelta(UIcontext *ui_context) { + assert(ui_context); + UIvec2 result = {{{ + ui_context->cursor.x - ui_context->last_cursor.x, + ui_context->cursor.y - ui_context->last_cursor.y + }}}; + return result; +} + +UIvec2 uiGetCursorStartDelta(UIcontext *ui_context) { + assert(ui_context); + UIvec2 result = {{{ + ui_context->cursor.x - ui_context->start_cursor.x, + ui_context->cursor.y - ui_context->start_cursor.y + }}}; + return result; +} + +unsigned int uiGetKey(UIcontext *ui_context) { + assert(ui_context); + return ui_context->active_key; +} + +unsigned int uiGetModifier(UIcontext *ui_context) { + assert(ui_context); + return ui_context->active_modifier; +} + +int uiGetItemCount(UIcontext *ui_context) { + assert(ui_context); + return ui_context->count; +} + +int uiGetLastItemCount(UIcontext *ui_context) { + assert(ui_context); + return ui_context->last_count; +} + +unsigned int uiGetAllocSize(UIcontext *ui_context) { + assert(ui_context); + return ui_context->datasize; +} + +UIitem *uiItemPtr(UIcontext *ui_context, int item) { + assert(ui_context && (item >= 0) && (item < ui_context->count)); + return ui_context->items + item; +} + +UIitem *uiLastItemPtr(UIcontext *ui_context, int item) { + assert(ui_context && (item >= 0) && (item < ui_context->last_count)); + return ui_context->last_items + item; +} + +int uiGetHotItem(UIcontext *ui_context) { + assert(ui_context); + return ui_context->hot_item; +} + +void uiFocus(UIcontext *ui_context, int item) { + assert(ui_context && (item >= -1) && (item < ui_context->count)); + assert(ui_context->stage != UI_STAGE_LAYOUT); + ui_context->focus_item = item; +} + +static void uiValidateStateItems(UIcontext *ui_context) { + assert(ui_context); + ui_context->last_hot_item = uiRecoverItem(ui_context, ui_context->last_hot_item); + ui_context->active_item = uiRecoverItem(ui_context, ui_context->active_item); + ui_context->focus_item = uiRecoverItem(ui_context, ui_context->focus_item); + ui_context->last_click_item = uiRecoverItem(ui_context, ui_context->last_click_item); +} + +int uiGetFocusedItem(UIcontext *ui_context) { + assert(ui_context); + return ui_context->focus_item; +} + + +void uiBeginLayout(UIcontext *ui_context) { + assert(ui_context); + assert(ui_context->stage == UI_STAGE_PROCESS); // must run uiEndLayout(), uiProcess() first + uiClear(ui_context); + ui_context->stage = UI_STAGE_LAYOUT; +} + +void uiClearState(UIcontext *ui_context) { + assert(ui_context); + ui_context->last_hot_item = -1; + ui_context->active_item = -1; + ui_context->focus_item = -1; + ui_context->last_click_item = -1; +} + +int uiItem(UIcontext *ui_context) { + assert(ui_context); + assert(ui_context->stage == UI_STAGE_LAYOUT); // must run between uiBeginLayout() and uiEndLayout() + assert(ui_context->count < (int)ui_context->item_capacity); + int idx = ui_context->count++; + UIitem *item = uiItemPtr(ui_context, idx); + memset(item, 0, sizeof(UIitem)); + item->firstkid = -1; + item->nextitem = -1; + return idx; +} + +void uiNotifyItem(UIcontext *ui_context, int item, UIevent event) { + assert(ui_context); + if (!ui_context->handler) + return; + assert((event & UI_ITEM_EVENT_MASK) == event); + UIitem *pitem = uiItemPtr(ui_context, item); + if (pitem->flags & event) { + ui_context->handler(ui_context, item, event); + } +} + +UI_INLINE int uiLastChild(UIcontext *ui_context, int item) { + item = uiFirstChild(ui_context, item); + if (item < 0) + return -1; + while (true) { + int nextitem = uiNextSibling(ui_context, item); + if (nextitem < 0) + return item; + item = nextitem; + } +} + +int uiAppend(UIcontext *ui_context, int item, int sibling) { + assert(sibling > 0); + UIitem *pitem = uiItemPtr(ui_context, item); + UIitem *psibling = uiItemPtr(ui_context, sibling); + assert(!(psibling->flags & UI_ITEM_INSERTED)); + psibling->nextitem = pitem->nextitem; + psibling->flags |= UI_ITEM_INSERTED; + pitem->nextitem = sibling; + return sibling; +} + +int uiInsert(UIcontext *ui_context, int item, int child) { + assert(child > 0); + UIitem *pparent = uiItemPtr(ui_context, item); + UIitem *pchild = uiItemPtr(ui_context, child); + assert(!(pchild->flags & UI_ITEM_INSERTED)); + if (pparent->firstkid < 0) { + pparent->firstkid = child; + pchild->flags |= UI_ITEM_INSERTED; + } else { + uiAppend(ui_context, uiLastChild(ui_context, item), child); + } + return child; +} + +int uiInsertFront(UIcontext *ui_context, int item, int child) { + return uiInsert(ui_context, item, child); +} + +int uiInsertBack(UIcontext *ui_context, int item, int child) { + assert(child > 0); + UIitem *pparent = uiItemPtr(ui_context, item); + UIitem *pchild = uiItemPtr(ui_context, child); + assert(!(pchild->flags & UI_ITEM_INSERTED)); + pchild->nextitem = pparent->firstkid; + pparent->firstkid = child; + pchild->flags |= UI_ITEM_INSERTED; + return child; +} + +void uiSetFrozen(UIcontext *ui_context, int item, bool enable) { + UIitem *pitem = uiItemPtr(ui_context, item); + if (enable) + pitem->flags |= UI_ITEM_FROZEN; + else + pitem->flags &= ~UI_ITEM_FROZEN; +} + +void uiSetSize(UIcontext *ui_context, int item, int w, int h) { + UIitem *pitem = uiItemPtr(ui_context, item); + pitem->size[0] = w; + pitem->size[1] = h; + if (!w) + pitem->flags &= ~UI_ITEM_HFIXED; + else + pitem->flags |= UI_ITEM_HFIXED; + if (!h) + pitem->flags &= ~UI_ITEM_VFIXED; + else + pitem->flags |= UI_ITEM_VFIXED; +} + +int uiGetWidth(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->size[0]; +} + +int uiGetHeight(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->size[1]; +} + +void uiSetLayout(UIcontext *ui_context, int item, unsigned int flags) { + UIitem *pitem = uiItemPtr(ui_context, item); + assert((flags & UI_ITEM_LAYOUT_MASK) == (unsigned int)flags); + pitem->flags &= ~UI_ITEM_LAYOUT_MASK; + pitem->flags |= flags & UI_ITEM_LAYOUT_MASK; +} + +unsigned int uiGetLayout(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->flags & UI_ITEM_LAYOUT_MASK; +} + +void uiSetBox(UIcontext *ui_context, int item, unsigned int flags) { + UIitem *pitem = uiItemPtr(ui_context, item); + assert((flags & UI_ITEM_BOX_MASK) == (unsigned int)flags); + pitem->flags &= ~UI_ITEM_BOX_MASK; + pitem->flags |= flags & UI_ITEM_BOX_MASK; +} + +unsigned int uiGetBox(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->flags & UI_ITEM_BOX_MASK; +} + +void uiSetMargins(UIcontext *ui_context, int item, short l, short t, short r, short b) { + UIitem *pitem = uiItemPtr(ui_context, item); + pitem->margins[0] = l; + pitem->margins[1] = t; + pitem->margins[2] = r; + pitem->margins[3] = b; +} + +short uiGetMarginLeft(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->margins[0]; +} +short uiGetMarginTop(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->margins[1]; +} +short uiGetMarginRight(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->margins[2]; +} +short uiGetMarginDown(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->margins[3]; +} + +// compute bounding box of all items super-imposed +UI_INLINE void uiComputeImposedSize(UIcontext *ui_context, UIitem *pitem, int dim) { + int wdim = dim+2; + // largest size is required size + short need_size = 0; + int kid = pitem->firstkid; + while (kid >= 0) { + UIitem *pkid = uiItemPtr(ui_context, kid); + + // width = start margin + calculated width + end margin + int kidsize = pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim]; + need_size = ui_max(need_size, kidsize); + kid = uiNextSibling(ui_context, kid); + } + pitem->size[dim] = need_size; +} + +// compute bounding box of all items stacked +UI_INLINE void uiComputeStackedSize(UIcontext *ui_context, UIitem *pitem, int dim) { + int wdim = dim+2; + short need_size = 0; + int kid = pitem->firstkid; + while (kid >= 0) { + UIitem *pkid = uiItemPtr(ui_context, kid); + // width += start margin + calculated width + end margin + need_size += pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim]; + kid = uiNextSibling(ui_context, kid); + } + pitem->size[dim] = need_size; +} + +// compute bounding box of all items stacked, repeating when breaking +UI_INLINE void uiComputeWrappedStackedSize(UIcontext *ui_context, UIitem *pitem, int dim) { + int wdim = dim+2; + + short need_size = 0; + short need_size2 = 0; + int kid = pitem->firstkid; + while (kid >= 0) { + UIitem *pkid = uiItemPtr(ui_context, kid); + + // if next position moved back, we assume a new line + if (pkid->flags & UI_BREAK) { + need_size2 = ui_max(need_size2, need_size); + // newline + need_size = 0; + } + + // width = start margin + calculated width + end margin + need_size += pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim]; + kid = uiNextSibling(ui_context, kid); + } + pitem->size[dim] = ui_max(need_size2, need_size); +} + +// compute bounding box of all items stacked + wrapped +UI_INLINE void uiComputeWrappedSize(UIcontext *ui_context, UIitem *pitem, int dim) { + int wdim = dim+2; + + short need_size = 0; + short need_size2 = 0; + int kid = pitem->firstkid; + while (kid >= 0) { + UIitem *pkid = uiItemPtr(ui_context, kid); + + // if next position moved back, we assume a new line + if (pkid->flags & UI_BREAK) { + need_size2 += need_size; + // newline + need_size = 0; + } + + // width = start margin + calculated width + end margin + int kidsize = pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim]; + need_size = ui_max(need_size, kidsize); + kid = uiNextSibling(ui_context, kid); + } + pitem->size[dim] = need_size2 + need_size; +} + +static void uiComputeSize(UIcontext *ui_context, int item, int dim) { + UIitem *pitem = uiItemPtr(ui_context, item); + + // children expand the size + int kid = pitem->firstkid; + while (kid >= 0) { + uiComputeSize(ui_context, kid, dim); + kid = uiNextSibling(ui_context, kid); + } + + if (pitem->size[dim]) + return; + switch(pitem->flags & UI_ITEM_BOX_MODEL_MASK) { + case UI_COLUMN|UI_WRAP: { + // flex model + if (dim) // direction + uiComputeStackedSize(ui_context, pitem, 1); + else + uiComputeImposedSize(ui_context, pitem, 0); + } break; + case UI_ROW|UI_WRAP: { + // flex model + if (!dim) // direction + uiComputeWrappedStackedSize(ui_context, pitem, 0); + else + uiComputeWrappedSize(ui_context, pitem, 1); + } break; + case UI_COLUMN: + case UI_ROW: { + // flex model + if ((pitem->flags & 1) == (unsigned int)dim) // direction + uiComputeStackedSize(ui_context, pitem, dim); + else + uiComputeImposedSize(ui_context, pitem, dim); + } break; + default: { + // layout model + uiComputeImposedSize(ui_context, pitem, dim); + } break; + } +} + +// stack all items according to their alignment +UI_INLINE void uiArrangeStacked(UIcontext *ui_context, UIitem *pitem, int dim, bool wrap) { + int wdim = dim+2; + + short space = pitem->size[dim]; + float max_x2 = (float)pitem->margins[dim] + (float)space; + + int start_kid = pitem->firstkid; + while (start_kid >= 0) { + short used = 0; + + int count = 0; // count of fillers + int squeezed_count = 0; // count of squeezable elements + int total = 0; + bool hardbreak = false; + // first pass: count items that need to be expanded, + // and the space that is used + int kid = start_kid; + int end_kid = -1; + while (kid >= 0) { + UIitem *pkid = uiItemPtr(ui_context, kid); + int flags = (pkid->flags & UI_ITEM_LAYOUT_MASK) >> dim; + int fflags = (pkid->flags & UI_ITEM_FIXED_MASK) >> dim; + short extend = used; + if ((flags & UI_HFILL) == UI_HFILL) { // grow + count++; + extend += pkid->margins[dim] + pkid->margins[wdim]; + } else { + if ((fflags & UI_ITEM_HFIXED) != UI_ITEM_HFIXED) + squeezed_count++; + extend += pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim]; + } + // wrap on end of line or manual flag + if (wrap && (total && ((extend > space) || (pkid->flags & UI_BREAK)))) { + end_kid = kid; + hardbreak = ((pkid->flags & UI_BREAK) == UI_BREAK); + // add marker for subsequent queries + pkid->flags |= UI_BREAK; + break; + } else { + used = extend; + kid = uiNextSibling(ui_context, kid); + } + total++; + } + + int extra_space = space - used; + float filler = 0.0f; + float spacer = 0.0f; + float extra_margin = 0.0f; + float eater = 0.0f; + + if (extra_space > 0) { + if (count) { + filler = (float)extra_space / (float)count; + } else if (total) { + switch(pitem->flags & UI_JUSTIFY) { + default: { + extra_margin = extra_space / 2.0f; + } break; + case UI_JUSTIFY: { + // justify when not wrapping or not in last line, + // or not manually breaking + if (!wrap || ((end_kid != -1) && !hardbreak)) + spacer = (float)extra_space / (float)(total-1); + } break; + case UI_START: { + } break; + case UI_END: { + extra_margin = extra_space; + } break; + } + } + } else if (!wrap && (extra_space < 0)) { + eater = (float)extra_space / (float)squeezed_count; + } + + // distribute width among items + float x = (float)pitem->margins[dim]; + float x1; + // second pass: distribute and rescale + kid = start_kid; + while (kid != end_kid) { + short ix0,ix1; + UIitem *pkid = uiItemPtr(ui_context, kid); + int flags = (pkid->flags & UI_ITEM_LAYOUT_MASK) >> dim; + int fflags = (pkid->flags & UI_ITEM_FIXED_MASK) >> dim; + + x += (float)pkid->margins[dim] + extra_margin; + if ((flags & UI_HFILL) == UI_HFILL) { // grow + x1 = x+filler; + } else if ((fflags & UI_ITEM_HFIXED) == UI_ITEM_HFIXED) { + x1 = x+(float)pkid->size[dim]; + } else { + // squeeze + x1 = x+ui_maxf(0.0f,(float)pkid->size[dim]+eater); + } + ix0 = (short)x; + if (wrap) + ix1 = (short)ui_minf(max_x2-(float)pkid->margins[wdim], x1); + else + ix1 = (short)x1; + pkid->margins[dim] = ix0; + pkid->size[dim] = ix1-ix0; + x = x1 + (float)pkid->margins[wdim]; + + kid = uiNextSibling(ui_context, kid); + extra_margin = spacer; + } + + start_kid = end_kid; + } +} + +// superimpose all items according to their alignment +UI_INLINE void uiArrangeImposedRange(UIcontext *ui_context, UIitem *pitem, int dim, + int start_kid, int end_kid, short offset, short space) { + int wdim = dim+2; + + int kid = start_kid; + while (kid != end_kid) { + UIitem *pkid = uiItemPtr(ui_context, kid); + + int flags = (pkid->flags & UI_ITEM_LAYOUT_MASK) >> dim; + + switch(flags & UI_HFILL) { + default: break; + case UI_HCENTER: { + pkid->margins[dim] += (space-pkid->size[dim])/2 - pkid->margins[wdim]; + } break; + case UI_RIGHT: { + pkid->margins[dim] = space-pkid->size[dim]-pkid->margins[wdim]; + } break; + case UI_HFILL: { + pkid->size[dim] = ui_max(0,space-pkid->margins[dim]-pkid->margins[wdim]); + } break; + } + pkid->margins[dim] += offset; + + kid = uiNextSibling(ui_context, kid); + } +} + +UI_INLINE void uiArrangeImposed(UIcontext *ui_context, UIitem *pitem, int dim) { + uiArrangeImposedRange(ui_context, pitem, dim, pitem->firstkid, -1, pitem->margins[dim], pitem->size[dim]); +} + +// superimpose all items according to their alignment, +// squeeze items that expand the available space +UI_INLINE void uiArrangeImposedSqueezedRange(UIcontext *ui_context, UIitem *pitem, int dim, + int start_kid, int end_kid, short offset, short space) { + int wdim = dim+2; + + int kid = start_kid; + while (kid != end_kid) { + UIitem *pkid = uiItemPtr(ui_context, kid); + + int flags = (pkid->flags & UI_ITEM_LAYOUT_MASK) >> dim; + + short min_size = ui_max(0,space-pkid->margins[dim]-pkid->margins[wdim]); + switch(flags & UI_HFILL) { + default: { + pkid->size[dim] = ui_min(pkid->size[dim], min_size); + } break; + case UI_HCENTER: { + pkid->size[dim] = ui_min(pkid->size[dim], min_size); + pkid->margins[dim] += (space-pkid->size[dim])/2 - pkid->margins[wdim]; + } break; + case UI_RIGHT: { + pkid->size[dim] = ui_min(pkid->size[dim], min_size); + pkid->margins[dim] = space-pkid->size[dim]-pkid->margins[wdim]; + } break; + case UI_HFILL: { + pkid->size[dim] = min_size; + } break; + } + pkid->margins[dim] += offset; + + kid = uiNextSibling(ui_context, kid); + } +} + +UI_INLINE void uiArrangeImposedSqueezed(UIcontext *ui_context, UIitem *pitem, int dim) { + uiArrangeImposedSqueezedRange(ui_context, pitem, dim, pitem->firstkid, -1, pitem->margins[dim], pitem->size[dim]); +} + +// superimpose all items according to their alignment +UI_INLINE short uiArrangeWrappedImposedSqueezed(UIcontext *ui_context, UIitem *pitem, int dim) { + int wdim = dim+2; + + short offset = pitem->margins[dim]; + + short need_size = 0; + int kid = pitem->firstkid; + int start_kid = kid; + while (kid >= 0) { + UIitem *pkid = uiItemPtr(ui_context, kid); + + if (pkid->flags & UI_BREAK) { + uiArrangeImposedSqueezedRange(ui_context, pitem, dim, start_kid, kid, offset, need_size); + offset += need_size; + start_kid = kid; + // newline + need_size = 0; + } + + // width = start margin + calculated width + end margin + int kidsize = pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim]; + need_size = ui_max(need_size, kidsize); + kid = uiNextSibling(ui_context, kid); + } + + uiArrangeImposedSqueezedRange(ui_context, pitem, dim, start_kid, -1, offset, need_size); + offset += need_size; + return offset; +} + +static void uiArrange(UIcontext *ui_context, int item, int dim) { + UIitem *pitem = uiItemPtr(ui_context, item); + + switch(pitem->flags & UI_ITEM_BOX_MODEL_MASK) { + case UI_COLUMN|UI_WRAP: { + // flex model, wrapping + if (dim) { // direction + uiArrangeStacked(ui_context, pitem, 1, true); + // this retroactive resize will not effect parent widths + short offset = uiArrangeWrappedImposedSqueezed(ui_context, pitem, 0); + pitem->size[0] = offset - pitem->margins[0]; + } + } break; + case UI_ROW|UI_WRAP: { + // flex model, wrapping + if (!dim) { // direction + uiArrangeStacked(ui_context, pitem, 0, true); + } else { + uiArrangeWrappedImposedSqueezed(ui_context, pitem, 1); + } + } break; + case UI_COLUMN: + case UI_ROW: { + // flex model + if ((pitem->flags & 1) == (unsigned int)dim) // direction + uiArrangeStacked(ui_context, pitem, dim, false); + else + uiArrangeImposedSqueezed(ui_context, pitem, dim); + } break; + default: { + // layout model + uiArrangeImposed(ui_context, pitem, dim); + } break; + } + + int kid = uiFirstChild(ui_context, item); + while (kid >= 0) { + uiArrange(ui_context, kid, dim); + kid = uiNextSibling(ui_context, kid); + } +} + +UI_INLINE bool uiCompareItems(UIcontext *ui_context, UIitem *item1, UIitem *item2) { + return ((item1->flags & UI_ITEM_COMPARE_MASK) == (item2->flags & UI_ITEM_COMPARE_MASK)); + +} + +static bool uiMapItems(UIcontext *ui_context, int item1, int item2) { + UIitem *pitem1 = uiLastItemPtr(ui_context, item1); + if (item2 == -1) { + return false; + } + + UIitem *pitem2 = uiItemPtr(ui_context, item2); + if (!uiCompareItems(ui_context, pitem1, pitem2)) { + return false; + } + + int count = 0; + int failed = 0; + int kid1 = pitem1->firstkid; + int kid2 = pitem2->firstkid; + while (kid1 != -1) { + UIitem *pkid1 = uiLastItemPtr(ui_context, kid1); + count++; + if (!uiMapItems(ui_context, kid1, kid2)) { + failed = count; + break; + } + kid1 = pkid1->nextitem; + if (kid2 != -1) { + kid2 = uiItemPtr(ui_context, kid2)->nextitem; + } + } + + if (count && (failed == 1)) { + return false; + } + + ui_context->item_map[item1] = item2; + return true; +} + +int uiRecoverItem(UIcontext *ui_context, int olditem) { + assert(ui_context); + assert((olditem >= -1) && (olditem < ui_context->last_count)); + if (olditem == -1) return -1; + return ui_context->item_map[olditem]; +} + +void uiRemapItem(UIcontext *ui_context, int olditem, int newitem) { + assert(ui_context); + assert((olditem >= 0) && (olditem < ui_context->last_count)); + assert((newitem >= -1) && (newitem < ui_context->count)); + ui_context->item_map[olditem] = newitem; +} + +void uiEndLayout(UIcontext *ui_context) { + assert(ui_context); + assert(ui_context->stage == UI_STAGE_LAYOUT); // must run uiBeginLayout() first + + if (ui_context->count) { + uiComputeSize(ui_context, 0, 0); + uiArrange(ui_context, 0, 0); + uiComputeSize(ui_context, 0, 1); + uiArrange(ui_context, 0, 1); + + if (ui_context->last_count) { + // map old item id to new item id + uiMapItems(ui_context, 0, 0); + } + } + + uiValidateStateItems(ui_context); + if (ui_context->count) { + // drawing routines may require this to be set already + uiUpdateHotItem(ui_context); + } + + ui_context->stage = UI_STAGE_POST_LAYOUT; +} + +UIrect uiGetRect(UIcontext *ui_context, int item) { + UIitem *pitem = uiItemPtr(ui_context, item); + UIrect rc = {{{ + pitem->margins[0], pitem->margins[1], + pitem->size[0], pitem->size[1] + }}}; + return rc; +} + +int uiFirstChild(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->firstkid; +} + +int uiNextSibling(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->nextitem; +} + +void *uiAllocHandle(UIcontext *ui_context, int item, unsigned int size) { + assert((size > 0) && (size < UI_MAX_DATASIZE)); + UIitem *pitem = uiItemPtr(ui_context, item); + assert(pitem->handle == NULL); + assert((ui_context->datasize+size) <= ui_context->buffer_capacity); + pitem->handle = ui_context->data + ui_context->datasize; + pitem->flags |= UI_ITEM_DATA; + ui_context->datasize += size; + return pitem->handle; +} + +void uiSetHandle(UIcontext *ui_context, int item, void *handle) { + UIitem *pitem = uiItemPtr(ui_context, item); + assert(pitem->handle == NULL); + pitem->handle = handle; +} + +void *uiGetHandle(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->handle; +} + +void uiSetHandler(UIcontext *ui_context, UIhandler handler) { + assert(ui_context); + ui_context->handler = handler; +} + +UIhandler uiGetHandler(UIcontext *ui_context) { + assert(ui_context); + return ui_context->handler; +} + +void uiSetEvents(UIcontext *ui_context, int item, unsigned int flags) { + UIitem *pitem = uiItemPtr(ui_context, item); + pitem->flags &= ~UI_ITEM_EVENT_MASK; + pitem->flags |= flags & UI_ITEM_EVENT_MASK; +} + +unsigned int uiGetEvents(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->flags & UI_ITEM_EVENT_MASK; +} + +void uiSetFlags(UIcontext *ui_context, int item, unsigned int flags) { + UIitem *pitem = uiItemPtr(ui_context, item); + pitem->flags &= ~UI_USERMASK; + pitem->flags |= flags & UI_USERMASK; +} + +unsigned int uiGetFlags(UIcontext *ui_context, int item) { + return uiItemPtr(ui_context, item)->flags & UI_USERMASK; +} + +int uiContains(UIcontext *ui_context, int item, int x, int y) { + UIrect rect = uiGetRect(ui_context, item); + x -= rect.x; + y -= rect.y; + if ((x>=0) + && (y>=0) + && (xflags & UI_ITEM_FROZEN) return -1; + if (uiContains(ui_context, item, x, y)) { + int best_hit = -1; + int kid = uiFirstChild(ui_context, item); + while (kid >= 0) { + int hit = uiFindItem(ui_context, kid, x, y, flags, mask); + if (hit >= 0) { + best_hit = hit; + } + kid = uiNextSibling(ui_context, kid); + } + if (best_hit >= 0) { + return best_hit; + } + if (((mask == UI_ANY) && ((flags == UI_ANY) + || (pitem->flags & flags))) + || ((pitem->flags & flags) == mask)) { + return item; + } + } + return -1; +} + +void uiUpdateHotItem(UIcontext *ui_context) { + assert(ui_context); + if (!ui_context->count) return; + ui_context->hot_item = uiFindItem(ui_context, 0, + ui_context->cursor.x, ui_context->cursor.y, + UI_ANY_MOUSE_INPUT, UI_ANY); +} + +int uiGetClicks(UIcontext *ui_context) { + return ui_context->clicks; +} + +void uiProcess(UIcontext *ui_context, int timestamp) { + assert(ui_context); + + assert(ui_context->stage != UI_STAGE_LAYOUT); // must run uiBeginLayout(), uiEndLayout() first + + if (ui_context->stage == UI_STAGE_PROCESS) { + uiUpdateHotItem(ui_context); + } + ui_context->stage = UI_STAGE_PROCESS; + + if (!ui_context->count) { + uiClearInputEvents(ui_context); + return; + } + + int hot_item = ui_context->last_hot_item; + int active_item = ui_context->active_item; + int focus_item = ui_context->focus_item; + + // send all keyboard events + if (focus_item >= 0) { + int i; + for (i = 0; i < ui_context->eventcount; ++i) { + ui_context->active_key = ui_context->events[i].key; + ui_context->active_modifier = ui_context->events[i].mod; + uiNotifyItem(ui_context, focus_item, ui_context->events[i].event); + } + } else { + ui_context->focus_item = -1; + } + if (ui_context->scroll.x || ui_context->scroll.y) { + int scroll_item = uiFindItem(ui_context, 0, + ui_context->cursor.x, ui_context->cursor.y, + UI_SCROLL, UI_ANY); + if (scroll_item >= 0) { + uiNotifyItem(ui_context, scroll_item, UI_SCROLL); + } + } + + uiClearInputEvents(ui_context); + + int hot = ui_context->hot_item; + + switch(ui_context->state) { + default: + case UI_STATE_IDLE: { + ui_context->start_cursor = ui_context->cursor; + if (uiGetButton(ui_context, 0)) { + hot_item = -1; + active_item = hot; + + if (active_item != focus_item) { + focus_item = -1; + ui_context->focus_item = -1; + } + + if (active_item >= 0) { + if ( + ((timestamp - ui_context->last_click_timestamp) > UI_CLICK_THRESHOLD) + || (ui_context->last_click_item != active_item)) { + ui_context->clicks = 0; + } + ui_context->clicks++; + + ui_context->last_click_timestamp = timestamp; + ui_context->last_click_item = active_item; + ui_context->active_modifier = ui_context->active_button_modifier; + uiNotifyItem(ui_context, active_item, UI_BUTTON0_DOWN); + } + ui_context->state = UI_STATE_CAPTURE; + } else if (uiGetButton(ui_context, 2) && !uiGetLastButton(ui_context, 2)) { + hot_item = -1; + hot = uiFindItem(ui_context, 0, ui_context->cursor.x, ui_context->cursor.y, + UI_BUTTON2_DOWN, UI_ANY); + if (hot >= 0) { + ui_context->active_modifier = ui_context->active_button_modifier; + uiNotifyItem(ui_context, hot, UI_BUTTON2_DOWN); + } + } else { + hot_item = hot; + } + } break; + case UI_STATE_CAPTURE: { + if (!uiGetButton(ui_context, 0)) { + if (active_item >= 0) { + ui_context->active_modifier = ui_context->active_button_modifier; + uiNotifyItem(ui_context, active_item, UI_BUTTON0_UP); + if (active_item == hot) { + uiNotifyItem(ui_context, active_item, UI_BUTTON0_HOT_UP); + } + } + active_item = -1; + ui_context->state = UI_STATE_IDLE; + } else { + if (active_item >= 0) { + ui_context->active_modifier = ui_context->active_button_modifier; + uiNotifyItem(ui_context, active_item, UI_BUTTON0_CAPTURE); + } + if (hot == active_item) + hot_item = hot; + else + hot_item = -1; + } + } break; + } + + ui_context->last_cursor = ui_context->cursor; + ui_context->last_hot_item = hot_item; + ui_context->active_item = active_item; + + ui_context->last_timestamp = timestamp; + ui_context->last_buttons = ui_context->buttons; +} + +static int uiIsActive(UIcontext *ui_context, int item) { + assert(ui_context); + return ui_context->active_item == item; +} + +static int uiIsHot(UIcontext *ui_context, int item) { + assert(ui_context); + return ui_context->last_hot_item == item; +} + +static int uiIsFocused(UIcontext *ui_context, int item) { + assert(ui_context); + return ui_context->focus_item == item; +} + +UIitemState uiGetState(UIcontext *ui_context, int item) { + UIitem *pitem = uiItemPtr(ui_context, item); + if (pitem->flags & UI_ITEM_FROZEN) return UI_FROZEN; + if (uiIsFocused(ui_context, item)) { + if (pitem->flags & (UI_KEY_DOWN|UI_CHAR|UI_KEY_UP)) return UI_ACTIVE; + } + if (uiIsActive(ui_context, item)) { + if (pitem->flags & (UI_BUTTON0_CAPTURE|UI_BUTTON0_UP)) return UI_ACTIVE; + if ((pitem->flags & UI_BUTTON0_HOT_UP) + && uiIsHot(ui_context, item)) return UI_ACTIVE; + return UI_COLD; + } else if (uiIsHot(ui_context, item)) { + return UI_HOT; + } + return UI_COLD; +} + +#endif // OUI_IMPLEMENTATION diff --git a/dpf/dgl/src/oui-blendish/resources/DejaVuSans.ttf b/dpf/dgl/src/oui-blendish/resources/DejaVuSans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9d40c325694b3bfb8cdd4c0146ad44379d5c4ade GIT binary patch literal 741536 zcmeFa51da`{y%=s{rCQN-|u<Uv-{cK@3HUuc)jlH{krF# zd(P{;&g=EM=bn2m0MWjx{|TgLvVi20mBPM9(o{j z1phZM7B>crD$Zi}r(e(5wk^oBe9*|j!++Fl)KJE@<3D?OaKVEknFkyDQ!)OVg9{%S zv^!_(E%-lydAm;;a$mtfcINg6m@nIlG59XMV*ykPXmTDKZMV*WbqaDLW^g5mdN z7Tz`=|8f2gydxiYu=sZycV5l>_ZBjC@pm!;U zK>uC&40NgT1?V!R4D^@Em!MB7CqbW55=>Q@iZZBN)j;d24%$!+&>qzT+N=6N`&B>a zfNFvcYH`LjTdT=bt(I;wt_SrXQ}mFY0y?axF;%}puK~KIo(?)g&j6jNXM)bsb3oVC z>w?bJJA&?{cLLp6?*h83-W~b$(2GDnsQ(!J3Hno@XXrCPKW&5{qeZm=aqVTglYe>oKH>t%`jD{{Gm0(0{RRXWYuSP%5jt)g5#Xs|V;itUH-v^|E?_ zbC)#$^gwG5=#Q)ep#K_Q!+89+@wb>7-(=g2+i5mrXlL1vfF5Iy0sW}`G4w|x?GPFg zhHfOaLV-Sf$P{IdvIi~xk@6AKl)caj1^Vz0;A7APPMV-V6Hb9Xt(*b>tnxMJa_EKv ztx(YJ_<`1-A)K_;&-W>PnANU*=N@cKK~X_}Ho2f^_z1S7e^J5xY}J5*5f8Er1BTpJ z#I_B1q^OYX8GPRZMXYRa(S5@>8&WXhejXljU;iRrYgoaE0^Xpo;DIdOys)5n1aCjQ zpm+$MJYpC)GandSFr3dXdT2xuUsgP5#9+Rrcu2whd^6RTB@$GYI8!^_k)Orl-Mh2{ zz9U~?CXPa_ArYfWY9XoQnHQtOOu4NSatU|OZwp+JmkO(Lp>xD_E_Mud4rRF5SsL@Q zX3TqQ_uH~qvrdFN6TYo$XK=a@o!?a)?cS-oz{GJ%#J|N=g+)o0MwCsj_$Q9|gtcQW z2)7~@oTUIOuvTKPV>2KvFY^)CWI@{dSpa+P z{F9b1sl5tn6J~W-1J;zaWNlez)`Rt716d&}W@FhTHjT|=i;%0(z-i8YKlaE)5qz=V zgS`e#9b~je36Ro%4*#(?2g!ZbHp#EORsPSOf<4Z>PW;Ed#R(k8zU2b^*O<|&$4%vJ z$G5L_=lGHHP&*v?(LT9o0Iz)gRJF>*HLM z&=}Ztq-P9vQe<2ev%PFN^b79`SyHD|3LlMbv4q|%%9V}l@4$n*u;LHu z#ri1yVf_((jQ*%TRv)kbSf2rlb%kBSu4&h@)9nmcuWyo8NGBhFxPkQr3vyp&N zfU$syfGL3KfLVY!fcbz$fMtM{fHi>i0IH29{3rWQV^#|`iL)HEr_gu)b>Y_sKymmi z&J?4q@k7!oKS~+K(IwbB7%ko!X?o#IgEXuL%YxQ5!tqH4eE8Reo`=uFgFGXWN0|X1 z+1j|#Xk*-Dw8J%|Z)DV8YTznafLuT$KvO^qk(Y)x1s?ChZVqVPn?v*YER-tyUufk5 zwgkGoimhcE*k-nk?PPn{es+kJvg7O|JI597Q-jnhum!LkfT$MMhOq;H!+@iJ6M)lza;PEfB8Ogb_(2Z8 z%4-4Y0O|o61DXL^0@?uD3%TI;--Ly6{l?`{+H&ZkG9CKe61HY6?93F{m|3td^I=<- z!LF=RVd;^ZOi5Vg@5To8QNdwM*q`e7ypp?X;l84qe@R+D zElTw-FrwqCX^af?F%c!B4PmQ*N&$>9iz**JvAuo%oSZL~raHg+wZ07p z)(P<=?7E4#G>W*RIlOdl#Ejz+D~fv}#3AZ{1Y$*-1J*vlaOHb9~x~->)Q3Q+_$QWAOU9<+Y19Sv*1M~#+0rUq90gM0?1I7R*044*b z0cOIYKZX7Gfsu`fBP(%iNeuQhwhjIMer=bwS395`){bf?w9{I-uIYZ%E3Vhl>*)3L z#(FcorQSwwk5P|&y_eosAE*!2M-A0gR(*%Q zTi>T2)JybZdYOL4Kxk)}Mie6<8AguLz-VGL$4E$9ql3}K=wb9W`Wb_aLZiqSZHzZ2 z8B>iJ#%yD*vA|ejEH_peYmE)YW@DSN)7WF|Hx3!4#&P4Man7T7yq=K9^3?ETd2&6C zJWV|~Co-v*Yp2?nRo|&HKJ@Y&ZJxe_+JgYtHJR3b* zJlj3HJbOI{Jcm6;JtsV;J>_1_>-UDeac?be9dA8vV{bEWOK%%*dv9lNzPFdRuXmt# zsCT4yly|ImqIZgSx_6d$j(5Iyk$0JQrFV^Yy?2v$t9OTYw|AfSptr<(%vO^X>HQ@$L5=@|F6I`%e1K`4zv{AM#uN8vZPQuD_ALslSE4wZEOe zqraQKr@xQCzki5-gumE7#y`P7*+0!c)Bn7Go`0c#segrkwSS#|qkoHkyMLE|um6Dm zu>Yw4g#Wa^JfH>qfp8!ms1>M#5vRt1W`UN0Hi7nm&Vl?uuR!0xz`)SJ$iOI!Kurux z2~5Yh)11Kkz@or1j5n<;V;91N5Mjs?mBXG~@qrfEjaG&94@F&mgo z%;sh*v#r^|>|*vXdz<~tL1v*@WR5n+o0H6`<_vSTIoDiZE-{yztIW0L26MBy&D?43 zG54E?%u@5XdD1)=RD#}MC};(11hayR!FIup!EV8x!9KzM!6CsB!Q$YU z;Dq4h;I!b(;Pb(G!G*!4!4<*P!F9on!7ahUZ`=XS*T^GO{jgSb0|O5E7UhMFf=qYGBheQHZ(CbB{V%WD>NrGKeQ;cEVMGT zCbT}ZDYP}TBeXlTFLW?e5;_(t3!O<}DMpH!5=}`<$wx@FJ(|lVMh%foJ=_vR>IzJC~SpmgtNlA;YQ)6;TGZ6;dbGU;cnrc;XdL1;UVD>;o|U^@PzQ> z@U-yE@blq$;f3L);T7T4;dSAS;Vt3q;a%aq;RE5r;iKUb;nU&rh!*ij!jX8SR-{g( zUZioPS)^s8O{9IKb0j~~E7CVIFfueUGBPSMHZn0XB{DrSD>5fCKe8yYEV44PCbB-V zDY7-PBeFZPFLE$a5;+zri=2tFs1Y@z(P&yUBbpO!5N#4|9&HtE8|@J7673P~9qkt# z6fKMvMMp=+M<+$6MrTB4N9RTtM3+RDM^{DHMmIz^N4G_HM)ySbM-N3yqsOBsqvv8u z%o_{EtXPd$RxCHxDAqLABGx*Fm`{Oc2fjmK{xQ*~3BODnVV5~?RLN2PAZYe?;=e@v z+C(2EdJW-nfhoS>{MUk3!-U5s&fr>eD9!DZhEghd#Mwkx7+LjAe;F-8O$%PwzJqnygxEB`~G~XzWI#}jLSm`CwoQH+P z?iT4C{2`?w%o~YPsaXl!Zz}6Vd6IOwxYIvQDUS)7Q>nPT3YFPOPvvye$&yoPCzba_ zo=#mPN7jqzWQ}CKE`cj*iri2JAu)-i9KI-DP$7+rNJf_Ya`1W5J71nsk|aGTD|NLf zkAq2)>S}5)msBfcD_S;-B#^|AypvCsb5^x9lz-OOXh(T2bOtR_1s^+y7)$ktGzzts z#Nb4e9Ot?ub14U@dyWRm_KlMc-%8p`y-DdyoEKfVUnQ;16tuV($5nZ^-5sgQ0TD4>Nn;~ z%@mk7q~1z6slAuYmpVXL_8P@-TD+pItMFaDKY$fvfT_mcEkD zW$(CHA942=NxSTcyT7>g7Is5OiSWhwQey??GstQYzF7LC-imf~(^c9+_L_WZYp1l- z`fi!K%H}S=JD)0=-;k__#AFYpRg{>$O`6b%EOxb{$&_M*oi~zLrmu#}Fs7Nb|88I4 z_6Sn)=~O$yRm)kala3#ubEVgCe22R(j>RV3b9ocD94@NcRdo{96`BcLRrf@Bpp(Lb zR7qdSui~fNnsyN#t73bnijpf5yZze5__>r`Vt0Bs-{l8+chX_PZvR+?Kb5pmdQ7S* zKSs5?2p_tA!9FhSKd`V-)GimW2`;@wyH{9vlt)Akgr!Gz{Ia`Vj?Jh1UA8OfwW+4A z{^ITzZXK&ACt1uzVxZ5WYa3q(xGr+CO2<>N|uTj?0=!t0OepAzIYAj18GDMg)o0?_bvylY z%m#W2Gi%zgS1^xe4^N42jql>m#COL(<@0RS4)7Ir&<^t7iup2pt^Jt&F-D#_3txJK z(TIx~A9&WzFk;H^^p)X>JHyy1WBmYw0EGaIm*eR>!+0vg6L^Ma@C+lX4A0>iJ&FIf zjWa58_DUI^rE)w4FqzFRZ+1ZPIV@KOU^JBTKVwcAXD0;a%LGx|!aLnR;{mI<)%rdP|H2x6<3NNbEJtt%~CuuGa!)7`;xGRgQ9(TzZsS z%xhq?G54Wj-20*&%#BKpjXPV+oDBj;VTdD=p4 zskTB}t*z5GYFo7J{~JsH-&p$p#?t>cmi~V~mJU0aPuB7Z!rcYt>7IE4i`j8}qjpfx z!gKI49kGU_)k$gz9qkMsI7!VHSOcw075pTob7xS>8G=^UVQvC2rRk++fv%447S~b; zaL*YSJ~-)OYKb)8yM-6cm#Qt~&7vrw<4ghig~L>-lNvW`+p z)iGUnos=Zu>e6#_qzubQo+LNqFWTrLSV}dCN#RTm89=$kUYNo)vA@xeaNqxQmUuwIMWJA(A!fs9AWkPQiLma&* z-`%@=QF}@JJ@Kpd8rjwoJN<=v4fQYTQz$2Dl*F@TZwu=o?IdqR5_7OP${R`SP9yp<_!3v9*+}}6?%9E(4)#7TXu{Ht zx&4C6J1D)h8c5ktZ(o7sQNkC~XV`gRmvRM08dz_Mc|)0-z!%f)q_1&lt5o-2Q`JexM`D)+h7O2+N4Sco%O&3@u`9ijOZiLe_JiHY z{}Ps-(eaNizT+#)NJFIGJSJ(`BV3;J7}eV41)%?EFU26;ApgkAqz|p+L(iq30(SSQ zr2i!=y9gsv z5~XcO?LruJK_7Rdluka#g{3!iW9b>)Sdm`Rjb9``b!jX;sT)^IFFmXqE97n6*zvs5 z|GK;|CtobFLLS+TIeBL{mY&*;r7w14l{~l`JKkLSbeCs$Jhj!6$r-bY6G)Hjp;*KLc=Pm}D?m1&Zk z%BV(Oi;Wgnk=Wt5A_N)b@)-G6!qV=!EndZ0=fw{fh$v!SM7*4E_1+DRINH4uOIyla z@{y5-+YerVL;lDW2Pzn4%+vEQ26?rPu}jR$Y>78e#b~oiqs@6V+FYMTn~Q0*d8Qa` zW@R+mJeo$Ee@dgx&(dh~JQ{8Og&1w-UqN;m7a!@vo2+3Yf*G7K!!lA0`vN0>85pG- z1DF7q444KGvp=2(%mXY0ECs9ptOl$DYy@lpYzOQD>;)VE90nW(oB)WKTjlIh?{<9O zBZD-*8{>?aJ$+gDTa6@QHvCCwNf_h7>6h`oTyjMG{5O-heh=isq5A^=L|}Dac{*rA z@)K=9Payhk!gUDOCw^<9Zzc?cloFp5v>{WDC%(k=4A03;Ua=`1r5Sbld_fye5{Kr- z$x?Y+3Jzff?~i2|Eif#8kI|Qjv3pg#PbS`mMw$@70>C~2;~Y2Ubs#a$TSH!%tPN|A zcP{hsrdeOSX*ZOO{6_D+KxW!7)OECmca!y>2(0cS+R)}y@F!?vK;NyQFY9$Qytk&; z*M63XqKKr{Q24}Av0|X zIAQG};L+L)QFENgyM}tWl=feMr^;v^N9<; zLw3k{hwS2SpNZ$p(*d&pa{%)JivY_2D*j9epTLC)&y8-(E2LUC3V}LTi8HU0D z&}Y8o8!CA3L%idi#3HkDAmWr)^4)3v?R4dJm2Yz`eVT?SRTu9~KFb^Nro07j&D-&g zyc_Sy`|$pJ2p_?V`4~QdPv+D3O#VEd#~1RYd<9?4*YS;f3*XLn@xA;2Kg^Hv6Z|w@ zP1F>>5?10$Eu{`tifF7fQ(7u*l=ezzB_A<=UuB>&R2iv^QpPG1l_|<}WtK8WnXfET zmMJThHOhKrld@IWq3l-nDF>Ajyc1QXoWYt9hH9!&HBHS>bJPZE6ScY8N^PrlP`ju- z)ZS`8b&y)97OA7v@wf+=s?Jbnt8>)_>JoLix=LNEZcsO?+ti)v9(BKZNG(;5t0&cS znxc8NkY;H$v@9)GYos;RT4=4cc3MZRo7Pk7qxIK@Xd|>@ZHzWSo2*UKW@^uiCqhDz zMBM#9{67i&PXhmO2`G5SJBR%MmbV?d2cBmRwq|&uyp~;y=gIG|=I{f5#w`9Xu(jm% zczt#Qzlq<(et>sgJFwRLcAn2}FMm4o5y^cSrsa`3Jiv z@_FP0>l-b{0z~~{o>+tp#QO{B?15NjESo(Ns~2m?#^XJP)@)*|4c=sUDqb2dg@?m? z_gImo2fQU?en9v<`_dnCKRDtb`37AY%YY1$D=~1Tqj>*TIqDe>JX_E_lQ<6&9_JiI z45OBN@P0bp!g~u+`hfj|r|>IL6L@UA6#1I6(tUmRTafBBWjD^AiR<6R{^i^AyavzW zx&J*L1-BLn;i=Wm0xMX}33#5s;+=6|nkB~@5=~gmqcjT$ix`3{BGTaMpNSSx2xgNI zo-MF57cbLA$LZ*Ugy|~EIHGMzBd=Hu%j7*d?!}JVyC!6j;e8+>tmLL`%uom&(n#I;Auo z6=&&>2y9$SbUT678w6I~6WD1%DS6p;vVCXLQ7IF7^>GxR-i2P2%ko$~)(~q>G+|e> zrm!C^U|rhb{^J(Rx$1x6u`=i;g9mC5k+m~@A7T@Jy@JLEKNEr%ymi+U!Jd? z?+?C>uqgk)TTi~2KNi4yPc`wz)Ag}du^-^Qrys^k?aAn=Vr3Z-%;IjToU|!rOK>)p zM8I3#{55r;I#eC0j#9^}6V)l|baj?GN1d-OQkSVK)ivsRb(6YP-J$MQ_o)Zf67`r` zrk=s#GKOYqQ7ui&&~mf}S`)3g)=F!ub1bwnT4PzV6>+|%5`ci#`zFJ?WZ`8Nw+x1=gUj2Z6SU;+t z&`;~-hGzINQV}<58Fh?$Mq{Iy(Gu&4v^P2%`9?3JuQAXVYK$~S8Dou!#uQ_^G0T`^ z%r_Pp%Z!!A8e_e&$=GV_Fm@aJjDtpram*+)&R~Hy!()1)o-|K}C&$yk)5O!<)5_D< z)4|il)5Fu-)6X-=Q|Kx3jP{K8O!7?i%<#+H+-_44)g4fGB5jr5K3jrC3RP4P|l&GOCh&G#+xE%UAPt?{k* zZSrmP?eOjP?eiV0SoJ#Wd(8rjRH*rEds3r?E)PG-2y!WeFFUhLjofL#ep$_34zICr2(vMHZQO+ zur#nDusX0VuraVDusyIVus3iZa5!)@a3XLzP;P3b-wc~^vzA%MtYeWxz9XkmYB!P zGV@H31&yE?j0V$!8Nr-jgJ6?j^I)rB+hB)amtc=z?_j^+pkQIJC^$MeJ~#>e?+LOw z-wumWF+6(|*zreV9L(`Y(krRb8jDyUX=xh^dnJ!5FVMNtett=`^j7m+wDdL42##at zr5BUerL&~XREj8#wD4q~l{bhZM)RurIB99=&R!u8nDkRrHpwB|tA0l3N-rtPDbFI` zp^(i|>WVa6+?#X92lW-SdJA#-6YfVjUxvq2|0dEW%X2>M5n2tTM!pf88QWS%I1n*9G#KnAuo@(Smd*tFpUp#>G!1$ z^dOnYGy^D&j0ap%fzpQf5>u%-U0oSU=SnPd>rWi1A>_v$$&-$WHAhf>58(-fslU)* z4dOI9_n5#^OV!ULO?=sQ4i@LizN1l%uy&>3NKK{)L~*b}af%xw~Hwtqi1`DRy#tlS5MuV*H&eEd}NdE%;757SK^K zn_R3^C-6%NF-|R|{W4wsUgFD0&y|~6F8FFW|5e55_0S~!~Q zj!UU$Rne|_bX_WyO4hH+QCasIlt${3qg^h}6-2ioERXgQw0!GDnMiyp4}Xp5-&eyj zdYnOgiRHBh6Nk#+*eGe2NDc~J#d!xvYKYsa94*IPmokX((Q>Tj1zO;vVpTBE0v{D? ziGc=oTNO90J|oJ&#ki*9JG8b$=TnOeq7sHEjqHj0>1ZRu%?RgEN=hSTi}?>Cx917V zc0VI%WlUwBDxJ$u5q~qKq!!1sJaMj+81eZRxVIE<_hPM9F144=Ql+gpN9pgQe54Je zz9~JL8>aI|zDoh93JJ<%k8rxp*AzDYawR^kxK(3h?y{iF0Ll0$l>yhJ(3 z{wuBYF5)~x`K%Y%vA_y($R?-{6FrY`$MT-I3hA4CrsCX}T}{{hP+;wCqUoMdm31FQ z9ETSDF3FcUi=)bNO7pD1obFtdcZrsK*Zqz@Lh!Yiz>f4t_td3=qizy;Iz34C<&P;J zY1M;tMQJln5lym^(v}g3W9!_KccpP`6t#jvnkjv{N_wc$o8Jm)h_sWclrvcXZ5x$Y z=5~xq+lnyRZLIVw%HKy|DFOa8)kU^lnc!+><#Y0Pj#f!Ye7bTa00)MMk4lej2UH!TsaYSTRV9 zS+&I*5lh$)aUZ!7$He&6t+tXg*+F*=M+;>?ZCh*`0WjafaQ+ zgFMK3;|?>0-A!X$eQ>XNCF@HgUH9^v`OT~!jdvAbowqKmKaF|~z>04@*nKqiHHgN( z24n5FLNS%S?A?+IN z8uoYGUp8llwXxbb_NjM(cOd)BJIFhX9l`z3DE2w-h{m%sSbgU)mJp+DTo5G7}Mijqb;H>`0Zk3kLSnKn8tg?j97&C!uVb`A1Frlcya9NSUWyCwIKCDJ}vc$ z)F=2aQlCtHlFv`wnEEdNCC2)W@Rx1HR`@HnX`6hx9k=8BReQ2M8J_xoPs&`+*S^j3 ztmLz~3!M8MpOnR0#D-$Q$w_!CXt1_J+pX=>4r(RZF|ABHgQvrWZeo?NG^{P2qc_l- z;H|M%dRx7N-UX|N_tyLAgY-hZ2&?Xn*C**yv3~e$eXhPhUqa&?>#?5JHhrhQN8hg> z(o6N@`bqtqp;Q^=xX@}^BaC8WOvM<--2daXv@*Oo-Ui+#-sav`-nQRrgrnp?ypmQ+ ze;a>$e`kNbzn8zSf1rP;f24nuf2@C^e~N#)f0loaf4+Z_f0=)!e~o{=f0KW!e}{j! zf1m%Lzr=scU*=Z&>+wx&^*v8&^FK^&?V3#&^ypCFep$MC<=@Y zj1No-ObyHk%nrn8oH8bAmb9oMz56pEu{33(ckG3Ujr&&fI8j zF}It$%)RCT^RRi;JYk+T%Y$0b9}EZM!CJvO!Fs{Q!Dhjh!8XD6!Op?_V6R}`;K1O} z;K<;p;Mm~A;FRF>;H==B;QZjC;IiP#;F{q2;HKc#;Ev$#;J)C&U`g;;uq=2c#6m{M z3`Ij}p^Q*Ys6nVnsClSWsBNf2s7t6vsCTGeXi%syR1_K=8XuYzni`rBnjM-OS`bzAG)rlj(k7+- zf9X0}(MVb(Ba#zo5NQ%=9%&V68|e_~66q1?9qAVt6e)}pMMg))MzT?!uO zw~He@9p~dIo>L-GN{*QgqQoRGDiKB%1V`4{sjYmIMz#>OpUhk7CGvKpze&&vwJ5)V z_>^9GQ_xO}%67GhBlDa{XSrHbYJjqV_)<<%zVe+LcR6Jn%h|-TMWw_CrKuxk+RjR=$yQky9|#}ZaoO^rgKFt6uup_ znrs25g@mr*4R=bLUx7tCj-~tLHpG+on4q1q4yE%*E1edVdLyxHMJYRpGe~DWl*0tV zFNhpCUEkf(Qj6V~G+OGlTf0NhACinB^?nhR=o%{TH7=TTTPYy^NV@VwqHiF4J7ITQ z%kq9sDT!7>L`xl@nn^9K(rfzC6$esovPG(4zJk)U6xdBWttm^`fpU;_d5Nw|{akrj z(sYz$UnK{UqPs=aTf|kg=_0+FMOTz{5f+ClPvrgP^}`mRLF-Y=~>^;eZ- zr4nD}CR^3Xna*{*k39DQk&pT#%8mSjlX4|pMYbMcXEy(1lv0+h3!N+Tk={Y}^`BE3 zsYf@Hlui<+UZVb-XxWox50GtiTJTk!j!M34wHJxwlCvVO(vQ*)qie}_lqowA|JRim z@BE0I(*@?FEqtY*6MS}Msw>I46Rq(K%;%3tQM zP9lCCajr(Krp~6^8c{yNKUU>il)kQh23O3ZG~+0JCehCd+Ofw}W+zW6RcW(jjjGX7 z4>htM>V1?az55~kohZ21T}}j31=Tsnr}`;c7=kwxH}&)Z-icE%QG~Q0j@2WJZ#NKKX6DQ)*PlpFOQzKc?l+!cA1DRfj`{VG9guM;*!N{l;z zqi&|N$hOM9>eyn^JVn}E(m$uPg_P%B%3%cM7NZ=bh7oqxU459+i!#V~RE+nNo?{$D zT>sDFZ0%~IKP39?O1>&vV3goj&_8m~;L8@^8R9H?cfe;7-G}gU%1y+f_@Wr{!8k8w zkqBAHa+7qVpOg`@x{0nPtq#TNPJ5Hy@Q+1K6hDh`jhSJ5nd(ar1T-|z8jP+?&e&Y zCOPm7k&hG4mWnGnQm1HK@*VsRj>@|we13sFe1TDOF<#ypqvgM5H)6DWCA*2n%iFRI z*nUXkA5I@3t`ZTwn(E$fPr^0urSjg;qO zr2JOaokq&<5Od#IPu>gjL+{~t^LyC692-W^#az(=_*%*!Hjv-XhhiMPkdI`8F+cuM zR>+s}Wvm$Eiz61b(lJg zol%FY!`WH&0rdfPPJLK?n0+l~va@n^nmUc^n9)9i8|w4w9PUwHROfNO`jWbgo0#9e zjmOpP>fiXan9cQ1-UDLQ=HvY_;-1ZiU_MtvK2&S0HRpv|8?6n0NV`qDjgQiL zX}$QvT3@X%AC0;0{rMweJf4ryp3t7)V=>$P89q*1tS#n0)>dk-^9kB-wBPWF+8f#% z{HGYRAI2wPwEkiKq!_K|&v}31eT>ibKH+_WzeHp93w=7q?0-e$^smr3{i`%izkVQ`G)}*P#_2cGIQ`o+PQRJP>EESs`afaR$7u~^+N8gWr#LJ=|NB8ry(Z5Fj$`jGQMgOKSF@CRbF@CS;V*Fn5 zi1B+R7ONYpt7OOWVhxp?Sd&;grM?)&S6YiveC2jAim&90QGBI){ImEGd|*s8q;@IuBGp;w1Ljcw^u^gyIx4FF95%>k_e?E!e|hFQ+^ zjZ@wa`$2$0KoJ1X#Qu-ItHP9~kVFdr%Bi57N*6#6KyLub35hWUE3yd$p0<$ypd|u8GkU7v%C#8J0?9P8Z z`H6QRf`YA#TK)V(xG&CT0(JVDjz7K6nZ|2j1!n z_?U`Wz%=uhX8lI~irN2SM(;IbRQ%lKb8=^iKZt9JGG5LPsi}77rcgs0RSL|IqLGZqtG|LOVK1^4=9@e^=U2vC2`j8~&Qu|~{FO}wU zkC9(PjT7&eLyod#E_SZ)qKSp#sO;19AGSc&tFlx{DzQ*%Me_f}^1UQKm*tj=b`*2) z{tJI3Kj<@BSM(I&-_O%#VSS|!6w;NEh?JtNPLi(J3y&%EZVvK>v>`>3`M0Zl0=>;8 zf0wWOcKQ9g&VmODqL+%u<~(oWDm^Y<{z^HdApj|<=a(-mf4>}ZFNYPP{U02^HYE`$ zKLB1?`KKbaJV#L9?1!Fl`f|^xTGq=w>-$KTn1V>~uB!d_LZxwHRLB|fqo`PN@b4j6 z4#XQ>DlEHb4@8>Zt%T*Ufao8oh~k|%;^O%^zJYYWDc=;S|H(K4)`t2A@*F301-X)) zzj&UPIwE8w+PAXT%4kWPUR#8&%KY8RkmGi&! zWVGrGvI4o^kLG;evJzTHamhG%&CBY;6!C~ikW!-!F)~sq{N%lW~ zmOSp(g7ee;>;Lc~`zk%}zfOOt6yLY}%9EOli;BESLKR*`Xr+uu{#E&tXHwapyR^J6 zee`0rM_+dC#$-uFI&tSKB06m1eaTDws+7;^-fn z`)c1Xp^yoU^!}HQ9FSeR%;yW=uh|~geEI@y z-{}Ipf5}2`!P6x1OoT9^!OBx;tgPZrEqMgi33sS6m53gby|;XvOaUIoimLyT=T|>+ zNlq^EgFU1xT_tQc+65z4)B;tlt6#H1EEX(>~TAhtsJWNCBdo^ratCBI?$6s*q{ zrZp3DFcU*zb+M@o&mJ&~A`hF+>SHsoVqycVOwkaVmtBd?#~Nev!-8JL0+_wg6!TZE z!4|}dlFhJM^|jbiup(S@5 z4R7<`%C5kwja{%t?!&UWA( z*mQiQaVMnp3AQxM);R!4p2Zem32XsOs)MEHe(q;Ac^os;Qn<}+mX5U`Yk;oFYqBOh zi)XPgufyvA=ki>3HE)8sYf;{kw`6gCBfpW^c(?W#YwADaKf|u^pYxw%&7$X`=kVQ4 zD`qi&EH#!2c`Ep#q-^g9+C+go)6w3d?KNt9o!Z`@w)armd#UYxuD181E>}ShM5_m= z)xFf}CbhbkT0Kau9->xHp;ix5t4FBSqtxm#YIO^9e%e6~+GE2CqS&hHK}XD3sew5` zSkoKpIdp~eyJ3@>kxrVCfiJuEz*#~+GBJ0mCv@UYY_+lOU@z!|(3ot}m>klWx}-6= zq%nDksZ_=SRt01-CV9UVltu>&3hwUoN<64Ij{+_J|Ewn0^v?`ahstK)X zaW&~y6ZST?t4YI}V3mt^Knp!H*dMVq#VX!g(Gu@sYsR)=yN11o?OM`8gZ&9xQ_@8b z&Gv21-p6(wt&!1!eTc0E`v_YL_A#~=j;8Ks`;m{(*X!9|vDLuZ;0M7ugsmm}9NP`- zOKdlgHhW2%y`;zKJj6rn8d_ze6%S)2|7&=JM_4O-O*V@4WMe!ATIjl$bUl+_!LPt- zvqIy&r16=&7O%yEJOi^egQWdIUYpluS=0xDJey~O&fz&&m$oji%dVwf5#o6~kJZL( z<$74DwjpoG+R*AAZTMAKlco*znG}9CzHVEGU&F5fN6ct$!<+Nw>?VF4zYc5Kw%{$; z5Bc@{de)A5SB!d>#i#HotQpN#zL~$mUt#U}a=x71%wOfNg5JybqMZBqK6VTL1mD|k z#*g#ksP*UkbJl@>!M^~f3~Te;%D?1avW~t-e2=i3d}DlLSSR13zDHSStU5TBwe^kj zjRSwYZ#?KDz9a01zN5aQtR400+x%z!XIU5O+g+(wV^$_BK!46b-xaHI)<<7$2%QuC zvng7t88o0d+PMW)M6Z<-7y^qBnX(AM}KA=mElB{tW$K3VOgy=>N0$ z3i5NXk3YwkkY9v_`~~%ZrO3hkZglQelVsq4zP=qZh2DSgQuV#2x_Fno3~Bp~PH# zS++g;I9A(*y~3P+B#^Xn0a`;E!RN8Q0)y6K?PFL|E7m#Ijp?y`yuIy@^@{a@j}kfg zl^W_;X0>bIxd$6lP*l*LO(`fEK7wuRUsP~E+cBVE#Di?#fFbu4v62Cg6cw_v!S_8- z#N&gD?iWd%B2@4ZvYNtE$vsk=)mv&jK-W~Y@Lk0=- zb{!Ts1(rJ%vN)fUCi6i$k&mz9pZK-_T|unwaULCJ%59yHe_Hqaw!oAp$8|*B;`_+4 z3!aI$b#d&93m(G^WB9iqti{Ey*^GH_?S5MpYu|}*XTrC2?VQD$bs;*xD~>kn-l;p% zbSI8eR~1+FBf5yf7l;yi(9TJY1zxo)LZ%vIW}=V8s~^39Jlr|d%F4gJ9a~yZP*}`X z5ME7q-GBkZN3xBCw-DYzc+bGX`v>x0)KX}%z*i84Zh)>uSOpe+ zLGDHGVF2-8)RjXn0>=njguR44gvICwhqei95)J?>kY|+sMF{JJp*2Y5C+q`Op#>pm zt4J^R99kjLK+k|{!eVtpkMD<>&J*$F^_iIOy8vEvC1(9@gg@Jfxy=W$Ht-2{hO9^w zHlz-3fUhmI(B6;La(5aH zu>?DxyPPplpczQ2~UKPUHrHZmVG z%h~t99_h@z&i*v^$UoRz9uE$c|3h`0{UB#Q%GuLe#f+z56$7!QWB}v*lseA7jkE7d zt;tiI@~13v_;QtF9>%-q;=C~4IHbLkPdL~4-`LqV#~xd_1FkRjovDQzA%LjtMREqP4~KDmNx%LmSG5+@+=^IRWGs z#W`8ngs!#~CC8g;Ehw!>uP|K?>uLDDQ%xOTpV!m%bl|#rUEmg!PFOiQ3u#6AIOflb z4SI^NVYCBJ9K9YfQLn@t;bOpGq;GO3|K*KC}~O?ZT$w3opBY_h3`ev-Se-!=@t2 z+YfvIn@SO$N)eulw+c$ZIf_li%G}3*k7H9Q^5f{0CqS2BQ}MN?lfb93sq8G*naVvJ zwwe3557^`;u!sm%iUn1Q0#$Bt3mg#zsyvOS0gL!grN~dE$WP^299lpzpGwi5N^zb_ z5uOTL&;Ump@kYRnd1GL4SERy1GzD(Pn*od1PNk?$h26LT^ba`XPf?vptG=nU-kS=0 zk`KOE=}pB~TzUdy<#FJr_*1}7^Jjpc<<9~y)MSdzpdn$A* z01G6(gutO=_X5AByp4DE-chzPO?eNi?P*G>@(N>#iIp&nJmTOhWEyFBO}`W#lQ-o!Zc?F9TAZ$h{(IR&b!=v#MiM@ z<=4uukxy5|^a^77?%yIGNCo*Ug>-nV2kr_K+!ge?tbD3UM(C|0-`HKauc(wn^%`;X zI0bPMRye|a$!qXhl6oB!-Qnn0=|99VBjqnbX6oC5PW?pCu%rq+Vg|fxww-I&w;S14 z*-h>@vZS4v9j3F*a3V?@uS$G*zs6Nd|&)8mS(Z|LCb5IRvceb zoMJz2MXj)9*;DN&tQvN}o@PIZ?=DWapR&^I8TQlmEc-coj{TxN-+n3np1sKab?mgg zEOyR*)m~}UvVUW*v43YZx7S-)_8+Wz_9iRGe#h4Bt@eBN4*Pwpk=5AVZGU7njsM+h zX|=Y!b`Z7H@FmE>_}#j=h%661N%z5iG7XT+`is!W#4GG zwQsgN*q!Vy_U(2L`%b&JeUIJG9$*i$@3#x>2kavIA$xQcX)a;6TO+Me)>vzTHOZP{ zO|zc2=34Wuh1L>lnYF@NWv#K+SsScP))s4jLI~+R^ zD~<1u|J5=qC4R{ATOs=yd$#?8J=gw)y}}~d+?49-p@m*FEdyoCG)hzz0)yDRt#D2ZI-W~F|L%##M zaHoDZG_M~d)8$M#`e{A zGy6KbrTqiDjr~Kry?v|Q+3srR+jrQ#?7Qv0c7Z+69&8V_hub6V2klXa8QmHvWcGmd zkoBnbW9z5ZW7ZSabJowTUsx|$i>;TfSFP8rH>}@TZ(46z?^y3zf3j|{K8(K`|8wli z*gs-_jei*58~c0g^VnzcPvQqG-Qw}TSw1Uh&$OSlpSOQ*&$EANFN|-u7u!o?U)it3 zzP4A`uUqN%YWuhLI_o<7O{=!O(W-C1ZPm56*oOVCz1{w^y(|8{b(Q_0z1O-Xe%QLv z_I+oWag4{PxPyu_@;Wwrw2p5pGR+pTtB{DnOrl5AF?{V1UoL$JD_@FK<8f5@k6eu8 zbYz8eo``>C4p+ExfMwCg+9E1W=9x*HTEx*{b;O-;EnED5n9_~1#regy$nQa?9O9gZ zZIRa~T+7fO#J5I9=@09V=wtEUWxcGw;Ok3xua{}o0f$o1QiwY6E~~I{!tZ-=_h(t3 z;CP{h2pHDpBj7<5NA}Z^eRO0m9f2otauIhXUb=&~Q2#otUhLO6?^f0|wuJVbW5OqO zjV%K19QzgUtvG`dUWxO<7$Gji*wqr`B0QSw>rYmH)NhQ{5BL$QFYss!c3Xeg>J2=~ zx(oOr>rUWe>ki-tljYU1La{y$-?fCKb@T@PQM3+fhCv``~!0C;1p0^moidx1w= z_W(a^iC#9!f{#I7keGfuC?QV`eNj?~oU!id5Pc;2ABSa<8YAv}G#z$K_rl9MEf`zD z6zz-Ha^TNnuK*v3Edv&Jq+0A%hf=j8SY=gs<|sgn7HTo!sqO^DF;4F03r|RVeDRB8 z3{b>-^)PDK9{1?I*&w`?N;(?I!@f=c`irtiPOhK>!j{&-nOfjIlsgBbje>p@TyY&O zAij{*gs9hXydFj<1s5?j$|j;h$T08%{p%GF_d8LvoG7z~TF_ zCwwKIQ*?y~<``ua{V|Rf&p_!A729zDteO(T9x24vhUh#ac^>OSzB_}N@pbXF@!!XP z7vB*7L;Sb)nE1x{`uJP%H<7PdaThA@K;`}C24y44orTeqFZfqjFQGQAhWr)%!^#PE z#1^d^bl=U&yHL9O6nCAFQ+OWosEoXg@Jr|Y7m=C!ICQGYf6;!)<6`_rkM&J%t|OvF zgig!*^-8TnAJ>}_pYA=h5T5~=GW{C;1q6l}a<6{K1}PX ze@?&p8p|@f4Z3+CYs0b<3BxM4_#Dr0{Rrg~Car*=ynn)N8t zzh{@^War$UJ2!Vt?pwJB^Rzr)US3|Oyxa2f^Lpm>&6}0?YTo+1&3Om%j?_!k_tX#6 zzp4JD`XAIkQvWP&eQPzis==@Z^Bb&faHe66hB*y;GEgsc zuQ;xj<(A!a^6j(6S^I4Bv#rjyK6}&Ic4xbued+8gXLq07d-k)liSm^4?DFFBbLEM| z*BIv&zbrOiIZ7?e)Z5iN(ZYT3y{|D?EoK_N_Vp6J9DbKxpg)ear8nz4^y7wM_$pes zHolZ4TDTut_>qbhK928K9r2t-3;zTy{1~7CA1^7FFZfI z14AA@E8V)z>TLBu9C$P}oZ2QeKeae@YU+Gy;r8(n@d4=E*FUH8iU@Yev@mtTkCXvUX>Ej233K z1JuIZYCm3kMs`|ut?ZoahS?8RwD8Zfw>vFdC#N4CBhAmXFP^b@ z{^B$L#4r;Emg=E}+1c3H^s_C{!fnp}@NE0D`Dd4&egEu7XG_kWD`(|dqPU!)rrQ5D--n+d5OA-tVDX^ibO0C!drQs@_&@)mFJY#Iko@Pi>KzEnse%f zQ_r1x`qYe5Po0{6>d8}2oSJ&-@l%hTntbYKr+#|sCttq#yNNWUZZ9_f1||46qZU5|7) za?O#eO1~=ovh<76&rAPV`j671rAJCjOFt|9wDfT4-%I~ida(3B>0e6smwr_GVd?JD z_e=j=x~_Ch>2FG3D}APPX6e(VPnAwDeWLVdr9UnmSNdq_Bc<1rUR8Q!X-;WcY4o!% zK0EN)Uq1WfvxT1xDcM=_r;;rtOG~DeJW=v^$&`}EN+y^5v}9t*gpzS3V@pPr+*8u4 zq(@1YlFlV*pMLo1^iLo8bl9hZKkfTz=TD=b^223^S08@u@GFOZ{P*I&KX~YiL!TWw zaHz$hYYsIzRBzLB!`~_VY2l9x#}z(W_@ly}h24hjAGUYco?*L&?HIOw*tTIChAkQP z(y#@?W(~VJ=jQBtGY4e$ul1L-U!}c}HY@F!w3%s7r_D%vD(%U%$I|+z^-JrXc2oSO z_|>U@Pd$`+&=MZ_f4~2KOF%qbVrCmzNiIgHvH;@&!k^DaRPY)0{jom^z?V;yWq>an zcoq9o4y=%;s9o_N&yUsH0l3>$p+oAOfL;LPk7!T=o)W2ehNdEK@%|)-T~wQb^uBNh@AA}0IYMP--IP^P;LX|)!So_=WPb! z8odMdkfZ>;BldW5CqT!nIs@evpm)YTQ-XdQ_O$^m!S8~78^9f)hhPs`3D8l01F{mJ z{}}szfRUglV2_o71n5s={|Mks&@-_|`32}7VZTj+z8CxL5-^Uyj1MH}`>;p7jIWUX z6NF16Wj{Q#n6T!#0bqH-Fz{tY>F~Ahis9y*& z7GR)_LQhICAluL^z;ocE%|b5#egV2Z_P+$6EsZAF|4M>!4fcyA7|pO>3cxtF_@-*; z6~J#nquoQl1N?og|Y~FTPTMm+W+s^<9b#;=&!Kv0YKSs zI$qwE5_XoK{h z1E9BF=w>?FDjnx}VOO9|EaNO_$So6eW-1*KV%X*W0vnPa*kPsjc zNE;T}gsALF2wPZO01*&^6BbE8b|I`0A_4*;A~KjD0t$j`E(7Q=!0U#}j0`dk<3`f_ zPjx3OzRvf3KcP~UzJ0r^Pn|mF)N{_M4q}Xh&!Ww)F%xAE+M`kLMM0lb&?R^j3 zx!|WL7tpRleF^0UwDAnVA5m_g{TI|fq3CFzGev1=B-$905a<+|NQku)YK&uOG1@&* zFGaz9tfi=HQ2vbeB-FJi`_P_``eT$&&|ZideF%MqHohN1UqTnrX4k-2vtoULAOsIZ zL3=rB&?~Mx+ApHU{aCT$J8`|uV#RaBfo^da7c2T1hx@T&10TfUx(T4M4P%f1`X@vZ zVqb+ifP$OY*Pu>BNkw}D>U5OmXm3J|XGoZg_7>FB&0^n%8uVtxz8!U?S?sT(USSsd z4%F*VcH*4ZP=AQ>5!&yf{@N_|!>GS8iyh;XaK$Y4_Yuql-H-^rwPV~8OHjt5{Q)6K zph+_5Y{wWSgU-pIuX8-=LnyeOa~|ri%;E%{Qz(jnWW{+Fbsv<6&_0K{zge8;Q4d5Z#__+Q9)^Nvc7BO^HOlLdHK20}yVe1;Gf?As zQt%wE_Nc!wi>m|bZ&AL-@s6mk6Owuh?aqXxp`U3oA@07YRTL}QxPO|4av$2bf7%?B z=g=OE8njJAAKj0l#`Rcnk3{_&%1yLK5r8fz9NME%ByK85;W6!hJVF=}3dG8Jvm zv-vcXa0=bu2A^*MO}E^S_A%7GP%yrplc;gsEx4ZNG-~vB3%=+12=#E3 zC(%BG`gxQ^Xn%ov1xgj#mkD{rf)a){#_*MB6glKWbS3unr zr6=0>&MUo9KqD{4;1%@y72Ma$zBdvD`g^IA7wGx%~3B!S%!8t>Kc^o zXtzSm?uX~~77)C&4F$CHb|F{`qVQ-BC0G@rB%?h7HLiPu^$pMW)B9%eZXyUeL;?Q+ z4aVvbB^>P?sAEuCqm8k?*%l=qZP4&0c$XFL$EY?D8 z#F*WD8ST$eqwhCggZ^xZnw|G4+PSFDqx=o+Jk(cE{*HEg)b%KMMjz&mj(+M+v~fQ@ zgpz>vgQzEfsQ`MyIPLcw+X5~1i0 zJ%h3FtAw5dhI|fv@ee}{WcD1M*FOTahJt7Gk4D|qD8vu{!nqzOML7NhYT&Tv9zz>Z zM(1i!aAE&qLO(;4(P!VI{T`v$f$Uyij`pXhanALf(B1 z{t3$GXqOUtBLk%c+VFYYz`o-sBy1|`T%(Y%X9)cX&+-$VD-0fwpOR40(S8v%zWWo# zENl~zI28mX)cDU@xBoG}wE3^8zWvef8u&8)u_y+SNHCHth*VM$acOIeWOE_%(t}tz zAMpeI4TnD=l0+enEdYas!80K!ym*oT^xKTbO$BnzB61ma%wlr05Vif^;&MA;hh`0X z)fQr3=FW%>>WbJP7OTtR-&sr$iwG(*;&vZKw0l3G>H`ov*A&4!gcOsZqy*8x1QEQI zh~Qm7mLqOxJ>t|iB2Ik^*^F5AZHV37Zba|CPIi)AmD+NjI(_Mzrb4C%Vd)6@3w!C(PXNv(zepJg70hF1ux4C zz61O$`^YRZf;?&4K>ONG+ZM3cVyl34+iWtItU}C>U;UT*BVvDV;!Wp2lR8H=d6%}c z##_s+;noQ67Vj(SEiz601#dxjkmtxkL?tgmY~T{I6z_jrY{VoJ#3r+d)^XKjI=6v)k%Oe6xp*EH3;!;jwwi9iU!|bSL>#H%cB3DYapW*PN#}DJIJN~M z<_ylPBq#apaF+By_~Rf*1};~096dkr^!$M6~AIpgO#DaW1rl1);r`W7zt5fscizK2geNKmca@T2=>?GgjK_$13NAt~X@ z|MuaR8O?hZ4GisS=+e3Is$EJtdSi5rIeq2aAhifP#S98i_jxdX}$RcH^hw7^D zxy#yjU>y|5p|*qauV&}vwIrFB>rZ9Ty~G-_7FqcrNjd%mca9srGn#wy_ENulNx>2m^^Wf4R~sB?ma-NVzj=PqyGM{pyK-KhQ|>--Je zFNhaeSPW#(8u2I6s;w30|Y*#(CpVgmC>*Uz*f; z3{4zcGn%&5UwVjk)Ypxv8LeL!{n8lyeOl62KS0Np@^kgwe5F2&ZqSFV)pxJahtu_} ztf9Tv(hW?@Y}d~SPe?xK4CW1eN9z~Qsa7?GCZ}>%s~SUN16*cWW;BXEaTuVx={U2|P?d-B|QZcjK$ zUKZF}b_xHKU5&nRh!- zhlRU4;`3x~58egvmvN<^jK6gJZ>L5M+4=CpuRr?rr(b_M^6BXlzbv0srk|l1Tt>zo z?LJCBNZhgV<^7KDuL!~D*PFEv^nM9@s<$0>!lk#?K5k(Dl5=_=_mhJMj$ynhl8Lvz zmeYWgS)rj55M!Q0=4-7Jok___$Liy~e~lwPncO7<*FO*e|<5zm|-uN3Pzu>bmyRHAX6Mn(K1* zjr_~T5!W@7Y9gp6GCIXeAVN-dYtSGi8!RgzGZcOOs6p$Xo*J`+C~Fk-}jej`To zTfgt^7i;#tUB9aTh~WbUj2Owctf?Pd6I{Rl?F}31_HoNrJU6?lYWAF}@{4c3ec{5} z`!8_As%Ag8V#RZ_R+j(zZ^?e)?RWlmVgJ61<{X}N>uXU5ofPC3p4L{{sl!&`_PDJT zs@3ChD-}fXhxuhHSt`Q9{2b+JMNDiAsZdC4Y)mM~#l^Z+uZn5MNBG=cRkm=F;`Vw~ zq%-ow{D_P2;}d-9RSP{KzuTEj=@4zVY!%~`v;YavAQx_huZt#o+99>Fv$Ys6lOC-0^9+s} z92}H2I<^c3$y&OGTV<)TF85c3RmHE#2r5>^W^vn6Y^f1kv=V8Jv_-lDzJNb0CYX)< zTAHRLc$#^e`BMFv+3l59o;+_sb`PbOucyCjWS{K*bg(kW*3W~8!r;*CakjDUlI+QJ znr*s!Iay9uaaCfqTy5E4S*xtGuC*=AuF2k&oi_xp-!P^cxU7vrJJL2e5+~Dy6bDU+ zCv0vSGc+eVj7`r3gCXgUkMuiRGjvOLy^PkkFO>G##tfn1^-IQFp7SsL!-|Tm?Ek5K zcyqr2>pPE~)1FUw@TGw-yjP%cOB#L|bn>a^bp22I*UJYDpx)1BemSDx+5C;~CnoOA zY&m{l4%QU}x`K{3bVVCYrO%OBuunKa_yZ+jsEDgj5Oz&0LPXjGyz#e2lnnI%)nMuc zFfS#$^dGr0$pgE*jpmeAlT{8o0?s{1SW+FXi%j!C;;E*@a~f?X=PqYo1^-}z*5f7; z=l6NS6Oy^yR-QIoS;g!*b8A*stym>_zSTQ^_nqGUoA2q-FFvP7uHt^1aKG`!{esY_ z?0zyOR*&FCaFgp|{*61=_2z_m{60=jXzj^u#cjeRt5(*`oij)BT-EbG|3Yu~{WtXe z@4ln&8PCyy>%kw!9CVZ3T634(N(7rC3s9l_8qsZAqf*B*kHx0)isUw;zkN=@iug9k z<2svvIr}0C6U|J$xo(_=ay@bt2k>_m-rgc7L8FQ(8MKWEWuC+z*4NO{?etww>ATv| z(fXQpwCE{XBz*qf;o&FsN;>W2@WbzoI7z4JmCX935Hf8$aEb1d!)D30H)Oc>3o8QT0G@RMmaE8keg@!ZRSz|kFZA#YP^3cOr z`idk{v+?W69ElfbB#DqPBxg^VBhx0w52btk%%)in={xj8RKxd1($BeaZVt4jdoQWx z1jG)xF0%8PF@zhBiSAQqNA)h(R_J&`;kiR}*%F@bPUkgi` zbdKhgYCNRIw#>6ILJ2ry`G7w<0zJ5aKDaJ3Rgp#GIk(G`lMRD~OUWi~7s1@bZ*D>L zi!b8;i!a`!ivIJ>oBGdG5sUQG`YDvtENhjvqB%ACB)vkf)F;tJEJ=X^-l616_>>0Y zc~qil{zAS+;A+HKGO1B4K`8*^iCSG}ncBz9plmi=Jz^3i`vx;9q1>UK_BeT`zzt~= z=N5C5a@dgSvflI*B7JA^B17y9H5*ZcEM+Dqp7q=)1 zg|3&}E9^DCWdc@Q#08z82Etvu6vHOH9~MYhqb@~XcteApy?W@7p*%CMqCa<$T>K~9 z6>veiqjy?%KcTZ7pFv5M#@-^AC45C$^9ng9h9g90$`Ax6Rtmb-cx zrkKl6Z>A9jnW&769TprG8W|@*z%!dlh>K5VCYNbVq|;opanA$t1FsUptc~2Ere$6*m2XM@_z3Xr55pp3D2h1K&!4x{NLnWpot@m{Guwm$a$cz4uf zI-Q?O?HEi27J81GEl`-O;U%4;dai!%-0_BDF{%D*{&aoLR=tLn95%*iJ;rDx`W{1y zwFDtbc2~G!qH1JcjcdN0t0A-O3*}9*;Q_oADuAVt6zi&|caMzgE)C*ha|VOtI&zIo zV>XX5KswB1@U0<)VA|$n6F)5ay9b7i$0a_pp{Du3=D*QI{jB~&@!>Ip4?XtUi4(6q z_)=f-+;;s1r&GW7kALa^358C!%-UOBy*CjkCn&xI{arMkhhgfRQd6qULh_WoE^jUDSNQMCfVmG=Ew+DV~(@ zw`1S_PZbZl8XBEuk;4} z8eaYt-D@4+e&5EI-hTU~jr+K1wTa34kNOV-hUhNHLr@K;n*mfZ*|8NoH3s7% zkr7&i=;n|*=N2G0M2rb9@)QDIlCf|*V(9D4yX1jsMzcX0_zo7y8ZIUi8RO(`({_;N z8OY&nUr}P7*i9VG?;^V-89W0GK@(`)R{l`KS7)f+kRzV!|Jy8)Eia)Z7J$a=y=>5P zSci4ek|IFi6saaQqsFr=c45lPSrN9xW&wXy!v&LU} zP`-B&G>KVTiLkbqxG|<}LVO~uFmKZ`0Q|u%Sh{)h(xqEA>zijUBe(wNbA8#Y7hcwX z{`qJ9=S|&~&6&M?`RqB%xcApqR<2!FQMtB%X!p!FKmPd5nY%;rN0*$xa^?JzqjcEQ zvu8hzf@k6gYG2NhH;hSSSj>p+tVG^omS5k|-pAtAV*-cHX$!xME=| z>Za8PTT3gPANx{>7jFI{Sboz*j=!!i)0gk1pKPIUOK{{oEfFv98yo3hhdCrw3wQ*9 zBrq}@0T~)mBIrH#10a)K=Qo|-xb?cJyYKY9kCrY~6PRJVSdG2|>%%MVMLE^9P)ibx~nR_WSlsI70gx>|e zWD(+{wDiPSMH18)xR-nt-g&O7@MRd$m?*m<3TiC12cm=k#+M{Vd6Sq`Z)3KL*U*+Q z7coL?HHg(8TXbh$`$@lX&2<`wnEAVRnlfFT9x|~kZvrM<0hU5ob>CKxY(hG*Qj)P) zqLn94zJIXo;K6x0a~|*W=CI;-N7sJdZScU%6pJM3I$gGQ)a?F)a*JCIda`S${dsNQ z+t6!%|Nfb|k^cNv#&cEb)$&AfBVt3cR_CfLjEp!gQqrO2et^z z%`qXFl;lK48*^C{Ca~3GxFkSWrI<^k)(~PsI3yTizq#KQ&nR28bo#U#L)y+b?-xbAdKSKewywtCAPrnDoS0>U(k4uVV&3tDj$8r`OJ$SuyWVv*<(boTZPI z_3Wd+r(fYBm%O}b@xslU^llGy|Mi0pe(Tw5PD3c{^EV#bUo>aIeOjsh=XW>g{}?ys zi2)CeA2xcLo-ME3Su_0GGW}QmW4QWQJUU{Q3>!ry?`iiDHx>w(ddwE3 zZk1Pwn}f}w$}mtRc2IHis)c<3D@LwjHjKznLjyHdL=~3u5fd}KeD-RS#bN*p48{Sz zV9r=pn{5CFAsYh>3Z2x+Ic2BC3Gd7l_)ZoQMW(<;ctr@KksMx-$raf~(=psLbP6|v ze@d7tKZ6%Q&f{jY_UqTUB)#k#F7Ge%8ivk0CpsD;`JKO| z({g=vvdL(pFcj;KV7GAI&9AWV!5v`|REBg8Qw z#HJ9lH`(N2CWGr*Ue<1BJe~q;Ia7k)ZY041xTC=0=yKZmI37S1en$LboDT z|F@Ylsy6G_Z#G=vjyGJYT(EF1SE_d$|J1|@TMoT3f1@vSa`gv)1A|Ti?vw%<5J_5V zQTCS{JJl*TeTnQ8F#X*NqvS|C$@00PSQi`B5$oGe*Ru9Fql3{Ly2oskM!TeS8$X!2 z$w(1XO23Nztm6ag}Bddx>6sb7wN;q%$rk@?%o1v>)~7URr*YTCs;{=E^HhZ;Qm&E zyGvC9R|QDDN_b5bsUpKZ6>N+oXOA4YJziP6gLd4VEr5;HH|pd3u7)V?SVJE7OMORX zT6W#u@Uw7uRWc}M3eWN~^E}+FPP`UUzm{h!!L z%JbOPb9C93hVqB|(KYl5`XpV`t?Oq)OY{%*PxQa&A0{=?R%~z3wz=lBRB^AtU7-S$ z4v1|PY&2z(76icK15*J!w7bZlESA8)P7LS7@e|ztoH)@CkLPcw=0^UO&ZyitZge@W z&65^yk=HqPIRo5sF>OVRl{TX)gSE0m6WCfJZUC(1#g&hr!1aEEB}#9t)Ju))SV^Jg zwPF{YDujg2vWXTcud#~^xxanQ%ZAknLxrgYc5S<6FS3`|m)JMhjcdE4#x>#b6Q{p^ zprGPO+-SM}7e$Y}aZdfd`TY}1GhPWX)3oS4{c=Ea;!MKnttP@s~ zON`}QKEs;sI0c%7Av0liTX-;!_JWV20;gEQxKuIK(uQj-wzAyMbrm~V`f;PVDcn?X z4mVF+Vp+khvwX+-AtOaaismC_5t3Ps;8VqPshQkbXf3vua^)=BeY_@g5j9DZHQR8$ z1S^Qq@>FqxZ2`YPTr4e-m)O?wFG?@Ud-*@h@AL1=pYfl{SNOjRSHyovKl8tcze>%A zOe8}lg77pB3rV=0FskdR&=Ac>=|45(u(6%bO>O8_|26kf0|F76<|U((2&>V?CZ#|F zd^;jA%!;8(m#=1NN|szC&*Wzc(6qQZn}{d4&+3PQ$QeGX`br=_blIsUl`TG6%!% z2@Xd2{ybAb3a9!xpX^nWxnwycC#xZ~m7J@NqF6F`mYURB&nopq3 z`4mg4(u(Hu{Vju(QI>Ja6w5To!9{!(UB@Gl5yA$9!;HX!3e>~)YR}Sgn(@9~eo`+# zBA%xw9qux?D#%2VmerbTD|h4Wm&bCY@=Q*as3Q4kl+=}Wmj=**(kMC>IXZLc^HLQ& z)f=oXqt_Jk*cfo?;#MBfuQ!ZCZ*K;LFMmrHzPyQyS3{Pahb%MvM!@i@JfzCR@FJZ# ze5BvSFgymC-Nx|P(ikg#{7x~&mGPTTxu`c#{^CVS^;;LQ>BuwsJpHKtKEqhWUV5$m z4PHP~i%mz^mT28J>5u5^b*y&iChTT}6*6eX8M-3fHLzG&^*MS5HM!A;h~ zoB9bcv*Du`Dl1;t^7VyFUp25yz)AWqqDc$vv8XizO6jCFyUjuEc3Yt{)@BeV0syBy z)*kJIwHq02kjRknOd>G};W}b~oq2Z|P~cGm$uq!ClXPCwHF1Z4+&u&=pz4iFaS1My zeh3}_JwN&1Wc=+T{n8Iuvuwue#z91bsP#HR&J0>2tM(iy86avHhJZ>y_ z3K7)d=LLV2;;XXHvciSUyI~`RIYc!wQg9de)PPL@ZV5skVU)(R8IzEa+k;2D_u+5? z=AahK__T1kmx@HBB8)#-@Do2pNz0MyKcon)dXLbpk$hHidy z>XzwWeWqX1zZ>_%%(AOby|%w{ZP`~RX!w7|{!QHUew)@ar;HdCj7&ej_xu-GnICuQ zI`2s=I2n!QnV2Ug>zepSmju#kXar}Ky3?+dLK;6CbiBMwv7S?7&v1zwvY{amv}dLd8Ss(B^(49 z5IM}3-6wY*esAYV{d35ZZ}iV0d?y3)xXv%Ae^kGye~Rsq5?LRb)9XqqrhoGi_>z|SV7VGhL690ltku1CYsGxR+D+g}=vL3W1=e}~~j5iLjL zEugWDmTBF^C`p7q6{1vyk3u*F2fq%YDI}(HG2g{Tm21Ppo7 z88~Fc28OP)jZq^A75QUjdwUIddkIJk-TR}&Ng|>V@#9fb#YAY`j$B8vm71mY;vNtS zRZShljpH5@N2?`j8QfYk#By<_x)Sc(7?~&>EC2!M5ke5DEP(f9g(!lm+K3~H_X~bY zq|N0B32|ab3dtc$f|95vSwoJHBcE%>=L$JumZi0lXDzU0Ik2ZL?ZFu~lUN9aTWHZN zn$lT)z@|Ag$3PA`-d5x&+0?Qnhzf#d{Yr*A}WGJIhB{F6aNM^c9V6I&N@#g(aGoa z5HL0UQGL+gIDcd4QBM6YTv@|h9wEc@Ry}0Kci=AzS)rviTE~SiC>z6eLV!$5 zpSf-{@VOizr@_25O|otlMdYm(Vh!V?EG}!NHJ8t`6j<-)dszBd`|*P;rTkdSc_yVz7w(BMg|F6Yuz1rW`wxapJIS0TemYO4FiVbcG0cZuj{zpl3(kW7}vkY z7Yvy}35nuCA4F>XAAP|vUg&ni8O(ga2%QA2j~TH7tgl&`i{D0fi>$AtlOQ#Q#yLS? zV0T!_ajeJr7nx0IbP#w8;JAcbZoEG5haV*0FaNVd5|-ea=lQMh#WR0Ngr-7NlUXuP z!SfeSF+1zVDTrxsG-GOhKNmc%chkEa=P=+6XXpZbGF*c%x_8DwG-*$;1V&>F5d$hL5)&fyMK1os8% z5^CKGv2{i`A7NK4)*x^3bx8(MPMwAPHTe(LWIa%WqlU-D%?vN?$*h>H*sNeyC@U^2 zz92=5(PFir7SiIh_@bDi*rH%js3@)|z9?lv%G{XB*vepKs4{MD{L++~lu@iz5LKEU<#?B1R49$#-xZ79OfwsXw-3C(Q?tzxM1E24hHGWN9 zZEeB+c{@%v+{Dfqt4j9v9d%&vzprySrDek>o!^tzt6|pm(qZpzeCLp-d_jvA+fz~? zYB;hFwAut-w~_#9t3~p4Hm6b-;a}*ijb0T=Jf8a_Y?39at6`JEPGB?hGV??oy_U7N zBz9(OO)L+~-$1&}STg|MhN;Z~^i5$ifdA%|7hZUUm4?Ob-Y7eTy>w5Nz0t0&j>|mx z-FGKZxQ9j#)A#GY;Aj7^kz3Il%Hrzy?=Xguq(F-%6?C59sIbpd>)b+JI0i3D_Si`` zUl#y(h_eBoFyo&=^8dM(g=I;!D|%-1(&(CKwk)}A^f8o~0eHrG02m|xUGEo*-aLBr z&7v23Kd^a71FV<~D)rkaDL(|MTgZzN!2zsf-`wlnbrEfMy=Qel}V z`nOTB&PLyksPoj?76zjIoW*Y;JvooFOTg&j5yPLs$Y(llZx{|{Ev+DCLQGA}$1&Gq z!~$$@UceRj3!=s5a;7CyX|9eZpz^aJFk}O@WI849~`@Q@q7I%{qHfc zZ#HlC&cR1U42Oxtyxr}Fj{rzZkv&0#kp_KRVdg7HLZ?!t!(D4zr2;M@y_sz6YApMW ziJ#A0&@BE7IJ6(e1Y07S6CVxc*8w97BWq{OsM=9iSNP`ScaL(L8Xo1=Z&-g|Q$wZX zYgj*O6*ly*WwSbkAiQ|Axt`y%P`)zNyEG|*%W2Y7y>FP3^u9qRs zAu=!y%&W%+0XK4M?jm=IdxG1%k*^8QG;jFwpS!jk+snA?!cPxX4_hOp;?|8ctj4pb z&@^fP9oO7XRy6^e7Si=zVDoa5#m~H&_W+wN!^<;N;8dWRDO{SEZt2g#g0@TonmL=B zFD|w$=T?fVEH85&hGueBAepIriomeUbl{d__!8TEel9HNML;aq@~h*%9hdZd!%pt8>kY^1Bwzhl`gOyNh8*nvH26)9!MuqlgSBMIqeM7~6eIg>l`$c{ zHhO=gOD1lo#Ud5CEzY7q1k_FfWK?#2Jy0jZy3NnOe8T`F853&Wti+Oe&YlE#*qN zT5c_~mD|f5<<4?fxx36$6L~$-jo#c9JaSKH;G`8hUaeZbW5@FA)T3X!{xAIp>gGTH z?)dTVu6%Ip@74MT`c>>$a}1d}Uh1RBa6}*XK`w4WADM3Ks6{vF##+Zh`VPN8272*+ zLqpzWO(3+%FejiMHN~_izK8{^&7w(j4B`OrWTwPDCdQ@2392+_|TJcPs2B>C6;4b8sin z%qE@9O}eAW+tt?Iws;zL-lfJzZvPc2hvxj?dw_m!*z!IJxPaTrS2}8y{jw@y>DLwL z4bXU|$!;J{{S@Xz)}A83HH@naWy`qUq*_=w-y_()dG#xx)V{gi76E>b$9?iZ!)`EC z=?GCY?l&Gb)-l{Kg?!hD%RSr(%RPJtmV@mzU+`7<=SMKxD+#t&6E62qw8bG?eDPgU zS-;NSgUi7fLrl+quCa+~EaOaE&iD;j4#DVHj6M-i1J;181q_Pj*5EoaR_wBF=N-J0ckz*Y z6d%n8kg$`InO2ZCG_5>sX4=xUnzZX_5m^0AykiTR03b_Qg4+N-O-_^@=3P_Q#KwQpaodz_=$n)%gx6A}*O<_>zW zXHk+fv1<1E9gT5ka9VOdit8aOU|Bmvi<94mSb_bPO4SPR6Sktu<6!#LFjBG`m%WC3 zgG$={x~XHCW#S8K&+L@sTxOxT=~P;#&+R$sop;V{tgIB*>+daTsF~k;?S{W_B}-^W z5C(H`C+yUL7+aP<+FlFX(e4XXy5Co8gKqa(dqc~2^)ov#&*UrQk~E2{@%}?hTzR3{ zZzF+?OAxw~Df!oGYdgI$`P~obM|2;zrD52H4F@)HWjAYfl#aO0BjnD&TZD3<1nbC~ zTFURS47@0TVHpy`G7d7B5FRLj01Iq1<%ns@`LKNT8_QQ?eQgFx{8yBNYKyx8?P54r z1vish#%_!R#A{Ztf#YYKv-x$D+G$CZcd&6iuzMTLh1lUz~zPr#>>?Uazyw!;g z;s*&umQqqm$MR!^(c&1X#4?#YP0RQ)pyt!DH_BW(pPvuSS|P0@E0G_umR~Kb7FS7I z#aEihCLZq_gkMrJLMazP^-{T_H?KNC;v z2RyMK!xQ`cKjDc7{{T;9RP4FS&Ej=D?3WR_gUq5Pk1jxGmYjvq*(P|vpzr^07?NtY zL@taA6XVrfwL8~c>z2fuiDQ#0`dK$xN-a_ zVVpQl8Ye%g46}~5jdx5Y$adkL<)0Cr#rT#>)8%pm%S=g=O zx16sQ)``q(vc{riuC#4%Y$03dCTgTq%<$$cdw0I8*hT4K)$G9Y=^$7>>t@bx8Jg7g7yl>peqAE7Dnoi(e3B;efqxh^iBP#^E8d72_+4m zH@r)0^=@1bE=-?@7cwwe2HSzjGACW2bwc`?;wDZ;W^84G{4wIRyKQ!~?QVx16W8X3 z8=%l`Rb0d>R`TyStovE6sHy<{w>Sl-)zvfr7Gp{_u3LS#*R4lPsW{zggkh=|}C6HqwOKhvQ zwzjslwdXnVoLTPsh(Uh<;%l(o2bN4OxD2%1(fTxnBA{0==AHXf|y<*1l$9wh7iPPJg0(Z;@)7N&Z z=qvQDU%@{Pk&Cg!elYw6jHNvyNdZzVtYc!J*x54U({J4f*+@AVpxjhY|gp#fG7nX135p0CHuJ1;kt`8Be zQ?*u+PQO)3Qleb`7^@hHa;@{?dBgv+yVq#b%iBUx_=OdxWPO4K(VvJ~n zx|+$k3@?Ex0^5=;j9I}-8EKJhsSIO|W#~42m_>I(l@1Y^Wzqrmxj7POwKl93pejZX zI;yZ7A-vKbJUM=F|3wFuuDJBWs;8Gss=9t@`I3Q)etB_m zWc1?dUlw7AC>8V=x)ZyuVSnbgD0#!k(D8rfFUeo=XNRP7x+qyalMNcm0Igy zQgoQjX^FP_Bb|a6;z{JTXtFKgP_%QK`;DYPWR%}YVS+{Z6FdTm3i>-?stN`*;Eb(f zI5UIy4J3(S%|Mc}L7GOQ{2^_OgN^iQq77J+5d>L~w<#3H2y%x)=@`SV3;PWoKYnn( zg%kQ@Gb-POi5-x43sl+lCbAAe$Yel z!q_*5J^6xFl%4B}2ksco{#vez7RS2c{@eJLyZdx*FL1or@qveT_vw;vG<(6uyeId6 zxRLwM%@Qoglj23_AOmVKjM^J)xQvYe-T_Xcq4$tNpf5|J!0|>8g_*&RGYo{Ec{ELg z|Mo@!lo`JXZf}m4BiJawztJarrXwa&&{TN~nS3`-#kq5POZ>XZdfWITKgXIZYk0nq^rg%R#LV#3MBL;w-9 zlFXcPwuDGQ#tOqaWppQ*MdY+`=Xhf&w`KXJO`NO8yw0@i{BHNnf1vbVETisUrL_C} zIs8D+SG9Ft@h|O2YsS~th|N;A$0o@7Wg7Cq4xmuufPoRhDa08vY8G_rITY#}7{?lrH&il=F%K8?$$4_-ZX?9(e9 zR*8G|rlqYr``HpbbNhDs$&zbS{CAMeK@K~^JS6NFb`zG}GDqvqE75)-BbKBDxVRXb zCxiJ)y-pgFQRn^Mc{Qaj=KHv;SR3&O%@TcC$aiTL;|)Y8e4+DXGaxNgqx6u;Y|=+S6@6ob*vjQldU%!rHYHo~nM4%~$N> zBpilMErJ}?y1F=bnA^!YoMEhTIW2aJgR|Q$g-)2k}irA6ap5jPzrMgo+Z5(;7O4~fo7W-z$cGoty1Io#W%R~NcZVG;x z&Uo;S?2i)`=_8KoCA6lmzK2@$!v|;?opw-v5A8qqMR4*lJ&ztM%UM^32#e0#{)W9} z>v9aHcVhmUIX8CtA0qrm1SpLB5cpm3L`qo)0smaY2W^XE#24fTU!in(Q9sH#v?6y&f}JE zN=YfYfAA!yW$M~dgBRwudO};gH6{i}`}Qg=b3C)A^pPbkn@{L6djnz-IP#g;l~2Pi zI&3^%U=d6o3gonfjwIqpY`bz1>V>Idj0^UI8HuDJZ@__q}SYkEXY zpCj9Ng9%i!n#xZ+@%ZCUJfZ)(dbR$m*{1U9IbRhQmy{G2e>La1uZxEaDSov0>sJbA z7goLU>N;(DVW;_B|9bQ0U%Sr}Pd|yT{#ox@H^>uOa z(4oaczM3=l>mkL(|CtpRdi})>JA?7%F@YN&fAV91%@LkVqUZSbm?J!i#g0ZpwVYHr zNeFr(T-?{# zBbk~_0kFf3%gk+lZ3id^r;x|?Rv6ENJ8!%@>fX(bkG$RV}8YqqPfCz3=p~k7E!NYJ09hVMX|9;RqV3e zaz&Qyg$idCzLUuohhh^snJ42#RUU79(&4JF&qsuSAqUu_g7aZp86x)Hw7RAQHFHU9 zY+2)1C^FT&W+f!C9cT3P1hWzn4#F{d;~?Gm5Z!pY$;OG`1y)?Era6=WapmUTR@ zN2e3Eyc6Vj#0R$HiQT&7WC<+`^9%A?cW+tJvvo{%QIhTqUhm`ne3{S))*(`!sUvy|08oHi-{Wtw>bYu~kt4HSA1alDODssj0gne*I# znPtzGl|4CNVCk-%V@o1BwV1zSR{QR)3)hLIe>8PQ|F?;z57)1D?Afbe^weqnC%7#S zbpQO5k{rF7?+m)16NmHZ*f)$PnQw7FkZXvZ5fI(S1m*uFl7%JKoa6d8Y!`omh0o;g zVSX~-!O&xP+mGg!4*QRg!?tD7%3#kU{NRXa%s(SS{06Ff(txqqkEu==X56YZM~a?& zvZ(0E@qM%@=`C8+RaEY&6~~V+>hr`Cefmt8)v`s#Q-#mHwWqQI&MkJ|^N8Ov_u_CO zJ19c@SmvwA$4I=dcG!(QIcyfcDgna41YqKy1v#LN<~I_Vy>FogXfHZXDg9Bix}zfXC+A}#J(7gOHOi$``LQQ=~)&@9F{*} zB?HUnA}n3tB5V?}h+sp~G}$`g*+`j#k;5$6)&MOGctz;ehVAhMbl{kN zt)_Q-U~b;Bo%)~K@{XsT47Q~$iwhr2NGJ;go_lzhh|jx zebb_&`gHBl>+yp8b{#z7liZ#uBf6Ae4LwP?#y`{)TgBautumy?|1GwP;gj5gWBR@| z2(6mOc!QFiz`?!&b`nA!auQPg_%MlAYqMvG3Nq#CoWR)AatO2khvF(>_7Oc z4DE24ZB}*lA_KP!r|8~bd`bLA@d$pn$IoCm92(VTqtWi(S^IqDimKX#BqbC`>z>f% zA!qio;iXHO>HQ_Oq1&<*TeotH>Nn=+S#2xA!+IC>>C?M+!)Ion*WYR{4Pf}LI-?y;KycibeLO zjnH#M))`i9HhSrnbK9_OF5;?Beg5tI(+!{TDmNnS>6C`_Cz-8K0$X9EVJkSX9&MpT z!bbQq40eI*lCUg5ymlJ-nEbf+F+0|wn2k-A0B|wLB_`Iev^5_G!U!glsp~N@4P{RU zzWL#YZ?YW*#{Q{%%-CmVK*0;qmku7haPh#wOOsxjH@Bu{?))0arFWs%yWP?2wkz0u zPgSf}kj-Sj0=(M>g$~49yn={mo)fMhrc$~Bx`;3UfU*?Ykm+UUb(;mb5|;6*Ovm$N z0`z)*J>-|M(r1LZORqDm^-jWhlRj_K??^yrT3w+@X7w&Tr>8@)pFsv@V+%?A#SiJl z2ic2>58i2FKcHJ=KK70)7q8p*kSkN%iC0paMCuP&;1$RCtPyg=o;kUm( z`G0>O^um4~{0{Ja2*M zr=_RmDFKn$>}DeT?@eQtFwe|qWY6c&8wc799^5Wx&J(@&loTHtUHe7%K?AdrkurVc z#0jBu^{Ckc2L54sd~52!3wq2P1o<&fGM<~bFji*L1$e zZk(UxDXLEjkeGa0jAeQDWSIK(yT*=Zv$t9X6*k zF64H`1=-()wrHna;otQuu~l|uaVQWQ6Nm@}4j%k5uF;hZQ;$|k;7+`QW%0lCeWE-|30z+WKIF^0R_Z?KA4H#HZFle=Yor}{4 zcIdca(o-)LaMWOb**$SMTFr&zrw;J zn=+=|cuX1&1taG+L^ozmcWAg?bDEpDK;KIdOy8J9&7Ma*x4!;54~_uuPSPi{Ja+IA zQi~8MHJu{N8pn-1ZiClT8+m=b!Rx<2zE8OOIOBDkZ}2*f6ItUm8)Yne=bDUX&2#G5 zcZmY`j!kp1iGcgUCrS4i_ib+8m(MiryAcLt@UG+g%;UG90l5;H-52Mx`?BN2vIl+^ zBBz^kOTsw=Wp-cloVvzy2n4lp4rCe}ZsI&_8 zkwUiWwg)U^T9hHone)O795|Yd)PAf@vb5Atbb0iyXnupTLET{801xg4=LXjX_d(^L zdeC~%cF=LqdC+yx?Lru~HxBtvE|SJpusL31C>t~I&(IqB29oW^BH6y=`0gu=k_n9U+XbT8~)LhjNe3OF~^W4cz)32Z9xZ3e0#9Fy})EimbW0@CO`mo(^J!y?8@!Ih@M#ySY|9J|33AB! zP+0zyjD44}*#$A&+4-lk*-{g064o%+0!(=~&C#azoto`^BP%pTq1d=mtk&Dm<5RJ@ zSMC)0f!=lsHtaqr^uph5rqPpn?lgLwo}8xV(vy(UrMLEp-$>!`A9}Ih`g$!tCKzQ; zZ|+sG*0ZN2hkSOSS#oTYP?c=2idvSuuz7m(X1;J&C^o@3B__=!2j$3w99Lwxt2x$% z^;Zoq&0Wwn9t1I75H^QQ2ad6jHuNy!9-9pygZ%>{`^Am(kBTevPYFzpQ@VQL2KSC5 zBfTR7<5FjkN!}@e>8VyQuY#op3&_V7uq;N5Aetv!#wIJqK3jN|vJ6}cZNx#zDZ<`{ zoQ^LIMJ{p5v<|5ChLn_w-hHs^U;EjY25cBR|pLU&IRyoz1)bqRyx4naxS6GI>;Y)xL}RIAZg_J11U9KMlcG-`O?u5@ zNQ_^;ym;{|eW#Gp@W~4m70cMV!N}3r0UvKBS*vAbq{P_-$sQs?v#^Trs5)=6I)0UR zVGEmLj|s)4D3(NQBNSsvbcJPDT%;@8I;{Q_(lyR9JkEe*FikQq>)1{19P{X6vS`>- z+bLlmnG|R0^S0;h2scz^7R8|2)u273#@XV9Rp zOPl2_A(pG+HQ>!~0}cH@1lIw_X22-IjDPss#~1ijTie~2x25FEGupiFMGNnH`kD5l z9xWO0$|}p8iL>XuElm92!j&&9lS(olY?d@`@yH!-MMi9jjT!n#LEnyT+E+eOz9VMz zgavbMA`^<~BqQ%fD#iFCOVcfpP7mSbKAK#RoS7U<=1slz`*WuJ-_POZ;T+2zYie^J zw9xJQv}w8zw;rG4b?Ytit&A%}Ei&_6ErR*r%G>9n~3opIVeL zG*!#!lbV%LkV-O~sp_5Y$x_qzxN3YaNpmDO_cc$p%GqswZL@I&*Ae`0Ni?M(w;&z5}FvtQj3ePEzNBp0J9jQA~Uh9;Sk<`IqC#|+6g;n_HdB`?LJ5OC8vPDJ4zGi%# z<88U6S{sa9m{icJO)}nqmeeL7Cp-PbV(*Y_ab~o!#CItGm!CSzAW+i{&enM*=zD}M z>yKQn$JVrfeu490eZaWQur0H+Sy|~>&9gGHT4ZHrWohYJb1g$_p=D}WMd?M&i!zE@ z6lE4=%}t-1HB(!v)o8o4L)ypM7x=lZ#lUZZSytdEaEeXWX!?HBcae-Djkk|?jCYna zFUcrrQIa{K`GkxKEhc2nY(6t%W{a7bF-DS#nU7*_HV9{@iP#&C@njQZUAlY+lgvz#NkV8LA#}(95_&HJ zQUXClEFcIdpaFCVXcQD8h#*BoK*d5}GZ>134Y2GZwr6p5SKY;3RMtgzmE`9Ae9xUp zhT^{ayw4xM9}0%+x#ymKzV-7#Qp@Sz&U$OcjQ3|h^RJ-;KUs75zfu#g9{%uqH7QG6 zPuVQ2aN-o@vtK42eXFDdxh{7vy6di2cDH0=l`H;4mKI;fcPI-e_X%@fM(2^R7%T*| zzA5*plCSRp{CQvD!D~KWc&+CSow$mgVU<-^$; z&Ck!v%FY5~Z6q8H^~ul6jb=r{A$@kHWXqP~>4vzcIz9WPR=Igjb0qA~kD{z5)21~$ zog=kQKc(ovUV#I$`4+|4UVf(>6v*ipofw`N znI4`VsT3+%rMOsH!ejR=V|hydBwh{Pa~BTjc@f#eBYyw?CWH>cb@XqpZ}tK&D@_kI~HtJ zUX8H8fv+mr(1`M>w9aAwntlP+v!?czib zAO8Q7`2X%&Pq>|ppTFVu?d;)DJN5ik%hEdIWrf+iY^sD>7%Jrwssy|DW58IPgVR$7 z8MPH~n*SR(=Z|9Vy{K_O(++vFT%V8`zl!x}-6l7bk#?2L7|*rD)9S9086h!d=$zRjTiKny zek3!(Qdx9)xWhGNMl5I?(S@T zT4j1AUssi(%J7m%WmaW&Wlkmb-V=eE=x&pN zP>MV59=?C*8+TDwO2^{e!>~?x3_M?VO5!=b+43#)1?8X<9ig_-eI3e3-q(qDNe;$4 z=-28*JE6~LUer-LkI3iwxAKzT()?cQM*04{&N_`7?T6$%HKQ~mltGd+FPE^r-~@jZ z57eBri&)2m`wP#VPWr&We$I*u-eBBfulCkyHkiba88EMUy;0jg;B@sPyl6;@V1I$s z+MF5Ph)^};!R9UlA3Wv35=0*;UFcN(H(AokAy!tmY16OdO0!}2tXp@_FAdksm&Q1% z_OW9088$A+Sa%59SxxU_}r6)4Refol5NncbB}lN9BrUBW4%HjO|}{9^|V?Z&yo9$=P1Y5@m*?p z=&ujzZc@wBT9J2w`|EOBpW4o8>bsEDRtxK!E@4Lskqo{gZ4n_Oxp!%uKgie5Va+7o z?*jCj*14x;ol}k-WWro=)hrslL5UJZwFGZhq8@w`@52so3{Z|_pXYhi+5vcux6qGG z2{~3RukMkS?;>tUD#d_9;c0$X9kbbd%uolO&sP{>Mq(a5)=X*o7GsHTHka>+=f|Zl zm>JL2^0Y^~C;BMzJ_1?^(uG;n>Tp6C+KXXrNVIDcHixFKF~&30@{*UAAB^$^wQf<% z&nbiuj~xGs;D%R(u!MmcZdvPI>ssbs=8CzI$2nQGGiV8m(}jqoZm~?Q=mb8P!(8Jb z;7F@cXZ8V^xQo-`hONO5w@gvdX|gwvyO85Yo-N`OQxHR%w+)aac{;lfkJudqCb@ez z!Aasz@ei60zxd*dotIu9`?EZ9=gu#_K$Br-z^akAVn3%Ndow~AV_s%;R#`mSDsQ09 zo=6IJSsfk&&{p8B7cbta)Kl7PQ&SU8YVj`J6zsKE082(^D{RBKl`{?gP(p`k`T%8a(sssN zK1o^x%KU?u3F^HWi87GD1aX3n-%(BN_#LIz0}LwoVYm&n=?9bS$nL=>qyo^Z62rY{ma^uQU;td3&g1AL$rBI(+s{|(H^YJ$MD?5_x_e9 ztVpcOA^bVkC9Bbmz}`SP?B!RvZQQjVuuX!!hrLG!p|(_4s>Ov!bD7AohyG9el5Jup zxlT9=A`|%IH8_IF0(AbX!WbawI?C6{c5O^MLW|Hkz;5!KZ5NWZCsBeuDnOgwR%S}y zQ(J|$qAC&av5O(4kJ&N%ROVG>ob(d4TNo;K;Zg(IE$CxXpe$L2Fh|9yiM^uEC43l| zOFiFP>Kq`KpL9oz3)dQ5TK4mmWze2X4KOlM=3`AdaIdri7(LO3LrSKMTzq;iKgXXB z!@DZZ!DhJ}zJpi(E%s>rucqiXo0R{5n4&M2E9va(#vhQfA8GuY&lmRbY~8KcGl!(x z*+PsDkThtHurLNCo=;>8vA&06d@^5>WLiJ`q>AGKk{x2Yt*|)^7bGrUVZ4zm$H!ZK zf{&|O-zp`OJ+F>8IAM*6`sjXXxd-X40!wQ`zImQ(6 zqu@Y8B>4xYSl1ECBEYXsSwHlTz(Csg`#H*YKtUF}&%XUh{%!0=oGUn2O~RBIpyKrW z+Z%|C$N-PyVgO$l7wZJ%hiZiPG8tZhnXFT5}2J*EDA0T@OrQhfwju_A;=yvKYS1KeKI|o~Gr-)sBtnP`#-#lppFBD2 z=Gl*b`OU~t2d?ihbGTH=o@@F;11O*VzOrv$ROkD74MFntK27FXrzPYf&s ztxwgvlI8KcvWSnnMU+Se(m?(pEsf79$&U+gXF{KwPdDZ$l+@R{L@A+rsdaH#nY@E2 zq1NRP^ggP~E`*@PrPPIc6MEcyy2aJHGW4K=;Ch@|*DW|RUZc9O-cT3X%iF;3jIF{p zerM8~z?DT)%-HjG_=>y7Lh$>;>n|+#lh5Da2fnQb&VC1c{+@t^L%_q`kGKd5ec(4F zH?oj@r^SCCCP#3@m#zM{Socd3|NPR&%5bGOJIY?VX}NNgh{RZLIPjC+{H1Iz;KG;g z1w{K7fYAIL?USh8y5m>_T7h^Y?~irR=@Y>@d-Uzhajz?1itAs=iiYX}uIi3j!JE~= zU;{+s;0{j1$kxtazmB9%A>NwXtv}JylBp$gOSYE0SMq+zg%TY% zs_RPir3TWXwR3cH^m7cF6eGDN70?L=8Y}l4s)id%nGvE%!#JY2fa1E7EaTDuZWN#W z)^r%fxBW1(|L>|fY{=iMKj<^;+!`3oe|a&1Dk84mxPRZ1B}we3+i$!5wj`3soLg_1 zt9(|KL>ft+8)FjZRSmz-O8C6ve2~^_6K51w1NOao&fr`E1}{IC?EL&u%db!}315Sr zOMdXkmRsDj#1-%Am5#E7qXf;k3d#%Ig;ua2@PjF!s zqb`nhds$mM@o#Xfjg+>IOSDxj&us_tI=(+pUNF_lVNa`8_JI}Mur;WS>ib-;iqhVo z_b)3&--aHDyce_)b#T7{Z29yq{0YGMz;nC>?R~LNtuyg$wLI_lgRmu-YFme`Sy@+q zTYVqr@L?HtgR9Fm{etfU?-pml;t?dd0{?=4zcXZ7;9$`6KhpE-)#oZcE+2Q4tVlg^$Trf0GMxbb5rQLuiy53($L&*dM)QzrOBxk^CxAc* z3?!OMXdoj;R^b;11o`ISZ&v5!Z5lEBzwi?W1;IK{{o`DhBG0%>OMY^UcgWz+<7crU zV1 zz>1{u*ca#c{zEyk&xqJRczzv(u3fr2QU77hk8COCqZ=P%j|j^1L`)QRthNN_2J|7; zPasKb;+16*@e8~jc^)4>Y&&Oyo>!6 z=P?laS^?r%vMqQ=6T0kd>&g3pUP-@CIol?qZt9;}UbSx>;p3NDp7gXj*~ixwymjjHcPeV^h#@E+_$M`YB3de!gIS&a9Z&tj%Zks6y#FwqpY;0MCV5ObQU zj2oD^M^n#?c0JHhhd8kPPB*B>0Lgd}ZZP4=Nyuo|0abb<$N$^+VntrAiv9O^eyf`x zSA-$+5N4(gy7+ams2sPu&GB%s+Fh5`D!QjlPTq#BcKrmWzkfkk+a_Nh&CV-pOCN)| zqzL8`vX@+>O^z5J6-kqIq_k{&61%*(s5A0%Nyzkh9d;dpz>&1gEujfBiuCp9F^@hv zX0-YzFf}KPUvj!~*|N&hOU6&=7T>ff&iW~@0BY*a`Sb5Q#s37rW?_dNI|yNO$Bqt# zGj?lavW{Zfnl@lgN8rpPKA%=Nv;G4%@~B7fsGZt}zc0PxPwknt#O{NW&U$5$B~&lXUQk8PK|Sv4&$Q zb3|IA+6UMvd_r-|>@y)X*WONJ0)un=voz!G$-d#kh&}1Lr-lu0T*`)l8ILn3y$#IG-#&O<-^S0b>nrbW z-1Ogn`0T&s>)0bSega?P9>IzHz+N$n!x?rtwf!vtr`~3##?WX{YpjAdF4bAh!MLH? zvB9chlVLlZ*l)8rtZK8k#HhNb_)11zNlGj*14dd4D(oSaHBy|HM0CTjr6R+kaldOw zOTlzY<##HKr3Y3DtGqSRBWd8R1i_o3IxXGq3TO*0LK^2y#`L0TT&2T?ccEQjF3&^4 zC3eBYU$naUv%Uq16I-b)R-V8A+u5LbVgij>6VW_rruXl!Oj9;0k1Nv#4ESK`6iBXl zET46qG8JbIbQJAG-3)j{u8U^(_sd6Ow`1HklA4B^| zmpYBJEejmc$Qrm3cQ>0=Wp2pUIo$z$CI{dJLgU4v)93;pS{}970>hhQ&soOt8UGy& zuP=GzYOjsQ+rMo4fqsQI50UTv@fxVSW*fnAs%L-^XBlFHlm00>+q7;BUaB!-mnV%7h(LxN0=E4Kv3lkd;|HLy$JljB{Zm_T=$yMm zWMr4vFzoW*D&LFQRnod&TGO^>$FQeqZV9`X_H=11BN%sBy()IGS=T+WEQ59VX50|JF$61&EVO3;ON4eX>yF_SHD>=ks!n37jhF%$=47h9P$VZUZcSf+fZP zC61p|2xwP?qJjYx11d)K%n1vfy$Ib9IxmpdAj;yq2OH+jVY){FYxf}M9Qv)Y;jBey zLJoeDMMAn0D=MG*aoGUnCgo91IrQ7p#{qW|JdQaA$352K5}s2Ti{*gKdX=R{`$#Ln zTjP4Z6^N}@1#7aaTNStsA$vdy1aj>ZpM?~;6DLl$oZ(&hVP42HNr?28Q@QckQ_sbe z9HTJyODFcpeGfD9pC`OMf8LSN8=rcz=HR}k<8L0h?X5Ah-<+bHQ{I0{ibkGY`tt9> z;o97sCG+Pl+EsJ^n#YPd9FInS_-yS7w3~bwz?dP9mEN(CL+`ZIm|tw+w{tr5g3g>E zxg-8QHG_mhM$j%sVB~o_5^JvDyK5m&OY+_&In+4$-PRT!wWdn=M+g%;9gL<3C%08u z4rgfm%${q2=!ftoEBaKvnyZ@L#Z;9krX z2FC0j5cSE9U>dmkA^{T@zX&y;fzCd^x5kqvXmUXAms6up-=4NFlau@9@sN0wQi=TN zlDv}3&+BV}o=UkkuO{`o;i>E1=2zmsW%dgM>i-J*x-01Yu-Ej;D9u8w0Yu4yf7OyV z!pWR+z-JDGa&nP3MC)|&i34`MAjxK)J`^(wHR*>PQD@HbTyz6!0K~SCPoGX_Qz4Ff zhr{XAXGa}5IY?i$pYH*3ksb$KSYCQO(A&=+%y!@>C;z$D9tHM^EoMjNl;m^e=(8eF zv$LIgSw|n^e=vxEB~U8zkWfKNg$p7Vjx-Of#iUP^bnM)zGstm{c4`w06}M?q916DS z#6JB)`@ueo_Pr&;LZxCm_s6;{5QfJbZ7fb%?Cn-D@%ud`3}gE+P?PK-iyr2>xP^nj^cIqi#bFS7*W9H0?e$SQO_&yae}fc z5j6l4BwmOiY5;Np`E1YjxCp+eYtS$9SQ$!Bdi&(jqxct&D6eXmQv0I$C(c@*Fcb26 zkm=y6HkfQdt4yHLIHDX~k*y4;Oe|`0=nZ{xlg z-JM2cH~y>=A)@W8#lFKQ-EceF4u>T9bRn~xf*0FjFk9^gc(Gl{hGSS_wmx=?Q8GES zHPQxCy~B#Ahz7XP;3q-rVs5*`VzodSv06+3X*44>41xg9>P>0$%XT*f?v?gstZIfw(ZLjGW%R$@gwvTN8G+i+L(|p04Ho4YdF<8Yr zFo57rvU`nr##WZr_Hlr`yvaV_xX7}?xZ3iteVy?!%Le;XMkggpB(A7t*!B2R2afK( zc}NQOx_mE3ns01M0bp-lKLr>QlTZ}X!F!1Dz>@4iKnyXxXaa&EsH`|70}|Z;1*uYX z&V`Fm#bj?@EU(tR^ith#e+v&`m$ih&v=-H4%wcUo>=M~Gw#8hiP{XWnNSU=DH*%P@ z0!*kUUS5W(&YZBHfOzHWT1znfWOIqx)Z$vL0A8*Q76gV|R8uGmV?{=3kGO|gC!2K! z+2#cGzD5VR4!)n5~la;o#4 z8T#en_7{8ffXA3Ke^;BM0z|f!S z+I7*A(W6hDA|U#4V?SKFaLM97$?2EAKU6a8$WH0}rSEqP8#=Z8De3$#tpG;fs~6f& zvIyt8bO_b4Rw-PUdWXQp63%&$~Lg;C48cGtwb?Yz$i+{v?lES0Jwon0ee7O zY;z%nof9@gKcOY(tueT2Y|p2eq4`7Q=Q=3l1St5BV3VRN%Mx@EXw+%&UO8R!k(xF{+TPr0Ebq&A8pf+6p)V|ZK>Fad$1XkiL6ZM7{i50#nViHZ_VWc> zn}@Vm*e+*F$mciATPa4i7Rm(JD!|JMKPs{xGlX$5AIM6L5lmjp5Dvvc3*@C5@e0CGV34#> zj@omxFJl}%sU#RjDN~ZwHZzVYk5JlVf^+nDk1{jtmrR(4{r3>|Swxr-bLjj5ZHCd7 z5s=#oS;l~e@IHZ5#ogv~3dRC`0)Au{TO)#XyKTL>#t{YwsR(^J3#SQ?{>Uo#E(HOR zKweCFwpVwng<_Yh`9LCHHgC*jQ=(UIy8I?vR5ds)W_9+&~%m6c`OIVq= zI>)`zwb~x{<-k(wtIki5Wi|6N#GL6tF)d@X!59vSk<8IV4$Z~7D>xefQaU;2xRO^v zKRFf+3*kIKW@hGR6nH?`;3{x}yur{)-%6LmR%WiuSQ%WI?i41+e8J3MMljee)F!h{ zMw?*wQ1{I48Qp`XJIEBvksxRUQ`B}2Uq#R$2^6PoLuzNf`^84^Fx*(ZV%i%sZ#_Qo zlYc&aqICWA)vG7&9wwJ&WsWM?1Ty!!D1Yh++-%$R%%)5h6M zz5>MC;-2YD=ZEqGbn1_>PrW#kJH^ZyRs@E)ncim{jx)HZ0Wq!|!7FBShpGfqdX;@c zSgz6@rUM#V6lXMK@@AnQ91Y=;ju9MlzG4sAmdLSF%oYu;0GHIhBgzk~{ee*>&ZEjo zy(4n_Qb}4Q&%V@i)`-WSeMR2)U!Ro6<~*^fjlZyWF`9-s?~Jw)heQS}c2=uf59Dz| zEe`s*`6?6JE`hc`YNGE~`kG;xz*wY^EgE|Gj6W2_5$Qsv85}JHxU=x!r z)#6JAsl?9OvclQ9xgS20LM^cm#{^=9+|3LV3};%>*FHYxu^7!Ny{({QAh?Cc!lHqc zcm^sxCypmaJCr09ArsMTcIY(>f7+X)*_yrYP&ty`_arG-v%6@Y)E$(!Q~0^7vffTi zcz_aqcg$fr*%ty{lV0|z6dNvU8H^y@*g@Q?7%7)a2vm7D7*$3Nm5>8AR!k#?iJ!Si z@(mufoYdy{I5pduInA zNa&ou6W2UGUWDKO$v9mZrI2i8fT>XmP&|iy`3?_JxYSeCJ>}zA`_DK1Q#+N*D_t(R zxxDffmsehdtaWojUips8E8`*HFku*;zo$8gozX33&qxcvDkv8l9qxdIODL2AhwG_< z)G$D-u#B2a`|_|4vP>8q;Yvvnc1J`78Gta>(b*ZH6bQWXxXG4S(oxJSiD=$aj%|Nf zsZ@Tayr(RGY7<(H=^wI{z< zK4V!IPO>4>UZ%Fb-SkIpmq{1eVo(tysFwm}f6yZn)!mu%?Gu8$LGN826l(0%L2Bap z6RJKy?B}1}gZQR6uUIlIYJ}BY*%t79o z<`ardWV2&Fr`3}l^6NdJX8wYZ95RLf6aE4i6?g_XI@wL7ObDrz2_dT^LkOvq3HZ02f2EWc@pfVUN(YNpx zsGJ4FS5O8@;pl(F%Wx%?0rxxuDn4OJ(dw?EHc0anj<32e{_@DKU0b=0DKrP-v5v*% zM_109*KJIJJAi$`<0v43}F(yUt<4pAP)BkH%6XTb%@mq^mKQwUSM? z%6cpG88G$g5h-^$Q!in+PXH=19hWcxKrSNN6!sFo3c2Wzw5(`)z?O+WutGV1ugPx$ zf3K;FX@J<@G{A1q=uCFO<<+Ix?XLE&5?xn&sjI(kkbSsotZss1rtW6@9M>Y#+`e2>4*|A>f12#|{PvgT}H)w(9m6>^hsIHN!xGv0&;Lw9rBDF-Xus5K{dF&_N_f zJ5n7Nzy2^TJQ0^(1O4@J;)-Cc&#)29!U-dkvul+#>vpqAYgt#m z$G0`TD*p>>A`5JxR+H7DH_GrqdX1LMZ0?ZidII8lZK-v*Rh+EaKU_vbjooIdu`JIH zZO_~%)TC8sqm!6+7z1I~EsPoMM3ZfD*z7j4+0bv`92z^@M2+2K^4PnZptuN=lLlP? zUeXkL7|BZ9HVvN~PGS5-+o!;Gm7{uX{Hs-Yx~V&3fSM;=5hW=rrF)${?g#l^#14IjZaWlgf1duteCf3g7~hyqBs-gI zKM%5QFvGbuULji(MI>WKO_|VFbAvEObFW~5?4K@cWpH}9SyY>Yx$CU$$I7&0*d&l8 zSs>jTv>u%|&6DPo0XlT~2oN^5I!5rr(GZC@C^v%B=VFsrtuKS*^#K-(J_h-WEWy9(83CPK>g`)ivk(MzE;k6 z@K1XXV~-169)!C*2M{cnSo9pVqZ1@FkaVwt%OczcKf<=EW2?ni8-}oM^Oa}VpQc9h zMvqxJ_2$`kEj}~;9CK%d2F*HOxEHwfu?1^y8!%+xqQQeBk-n!p6rFo*(x`#uYvE48 zHz#BL{*3h-5K3a!bV-k$r3cA;KvxFS*BMMCq-zrUE#4X+H)?AvCWH(C?hJB{{qz~i zSO}A)2u@>!uSRoxUb~H9k-`tkawTK@>BfIb+Z$Vfl3v&`vU||oc4OlS<$bnR`8|uS zTqm{Jt3(-lf0pvaxKV(x30iTr_|0p?kJC9of(2`@Qpe|7QA-dCazxxs~%f(S6u+ zlKhrdcv51pMmqEs#4o~Z!`&!F>V%m4c&appYN=jehy8>ga`8032oCx*wkkw9>SX)3 zg8lRa4f(FrY!V!PcE&|etR@C>%Z^ne|Eq53u!i@@%vv+&dmu zu7?wS?a#mI)BAfG2jsV~byz2okP9#42E=AllAlV+3gbE1|1~kq2u-;rg_HH|lP5JF z{%bkcg|Uxd1Gnd~6%4S`b}d`M=h}_un^CU|a(@O)RW_|l++){h@D1Z(w@yM#HJsmO zy8xub9>82fDD!FJXTaIg75fe08q1IVQ6s2Juy5G>lWeN8oqnHG|HG!j`vHfRUM4mD%7P|Pg`L;F&?nKB2d-)gLM3s&0^`6uKOXkYSZ)PAV( z*7SWyVTt!mwf?Y)F}0P+I`qZ%TrZ%~)o5#8H-A^nM-rB>?)X1PTE3~Dh&sE_NPEBU zgf5{TwS1QPE%f30rX$K*&GomGzgT$f@)w&I= z9-mu1VGLky(Z2Ke96jfAs_TH~yJ(DoJur%Ozef4*Qp;;EqWpDyPQGher@V^tdc=

h#^}@KUO4hHNqxpfJvvW-ic#b`Vvx0mNGVZY`qN?nXoUF{CqoW9Q-XAd8 zbD<(5MENU{%=nkGApK(V z!v==S&jW&tFb}E(mj7kJifO-FGig{=7}up)6nzvMG-;-JHw9F#0w&DhDOA z^3nLF(PP=;NSnHyJwBi;H4G!~!1((ybaW;YX237dRZT)iVSLPL%PNYhwCnyh{YupM zrXq@|6JqIMhc!EDZe{SV3lEn%+HRyhU9^N!_w~B|3;`=WiwU#M31BKesPocnvCtYk1v}XtLB{TQ+>gH{ij^P z+m3lBzZh^BupSE3Gea{7d(Hk*#A@#m)2)w;iR45$Xa~yD_)OGRAnt$lphm0&T%LT5 zzy_+B&2zDj$UAs!KF^_U`UbMjW?naPr|CSB(olCnEwh_>PEG>PfHfUMH3>WewpLii zmXYEtXeU$qkOzTSH2A)@u#P-G0%r+t%K{l3*7RIh#-ESk&w2Tld_$*}J=an`nOlgb z&nMc>b(cijd0qj#o0lIC8M!^qeDpOP`%N69mM4CAaR%K5IQ61*`tY1`Q>_%%!-C&@ zMv`6F_&z_=dtQCV@aL1SamUbEKl!pdMx7s?UkhXl%D=`uwaf+P4YPooVPSeBT1a-Q zFZFFva|X$J)}SLG1+`t$Dbj>HSKwbEKzS_gv>K5hA%eylPjwJ!$vkfB1Od25RClwF zVrA$@EKhPk;Cc4jg#OU0=i}@9^g21CT=}!|?M*X)1c5tuvpD0@`K=>{vEhSvid!2e ze!lFkyB2-}jgeGD>@B(zMVuGS@=lQCouH_OjkL%+H6-sW|G&sPDx)_yYpC)L_Y4C1 zf8EKGT^_mqPj8GK)9{G6y=RZ*-yYiBct}?nA8>uiT|k29th~$iG4q=KWl9s8g>j^{ zTdboz(0WZKU%QDr7HfBgb_T{5cPq}-zRcg$f(Jey&mn-}J~*VE#O^^obPk`@(er22 z=bH2Uxq7bh`9n#Xzm#)TTY>U8Pf`Cuc4Jc`>fv~>iM$wvm*2$O$uYlp`9mm=`3_>f zQC_|C=b|3E7j)j^^4Dx}qCIW3Gq6sN$s3y#d>7|^bNNoq<&OeGyjOF1%71!|WR~Xg z7$4xiQ2qId`k&_Y^ZN;B0o8w~iB5w7$?-&as$VUC6gV+dzgk|ce-E#pmv6#oiSv2= zZPfau2~>X*B0I(9YW>noUO!|F)T6=kMZA8s{83;qqW-2Y@q8@D$#_k|NT5AxdD=gp z^7>U7z6mCoHuV`{fy!DBj1yc|J}TP zNWRjb#P~#c`;qI3_S1SB!`rWxKPoTd^##d3F4s<@KxOs}wiod14+vmLY~=+#vX%{2awid7k_^ zMjFq@(R278+&nLn%8%yH;rBxM&WfAoWzuu(ER??<|6#&rWt2Q0`yMv}lO1j=LU}0+ zIN^n}v69Zcq>_&9Bxoxour(7`g;kVFS;sl?CPDe@<8QGJ@k#g0ojU)ifAyF-t7mrS z!2@#Z{_*|0_nlhm>vp@iqp$M&x$kaURi3r2bM@m}hTnL9@qlM%r}eIQa8&1U#aZUM zBRj_(T-Iae9e1KF{gvU|=ZSlSWlH#v2HLjF-GRIz_>md{9UKwBoHavyrfhDnNS|9b zZrNWmXvdFFR^%_7+`aUZ&$D`8U)na*p>OZ(e!JH(@N7D2$ekivQ~A3+pk%Of^DPRIl!PjC71o42LPk3UR65>%~Z1WEAA zr)VGLq0iM`2j7_v`yb;Rg$Em^jVvAJmdD9!b=jRd=a!I-3kEv7nw#cx6bp8rH{7|C zo!r~yg6~q(u7;N>CH0H2hhaO$lu5G5kq#9`<+?Ytjtl`RilB z9Kl_TYp7>GV=%u@hCdkT(%l~H+(!56r!%LR0^xgD zx(72J>7moNsYc)yte2@~7s9nPPlE@LQrsJv3AqrdpRYAhmz}@?h{NO1f zi&jKDRX6*VTV}Jlx7>2(;)=afyPw`YwS35JE53T{!Mz)wn_9m4iN-@uY%ZVn?6ZBx zuDBC)pRW%cs{Al?=+I#+t2Tk*eChCh1KRfPz3R!ojSW~P9g(r;?bOex_xG`OEYjQaTea5b_L21=l6`3u=#oa{ zEf*g;wsL0)@pjLb=;FcZ65e(6ngsWhe&+!)lpC^A`lG9yMw-3y&T> zdX&9jvD!!`xWQ?zuEcd+U^}ox3?ZR;Jy_D2enD<>d>L$pxE@sV-r$)_eNIs zxWNxk7})zpba;1KiC{Dw+ohAj@UYZToNv$)o*R(%C&Z}4si9i4zL+C zZj(*$dEIF?yRW^k#NE|a>g(?wWE<`q>z-hn>Au-E$G6CRm#xyb)kiJ~4LpXNyNTTC zFb;CdV?+~ra=<)}ym9GA>BWYdqZE-p9z9w7_7VdI5Q5$oXJH^ScVIzXKHs&cOo3=U(doT=p9QE!! zmk$FU0X`Nf!%(Dgd0n}#{;q*mjmc*7`Q7QZ*0!*(6FOh$>*pS5yB=Mi>YM4Fg>EnN zz2I~GYR9GDCp+F)B7&`2Wv*`NIC!hqfxnvWA5{)g^Mk>-f^!s70G_Kh4>dm+3m(r^ zIf(G@5Vw((Q-F)SgO>+hati((@C|^=N%e3!g6rQT7eN1>u0AKZW&zi~>*#)l{ym@T z-&dCZ$IU6_wcp^okT-Cj|D)-EaxhuHj<^3BcqD53=kxZb$SEo9`EGVf{nQ@z_tf?z za$(S!GkV#G}wA| zi01mWHmFf7+}_AONd0oB2wg=Ts;c4ylyKE2#eV=DL3wQr#0%0B+1=QOCS(kIOd_&q zsx*g%dNV*|w8P1)iYRNu&L-2PR40n5CB7P2juic$#07e_?x_Q19gw(KeyN(r*{OH! zm%3`)wFb_R+&kv#&@YM*Kux+u-`a2O&zzBdfb2&!N)K36)q~rfua6ts$#HK+wZm9v z*$}{mUvv>zdv*jK@jJMa9XGJ62v@QLceY>`aZh`)OOn^Mz;9^vYGdu`4&J>RH*oyN zdGUD{Ph+Q?zKEZGpOPPW!>-%zoGBsw>8NU$~av$x5q?bS-p<>$DBF+TRSqGI%{VCJir%U**~YTAnuae z#Up8TW>>ZCa7KM0f*uJ{KG{VQFx2KtS$U9fk{v@ZDWC<_F1HMX_MMb2#9O*{s=2?v z>}VbYHY26|%0FHQirT0|*IwVdH_=_m*E|lGL+E^mG)uw%;Y7q3b{Z>oF`t1bjBG4h zmzND*X#?_Yz-S~6`g$dsHWU8or64f+=$)dn?xRHJZZED?zVos(Fq~U|Pk56?e{`IeXE<`<2?)x{9B$ zJ6ALbt5%hbXPQ?)PBiPi_j8=-cTHIMO6y3&OpAF-`}R{m7?6|mCi6&>+Hc;Xe8LSe zqF`v+Ay1a;(Jq_~zC4JCSGSA1Vz}!sE6>Gp$zA4g-&}rp?1smfcI?P@Z6{1!81OfK zpwm|DA2DqBu%V+yPrk6OGyAT8|NRveQ-=Ndq0`K{WsAdTzjgSUu~t*#6utfqkGJ*S z9H(@tTm!~J56>@NX>|r z!~%nZgmB%K>6Ym$mfYKzyrk61%9WW<0tO5b9ULJds z$0%2`GZsTc{-&dnbxN_^Bu;GnPJX=0%*I`;jdDhFbFaqJjUb+B+&^A?QyjIo&jiK9 z=w3qm=O}hLfW3qK3rgj0&$w`jwU$bshhD&xun=K#G96Br*(BQpxSaxC7L;wEKS!P&yiG*O4Uxwr)M#uq zc2kXWxrlf}`hSHCkRA!L6=aQ3E^Bu%IRh3!d?fGW-yhnv=^>@x3&S@)t6T&*`9CpJ zyCmU}s#R+W+8iu9`^S&}qP9U=gE{dFonv;RUTc%hVEJ*nyn4Z$XhMSJ7OvPh^O;v# zR_WumIv?5q5)5htXM0I{iZPp9k3h><`xy^y8Zvg}z;WY-ZG869J@=n^?IhdvNYz8V z2Y5WK50>42=kGuKT0tNg-5a#FDQ}#(X!3yt$!CYORAMh+s>@F0 zsKJU>e~2Q}fb<{Iu{o>+c>30{8)1=H zceul+Hoo=WZ0=h1eEU-KF8bz%1$1i6=8=L(U+scfb|K3aCeVb+OZH|s8i;cie_+bJ z89qDM!`xDh!{GG_X*HH=SVuEq6{Tpg_DB&bqL5C~><)%PYeHK?5?#<_DG?LTx{34vG?BIFN*t=9`R3^YXhiF*Bwb9$Q?O?eD4p%jK(j;H`yTtNg6VA z;y%Et&V+p}S7=LqMmjL^B!IU`ULJA5Q;~GpEA->MVq`zuhIES^mbe8Rv-V{e$ z?Q_^BrSC(e1#1V)pI zc8l^ur-{mjV8@Q2Gl{&$48Dxb%!uUpzJ}+%$SQjDbv8)c_oPz6tk2Q<<+(~c=g}oh zh=m|qAwRsvX>&tcd(pn!EjTR5t?bGiL9<)YI7&Csp2tmY%GlO@T=%wk@=Aswn zK_ZH01hk$to~<73WNi25lp`M0jCmGE9aVFwDJ@c5)cAKb-$=CW66+da&cyoT{(&H5 zGMcZ^u^itK_e*}8)+Cs!42S)qYY#vQ>-}cG!8qK5PiZOXMw{Eg_@d$ z{}jed_CPE!B2XTf8&HKpEPxilP;Hwh8v^1}s)%^tKwTYhT=hE@H6w$4vQv8Q8`>N5 z;b(qP^LLy-InecUB(p_ZV|X!|RRfgu8bVorguM_oX!T+U+g}U>Tz1MKIfIpNM;s|R zH6h~A%X~p8I8;8dO|)|1$P0n}mO!UDkM)@}=?$>&G(i4={+R{g4MWF@ApL z2m@kS{wm>cGz-8JK^1tySs!ISzbgdf2^SFJO)5hCHCm5RO+knUX+*QTjk8H4dX)-6 zp@{(;sM||RPc;cmr}4w@SN8w^6%M7a~rWOy+ZC z1FpI?NhuT&6KP4aAyevQc{WFnvbPeMHjmcSJSx^VXWAewcM-NtBGu-*s{8Ky4ef3C zhhR77bKEm#H2NjI7Rl&k0gTHDBq$(2AZB+uOr9!houv2g(TIk6sr^^9jj>lwoH<=s zJ0fjs8V9?f`n#7_3F zeKRXGn!`@VyW43m|CG2V9k@*dsn{36kw-C-s2G+Rob*2V(+#5eu}?Q_R(@1|I;H%i zT-+iqQhv8lMMYN@QcyH|VCT+1(b*uF;6FXUWgDF28Y_md1V?Krr2CR$sn`{9;ZIKl zfkr9ux$h_+T{v>Qjt!|h9{*nX_|^ZuEfJl|eptiaQHtsJ8s!47pKSc)7&{}p@-N5i zK0z|(g(SV(Z$!pz8F}T4$cD$$dOE~B!XBU5s*OA9a>FY_hl26!YI8k73J}#YjV40N z4+cUepTR0P69Ln)4yBo;q0(?^WO(NA(D3l^$kfcKp{e1ikvW-jLUY1%B9)oM^->vG zles3eCcGx%M@mm=M)IxFtl=5SH-~3U%}BmIHOm88K@|=tMMK98&uSV^cH%-!aCnOu zDj8N?U1|NQ=T0?VQj}*llph>(z`Lo4Ie>OcLCD&R zmD+-RX5x27D5YJ2$ezp%ylI({klH#moJBAF~GGhN5Z|onjWtd!?lY>a6|WMKo(gqz9Psjy6bVWA;At9S+;n) zg1AqPN9)pk)v#W`>tF|`y#2@TAPd+!*gGuiu(rdt4yiC$(B6~Ia21t9>&XW79+%W0 zYD2Yy6DB(=fr(Y2)8_RWIQywVrBg>gF=C+hadX%9HLNXE=pD)f-G)AT|BZ5q+J||1 z?Z`I81A0!lr+q6&*Xw4D%r4#z2cDC4%WmlA>N=SEM|U#h9g-;q$8u!1Q{&%r#l5^C z>K`7Gombq-U!@8Z$Qq|G;*_O))wN8a2;S~2b*udkuVrz{&!1d*FOx4Qo@js1STKcg zCaT?|*$@pOm)6w6H^Ywv%$mBgkw}};;^urVIL>%t{xuH=Kr`&UdC0Gv5N~nY-lY}4 za!l~`#N)!SuCs)BF-y8X&F|C?PSe{1{Q#eqgkXyK1Ryi5w6Aif?FqQ!=D;hVxLjwh z&gRGaS9Yv9Rm3cewJOb-o3kzF{hSLqKx8isl=@54O4BuM9PRDxZEdW;bPmk%&qua`bRxaN1e#P_|6|;Xk^Cok{ z%XQ*f>*PtBR*f1hPWk20N4D<(?$b}3H@7L+*D)=vV#blR?8)n|pExn4kCcJeJC*}U z#jsMpO2hVe{Bft}6;0e+=d2Ejp7eCRZLr6wXZ?_rmF#+=hu~5JaU>R1p{pdqZ+;$G z%_USMkaq?|AL7XGkcOGx`K_v|U}1MvK5qDv@^hW|^eQMQqL9RtR^GzZ{;hJDWuG7h zM%vd)5&w2S_O%gyvqdp`r*`@JypE#NGFambdDLjJ20*MdoIPJrM+qkqqwJzpDInYoI>u45*R$7B)ZT(3S0Xg)|4ju|_eWQ`-& z>&f!~cZ?f!{oTE=8@ut;BhsQJWPhYVsbumj1V{&rC~EgW^CM$ z86LH2H!Ba-tZ(>g#iXF9xYCFG?$&8DNNZ!}%{l3(>X1y|I`+c#qdt1zyV+6*(-V3Gr+@~Mq1nE>{bibBfEZc`NX$y{6dfY4bI=UOpkXcC-=k-{_6U{k0oj%8 z4avk1TDRnmO*q^xkHEib+%#J8wWSXz%6B8ij+xkh?AXa0#*P^_VDoa?0a_DwJ6;G`H*D*F}xHG^s;B$sLIL*#n+1ZBMyOEd;CndpU#?$Kx9ebRG`gp5q zSnp{W(O|rs?ZmQCebA|X=ai1-amx`Fi8>^-Es#j@_eOo{%eXbX~7Bgd@l56vbF>4v7zP7E^1gCIPnWrp*= zXj##=qALSC?P81Y(5ziTDfYG?RC=TxPuHw}`swvGPuD5U@tn0Sft*hrII;&IK0V($ zd-kn2&z}98@+ajR9?N<7=w)%7>ZPIfQJ#pgHo_kS#BjeUsCTS%dT^4(v+MP7>)}8U zly|278mA-FFDKEn=3ce*D7q}VElNFd0JKlFX8Eqwp^nbth_pl5TlLtlbV3Y?J=v;v zUb%Mbe`W<(?vT~UhdLZ*X$GO|B2t*`k<#OO=Ss&aw7pJWoe7vUM@QKYxtxL+&mypx z>^CXV!+>u?&YFX4RBF6%!pfa!y|m{E*89efmo&oM203Te>yxJ*t038J_|hktqq^}z zPL8@{S+~xe_x9@bX7Kf!E!-V5Mn%6<7j{~lISFvK698#H&W$NtQ?vLSD_uSda)MKnq-%v1^->qAI zFc@Oz#Jd{KzBGDS#qt#^mRBqr{gRaP%fspZw*3aqsHm7RuwPq0^it|G=Hq|X=j#9O z`rPVMWnTX_{ix6V+VofEeac#)&v~IPT|#-mkoY^crtz=Shuqa`#q#AVdfhc-y69~P zq0f<6QCV40ETZUSER0iuguD{RaQr}k=2_IyDbL2X_yGFEzT&?3u*bm zG7K{f-Ojb;p7%VkIk>op3b}$~Gx61!yN?*kp0BIx`_h6}-(rWvU5(SWZauP7T=Mfz z;<%X=P~25csTnw%(y?n3TxpypEok;Q_t+9#X*Q=FTxli(Am9K9T*c}E{w-Ju6YY4p zJcCT`Fi)sT7X6UG22){Oz~Q12rg0>fp;z;zsVHHmi7$=Xg)yOaMT9}ID2+)5vs7h- z>atwHz#i`gr>;tNYJoF1%p33p?RsY!LH7_i1B?eaR-m(7(Y$Qlyk@7i!=8vTYiT8f zOEePA`{w2$|EhToKxTlP8G7GeUVVe}%mAJjEHkXl@K|J7OigeKDE0-%Tyj&e{nv|KJp>rwV= zbvt*~)z&7hs$?mGK@~C%(gwua<#O2Shw^jmPW=6TtRa(-7c)v=XV42svu&g#F+((GRMo&i za^r6#QI-;a(_#)V3ep&~)d6j=BxXtj50>63=)9JI{VbS{;cFpj4)APow^6glDIzLj zgAVOfv%DbIz`w=sb*$UGY(xX1Q99Bo+{J81-7mk?v7X8~#(pd*u=_d>MXsp3LD|;$ zusFtMJN#4Nm-`2Ir8Aomf1C(h3d}=(OlQ&J%A;tDhBH`{z{Q0T)U?5@0qBaEB&M(U z*_?{G!tU;QSBJ8rk89mOzq|C#&8JUl^ON-s(R4z+Ik2u-)3ZI!T&*=bBTFA9tR-;S zpEv`-;PlHvHeqoBeKZ}}vuSBrp^QCQ)|HlZj=14)R(*Iw2wlD`gLc11D;Rh)Vu0}! zf{vWD?B+CDbI>TH2LnPuumB;w-Gc*#A;B@i4Z%ASX|(Bbjyv6*6HU*_Daq-a-Y=&t zeN4`z^vZOeMyoSv&1vQ|n+)q3L|S;=WHm9G^q*$&mqoA|DBeZtd-L*&u_KlDm2*=n zX3QS*)@?_SJAK15``Et5*>!c&jqGff*0;`j;Iki`E~G~nA#?iv!Gm_Oe>5PRPZ_dX z9j8N0f7WHl)8R>)5_13xFB7<(Bb<6b;pz1%Kr68DIDiHR!b<}XUPy28RfXj2>b!KP zz8?6j2wF)&!i%{I^GD>*&0m|p4gVa?|2)4b-@qnE`BGN#@wghw^A+$@0v%6X>ABLr zzSGNByl^BwZ^4?;qvP`yJ+vzx?>TWiq2qmWch4R_{RxN5^c|bar|c9L(+|gXh>I^h z`QnYmMF7X+=U}2g)BbP$@dMcJ>i%RLMvo{C=YQQL$N#2FKVK9lUf!oAkcKN_POIRs zx%9dbL4DeYR#AOk8N^;3Pz~HFgZKuVr&X48U4}cFCTI)NBfhGFwo+YweQrA7F`MxU zxq})rRWzb#ZqZr@#oLOG7JXjSRAiXUjgeS=luVM;LZp^UN;MoLEbud{V_X#1&EAjBki|Ecq75nCZgEm<>1i zFniEq9d7jK-Rg}>-Z#2ZV^)={lwZK^dd8X3=m?D&fROAajAVj(Q3bm4jQ29g*U)m~ zw%lzLIZc<@EnEOlU32j(Z`}FZ-Xq_+kKee7J6A*gj|^yjW?!15_Y58-b+t?Qf4YI?!$;KB`86tm>^(>Vh!#HKji z+?5Idd>;I55sXzn$ySw_UG1xjVhAzQ1bqbKikI#byBHQ}tra1L8SZY_77*&8<;-tc zxzd30TXF}!uiSoeVD2sDip=_mS*)yEyJ;WqFgv$=^s%`9#8U?fZ`cCt`wqB z@W4|i-h$V7lCo1-cI(TX=03IH?ycXFjcG3S^zXnmu9Yabmch>SwYU~z4d#%TK_|*a zE0XF}iV-!U+hPPBkc?1F5w0!^g>=JZh%qgU!kF2f%;f6D!9Jd+{2cAVdW_%vOgz5t zZR6qWQ%A&Mm$uQICcdLJ{%7CW@E?6=>(0b?-hD;-*UxY~^6wy)dm;McMeL*5G2B93 z@}_pl4jX#R>$R8!Sb+}vQhVpaeUs=N_9Q>9F7IU0abI#-XW`c_JMdIXkKxDOeC#8B z2ae}{SqJbMyjtK-IZP6qu!efwVW&~67xZNSg9UJ{YSd4TYwZYN?a&FS`d&%OP>)5Q zG>E%i;|WKsRO@t{I?{lexC>V8KlBg&&4AD?mIexJQ?a&Rb_v_`^xk_nMs?}NrNB>2}$S-E%YjcCJ;J^(yM@g zB1r_LXede(u@IFmCKyC%Dg<>A+*PrxYZnn+D`Z~2-??ulBS;_2X^ag>BFDnfi_T;**W~5!}v)4ZckNV7?YBA=};y-U6KV05FdPgQ9l;FXakV z&JG}O$WmgihQ=s!!JeXoLQ;KLwPBy`R)yV~Vk3SLJidFk*ol}wtuyq72G6ECllXKSWQuXy%w@Y-%|9N}lv0Eqt}uT0(q8gj$0xIfVHFJcKilI+=IjM!tX zhKX4xIgNtPYg0_oE~IOjaPn}MjbFhIH zG=_=AF2&&{MP$#(*?V$Vuf+rRRI!yGyf-uW%b5ks=B*H|rn#e#=$Wv*jhZeOZ+~j) z8n#W{SJba>G0|1yIq4Sg81*{4Wbt`jiby4iQ2#*q^PmHEodMQLaN-Eh9)nQr&VuI- zF>wGAbHc{}y#?+BIPh(Zn^blFBv=EqjvlSrGjMUQT_^YE%*noU=6fHgORCPSn73>J zjFjnZma_!)txRWI+vq@v8)O&6SOyCxD*r2kA*K>~oVrMwpY>B|p z=784Bhs-0brZCa6agTO9_0(_wm@v$vk!HtF`ceN*+hmKj1|lvJF?yi0ue|PKl5MFP!_pZ);mHz!AnfsXrk@NhHWOoYwNNm z`j|J#9noJw*k*J*E2KCboO--vM-4HbKx91dzLG4yJ@!~nNyM?FP(N^Is2`yq73ln7 zp5So;*7Md_E`MIAZ)}$q(AE3!;eB#3AwUk85`0!_5Z1+}BGmx20$fii4_UizA^C{C zzuCZa08+VJOVX^#R^m7o0ff=&2vT-28wvzNE`pOZ9$G`TNkbIv&AESsl))iHYrp4A zL~Mj z^BuAUFCBN~4SG@i8?%MRe)7-)Nm?>J$@%zwo9-ykT8nlkofY!eH3cK>)_m+2wDbqPeWsrM^u;GbXsNZad`C!M@S2<8 zTd1R^xVStJPxgH)^OZORy}ZX15sBzMg;kp)EwVw^FN!RcRCNhs)+}8xRbI|Pgc!_S zP8aNziEk%{?3JMa){w`V7X%GQuK1&@K=h~1PaQwR{Sg0-^Bu=0ai7EooB;>L4OtMCN&YGUk~ua}0Zjg$FvKrT zg!FR`A_xpWn;f*M<TwPfFZ9;%b1+IZhx9SLjM8ye1rid6o~CEj`eR`~pfH2cWVSF-g1mrg>((%Sr*rVg-uqqj!%aWT zylFl41*PXL=!}&vJG9HxqZ;yvn@ox*Sq#VZk^rWGjSBrWkSz{jBJlsDAttjt#AGxn zLv)JKXkt!8t%LiB77O6!WCc}hbWXkA@K;EtVMJ5C25?HSk#!~{L`RFancA2Nl|r$n zslREkGFTjeQlVp&vEo$Id_Y^x7iWs4%0^|A__*nia!7nlc|(3xj8hcUtdPv2$znFk zR1!&vmc3Gp7;A|&M;JYZRDG(>ucXUKQYuuMWFgg(ZcZ^J8U2RVa=w&rX>G{16)HXC zLMb4176Sk{30S(CyPCQh1Ga#zNMEEYQU*u^#X)S4Fu-!Vd9Z1SalC$lZlZFhjLb*z zPIjj--8|Mf*)YR4Pd`t$NLeZ`l$MJ3ux0EXVVSVdvdFy5yx26~xYSUhl!|L@oAjG> zk1CJITcyXv&1|!<#S+NcXxL$UTK}|ex3XJ)PI^w6u{A7U4c~K95df4dcRLFkGVYN89YfItw_#;G5GQzkuJB!2VwD1xus9a>Y zl1r%PT-1P=#xw%GGN4DVC6CuM2%pHqF7`dVo1ctI(gkgAve!2mHn@jec zN$;~%*8F{S)H#T4t=JpEb*h6=*d^LQ&aHeL?YM=CK(fmzN}>e+yR)-#kLj4*1+hTd zV>k7eT@tcAm?MI+j&Ek-5^gp2s+;O+@fdZ0e^LrAPH)a*!h%^S&lp5}6Y$fim|b>H zloadAbR~N7rPeM4u@m5@6p#b@*fY+!7G(wPgd?Epn zd2@3s-_tH`qljKHP3$iAj8e?ec0VQ{Ix{-aj|qs*_G=T+B^rZ|9^=;rKQ4Nif4P63 zKN9pzX+^o=a5*p8BYCtOWn05wm)8;zOf(Jqk_UGxUfCv%br^K-RB4N(Zlvj8b*&yO zgr5*u$Gf^03~fEMIIDebyS6PcHMM8*M~OJ3i5`F*1bRpm_5@6^2_9FnEYp3~k8q!WDBO)XxeIfWg6tB3!MCFzW-%0f zqouir{1bXFVi(i1^|}Jh^OIA+zETf}B5V5VcFP^3cZb?jCr({4Ver8830pEEHW`WxU$w*bPN)+qA_4y~rs60Ho? zTLz5ripv{g5Ug?VQz6unoK)6THjB$x<=PaBlIyWT*2T|Be(pVB*yY%Z!+9bWEL~v- zS{{)TLajL10g|x>cYL*|4Qq`o#Qy#I^%*#D2y;Jp_gyn9&PwsK`;2>_(`>IN^LfA1 zwQcFqia877gD?Oz?o(dC6pzZ|5`qnQC^C9QopP+QTg(wv=1n5N`BByJ)=q&>p-UV? zf@TxxoHU0zJs~ZK&z|L=mCQ|`mB@}95CW}~;%h$>*EB$^%=Cm1D;xKz0P}?YNU*uw zoF_-POKalLCAKLJo|{{H1?8A~o+x6lL1H0+YGSGwb?fd2H7w13{rZQyCH^d7V*a{Y z+8)FDkze$-BdIY4mrH;{^vY#!j&T@E4Av5PQ%X!pthXfL7(!j3s$=~wqK*#%Y&4u4 zZWiYujP<~~!={&MvqaFI`zN(&Gig7ilhQ(}-<*_+LqhVEf{W$%)y`lM_3SPE2O~)E;V(Nvx7F)sNCbR9NT? z%J7u1MdCNjlku;4R_CN7af4ck#Ii5dO4b9Vh+<(p7>V*iJE*{rc#1s*l7fwt>^~j2 zkNONQz#fg*j&N*Q`+%(lg3FAlh%B?aQbWOI4hXwMY&^Qmw8xn3u1ancU6x@YXC+ML zS`KOGY;G86mWsW=(OuUkWCk+j2~aD{>sK~+N8dx zp1G>34=$P6uHEce(&gsO1BJIW+nn2K*oaoG=FWKM{OsvFw{Jsq^-t=FBQM;wAu6g< zVAMnX`+*K9e)k;cAYJGlNO#3LeNlTnn=%9?6+uL)RR*W8G=awuWgvzqwxyhm7$Pdh zRUboy2!(JJ$gr98PoYE&6!x$s1Y-UzK}7{qTWG-w|1q@4ZcpOw9`%cGgi&aHR`B)t z8`ekSx^{DnM}o&7R%jh?8r_QQb=l=OJyTH9j~AdIM>?pTj5(-e6=gk!#OVV@H`rMg zzy{%5CLA|pC30_iz3Q!p!W}`B{#s>a<%`E$1-+|D<$ldjIgc$HlZnbx-<-R#bM?aR z#UGtt-MLeCBJKa9;M-flw~;f7lsFQke}Tvq!gWXRk{@L4TZ z?{^GF%Q=V-=Nwep*Z7a6CY1OPPmW}WA^p6j;F%Ju!DJepqfH@6kN$112SQPf~mW9Wx0yW)K*l@lGC?^1qxl9x`0;K$ZV^ z=6vvQMgZuJU_*v;4LX5ae;ENPD9ID?;`K9thIdw=RsVzS^5b)Iv5F@8@< zlAn$vzqBXL|JR*&1E}*qok?xUNKXC#?W?~&nmPbZ86CX%SEqpb81Fr%oOpo#B=(FM z5eH2$ng&o(sXVNKQ0-y!qMZN^Tn{?MGysbbh?JOEDNQBuw{}y^_C{z^KZ%cN=oKLd zsUG5J#5&Y|_{g&jaHjg!{vqj!4v2pH7$^s{r4YbY06V$0VWRr~8jm427=k>avQcl^ zR03>V1F`=rVeERF2EbU-`P$ruodg&bdJd`RFJ-lN8^UDqoZ$8P6MSB6Laxx})|q7h zFlV_4Y6W71Uz4H#VyIlE_Ujr?^*_Wd!O7ATNZIW^{1=Y7gH5=Ez3rBPvS7sC!eNc( zeoXCkNk^bREb-T4T=H(P1{mJ;W%(mT@E@Sk=>o9T;WvzZWNw2DM8Fm>6y3B`->mYi znYQ)1CX5?%C~;6T$)%>v5d(lU7=18gx#k!MWZXXUAHh?X1`fPg-zYu(wq`AR z_H7z6U=#F#X60_Sscgf<4g>mM5R1e1JlJiKsT={S&EmbxCdn;)oT4g#W~(MBC?eaC zolr#1IgJIqTR3#!Nfb*?OBV+YB6OIvv}3$4Vy>u`qTkAP^+dlHM;2|#$e04#c5yLB ziwbw)dM(?<%7Z)0($lerfQzHNiTS!sXiW%7G-r+FBu4^j!6Zh8^NaK?3rLy^bqX$k zf_zQbR0z4FzKe^?g}R&a=J@f3{%;}eaboXngL{fwbn17!zf#-Iw~z58Fn0g!3`Ko! z`D%4bsQ34jJ6*`9@_J^?RwvCiKKJYVCh@MEK2rZq^`rPBN^ef@U1TzD`<>|@*M@`j z&qBic49qQ17Folnlbc}?6!U~-ZZPL@ED5t8QVn%8!m%ejRziKZYXAPBL#a4*dK$Y; ze5v#B5%XRfKc0srYBL)SpOF4mnQ z@wG}8{BOk9Ul(zG)qkZp@FTP=mL7! zAgtY#p~`S;G1(t<#rk6VIO`;3pZ&P~6MGCP_Q5 z^Xop7zEKij1q51-n@m#pFOhvpYWO05?)r6Q>(|Y#D&4%Lw5s6?aflkpzM=2nL!uZ| zmG+HaW4`i*7kC?bczbio8xaKX$RUCWrsX z1{MQg8E$^(ONZ75r>)g~qJ3cFs5j)<+HcT>p!Sm2VSS>hwO9e3m40@EQfP|7<6sBi zI*r{`B8Y2Zj3wqx-s-4hF_501k5WAVSRD})-oUHlAR9E!J-_sK3Y^tk`V>rC_57PZ zd@Y{h#++bh^(4ZO7yWSsY@PR^NSTj5P=!t_4s%bq6UpIDkfYnhdy#BHFOq#F@yEQ? z$qp@B_`i2W7jiVE-`XX4z?7WABiog~=-G{jADy(d>Lc`Rp14&!rK6zu?10{b&}@^L z99-?PYHDCp9ysiP2X>_v2baOIBLsA)D=gCc?I;}_r|-=jA1d!Ho|@aQ-{`yM&1*8N z*P^9zB-}m=h7X^1hq_&wtUlMO)he2gaGSA08^BbfQllYGkWkac?4y=z>YI+!nvSEU z^}1-MU8FnOT?7zh_V7lnhrNEGQ0#CoCePlvp>y`1x+1PzIBjTt(QMuwJ`sM)wYVi2)ncFgVcC&=eQBiZ} zD)!)g3-j}b#l{v%v+oO!*9H6!r;rd(oMycN&#n>plL6f=*^GuPimjk2)pQ_CY&e!f zbRm^~+|+sVQsxb|#JS{sCgZGW>Jf3y*wzII5##jLLwtyR4xCA+5PR65GduBk-tiX& zr)1L`voK$HwwuCIL&2LQsHdg(;E$d=S9`QrOOIx~f)8nrWAjaq-`M-L9eLYr;vDriPejKjp394muM;ApvYJOx-K~6aD|nI}e6KOr zYsBaj`z^eT32B(0OMKqpGpd&;Ix@~T*^U-j&HIh&njI6H=utmg{L$sb;<%Z~{-F^O zy|curs+WCBHiVt>T($$4=Q;`aRN8CFP1xx4+M$aT+)!UuECuK7dXbiTL>K0xD(+(TWa%>=!|3JbcsxY>7O!Y0!$@x(}X*4>s^T z?M3MaRs!B+6IvXGzZ2EAE+6h_>2DE7)m%OTx0gOqFO32;#1V$rF2g1}c+us9Sdme! zK~Z^H5Jn!PR4mWDz_4L~IRpClA0Yj(cvzt0u*C!Ve>q@)Mx%||F#sV74N9?TJ&`bYdxTkR*c0sikWNR!e`7l%`*zv1?p?bLeIYM5H@ihni=0^< zQdnyKB6+0RiQVn&5*Rb3aG1#$Q5&T=0 z*}6$uV|*QNw$bOXq|9UCHYB)tsEu|P4?2hn|9cAoOP`!C%nsUynQOFA`ybk-VghKpR%@EKt-dN{)(z%puEHOq`P@{fK2&_zKOJh3QpQn*#V;+&ngyXNXXp?SO@4KJj=!61Ze^aV*oNnawoB*gKXlVL+az= z`#2KQ)gu_|4E(LN)empg9X0~#Y~w~kE4<|% zp7?}`PhclDZj^+L8`X=f8Tvm#s1uJ$Ltx7hfR01s{1l#M zTGt8e6Sx8A(VUYDNla5auoLVP?uUL|X(F}O^?gkrbg$eAv(J%|5I}5b(lM#Oa+|MYo4Esui1Z$ z5{fJfbww`JiiOTV1IMp0#yiJ~DTv@Y1P|U5HxCPR8alL7VAwr7=FHha-^$M&hYiI= zoSZv%(lv~!k2+6;UJ02zF<>{_O!|M@e#Z2e zz@E-37u=Rvke}EgA+2ltJ#+Hf4@+p?+-`rsWEwgudnz7uM2SQFgaXKQ;{z!I@Lo~x z(WSSWW!K4Qy?oMR{@#cB-h$p!-cYFm4gtZ6AoikmbtEs)yil`^6r!rgOF$s@j`@E=5* zqHqoTYA@$WdZBXwMXCNEnr|G^b_1zNM`@wC@_|*rENPVTryO8Fyu8cQ3pz z(7Lr^9qTolA#$fg097QaX=dM{xw$5jds@8Ro^xB%$cRXTr%BVE!?If#4b*@1OG?6A z(ELfvPlqZ^gcMQ7EM@1eD7i1 z;*?=H9XyZ+_kf)lWKl&QSQjH!%RN7j~TH;ZSo)sN1|Mkaj{j@lxRGdPe zZv1)lWu`onWy`1;DLa@>-UIRW|LzNGiS9J+i#8X+9zx`j!*fCPwaK8LCzh86t4if} zu0LCf`Ft&SMe11h9?qx|LHJ{)CO^oZNtwF&F4QeUAD08!e3q~r_d-XJ?gs9=&UAy{ zcNKL`TtaJnb}K%c%g1v>oiFvOTL-OfOu*(sM36D2D0YFd$TUB>A(sJyn%C&GDa>nh z*%a@|1fy~?#s+)Ie_%d;$#=r?yq1Hjku<4{1zMVJ8gU<|<7QGWXF!cFsD}z7OrbPf zVng+RW53ouD=$_{I3JRQ{D6f)UX&{pS?Y?^94--47oydmvL8S@3Qy zRIy>2SfzRdF*r+JTsPq6vq=`Me>M-8{J)<~vRtHEM#9`$Vrg@z&#&RRn(VGe*0Vh% zs3;1P2OG8&fF~YoxrDB2qR*H4ShM8=pI8&La zn`v==(MKN}WUZENUaYQrD6!AXsS#VE8B2j=~sX`JQNW?kmtK zC8k&Yzt4TxLz3_vw4X2eT@+p^`y_nuvxU4boDTIx=u0Jr(YXOVvM`OpW)$_JCi|kC zI0kmubPa}*EO?}|C4ar(ljwc>rVPuHw<}E=$gpaH^i5q?B?I$g3P>UhE!-67cju}< zy}Nq_3_l%d{4BUmKB3;HdkwTJFo!?S3)wwaz3-=)Gk;P}s&$K{GQQCo-v>G0A5q{* z4zBxg2ER`&lNLj+StLIulyIF9=$n#1@cO(hIv0sNSc7MSpQt5uL$FV~+)#i2fvyE- z1wX1Az^~2MuAx6EYJ}RZ?k%pDkhce-Mex+loeLMLFD`t7ppS9SDco~eyGIGB9Klly zaZ}C{3!e~}Iz(9|bkxtp`78jc6NdesDE9nqsqX7i)r-%o*Q9B}V);|Z!Yu+ieUVLe z3Rw*Tp2@IKg@#}$zMONJHWVUJUlW{Jr)oi7d73#A;p@;R5F!Mlr+TfiI4u3Wv9L^i zUaq>-qPkZghxr0JtIkv;*|_t8wyW+nz4bLn-&kKpa542(DYaSC`bXy7ao+L05O)Q2*$HzKB80mUVUe)y2ohk^%VSsn2c}A)bGkBsYgznAUgo=8Lzgk+gvw{kZ>7jRBD-*OHSWhFUmyb ziu&ZB+HUR#&Uv;e6YcXYQzzNy+b_>mR}W$_qO@^iIoqgy#`wNHtwz*!saxYj)!~JAHnD+c}e6~IRY$?{}|M#=4>sr(e)A-{b4nC&iYCf(F zA)ESt;e%>^Js(6L4r3mA5Pgu$@Q06&>3yt97TJr$wKru3HBN|7pT`yA*03veFGv>Xxq^gb7Ou%?EIE(sq6FFj&H47;Yx|Fw3OsU&dSB;P|+8gOC^2Qs*(l291_mgY-YoB%19j#lB zdKIDfuP>UcL{BOlrc;LV_k+)4zufm9c$4s&RsWif?-hj?0q}{xX_q}6-Y7e2oGwTBe=Mp?iVzIDI-wv{3DoNWE%UTD&y;Uzr*H3zu+4=;RZ1iMk6w0T8r2NwS4#N-Ssl zgic9rqI9)OlJAj{K|PHYS3&(>%Im&t-++PQbTQUvve<2zjbGN)-MAvR;WBEvCZlSy zs``p{R?62%2hh$+8Ume_kW(PL;~LIN?b=_-!{PHBy6P$Ztgn>9x^emo@cQ^_X&2G6 z&ZtG|uDad0=GCrYt}j8h&eZj!6_GTSl5}aK`rbydNQonZAo0}%HAnqtU8S~eWWl2^ z6;?y67=7m~+z25@40^D>-*G-h>x&Z{FhTyH2agGC+{l@j3I`O!^CIxP_voBfa7sIq zf@ED(FA@#Fwpa^eMqMw+X6d+Dt6tDR)56rl1kzX?i}VKTI^R9b>}{xkCB`Rpo<7YQ z(fFEDH+hfIW=csNRMM-b%^ElPS+lkN73BIOav9pL!TKi&sc2s_IK?qPH@bx^PVJdy zOr#nQZaS4}TSq5YQZklKE=p;i-8wSao|v&zoIE(W?bjPOUf8%%nUZ8P=iH{7INuQ) zZ?)t$(M?$3XueVG0uv~B)e-qL+Fa*I_P#8<Q2zv$_kPq{ppyD zBp846>dcjD^vY%X_AOh3SWTEGSU7Qb#H;sUWKlng!gW?1y3Z)&I7ZA zlTV*b-Z9!u!G&5oyiMKe#jGD1>5s-TGdl&EHAOws=1SMP>pBOX`FIe51pZ02>r_|W zjJo5XT@US7!JE^8r6ubM@^ict!VM^kmialZ{Fb;D;SCz|`saxS{quh7@ZypsN7{Ed zf}d)Be*e5Y^<-XN--5imJ1#l2v{PW|p(W~D`F-_6>k<6Q*w)?U@D*LJ0<+7M zlHHwCcrt&{tT%rV?!Sz_PDlUawK1WO3)Bqh5zrdx19_at`~|fObaRNh?p>*#wKu60J*YZc+H#2?Pt|h=hRiGL0$W^IPUr- zB{K-zQU1J%4esY*vM69JZLO@rzeab{^Fuyv%%wA+gY^To>>+tU%ZB(x5k@;Zy)qqc z@Sjv9vGMy+-))D`L%ScDkb-#g{#42DW;^hK9;%J~#OH?kqvX=~r04ngj$*v14~N&J zIWl$xIqn;6H#um*!*fyQcUwNzOY$v6U|Ww;~e_~Y6xB< z4wkUS9qGa%*1v8gd}q*a8r+BL!ozeubpQ4`7dt8YVH=C*eYojkYXLt6S#w|}3i&Di zFC)<{PC4H0-<3jXkp2Q{9o{KW5D8=)b{8bbfPSB0hhdCC8Wm8+80-ddRyMyM{6d+6 zGbvq)RX>1ytCQ0B^$*1!Y_C*^elDWdbzkAWd7=Bj_;Kzu6^Kgcy?=vF5<>4S=kGNW zJ`cV3Jr0wlq4)0L?=`Rg+)uzGW})|%@wQuL(DVL@=dBN2pUywinpK3J_aWX>LhnuC zpJ|^@^NsUIT#hp`UGmj6r<#pYUprmr<0IRnkiy4BG>#NLMO&Zbl#S~#{JkG;anKXXGj97kWVgmuTPfBg%^^| zgKR+XNhkJxGP zM6d%JcX`EqOuBq|#q#AVE>qe}bv32UR3AH5EzPVDSMA=dWy|c|P1!QL@sg*@TzL1w z1vZY2d-p=P|LhUoe~2id@nB6bKCC3xD71!{>2?8gXI;6t0w9MnT>sicQ+g|vh;^Y} z3zD*_UW?8t0wsWnjV3x5G7Q|vUtHo-d_hg4308==Xl?4WIo0+>hB{vh1i4%S=%$Ql z9dzR&FOtXM2(;NTI~7GX5gFnyP@>Y93=vqKlxM_wfo`$`;s>=I*e7a|v_II2eNs_T zf&6S|MMd!6=v&=&wEYe53nIPo8j6+t6@T51&lRkD%KPY>0g-3vSTjcxYjlz;M)0M^ zIpt`tgOY(RwnKUboWU9}flwY76T2eaXedv0rDwsI4-78)nO!f-Q1&R7)g>IPM1cjc zU_taCqSSl*;)#vp?z?Z?#SXoH-D_;pkF|E&8rnZ}WpmAi z9#?5k^h2NCR=z?Udu|}sTpqt3fnlC8#vF~v%q)D*@i2L`%WolQ$)8*%zaE6}?z4`U0(VxxyIeqyF6I)lvua_fN zuPL3M5)^BkhCUpi#P4~#@*>CzO@%iCW|vdn%n_+a0$(N(^C|e;TL(-X9a)Y9hqTtg zM$HmX@(_4kRZS|R%~eTj?A6{9D*VcMERwO6Kt!BVaN2N_(}B!;{2hnC^p18{u3Rzj zUoGHgFs~#?ZdPVp?odVr+&$erT|Irh;`&+p2>n=3TW_avRKVHB*4ov^*($D;v!k`0 z(19671(sAjWi->NsdsZO25-cXmRS0{`> z4XHHN>jfNLG2RLm_)vWVdn*xrBODM!p9J&{NpGO=$BTgCBW494vg5jAGEDiX;+w4m z;Hxy~fsP?dHY?ngPLL`NcDTzpk^%uCXA_U>Mv~cNwsaI`a!cXEecPAz4nnN z+}H`hwnFN9@AfdQ0aFpVtUhFh3=Tx-lngnmn=iv<8t9T;QAxr9asdfoyQjK1uX- zlAegok2Kvd%cY=TGLEE4S0?=sWQKR=j&HqFP?1HVU9z! zDsbAh4kPxYx7H+I0l?u|2KM-3U$eZ=4) z1Fo)E@gV9*XgRM@QP0F#t&K8dfyMir&t@Ar5~;DokEf}Fq~GC(i~|z3*<^Di$k9P_WK)58lD@Tw~HQ8iti3c{kiQecY%-^>G_i5GyTE&!T}$IOw1$S>CrPraCDoDW=lp|nl} ztnEa-_{Mmv6oih$gG0uKu+6LLGjnbnlzTKT0!}nd`GVib^K>a(CP)IlSF9BYn8~c% znXFWiNZL&>y1WB{MiSqRBbtM>y&&xzbOrO`xERoPbS60MPH7Y^JV90Hyz&BhCm<%M zDpQh+v#@-(sF8p~seU9IaN-6BlMV#$w|6Tl-*|gZqc6Ycku3uQZr1)<8U9`Sv9zqL zR6L_zTDEoDgX~S_o3MTBy=tv^_~N_jgX-#wmo8mo^Vs}%5l<)3xdHrfoCC1|y&X8$ zR-VtpS%YG&R!RUf{yAbRxgN=j`{qe(d~(WN!)F{GG>FN?!OZo|QL|;-Me!`H$#KX| z58!!b_??Yboor+payGJEv}XeDRc{95FYr>l2B#518;NiR0OJ5XMRXdCNDz{*IFu{K zcI}WVbj4u+fQpj=L&cAhZvNx1uz!83c4sj0jVpTvI4W7}Z|aC(q1bta+7azT){&Qi zZmp0b6+1I4aA|2R>nP(yR5*G}AWCvFK_@$jhd3c;;}sx*@Oj>(@yZni>I`q3M=tnr zvVh@5dc}K0_#n@y_nu_m^~#!7Jnu7Q;`PU+cD1MEoHO@sN2UVKXsQG71?lC&0#2vB z(5EQOi3d?!u<^Rkj+c5xDe|(JJi;74#v6gsHBJv8nq)~I>Jh8&5dij-EBFC`5kj+} zRJrur7NO0hXFJu3Gc0N0gg&wu<-7A}x8_Yt4=hGH^x!4Wub7!PVZr^wm(1>WYTxH` zF-Gid8Tf9HwE_V<_I8Gx9Op}PMWOI}I_+=la7B5gVy zCZ8UJ9skjBV})0(R)56Y67~S_d7(E9(&o1AeR(tHHWGNP=4cah86?2XdZSSO2Lm~E z3WKodOKfXAk~^|QsP+h`gA52WY&l@K05=bULVZXfto|_Z^paaV)S|%NOz-cNy6_Hl zeDzwnxH34PM@NM{V71)8U))+dOnR2ieBwX5!GE0Kk}U$!o+`OAKDNq)lJW5g-CQpH zK&v6j<>0W(SFr!}*#ETsiQS`pTE$!f2^J|w1ueH!8aVz~MEgx`kJNyiY8D@8Qzd0m zB|G|-HcuMi$7KADuj;WAf_tU6zxpU#B@|c&;M-IyE`=g>;=o4Ij6EDKNy~Asxd^E_ z;Eb(`b5{v#QjMsBWUbOwrqY`7PGLnAQj7)QWZukcCC=EGg^SOs|JLfD)Yq`vcmIHT zMo#HTDBgn-Z{b3AeHt@!;-Msi{!4z3^PYIjpE=QPa=8b}uGnsbJBJB#W5U2Ruz*#O zYZ9C#0Aa39Aoi)vA3qLh{rItt)vT{yMIxR!XY-(<=Wv)8^?ytp|JL0hzBo&IYx z#VUo=;T#-pA>lHQ!s{qQSo|`?8r3^wqdK%kV~wuL%HY4&6My9LIG#^=8>aYfMilWg z__%-w@eqeXd`DwPw=@b(>8!qLr798)L2cyex)jpYXxo!E26j9sr(oK~scr3sc+cL2GvU#cp3syZ`8rUQ1rO zzsr!L_s_rlQgrIr1^*Vyg7?1Er?XAERNKtfdGJ1QMQ~y5^znX`bXfGM1olvX=b{E# zt3ZUy<@R-RxIAWqMeh=UK`C~N{Ne}Nt`(7I~Gu1y{7gTV}f6@ z1J~%)cfq|ZQ@uoIGuc&_>KxFAVNZqU@=mg@;yT}#@ZrGD97p;#cSDEI8%+;iO4o0v zq1E5d_4DM0_wzAxJ$#g=hckK-dQUcwa;zS)fps z_sYeC9b>>WX}kK&LREYQN?WhV0Q=mO0k%p1FCOU_pAc`4huld>ra1ia^YTfvpg3&3 z4oL7~L4IUBbCG@lD-VUeF7@?izPWGArAyCB&0e|0*k|e&M>a;N-!9+3^|rr}Qb@dC zlb=mMEP=j^WVobm9=*Zti7`ZX1J37_8i2T6sik7gHo3&LDN!gf$CY^3#3T~58{VT6 z6zUuY6-Ehpg0LqysEgwwMS2{rM3=O;Md$L{7cT0>+-lAJ@4mC|gJ0CoRloX6^?sK1 zlr;0#dn?LDRE#L7=ron(@BCPuP+O}`WJlNqNK^ktrN+)!x1q304OBi65=ov-7Gfi0 zpIr|awwl`3mrot;CTz_E4L>I<<|0uDCc@5>t~eVzET5xXHr;=GZL01 ztW9`3K^_GoprrHAfu9cPK3SiapA#v&U8(q`9ka=D;m$!#&ov#iv+sh8gc(Cvmmbqt zLfV+7w>zVIKcF~!sQ-TGso;F^!KWT#)*gOig~^(&&Ss0d7!v~{n`CtceR7|}6Cu9> zwj=x-lh^>vJkc&6Q^+oLn#}`MPvSHd!or7~8V?%l1UqMpOJ`*90Ig0;aXC2X(M>yN zz!jfZ!Xhd&ya^>n%Noxn^RWzG-kn=Jxv|sv=d&Q!=?)!Ze#r^4BLj_C`}zZAWe>d0 z4}(>&zcj1wV8)92&U$H9pP`Hm>4O~p@msc{F2eU)x2Q8h=Yf0c7PjsBg2{8vzA^1L^2G!Sid0^gxC+<|d)3wUKD3d=fMVmB$yrHe8|N4S`cL<|Us;5=I0E3BYB z%HfnsSakyMz6_Q%3H)ROndRhA2B;=pq^3wB3^XkZnjldD>`2PRZgIBkq-*v_UofB_ zlbb*)8{1cIQ@f%2$8XCO^4lLv&sJ8xy*u~gDvLa)*}NWV`5ocoOV&YtX)hyU$|@3n4Y^$iPw6r$h%AZZAo(f$C&ZK zd)nkrx$DzxIbA(DvhQ8YNSD>$w9COyC#AI5*#dJrM;!)R_%+B!38*LlK*G3an@R9V z-e|ppwk?urC5MzPNu#hqjv!IWmTd#CA(muumz&ln#*_;ZJC^9cp~N>a#gSpq5EGI( z;+I}0CX%Nn(hGn;cxt4Tm9;zJe_?G|o9gQ79gEc-RCP2v3N{l@Ea=hYe^*ldVhN|H^))~#CIkFATTuS{4C{p>lM6)CXKn_OO3 zn#C{s;sF5#ZlXaSTOH*t16*IJLV5CvRO0Jg8)KoF`?J9AC;o^zZo)iLq5ALQ#Ut;2 zyKlr)S($FA~G*MZ(tC-#Y)VTT~11H}WO?aU}{F z#KGIu5a*8YmbgtNMz;-!?-_|D2`MG9$GAs_CKc=(2+cqo*X%<#O>*3YN@gv{xY&Q1 zwdQJR@gAfr=cY7i(rjUy-mH^)eD$~&TIc3AZ;_LeJv1;#zHjHl6O2aJZlBHGVc-n) z&9%Xf8=jhDGJAI?IGnx5XzPEdu2#N?^^Zj7B_@GKBCt6Wuvu}_yZpxr2OVJ_sOwR2S9^tZBl}FL4y7Ssi!d=! zr$`90kr4z>ILgA2&e9&evI!N7E^0nVhvbA^gb6Uc$T~>1N=P2&QZZb;eq@m5N^+_C zRpn>FG!|X?nKZL@op?s-8-)CW_GSY^rx^Sq2`{i$P*E8B-0gxQ;0FbeO&%v9SZGHk zCMAmlE6z`Ohuz2C|NgyS|Hed-k4s=56&Y^-A!BI!xWb z`mnR?Z%ecKwtOdeCP|F=ZS6x$*5+`5x=!9GFNA#(bLdAsV@TX&PR#?8LGykvmgzrK zu?e;uwXjM|7}vb|U3S|~pFThL*<#jGtzobF`v%_;_b*FYx%(e)r~}kb)G{{uSMAwz z)ZP&GFTvI{G~jDzWe$S?hebz69;7j6rmtDDFFM{87wzZ}mTy}l*@9%2%TO}*8`}-1 zjbS$$I%KwvThYOq)}q|ArUQsA2S$~4Kz4&%MqWU~1?bZupHVq9KWMTU zf|+@Y2ib(VJb_?ZmtJY#^~1yJmHBJNKDg-o?#W#zq^D1qxZ&MJizl=l^~d0nExG4LS9R*%rDX8+F|8(upQ=Bc`||112~8s(h{_(gJhId17hV`W`oLkf`Aufq zv8+%%zT+kJ{It8LPC4`Ak7uS#y?X&me`yEnRCwQ3^*g@SCF&3^@23K{J=&2J?R7<_ zcZ+Zd(W2epK&2I<%b@F)_Lq~A+>VUM_T;2AyVp>i2IPVgc}-e)PEOIBB!$jiQU}CH zZ|LYHbpQao{EH?Fr1*Wj9}tLROFmf3K6yu}kly-u?FS{S_0-dkU6?j=QZFaVJlW8~^_M zU8hW`s1vsCI=YEvD7{=OtJJH1JhyrC7G@T&{Juh5w=&T2(nqX2%V&m5*pB=>TZ8k= zM}4wkdVR7XO2c^#_o>9U##$Yx-x;ySrg@nh;XaYm`>@f$|SnEe^iS=IC;v60wHI5?91$eO_CGWzJ?{A1y5< zr+U&%H0g&6%ehWmkovIn1Fy8}QgQOfs-9z4Eq#A;X|w!$=bS$`XV%%X{iaTp7auyI z25X);xcrfBd6oyfIYaNcd&;s`w{2Xt;@*$dbm&%(m2~bx^1yAdJ#9d4NF-I9B>#~{ zLo_q=#eFRKsazf>j555RPBIvO1Kr{TN6sYrqN$@Vyq{kXsgs&5dnlnGE;Y_!v)H3z z{E6|=-P`s|VdlG*%}{@PXngOyP6G#*jJa=6$C2Cm_ihoJP&jW=_a;4Z0@+RC;}V*8 z7%*}4g>|i(mKI1|H+#)VF^REBi5?%yjwsO)EuwN>y|{mCX>)(4NBT7Pj~>2k&8+Ci zmYHd&$F5I~>Cv)t+qUhqIwoiCD4H^01J*%amV1*TL#2O)TH)Yef4V=@!&o+YyFCts)4{|BScSQLCe<2wqHOWX}75-#9qp$#4w@9OAZ^d68zMML}k;);% z?t;Rp;GXOQaXRFl2)10k?2bw9813zrl$hX~-Md*96PdAPdhgkB@rg-YBcs}-xntA| zY_3ip*RA{Ylihp7SSr|Ab&A-Yy&M;lESp|7D@vD)LUjdO*4y7jQOqx!+AVm} zXh^E4NJ5e|^*JAB@j1*Q%OzwfEVgCH+GP^~sIT zgNaF(7oRK3hKKZ0w9N->;K>Fhdi(ZhSWRe-fs>nxyuvsEaak+{JBCj#^sM>{a-`dl zwa?|?TPmcaNKMuEhPLt!9J2VnUsw*#??2SHc0aj#3EMxXd}r^`o9=q}jic35rcRxB zyn37h^rBuni;`QY)xm3O_14GP0QT{PmrbVh11SbwZ6|i$mviR6dTikwtT_5aHsq1$ z6L3#yABX!C>22UEBa}SeD|eWmXu4Cr`1rqiHj8L7apc09Wy_Z@`>?L8bnaxs;pQo#LM|X5!SDsbaIi)>!uw z*H?4#;(ymvJvzwBCqAS+u@@j(y3WEa(EksC9DXAl-gN&z zz&pU#xm-)<7aS1$=<3KknwUXKHSs>_AE~M1?|f;}7?=1|aHMO@q?eZW?bUzEH1%ih z`>;%$o{=u?wVGna-?3-io;$|JL_g#5Zrv(oY~AWLz+#CtKZSjkskP_kJQe2#riMx$ z!Y#^=OD*7vPSR898Pg{+3q4%@dD@izz4|Vv#)Bipr>OBe$EQkrpR^dzMDQPI!u3pa zeaohh{-(tS?&M?VYs%;1)%v+eSFT}h(s$@?v*iS>y7xHnE)mcClw2+)rzb!})Mhdq-PiV9;xbu>4 zjK#x-w_#tXu~ieLbq#jKI`PG?*1(f_b6dPoF>_`G`?=x92+=)XYu2OD+NVhf#Do2Q zkq9ny^FE4Or&w*+G~sRw(b8)DG}!z1(EZ+Oq-@Wtzur%~?$mp$z1* zWdG*Q2bRm753CS6FWE2bXa1i1-TQ6+o@4hfA2(&cyKwA&p|E)WhA#VAvA?tSyUTuI z$gusk(2G|4ZO;8HZ}@@b0)I->e!)SHphrzb#D0%Ob1*fn4qjzX9Q}BT`qR%98&9z09ovJg zmCT9?weXv(^>cV9pF@}{F^5Oxy_hS;c@owJmD+(x6yrh#(THdr>a-KODL1V|y31WJ zL|dLP@3oa1*GCIau)UGx(wb-p{M=;4e;jbxdLD>$_XL2I%N-CSTMf@<9$k{=hE9aV zB`Hzltj(2_sH9&+gxdl29=3}0XZCmAg}nOvRWFsF@Lpvo=f?`)UB`AH+;lSA@$jW% z>c4)d_(A;~>kYq*yo>V;NL||cH;U2Lf!HaYQzvk`soSVd3cY_D-v@&c+?j>-h=9fg zgw@Dshv17fGoMLEpmt=;bK@af7GKt@vd5m*p~O*=#-FW=?N!+B1^ zuk24sg((?cK&OmMo;TF>@0UvpzrDd6>a`nc9|Zdawmtc&l35u%8@$n~B8xpO4pW1V zeelu8A3V*Rt4o3((f$PQ)7PM1g!G>W_g=K!AowD|=X{FnBkc>?pq4Ohjb!C!{R>8A zMO3*U^Kd_SKM~Z+!yb?m05K!fF~)lZ&$?_4t~z^GyytAFTPz=4`t*q%6!r~eYO6Q_ z9s2mA575$l*k{Zqz^n6P6sXv)Yj8rjacv%Vtx#+v2j8+gB(S3dSLlg(C{3 z1Uby=Oa#mqwu9G zHQ7xFr<0})eHLF(eP_jw&#Jx(gyAED=z6Al9Q|`(KBjP6WD2JvtQX~LAa2Y9&D|1d z6rvr?WwXyChho(bv4WGzT<%#BA%m8b@`(D#d%lyCa`N32ea}ea|@dTX4G_);l%P;1Qg8zy`yRuukGmU40D9rU{pkd3lf3dq~nF-azYY; z7hz!rCzWeccwCxdKx7)e5Xsz5{@#H~S~yP?9H}heMv?+bwgSz>fou&Xy8xNz=-KAx z7s5u|z==c&cB7-6_61`Q4{5_0?RWAJvs@;9dseLYCHRTh^A z2$~AUi=PD#)h?8n`VE1qvdG#xsZ{J6Jw>ulgowmmNiWX1_xYxy#iZwHq=my~d7 z-Iw2V_PsMab6xq$@~0QfoU=Hp@9B(WzVEO0uU;`Us1sftZM8p;w zV6UjLC$V8KXiOp)ON>!aOtHiWrfU*!Ou0!+^(MJ#*C=QE{nqS#D8}6P{r=zodA=kX z&SsyPHEY(aS$$156p70WdPE=^JtSXahSbM6T*@_0kR}`F8y}a}8OxZn_Y*C^Xg>3qJpZpLrlOO1!0yhE%~lp zIh%jULu$59>8S>1GL8K!OgDp%CQ#_3%=F6%$ZAhLd(J1b?)h z>g=tsHkuZU7i`YK=Nj{i)Oi|p2KdKYelOt57ERYvHjB=MV!kL~^>lZ$OBt?m zl(J7y@{Zgr8gLE^nh&~JoLwz0F4Srpr$JmnFbb$>wG+*p5W zj2v>4m9W`2UrLA=UFBzqnj%eY*eX5-phe0|)DbV%aW7?;bW4cY$p>Y9J^TY)JVhT1 zcd$Af@WfbMT{Puh?jB`mLq$5QbmA>NHL7uZQ)2UlIRDm zN2us>^Xso~*5CZIp}J2H9#l zZ_MS4I~f^$Lb+I`v6gF(+R8O%7ayY)d7z@V`PwZq$>Tb3$Q8g9WKu<-2<0&~^a&Qx z-{s!I3Pq&&`9ABAHING$2ePxE9W=^)J$u+c=?Rm%de$?LpBy2+N-~$Gt@I*rz-3e} z^Eg4~2}`$W%UzC|aHc%GkiDaI_BSb_j|vm+A|DBpdcdH)?` zH^*(vXk$87|D-hc3=As(>0!Jd(ljtC<6O_7Fj z{|%8L>}d;?{44H2f!&3oCdd>+39iiA6j4Fu zS&?{UqD8yp*7CBl<+pAvD=S;pP~v*(lp0vU6J1Z8a+TkytJC&>D2C#Y{a5Dw<~23O z;{7+@WZw3vxK5_<{au5z`8wzhao30_H+jPl>2J~a7+t);MAh>NI%#k8jtQM?~-_H@A@U8stt8*QflfQ^N$?c z6zrivt|1B|kozYroIF3gpq(4*;H4CB=T+l{#fbipfBgC1@*nW%b{q+G8y0j(Y!`EH zN&hQ0{qpy>K2K4~&!g_&8}c1^U#_rt=6`!`n~FI#6#}ztc4ro2+u1u)=I;6CD#a~d z`Ht?2v%ooe^6~tWV8p(=xLQ41X%W+6G+3#%JU`<+-OQw^bP6_BT5DNlFhBCwalmk> z;0HqQM5uiHhj6kCsA8WkG=vp1-IA3nm&o^inY41{Bp4%4U%vj>l%*TK`9Mw;B>Aba zd3j^lRk?0R-@aK}HaOkU-!O?9>K16-ZhE10_`=cva9E|C-S1HVCI~qh=C7mH4gUgmb?^xeb25 zjUa8J#pifbKO(ya(jER*so;enb;5;3>ty-I?8>~}Rin38Zd|5|c_LNRWYsMdBD&KF-z%!)j{m zN62`d%&y+A5F|UQ2dF%xd7cvOFU_OqHI@2WK_?oF83?`7XFOW3k;;^T32_aH_^Lu@ ziaj2-jv*+OkeX%l57 zXKfqi(O_JQrc=5_sC04D*J^AT3_()xKB1|RDl$Qnxqb&u0s&3}mlJNGeFo>gAh=XN zc=ZG~l9Q0sn6jZLIhk_h&Z1G(?UN?4Hr4FIu{qVuU;ce|r%vpT`xRJ{Lhm}tms9MV z8G=D{GN4nFPFWOXVqj5Fb!s(+%15d?TK12cd#!5N%^LJnyI-L!O&wdlt&hgoZm7`$ zU8fRWD-)_A5Xw|tM?o44!%jji={g*5kJfc`JCs>4T@wNwNE9?(p?Ah&E@$WzZPQI& zNVXSUO$LLLr}+|&D_;kUES08Oy=$ejTP1qY(QTwyno%JY*n`r85^stiB+mNa8;CY3 za=8%3^zxrfzhuP^nY9LLZL{ovP_yjN+~2sNJi zO5HhAjk%gs9J2TQXqNHk_a9&QtBR9M=Z#bxDk2FLCo!0-IISXQ?c2NMJ)8XvA;Ee7 zm0bt+K8s56G4jXqgY#Q%XM0r|2@oHO!hCw`xCKjmHK*pUOc0T0e?H#g_41YbH^%4&W84_#H`6 z3kZ+st4h)KS++lab_m>m8sDj|7C&={&GLnpaU2{%cI;jIf55f70Y*e@NUcCiq`!1V z^=hrbqOmq}QwjJOTd-{I-Me#_VOMiX zcYS!1ovyhppB4j#jA7$OH9Wy;GL* z+$B7>Aa_XvPVz{fr5pEIhMov?_$))=vvhm3&oZ#lXBkLt$!0!FH}eS$q53RCEhj|y zEUhO(Ri9-j`7HTU`WEpP^vjf}2VoFoE;lqfFb^~YfG%MU&p>JbvSDEQ|BYLKEbf)I zAOov}cHq0($wk^8h~s$)0kXIq$Odgg*${*@+W1LV*3t z?kDG*{z$I;aKZ137VUbj1|2imDY^es^0Wzs-^t&9A&+RY!IQ;*-pYz$|E&n)@QC>_2Q8;uU_^=kT?>2Ba%7B9PW# z)BFtw4yqO?<^}$_MGOh(9B=7f0iAndhdLm41EDd_7DJ#OVYw_=^1Wt7*uJt zDl(p#n|_h8p_qRa-AXCE3g+d3FpzMrM8cEF<-U)OeDE!p>27&f?ig_%sgX~sLZHIE zR6%eK>5%eM#LGDE)Ikj8e$13~b3iXotJcYC@YR^yP?Dh0lgV`t7h9##*Hp>OR@Yji z3kmO>Zb+?F)Cc0JoG+k^s{=A=pbC}!)0!Hg6&uCjBDswiDoF;44A+pTf(3d8Uswxz zM*qfiH&~EB&^{_X10YV%;7*VNQ2m0_vL~lyt1s~7pyt1jvg+mpKWj$DFU~$+SG{P_ zj>;A!{QbY=cUaW^eXkt=@hbO@w29O1TbwVusd`8qRjMVl&(je?CT1DK>r$TpAmbq?0du?1@xO<*FI@QU<_SCoKHz^B&i>8Ia?!~b#_#}m;9bpQ#XV0s4FXj<)V=_D z*a|BWY)C;iAFYeU$4%pJGP)0%2YchaJgT5fIt~BV-=bs<47p-@gVO98~ zZ$P(tbYlSJ`auryGFr4YHv-VN8Gv-_x*9E&CN~$U(&n;VTS?VEaJ_N(!c^e|)sP`7 zDcl%Bidh#bg{mTo{i1x1^{Qc&@^D2``Q;Q&Gz7yf#D}-Ybx+GD6q^uioO(alI4N?J zAI(IvPf~CiuX2NsI%1Gkv;oK3d9WtM$%|}nUEOBSyR2ltMNVZ?a7%-CQEZ~vq7$T3@ zL~=`_&BSz;i+8@PzJ2GS@Z`l!zy8X~<*D=s8gC6dAX8!yx5GoYA-}k13m8;h$zd_N zH-m-Eu-`@a$5__6B}@)P3x$oa;V#mX%}*V>5w@nWO-%oe3M0g@snyl&I~Ld+R`!kT z10GCWm78EL!C9l)dtS&QU!Lv`cbJR2zncwRyZoIEF5bvI^n=2bdhOOJH$#>Itr)?O zk#}fIcTGnbg;bt=OH|(78Gbv_r`+46%-tZs)&E;61??z4J>=`U`Fi_UT-{u~EiktG zTF|Q+nNAclr~Yrm$#j1N{t@kh;~;+sRLVjq7MpU3kX{rbuCLotxctWXc~$ZttyRuG zR9bsuS^izt)xJU)VSi2-;lJb%OpFEZt!gKHZ?`2Ze-9lX0uL;x6Ix?$rsA$ay%zlB zt67rnj-(}DBT_m(qZxh_@*CKNE$ak)kX8Fpa*g@ZZrB{*OI4n|VuhO3$0gvFH zAsP+LG)>rRj#Y(Xv_R-j^8O}7?o_ZlY`XoWx;k+sp;erP_@gF71~*6Y*!D_<(sW># z<_3N0NMCF@_rnWR<^}@9WceG({Lni6g5=FmD3%fq=7LHex!53Ym5S5kZFDC>CN9x0 zAZrcd>4M-i)Zz?D_Qd)i7}71qlW&Og@r;+G1n$L2Y9B({7aF74DC&~uG4R|4H$t3; znd+TMB_%sv?|C*f|5mqUrNIS5dzN-;=)Ab^(@ANw8JeVaJD2;XHOK4e!L#Md&wN@@ zw!freN}!vUS7>+N&`6V8tAxB~3yS5Ro)|ogz5MpXHHPKI&L%-0{#>MA+i{y03>uR= zc*^-?pJ#=L4p02p_f(7vTOqIbG~GMW>gP0EE6k|#9$xsIZ0{8~DxY}jNV!yeL#NY# z#Wq_jxuiNElDcWJ=0vV^gSc9ua=%wXBHF+4oQ$T$s_(lo$`Zjk#W&_mJJ|EEPj*2_ zWZRQ5<8wO|w0kdMa@yKUtZm-(ft`!BCr!wbVM${$M{TNJQbY@l^N1eg8=8Psj%4xQ z&gh-Z2Jah_V<;QvXAFy6-^wd|@OI{$Kcat1v|$IU7!(zf{9KTUuW-Cqg41yQjJmjA zE+u%T_o1~B|9%a$>yHm={s@f1q}?S#cgMewS!k8I*E;$HhX-`;EPr*c?w&mAA{(=~ zZt=GRCv`7NOwqa{uOj7u-AS%v9jG{y_(OwDD88PZh~b$g0d}@`bbr!AEmwr`+4B&H-7bG2VjW$nlwc9o$YSB=dWb)=4p)Rse)OYg{TtGFUrk zE7Q_?diwNf)qAL1cH92?`|Ku5DLJP7*@IGCdVJD=>*c%{xTL4 zS#hVHN=)f!iwF7$Ic)lwh~2v=eZ>}7 zb?8?}&-px5>p*x_x}ZVquVlm*P&Zi4(Z7hbSa9mw631x@%|I?~q8~$=r4TG4_uLw6 z^Awc;W;OF%|Dx+r^q`x`Uj-4 zNvY%!NU87GWmj0pT9zzMwXYNApw!wY@5pzU?OmbgyUbnw*SqqkOjrE<_oecExuNv? z?~4gW4=>9+|@UpWwp<~akb%1F~6aLcq7T}F~CzBs;L!Dyot_ZG@*;C3s8<5iAR*o z(@Cj4Msk~{o+LC%F(3g6h3)B?S0d%{QDQ)7)3>G3fj<;4TUPu-pvleC&$p|upQqU= z_J`u-%Zq=Abuv31$+7Z*9p}&QU}IxU%EKV5*%ZLW?5M5XAs-BIvhX+Y@WQ4;zx;Y= zle?>jv&rO)S|6JZ{rbzHO;)q|`9RfsLh1We9&Ys6)n>6(y^or0SKd2fv#3u%A3S$R zdjPnP&}2WfZddd?dT7;MaU2|rCU*UoRZ}`!^Hqz*F$Xepa?+||-~(#gzOB_sAM{>~UwY=b72`}!7I$}x zlWA;eb?wZt^a-szoVKjp^W%31*El)3IXls3r!{+i`u5=3#?Lq-a}Z;2PhV<|u+~Et zjFfzJ+wp(BkVQ{(g1a{(H>2cdx~Y%4nV*vx?uWDV}A&Naf&B&+5T5Vx9OL=a>3OR0@n# zJHtdKd!ajwSXcPbDOPpRh)|UfV`v)D1v{o5sdF=TJoeu(n|19Iu0;M{ZfOzVF<{ zEKJ*GcU(WORgqCW@SPXY5AGS=IM`=3td#|dGCIA<&;0W5$5%-gm}%?2y&|W%7VkCo zjeF*oRgeE$`=-#YbH?wT+cLNd4g{_5b(S zLk|Q;=Re0A_jjmo&>k4>=Grd`7Ys3o5kcArw7URk;%$gpLF+bZa~LV&j*d(Y_tG*i zy*4r&<%YE$G0X$SV9`81$(CqBMrAuSc0B!L5^jF?CyfBIdXkXekpAE-X9F8^{m}Bk z*Xb|ev*ts9=TR-M2ILS#c&#KJs>A`~`D=KdqI1Xd$LTp@04fjzAdt4h3u6tn3SCw(AL5F7Ex|6ft!6l7&O;=sz*5_~XqnZBtim zw!a;BY6ug|S)tB5o*Vs4$>n;KO(>yEPxoV^UyO}!hnk%_rz)zTK&ixTbRKvN zsx(E9UUjI$>mur?afgU36h=YM+sGYTkil>acr=cvfSswA6nu z;EWO9M9`J;O_--&5_M|WRnrJ(g%w-SY&IV;b%_*xMPu{^u73iqT@btL&Ya7Q62e`} zG;TU4XCp#*8M@w+ZS&eS#K*<`*1+S8VXTC4kQ_DihYh4%rp6*dsQnXRYn8CQO14$m zALHYvVEkdw!Cf?{eaS~fU*^V9DLxD(X`CxDZKal?#2z_A8lS-vrJ^g4r}$eHyRcXO zxJq^=9Lhx!4zkWP@j_(Kb zeiPOjK(N?+Q1%6&8}FJ*aho8c_~lppmiS zYQ)VQyvOtzgVD+IwdbdYL`1Y(rP$A^q~(B;UsY7g1+g^a<@>$`&LsRoNITN3eCfL zGRWHhf0ro(cGbA#kObk0mg|+fJe)40rCfn1;B7hQVNLKEV37Y?_!?vN{!id*L}N&l zkkTB3GUBs%45tHs;_E;k-~-L;Bu?`k(tVxFg`<)Nq4wx1s4sUiiT>IY7lvdS3dc#n ze-ug^2S+BH+;`$nW~0T>Xf?czQ#o!Ls!;lA-PNl~jtymeDyetG{Aj+{5F?e&&qup- zUl$%fr>iuY+$%zqm|P}OuDzOTyj#D=ZsK2(O;i}Y+Q}xs;-Q#C^&{2crgdMGKnmC%pNU> zn0eER&;meA6g=oV1!bW{+L0Hw2)yX)Yw zz(lyKpdRzffv@FJSCx_uh1}M^-c>w3%D(5X*A?H#9DNAZ9fbSJHN?%}?uR&8L_z8) zbfXzurXV9q#MKHm4*~gUx2^%8Ti2R_^vD}aFRdY5h*utUWr?phbR@S=%UkPEL@b=x z+%~2AkM`f1ZW@G`gvW|W?Yl~e34t&Ry9&rrq(CL!@-|k8q(H*32qCGxwJXCz(ZfAZ zpx<}Jmtqlh?20c13Q~0HV}lcHQ9Z|%4H>w2Tt+BVZ)=l zUz}eh|5iJGoWrFmwH4*XKNocD=c1@u$xf z_)P1#>d8&L;)=$P=+Qd5_sIOQ5d}w{oDMoy>{9cj1)4OnOWE3Y6`HSxqX6p)6qIoN z#02H{6jkjihPH|ow0yw`pmfD6v-&;t?yAx2M#d!Mugi_h@efOj^J|@5I-vW^?3htw zLwg4L#k7g?wuHx|geNcW5tz}ZchKtVoBE46tzvvlo*}KRzHLKnLhBVD?a38)>oSUW z{93S0p za`&K!%*j3e!|&=6c{bUFP^V!5LuNg0>zDZRS-8Uy$4bvN5d85RVlA(O@CxDPcB&I=(zH%@azVJSgcxTGeCrm*<>IK(q^~s8YAPQ+?(yns3Y|p+ z?M~uT;%OQeaX8>s&H9JoepKRVVZWGxoJK>fVAP2k1NuGUkI{U+-wCIo{Z1Hohj$aT zQ|WiYeJEP1n2vRY{%&pKodSjo1o_@ohuz`w!J=It~2Zasi@f{ZkU7DVIU2pLy9`9wm?Xhu|T{DJhh4FyBsLq5W|&K&ZCg z5TfnSWT-CuZ65posBsLlAa|aX&)#G&%EdQX8`kEgJe6-BtCll`zQ`1r#h$W%hH+4X z;}v~xewQYtn=RUM17!xfq`Ub$r#m4-_N#`kpgJhodnPwrM$Tn=NkbtX6wyjVNXi-! zB5of}h#&B)^!}47F)EpR4uWJFEjmJX=XWW1uti&mVl&6f2 z>p$2iG%bjw%2yx`MGIHtxA_@BG$xPhrtu({D|;VG)p39*6*%^11=z;%3Ih++jusAG zxWryY-hlDaB^9=KK9&PECI7Q9nEydw$G7J?K> zx~gGb=5al`Mudciz|#VI3p?3rTP^yQ^?2zVyFU}nL#*o?X3ki#a( z5nr1dVttC>=Ltvu&B^JO*a(k+2!pMkMrYM}plVGV)^_Jsx=Ev*8NXC}BL3}o?PwCT z)Rp?$BHRO41+4MWnIbCPeQH{1+|NZJQn}TJI9lyjCug{`(Fw=^hh+pE%;Ex2T?{yi zXHA<<4l7!=tPODO4>=(}($&IW9bEouWHg2XUKsTrdi$!o^&dtS*4)Mdi&yo(*? zGD{uS#qChqB=8k~e1OmPFV-YdL|{t@5h~X=wC86AK)Tk?ykV69% z5E@E2E@8qtUCE8MJ!uvyN05H|)|V)Vm6AM37^_4Lfvs;*40?nQ*!4Ni(L5^M1;w5X zUKvivYSCu!l077aa?_<7io#VIjJjG0tslTFF)KnR8)t2@;)(A-86sWRVZ3t}yp>=< z_U8Q!is6ptg`a`z@{p-$9~ws@JSu7)*Uf?drhq&L-pLn1dikTit7v0f*#_>_&}Xi0 z1M`>{asj^=-D$n<{ubs6OjB1_E*RWtNT6)Ebd!McMASF7+-8B)tq2B9IY~<01sH&o z+6xY;p#Ex=5YS8}pfXA92ZioPHqda{pm(~9hrx=BD6b64iQ>Y6V_qjUW2(~K%BMw+ zl=bg&q_FGFxG?QK2dG7!RCV=EHnT}Cpjc*hNHsNuH&6lIeKTqNJV! zHCIu|UF3H+Y!qtTe-{6YJ=RXrZzevZd5iV6>BK{T-+IbhW3W*#+H~y<%?!jw#)G%< ze0W`uIYQW#^&#H8gf|VRTA_C~-o)>fv8XN{#^81FYEk3H{gji{MXQfaH^y7jT#(k} zBB6#k$q~wU)K3Q^S#+8ygEgAqQ|>XXO?ca5Y3muSvt!1#PLIiI9Uqg{S`*{e+G#Y+ z17EH_lhN=Z$8hTlRP(H`#XQW`N0D`M;r&nQ{LzB zQnjL%?<3v=@M<=5c$N2ge3+j0|D>}2+DN|tVvw(q_CGx+%hwzfZL2KhRK2+RJx*(3_nMAT$>I8Y0DO zJH{ff8>6In)%0;%g3Is`V^PJ1gVoUBs?eYcMh}(7bQzpxUQze$4Bt1H+ z*cu?CIBwStNiBVlY;y0xugKp`?%(8$ytDO<{ONnf9p$j302cB|`XCnrC*cda)SdJvY`}dqktDL+&8?Z zf$H^3ZnA@DqnO|}qzLspS0}eN$zvWei1-TLFBd>lN-7cNwX}*5-aBEfg;*=bHwrx5 z2NO_#uO!C=QX$d?ruy|5bm_HAK3Pff`R0Za+(4hnUJ{Xd+v>C`skWFV;3TPNXe&=Dp34sSbS&^o8(8hQFyG4L-6W#8$AL zaxE$mi39E5-j{!7=KE|QJF~7wPa(8NPjSn=Xe!hx6mfg5MkD@?bvPmK0(rsS8Cnmx zjI5SkUSwM5K9Mtsr!XNen5MlBy}9MIJj{~jP3qdcjM9^r_2??RDyM!>Qd&BniVXG7 zi;iWJW21!A_bbqqHyiQXmkEbhGxYi%ShKSx9;eMUL5lEi{P#;5NFrKDPyMpShj{^>1ta0nUg!E)lHxD;mx9U!qpx<= zvsXI>pX!2KTNx|cu}a?<>xR|=wO9@;sMnj8qt>SHz}LggKM02dk{`L8E*$6G(x+@4 z71OTA=rL=aFPgwnU){Cylu4btRu@is>;1wYL5PhSGpb|iwDx=CKOT#3H!lC#D%uPC zxc%8#S%deYWM%c8l6mtG=?nV4ioFqGb4f+ z*c)4rwpJ%qs5Od1hI9udZDttNV9lW&uknN=e+&HYOuIHrB<3>d6eudSY~X zH*cTJtjye=y_&Xg_5?a#Tu0M(#vW2NDHnr_Pe7!9wBQr&u8ZP3h|;mNKx>G;+@Ntk z;Bm}S?z1Vfy!Cm+m16Vw64Ba*dI2Kfnm3|Qav>hEf26%gC0GB;hF!hNUU>ZP_GsK@ z`A<89MeGaiffd-7HptU^> zF5H_$_7-VPb7&RI$0I?>+h9EB5{Nimiv(&m2djgJi<iaPtXSKS!ST(%} z9_k@U@R)17ZTcFW5pBS|o5N!xFdR9i{1T-YW_J$Ztj*h)>7BDLUpilqmsfE9i|VVl z<%aSng*fKA_rUb3MT?5%Ma7F)*OxEf`R3VuHt636wi!g_nf$!dQSUq5-Ix2L zP}>oZID_y#P#Lt$yuryAenU7!5u?!9L%Jnh!7(L#nAU!VdLx76$vdTuZrIlH`Xy>t z{ia&r;t$Zbk0t@N5)6PrWAN|-1Sm`IfS}U6!B^v1=~YV*5CFg3IcY}YjsFJ5ycWEe z+*aag`>~vi7HoH+u!MsFz3LF)SjcsI7#;9gty>0-tPkHaq^a}Tw%)*%$;DT)`RmVv{lK;yy$KG z(|-tsvT82u|C)4BDSbS~=! zL|v_?U&?4VE;fQ!*9uttEPLk+%!aS-iEnd2{AaToTd)`y{Xr{`_Z?+>xg1R*IV@Pj z^mzH+`Me^n94u%QsT?lW3VU@^L0`qQ+HhC(w7NQ0$kzyi%SpaQ=oF0uqtc;@LG)eH z?}buPrAp^7qLW^HE=;|=Kp10@tPSZE_SY2mD_gA95*75o`IJYJ8U9!=^veTZQW9rqKhgc9D zRj0=9djdz#qOPn?(~*D9L5x5dPHUdbWMD>PEC#xlas5-Chs zz5Np=%1^)X0hQ+(E|nif}YE$u`L%FN&p}4kLT(i zY4Zv85738z6-B63S8iRpMvU7H{W1c|4IyAh*7F8U5QXO9j>W%Cb+;cC^F^+KrsF)X zW#|{&O3kZt|26&#E)TU{x5BgZ&RBOOX^XCgHtxQy3__k(j@AP$|re^MIByVdSN1UN%sT3%fB6zEO&1=FY0dN`fSREAez8kYz1qXa7*I z0MXx1n-WC9fUR&lC%~YUaQzzBGtAa<^Lc;2Ky-1SxX56C9wLa}<2^@RzrV$=8VdOr z)B4gHLy^c?ne~@q1M~&D}kXF>D!j!a9my2s>$tq`2BXrtG_FOXX_Z~|&V zf;AQdXS9!1LgjFRLM$g)EA%?_VPW;rdF%5F*5^furyKf;hgdjkBj1#7rUuVHGA$ut z+L8J4H^*fdyy$Kkjd5>aTpM2z#Zm(S2*g9=ULxiYE$S4sCh6mQ_v+p$8$V8GUo zHZU*Nsy-@jUH;^!a>Cn=Tt8MQ#<1*S_LG;sz5LW5`2&;!d5ihbq#X;_>{~fD3F`pY z)7C5N2yu)ZfSf44Bp?p}NV=%J4de3H=SA1EFs#R$wYqmtT<-urI29Lfr2HXjx4lKn zpgsAL_hA5TVCVuS_y%+pC~QR?mn|k-MCGk7;Nt?aZ{%;~Ptn0@{c(9`)6j$`Wd~H8 zuhaetT@y6{TqP>p64W9$3xyv-7R*gse-n|NyHqS0Mks#yPn(L)vQ ztivBiM!xk{_tFDn#_lie)^qm$k>4lHklzUJmOCk@Ypd^5^SWvW5-m2&77uOtWNY8P zTR+*-{Ek{dZ>-;-knDOkqyFAK`{l9gN45>md1~^j$AsaVzdJa5^xk*B zeP`b&YDjpz`}B?bwwCnz&o7Fv0eit|3vp54T_j8eD%;Kp0LZDWPph4??)v6_bn0GR zKQg)=n`0c%Cv(du+xjJN%6jbi`SxEyPqeQ+0XKq!6*|S9o^P0kiu?b-j?&uj4)Bi= zNTPz$qoNip#Z>^(A;@Dl&=H`n!_cDqfI{WjyUk`&LMl( z&mI~#{@B0PF8gMJ+(KZigkm?Org?*3eIOic{t_T zHub$ux7-BwWm*r~0wKcwtFj447VH3iGal4weK8hzMYsox6%lUTAq-_on5(FF6+FGP zz73vTC#IP?t)IJ_r5t+uM<&jyf9+iU#IY_ZaXa2Z$DGvu`Low$PkOdDi<8$z=Z>3} z-fL9X2shB>;Ro+%mw{g-X?lQKh=ZamtP;@Nf?25X-(C<>dEj@f5Kae;><}H2W7(Nb z6IN!<``4V--Qs-X3ip4$x1eqPz+Jal+aD^1wn`h`A!S<1nhrBkrvJI5_sXI!?6Huv zb^*D$IVT2=v?^obvBeop%q92fZ#L#Uv**dQn6ZgZwx19`qA;xA ztXsCQ#NcjOnd#k0)+HSOH zr}qnWA2guHff4dozt(2&-?k>DVN-Tb*AWAR-|XM_F4MLNO&^)sP<$x3*JC^1STgNu zF552u*nMi>)(uM@ugnh>?)QBb>mgniioM2qn8F(yZ)ajyAs*T`(CEIFzmh-am-4s` zBcj-4ZG_zVJ84OBHY&;^Uf0h(N%&VV!+O?<+pC{=wBb5zkAlq-D9HauG&us*@NZ|2;VQ)Rn+%g^UC+H zuI(S5J~X!H?BNNlcH+?`z56adKA~GN0`zlcc3rmgcw~=JNpofuFC1Gwu|rbPmeHLi z4e9J=NgFu_;6T6lQaj7BUKOZjcVK7|yWA#k!+5@VSom!${j+-r^Wd^Z;`FL{!Kt_y zKR`H0i16D9nb*^cd4!XGrP8c&(W-2i?!#oEFlF7aCqABX zu(vQ(-sYPgHRJ5+e($_LdG~~b`oVj?+O+w*r*j9cJ3j+O_N`UkfwFvktH~vE)vNP= zzT0`)j#0h)Eqj0akep|J*|X%sXQo1np}pih;1}?G$35qRkd{XI=Oj~!u}Sth#Kiq3snaF(TTW_fN@>hha= zh7aF!b2*k%o>e|4i}Q00B2Ki6v6fckab&GxrKAYrJCtDovU5l*un0wjtH|;SO^aFzfSXC zm=$3wxy&t{xDP9Bxf7 z-ZL_0%DmN%J;ZtBGHfGrq2)K1{l@%P*^h*UmeL>T*d+hqen9POl35&l>;_p|(1Am_ zFX$XJU8m^UC3os}w&j&^kNuk2m+p)gb~tVf!R6jR2+xT9#vHENA1PnZ)^y;Jxf836 z1jY&Bp>&113cxS^BlLqgY^zVoUp+W`O<_uhachV6SUPKLMr%Rnv-*|qFFrA_UW^>L zASY{HR+uD3^qZBv=El~6gSXv~8{R9=W*2*w4vi1)Ik`{AVO?6gI0eR}<(Blz+f|(2 z<*`je+YasCCNg7eazdY^a2K!clXp%pI#kl7-*Sj>fc39urG>6Q5}_xA_ty1oM{US2 zSeM&Il?TD}nsfx56q27`CncU;=}SSPW;tQ)%R z26O&k$58G5{o0{BK9GOAfuHvhoC2@^G#zKck5`w(YH%=#Dr#tN?2un$T))6QifFUXbkl$Z zyaT(U_Z9i_phtoX-k&)l=l%$u4O=2@T=5+~LkT_=5knST>eHX;$ zt}jm`l4C__3-UV$cNy6^GOI^B{VLJs7wGC6;p6Nd-#w!5 z;}bebKhJ-8dCyiE)BDE{?iy-~?w#o7Z8h2g!>y5>qr633?0D*zkth9IJPBMvFR?+v z4e`j^AY7CF%|a^|aJY^=_)2e)@+p5fyoL150U|*hk}FA6u%9H+3lZYMUazbezGig0 z8vl+toq87!imsV8FQYg+x~3-W#Qa5vKUh+lHt)nN;gEgcpjny0?MAH_EG)1WJiR+% z^zuQ%g8LQ6CXZ9*rvBN5u={!fK}jeehSI}ysW~j$NJ|i(zgzyi@Nc_YO$|zFU%1RJ z++tl`J|st0z%1@`tZ4j?-+e*&Mf?TgisLYrnIa(_daH7#AWJAK!+|FWhl+oAgtEBk zL8Y5#4~lM!|CJ6BHPszYEG{}czekVxhl>`U=vaN@hOo8nz)X1K4@@XLFbn^`A0iAc z95-zDO{TlKd)TN;(UG;FQbj|KLKMhN05TgESEv+W zABA<(o_vcvX-l0)SO_sMl4%vz6q_py`t0G_zW7x@3(6>cGkVFB$TJiNLz88CNzPTO9ycPV%}23pPqEYNi5Oq+QXLt>`<9O5wFEzd!50UYBCSLhVq zKPq1sJLVZ-;h%p9ITH(hA{qEBZms4yaZ?_AA;n|N7)^J=E_(cWT0z-K3N_=(N+zi- zjV0>wD_x)fja)tDFsRTS<0^`secSt1zF6&-IcjE)f<04`MWO4oU1NHV?&RAl>`Ii) zjR~>6hqv}im7PL*Oz1ga-r(rKUNZ-Ed2DdJw(Se%U~8d#yT<P0=mzunw)>; z=+ph2+V>vPre{)WT0keSm^3ucv9@Zc=v6W#CVBM2o;gW#XHSYqn7x`1qwvgBoKNzN zfqeeLGqtI5NfQ}@tR7;S4TA~4f@TAFW}Yq#TpuUQQ_u5pS7|-?zy_XgjM2U0X-IG`CoiVDkSJC#OBvIQTB}W(2XIx4~ z$&lEng8j352SoWfAy+m3nFYOc()oa>ev`WNUw2`y{rIuAeLDnoE8d;Af(5L%+jD1U z1SF1J)Mrxqs%gEttzNl=uNypG8-u;Wou|?RU9O-{$Mp(|=r?yr413}R5yi#V*;(OP z`#AXm5xNvtac=`SyK)8}Tt`YrG0q_T8?axhF8K~gXRFB%Ke<0rnaTS;ZYNOu;3n`y zbclIHpu6RHL`TxlNcIGunA76L*Kg?Di4n)Evngh+d*L7l>d*gK>7@zK;tf+E+cgbV{0eZ$}#C2T#ecfFYJmKvBuVpKR9sGZkt-v#Kxo{s6#s?FlHiq}kCnDHckqT>--ZZK3!Zc4P&1B*=qyE}}=ffWetQ zq3$T(71g0ryWl?ac4bdLv9P-w9-Y%ODkwHNHYlO<^2d6$?l(nvZ{W^NYZp%+-N(nv zx56hnHMsl6K0ZDBXNAQL?w2`WXhPPi{0<$b@2m1{KOixrd(X`NL)s3?>bPX(y3Aga zGhs_4-T;30Ip|BZEUK3_H_tmPA0RLSRCq0GQBDj5&-3%gA1qA^>5`Mg+Mph8e)m?P zy&n@lZlAXx!;Vmw=f@RgEIu}I$ohq|QY%)rpEiG8cAv6wDWD;expFxTkrKf)*t18R zPm&lF$%!~NozH4WNsl<6cfY70woL~VVQm%t60P}p6rZXN z$r?Vg?Zr#gcRNqbj;-$TLgB^NtM8`G7!uEJ3k#1W_Dk@&^Mi6B)4{Z_=EqXu4{;+` za@;k^PGpaAOhwa^@I;q8z;DY%QMy%|M!WwBCYA~yU z;|erX!f`bixI$MUC?_Et7qQ%GMIc}=V8Bx~>_kPwCO4a^V$<^G-5MNo;$T|7Y8fUyJ(q7m6eaWGb|*JzT-)r&tr zzmI=pStPVzzCw0VSSqYQA61PFwM}(lk%h<+a9$(-zD8J)mv<u`;2Z`}Q&u#c8W?SJlPP<3s9^&!`@0%mF zX0oAL^jc5(D~xPItINT;=kOEKIZ@EW+_~Kd+OG$A|DZabNfUlrBN`;5)&+CoUy8;< z85hZ*6D5WkEcA?~MtmYIlcv`^U>g?`1Q+Qq0;1)ZZm45nbT%2>B#jo%3O>XwKCnqI zXtYiOvMyXuN&`b9tEbtzBDt+7#6xtZf$wcw%r?>@@4fNHwrv^)Je>oc24ObyOTdeU zX?a2rPw-W-a(vr^2kZ*kAPj#n$Q+?{UyNKxt@{d%#*GY#eTJZ%i-tKA#^xFnKQt2C}GQWU<}fOS2dDXidV`A zU`#Zj$)4VTR^<+iK}`r1@rSTR8wQNs+qO-`~$A-aN3&`+#+@CoS3UGv$4e8T7LKR{jX@(-E~ znl2|bP7=qc6BWpLQ6o8N%|IDUwnk_E+(^$)Y9u571a$GYj1u00Ws?a5!R5aa7CPV( zv7ZjO2zkQ5ZQF!}v;@BQjx(a{eREtvyC4L|$TRu7nnLk)VW~6)<8ryEklMFMQx4HM zY`j(@o@>HIi#Z!{PWS-c-hGh5)@xg19Dm^4fO2iT!VCTeiM4y zC?F*eB}uQNHVk(1l*nqedc=VfP{wQ{2TEZ{0PO5pDZkF%zK+jFiBPvNj*BMXw3`+w zb}lHHcjx*wjB;9ADb+er>JzdSZRQT0n1{ngRrKbUo42l-&T3Ime++Z|?Wt`SWY4EK zK5>T5;SBxn>GI+|90Lvu$vyi4OQdGTnKl_ghCpTz&UhL;5Xzj8IL}Jv4rdSY0 zqb5dd(IlFXVnVtx&6u0SG@aRezkOyv%)QTjpZELc`))1>hckPxw%1yF?X}mU$MYzv zfuKfH2w%gYT$b$inl54+F;1K(9`7K^Lr}k|7ycH<{|1_b`JT~|#6){-O&g(&*e~P> zx9U-TLE!yK^0}lum?%am2rAYkOqULV1ip)NmfWgcd>FfZ zi&O+fW=1Ga60GrL7aK*3y?oNzO)g;fPxV?|(knUM$CK=G9P;!@$3xEeQJm)iuG3w!p=NJxo@iZAG& z8JjX{@Su`UuhF3!+3V}er}i3?ZuF|udZs>cc-GU;wcT)EkpWH{KftFJVyoQ*l>Snb z87R|85=Ds!Ckfi1oe>l5_Sz)GH<8zck`;cJPCL$vuZcJ9i6~W!;b51!OqF6h5oaLT zHTptlwZP+4DScR1XSY{P^&GF|7%Re}cM1!-D0`ftf=GdVVqGn6-y%OgQZM6+7xGCn zhx?M1r^I8Y%1*Nca)bDMNndpIr6tjhOSI&pXEr=gaKYSUrZTs=S}uez7fKk(?wU$= zPIa6Yn7yqGPiA6e^46_R8KJxenx{}u?M-A2UzezVrqIEwPtj3buR+Cd*%JLvj28!q zRpZ?Ux#Kc7N|Y&Rcq?*ql6q8no>4oAg{7Wj?urKgwJ*te%ZB-2-PsAC_Udug*BH|OCnad|ui-|;nR0_5?D8gqa~t0$V!W4yK@ zP_3D1nrd3CP1GK*(8@#XO(I}+t_tr;Q`nhsx$4!H*?yag*l-cLVN9fcO9!^zoCD1Jng{YUrF{6UK>nAPjMOKl5}8F zqpT_{7OK$T>5Qbiod{7yVOf$7E<4tDrRVtPi?L7LjL++Y%xXg+D$i-*Ac53XPkIb< zYZ6O?Q&y_A=$lK<>UB^8)x*RdVxA~+AN4GVBk1up*7zvyT;b zOy4ytKWszJ)88p`!r6Hfa|Q@$)j?{F(JKHKyt(?R>EYeOKhHbQ|0rb1B}zdGv8&N> z;fz<}p)xvqOeME7+g*&(UK zI$`sk7x!$QU|pX(YtxxcvvQrh$66Qvh4U&6^q^L)AsUS!AJ(f(EXsmKP1H>t$dkjZxM#`V7qxN5NeQ?dR9 zjk{Juj`8KsCAtwyW!($aXfzIsho;f@?^aFmSmc4)9EjHQgGwL#!`HsF&2AxIuY3Ke zRQu<2%#u@5Nt?2>tH})eIr77$%}sboC#9*#!5CQ+Q|O`5dj)B#f{{@i%`f&IpBl{Z z!sInwBHKi^hzyRb85=n$vWqlUs+u8rL~0tBSd5eFHKt0faK^jR>u3;Euf5J*Q!Gu? z57y6?jxW~BLy#biWL;F>3`ZTHGzCcBGY=&QBaJ+plNR5S@_mE5bsgR{g=}`bP3Fvd zvZ_C>SjfXq_Y}QlwKzm7ao^LuaAbO@#&OTFZ#}tj;nj*K-uCii2C`4rIVdH@*Gkk* z+z{7x>9nZ-S*KOevm%%HW@_#4Kb&!K@SM&8KRkuj&@XV3Wv@EHBLQJ1(|n=ypL1AXd&_@uSyly zF7}#K?^KUy?`V&jeD8dZ-r`8{s0O4rhf6rgMlvxZQ5VjWT~3j2NeH10g5yDhfYRUZ z(ygtAp(^kL=#3jlz>OhEWF4EpI+NFC?JkZ|)?-7y;tv>wq8cBx{ziQrk7HgYURw}! zsm}Eb@$~itsE>mOTU_Zu&UhU=;{!_9-Mw99(#f#hNmXM!J9<*I#6wIJnZ0tFg*!CF zAg+Af*t&S-8%tOziDGqc5Yw`ag<=OZ{kuK;_$w68V;Bk|Cb}zx_3K%5)Bt}1 zSZk6Pe~;J=N6H)FoJia0E2rU{Y}4?1$ox zBS?(n*PdG9v;mHg3xU(PH%mz@lDQkOW`^Fq`O)nIgmiKtgUY(~j_+9g`q%G$a{4nD zGA?`Yw=@EA>W(%3D6u4ZY4j)Hr1?Q9*4b+zziKYOHR)mpv9BnL&G7J7_;6A!oY9^2 z0}E=8XP^;b5JCiKuy61kG4EhEN6KjGC{X8`uRC7F#p!p$$^r%NsFT@rU_IiLc z$2?HHZy+dNlkMA9%o93^H4{-Mc$m<|w|boK0wfx_HA!=@6KY6uU}XRZUt81HHxsDM zDyjVgerEvfei}V^9Ws z?k)?9yCo$0=-B#>>$xw8*rr|@23xHadLLEScxW`TRwI!r4OJDo<6by7J2gGzVe%9i z1qY=exFhaba~@6^$1xd-EDL9k;?gxly!QAjuu;w})-=Vq$$ZiDrLwc5!2EUkgt{kyG?dKL9O>Rp7YvqwD=n;bf$GJh4f z{}irP5*)yu#m7V;F)?Z2WAw)K^1j9Q3grErF|aUV@jhXgaCds#>aaVKqWnPoYGZ zDnR$y>x+)M_e3@qGx=M@pex3+S>Y>SEMkMRocrxdAGWKNc)IR7I-*j1Wt^(nv4{x7&c>a zt_sH)YVz`#ou@h{6=lYT=+TW@b->^sH*wetEr&n7dBTW-%n0o%LyMfEab-t%{`fD% z+Z<_48&WX0C9{t?Qjnu!Z+XYIAGi79gFOfBx1V1%ASV#(&(!djtBzminsD$%)N1@r zX#DkPxq{6C*Lqbq0&e&>d1m2GOpKLYL|f@!c{~8#y#20SS7)zYERGkSXy%}yK?*Jx zM<|;m+^s(riq%-@mLy_0$A9938Z9@s!Uh!+awIYRI993d#IWqb|M+tOs^eRMRjdWq^P zBA?OVGwKf5sqsA|{~+#6DIY}+bfowK|M=O)F~|aC9HHSusa_ocA1Mi7@G=;Ys8$e@ zf}eQPIwT!IZQ)1!pwz^GLt}9xvN{IvVE=N=TWgx`7dCu;Xn*Vnb_vY_=%UTdAsiT62EcC=O_4l84#GD-w ztd_?;SVu1o@7c<}PE}X}Je}~x;ru=g@bUVnyiSLo4_qtdho)MgNYLVK=Q2?EGA%kI zU48_lc&MATf1B2=Gy4^WS`u?JdZs6Ix8@D)nAagLqg8MuSzqYb{y3ECxS`sR=txs| z5FOki%9;=nM?8)GlTA9$!rUQ6omzMq0?m9HIFrs+G=B z{(YpTv54>qcftrC6?YoY5lSR4^E@=ATND42U2=%B>KAC?Aken4uc2Dy$5XK3wSfP; zEDB2dyp_@2H!YNOO!a?dYOm2zWAh5zS<~g=o@SqL9SQb1GzztZUh5p|9~jX4iDaZ& zQ0LsT9&;np29o0JM-}OW0MU5SqJZIO#Y6IVe+%{?M{#FF7~^PP34~uVO25!{rBCQXJcJ{pJTj z!vijJ&nNcjkh(r4%_nrsh~bk5jVw%QT|%y8wdvGm&|Ba3JE{sWnf<%==-aMnc3zI} zDfH$GOqx0)*~{A)c`Cc-An1vPlR$F0dMVcZ{Du(n2G)IFMITHAbuOqKc)kG7S2R9v zIKn(ct8`L%{szm%^Qq4FnFqOm9$GQ-!iEqlfk!hVxqcfEgKd4HOsSI%Snxj0+l zF;~Q6&)aM&)8BXTC+MyvY@g~!x(D&&^%zO*TPtR*S><@rV7fw+vn z-*8v;qZr=w{zZC*u5Ns;yzd<6lI!^%<{`(5sOu&Va*dB@Bxvt?&TF*tyCHr)C~wSb zB%#4Cd`?&6zzn{5+CxkiNK`HR_`@%{EG9+g>$X2&Lo1iom8=@IchOieCNF*G3oo;W z$($CB9`?^`(`?C_1Y8BV&CZdeYac(`rqiO8 zvzPVGW&3tLZ7W^P@o?5A4MwN=pApd8LgAo+XfenwuE<1TCHzAEV*!5{D}#Na|20mN7Ct!s<-P;MEhHk zo}IXUVa^Y`yJVNm8}r6n$(6WX8O;t~o;KLuEue7z-cWB*<&;0buh6VS!RwOr74V`8 zUPk&2vV?(|{GajSq~vJwr3)?P)KhUhO*hR%xae^7fnBt;vH0HOc#VEyUrTe$5#ptd zoiTq=S&v=|pFC}Q6CAi3o!W{%*LBgMO|Sk`_9~&PEWhsR_Bd)CR!>~KWwm!kZ1U!b zlhY#zwRHTxa?+g8K;3Ct*=yn(c~2CU8)d#Gz#F5&v*AvjNe>m=HX;|i9_!Hqkv3>{ z7m&PttdZ|upmhxvu7VW3E4FI{B&p}TW3wFR*(Nf@c8iz>cbGF8Fx&Embij1I=AiGk zJoup($s1vgDfkfpDe~`{3vx5k34{0!q#k+A%tJaZwct5%a9yOie}l;;=4-qIq-&&GzU@@3H2%x_XW@);D8 zy8J%Zs)wVHkxtV2f=T{Mi&o5CymsIYX-aR&E7Tlp&}qGkC%1@kFV+SIhDPgk z!HEgIqFdTu?o5by%-(~Yn*TzWk4$ z@QfKta&-}KpSYb}%S_Tx`Wy670%)U*rRYB-s&OW(qw$^ZO<@O}UDqLsPGO8x(c$yD z#`~nHeA>n)v<>PoIk_m{%A9tC=)P`)yY;9J)(oFhe4NCz@Xc!DZz|S%1a;^Tdp@{( zU=L;@cV8Nv(IR&1vb?B1FSN?s+^#1D|F*D`awlbtyyxUA%~RHhVt?po@Sdcv$;irjVn|W`{2iC7*O4s;mX-8+!P1wu7*H_3cYJ(SLceb9 z=A5Wlu=Pq&zsN2>pX`1Lv~b#3x&nS0&v{kw2X!$A`d(uOMMY%bKuxj13N7V(39FMb5u%Vysd2js*hZ+C~nc;)^*rc ztvO=&s&xa#qzu{sxmWZzY_`}%Nay<7$>b*O%>}bjNC5%(!5IMskN=!YlM_YmKbln@ zn^V?_eUfL(Cv^XlIg84U^=-Q-e|q~iR&s9GjgoaiHqZRng6_H53;)XMMv2Ga&e4Hm zi9BoC(h*x)1*+Wr%{?>Ix`cQq1f^un*xtp`BIl(Xvx(A}=!lFKeXRWkc5vxx4lC9m z{0gkWi{w6f3R0n7IxR-2b}IfZ@*Z*D6<_tVlfyazj?#nm1 zTrO?ro8pV>6^YKmG9WqMc_`{fsbu5g4t2NqnEfUe1m|^*&G0aK8BB?$)WD*CL#JnY z5Auji%G@i8ZV@IwcS9?aJTj_<+B0kDfK;ED^d8_UnM~!J?)`VhO?xu1=$=~b;~x?1 z<{4};Aj-zqMm_TtqZ5)PEoZIN5i==c8tDvhSR565)z;P0Uo?N8CYZqPU{?oK7$Hdr+4t z$&DThK#qx~I&X7UL65iy-IMMC#^fA{mWTs8dXDi3YSpJ>SdhG|YivPY>ZD1-7iRX2 z2r&5{?maLn{ld#LvO3RPo<30PW`@JZ>3moEQp5_wy2I{}JZeOg4GS*ech*=C+(wcf(rfgf>M5OC-Xy%= zu+I66dC-Fmwa#aMee9GC=|?e2o#^6gqe{eFFc;XDr18}WhJwLdb?_D1q+7{{{|mmV z68`sm{Y|=6WppvcVDzPDsw}N{*Us%6PAcn(nM{Ubx^)*HOX#hf5%FAh zB}$-oeufj?7lNFkQX{*K91QXc=ObLs7kgLDPY=^nY2rrwHbs1L{PbPS*EQxYc?aFr zujkxJ>;cB@icPZta9I91uA=@PMIRt9;4BDBj`({klhh{0ni4x{R8?NSiEX_-t71Ct zS{|N?1GuyS1JAK6*KE@lQ%6o{SKKK+gV3+0%HfCfsqL+i zSxM6VuGZ;yv9*FCV24f@@X$&VRPZ#v4seS_(qS9} zp6h~U#@kQ9oBKOXZ-<*u`r6w$FSQvrZ2q>LgUdX%2Fsw@C*tEf4(^eanH|)pBkgBM z$rv?%!;=g9J$0~rJ9~@mC%ehy0TZ*I%t-H;mF{l>MX|yVw-GOcF3z}*60>QH_=wWu z(H>W<2l-zOVRSTI!+GN4G6v55A=e<4Qzs+_`fd;C+T*~uvxV}sNgI0hC@JYa<#5Hp zX`Qh0LA(FWJ;MRQ+c+=i%GbHk97N2r(IOiMkTFxIk}>SFDPVK`6#6IW$BxvoBk#RO z`e9sUpHKHF^+6P;Sw^i6*Ur-EfLfvy-$YgK-L;fmU|*klt&COY+1gzj`}8T|CN#9q z2%vig6_$@WVr>)sB=J~1c<9Q7?IW_%rwu7;3#XhqeRuH|e7sDcqU^!B+Egn>pCo5Q z>A7$!yi-ClE{%)mqm!f1IB*N4Lvi_G@u{(~BqO#(Cr9bO_K_}m^OhG4*Z6Jk-gQLQ zm>6^R;NRY6Z@;&^Tko2FBJoJ00WG_=O+mUri@21Y(E$$Cj2}p+qV@yIQscK4L?sV; zYIMc*weO$ZOUP@JU#|M-)UNE*Z=g%BN;heSIzZ8-*rbuGlkosv4(G!>Ihov4{lImj zu`!OMM3EY$EW<~h*F9dR%WN|^H#OOsuMZh&p2I5T?FLhnrBzAGR_2jrLwI1fAZ^I# zZeT6nKk`_M^bGthC8i=5k!6lUP0x93#u;n5B4#;bGtA?$SPq^ysQCMAW3!k|jIR>2 zf&cbCtz;V;$5VW8=XjUt88KY>+~ecnxpO=Pu1E7<#rsNZ=pXarx$?degOOhWyo0#k zC@&CJH}HIS=kvpj&wa1ZJlWLvyjjfXB3&&6{Ds{|Rdwvzq`8Z1aM*b7XgnT!Y8EF#Y)yf8A**|Ayo;nIt80Rb(@BBL_fq5gd>naB)AP%C{?&hY z|Ehr4vMYvkUQR^Zut+$g#0L>eay`E)O~>=a|9mca(P)hCj5)neiuab6o4Ac?>GXSBXLWSS|Gcw#cN^3Uu`c54Z%QKAFa1|bO7?&gOhBTbJK zbL1b;&Rp%U50RfRcmBZ(W=+B3UGWVM|b-Tje<>@+%k)mKg(#rAR7fzxRPr&@7> zi#B-P6tCgDK)iXO&me=Pt=}lz7e($Dzl@yG-vn$NR_oSLHe2-oM9xYQ=XR z#f6mdopGT{N?eHBwHMTJh^=5}W>L0Z@C1m{#1J1IXM}MhPJ_oO>Fmv9ZRAM$z2l{hKB_Qc9G#oS{`~s6*GpZ-uefKsjKG9~e6k>?SETu=79{=jgV0#_ zfN%?|oQmByr&`<#xWZ{ zgc1uwEFWh&uKL`MvAt1TQ+(x4BPaj;WY1-jm@U!P`s$D&T|1ud8Zp{7mSnzk{9=b7 z%Xl*K$6gy>{3+Gnl=j*165D6Hxj&(dFZ%*6CDsNjaD`bExQ6^kxZVfcLmEG)=s9PM zPSL~gf;Kjsm4n1@aCWFf=}9U!@mMLya1k4|6OUG6bJ0A`6OHYLpWtk-fX$7`+ZlmO zjTVOuYu8Hc(;=$!#O;%_Mx94IbwN;IW~)vihWJ+P)#~_OAAd@^$98#T*<#i3kkr-- z_3B*mQ+aVa%j}e(m27N}@SGRBr02#KM7x>um-Xt@rB@%+Jv)_u5?b*0F*(y{o+W0> zICDb#&>>qC-PL$D6yvLS2B3@LpK!i#d*X}@I_+YE^E}OY{-&I>Ar7YEaWK%wdG0nH zpU3Z9Zur}H?uudJJ)EH-&fwaM2FGD`JTfxRBzt;0Wuof_ZpyZ9CMsU{_2)D+uj^l%ZV^K?>#pxEqV7QGU&N36Z(Jn(HCF5 z|8e&6F3;WA_N;9#iLNEH+3Hu>%{3_MuHb(I_-~ZMgmBd6G5}rI-rzAe8$j^Lu=+;3 zDIG?3PgpU0>e@NQ17_qVx{dNrk=Wzy3xKRG3=DkZVq@NOw_aaEmn z)O-n^x%Q%u3}b7L}|;9bL0~&mR1L4;xGVAa3kWre%N1 zJ+a-qj<2_n{*gjbNlFEq!B((xHiN7qbICmDjW4l(9whUgJ+Zj#6egoFL73KqUx-19 z44M#XD%5TjX!IylQ1o3!3jo|&K<*X}nq(h~UdplWCtcnoqu4Wt4y7kIoa_TU> z^4K`xHF7XfyP@4Q&*bHuiE5+@4SFqdEO~<< zgj49Gs)9;of-(lmNh*LyIh;BeV}v-}!8g6a2jE>h1%?>hn^Ohj;t)CnWZ{ksY5BLbRi^$IUg2M79w278fUV?h|iz5ck>3ki`~^@`ZLiQBwF-M0B| z@<@cpW#3IgB^*@j!tGZQp#lm#vm=#X1P(>W7b})zJ+a%iXV9QMw%ugdm7X1^FJFFp zMfvSz%cd7}lU|)#l95p|by#NRgF9lFduZzyF1|2)IKH(G@lg119>nDJ14Y5dsuf&oW^6qTvwpeKn~gefb74(_F<{+~Awuo-9 zIF);R3^zAP2$n_MOGSTYr3*?m*3a`2Ux@d)a^S1koW{oxz3jhoNVd=-*kH~Fz|sS? zJAH6cn``xsEFdAldY@pGU$Ep}fZF7>T&h$&&GxuekFL>58xfDdZ7QGeZC;xMxlyG- zzLa~z=0>>+cZpSVse?aPZf`@%dw1c&MLg~-T{@$vH|y0Tcw4q?q4V9tTOYbuIed8K z#Y3&b-O1jmC7GEe{2PZ?p`COPyz>w&RxOekWDm*9UGmi3MZ)TJ}{UXA>2q@;Q4YxvSmeiXh@!;k8M0uC8QE>iSNY0~teQk$!giqBXr$^L-!`)2eGR(5sikjx#I;BcU)FXWWh z5q1+|&`VKvGeSR!&R&XW`N!`ft1H|HwD&6nKtOkb)c^osK$Xn3(WNYnT%(^m%<}tN zSmI{jsK_XNy=hEIG!V7XO@<0bn?Sx)l`$zFlQxaXRTCeRYHW^$}S{mgN4NRN37I}h7ZKJ49>%9rzI@heh3rg#@>Vh~zZpVK9!FGpTo%ReFw!OZdWcB9)jd0Qa3g8Flo#pCz9&AXZPMrL z@*gBi(T^hMJz|f6(2o9CnXPyqDX(CiZ*V{u+G+Bh0l1i|@Jnl~&<0mX{^km(Sr~Ls zH$|Tc=Z5bClw)1J=sezo9aerohxhaMFD;ytX4(GUyF*u=-an{pF=38Q`v*qY2Z(Yzko%*SjG@ z*+>+}fB-KaFHGCh5~X*Q6yQ(PLd)UDPkvWV(C_Lp5<+|mo|>8;&Nm}Uk9C! zN0=5EYg7g_NeH930m28bcTHgRAbQUVQH@nmX7o74Qu zxnLt*S(T0Dh-F*&y!>m6eX&?(UyS)(x&?ZfpC6dHW_CIhk2G_&1hopcqEW5t{V=*q zHFK>hPTS%*NsIVc+!nz5!cQt8=Y&R7K{9IL+SKF|bk3mLWMzz^KE+l8)k}n;1ivUz zJ!%4|RI;q*{WS1Rqq{qhn0c!g@seXEDWvUL(jAs0=RaH|`#flg@u4EPtjLq`vldkn zLxfbTH_m~BO@TtNx0gq7uoTK&0}#jALeV3@y@G^jD|BU^D6a$iz?(WCLD{t&TN0u- zCNJ#LqjZKVIkx8Gfx~I9bINEARPv;t#kB6L~vTKf}HG;Lmj(0>h#a$ z8y9SPVgVtJ2vE|g!xjQIclgF0p0HD>a3BS%Pz%7Wa1$!0Mi${9yO%+U)nB)xZK_j= zDm)Yy+So~$@gkd8#_V(#vlCzos$wT7YZaV>P*K4%L<$V^cZUn1HU^>J)%7|qCtRIr zgS;w)09xT!=5m98D=>1UGVn{Ri0wExb9n4S>PZr-Qxp)5ImM1lSjd$SO(tFGpR~xO zg?J+krzUbl@VbiJpWy33EreO!;H=YNDNM!vNIPE(CuLfph9`*zQ%NopktVKz^ds}; z{Vfm9$@yFUgS<%16Uu@wuR023{5_G=^)HDn@?7_hqXRHc z`9ESXk%QIFRmL5@lPWATIREz{3yMJlOinrA-lLq)E|Rx_hie?^4(wy3)!iMdRdnM6 zDGh@8^%3EuMu5jn6YIEGH4cS6l2fR}uk4{>52sWqbb(}vlRzX9(%O$ zv}W@)q)3!dA;a#1C+?gl+?rvHSRg&1qnXSjZIK>~#2n=oG)xyfEpijRRv)LmJ94aZ ztlrV^;q@Lq!4du>IHbVhbmINV5QwkK;o?)ei`)EtwA(x)BFlUexi9}uci!?J`G=}4 z#IuP(r0>6RueVK%XyVM<|Cx90WQEH&f}i+4PRL_H`u{u~mn0wa;||}y&&f`T-Py@z zPM_5Cf0+5VEn6I4G{MK|M}%AQa4}Kl`9ZqlsB@weIXO-$uu;PeG#~RV+TU?l{$s21 zZoc$|cuqB1$#4;QsY~SHsw0glN*(Y#BA(l)FUZO26*Qu1&F@=h%E_J<;~dp!b|xa+ zlK9H+WX>1b;Ha-~?zms>K&Ps7nA7_>b~TA$$#L9^oAN2#q=4O15qm< zZJ{Db)z;tFR8_43Fe`umUBTrEjD0{EyWoVZf}c^(H>uTdf5i#`zuB+rvyy5=hK-R$Nu8yB@+eux&GaEK$#P7JEFQ2|)A@I+i7egQO7GnM zC*43S9zI0uJvf?28{Vg)7C1+%FiS{}|K%ZU^%ri+E*AUYnO1;j{fOHo^Vo*;7d zT{<7&-o8T>K9ilSoQ`hj^B8|b4Z;~pQ6RGO`t_Hta~bCG^B9GXYQg^`-=At!iS~N1 zlV4X?i-}lu3QPGd4?6hTH8%I!HI?qoH{W#Pb48j(PUDmG~Lo zUbymy|HMraQ80k#SfI7_@OoS;GzK3viSG8_x4?mxg`@0_v`H1Cz!56MDE;2xCW?Bb z20)eKMcLqMN9Bfk&BH&vqZhiEeSt+(D{v&fo}H>b~yZlCnGU^Xw@pK568L z)~y^r;>9*?=gptV{i-DmKT4mVo*0i&v=F*ly`wZ1oyONorKN@-Q$b7c{(g2{HY|hP zsxpU#h(VEhgCCZqRU`OH<%YFUEp^$j5VffI6rd@OEf2BbGuQytCRrk!nSG+`U!y59 zA}!U-6E4zH;kBpp8|+8{Mr@ai&C6@o4qvvv?~s_5zIW~%itl=sY`1;2YQVp&_@Aie z-|gq$x_X05)qGUbs~0S&xk zM24rOw&EwKaImneBP9T={kvrLt2CcI!|q|9>%HpzLwi@R7}sz1wIi$z`G9zR$R!^K@orzmGUiRyEv}?ko6sDOoE# z3LYI3VL+B-1X>%WW+=WKI;#3A^h1^rF1Gl9oTz>m!w(k$s}J%z$+&dcFR3#z6pbCr zUTG1xd<#02nAc3P4ek9Ja}>92(S}G5vP{9gen%kavuKIQpeIb17!x7Aw74|AN8RXY zCpNG@9k0=LXO_>L*0r;dRl7$G&PrH!rJC!SNz7mD1vmq+drP-^sx*3B6BfdKg9RQ{ z0Znl$vYtnWy+Zv1P3593!qdCl?JVEfUB?$zO_C8!4j~0P$V7BZ1`y?ia(#Ics4?14 zmEjwcK55^lWYo^LKA7owHe${zOHi=sqZ=Qz7ioTbk%$MU&2rp#Y+!%?>&80m&EM$f zWUP<*9YTm3X~*Bm$9kp0VpJ%9TG|PZCk`yc9pau zbVX6o;oN!-^BNW|uK;b`k+q#>^$If>qFTA7h<*l-*n$l1sR3xd0RYsVsx%?7TxZJ& zD34y70f_N`{IxmQYMy5wt~YrSpu(dP5D=YFP4(2=T$*|ABPns=@cXwLPb(t*(nI3? z^W4ZePjB6Lt_vFniQYzfC=%US7x>z{;*>_Tl2*+vV&Ai={d0#8nVoIzMMjXP z*zbRTw0K}lUs;?ICQh3a9|ubOE^b#5#@1f zTZWXQx3tP&i$2p*clSQW+}T80xrHAS&Dle+Dl!btvuu7mmEnUWVUi`~$^{Ow??eTg z!@wE#(t(4JkBRl4mZj4{?KZC4Le`K4Hpg|x32|F^cvKJ}=J2Rs$BqsCC;fo#F{I`a zB`eQ%O!auq&wuJ6m5Q9Bd5-grDnb<5I*l0b8AX2v3$3m0Zkk|~j(TZKO2=ldRyYqI8HM22(?f96+PMvL6o(s?bqMW%z$0q;Nj_37x$h^Sv0r9@0wKv<={ zT1@)nm1*P7ehEB2ewS`117;n8?h|lt6hTLj2Kms2-T zmOX=SFB3mXZ~tr#yG6)*`!eR9C#{~fu{+0y{*FId=^y;NW5=f#zNSHH`r&0lMvZ)b z(t}TA%kyg#J`8|-Uz0Y05Ai(8lMrGEk1_)NTD^*J& zqTDOU1~zau{X^}@&@|jV@Z+iS`c#>hF5`yNN3XL)>2(ImB|8OP4JJNMbKNrxGJQ_5 zKM{c6Gb%uX>kArcQt1jJ6}=7yIQw{VS+)h9iS#SiR)%WUM)I5BaLQ4)0=17|u3*|t zXefbos^|Be(tY$eLRN~RA|j!RBm=D0Txy#)q#yh4t9wJ1er;ppPW7FBOPs+;Y@fPe z)NV3HbNy37K5@*dB;*(hfZb%rXUqVZ0cU5>d4{wAc0UAq9irfewdY|pXbN~Zh)arM zeXz$BylnnwLVe1E*M{ou+ZzFNS$aivq^H2@2tK}MSR-80g2qS#2&}FeX-(h!LK(%JLPp&9-aC`=}`$HjLW1+(#AdkE=VM4sPChkr?byezZX%a)N;c5RI; zFCl9+*X|Lr1F5YUt%i)gIGJS~cm}kF4wlD))*;C5Z)erT2$~>2jY$`UGIttHVKmo# z@I|oN6rG{*2{4pX)!JwXE1W{BCc-<^-4^_GbfZ}46xoCvD2omqIQg1GZ5`#GMol7* zWtAK~cFyr0`wqD6+hw!og7zewUFgz<W0!V3~y`T@=pKjO9OR1re7&G$@#x6z|KFm!E#0(UKr z`MIiY&OBo?IQ1?pkkPOBDLy6|gb(*e~5SzR-jNX#RhN!_)s?;2?eX(BH`tCk|`aZ(TP52O?M@H@;E{RzZ|i zt(A*8o?zDuqAHh~bx4+kE#&^6IysGOv5~;PZL9}7 z5tmYZY4=9TTdBvhpNNsx*)OtlnVGw{&*!EAyjOf5g>L`1zR%PDfAD?8kL}S-zRw!S zu|e@sLL{zcl|E>H17TDT9${cO;DlVPI-`DxxoejM(Le8EXjYf za%Sweu&=>B3m%5^7pI#I#uLvTC$l2ITTXr}bXt7Jn2{2`)D!u5E2DZ(-w}wqmZ)*7`A@Nygm)wX%yz z13E^<=HUk#UYJ^n}skFP0x=Wn#@%^qOsFdK*Izr_U78kN2y zd5%W2bD#ZXR`hFBQ0Q+W=}T%pAmm4~iXGiV=*#2~@t@vhglS6l-%zxx9CZ)472>k? zjWk>FrOZMbtJ-YPP=j*bT?aQ*V-#ozow#s4US{t@% z_NE;%F>vDuJYdQdcLW@PGXlIwUuZV=R~&f@LE(r7fqnALrv(8UNGP(3Zuu*JwUW2V zK=z@-#y;7z;oT2&I%_^6wb$Rrnh-f3A|$`@IgmLZae6>fDe5CZ{(*p3nq2rDO=cQey0kMo*Tf^m+*ZpQE)?B68;3C5Z6|o|4D7skwc}VT^=D{DF2}QSn%_( z<=@<+WY%gAH9D0FrVx6EJEv*WpLW=K7pF%@5vSz`BkWNG8yD?+iO+mUNZp!QtJx2G z2{}oQyQ%J7B_l=>%3iluiUXG7Hgim{;{$dAu%l<1OIE@W{l@OWZ1B>Asr;$Mpfwf5 zahn9EPC0R~s-)m@{n|J#DaeEIjVaeeV&9B+pgMVM(B)TUD2o}gZjN|NVpK+jQRZ+( zFn)6UieiiR9PC|o^V6Sl+F40jpMLCBW+RQtk*~?Nn8FJ3`&>ZO_$WJQrJ3Iqp3|?-nBMqXVRY96-5!Wd@Wf;)7wdpDpD=W8z zl>3{@O}2DkffWvQRQpeLL{Q%kTuSBVgh(~?!_7m!`{BDvuB9F+CNkD#RY??jx6XHb zN}jv+PMD=qz{jP@bPZL?OtvAF^Xf0T@U3$ECEb<+NiyZ8HW(eB^bG0C&^ zVfYH#l7zO+8ozxSR>VfK@oi|A8zwVjck&NDDar>c*%h9HItBWqS}N7WsM^Zjj#;=e zh<_hkh_isfXyEh_e6Ot23eE5f?Iip@0k4%R@#iEQChmj1r20;@oqG%JS+W0-PZ) z=NG+tv1txLz#Jy{G~j@Wdg)=(5@E=cX{wEC59%#?@p&Gf$b|GEJ{NTDqq%bH9F-6o zf*3@z>7MGc$Tc5rhLexb0@}c!GEswvf*90AtwL!xo!Y0u*oYqd@c)D$FJAv>;wB`? z=lA}BXZL#aW9IX^@bt&oxI5JOpqc>Dd{2)+`BwOCFRF)Z%Mm$gEz{t9Znn`)%}U6gu8oQ#)Ys2v`fs^iX3d(k^ z?DPc)%%gRyR00uw;h?0YTM*dhmWba%HirvXjfgu8B!^b_C+t8wbAs0A);EOApF;v^ zmi^1@Jd&x>4%@K0FrgojIt(~U$gRG^O4!Q~PFQoy5$w1ucs3jZet|-yRaWV#zh~lg z-~r6EzU3&@E4h~&QCiZDXW4K#lm!Pp8$lzX%J?cYCnMVjsoxLllagA}s~^8;8(fP_ zm(M;c8FFyNYpi=xVnXY2BqeZNt?Dhoi)<~EIiashb!X%JiU3#4!W5nSglWyHw--`4i9UaAg&mwL^7nIIC z*O~p+w}@8fHM*PhgrkI6iGDGOzjAZNgzcn&PG3k;KDz0s?aLni{W5!ouTv__YxtV( zfPUgRi7l*d0YaENDwq~>hs#A7cdv3cTSTzQSK>|?tKP8srZ zBiKsbIbf2mps!1`sw4E4TGf#zaabGPLk;;Pbv)?E&&3~$5WtgxoazwS$S*n} zEJ)O}yNh~k|BUdcYimdO5fR3RKHRuw+SMKN$fV`O&}ax{|BZnm?C+|jCt1k1h~H<@ zcQRyJHV!_=K(vuzCf9r(fPwhALpXPB71t5Z_XBvJGH>!O>Cmaqx zMkggs5=P8^D0&m+;$TK3eYufBBk9b8%Or^;wEY5I=*jyJcmGUOjl>bJtlU#O?60ZY z&c3*Vt)Ye34|0AxIVxRn zi^Vescjz#9<`C^K?|`{!e-N5IxLJNX$%ZgqmJlz2M#6(yHqzXC=RaL6~Y!~##V(E*9=hflR8$me1)dXq0sgFwUfs+|* zP!v9M)nN?s^!G@tN4Sq`MuH zVQTH&KU)9MN9$!9|Naq<9UB@R2Freer<#ihqJrw47@yjAN`J6i)pYQ{Tkx|=9ym1R z4jl%^wOy@>|D5Culto5lxLhUs&bk|QHH@%5qHV?n$Hy+=4D z`2mfeFFX!jff0du9^mG($%{hKH5-O@ZPT3$FK)eO4+&T~V#-?FRr#rO+LX=W>&wQT zI9pQo%z&4lw^!6|{@$_v#DT3uzO$_sbBt&hBOQ`QGL;x>Wn?yHh)z**smb}DE;an#^3lzvr5Nx!=KovUV$Sx;YaymP3W<2a&Wt~6LahWVo~e{yPsn2c+* zicVCnD)F_a%Og=~emYc-=G6$rmZhcBZ& zH`};CRU@?B=%FBXg}A0p)PGgYs(*eiWk}aVZqg2;QkX7#bIfR=433UrJ= z*Zb*9ciN2SmTYWhQI9KAFR_^{iqdo?z(qG$i6d@NT6fpOebJnKWJjqZuPY(5H@xr`>WY-jdspRQ!^=k{Ee{wDDUo*|9l_Rs$rZ68kxp4|D-P5TAzxD3dAcMVEM20l{c z$Q^-y#dAkwXdkRL3p`+uP5J)+HrJ!HR8*IiKAz{nPu7s4D=3oWD6Ce3tI^D*W4Cn_^ExA%`z8-7?qJ=&k21_R=LPSznMIl zRn4Bdf|8c4wvoVy26BCuk1U352`PCmrOlbmmc@AcA1>=fb~jSX@oZK~ z%BitrLSkadQ(w|!PP55AciByHy3uetu1xRy(h;=A*jm^snTW$XBGd9lm`}u#;qgwH z8Q1Wq^ry55If~)HAD$f~SUH`LQ8OJVHytAD41D2TB$EhPw9dv}XBVpv5dZfaFP4@{ zo3NpCRE`o+uzH<+1{#MjT6}ar8+`r8&*=h^WmlJCG9{j+-r|a9b;gs&;#sJ=p5i>p zv*0MtlE%*^l|^MVC`Xe240S~&an3knU604N=qC5RBW&#Z;VrD}gHN2nEW$ed_n=o( zv}=-MO1e}bcClBpvm`!Iv|T4(E^UfzA)fKyLt)ss@wlD(steDqyj#=1W9rnD{9uT0 ziXcS)dt}AtSqhH@_UNX-(Q|C9Zh2JZ-dnO<8`ZM+@OWbe*ztcr{=O@jp&1e0+xo0R zgL5NBQSs7w4f%SD-V~)v;o-giBM~0{fPH`~^8vPGPQ#a~6{@{L03=K&n8O9V4ylyL zYeU=%)glGh(+pqL3f7j@uw$$Tsb@3gE{<7_R}iPuKOlYj?3yj=;4ro&f01JH29XX` ze#;`*uWSe)SwK9NzgC231ra7UG|2lf4|dNo&k7ULbQxwOTR|lwtrwZ<;`uY%zhYmW zBi`(n>(ib+T?J;+^Ib^S&x!iaKmR)WX|dS)0o}*Pn!;|%$*L1L%Mp00ayoo4?p~;& z@xd?D%x6sevNaP?&^CxrQwGs!jvCaspRFTd!XLnv@W%dDx9B|+{i{pWVQQ&>xn=sI) z@_7S@SpD{rt;bf+eVgchy-mWUfkdh~vgy6$>s})vM{!jGk;rs*M z$P{QAD-HQp$?%8G$f{?DPHrAHVNLO}&5o0&?@=^(AivusIdavQahtnMSg^6;@cr*z zT)D51vDtgwNT_h%Kdw-&Qyn`wVl;ZTM1c0^AzTMTBwnPNQTnY>_zqg8-Q?*RSx*Gyn8C|rKYD795+wUL?WLe?f3tEi1UI9bHIy*3ja|d zl_LskqK9Or8+q~w5JuT@aK%S2zFD<<+v%fwXVzcX^gH{r>a&Tz69ZL|lM6r3Vng@b zCaeRQ(vQM@LKAX!tvjo^r(DHx(o|Kbs%VrkWeOd?(nN3{4=mz$M3A9^7^b}P_L6na zRIh*P9d`al_7gjJg1)|g9g&HNU7(r7?bRGs${w7gbU#nzXibvD*Bn36laAN3*=vs7 z><1T4km;ut9xC-tRX$)MPtD+D)uAi0BHc^hF&+c7jmk@*} zVUDiiIO;Fj&$Cay_`IIHW)Bd*W$oBq1njXoTOjQuhZG-nu!o=^=)FWBQaR>?Eb?|f zoQjagbl#ddTIGkNMJElYHE4Ys_caO!~rMJCO)|>Z^TE+DFT7*RLKX#Rp#M zi6a8XCeUppt5i*goM6v`DVo-1I4X~0TQ6eA$mK@)j+k<~T*Y2`_%rU!4!eU*Y8Nfe z>{(qv8O|8;$Tb`eW|4QDMBzuwJ_6-WZ^(R*yCs`%w=tYB&tvw#Cef*)* zeqyP8|0QyI{y&U;2V9iL^Y`sj?q~`}6+s0N&|syjAc(zpL@Z!0QS2H!mPCyjE4Elr zQ4z635j2)WjSWpqY>820jiwMa#;8$leZRBMa}@FS|GXyX-NQaRv$Hd^v$L}^%n8Jq%8X2jdP=r?dx*27fAX0_$mCd`J@uypVVn6-H*uLdU(U+7T&uTr| z_*44w3H;%qJ@InrfBiJPNOxUEe}d+iT7jAqyl2)4hi=8W8gkn`ym_DBIx=>QbS8E8 ziX3U^Y7HXnUMN0I3JV9X(!GJxkZ z!d;m!@$bJvHrf~a*@^U-U#v=cA$`FA#i)n&6eCEjdmyHVbi?^Mt%( z1z=Fw;5$?+cNKyT!Ssbb$(L@d<9C?P`s+ve4~QtdBb_K*fLbdC7NRUTcHY8R?pHta zZ+OrqV-82J)b9Yk;C=iN3?1T&sC8J`=-J95vOD-=@2l6SpVIfyzpUFaKH{MyP5TM3 z_VZ>~y;^~xPoFy{_XTsL^WNB@T!wNvXvyR|HXNA{`Gr)KC9@>4UNVko^6OlAEgmdwH-Z6*BZwAm25Zk3os(*DvQLldkaaf%_jD z-fkW!_r>yR>9=bjaM{ZGK#7inShP2K6oxXN{7a}MEb+g;|Bl~hfAaG@hquL&!rDti zSRDU`_%qSK)KQo#M|{DIlRBZ9rynJU&)aYL;V2ukUka55u}+1p^z=?O-z6Dax4-GaaLqi@a(30>1Q}byVjU%LB+G$xl+f=ush6*?H5cdZ z&DpXa14Ky2pk zP9m%hezAp*=ZJ~C%_cJS#h@EsV_L_sROXs)$z^?K;C2X0VRPA4Y3tsD2;18Seov6t z2KKV>cbX5ZNs#L)poN|0KLH;R9d!LovPe8l1vQ|(&z#9W^ZC4V$qtd`|6b&8_&wHw z+5C4vGRlSg`G%igocWR6EcB3n=hgVn{5RH-`GB7qN{XfM&BP+v+z9?9D*}pJmrbJ| zG&j|F5F~YSE9}sp8bfwqX%}*F_9Zg+2l>Km-KVSn35Af$Z)}GDEVpY;n%e8)En{?l~KMxn1r z5eAAIv$%Bum{`P>dHk2BTR)dB6sG1ZIyUEGj&cd++fN?6a<(zOaFKgDGqU?cd)N)? z60BnqyjKQXS4Ev0N`3%BFlDl319ZdgAOGYZ-jpixDR0%TmM7{9%d5ig*b7SsIZ0Z% zqi`L~A?y##VGGP5X*{eMq(3#u)Ysw=c-{Hc?@>eSAHFw7%9HkI&OEtaa`=azV~O9( z&-r}G<4vChfB&#k!fhLkcjuu$@GkOtp(L4LUCc}++}n~J6XsZQkmcj(kH@5ljh`N$RxQ$~>&2im0V$gr`r=$r8U(zL= zb=o;8B%}e=$PlZH`?_MqRd9CR_Ha*rB!_M3JG)QX0c9?~ewSHhOVik|%un*P{CZ{w z%Q!E=rh|^|2%DC8(GIf_0sz=Dn6$xbm&iTbz$6jnQR9}F#;rUv)dr1G7nzp%utr#$ z-KBLWntd$IXxVY16#Y>`|GsShkdMA%zkI!)CGu_3wH14RzIxyUpT(w22R9wNC)Mvg zeOl6xWTo7I9&-~9Od7E9GJmw{$-48BbY|c3yUa7~z_AlY#8@FGa<+0*%&U{Hk2xa5 z1m6X8FA`=OIe?fM#(~`eJ{HjxrINhVlCb!_~w4@b=!_$G>0$r6Bc;Js+}i+~g0}@eSN9z4$qra*p`tx-+!_dOTJ8|4#?G^_SZeWU$yp{iMAEw;O+BWm-pJ(0odLVn# z#>+oP^F)^Z>#w{31%p2Msp9Hh*Drpx^>ZX;*nH{ZAso2NsG5CWUT@4HFTYr81*b#= zxH$PMW+Nug$%N7p$lx6ASJgxE2$$FMUOe$Qf}(q3C-xC*oAd1Ne;yxUJHKFT&u*!l z<(l*X8{Ky_E6yaZPz3Lp?;i)>k?A`X!Sz~tj_XzIEOt(`)m1Yz#@CdN%li#EN}xdRO4Uy>&1D?xWm$ei{xHXQ>;1X zm=E(~OZW(Whu_8~!BN6Gh&~cA$6J+n@(QSkJQH#$=7efl!RM|eR#wdNRtfJm56-I2 zY=8bOXE3Xg`}?FP4Ey7rZ1t0e{7;E_t>-J6f4x6DGw)*Gp8Ovx4^_AELGAjw0A>V^ zVHmq?0`q_b`afW87qGTcg0mv)dT2St7GLd^eB|4NKHq_iSq1z#Q=TIQ?0WYh9oCy2Ber2abN?R8_`d4hflAV@USpjDg=@&qG+z z5H!Od0o=1)BaW`&*vEdM*2mr^MP@ zeq`(I8lnp8Qkug7@H_nqKENC@X9iBgfxj7NVnkz!zUyqL{>u1YKfvg_^l0m&%Q%(( z0h~4OZuh=7*~d~mwn;xB&@`4!=i4t`LU7|O{vE%85U>!*?*4rZ4$*3d=0VbV1v=b` zSS2_Dr_muefrjX6>fCvs)04l??4EhTo9{W!YUSLOnB^|Je)cr~f-PqwR_@%m=EQ)r znR{BU5PgFWcM6>=_)yl?2Tz6@P)=%?PhdD|O2|7I@6WqSt~svHUh)C=VW`!B1pX+) z(b}7BUaMJ!xyI#^npOa6G-%dkJn9MZV`g* z)YtspudIXg;Fs;}CM?Ov@cD3-$tUn{aFSI*AH+LnG36mUYs~ff znccU%m7EmpJor?GYa&iFvNC#e+=eE8g}f^FP}9tT_z2oe4w1===?iCpMAjyjLl-|6 zB~em6_Ia?k$npM$zv5r#u$u>WJ>+{lzHsMzSOe*75`2(<^|A!>6N_td62jXKbCRnpGx(I$*Eo#BdgLbi$)Q0kFv3FxxgP-CLoM-*k zf54h+f2QYk^y+d*zOu2eogM7%9@5Hx|N84+X&`%Z`Z(|WddslYy>jjznOLbxlctp` zg^pc2GGY6w1D~^q-BG=&at|0=qp^e8M!ZC8qUQf8wI<>|tG0MSd4yn9oXETR=K8(7 zJ$P3}@E0GjM%$-m(Yly%_b%4O3i7cw_UB%F$EMnKl-6KgsoxsvL)3Ql2d%>+ibNJ? ztk9Vx&&A48RGP%GcE|m^6I=LGa?gCWCiC3a(w!Uf2KCO*lEhN>Km6*%{-`jBM;g2T z=n)UQ{+h|(V;B4TH{UQ1zMa>&oAvkh(LuX(*p*2=;{BI^U`NS#8$vE_qU z59Xbm54v0anwrWd@40yX^3o5p;&>8EU%4Dp>&Yg>*s)zVuid%Cf3a_b1mu`o><{G4 z(65z6tPLg$%E+o;U5x?JEZolo?Ljk+OXRg#pja8@&72ZpZJs+hBeg|)HhsY-i3y!E zSY%fCf(CAER{d9xyU5qH;Gq!r zy{rq$CpN8LI9u()lK)+UIU`w&R2q|fARxn?E}tSg1r;64#Fb_Qp<-l#;Q@gtaIRE5 z1MTa|9mgG>0^>eb`f=B`Gm`Y9-IsRXNISPDcgHqOkt=UO0Cz)tJiXeI!iKZxx!-kP zlshL4LlJA$eR-$wcapb?R%<8UaAG&Jun@6&KtaNgW?On~+_7WMM~|PpVJ|HOaEJu4 z7SfhCwb}MK-k0M*NP;iq9y0IJyaYn#B(f(PGPl609&Tb*iYWys9!^9uzW@`?q3UOJ zPDuRt)9I{zi`0!XreU25;)}BGF`H*ICaIg4^TC7pp{WUBfz?CfSFYsAEi6|p=h=VN zkWG6B@+3AAb3!t73i=Sd4pm575qASoOjr6Yp$0h&Glh^7H$MtZ#sZXyjqqP6!UQw7 zC-d3k_3SZwYmnoQt*ujsUt!%k!GDo4tIca}{toQ8=~uFKD{PY-P;V@6+b0Zqxgo}E z)x&lrH8H6gQYHH8+mFX*&7Z+m<~&LM9QI{(%a>9eWszle3>M(*hP*AGPji8QbzWKi zOj$106qCQKco-FAkiZ49I?TmCLKQ(EV*V)(#F5FLb>hD*X0}+a_CHR4$i5zXjnC`E z2F1I?v~AXOX@|~!z1Y>%z5LQg2abHda_p$p!Od9umkUp)2t=T` z7k6yGz=&D@yquVqH&Pm%mpecz{PKyiEANXV0^k$n;G33MaqRDZv}*B`uSRq_KCj2- z{f(L}n+u47*ZCbe3u}Uz);SNVYe6D~3(+BN*mmJgfk!x4vg)E$&G~D#jipQcug**F zF5Pf@!Lx$LPrHuY$C9MFmhbuI{bMh*`r%?5xeH%Ec@i7IHfi%mJeUoA3#-qn$FY1u zd`;MkV8ucFtl1xyDOr6zcv6+af$Z6nTL(rmKOVPRuEKw20kjLrxOWTg$|@PGvNSvK z`6QR;Y&kEUIIQdh% zPAr7FBOXCAD>^&Wc9B9GIZ?JF(ilEw3Yo%5kqYAz5e{L@HN=-5$FWNstPaz_e9MzNx0ovWyjfO2WJ_#OlWkj&CzQlXXOXhuEy?VwJ-jZ#5 z)Vs%DZ2N(i_kVjP1zHZzJHsb0d?hVsn|K#K@Kaf;Dn%9)SSU{Y)FYe`0j{Qxod6fU zRY7lr28kFpZLjKrdk%sUw5L&=po_ziJ|cYMSCYEUj`f4V2d8sBLIp#UkHvf9m-(#z zk)w9eOPx7hy!hvoG@6@B<8>n4*8 z-@bl`Po6dT&67$wl`z3Qly;WkI25aT!1Ch_-X)0d=69Lbq9rg7whQ`o#JUov4AJ}# zE^s3HIKv2rFDE3p4vV0ET|y(Oxww+O2Ok;SJRSeFFq>CgnXP*ta2B*nO5*$ zZ1uiHIa15}II=zV3vWJ9cR%n~%zOImEH)sOBXRPKFK^Q1k$&k9x#%lw0qp+JxxOv) z_kjr#A!bl@_mF;X*f42!li5w?@$c9kw#NQs#e1B^EtMNstPH-`pm~66i7Kr1ZT8^K={LNf@gGxC*tiMmJ{0Id+-)%Heo1oKk zyJ`Ht21SjWEN6bToK|bUS*Hxh5()lrx5NoNIK-w6Duk^we9f9U8{vzfJ163~dezw| z*C_sO>VV1{$Caf1Kt9jhPPTz;QghJ zw`^Rm{sjE?u`on_8;#d=TFb_8@%);CWdP5yKh(yL_E!-nj&_I^&7rrnxk7s}PQAT0 zhoFmbJ;5~|c&C4ZF&xhWj0Z$N0*cnZshQ{}m%)@P!Uz56&#$R_#q%Qinwp9J^UAgt z{pV@@(_32q>RxK^e%yG@P#5!o-|OT0N5K8ER6n4bfE!>0y)a$@-P&HjJzTcEfP1)9 z`x5k*V+36M9y;V4ipZyd4`fZg&t15nUcCVRm@lo9AE~zmPa|x>S4Hr(6!`*|<$AEe zOW0sF*^-qaHz_=dKKe*MOTVglq7R(L^^rVNERW;}DYdsHm0*{PGtX+80`fGe$&wqjmL zCs)a{m3tdZy^-1xmk$bXr6pHZUNUv54c!e6u1iN7bmS_zEwMaUf(gZRi7CU_&q>o+ zn%t(uyvuFAC7LKkX_qpSo)b-^U6z|tHN`juUoqx-pmjX01+ezRV0?v9NH_aw^3|)8 zuPVl?SEt~AOleWuxfJU{$3k@2LhYn#sss0DH>OMh4@1Y>G!Qa=5wlP%G=I|@*d=-v!)M~6&IK zBlZ5qGZ$OFx`(0ME%OM+5^@SXPHPM(Q1rZ{elPJ{jQyGc)X>_$gR4q;tx364_U`?0 zl+Iem)o4~^$zaB%KBHMy&5Aimr8LXk( zR!@a(^+w>1)g0}fL2u&*nw_^zq}kih*x9MD&0eRj35W3N*O5I63dw#dm!>SWH6R5w zCEga^Q;`yiOlddsKIY53un+J(zx%|=-Esz8;2$6??`B~ydBM}mm!B3=Ep`Em_yu;` zBOy~74pwkNT@4xqWFG+UUPPQu8H@bxhOFxBnQKTKrDK(Z>RJ$4?6 zZ8oxfY$YFp;LE<-P=Ks9tI0gJ@l}Y5n~syv(sH7l5%4X7HYMg2&uLyuJQw_Am1#W3 zTucJZlA(XhhDvz`+u-t^suL(y@H`3#+o##gG^c5qvr+s+M^yjdt0u#j)DhRPR|40K zJPvr@WmQ<%wrvP5n}s-#q1&)|yaLDaZ@^c;(deaCC45ax;Ct@vePg!Z=WBvL|6{YY zImYv?8onxYE^Ma%wD!>B+3GXcUT>&nku8P!K>KHqJIsTS3%sT4foy_nEG*kz$OX2{ z@3hzC+VZX(8IS7tR2OhHx{{vxNA%Cjwio^5JW}+Jw={fAm8c&Rk{OA9Fm8=LrTe$i z2ew)z>fa=lZBPB1q*DDqrS>KJ_iz*QOtzN|WDa+=57-*YPglW~LU+g7ns2d}_P1=7 zIz#v9H&V7q;ZONn#Hg85W`4WoSf*^3a{k93^HY|mAEGrE@@Y&{ zZ-d6KP^YqZu4qou#9UdQV{XtMJZhY#x5pVK=1`+0c*M9zf4-8Q6AfS&HAn1fBgnNq zd_n%m%W3QFA$yvgDvHaJSbkz{jcE?$4QZ}RDjlgyU+tW+Ds#n-XXJIUT18hBW7;<==x7nJ*eft_lK2P7S)SFE#1xF5WetITc)o zkLk&u`_#^>GM4XHk+~|v5@MO6xEDOV`?}yM(|AZZPCQ}VGwL`s$9>mEkY%D1sv0=} zA>dVlPWGS^;k2;)(uznd_xMVEy1}fs7ji-Kq|Ki(hGbXUZ<;F7 zTl#Y|JvUWEFJ#N$Ee%iLLpsB&G(K1t_v3j0(Nnb7@rOKCpmCYJ%eEK&dzWb+Bl@pg z8h`X-7X8y`OXEZM2b!vsZ7=$V2d+f>r|5_J4sFoFLXS`M3aLe^2P5yJFSb}OQ!K<|8>}KCOFo?c29g z(u(Z7`Dr_sNdLt*@7l6ki%xCWv>KnxSvdWZIZ|r@H&R+49Tadu=aPN0x+DOiONtd^ zA9d*4wO8vt9huFNooVy)vR5QY|F!AVqFc+Z&EwfLHq??k=acCR=X`=WBHmak=K7U_ zNb!=qp`O&AXNl(;4?tGXUg%7{y(TN*Nwn9VYwbaMtkYH<=xFfDwevYxj{22(ti?O2uZ=66kRp<63F;+rD9rNOi6Ek{G; zTmS<|>)5dWPjgskTIz)CaE~!OZ3kbZrI?d|s4J&q1X1zObP~ZUtB>jnJm`68eT3(r zu~i>AQa%%J1~M0oJCBIG(546xL^_a~Buwa3T7H?Ys~e&-J4SR?+~54J)48;s0dGWE z>7nbHu+nm>>zM#km@Y@UTtlB|dM2W@-06BIzyx}hkUP>pnw&Z;+WNZPTpj}Mk?#|)#CnidE6n^Kdrx#_$l73Bz^`e@CQXKE`}%-3X`NC zslW$HAVS{gJx{Gab-(DZi-1GVZ|dv+ezE>*&q>b!Z}?Jh%UjnE!?gGH^*G-8Tn(f3 zLtigDuu9f`)jh4o12gpsVvanA04gP=j7YONrJuaf(M0B>CjxvDy27?*-qj$F$nyguI z!!88e93~u)vYm9b@MsEbiHXo5pURYjRM@_6R%FgznsxV9 z!PBP&S;Mk0zgSO@vZft22?f}}$kOGdvk9w|ZCSvF(7FX*74WhLUX@i3 zvEB}S8%21XBD)KG3R+SAcuzxB6pavgd6X-rRjx73#o(CcAc~Wf+97zre~aV~Vl(Bc zD2o=aCMqph_vR02P+M#d3Sf6zvi=7?0M{Qg} zZ%rcqs!8vk+7n#Un6m9v59a{W7+sF>7V#bRqYAnyMR<~3E#F4Yjt7|E3J{$VHnRt8 z<#HIz(y55m)D2b2fJNVSq*h!#dl)aN$^>5ZH zsnIaY2sXPe;j~3**Q!ZE^EO@LTBoEm>_jL{oi5fqD-SywDjqP%o(?ux(yx%VI$%t* zHKaL;dMf(f7C|2G=(>C;o04%RywtW?E_@r1LfGz&{qRIlXl&$t6T%>$2jx(_}M4@R$ax z)VRudqR@K5^8$??u9l984|My8dPDfqFz z$MXQwG>zv;vd|CKWL>6ayelK7)1p1-NNc09UU7RNQ>kU!<9UE7wM=^rpPByyAJ9nj zUyM&n(f_Qn?M45y%Cy&X!kn`B2>d~p_u~I?+4iFUkBi%rtm?8)cLIthh{QgG-RwNH zV-IPWC1t~w?Ct7=rim?^q)eYZZ7$6@ctM=qJK)9(eD}4;eP52bsdP>w4=Y@$JSudR z3kqFxb6N0%D_0+|;KRQc9Q@tNFACN5bHIMl2=BiVZ7Q4lc+!J4fr`3PHgwSa~BR~89a zm1AvDU^~X>ZG)szg&H)wG$WgdtuR5uIU+8a173)aK|Yz!9r)|~{;Ub>s%F+oK^*x~ z*^()7M)r#aPgz7Z8qUytgzc)qgDez{4SQ3JO)eT6pqa=X7Q&Bkd)x@c_%uT5=qZ%W|tQL@EQGx+7lP}Irj^$AMkmpJbs76JM{BQ;N62UbO*L8@ooM`~HD%iidv%S* z)AW|k3mQIa--}Ox33MWvA*`(JMgO0dZ7=%&{N46C{_D%)1N;L_pbPb1jE|20hO+HN z{~JoRhrKQOxB9;X6p~e(yZ?rD)dBlbhu-!$bSKsl`%=>_#o?v8v>a@1DiJI$Lej-R zTuPA=4qj}zGYX(ESDd0`!yT;0ny(AsQ|T*gYdq1^bT$&R%BBg^(CPu^!@v9ZtVn&ljJ2Ijdv~Dp!uJMS#+I3pYh-tWaarAWc z&u~CC2P4}ueCor&WWVBy(+j1Ta!;?m)y6ZS-V=50E>f%5@G(3Ww zYQTkgE-ARbq~*nf(&-Q4vwwACEqLp7;vLw@>Tvkdz3`5vfg>jUrM0Q%=1JZzfq=Nv(|^7?z0m8n-Q>zUAr{y zQr3wt^E)T^iZA+rsyGSEKMys-?IPf)2IzWH2 z_ixI16j6;(aq^MzxJIoX7bcFJDGeI;UU+v ze+&)wnKO3A#BQ7ZyOhBKcU=o*dlSxYpPKyZR(^6<8b8ZCr;pMfu-55oSqOhLUBk(E zlhz^NwBT(NaLOrzQ$#q05_-5weiW%JD1n^IlAn(h2yEQ6cOEuX0yO8?9zXm zx=lzOGsibL^x7_deG9UZ$UECioji69+dFDH^W8OPfnYN2X zYYzbay?EtnG76iS!7pmv(|~D_S@0XHZIAwKy3uo36kpSGqAT!(uh8bYSoaT6uX`9a{=k;nS6IqO?Rw~lHP?9teM>DVs^vFTgdMYd@W*G#$4JbER|Y}flh%EVe; z!yEfeaQkw1*S=qTIH`8Mf$abjHiOa-Yq5=?HvCvNMi{F%FOd4mjk8IUj5FbR!qSNP zx5)dinh*&>MQ;%a(gTZ>FY0JBU!`Hb#VAGRTTV)^rG#D5_m)~jD_Y~Vwg2rsvG(H$ z;91u}q-;ceP7`WOqYNV|8W2F1W|B()L>Q!80w5d)00+;-Iq9|KWIl2-AW~AgY^l4; zLius5Fg2N$?}@cggIRKnI8Kp`#bcCU`_ELw!b@X(2P9l%hz~_x0i|Kl5Y?;5v0O{~ zewUO$FsbiYU61@MV4fGa;5q74YUgD?3p)VM-xze`fBo)Rium8NYTG_MP>)`bw-e01FFpY#&`Rh5V5PUW5RFY2%C;B%UwF5@ zj{kRM@e#HF=py$$1b_T^&IJF@Bv36>j(?VAVY{Olhu0)}x$m6;|Pj`@GyQm*A zpUeMlV4o|}1It6rktI*#aT%*uWU^yfynwt|0+!XU=VI{Bv-h@f@iy3@tUP>r0+J&R zWn692?1~{Vy?5cD)?pey)jW8Xhth+~NdvzlNCbenX7RYp6{|C7=Z0~Cr-fh4g`yx) zm%JpbTnx$qfa*liULOifHzcqH*H7||pJG5smo45>Ma>b$j?r*!H_rO&|c z*f9dh3$oZT8X%9e%9?H?C|?VoLlJDTr*bjC%jV>%#@Klq>7H>vaKN@pL5kwk6=3((Db0opQm+185(i!=xxwsw)WZs4w6XR34enbvz=sE&F8d zGTQOnyLIC}zyOYQFXuvDPkV0{n-~BCHx*!@I13VBTxQy7!(^HlC&U*!NIfFLSFz)f z1c#jk90bI$H|(rhhXB#uRRe@^me}7ZbHq6REDIlUV~7E@@3UKu7+xP_PtSFdAgGu zDITIotewp*d&4c;m#$0Q5cnrf;7d_O+d=qBzwx{AofA5;DoYlx=-FxW23AEK-K=9= zYb4-k*&=4@6mo58@@4fgM8Lsd^)axC)6tq1E%qX`{WD@(^w zCLmdH1_wkDxK*rkvp&t2HaF$VIXZZoJu6mlFnd(+z$Y(rMbC;QV}-T3v2Ilm3hyth zSg~vM5D})Vw>}=$)FC5z#FpJH8n>1gAhNife9JnZhJ9yj>i^kHe;$r-XhcS13NSYU zZ+$$wg^a!sb3=B`EPXtkvAQ|P9**U_oiLn&E5ujYXet`ZxjL2_jki}thjL~oN3(<3 z+3bu@<;{*xj{oOq0&T?@Xm6`+&y_Jcr~P8tgHUcyc|q&OEq3Q5rmT@~SvjpCzht>U zG1DyHf97W+R?Wp&1kT!6w3unrE33XWc?ezbU#UG1+Kc-o0jB>n+l20ske?p0zx&iB zm`fjsYYDmss)VUOFx9e}`&ETAK{omZ1XS_K2c2{x8@b0AY2CAhEax-fFqXPoV+;du83I>8)FBANJ`k z!2cB(+!kTNC4jrecS{<#Wa}_Xdn<4`qi{SSR0g&fvKV}zPF!-+;G(1k+iGR7Ki`F2 zDnyxeD;l^JwzTivsOA3yc7)Z4z-4$1uoeb^y!E(K{UEPDjDPJGeLq=|EQqc`r zsR-)8fPbQfL^TWxWA$7Yd^~pjmJ$1lL#VaT>cyX^EV)jdA$rd;aIgODH;;9V?ES-alf?`mrA`P&OskWj<;%eEEDdZqEq`Zos;^hqdlv6;ZHTsi}6vu z-g5KShz?FU&vxhc=-jY7!G&F9tSw?@y-UMI4%!kiy120P-Y8ubzm^Xvj?{guWnI7wB#_&=c@Y*3Aj9z!lo!@LCuYtJm_Z z;vn19q9|Lnvt`{N$)PaQ3LdZp44n@|oUILV_|ez_JL!F}W#kwt3U4qYrLEHcJ)yEZ zYb{${6fO(EQ>^5b6D-dMNdv^V35Et+(O~1GN$}JH#SETu64`;wav-*R#Veayk`PNz z$GzNS4bxX$kE`%CAyz0zeAoA{I6J?qeaE?AMe-S$ zD#$&+?M4%J+Mv~ZdM^Bl_>S09Px`I(ImrgK!}E&P=kQCeLj0xmxmU^OCE9xzKS%$? z?JJjjUZQ;!>vL&=u^+{En(ELK4Nq-vB4ooEl`U;$N%eNN_jYiB)qxNkDl}&sXK#~c za9qliIv1YTN2n(`0hk#Vtz=meW=8qHdeB`z>yA*51XUUdvEjc^V4@xjdQ1q5hyqBFa7|nKVU~ehyx4s6N2+`jYTzTl=BsqJ4vRpQC?jAN6iO zw%>~O(Z$b&%x9|A5ocm2a{CAo7mJA&W+K)N6yXz85Ls@?wuxr!T)*Zi<5D^%tjNw@ zk+!qWp-wfMG+VNBMBi*Bv1@}i?b@|z-ZJImsiWr39hJ~<`^dN!!?tgqGk4zX`j{jc zYgeXCH32ik&!8fpuQsVMMFvR9|%mXxJWTU@8I$#Uq_Gqsi9kpT*HL2 zxLNVF4nX5+tVKQ4`N&ln1;2_jvsFErgOiJh9dRP5&Wm%F(j0BHfC_C}WM?*;ot>S` zcu8#S#O-~3(`^kfVG+h2BBrFD7GVPQ{A`H)jB^Su5uqQf+ge&DH27lACSpu%Y6!e0 za)XywRAaF~Y}MX_lLwOJYR6l;2Zos@BKBm> z>3&)y3KryYgA!s;G=3L&>&P1f5ip7Fb z_GxzJG$xn8O2QpeCY$lHl~O8+ofeIvA9MH`dsx;Dk;)flYC$Plh)MzmEoi!aUycI)qI z_oJcG=qQ6ON$2FBD?ZRTcjwNX3?ycyQ;jPbG$!#b$u0KmvanHLN1{*KFY5SElmzfV zpLAA%>(}yV^jVCM@-I5&v&5mrl??PL-qre4#hHZ-{OqOiM510l;77*|xTB5x+$^Ug zn&12zlvH*gw@?}?a8%AsBb)l9wZf)&s5+I>s7 z+j7at2`8kuAj%L&Lc6gL7qhSSNm=sTdd2d2e(@$ktz*4qsn&TNWW9PR=tnkEd)Q>Q zpdaP~27MUwT_x?X{3p3t8cH_YsNRmZ%uI=w$Uz6)$_nK6#>MbKyCX7G+{ecoNc$3uwEESCGH+xi!u{A0*JerU_U?^G@>Ej_{zXxX+bPo3Pd>4% zL1F}f&v*dwmBzxqfb0*xSbBA-{Irckv9$|w`rS&;@H^4@F9%+64 z_P$*N);;U<`s#mLdwO1?eS_lX=)bsqRB=BJ=SsAXrsoFswt&5qf0Z^;{sS44;41%D zXp%N&YQKBS6cxWSX}^QB+1FL^k2XpKX8hNZKg-uqydfm;mQ-W#xCwUink!G1sd|AE8*z~g`6@?LzbI2pPi<5QC&p2wUE-5}%x zB1X!Ap&VK!B_JgkF?3N+qkT!f)!xzM67RjpN5b0#{9}E$=>6h8OmonOnCB9FTij2H zzFy_i>-n$V>916u#r@hgN55ijOZ2PDg0A}>%{%;h_< z-Vg5`m>Ab~(3fETFSzf8ZH2GPs+o96rc-zlR~I^nCy8D3$JMoKh0u=q;7Q3)9+rgx{#k#r5z!afU`Vti1%LlTp(iS?H2ocQoBALl z_Tk@=B5sT9ei4}_Uh<0UVP+A7NsBlpRa0e$0+Q|S+bJw4jc zK=D(0!v2J9=gV;Z6u}ffK8-gSg9ILZ$FL&+E55J|V|Y`I2XH-cgZ7T>%RFr1#PoGV zYQH06kRo#97$jn!2IYcp{iuVZct+h4&iui*2RQ-|`mmY<~n^d}ppz|S#KnPLb9My;{;qSM1bcp!Xh;{$3tijo%| zRG_TrV9S>xX5qDoaDx||T2t^WlADJ|2w$$qhiI(C6jSRfbMDQVBe!?BkT+xi{(L`d z`_!rJTK%;6=+L1vroZ95OV?G&xm^b)B_)0~?8CyBtV`$lYkKuA&xYR4ZX7!jA3sm* zvvk?(#IMeJRSetxLCxr>i64E`yHDoP6<06n@6LT z!XwmCH#r&4-yLMaEyIZ#wiCw#O ze9R;i_^Hr1w)dhA?JHE+Ua4HU+O=bw*Q&WXBr+i}GSb<_f2Vi(^0~W)F9ThUqw>`x z;IGLuU73IyI)3orK_&T3I&b^?@4(sc_P#U)ZLl|v7Qx2IIE*Ds#5Ffv)_!p9pj8{b zY_T}{P*ilg=08f4EOYt8KWbw7FrPGk>y%{7=W9G*fM}2lAt%uD@Ydv6R zoeOhC(fB$mvUjE}&(2={ls{(9PyfcNU^?gs^BRjY=K+~rX^p@HAH_Uk+DKYeXW9Ef_215R7{9hg zjXy89OsT!9-KmK*ijdIE4*T1k{)k2v8j{%_*`6NN7~FVywrj5s1~*!@!^L%4csPIZ zckhi&79=eT3&%i{H^nR)||u(r1VBZmkk<}H|%Ub=(6-@omvbTy72FL^XJd|d*RSwaqWLw40U%%>a1xo z$!0}-e7ATIKRzBc362fu9~ufBmNFtGJYxMi45eV*x`@c(AC6kO?3>kzJ)pmM&e(Bm z*|@Qo$#LUpj*wOxydkPjX(4QWq8zDN-j}_6MfM41{`)EFPS!c|`=fJ2CYpRPx5QIY z9r2#-U)M@Ku~6|IC_YBhj#RB*f3`E$=zY0VeF^V6JugyV)L;%3pf&8nq7xr5_~iWj4D`KX_rZfr_fGg)^vw)) zcm*X($PV4r5aA^yyM<^7U0;N;$tWM3I$`pZdzN0(hE3~$_grbi=63CqleSpqD#^PC z_iNOMIW+rv)}ExKLu1A--gc;d{fUdZbUAb=X78lQ@!d#Y>UI(IE>8aNJs$q~FrkMN z#rFj8=ne6`x1j$=(3f9={_qV%kWoUnfWjCG^}4ZOK}DayPd8mooiin62D7tVkq!Js z^Hn1s@M-6c#tk?;Uy0DQb0aXH`_Vt?d6-+mfnwe-x3bJsreqb?5%7!f zliCaTBr^p7WY zBI4#31}>)j@emLX$#Ae+{rD5}MtpH_&xlXIiLc)U#$dgQ?Z%#CH4z6a~NV;}SZkoVbu{@B+Faz)_qA#ks2CLJBEH909WK>(zKSIxFfm2qKj9(aB zFF3f~;0s6k)T&*(Rv&(fHCx)DLyhX~`wYq6!1pLY{JVgFb{+ivSwdlzDzPy>ReFbq z4QN}tmc8?sZlj3I7ze>l(_xo{3`sQGe1c^rzcRR| zFv4ZS_pE*E9ti_)O`SGv>aAW~IyZ0Lu|xM=-Q(lC?`kqkcDdV|uc_lvVa(VI-;N#Q z>KZsH%*(4=eAbTmZqWH+JaSuoJYaa3M}moQaPVDfDi5Ba-a$Rw?uAF#XMBv_-oVjb z#yq0!3>+%}eLRjk{mUX;N!z56$_@;(${JQmEo_j2n!-^gSNt2oPK<5R zv}u#EU61TQaeKjy3IN->5~v1mOMNvx_{q;dEZ1w41vf|SSx;X_*l2Rpk&M0T9ixbdt>9U~)LoCAaF zwW|GrCZp0Xg7$8pzR(V|hY%V;aFN-Mr}wB^uU_3Als40Sd?U8Baz8Z~;y z#J-4);d`y}-V=R!7<@nn46h1w9fqYx;%mb#+K)-mH39+yXU>~cyJpR{pUz-aHg)V! z;{!f6y;q+;y_9MWHLACGaILGi7vCs1jf$GoAv6?Kpnh!Isx`LC>}?@*O9j9(LCKMN zgybl)H{X}a_dx|%yrf?>UKxeCiA6iC^Wa&s$T02T7mN)v9yTg9W%87W@YJ3?`MRFK zohzSAXxQ)*R%m&#rE8ZiUAF+1Aqe{T68f<6H95k_2^N%k`qbjnr)K??e)?QG*fd%? zNk3q}YZjtyJ87Y`Nv(|cU@mEVC*Vi32y7ySa-o=jhO`6FHvGCp%)VS09?`jZa)X9r z$5w9`)ony-`i3pTlA;>a4~vazSbt61Hu8_&m6}DwMn@0u2;ys#>U((&?>Th1U5obR z%2iBuv$t>Fq7;0b6_Yis!>PnfINa4?5eo)s`vfpyky|0miov*X0)yC?jvb0|h>Bd( zwyk_w!y#&*M-UrCIE05M4hs*rV&Py1EOhyhj)4xiw*oxEAm7^HA#vIcK!H95dSJY& zCaLwfasCmJ?Nd8-?AR%_ePje*8ya>n41W%WDSMMFi~2-*c_sE_)q5s-d2M>oI5xI1 z{Y7gX=#4vum9Ymy zJFfFdm(RL%mE26RjmI{g9uw0zE^b)+_H}DFZQ66#HNNA_d3xhw5jI3O#Zv_X3s=iH{RP`OwM-VJ9up*|- zJ^bgc!6EhPC4>`UeSD%pS)$)~@KJ$L#=2Jt^b}Mw3W~viq79VTKLrGmPeK|;#0sUq zcviJh?PhkwpPB7ORU1EE?*AaRapPF}i!F)_PwdHm>X{fG*+(8+G)I7;%@OI~|DQSP z*r`*;GIPYb6s{>fNmjTR3v{J)6?0UPyh04wgEY-p#CX=V)}$}BCh4l>Pa6=uNlc?g zjp7(XT$5gC-Vm7fF;i;Q$EFUZ=xd)nHbiJdx+=o%7SuP!Xs5-?q% z|J$|M>(C`3)+Bj3+PWFMovvK?=E{ZOHhbN=wAovsQ(~LF=B_;xj>2jAwZRcTUdYKD z8QFsZ++ezt8K8xr4lyp4P~_`{KvfNh1{X=@K`8PRoMKf;q4x`HI)K4{giclTQL!ordohKJRv9~Ks} za&u5k`EmJb)j~VetZ6cp>tinOS+QE6r)RfHRqBOQ@v*maOLj8Z4C)(IL-_HSp)+tw z22SLA()S^>Ro8q^!jLTEdeWGZ^a?xNysZ_b;E-Bv5(G-|wd;k2Cp93Hh6S(e+^J@e ze572<&0*r$q}y=$_gQ%H!05%`Dg61t=uVMMY(MmOLiBvB0xE#v~OI?Ha&)nA0IffUEARmgC=zzIdNRe z)`>%9j?%mndv^b@7vCU_?OQ*hSzNQY`P2EwY+_=O~+xHnheteC{`mHC$G*UeHYE(I&}O4Gu z^{81ZJggV%Z&{RF-`ndGL8lbyjNDkcBD}xYI9hkh_^5e_Oh(C*cVpWI2II!sU_MGZ zK0LNjo3_%K!G2Yncd1u*@L>M|jfY1@5?ex=cS52jM5ps481DIblm zR;^WHSm?NF)!Ot34TC`z5!trgaM`VyZ&ldMlllCfK{dlefxPx9JduXcuc4PW9ftsR z0Cdk)(8LIu&?zqS3z%~2<`n*F0~FLVsk~(owUZ2!Fuym9_Bf@*{Rf&~C)%i++&!G( zxCI@UJIM zyLW>_l9D%N58>g8{t1ur27{M`7(qnyk;f<``2Od>=Ki=t-ceO*PE~fHtn5R}q9;$- zl@?eSq4SAfvA^;Xb~N-B*=*Wwf^2xPc?t`K4}e9jlGB0kM3Aq9aB9nw4z%~n{_L?CnR)VJEnIv*P0zx2l7|u z>ah=E8qXRwD!jf?Aw1YF7ApU zdO6f=JZyAq12%I9Xy-5VtrPj$SfK331m$Rlg&ngCiAZ1o`+tnR2Vj&%^FRLVQ|?ko za_J!}c2Dt3sT_E4y>&bvz%)DrD+oq?4X|ItMbKZ= z*SMynP&byf(C<EKe*EC#aiWx-UcP<7Rt{f-q?&rrMC$Q zZxG_)_FOQxtZ`T|PPQe(+FJ|dbFNOS%rN{Qyx@XYkEb7<^FeLx2Xl_5pFFv5En_p*L?UJ{bj zLL~zALDozfDUpyQJ*Q3m7%?EHsUGGqyP38k150h{spZR0wLMaKc|ob~(+gdvEx25H zM6}q}ICbl{Ze71_wjE-rM;3j|deL@RI=qIxcVN`;J&WF4^V7yX!`b=6rPHRBvaBVA z)21P6jJm8<3&nVY58qP^vsgD0qb;bArx?HYcy7Y@s8+Ig^5oXTpPb*Gkha0c;Pa5w zu0G!D{6%jr1AQvhSBe_WG-u#0wz2eFpt&NJHmo!?MRONZ#D^u~RLv71U#GFV2p%1C zHD)vB2<_==Sa%08^OJ)mR$y{Ynw-_Xeb(fpB*a3-W>lYjeP3#Fvi#>T%*@&Czi*$7 znYqNr=ji6=tj;j>=H`nXxAB}}ooDPX)R?!q1)GTmZ+l;c}!DXJFhF%d7 zg9ff$cl7W|WLyjy^{(%cDQkLP@jWeXcafELnUluPnKQmqYRbOeeR>bC8Zh8+)vCiH zlSXH@NuJUt3x`Hizi{|Cjn=Xo*zCj5(M7372Hm*!dp)An#}-G~nF1in20`WrjiO@9)>P zO>f%`(cC*`Tzmo^v;W8rv0}_?6hYI%DVWp9{otby(|rxHCxK(#V}zyQm0rE$k=o@elTs77mYUU_Z67{LOx<-N|}s29zk|LAIM9 zTUT14!|E7@K4gnYlK$jPnKot&d?e|)Viu@=Uu?69W}V*JNEf_-d-Xy;+5kA$~C5J{%9L8b6i9QLVI47xSi z9IhFh@cu@hJ1~3Nlv%Ff$v#u^MX_g2fU7}TR2wsAsyNlQdO&+~>XzV$AUCQn=*|OO z*hOTslG&hFdG<8D%Hl04r1qP>g+W0@6K7JL2kX3e;!A@*rzu!AEIEaDxFAWKHck9> zIPY-H`?^YFYJbsWJQ+6OV%YL^vHZ#N*?QYurMc|}kLAPG=e}nO=sWxvY)jCGW|T!c zbr8yorfYpw1Rv|dieh!^c9{j`8JVS1cEgWj3|=K{S8l?lz~5|R>CrtcP2Su&EUa^< zdGPBd!mUfV-7a=eQED2TPB@=2t@$T%Kbr-GBV0uF*7*AWX-Dfl_Wx-|hlk<7@Jeny zr;-z(+0m(k*~r=*tWR6bkmloDd>1l96w|wb`|6lq8;U|7@d?vfJ=JY?R{LquSUF2e z6W40)t2l3Xn>IO}7Lq#+#{<=L)J^IS`k|=klVs}Kz!?&Ib1x>X&N)uV35l7KoFaQ` z1i9PJedC4d>_Yg=Y3MePAGJIA?Tyx2Ccn&LD_>S?5NuG5?160_d#J)$Ae%z7y_;hM zYf*iNsjJ($ex#sbMEKWP6f5C#77p0FrT>5d{qLVni#M{hhWJEvhHDfI?zAYSIo!~# z+|b@OV8DRv^y0y7e(4PN=nzG-uRco|^^vLv$1MJQ@fMii=md=MoQH+@CHk zUW(6Kw+-m*F<5Qo9@F8e@(!_TI=kxLs>6S>TSH#C(1*hzueRWY+lHE1uP3b}#T-w; zbKOU6CxTPHF^n=;>N_y7vn?ZWe47ESVnRZOw5Uu;>Ctm}dX`&4&iY+wuwD^K#w^LR%gVC?nu^+llpwBULs*Z|$q6*8*}C!G z$>|AZ=oj+Csjt`j;dQ+pa~t)51}?cyQEKFwbH$TZ=<0CLMVyPeN?HS5?N57Dv^jwm zKDBv4vrgMF>=Z;}(i}RpY#JLgt)gODYd+VoFVwBP-zVzRhBkF@mwk~Uk`o`V@!th! z=zNB9;G@u-0Ll)M+9Di!mENfwE@T(x-?>FgOPfK1Ep1xGv}ax$xzPO;EPr-tM%y#G?G`=dZk!~Hz#r(o3w#8SP zG+E)JA6wF=YelEdPcQA0Tblzx+q{*@wgBBmyr%lI@ z0FBQEF##>JTC#Yp^7@TR=DZUc!X06Osk}ZGd@BPlq%Z2;(dr^bV+-JM+q>+z3d3ip z+OA+IdsD;5c(DPW;x8QETtA&*XDeRt(jR8}%%*156LHn%H&;$f6fELUUN*(;1%^DU zDHbybpgCDGS;{`Qx)xgnl(WxV3t8gaZBr+0Lfip^|ts|7s<6!o|{sms8k+;X-U%hN+= z%(%<;%$UyWRXbR|Yu{%mrForLw}2Fp;TS|Bpj^28qK!eVt?C@FRnC{@^W&($Lrt&{e~rjh|!GF z)YJ|4R~|o3zlhfT`)uZY@YE33--5MOV0+sxA3whG{s#JGD7}AQ!v=rwn@y@W<)^}V z7N5vx1%~$*BRITL^_F9?f0N+-IJ^^wzl%LNcZ|LHd!}b8U!@Sq;U}?IZ?CZc_$MVl zmIZic4PRX$-@$v4QG{nQidW@*9DW+`y#^n^fyd!nb^P;<@T+LY5%@f8_vU5yUy*PU-1 z3c3Ai|D4W05a7a5eILXB-61T9DjNve5-%}JEvbEuQW~qpXcS>Xcw&>M#S3SNATw=8!g27q2GUZ0gL ziG}lW3gtn{AAlpahh5DpfzJ6uf6CzbTQ4X+Y%1s@S_J%)kmIOE;{gl-{;s-$a+^@U zQP9$L_%t3y>HP^k8*m+;)9;OPLDysy#xp0DZMWNh=Jb&_Ry?JTHx1uYoyK#gIPhny zcY$peM0Fa`2OZ#n&TRE74u4loZ-_5`r6Aw}{L^ZBLwxZoc_W7l>U41fZ*Tb4Xm6_> z@&Kh8z{ha@t#;^T@ZX)|8zJX`y#H~0zh6{D=79e@;JHRW@beqd0erZ6mgIx_j@QPs z{2xA^VYw1NsPA?SE)C-Fo*Yi{q;sXXh0FB_0)m|X74mjoU*K{0S{?s+_&z#c z%Z1Gkq5#+E-&B3XVvfJu9?ao7KK7r6=z4N0m!DQHQU57!!HC} z!@obVA-;!>A1#a*$^|=~J0njKyy~7K{jELs>-dJx4K+E+`PKd^*T;|Z^}n%=@uQ)+ zPf;#f;*Z)5@?Ncvx1GFSBC_Dzdk9$&qDw0ui;}n_tV>XE-zWfS64{gw04$4IlKYB zHlA=oIgKZ+T({#{HW)NKI#R!y#2r9@P6ufq7OLe65KwY!|L}GIz9~xFwyKausjx<`59iNmfGNuFk6XkAo~q~1_%4l8IhMWZ zWnc*Upgoome|mkkQGJ{TYxu;Ua+Bjn+b;o*I12R7L-dayb^Iy3{uYjp-{P{2vCNMZ7((VU>qUDB|#= z>U4hoe3Sq@^aHE#tByaN@WChWI2_sr@;s{MH^RRuf6eWj!?1rE;@^}jIGpD|bQ*;A z`ZJD7MJXD6^n)Vf9a9w3=K1NuCPrt?YWOL@|2gSz_=exnUw*bb3zg`Zh2=(IyS&No;9$NLD7^Ug_HxhBYm?0*OTRd@kZuXd0R-s=RM@X2n60|q#} z0ONk+6qI{bxzFaH+_oH!-f2iRVBQltGG{>ne9&X~r=Nh2evcVvsbG8zA9f8ao%`I6 zXh`40;qVy#j*qi2?sNUp5MP_8x-`Vce6*kUH{emdlt&u>>I!;41M&gi9M0_;k{j$h zP2XMO^fNd6hTju(fI;?}aEWC>ZW_J`aNt3oj@RZ3doAevpwEL- z_&Cbc=s=&&*Xa-A^!a!c@LLJt_V8=+>l_~?fStIHOJqbbfkR5=9amGM~xbs+wv><_dx;KV_zt* zT`sL%{Nc*t7XN;2Zb@v%*x0OotBUu&Tk=uo-04NBy^~vpMkM8o=~#6J{f57{iTTPP z!LP%2hdzLwmjA{3U4+&S&<9#P;Hr!`5BfXWgYdb&xrg=y9@^)$jHm$MXg4|5K>AW^ zx6_Cs)Zsg|)$t8}e?d9~C;V3o|At=q%f4A%i4oF(egpgm4e(%jq%Vz=fWL&-_p1C#y?pri+pELF z8`PKVw+O%uezlG0%b;ItU#lK?tiJX5w!h)q?Cbu9zp{=#Y~wn4#u`&WUxj2Ir$4X` z|4}1+sZO4cs1%YXukSkGzopmfe1rOi0RC?suGxX)FCiWPI$Av7s=SlqPv-MUCE)01 zT;HtZaI!yF8ma$i_^0Kay#Mg{1n)l@{%IK-tH6(jPjQPggo%EL=K$C6EtuzbQp5;w zJg4C+0lfbZ{rdh!__y``_7U$7b@+&vQ2*5MAKcaCsnLHMEj0$euCLHWON{L>OvO^Gk;oL$e`O~bz`#c}za1Dxi$ zDDvm2d?}d2r=nkc4!xoIC4eiif+yLz5I)*%V!fO`(A(_FBRDcrHqqJ{7&2jRbmQ{Iman-|-3f7;i+kK|5&lp|6QD!S!~~_~GO2 z3G^+n&v!Pa4?8ND=4+k4qhCx%zo?P_TSxz@tn~|reeSTgugdp%y&U$r!`{A1RyyRM zgb=`VT?d>(>4OSn8W`VRS6(Z9xV zd1~}^`RMlK6v!u&%Jn-dPhoRFryaK^Cjd_Nl|kqjrVxF5E!yP=?jK#1r*plD=N$O3 z|Dj(L#B-oe@f_iEd-YETebl!h{Y5%`lEW~;Sck9G_wV*C?>{qi>SzIeJ`7I0yr!+G z(_$vQ8~N^~+n2;oA0EQ-^VgKt53e1d#$rM!Y~G`=&AhQbrswa`wi{_%jxL=1`sD82 z{FlLJ{rdHDAJ!@|U2{>t$@U-QTZZALC<)$#$>6f@DUf^u{07u~JsjhY;~QO$3LBmX zKSy>!9i4joWB&j@FYKzvhh6XB=QtXpj!pyk1t@TWbGwW4A4To#vd^yh_m9JGsK0T1 zw6@`Q(mPTVy=jRjj@svd6wxv~cF*8)ZaKk?fct6B;2nQ@=9s;&{)~)!Mf$ya{N8zc zxqc7NDbI19qY~+<rB=coUblTJyb;dp-|yY1y9XH? zEnFt8#Dn~~Mlv?$>GxjewXB!%Asr5j@ozH5LLu=X4(0diWlZ~RM{$|u^E>;5{hYtY z;WwxTXiE)FGSKjk3Jab9N6YKu;BkCM|9u>Oo_dCZK5tu%{&8XZ6X6$VeMakB%8y*e zF?!!>EaUI>doT0aHI^~f^&pd&C(8I|{oYYL*PtI8%XD}$r`M<-8>{tuqxijg8KbQY zub@sSi$MoEdNSu9ec5nHzXuP`(VO|bZLqP*c-!>gclOzRIehJ7@Edklg4?Ztp8^k2 zl7@fO9?jvW0e`0f{G2_L(?LHIziR+Lrj0NA$AI5$06%YU$LU-Kyo|SvM*q0Rj~$jr zBlrb7w1?I9{~O(F&^CypYR{zbXBxE) zAD=`I-4Zfx)HYH$mwz17r2x#{2tly6})Yr$w=4C)W-GW@Ec_f z;nX%7{?XA-hM(*ABsestu)IOJ4mzlbfZjl|h8W_v&T55wdEzq)ehBzvF2i>ET-a#5JCO|?Ew#hC`(u3(a;(trVP>k6 zFUm1?)Zn^KZO|8SZ-;N@NxYuaB8++^bFi+!NeYuI-(Vr1E^e0=U!32<#>>V zxCL;7)RBMJ^bX-^`sE7T9F0HHQ-n8+e}8;zT}jaJ9B_j)oa1Tzt-haJVJP3x?wsBT zjXvxLZvQ&N-$E&V4m-CF{>KyGpzHkSKfwR`2l#`3fFsiOc)8Rsoge)J9G*u5d=uW! z8B6`u*#@}LWiPE9qn`C}wGmuV3%UIp<&20R;fuK(-{63|K%NcYM!?DTjdEccoQ>u9 zGT>zQM!ASO96c4~0$;OvT_g=I{MUi6*}N{$9z>rdak$oBz`u(p!6iRClv!OrBDmKR z;8d>nKfrzd0S?>aZ}f?d-{0XRe;5CMfRmQ2=acG7_FI%oQ-Y&jJL}{?wp)}-pbm#M zgnB{#MzY(YTrgP>zNFcQkiU^^wkVtfs=@a-=y01Y$|YEbn>ifv=k{8ZOLHBr=~HSi zvelwouuFos<0uC{x6`6rLUp*lt_yswuU*K8K)oFLw+`Oz32@>w{~zFdMtF=4;q&qT z1UP)3$IIpX!#Q~(ymuow)tBpQ7x-3O{>2WtaeW=-QlP`F91i(&T^;2@dWPixB8Nl% zTu(>2K#m-K+(C!y=_r@}8XWHzQah6TNk>Py6zcGkb@-&8qg*gqbNPc`9iMb_luMBg zhqVT{rhmIS^s=~hwx-WGT=~NR7befr;ao3KxtJ##=z+-umuETfAJb#NC;i?KpZooY zJLvPleutgM=>zV9e%S!u#Md{#zZ6CMV;9}Utnm*WF&(Br3EPf@&8qwCOLY^nT)I1}Rs))qa-PT<|Yb@si)5d^^;_p$%A>v6@& zC^{oS!S$ozukACF8LuK^SxcPx>(ZzHr@XJ;A0zF+a3;P_D8bmLVWAac{d=y| z4ed$scY!TITxdLpJLbPA7jADf)@KwC*8I-Ka4x4DlIvq|Y9Bt%T=vsW2k@cMr}lZd zAwI>U6wT*rrQ3L1;`EID2i()ND_uVB4flhtwD+o0cz!&3&A>-;R{6M#36nWJs(|K&CU zjRCGB#I5!S&daw1=VO4wF;?6;{4;_ZKX%}|d}v20kPZ2R3jjArksR+9zRyIPIc$&p z8lL@oz-QA~)NPU%>Z$c|PU~kpGndOTjPo`Rb;mwt$m@ps7nkG}hMAM!+lYHdw0m|BO5e?vaF95wh0m;zCr9y2Amr)%=XPE@SL=x~xRheL-faLCu7`NZk$YfWaP zML4Z*&`;NL`D*ha>}f^w$I}F8boA+Z`}}~C3qSZ{#AGo>skcLcOoUuM1-yXw7tFc% zen7q_t{|GokWSy1@i~xm?Pz+g@!W-&u zwTAfiTKJ+q)E}f2mZ5Q6SMOgzi}8Agb2(t#8@)MhJBC(lG?u@Fj1-QGj)3xdVl02C z`~W`Mam>Apk0&-&zAF_F9`;i`u3JT;EI_xOhi--5%!F>0M5Le7bgQw%_?T`LHQg#1 z@{WiS=~gLQ=DIZ%8w7kTzTs@?uS=Kys=U8p=ME%^V!|l)l{jBqj5iuQPYByZnF+E9 zNob(D?<7zn>rrBm?K^QXKif&i^)k5JB|h=&kMc2b7M?Yo5ML60#KZA#P9PeH@np_D;fIxQTq? zOjd)jA0rs+RwX2Rp@hM%Lf^lm2FpJ7yMS~3Pru>UA(yQ5BdbCDUl9VbU4@;}LW3mZ zU|@skdMzEuZ2J990^Vc80UT^$&EACt(vOE&d-VdUif4~XD*M#&th7_0XIWDL&*ES) z{aK`yHG4Ceo>i`GQ7^Fe+Ovo4UaUq?wQ}+7V#l*rwPzvQNbOmHo>dR3=UH~6GVxBE zw^>SMPZuoQtCQYBv_-0uG>P-&Dnw^{8-$(C(!wUrE{3K?Nj9Q(O;9_e)-kD9KOi=1c;zB$` z?Q=-`4Oyq#Gq6XI&Qg!g_HmL=!3A4rc%z9lP+RPM1mX#~l)Z*tJJueS=j{1#*uD6ht9qMH`C77H}!Ce#GU79Qu-|+De z270=o1ZAMBQSzarP`)+$a8dJ$aA)DVAmzHE7H^0S>q~r{mc0ssfnSOszX(QLU5dmjW;BtSn{EHb6!3; zckV&);hdLWo-_C0LDT`yFO;sylOb8;@5NVf4_heSQx2v?FxQF^mV9(>*FI z7USKcoKN>1deAE0#Be{Dotf4)74sH@ff$jCC;9Q-!bxf5u3i;ix_0g1A&n#v zWx{oF0((Uo2kQJC@#{4;(l`|>Q;3_mbXV>{UjE2_7mZ!W?eS*A;p|Qk9+6RzQ6A9| z(K*?|x+Zb!ny+rLE+E&iE~UxpwozWIA_CTSkId^Bo!GjgTRUer4|mDUH_O1-0AlLqeczrKXPRMou|+2*me5MgK0a@o~f=rby|+xRXb=`Na4s40|ty7B^}l8 zR}UCDlJLc~8B=I5={|;gM3$|3d=m zGh707HJpE4hdfaxYO3RQ-2-Ug7V(s=p(PC6eVGDe7#e#taae4Uvuvg=M&Ygnw> zS~j0ke^-A$$M(R?Wx@rNw~3dRmmQ_tHYg&FJ-&^zj}5nRR{;Zz2|0>H1uCpu5}rbV znRgl%$V;PAwUP&hdsBJN>;k){wnmXPI16WJfjaaYa&I-EHhEK!mH#U5!B&1w$j2^Y zPy20=b|HJ>{0i*S6FlX1_>L0=L_hfh;ID_m>qTuP$o8S!vXRNU#XpJPvtm5><6T== zpvb8Vzg$140sY$p$yALvPC|kX_4efFNg%ye_j4hkgN6^iFy`b}T?ZA#<9v6+zb{|@ zcWioche)b;r#AJ?Oi_PTl^nGoHg#y?Knq-4ZdWODWFLbo zIE6)Jgw2KBT`#CXhIi~w;~a&^W3q>fyXmc~ZyhrV9_~517!SIGrth&!g5>(?_W z*hm_4T=8YSp(KpD3cZ_BK zNZ&C4E}6JZXQkw!K`O8c6<{on7@j30hbv%bH>-ZGX=pFVHw*fHbg&8Xn? z51^0cv1_y+fhX5Sx?uLh2=za#`G}u?9*Gu>P$Sqg>U3(ycJ_Z8-!v>nySO1Y72aPJ z++_M|6x=X1qSerYZiow|WT}MDDKJ)Vh=sNTQpruar>?+REAON2B%yV-x8T7r2W~y4`Jt}F*j=^7yOetmexow1>aSuE_NKVv3*N|wNx*Y2v9b5m zBKG3Fd*V==xyl$`Wi!JbZj4WF@>9li%DZB{caIKd19~^{M%7<8t3h^WFU4SVl4aN)*RT3x zKxMn&Eb^B`SvYHGVtViQ%(q}v(P`vPo{G^EPL@$I-7(!6=uHU*jA#}lf*!T?r$@(} z)UUTNrwaAWi}DbYX~Clw@?j6S_^?In8S*mdMzjv2P8bTg?W8h4R!e{IasfFx?b|Hx-dm39aK9eMivtD^+x;XdXp?R{G?Fc(K zch1XXb2rA1_RP@c&DM-91OB{22j`0H4JP&?14{2V(wou*FZ2`YH;{|Sg6&>n4)l;j zyOFSeJk?vXQ18{$z&wQpQER`{EM}m?r{UwwSO&cv4A~o8o0E8XpZryN(^&4M^~o2h zFM{5Des8TkN9xG+h!?F0lcr(M@|N?oe=c_g0rK~1jN7F|{=Pd;t&BJ8dG@Kgd`|Sz zJyK;Dx9|LZ-G)0RCl~)8S1q}|0pF}2yE`@U{c+WzPo>18y*g#cqG-tK(f4St&Y7|( zDOue)-#*X}^Drxb6a-U)&J#1PW-3GH3*{m>X{EgCqT@NNd zpuF}ECqLYU3kmM4A5Ioq0yONwln1*WPI<&es5|NIgDH^WLzX0+kl{&VB%>ASj1PuO z!u9YXi@A95qPXVbMRgDUp1pWclO5(tCE{;$B4$Ww2}#M-#OFqtm11J(Dc{yLQR;V!&G1WIdEB}sGnl8$ z!rxIfHS*gvHMSk}9Bf`ym6xawekBj}Da1EA>GUZdR1oshJ;o=snZpT@!KcPCo3qPS zDsJ5+Zbdby?hdxqB^rF2ZS*e49bA1W^hO=BbpAMZP-8re9!;@Zh0B{5y28@Rgf2S8v|DT62?VBJY)O7dc$04MMUF z&I*$SC)4#zOmNU@2F!O7zF&O{L6-zdGfXT}nqi)2SQ@j4XtYPZj^A;nvIx$uX8Q?} ztMP`yod1;8y0a!O!VrU#+{7J-0)bfG6M%Pr!pre-r&eCT!g&aN(YS zJNE?K1$W&O5D3NLCIE<0kDEd^cN4Pvxw2pu&(c{Q%asO7$-~v7iH94KjnjX)8;y;K`-E48=0n&J z9Lp#<^2H#X$PM)}OZD5oY}p!hgi@*w5u4d=O*(yg7P_-giZ-f&EJ87EG5Q;3yoX8e z$YITsIvSs4syeG#aIbsaUW zZQD`Z5)!?<+FIy@iVhuS^-OQ`cKfKv$cPU7H}&hj;P*%H8$wy3yd6j1S+tBn4tY`{ zG|IK(O%9lzlnmUig$NTCcIxP2&P?yT=EVU;YhM^pG=WR@y`oaczdthOCyR&2__(^{ z=WmS<3f!_}VUM2W<(gR8l(EH{@QYJYNXB$-xmB5<*-7YFy517|uo89mICVEGQ6{Jt zOXzT~5==_?hi9a#l2uNI<%E8^a8+}p>;z1CAflw)wLeM6UVn^-6p z6}ATQrkU8Cnf(0CXei2l%hvQODCjqOXncHpT!}$kSPRX&VDW^pxI{yUm)5gx-_^tuB>! zo2A^o7-0XOcvtF&oU~Zy*7LWnfS~>@b%d=0J4c5N1?)KCQRY+~HUiJS&tb5`by$1g z{Z7xi=GVbWfmg#}-Roe*fc?hH?NJAth-a^HyqieH>dOl>&w}ZXIt7V9PlSYd$)x2lDdn z7LlvhX-^%j3t-nc467?T9>G53FsujZFi42byGNeieRZ(o=aGKz7B?G1^IdJaJ*ORVJLTvxE|&1t%I4- z_rH`PQSJ#1hCT`^hQrDy{6q;l#RCi1leb+Y(I%@ZSm|Rj=Hmm&6p)Mt-4F@Pim*1a=VBw3)EK^s1p`o zq)xT(mtQxeBZ?P?^IPe(8%r`YB@{kC{6RB$jb@~H;=iIik=iK|C{S3);e|x3ctRT6 zA*=be_!g0Ev(*b;Girtm|7=!Jpx3sh9nzz=b@28)dUO|a^4AyVoFv=^+IX~ z<-bneG-BDjZaDe4hRaKQR<+qUF6D?bAyV@0BiOU|~Q(}tm9bl7`6#a<3tbs+dX7^8veEL99@yu6V*UsO2 zU7ESNOOKM_d-(Z$rAdidQCY0>C&_<&Q-6dXgHxsm7()vApCV@UaAdS=3C5y*y`#;( zbi_NoaNf_v;5ApyYS$-#UK)9-IW|H$(?$hK+*nOos>2 z{6{&|^fzC4mP(#Qjc~Lyhz*(q*%CweQ6iYCVT4g|)srpz<>|F+pJq1b5QuUmkX5@a!ceyEAuJ)x0t6rLNs}_FuSg$jXdU+kU*<|6ipqzq>_= zw|%&7+0u3Ddl$z~w!Nran_RG*WvOpe*>@|LeZC_Uc2=Zk|@ ztQfJO{agF~{A|$h7*y)+GG=)C;b%rRf71xt3gy}-pRGO};kRbq@#LmK|3{s?oKPL~ zl?=pN$fpa@drd6ml|i>jO-6oaq=uu5UIwQN2et8^R3(Tp++abXF*!O6pH4I%(l+tE z1kpR;Tl)2WV)~Ha**m{czj*Vy`gOH@e&0T|BABfWeiXWI-*>@to7uY4H`$}2>J9#{ zs-miPfwX|Gsw&$U@i`_}RH(I%PZj9hkbMdEl>ZOBx{+t-9T|$n7k+vPjH{L`9N#E= zVlqts645B&Jo%G5tm=`I%Ck0`U44iztgn1h`B+jvQLkgss_s=8iIL-?$Hi6~tDUNyt6i#H ztD982Rl8SvRGX?jtG%kdH-%J(R)bdB6zbgHw{P?DzGFhLLu!bY{}kz7jbZ#?VSjv}T#4Fb5-vz)OL7XWl%(Q=7fr!( z)!>&(cU%e;J6LSriwuFu*W0MigkIWF`qJQmr-uEkUT#riS;^QNmhCNA+MN-nlo8j) z4Z3)yG9btq*J^uWgq4i3@Ej#2L2vQ*9yQhqgrVo2k6*eLzP79Ue16 z^Z{l9vMu=H0wrT~WU4V5YVof8i|y`rz17R#_f{`m{-Fm;x!prr&2}C*p#E=n`De@b zlz(nJ$xiPs`+WJHGSF3okJNPMz35YZSX&w)%n%l%qebJK13tNG4watO+nZ8A>e)$Y zX6CL-bd-{2@dg|}IJ24DMcH3Fe+glD0>jUVW0Yl9`%H3APGZ>Zp~uzgDN*hQM*&8s zQ+vX*5;qO+RvFnLA+gWk0hX-z=6?=IY+`cp56z0m4Dj*x3~mzO^Wany*W+=a<^W&M z!-1nZ&UocAiyhj(pjlu}#IUSR-AnSb;*v*%W_x&e`SvWXfEzk4kKH=b)VD?7X#;@tpvVsK@MvfXXyyNyqyTaYwJpw%3Nw>sdd_Rk}Xi52# zyrUr}o?N!h4TsyPdAO-s-cOP(WER=Li9EG(efga1qVNREx4j20pEkVTgjeT{uU$Gg zZ^nvAle;BhA7VnMAahbmSW{6RcCY7zoFnSNqG7}O9{Kj==g+;dbn>2Vnd^(D%p05g z`NUTW6Wg~>7(mNZh(UG2uRZ90!B}-^&Gj?wYSiabGNfFN zYR&L1EG=boK>@q?Xkqt|;;xK!85GiE;Uo1@UmS+W)YU!wRZnI&`S)0@Qm%Q?EJ}9@ zr?HU9oyJe|jq#l}p%dmyY38(Pv-7ZtG-(C;)^T3S~YIiQ$tH8jF`}~eb@AvEPUk5 zu@$SH?p0piYhP8!3-7T>tnB^$Ayq5nkciw*OA=z_N9{#VuV}V*ziocsR*}k4`GwGl zF`kDr4ZhMhy;MB!sKh;rj1udjD91$O9Q3v6S7_2UiMVNMH+#|e$eEb-OvUS$dD zqb{$nfA!-7s^P%3SJ%CkccCMDsnf%c$4Ld1qLb~f$`31Tf6)igsq(`QKdjVqvQ%I` zI*UG&hH*>PglgbJ6a7MuU}GTwZ4-v2F|dH~>*vsfp%I8jz=$oD{kknsQ>ArH+%k^s zD|v6~lrP5JXZ}rJQEg*B>nJ{5+c)v-p(%GN7yL3_{XxCq^`f}j=+`Z#(#g5?gy{>? zEdP#*y7hMdoXX->Zj~8B=Pl3e{84(W7519#mX3c+{zBSJ~BBM@J7SDppsr!5yc2xVtx<*iqgK zE&S+zq(l{x5(}mb!RWcwk>}s?K;fu&@Q9H`=6i7@02_9y1K4gCxh*Eizs-- zc3Yx` z%mvGzFaN^!hy}1Xs%Nd2;%mQ*wo>o~&O(@Pt=AXxmWbaezJh(*C@zcIcEI^V!;xs! zBH5+3i}>A=d5Z6-ZA7D;Je$*iX(xsGo1>|hr`m#+%zNb(jnuaH-{004j}aMvxSzG{ zh!P#9fOI-oLmtF6exyIv3$DxYrQXDmfSC2R%czlTxu}k@bXKSE`w3! zQE%ilu+}~2L1U8EgdI=PUnS`BC#}3YKTb9?y>8szFkY_ zpFJx*H)-|$_uqc0d`zc>Ba1h5dE5rU(j(Hmvx%5!ovXovs7jD{S7*HH)IU3RY(!&Rrr6osGns48*en&{kk?^30SFSz? z()m}xe<(D4XCV)@kHao0tSi%Oqq{{ohYd~<%}?;1qU*Mz{J$z_C|oxG6ze%V;;Dtl zGsY!6x8l-)SJptH+>ZE1K_pDckf~QG9lz}T+Janc7!M+rgs>W@+dZCP)-GmziK_6@W@*p929m?J*}QOh;m@hzlnE8 zC-HS-#HFx8871YSkBatB&`|@RSDYZ{=S~VS@h62?T)x*&3IeVe(@CMlN4Nl!uXhN7 zjV40}$Y>Cv>yX5=N09GRSV zsZCm+?mc^2+Tg^ao;?au+K8Xlmh7Ieaq~F&Sa91Z@4r7eBUrjRyG(ZVG9PU1=ONeb zl})~_4@7vm%B>FE44qPqz_Hg3GEu>HCdSiu=#NcdeYBt)G51++bJ)*V3@a$6%3nu3KBZi-qpm@z=Gh zfBkipRw2QgQxEXw4f_LLE4*>?|Fn$y=2Sk?|8H)U;Ezt|f^2^hn-CfL++Ns{mFRN@hWIVMm#d#BX8Bv}IKLnWdftjR z;de(h=$9=e2@m6(8tfHch1`AR_~L=671bK*qySBvzV{E?OIe4>IPef)wW6OzMP z1o{QG2n>tyvjiunheTR}hfVB~VF_;Lrg|r(4moscY)(o{bgGA!tDkdp&fq?|5s}M> zjEwH$EIK=TMTP|g`#3wz&7U%Feas8WPa%o6vsYGa$s6O-GPqS>ShJ|G7M(I?e4@U# zZ_!*7keU%z5W}?~zQ3wZNQfnU?u?_G zhE9y@vSQYh;=w8E!(Qo;=5gkmLwgiuEZ8?|diKcGOV-advOsZkTwbT*KtD@fMpjbc z4==2!sIjVhYV^IS?;?mpzA3E-)7n19Ko~CU*sc4KuU&fd>?QSMwode8>(nyaPimPm z`QdMh8(pJp%f*=wTZ>=XB1wK-G3b}U#=wd-gRPvUojYzYBF$E^#OF%vZILS$pIYqf zGQMQP=b^JsviOrTa=)0l;dy6qFT#>L;=B6x8+viSZN0(AwteWNU27vS42bri2DFon zk^YKA-43L^y{KvM7uzw|@>8*FwY%Co<-iXYHpebLxhU(ejaNb|PknX8{l3BHr#Zuy ztM}ji6W3xDR%vNkChu=4V$Zc8{>zS zw54w>%CvM!_Xsi@Epb8KJ=!f@^19?17#x?_KFCkbc8(75@@vs!eo$B5w1rQ%8Co`Jb>;lo3+B$fxU#(Jld9PZ2JMUPUASU+{=BEwO&Yap)yi2DHjFqs z^w*ocdMjyd664z*Xgh*dcbU)$Je4WG(jF|P=vo8(SnBwQj=sGyT2)h#tIFflU0;;NX#vPWK- z(j~{eWk^i0o2#*9a(aH8IYO3w{Gu#5l1CORDN6`wT9~u7pt<`J_giJN%pqM@IOVio z5^$j?EFvI1hs}R!$$}m;vMdt=O>sf48J5VHj21O7yjC$Qrc(mxR?&V7d*D8X%$t!n z!Tg{ck~LLHE1l%&dr@UDv5L&g8;ZefkPIxL<$$*NPiN+K&)tsWKPUEf38@&{wQ?@= z>Z+bRlis}Pq~SrV$;GLqsp%`r*01QYuEb`K^!YJizvFE!sR3 z@A?FBe=HiFsg~J^JRllYg5wxT3QoaaPDTo~P=m=Y^uo!Lr^F++UO0F0JxnI=RUT=3 z>Ll_%$=hB~ufOmDi_mgFsYgd4(Y)=RdUp7z7xi>dkG^G_u=#NO4=DR>=tGJjNVGB> z$;{Xy!F2_KVM?gY@2>b$?FJlo^3f=@$d)i_6xR)tABD)@JZvq0^C$%JBilzXUH}a` z|Gl*kFZvx>w>ihU-nu16unO_V+&yCAt+IdS5w`JXt6+`2VU5eQ##)1KTFvj9Oh@E} z?T;ufRuKrUKrnk+UA?US=~n;H+_7D){w8ZntJxZC&Ks9;WPzA-WTBAL&Khj>H|JRw zj2LGP&K+j;$sKN8*U`#`nRB$i9j!wDBCC)7rOiOAkLhS&RH#)#84CnXBOrlU6HG@W zS+&ZUR^ctHbi}in&1%Xt;gefht<^o#>UP8ckTKKhk#6-MZcJ7;s|%_ine)bGSY3hZ zX7%|51%=+Q#-v+gILD#Zs86g>)<6Oi*VcGzjMWEEv^CK`+(-oPkMrBR=+&q|pHN7O z-|1*I__xWox)c;q5r46VdI6VsNs`CaaR^ z>e58gz8Xzd1HKMSPEAVnMDIed(H95c;uB6~q{t)m2x%`%gM(5fL{rn&Gn2S!$LaOz zJ=^#l^0#Zoj9Ek1s`R9!bh=ity9Xx7=O2Yg?=9GPV8Wwp`J3951slb(XU?5_hOVAt z#`MHx>r`2Ze#+ph8@^L6!DFRUPGf1TlY0>=Nc7u)51wB1)zcKMI9915;eCKT3ZWTX zzfij&qV%C!U|`2tB1>wi{;57xmny7+8JLmHI%BIjImkAE=MiWo#D1-l{V*)K`l7^e!5;V)4_<)GZiJ7?WjchSE{`11Ab( zf=AN$jkRf-X259MRG61zHbBsZl$E4;20R=orY;W|{PLGe7U$+|pLKY2cQ5CblV=a< z92MH_HMM$K=YfkSw{8Db-0ckuLlWXTGz*p9Ui5m838Oc>*1h-3UwryPX6xVuD3ZDpifwTz4 zA}yX#W(W}xFBw8aqoXdwIg7b8ip2%^`v=&v#kCJ{7PS45s+LJbnXyBPV>CO&HeM9h ziKD)(x%P!^xiZN1oL|er>YarxQQlPbFUrS>7=BaCl~~n;?uy1FsI5!WZ!yv@6orQx z`2lZ;E%KtVZ$-{wF2CPM_B5&g=FO17+OnBfY^^6U)5MADy@}%@Lbq)T6>pkDwrvXu zQg8esF}9BlXCv4?b+Eb<=kY%4ihWg|CM7)@FZT~{^#3`yu~*nh*wqjgxD-V&LR4pUs4CLgmw(BfLW9`+^~AYp0knJ)|hZRXdb^q68D z2ELRN(ynUAxV}NfgEoIq7?PZjTYaj`k`dU{9OxJ1>1PVeE$y2g7WTu!OlQ#)Y)%c1 z8T%Rw56;Luv0_P5QQ4TSg9<7GV}e7>o+0M+tc?7yKFV%eo^kk?H=ges}=gdT(1QT)P#A45sjH8y9#z9CsTPKLzS zWPe=_WDNP&8x}@gB>onEh9z{eIW&4kMJ(`Z(W_PQ%rRqDtu7rC8<(BErhRsH`{F(w zva_@Mrfn`AGp2O&p3%)sHD{iRkC@jXXKvfXh@jBeHLYs*`fgp*qg%ItknGane^sv< zyuWpucRrY2Q8C@xq{-|;oIAKl+_tf3z<|O_g#(H!rf=U-QBh$I9WlT?@yLM6IYSd8 z##Sy~Fumhoxo>{4y0J^gv8A&%hq}Zgf`>6;NWvI#Mg*G9Zy~Q49!G0z=fFwaIQZE+ zOj|C7iB3*3j#kzO5I?LCU6-PZ@}usZI?s&lF}ms<^{>>)S?{Y|X?fU3EfZhB`fx>} zZ6oVU<7!KX)`JGNsy%v%M=#^wRlgH^HC-}~qM42*;g3eN6!&SP%%6`gmes#yESdk* zRxg3y#o*To^JYB#kx$eEa3W319xCE>$Ps&E8tJ5v9u5&k(8fGrR*vY25{J zS`_LXW%kDS)I-nFj1E)9#s*8IMIql3Q-~|A1z-oJx0$WKa^24i4 z-V?C6&wfycc*J&EJfe0P!@CjK&o3bpK?~(G>@%WWM%tF9$97OOr#09{J1s29c!vw7 zCYJO)&Eog{2Sj)165qMaQ{&dGN}1Ya@TmCC`Ih!=o*MbgoaAvIo!q_W>g-k6q1Rw<-(jr+Vv=H7xj1|EXxFvaLs1X1ezuEjgZde3p<+n}XX4_W zcBce+823=&S4w)+pH`+E+j_tXzRA)tb;=fXs`#~7uKMv;n*OjoE&lQ}``Wfm9=4!1 zRQh^YsrqNBdZrY+1->r@dDK5zT5rfj|80U5hOF!`1kFq?vX{HFWOx@Z$1L<^&dLbM zd4#LmNRJWTBRzdhS8vtcqW3km&CPga(?1DszrKYmBCLT>JaG&$x5eddhxZXFvPmW7|95?X;ESrLE^{q#oi@v~cYjHCO)eVQaS2wj@TpFRkPC<7Xp0 z$LCzlc4v?vgSc?;AiF5F`Kk8e1jVEFqSWi*n|SU0E8Tb>_3$^cl8WcLQD$q$G8`qM8=|H62xbGG)crBW)Yf45V~>94w~1j(c!n)vn6w9 zjW;Lu30SZxus9-Miy8kG#q{&+;@PD*Aal`@iDH+eN24RGzp9^39WKhI0CPg;fc&C9 znLRvRn>NqhQqe6c+S4a&jCJA=@x^DHXN_MSXO44qH8%~b$ux&42ETxeF3&Gqk|Viq znXy3quln#}z_MmBrhv?db}?qN-;DlEn@`K1HET;@`|Pmsq%?SLau@V}v|boZcl>~4 z)X9_e43C&tRCc0wfp~3gT*CHYBd*%uWRctu*P-*gki!8a@E!e$^7G^SG9XC2Pkd#d zxuv~;@Cx%MAz>zI$t;*vArFdiz`kf4;fS;lo`$K^St@2vA4cCAND+36JlXhCNy)71 z>M`5Yj7>|^gF{X&>f!3<9TwBnGiow+9d2=cdu>%h-k5y#nfE65&22S$;!^cCD_%Zv zY(i0CT)!UE^YcRDilly~;X@Z3p8G|`(u|c$YQ)8h@_M+oQ)1k(EbC`3Tso~fI*;s# zt`oP8?Uwvh!NQ8%RzU%_H-c>~#K7Q$qEk}}V*&yUcgjBC<7<)qwqk)jh~CBg(;_jM zqB^vu=?K{QIkrGhA0acrLV|!<7|SSR9zi{bY%MXr%N7>z+QQY-%YwJ-5QJ8E0 z!7xyX6#}_E3;shPdkRH_Mu@2?UJ=;G;pH0^?wjh990pfP>+%L8ThnpKCf04s_#WjY z&mL1}tJ~gwmyLP-H8$qbqi){b(i)%Kk}cJ{wv=?b)g!rIzszAXy9_$UI=o_Koev*Y z&se?lyuH~|{~vAd0T@-W{Q>XHy>~YW3F!$fJz*&cgoI=%2??Qvn$RIYC<(pypke|j z(o~SDgdzgMJ``R+L=+yDhY0A?2Z|{6ilU%@L{0WizTcU9cas46p6~lU!tUNOGpEeV znKNh3oXJle(7!EIG~h85cIq)|SJ*?y^e3ki(qJl4F}P$&ji#gJiIXtVDbXxZjqSL7 zUi%3R9%{C6k|>_p&%X^DaDzSc<~vhoeX;y_d)Aq4X&PJDX+~UD|I*=|9-q3kYhRtU z72m%;aq_2qXaDWI_(9g=F2G)ndL%D8w|Z-U%pzThYDo5b(@ahGrp{+fd%`fcB<-5a zWD;rBJ~}F(qUzDf)4GjbKD~lZ%gigf_oo$uQj=0*n}_=~X_U}%!r1Jw`K=2^-}kqB z7j~FFw&0Z|^E>&mo|8HU9*9lI9=-qBRnr=T#%JblSY33_z?32Vl2XFz$25s=8I=&< zGJE{y#r=}Q8>L4^w4d?#-mxR*cOr$~GN}3!YoN8Br7zK8DEsz6EKyTmloHiL3N=)T zX*$lhb;Mx0BzvgG5>F(OCPBUvNT>Z6H_YC_?)WT=Wn@;jXwmnyxLG#3ZDiwCQGP*T z!HshYr`_8rB1UYsvz)P=UY^mz7J_L&)3~UGPqVi1IZwR!XmVI`jP`TzQ@ukn8|qiO z7HxT;toPZ`ZF8DMHL4eqoZ2Yo-cCj1m%h-I_iQku`=HFIo{5d3qN2JVS@^V1lHEmz~DE^BFy#bRUgl^W;T%h&3Mc>Y-@JLcpNR+P4V_3K_a*h4TCH@7WMK)Pd< zsx5aQj+X*=DO$IOl)Zg^MD7s~U6M8a(x-x2L26iVP;hvVVV*ODm$cBE9m9GlEG)5c zleA{7>@Dow#_VYC2*Uo&XBXY;7#q@Yf}>-n?y0Q`^T+q?+9IMs9M&ze6Q{&9$(@v& zkr~p;zd_@K(Tg6PY}+$yR%*RLi_6NlROHwrf+7>+y~1qu)P{{B8nw_O^t3BwOIn8| zCT7QU>^io+WBVWuJ$_x(Vey(kM6JI5>}%F>|BQv*h5rvP9xlwwYMqFckB*(DESk52 zzc(zS<6>n(RyX_T8GB$yxGDZ#kLBKEeDfB2M1(yc&O6L6LTwNRLC-Cds=rZsDb1nj zlD8SHQFFN>9i)(b0xJ_}PeFYD(7fpn56PeY@GD!+eY6W7_UpXGLi}sqy-a2L`%j$~ z)%aq}sF#TtgDcS2pdET+0u^FwYlnLn98|%7j78{JtyxppoMpEQ3HLTHkbu&*X3A@9 zbU;T>3sAo1`8>T zoNzbC6D6%JSxmztImBa_dNMCD@}a4SJn5A*` zF{LwjmWUg2Tn>RpT_g)Kj$m$W;O4XpcJLS~P3z(`cz4FREe(Mn;VtU%y#E%tJux&Drq(s z&IDYBR3B510~fMdOHeiBN1}B|%)(9c5Xnx}N4HGx;UQe{N$b(bDlt;q`-Hb@5a{cx z?wx&qv#5}$$Y?bxxlz3UiAGbs*ZR3J1MOY=_e8_tSm(CzOVAtZSwdm2u4Tc4ABf>h zAM?_z{^YCGe->M|MW4BOGy7c|)PLqoJe*NAf6*c(Z4t^TsD9TrK1+jtLIH1teQ3wT*WxRLOp3eCIgBwoV2&99WkNkt=kjuw(EF zB@<6fTwN0n&D}Pmt@nY>HdsD*O6trA!=V zeZ>ILiY*q)81`x^miX!$+C9L*-&mhcNRv`94ReYR$oLe6#C)h#YQA^|Pbe&&$AQhX zr9OlvXIj|G#75rrmxqV6|7^I|v}U>U9?)BaJ}oLT3sQ>b>{0!X>M_fg7qrc`$F$qU zef9VD-qWxf%Q@)tQ^47AI{U(5hI%|G`yDDKh!7j|UjjGar*b?L4~yevkF zr$q@oFLIb(d6G9~E%?wKL$l~J4N0A78!*F6{GChJh7&&5)i%};0sTa;xtv##yU?uY!GPkQ)%R~XQWg*}p8AYWVM`6`LL|KEO`Y z7OwYPPg}n!rk|oBWuOvTihlSMWYml3huCnz8QbY+%vCSJRbjDu#kMmih zove_p7W2if$Heb5XSr6hAQmis5I;`crwTE1FJCfnu$U;||1T!y!o6_}OTl*7RxAbj z7~pw<8T-Kp%@Y0`Z(`}7P_!_LS)^=Km$23d83uPW%;A*%XZ7aFlUhqBvLT-h`C!wK z`P3$?c0S7z-ug=fUXtUuvd=Y|Bd}OyOQ+TnG8pr8Ix~gf#>g%~R;X_-i*aK7Wgc*j zPtc!G>hst2_UK;_lGa{GTMw&2;jpq>n6VXB&QUX`}U@Y>|LLn({%6+V2 z-@NeNB39(Y6Hw=d61r-b57(Gd?f}c5= zY+`KG*=4sg=LT`H-$b>DPCuB_ZlO{lDq{ML8+YHi?XhvJ)4BWd^6U#(KOufy&b;-M z6Ac>eSy&Pk)y}b}5udlc_uRb9Xk~eH=2F)W`-)+X^4*YMQNg;lNiODv#gzxNL891| zt}I=;V|%Z8lO|KWD3%e>dDo-w`52xwwXl_OCej^J9g3F2aFAR7h3lvz#;yB);M*@O z^2w%gJNNY%y{NQcWcbu+)2E7?iwpeIo;&RNazgijApOx0&V1VU+uy4TPtI^WJSief z=@8mvsopCzDy-T37GYuKGxv7w%Yt`3xvpq^_xyt5b}0)6%nby7WVl@dewuL%SgI`! z6&M#B6CA_dIM(Xe#pM;t<3+^>te-XHYE^q>i%W%cQ>w!d%hkx|i#d%&=7Vddm3B01 z@bjmsB}|@FD^$#cv&-L(OUq5^Ev{S%X)`&wb;MQH@8jmh<56nmKh&VAx1Ss2pPYLW zY<*lkP_^d0F=L2-9P9gEXvgF@2ra=IV=$y;kb|X$(|Bls>5YaHxy0l-Zm_8gLjx@e z?ght%+A;U|yiww+>(NPHF8hh4EMK0S^6{~Odj=2P-gWY_jwvGsU)(u*Z%>}hy@sEg z^8mKDvZ#&2hl(FAm3>x}wK!wfKjY(%wr(?XSn9;L`ae1Bu~)LPslW9{<*txpO?bwvmkJyET^&=kb3L26 zo}I&7AF*0&W8fQPuNSMN!8xoc?PoE`EF=73r?n&?+by4@qXT2-xHpNcjm9xr&fOBeVzQC_v1YI=hrUZ^FGV{ zp7!L{;OBWy@bAA1{Jtjq3GVmx;2u&dzxzGqUwD`Nd1ijX&v;)KKlghoU%tPseE0il zp7;Igz<0j~d@J|Bw;8o<*nZ@hbym_ojeDE{jJR5K4_BnbnzPK+7d_AI#&deFG;`;( z_4mBDS=zI!HMS%?x00s}%7<;qx<#hLJ>}Ol_j9jA&vTSd&*{DOarb-gQ+K>aI(kp( zypm)(jOU2yQ-gm;c11pi4M)Zzmb=h^2kx;)m(q1K@qoT)Jon1+JSRNxT;g%iUA{as z-hGC>>1zu5pfMZ#(+(lO6&7;yUY_ahKFj@ObYeOS&`M_kB0cW;)ta*bEq&N5_j7f) z=egZ@4m|qsPu=gWojvbumf`Fb`5bh~Gl#8M6fx=1PRMk)r~I(Nn9prVp64i^p3{5n zi2J?QwmaS<9lfV?Hmpe+_*>}=a`S9M%Lw+4d=9RvixB75eWow&wTm*{2on$dB0rwn zx_X`y9_D)u{@q6TCciLZ;2v@Ely49V+e$MA<6bR5e#BLi_s3CQgnXY5Ij&$y$l|>i zx`Us&f-Kdh=FHHZ+*%YZOBheAX{>^65|f}btP%NG*4l*o9XFxIMTyVExtnKiigV&K zY`9EA7@EzZjPwRJg)L=eY;xs0Dh*xN$8{9cD7ucq%9l4jmbd>uTlqq1K}KoeSVs$YucL*-EEtZi8IE+M z?r>L*7|Vtqc5}Ppm4ChcD&MYuyJXF(CG2B&wEzXM(_R0>`)2Um?SlSi!fxro1}Y@9 z9@xr*-AG7W;Gbc*7zd}B%>x^{<@7s78)KqYgR4Zc-@7&KhR-w5b^YCV=0T8_P(p2vp*5MIr4Sm9pY@V&}7;#H2!czf*#!Z^!xh_;pn6Dp=? z;kIJ7vgE4zYE|ad5ep&hJXJD`G*(cU2kcYu^E3#6|&s^F92v zSl#?3#76Vc27kS+98J$!uKoYZUxbP@!<||4#ln)SRhjCmVDP~Lx{(Y9f2)57f5~?N z{H?*OE`Mvtpk|WK^Z)KN`mVKn~d>-k_7 z!t47}2auhhemOwa?F2{am7`$!%vz4J=*sLE@Qs!gXm$_frK=@uB~_iPtEZb>EfEW4 zb;|BS{iXW4>@WV7kN=GPHkRAD7l_vBpYM}zLre9~_Q|$+Q5UMiBX?i9jYl<)>+q=N zaUCAH9~&L+k9bt4_I4 zX{+r}52MXnm;>?$E`EV=EINxPila(liEGz>bzatf*RB$!P#gtMYo`xK|7Uirq-$e5 zNz}tx`bE}DX4qdheFApm#V`kqVA_saiRNbQmw+gUe4X+W>}2=~hvABi_M~ZB3o~~g zAQ=uz7gOxPke|?vAW4J6;V7WyoY}Bhucn4Ua+DY2mOa6f#Gb*-N-ao=S2kj>sC3qn zS5y||cQ-mJH;vChX3pI0PA|u;n7}W|+@7WOo^a#IH+@a11bz%!mbM^t?5@xs&aeO<*VCX-~`PnH(1%5*!>J6PMgM zFT;^QcxL2*c#z|fb!I&WqkdDVj%l=Harnp~^9CD>D*i%`KxOQ>K{dh;QmxZt2zWM@ zs*cKHdoYd$VjM+1dt(#}b&q5$&1PrHL)1UmI4N=2m~Tti3S(TmA-0!%r#InWepkZA z-N4r>YJcuAPL>6SDEBDCQqg*hq2`9zQF2v};9n3DK#Z;AgGqGJV<0AW5Uvt0j6Z== zFGui7M|hfh1Yiiaz?9ZB3J?w$3B*q7+j2a(L8$UC^(N@r+kqBB<`Q0R-KIV)gR(;~ ztZmsCI3}6JzXMyuE36a1>tP-dDj$khB(qRVE&5On*2Ww$)HMv^^e~V?v1E{k ze^-Y%tXxs?26eS@f-eXmVsupW@i=W`)i;z(YCa8}PM$;s8J%;uYd4b1IwRc&c@v;? z80rUFK$@aa6-gC@6}Wag)kah`QW5#uNk-wCI`XqDf1ZwL;N@z441aQ<^v?6n^BwIy z+E*%j-WtZKa$ki}VB_=WUC{PSWzR<{dp>o>J3n9FdVavD9An{aUXE$7<|8;|pebOqc2(avooYj(8SMh%>1hQE48#x`&SX8XJ*I9Vd1r>419co0^2ld+$to<$4A!b0;&5fCod9X zXP@B?Asr1&zB=GECFK{H!KLV8Pc|k{K0ZFa0RYxm*=+Lss%vuRHXZCqpgM<{X?rEVO3f`DT>5DxJ5*>B=i7t5vl^$l)5@=FHBjT(nH z3M3MJg8Z9=H(t8bMAbk%Gs8gq$`uc54I141G-$XTcQ~3z&Nhb#FcdMM?Dj*rgDxIt z@Rx8mFd=5MmVBC<-TH?8OJ#Ei4?}gML3B3n_@$+d4UT*GFRAhH|H>6=AML3I+ENQK z?qFpyWgh9n!*D~x0?9o&+D0<+tuPyb$$d0f<6%cPP42O{*2q_DbT*%|<+3f1r1D9Q zkBj$d(71t*j}{Oen_y2$j<-k0_-j7$p*`B3gtUg5>Qld-pHEaXdqLA?QL+B2kB?uy zCV1kl`Nu{zYg%A$7KJCZ#9mNPypON1kFQ@+TtZ+_P)Kak7Jj((^|AX0d3a&9`oxBK zURv?b$2*`!Q{$PB)oSqMB<2X+VJNXA+@>D6t5ONrIZKqg+Y#HfeCI4y>_%J^p6tNV zJdK6T>>$p05P)26QSH*U!T%O=$(xiWrX++zCv*g>-g?ZorwjQfFEhV!qWy63^6HbS zml&p$M8MT|U)8abtHr4Rc4nOT33xK>kJP-e|E?ZxAROJ@LGyNsU^i;&x~iE91`2a% zpgLyN*e3u7)xnt)F>gtR;AEU|49?y!FX$aO?*s!|cL@ zrhH?-L%tDaz8VqkU7Axrw3rKb3 z6K`(}AWWNE~*>N%an0sVNDV;TS^pG~KTD2K6 zdg`pwQM+OU|$D=sF+-Z5v_sJeKhnD{|1e{5-M?TfmS`~DCOCsgyy za6Z;%R$izzmC)uC6$#HI26<;yKZ$tUMQGQJNrR%MMVbocJJ5b0TjT)FpoGp+gJ@(# zq$@Cvy;AjK&6ueMF-FQ-3G1hOv3wd^`7jz?#UcKis35C}B2Baw{-ZZJE=*|EL0Yjpghr7}dXjP8`h(vYl}Svu2gvH*5Crfo+j<=L_yg`Id>jF3AoLCUyss5N~ zwPgu4Ekb4}61E*^ATz4~#L+A>&LqR#6o?GqS{8MO=%p{99`CoQEh0G-s-wfQAP6zqLinBNp@ACf5$vzbdy5-^zNVkJu2HAui4 zW;jJ#Ds6CX3!LnKWG_?>LT9FQXsn} zdD{XqOrF)PBh$*~Ht|85potddKaCYt%V`k|!j~=?W?{62rIu>LG2 z93}Ux)~NYZr9c!A8P50K2i=%4saKdqPLp7-egA#KYHQ4C7XY9BCO(?SZfaC#s5Zb- zO-v;N>ZMDD85MQAwA!$wN_;TzNqoSM49H*1jj?mlJ)1SSAEy*lTS%IJ>wNz`G)jo} z->WSKpQ|$7f8Q{38t1yHd*Pma%5yK2U-ic)Pi8-|ri*xp{`CB%J;mFjjB$7rZ;M+tn14Tc^1uIG za<+HrC{rOAg=;xCQ=tF94E(x4$7+Ion$WWxZtXJ$<&z;mGBMZ|>RG8K;M9HpNpvj4^#*3fA}a?@GIra+TOHxI#4 zwpKk@^@f`w)lt=dGH+PoLA-?Utg*YmmSD;wvys~QPbDMeEPhoSC@ zg;i(NLz5`Khfc~5BBgjSnx_^&d2&^M)#0Y5>J1_U2$(cbMFGBPU!nZr4znG~X32k= zG6|3k{Q{UIOd=%C&=WMtLbM_GJdfn0Mn0i%O@bGt=HY@-%WSQ(Ve(|xw8_eY`balF z_-+#~LTd779=5pAL)mOM{3Qd>ca5?Gfu3D)PtZwPq5JTk?wVUY1aOl9)^)E3&?paZ zqC2|!9h`i57)!g*(QTM*l7%r2S8?nOC4aE4k@avHuNv$+v{6~$Iy9J9JwO&hT^kI` zAhWzw{f@K|6W`Kc;leqVG{mPdyLxM*Ouo#We8C2JPsY6mkR5EJ{A6R+!VLHh9J>+- zOK>X8NU7>APx56F+D3%7CX61?FJ|qR7!m%^;}j!5mPla{h6^ri!=bo(W1~#I%uLQ^ zZ}1TG0J0nK-L^3Dr=)gEGJqzB_+>@vm8$qv>Ht?$qr)p7R6Wa2maHl?r z)luJ~E{$KUe^tDCWmVO)$_GYAay3;4@a~k~XnK_24Zi{4V*|JRb4!TSaEJV}W;N@6 zg#OJaa!&zPn-6%BdEuFhnD@k6ci%_Z!D&WO4!6XKGeFtq&yXc|U+tct6qye&BAZtP zQwnhNp6boB-iR5K$KDnSreQ<@>GX#dYA*j_!y|2aeBUWPU`^@cUULwSIH4P3VG@Qg>ss#iL+^(^8H9H7l%aEJ~s|mm=vV`>;2(f0R?R)JZV_Loo{= znrSG71~ray8ETh!gy<7PgtMC3o#Lq*vm9wZl|m~4-OmmSilL{7N7-zunX0#-C^&(V z)LE!TnwcmOPNwWK%Od-*sm35W8k`mal_aUD&`7!z*`#fl%^}u^1xi~X*gi(bol~2c zYB>k}xIN9;nH1yh$&59t_Vfh`C#i_yewY`_h+fJ&A9;Hkd4p?Diel#1o(EO^$S)CK zRtBS@RG~+n#=AsK_jkqOlEo1fd z#mvQA;<{)-auQojwINn7cNu6gfmonN5rJy)9U0VF%tzd+x~cjWqXd;M2#;Lgk?+O> z9DqNwfkq%xk5MAzdQAShlr_u5&&zPH;snq#-%n>b6sXw#& zJf3|^G>QB03nE1WxcBU4Ba1gs9oO*5hstkGb60`@14kUJzc4-nkml!l;*1->8U6Gb zzWs~|W+XpEh3omn8#X8_cu&zU(03EeqA(01y0ixZRzCOzD(lH&QBwRQ z??6!A;f;7B@y;3j^0)JTLzxA|#Z}L;k%)ZJNdH=&p*ZKE{2IOl!j>w_53E}> zuf4z`-k-;Nx}LzcT*)Buf+%GXFQ9Do%lE6+qGXc*$Cf5aSA z0I|iPd{)D3u%`hWeW(F`i>vEXS5ZBzDl6tUi7UDNodbenIvW zP3}yP<3P=tv9)jI+9DQP+otkvQRO3WOWRS~u2QEAAcAJYpbZ%7!uM#iip0mY)`p9; zIoJ_C*0cIcyfynD+M%}@^$iT99%z>>oW9&OC{d4c)8lUHY&=fcBL4kCLPrW5-i4~L zw#=qj*qCKVnQgAmy6wUUP-WVZ-KJy`gz<*0n8NVF&g!w?q?pOI5 zmD1S9dh+CL57=lL16-pA#5Hfw$e&FMY!DGYNo=X#Fd{x~KwNx8Lt|WM&>%adP2)z5 zB3q?oH)!B&)Uf8ZVIvwdw)qD&Y7!Y2-XuWWh-lO#z~4WhNh7eW&ipjYoS#By5KBp} zi+R?3>ssp9a9lF9YLJDRF~6{3Nwelx-#+=PnF8V!A6#8C4Rp^00T|^MTTVgtcdZ$h zNnXe%1P$6)l1z27uSFxL{$|Z`Xq@96=P5n)$ zXvDsD@>Jrcxz36LaN3AiPwa8yLgmoR-OMcsrt-{54U7Y9B^5!1iiJ+GkTTOm94r22 zQBq$ruyb3aYv=?Y4gCWE+~(ERPB;9w?j&j|!Q*o#t zHvkV0#BeGRC#h2TSVpYP2P#nV!c9bNen3tUKP0-wbOu{>JxI&t6kfijcnyp8aOP9o zicjnE#$B|BKXrLTdcbRF3)zq;-UQL61xnGx_EfT7B8Qz+d$ASlW@TsWB|FJZie*cY zaz64b_T+KcDF`&OY5tX!`Bg`e<0NvfsH_zKT#8L-IU)!87r`;|7!u22Ct#EfBdn3v zwW(4K(bEYkKkF&Ow>EUMIN$(ZacvUhABR+hMI#2`EwDc%mGPHYu>Rpr{q(yl_>(IT z+v0WpjcWiT-x5|@+0y7=4`Khy4EQ}pSf=oz@c8FX zZrIYZWp4kG5A}N{abMJ}dC$yVCXSWg!v+?ow@>Oce&Fy+&rUOV{RVu!SEHWfS`xJr zhG2Ui6V0zt}Y=`<_&OaO{ohUFvFUn%vO^i$7Wj0)s=+!}AAQfH2`p^=CL& zktt9#SL?kaoDoG^wurY`@fM--@D|^8a&)A<{NFi){tk!nqLZV2s;(+~y!vfhzi#W+b=gW+ z*MO)7dB)vD;uEi~L`{#u-a`|G#y1#6>{Ok@IaP!I2E?Bw0`Y80?K5E6tU@i z7AxVUe37=misPh9(OTshm81vp1ENsrs$c(_Bj8&3M>+aVdr#+=!~`sS@F8MPDbqO%|7i zCIlD2Ck@`}J@^Z!(3DP!ZKvqk;B8es#qQ><*!kiMV&|XnR%#rw<5934>_Er5GVqr$ zaoDrrSE1Nwqb0zn@#sxG#T8cgf_|0v2X6^%4R3+RcS>CMK}&1#R(u8CGS^P_1$fJX z9O5_d*2GKcXz*6#?iA`>dCQ_H&>tc~BoKU%4z56jz0 z)IqsesLe*7vsogu{jL0x`kv*WmokxQ6Y02HY^%fhNiJ-+OAeN%nZUSm_1zn~&votP z-;P=r{|?=qS?ZLbyl1r2!DI>$>N)E>OPdY{Ub$;uHSZM3@`!eg|-;Pol z*jJ1_OD_Z4QQ0Awt#i$W)h=Hj2mrXqTfKa7_Ad2)oJD^=;4M0cJ~=zNzcK_XZv{Sc zm08LHb-p%ByT_+YDbsulyi0khGE19fz1MqQy+`?@cvxnw2k}7L)zRlMQH8IW`kkvY z->LUfu2+7{-_?6+FTbp(>guVDN(}$P;Ll~AqX2Fr}uK^EiIHa;J zYrImxnn7dMWyr4&H5D|#nrCbwCW2uJ#H2`hb{~#7Oxnkj^b2}Rjk9G=woEK`BCpev zm&O%;%h2PP23h4WtI3@)$1GO-`n+xY`r?90?SB zY)DMk-fvTEH{fC@b~w`u=Z-x~$QWqtgEY{bLSt1jgNBrdIa@Cv!VD~NP_wyOFu zHN%>K9Z^|W%%MF;*pdvI4}xa0WhFQe_A@Xc+>hB307kR(zl%YG*@1oRz+f>*e(l2p zzVz4izq0Eh5I^{jLvpVFx}M7K%6cd#l~+*y9Lo~@-xB69He7Kk`?0UWlCT2pB(wUG z*3h~bT2hPb20q?iHmg>TtB7C+=WZ(+i^Yq1)x%IB+seiBuLTB$Bl;MKWiU$H6PP;k z#9aN^9P#qvh6ssZu`V9-`*CG%QvNs{yR$&EEZ?>usHyJ`xp!;6WiDIpc|P9#96KlR z9NfNQ`AYpz`3m*c1{_Fn&~|^hTUrY>eV8C5>B^(OgoQ(}bcCfm))th?{r41=t}ISX zPj9ER?AtRvy=_#RE**Q$duVuJ;lM|Grf0Qm){O3ZXK$ESx{^)3!K}G`C(P>Boj(xS zI4gcoNm};!DF^q>86O$bKD8U}mfa8-Mis(Kdkc8Q;cR43hS)!M#e;MKT52Z@A#yy} z!|zQhbL1kR>>-?b%_W=$J>tfx=007d8$>u9?fCZ_=ia}nI2D&{)Lqask!{@9LkPPG zj18KoJvFwR(;nA)q61hGNL0jVk5?^qDi_bG_q!5N{|8|w=n4Ic-lJosGHcJu3CasU zyUv|G3-#z1>W2rbH<)P}W1fvZ0O=Qmeo`NOi~2@=^asn^$FX)7WU)b%P|n? zk-)n!^GR|WI+58f!_CpKiylPYE%q32)DfnRvG?jcRJ`>C8}qa1Gkd_OmTZ`KLtUe} zT5!L}sQiettC!C$6p{Q3-b^1bcm30c&ZapWX-ax%$b8y2#w|ZoS87+ZcQ9X!u%uB} zZen(2;O%YVP1t!$JP9k~s-bz6+=hH+377DMP%X@cSX^3Y0z!$W2YWL#G-Zx{FXxXm zj94AfkX;n3x>;>K5G*C3N#ydVML3kIQCro<+Oh$s*wC2BJ~8n>{`=(N)80?6|Hr?7 zY8ulgnqS57NH^|XvYqPYkm$wptu4{IV7G=J)S;a_tu24U%ntQ3LG)6#;$1z9<2Ym& znjjcWQj5P0X5-h3q!o=rHq->|glCc>Z}Wd~mJebP=gmg{l;YiAJ4m>1?77t~$EQW;&v z8;`L4l1+M5d@MdvcU2WC2V8@|mbz)Bs5TkzACmsH=eyMo#H4cEyl~;B{>E+jL73-k5DK-c zy;pl7Bi2w%Jd!Y5g0@fHMb0n{bkN(S6B5N&kfL0oMvAy}i=r6)((z28uox6B4OkD% z>(#f1!$7=#QO=ARL+1L|dFVf?=Zu*H=da34?A9Y8@kCf=Vs7sQ(ABkbcLz}>-fPhN zzQ@XE4h|M4Jr7x%20dqPEuT9iSl=4ZI(Oof9`QkN-Wi-~Ftp%i+AXuq9ec7I)J@5+MuVrkt}CQnwf`x}U*Ck>V; ze)t88YP05Z=J2rO?tF?DuX<9j14fGFdSA&-FAFAOm z*2$k#kpCZ663I5yQy;aJ)!&ke8!0WocJl1B;W)N%qaW6%BghN^B6&$smmD~0g<_s6 zv4I`Cc?As5T3DESGX168k$I_!iC#N%^UBa!@up>V>md`S51AflJX3F>D;{o;HNQM^ zRPKorxuYWI_D!wlnz-kodmcqERaOMF8Zu|=^dW(4G(9q8i5h`+CGoh^= z$GbS}6t)L4jv5P)hQz2X?`njK6o>42qZ6>QEn%7cy&uY*Mkv-F-e-Dl?$eDjNT%%A zVj^yK9^(n?C0qH#NxAV~Ki(0|e0=bVTt14#N?6~S_aS$etO7_DlZ+amSzvi<=3Tr+?IvR_nrDPGB74Avb?EoSKke=`}L~cE*_*`egnTYzh0~d z1F3b>upaI->`_Wnz1>Xnq~%REPkm38bDFJ{?@o&cZ_m$fAfJR~{JLQgY?)ThBh@Jq zj}R6gVD;TB$DqrW9oiLj3OG+%1oSE#r-=`((P~~7F0cz1s@_(HVL5J_P|k^sa4V>` zyl>>ec!x41R9y^}zXBx#3pEM%ph9iM;*p+UdH1<0tJ+7?;zv4<{cUJL54Qo7I17;jjba=x%*IjqZl*S5gl5>(&wW zI%{U1L3F8cT=uS8elVhWNy`ciMq%MHrnc-2R_eQ#C+;6oxYZw1y7e>09-chzz%aVA z`8-B-iHW}j3==}sVJq@oM z6p10g{K5-AKqK_b@7A=^M*Oy7yJ^=Mt+Z7VIq!~ zVGTZ>v5!c;y$!`S84kV?(DULbI3t;#Xq0VgPbHiUCc){MCm-q8wS%g1Yet_zbP1MN zGkQ%rG6ognWvyRM6*Hw`+>FP3RcpW#g+s^)O?Yktp3}(VoaCpwX36>m-r#U9s&>WB zzb@)(RP3ll2e$4T-)+eLiKyiFA*^mP7){d&iOOwh>YC^W#8WUTwPr@1lSU2H$2_x3sU`25v z>W={Vhf#Aiz$iB>@=P!TD*({yo!MJVm3Diw=Zpi-E?^&8Q@}Cfn;D#P`+CB7U&GBP z%n~)_TvS5t$b-J%T2B62zQc9>g_YC9SM2d)>k8amCiS|$Se+@Z)=L@|3;1Ejouc>& z=l`|qBXJ00JzWozEWT_x2KX;aI%EG6rJ;Yo*4oq(W7U^$qu7>36rc0Z+`xp{>Q5oU zP0#HI3XeCyw%PAisRndcpKsX4cM#>S;hLGjh}GWvZJfaS#@?BC!^PDHxU8BRj_;jw zscoU{R^NhMEk~XdfQm)Gs8tCPG*(j#bZRxYC};=jI3MrcV|vX-W!PJe3240y2#>9=BLz1vZCdWsj(~}auhgZ`x_8=rQbY!e-M&sR7^r;zglhmCi-ee zOICJNtEl!ZEJ?A!ETFM(WQ+1P?aO1;^2Wa9!5NX3B>#+niy5yWTA4JaUU6N#c8ZLb z?oYDOeE&$`1{;L_FXEWG?d_u4N3%&$&1L7hLsYX5sA(9FWlL1KLK0lo0nY3FP^~uh zoYzPUTaENUJX@(7xJ8SnW2B&8gsXw=TN<(?yHBt61;*vF#la8nUfI5-(J!+5=00Y0 zkymyGJ-k~P>(_fQ5DIy*os=~ly~UPnR_G^%5FQ$JVq+7sYx>F?=qqXRoVvS6AVVq` zEUhb>{u_Bg{G9!09f{>1b~@D~Nc!B_t=PZseCGO*IvVxuMd0T<5?@$S|5%FsF}{EN z=8t=#(JF4Eg2dq;lE*IHNyOadCHe{1;A^hjSg43(>mBips=(xnx>7RAiRH!^)FUJr3JsSmHB@$@?BvKpD#rQ3*o z8ObA3Qd3h#q_*ETvTN6tkxD-`vSrt>JUoOCl}w(D;loQ{ocSc-b^bu2 zofeYl&p2{AB^^p1lw)_$O`JC?SDA?A{K4Gf;&sL2b30D8w`j5No_lvct?b%&!>M*1 z*S*`AF{{VT#)3g{hq+H~U$EdQDQBqOwcaMI8c5OMp-s_p(`psHlvzIeR8)(vugW5o z?>AR$<{M?(hrFV4tfjJ?`ZXAn&mm4>@!-eenRkZn_ficoOp1#vkVz5 zn#I*BWACw(JA{5j7NJGaK`D9>$r6df+1qIej%mzdY{7P0u&0Ph)^b!KYw>g8&Ho!^ z@TVVZBECF?|A!cs^4)cCQI_R{m4O=0C~(ze#=4&5_|mE>6GY)h`mvm zuNnBjV2|s@@KbRhE?-`)lCZ>Mji4DF?7ndKpmT$j&=_ehH8dEsBa(zR3P*1ZwPW*w zdAzcGYz+ycrV#6)O5L3m-+21;E?HSwU4Ib&>X*|rH!i-Hea!5sBl?f-lF`PIdpaj4 zG&`~9$dNr0v){~^oS8Y>(w-L9tMJ>AIqzb0uKm+gE7pbB0r3YocBW6_A;E@H6 z_TBOe938sm7ZgMe>CkbYfmUW_hmx7%IhLE(cT|5ICzYGur!ZffVwyr_<9{z*ne!ZE>`l=P+I4(0PQar6Bh>EH$(SkGA8-j~m@2DXB@LoOF9Za_cc| zN6w5-N(>KC6-6SWu+lUAQaZOxY}~p*k|Qprut}4#c}=^uY#H9z&nFUIjx>jYj;nqI zKb}t6vDh-N@PDb6a;xvZ>id)jSp&R6g6bnQ2lOW|?7hcA!xbog#yVui`4m^iwE&TE zjWjH5AtYB?<@v}JjDEC!8cCesJFSxEQd3=EQ zh%K2Z0(c)~m-E{}8=ya*bAC5y6TXf5lxyVPCf@#*=Gh^Hxo>?hpMd&4IK_e(h*)D+ z!ZYySga2(55G8e}AWD=CM2V|6eFGMa*A~>*KCGSiSO#Uc;^o*I%gQZGr626owQ8t6 zEk{$y#YlO_`n0Xwn|X0dyiJX(hcI^6a7HHljjr9ihBah_*|VuX*aE!FkNU&#SOh<3 z@FM^++J~-e<&>eHNL+qHMEf5r*eoZT>Ee>Nb@3UJ-P&4?Bc@fH=m2~y6x0tJQ!$xm zIaW>K7EOJJ0U`Gp$H{Xq$D0Mv(DhmZ->M>r&wFT zg7nu(Nm48yR1d+rBmDZn8%V!Y&`?9o2b5LgbxCq+p?A=9M>!}aEwBa$YzCGpn{tZf zR0;&5nOYYSZuvm`UE&c8P1vGQi>uq}>=G-+?KlSDgE9JPerDyW=GgBZJDO+e>8n;L zAG@)1I_Elf&uxS6J@d5gHK?K~pe_7IIB-D)=l&RwxFY#^sxBB0IRs;arIqcx`U%>b z+=D{JVgCsI*v`97D;=uNs_8D_zET6lEHUSw+-nE-d8_8~_Hv9GWr~5`1~t73(f!*Q zKWgAx`mG)MZ~tVEu(h5`N$(-?vtqRd!RH!7FZ4Y!Jd+U#YN+(`lLjVulS4nnxrlZs zggDBH-`hNHc-vmR+76FvE>6{4?+gp<+&M5zep`cjbbo65=bwD~#r9o2@Nd`lFFyU` z^X*S{?@^i3vE%3Lt;~oL=v^Uw&9`Y&xoooi&+5668)<2fQ@QCs$yo-qxCme9Q0x1 z2Hb2ureb!&bADSY4%QPp2FU)7IV$!R`(tg~!mtdE328zaCZ9GejobW~vW<7r?|J;8 z^&(Jd{LG5!h;w_-88}pBuusk%{Z5?7X6Z-vvS>Cl`|C+ZSNGU9i^{CtNxG_8WDHC0u`nFGrc|y6Y>HiGaDw&tQq^H6;OMvM$-;?2)~gRjjL1W^3R% z1f|ok0=&@VfhaKrh@$uea{jZ~mB++N97h0GK{(vtM#-# zyOq3YgY`L1)@7ITBbJ@{`jA7@#5-#$wu>K}?_dNa{Ae zzB~dYVXZ}7?}J?gYmy0nYPx`Pg6tkwq@@z^WMHX;6@aXm8*m3J=8%08-97upT`isn z8t4(RW*@IUB;hxf=O!5Nv20Oepo2;cS4CI`jn1T*(0ywI_m!}#CYaK*enr3T8LDdS z)Mt?AO6gRq+e^BeLx$zU1E?+Nt_AM4O7+;$P5TvQgRL2y9sC%d8tG?{Z*MtOKdpGp z-_wmHh)3tLFZIu++T0wOLLF z!!kU?%{{;OGn8vHLQJXg!PJ&(a zVi)xJg~{o6V%MYNq}@Z>r4Jc5si5z`3lk1aN&E7X zxFS2SVs>CS;XtYdgI{O^S}^)}Uz}odWsH8Dzf!QbD|7-$wFmy*nO=dF)uW z@ZwR^v7NQW;n9QG(5Ibe*@~v(;><&f#g~s%Jh5bt^Nd*7lqJonxSusxcW5j7cpPm) zu8oUExF8AubF^lj4lbpiTN=VgFD-$edUgxzwfC{z`U3v3UR|%N|w7iX~$U#r@a0<-Wc5 z@!RtTr&+X6m8Dq{;x98~a6Kw!vd6f${(tJ&>w>Zf%XPN2aI7J7ngixgtmFq^<%A$Y zjjj!QqHD7<#mX{PdWoG}_w0lG6YOu*sxX`rvu6m*Jd%1l`6|zi)kYUyMn@>eDK+IB1ao~NtE5U_W`lu5^Fqalv&;Y ziDQJN*?*LawQ;|T1=qdUHt}|P{(jfRH#Pq5^!?ZPpcdS9@u!P_RpaY&o85811%8;e}_!uEN`-&@V%fBix% z{eCH%y7|e)^Vy-n&G%;Q;p2OYdGj}3KRjPtEdAj+i`^@{dn-QeBg3Hv$+{I^p)N{I zcwrz;V|JM9Am4&<*iaD0cSZ`5a{2}YaHe=sd~U)MSAPA1-T(bkv60{@10+0sYj3tj z!efbmCqCZGe(mkL<%Y*B=PgfZ->Rc&H(^3dtcBDr(zPkpI%I8(_O0ucv*OySRcDlJ z*QpgJ3&*TbvY%pMXHGx7def;Ds|v@UE7dB)0he{TDrh*bL#MOEoma9~j43?1!gWf? zKC^0-xOVobO=AjItvI!5^~0yni0>rb=c_wv-)jGYJ&V@N$lL(<9qCwJxzPY9DRIFj ze#)*&iAnNrbDVS73{iX*29Ig8oU>3EVfuzdOlityiM5;bS)0TbHpxKQ;PLtDRKR-O zgoOcx{4-jzdJIS27&~5qQ?cAE{Z5sjTCl`pto*G01m8fgSQucj_7axs1F@FP+Qipx zV%WDRz9aS+uujT39-TbUz+xe5EThPbx3l?Y^=ehPde!yv8>?2YHh8`A_hHH6 zF?E3C(WXtCen>mEX_MD7NzQf0u}xBz1#7oFuxas(Dxp=unq!hjg zvPS0&d0h8a(u$T3nl+4Q`!$Py>iS|Fuy~tI?<5AZtLznOXk)sBcyGGyI2Sz(?QQjH z6OT=@-JPtS0{!_ad>f)^ueise07djJ^~7Hjt$5Dtk|gYF+B3TZn}qIGV+9$THWjeR zb*oMC`Hx`Tt^RIBFTCmZ37-vkJd<6T?XOOia5eaYJ`I0^2(+a;;39?z!bl)~ zCd`esA@c@K=XeCa9eSrjCj0Df#ec(p>Q7|jBAdx-vS?;&Sk1P11;Bg+Lk#W|4R>Tu z@>r8#W2oAv4#QHwYNzWBicNjD{25oSP=1@H(0&lgkDUl|>zwu>vJOKLtE=Wa6^GkS z0^7ugT0O%fhU|T0?x8;qIBB1#M{QwznL#}1U@sze{OKPDV+b}@Z4Yx-c zb$m3f1sRj^`Yc*1*>WkNt}j)WZ4y z1^=Np+w73Wa42;ARsQoIbXSSXwMc&dA5`k(6HYd)()U&|)` zwMt;iWj3YkuU5oe+Ydxi(ErdM_>GGf-~DTND@^d!{{zmdr~i6Gk4T~Os{Uv#u9FN2 z{TI8oQjkAm#?Bct^RgGTY}M+8cH=Kn)_G=r-t_6)XDw;dDrrv61J56MX!-H; zf0fjlz8z?3DbEP^?A1zQ#_lctKh%_ZL!4k;+KP83h z!EgRm{A=onWEte||I+Vi)cmV5tQ`^g*JW2YM&KHpiRYN>U<3}t{;e4Ny0;t#vi>-O za+ubs@)g9j@r+h0t8SiE0DsO7io zrkUiH80#quB5AohtFeErm-Ym>)DY(^Vd=|DwQ_8=g^mR!DFCX{m1L=8fNcj$wI-Ec zYES6%OZ8dMSD*>vY*@T}EVx!Mz@m0xL% zONmEy(ixF*VnPq{hs*fGrCQ_4uPBjBqugh}t3iqP(<|I4)k=dp!j4zD+f{lpv??v7 zltyY1U;1S&xJ1KU(o13`!JhQk%jcn)au@&t2@($~RbFuQ5Zg*iO>|Hy_R^c_Y2UNI zffH%T)CwsVBfNT)@*%p@$XPj|CO7o@TKV0%Z=;G8l}f+_Tzi7Do7jS1)dx{O-xFNP zFL}NU7I+y|CAYJIbHzXT6n&&{&SjY*gaGp^Y5MR|Ju0354OL9=%`)ipUqk|s#(5wQ z8wKs$1tAJ1x$3^T-|>d}GgJ5p-AjnMSH&cdRkCM_{;KwUn(zX*^$Y3jR}oLxiEUqg ziTbQ5TlR`t$jNdUzO|*mkgXNz28LiQ+wQ6cgTJqZC86#53CzYn@Vgei@GUmlKwZ44 zWQyg)*P*S#sk6Cp%fXexMLOjjmfsowPCao;th--XKj2EZsBEc4lm35I|*=#Fs z^&hc-5s_>Zk(j4_jVtU7WPyly$Fw%CU8)x?xUy(WZnx{@Ja8|^Ccito3cc zLf0t+l=^r&#s>bwhd-aNYNsVXxof;&$etg&Cj_w&S0eA`-#GKFM-d@Xd>@q1{m0!y3V2ujrOsK8 zzLkmMYRZ(>0JwB$X<)8;-Sr;MtWQ)fVh6hGJtw}amQp)n)sRUfZQv#tI;6GVV{DQE(EZ_>A63Jp!^1up!SxxTVjaPC%6z88|CzxO-o)Q1jBEE1{ zwO2o7ITSfnoUDpgU$6X1;%>POMxdqy-4%wG5}$@4$AE!-zA9j_w$F$zf{QNCur^

u(RxJiCB&6K5Tvo2EFtW7W|9)#x0TIln>-< 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

|bX@bT<K5aclEv7#^` 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 b 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¥Eaoenoyw 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 + + + + Blender icons v. 2.5.08 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Blender icons v. 2.5.08 + 21.05.2012 + + + Andrzej Ambroż + + + + + Andrzej Ambroż + + + + + Andrzej Ambroż + + + + + This content is under CC Attribution-NonCommercial ShareAlike licence 3.0 as long as it's used for Blender 3D GUI. Any other uses are not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dpf/dgl/src/oui-blendish/resources/blender_icons16.png b/dpf/dgl/src/oui-blendish/resources/blender_icons16.png new file mode 100644 index 0000000000000000000000000000000000000000..8d00905ed5128b130e521bee915f857cb5a23374 GIT binary patch literal 250706 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
+   | Event 1 (size 6)                              | Event 2
+   |       |       |       |       |       |       |       |       |
+   | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+   |FRAMES |SUBFRMS|TYPE   |SIZE   |DATADATADATAPAD|FRAMES |SUBFRMS|...
+   
+*/ +typedef struct { + uint32_t unit; /**< URID of unit of event time stamps. */ + uint32_t pad; /**< Currently unused. */ + /* Contents (a series of events) follow here. */ +} LV2_Atom_Sequence_Body; + +/** An atom:Sequence. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + LV2_Atom_Sequence_Body body; /**< Body. */ +} LV2_Atom_Sequence; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_ATOM_H */ diff --git a/dpf/distrho/src/lv2/buf-size.h b/dpf/distrho/src/lv2/buf-size.h new file mode 100644 index 0000000..20cd8fd --- /dev/null +++ b/dpf/distrho/src/lv2/buf-size.h @@ -0,0 +1,30 @@ +/* + Copyright 2007-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef LV2_BUF_SIZE_H +#define LV2_BUF_SIZE_H + +#define LV2_BUF_SIZE_URI "http://lv2plug.in/ns/ext/buf-size" +#define LV2_BUF_SIZE_PREFIX LV2_BUF_SIZE_URI "#" + +#define LV2_BUF_SIZE__boundedBlockLength LV2_BUF_SIZE_PREFIX "boundedBlockLength" +#define LV2_BUF_SIZE__fixedBlockLength LV2_BUF_SIZE_PREFIX "fixedBlockLength" +#define LV2_BUF_SIZE__maxBlockLength LV2_BUF_SIZE_PREFIX "maxBlockLength" +#define LV2_BUF_SIZE__minBlockLength LV2_BUF_SIZE_PREFIX "minBlockLength" +#define LV2_BUF_SIZE__powerOf2BlockLength LV2_BUF_SIZE_PREFIX "powerOf2BlockLength" +#define LV2_BUF_SIZE__sequenceSize LV2_BUF_SIZE_PREFIX "sequenceSize" + +#endif /* LV2_BUF_SIZE_H */ diff --git a/dpf/distrho/src/lv2/data-access.h b/dpf/distrho/src/lv2/data-access.h new file mode 100644 index 0000000..68aaf62 --- /dev/null +++ b/dpf/distrho/src/lv2/data-access.h @@ -0,0 +1,63 @@ +/* + LV2 Data Access Extension + Copyright 2008-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file data-access.h + C header for the LV2 Extension Data extension + . + + This extension defines a method for (e.g.) plugin UIs to have (possibly + marshalled) access to the extension_data function on a plugin instance. +*/ + +#ifndef LV2_DATA_ACCESS_H +#define LV2_DATA_ACCESS_H + +#define LV2_DATA_ACCESS_URI "http://lv2plug.in/ns/ext/data-access" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + The data field of the LV2_Feature for this extension. + + To support this feature the host must pass an LV2_Feature struct to the + instantiate method with URI "http://lv2plug.in/ns/ext/data-access" + and data pointed to an instance of this struct. +*/ +typedef struct { + /** + A pointer to a method the UI can call to get data (of a type specified + by some other extension) from the plugin. + + This call never is never guaranteed to return anything, UIs should + degrade gracefully if direct access to the plugin data is not possible + (in which case this function will return NULL). + + This is for access to large data that can only possibly work if the UI + and plugin are running in the same process. For all other things, use + the normal LV2 UI communication system. + */ + const void* (*data_access)(const char* uri); +} LV2_Extension_Data_Feature; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_DATA_ACCESS_H */ diff --git a/dpf/distrho/src/lv2/dynmanifest.h b/dpf/distrho/src/lv2/dynmanifest.h new file mode 100644 index 0000000..fad33c8 --- /dev/null +++ b/dpf/distrho/src/lv2/dynmanifest.h @@ -0,0 +1,144 @@ +/* + Dynamic manifest specification for LV2 + Copyright 2008-2011 Stefano D'Angelo + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file dynmanifest.h + C header for the LV2 Dynamic Manifest extension + . + Revision: 1.2 +*/ + +#ifndef LV2_DYN_MANIFEST_H_INCLUDED +#define LV2_DYN_MANIFEST_H_INCLUDED + +#include + +#include "lv2.h" + +#define LV2_DYN_MANIFEST_URI "http://lv2plug.in/ns/ext/dynmanifest" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + Dynamic manifest generator handle. + + This handle indicates a particular status of a dynamic manifest generator. + The host MUST NOT attempt to interpret it and, unlikely LV2_Handle, it is + NOT even valid to compare this to NULL. The dynamic manifest generator MAY + use it to reference internal data. +*/ +typedef void * LV2_Dyn_Manifest_Handle; + +/** + Generate the dynamic manifest. + + @param handle Pointer to an uninitialized dynamic manifest generator handle. + + @param features NULL terminated array of LV2_Feature structs which represent + the features the host supports. The dynamic manifest generator may refuse to + (re)generate the dynamic manifest if required features are not found here + (however hosts SHOULD NOT use this as a discovery mechanism, instead of + reading the static manifest file). This array must always exist; if a host + has no features, it MUST pass a single element array containing NULL. + + @return 0 on success, otherwise a non-zero error code. The host SHOULD + evaluate the result of the operation by examining the returned value and + MUST NOT try to interpret the value of handle. +*/ +int lv2_dyn_manifest_open(LV2_Dyn_Manifest_Handle * handle, + const LV2_Feature *const * features); + +/** + Fetch a "list" of subject URIs described in the dynamic manifest. + + The dynamic manifest generator has to fill the resource only with the needed + triples to make the host aware of the "objects" it wants to expose. For + example, if the plugin library exposes a regular LV2 plugin, it should + output only a triple like the following: + + a lv2:Plugin . + + The objects that are elegible for exposure are those that would need to be + represented by a subject node in a static manifest. + + @param handle Dynamic manifest generator handle. + + @param fp FILE * identifying the resource the host has to set up for the + dynamic manifest generator. The host MUST pass a writable, empty resource to + this function, and the dynamic manifest generator MUST ONLY perform write + operations on it at the end of the stream (e.g., using only fprintf(), + fwrite() and similar). + + @return 0 on success, otherwise a non-zero error code. +*/ +int lv2_dyn_manifest_get_subjects(LV2_Dyn_Manifest_Handle handle, + FILE * fp); + +/** + Function that fetches data related to a specific URI. + + The dynamic manifest generator has to fill the resource with data related to + object represented by the given URI. For example, if the library exposes a + regular LV2 plugin whose URI, as retrieved by the host using + lv2_dyn_manifest_get_subjects() is http://www.example.com/plugin/uri, it + should output something like: + +
+   
+       a lv2:Plugin ;
+       doap:name "My Plugin" ;
+       lv2:binary  ;
+       etc:etc "..." .
+   
+ + @param handle Dynamic manifest generator handle. + + @param fp FILE * identifying the resource the host has to set up for the + dynamic manifest generator. The host MUST pass a writable resource to this + function, and the dynamic manifest generator MUST ONLY perform write + operations on it at the current position of the stream (e.g. using only + fprintf(), fwrite() and similar). + + @param uri URI to get data about (in the "plain" form, i.e., absolute URI + without Turtle prefixes). + + @return 0 on success, otherwise a non-zero error code. +*/ +int lv2_dyn_manifest_get_data(LV2_Dyn_Manifest_Handle handle, + FILE * fp, + const char * uri); + +/** + Function that ends the operations on the dynamic manifest generator. + + This function SHOULD be used by the dynamic manifest generator to perform + cleanup operations, etc. + + Once this function is called, referring to handle will cause undefined + behavior. + + @param handle Dynamic manifest generator handle. +*/ +void lv2_dyn_manifest_close(LV2_Dyn_Manifest_Handle handle); + +#ifdef __cplusplus +} +#endif + +#endif /* LV2_DYN_MANIFEST_H_INCLUDED */ diff --git a/dpf/distrho/src/lv2/event-helpers.h b/dpf/distrho/src/lv2/event-helpers.h new file mode 100644 index 0000000..5caaab5 --- /dev/null +++ b/dpf/distrho/src/lv2/event-helpers.h @@ -0,0 +1,266 @@ +/* + Copyright 2008-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file event-helpers.h Helper functions for the LV2 Event extension + . +*/ + +#ifndef LV2_EVENT_HELPERS_H +#define LV2_EVENT_HELPERS_H + +#include +#include +#include + +#include "event.h" + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +/** @file + * Helper functions for the LV2 Event extension + * . + * + * These functions are provided for convenience only, use of them is not + * required for supporting lv2ev (i.e. the events extension is defined by the + * raw buffer format described in lv2_event.h and NOT by this API). + * + * Note that these functions are all static inline which basically means: + * do not take the address of these functions. */ + + +/** Pad a size to 64 bits (for event sizes) */ +static inline uint16_t +lv2_event_pad_size(uint16_t size) +{ + return (uint16_t)(size + 7U) & (uint16_t)(~7U); +} + + +/** Initialize (empty, reset..) an existing event buffer. + * The contents of buf are ignored entirely and overwritten, except capacity + * which is unmodified. */ +static inline void +lv2_event_buffer_reset(LV2_Event_Buffer* buf, + uint16_t stamp_type, + uint8_t* data) +{ + buf->data = data; + buf->header_size = sizeof(LV2_Event_Buffer); + buf->stamp_type = stamp_type; + buf->event_count = 0; + buf->size = 0; +} + + +/** Allocate a new, empty event buffer. */ +static inline LV2_Event_Buffer* +lv2_event_buffer_new(uint32_t capacity, uint16_t stamp_type) +{ + const size_t size = sizeof(LV2_Event_Buffer) + capacity; + LV2_Event_Buffer* buf = (LV2_Event_Buffer*)malloc(size); + if (buf != NULL) { + buf->capacity = capacity; + lv2_event_buffer_reset(buf, stamp_type, (uint8_t *)(buf + 1)); + return buf; + } else { + return NULL; + } +} + + +/** An iterator over an LV2_Event_Buffer. + * + * Multiple simultaneous read iterators over a single buffer is fine, + * but changing the buffer invalidates all iterators (e.g. RW Lock). */ +typedef struct { + LV2_Event_Buffer* buf; + uint32_t offset; +} LV2_Event_Iterator; + + +/** Reset an iterator to point to the start of @a buf. + * @return True if @a iter is valid, otherwise false (buffer is empty) */ +static inline bool +lv2_event_begin(LV2_Event_Iterator* iter, + LV2_Event_Buffer* buf) +{ + iter->buf = buf; + iter->offset = 0; + return (buf->size > 0); +} + + +/** Check if @a iter is valid. + * @return True if @a iter is valid, otherwise false (past end of buffer) */ +static inline bool +lv2_event_is_valid(LV2_Event_Iterator* iter) +{ + return (iter->buf && (iter->offset < iter->buf->size)); +} + + +/** Advance @a iter forward one event. + * @a iter must be valid. + * @return True if @a iter is valid, otherwise false (reached end of buffer) */ +static inline bool +lv2_event_increment(LV2_Event_Iterator* iter) +{ + if (!lv2_event_is_valid(iter)) { + return false; + } + + LV2_Event* const ev = (LV2_Event*)( + (uint8_t*)iter->buf->data + iter->offset); + + iter->offset += lv2_event_pad_size( + (uint16_t)((uint16_t)sizeof(LV2_Event) + ev->size)); + + return true; +} + + +/** Dereference an event iterator (get the event currently pointed at). + * @a iter must be valid. + * @a data if non-NULL, will be set to point to the contents of the event + * returned. + * @return A Pointer to the event @a iter is currently pointing at, or NULL + * if the end of the buffer is reached (in which case @a data is + * also set to NULL). */ +static inline LV2_Event* +lv2_event_get(LV2_Event_Iterator* iter, + uint8_t** data) +{ + if (!lv2_event_is_valid(iter)) { + return NULL; + } + + LV2_Event* const ev = (LV2_Event*)( + (uint8_t*)iter->buf->data + iter->offset); + + if (data) + *data = (uint8_t*)ev + sizeof(LV2_Event); + + return ev; +} + + +/** Write an event at @a iter. + * The event (if any) pointed to by @a iter will be overwritten, and @a iter + * incremented to point to the following event (i.e. several calls to this + * function can be done in sequence without twiddling iter in-between). + * @return True if event was written, otherwise false (buffer is full). */ +static inline bool +lv2_event_write(LV2_Event_Iterator* iter, + uint32_t frames, + uint32_t subframes, + uint16_t type, + uint16_t size, + const uint8_t* data) +{ + if (!iter->buf) + return false; + + if (iter->buf->capacity - iter->buf->size < sizeof(LV2_Event) + size) + return false; + + LV2_Event* const ev = (LV2_Event*)( + (uint8_t*)iter->buf->data + iter->offset); + + ev->frames = frames; + ev->subframes = subframes; + ev->type = type; + ev->size = size; + memcpy((uint8_t*)ev + sizeof(LV2_Event), data, size); + ++iter->buf->event_count; + + size = lv2_event_pad_size((uint16_t)(sizeof(LV2_Event) + size)); + iter->buf->size += size; + iter->offset += size; + + return true; +} + + +/** Reserve space for an event in the buffer and return a pointer to + the memory where the caller can write the event data, or NULL if there + is not enough room in the buffer. */ +static inline uint8_t* +lv2_event_reserve(LV2_Event_Iterator* iter, + uint32_t frames, + uint32_t subframes, + uint16_t type, + uint16_t size) +{ + const uint16_t total_size = (uint16_t)(sizeof(LV2_Event) + size); + if (iter->buf->capacity - iter->buf->size < total_size) + return NULL; + + LV2_Event* const ev = (LV2_Event*)( + (uint8_t*)iter->buf->data + iter->offset); + + ev->frames = frames; + ev->subframes = subframes; + ev->type = type; + ev->size = size; + ++iter->buf->event_count; + + const uint16_t padded_size = lv2_event_pad_size(total_size); + iter->buf->size += padded_size; + iter->offset += padded_size; + + return (uint8_t*)ev + sizeof(LV2_Event); +} + + +/** Write an event at @a iter. + * The event (if any) pointed to by @a iter will be overwritten, and @a iter + * incremented to point to the following event (i.e. several calls to this + * function can be done in sequence without twiddling iter in-between). + * @return True if event was written, otherwise false (buffer is full). */ +static inline bool +lv2_event_write_event(LV2_Event_Iterator* iter, + const LV2_Event* ev, + const uint8_t* data) +{ + const uint16_t total_size = (uint16_t)(sizeof(LV2_Event) + ev->size); + if (iter->buf->capacity - iter->buf->size < total_size) + return false; + + LV2_Event* const write_ev = (LV2_Event*)( + (uint8_t*)iter->buf->data + iter->offset); + + *write_ev = *ev; + memcpy((uint8_t*)write_ev + sizeof(LV2_Event), data, ev->size); + ++iter->buf->event_count; + + const uint16_t padded_size = lv2_event_pad_size(total_size); + iter->buf->size += padded_size; + iter->offset += padded_size; + + return true; +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_EVENT_HELPERS_H */ + diff --git a/dpf/distrho/src/lv2/event.h b/dpf/distrho/src/lv2/event.h new file mode 100644 index 0000000..e33d862 --- /dev/null +++ b/dpf/distrho/src/lv2/event.h @@ -0,0 +1,294 @@ +/* + Copyright 2008-2011 David Robillard + Copyright 2006-2007 Lars Luthman + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file event.h + C API for the LV2 Event extension . + + This extension is a generic transport mechanism for time stamped events + of any type (e.g. MIDI, OSC, ramps, etc). Each port can transport mixed + events of any type; the type of events and timestamps are defined by a URI + which is mapped to an integer by the host for performance reasons. + + This extension requires the host to support the LV2 URI Map extension. + Any host which supports this extension MUST guarantee that any call to + the LV2 URI Map uri_to_id function with the URI of this extension as the + 'map' argument returns a value within the range of uint16_t. +*/ + +#ifndef LV2_EVENT_H +#define LV2_EVENT_H + +#define LV2_EVENT_URI "http://lv2plug.in/ns/ext/event" +#define LV2_EVENT_PREFIX LV2_EVENT_URI "#" + +#define LV2_EVENT__Event LV2_EVENT_PREFIX "Event" +#define LV2_EVENT__EventPort LV2_EVENT_PREFIX "EventPort" +#define LV2_EVENT__FrameStamp LV2_EVENT_PREFIX "FrameStamp" +#define LV2_EVENT__TimeStamp LV2_EVENT_PREFIX "TimeStamp" +#define LV2_EVENT__generatesTimeStamp LV2_EVENT_PREFIX "generatesTimeStamp" +#define LV2_EVENT__generic LV2_EVENT_PREFIX "generic" +#define LV2_EVENT__inheritsEvent LV2_EVENT_PREFIX "inheritsEvent" +#define LV2_EVENT__inheritsTimeStamp LV2_EVENT_PREFIX "inheritsTimeStamp" +#define LV2_EVENT__supportsEvent LV2_EVENT_PREFIX "supportsEvent" +#define LV2_EVENT__supportsTimeStamp LV2_EVENT_PREFIX "supportsTimeStamp" + +#define LV2_EVENT_AUDIO_STAMP 0 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + The best Pulses Per Quarter Note for tempo-based uint32_t timestamps. + Equal to 2^12 * 5 * 7 * 9 * 11 * 13 * 17, which is evenly divisble + by all integers from 1 through 18 inclusive, and powers of 2 up to 2^12. +*/ +static const uint32_t LV2_EVENT_PPQN = 3136573440U; + +/** + An LV2 event (header only). + + LV2 events are generic time-stamped containers for any type of event. + The type field defines the format of a given event's contents. + + This struct defines the header of an LV2 event. An LV2 event is a single + chunk of POD (plain old data), usually contained in a flat buffer (see + LV2_EventBuffer below). Unless a required feature says otherwise, hosts may + assume a deep copy of an LV2 event can be created safely using a simple: + + memcpy(ev_copy, ev, sizeof(LV2_Event) + ev->size); (or equivalent) +*/ +typedef struct { + /** + The frames portion of timestamp. The units used here can optionally be + set for a port (with the lv2ev:timeUnits property), otherwise this is + audio frames, corresponding to the sample_count parameter of the LV2 run + method (e.g. frame 0 is the first frame for that call to run). + */ + uint32_t frames; + + /** + The sub-frames portion of timestamp. The units used here can optionally + be set for a port (with the lv2ev:timeUnits property), otherwise this is + 1/(2^32) of an audio frame. + */ + uint32_t subframes; + + /** + The type of this event, as a number which represents some URI + defining an event type. This value MUST be some value previously + returned from a call to the uri_to_id function defined in the LV2 + URI map extension (see lv2_uri_map.h). + There are special rules which must be followed depending on the type + of an event. If the plugin recognizes an event type, the definition + of that event type will describe how to interpret the event, and + any required behaviour. Otherwise, if the type is 0, this event is a + non-POD event and lv2_event_unref MUST be called if the event is + 'dropped' (see above). Even if the plugin does not understand an event, + it may pass the event through to an output by simply copying (and NOT + calling lv2_event_unref). These rules are designed to allow for generic + event handling plugins and large non-POD events, but with minimal hassle + on simple plugins that "don't care" about these more advanced features. + */ + uint16_t type; + + /** + The size of the data portion of this event in bytes, which immediately + follows. The header size (12 bytes) is not included in this value. + */ + uint16_t size; + + /* size bytes of data follow here */ +} LV2_Event; + + +/** + A buffer of LV2 events (header only). + + Like events (which this contains) an event buffer is a single chunk of POD: + the entire buffer (including contents) can be copied with a single memcpy. + The first contained event begins sizeof(LV2_EventBuffer) bytes after the + start of this struct. + + After this header, the buffer contains an event header (defined by struct + LV2_Event), followed by that event's contents (padded to 64 bits), followed + by another header, etc: + + | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | + |FRAMES |SUBFRMS|TYP|LEN|DATA..DATA..PAD|FRAMES | ... +*/ +typedef struct { + /** + The contents of the event buffer. This may or may not reside in the + same block of memory as this header, plugins must not assume either. + The host guarantees this points to at least capacity bytes of allocated + memory (though only size bytes of that are valid events). + */ + uint8_t* data; + + /** + The size of this event header in bytes (including everything). + + This is to allow for extending this header in the future without + breaking binary compatibility. Whenever this header is copied, + it MUST be done using this field (and NOT the sizeof this struct). + */ + uint16_t header_size; + + /** + The type of the time stamps for events in this buffer. + As a special exception, '0' always means audio frames and subframes + (1/UINT32_MAX'th of a frame) in the sample rate passed to instantiate. + + INPUTS: The host must set this field to the numeric ID of some URI + defining the meaning of the frames/subframes fields of contained events + (obtained by the LV2 URI Map uri_to_id function with the URI of this + extension as the 'map' argument, see lv2_uri_map.h). The host must + never pass a plugin a buffer which uses a stamp type the plugin does not + 'understand'. The value of this field must never change, except when + connect_port is called on the input port, at which time the host MUST + have set the stamp_type field to the value that will be used for all + subsequent run calls. + + OUTPUTS: The plugin may set this to any value that has been returned + from uri_to_id with the URI of this extension for a 'map' argument. + When connected to a buffer with connect_port, output ports MUST set this + field to the type of time stamp they will be writing. On any call to + connect_port on an event input port, the plugin may change this field on + any output port, it is the responsibility of the host to check if any of + these values have changed and act accordingly. + */ + uint16_t stamp_type; + + /** + The number of events in this buffer. + + INPUTS: The host must set this field to the number of events contained + in the data buffer before calling run(). The plugin must not change + this field. + + OUTPUTS: The plugin must set this field to the number of events it has + written to the buffer before returning from run(). Any initial value + should be ignored by the plugin. + */ + uint32_t event_count; + + /** + The size of the data buffer in bytes. + This is set by the host and must not be changed by the plugin. + The host is allowed to change this between run() calls. + */ + uint32_t capacity; + + /** + The size of the initial portion of the data buffer containing data. + + INPUTS: The host must set this field to the number of bytes used + by all events it has written to the buffer (including headers) + before calling the plugin's run(). + The plugin must not change this field. + + OUTPUTS: The plugin must set this field to the number of bytes + used by all events it has written to the buffer (including headers) + before returning from run(). + Any initial value should be ignored by the plugin. + */ + uint32_t size; +} LV2_Event_Buffer; + + +/** + Opaque pointer to host data. +*/ +typedef void* LV2_Event_Callback_Data; + + +/** + Non-POD events feature. + + To support this feature the host must pass an LV2_Feature struct to the + plugin's instantiate method with URI "http://lv2plug.in/ns/ext/event" + and data pointed to an instance of this struct. Note this feature + is not mandatory to support the event extension. +*/ +typedef struct { + /** + Opaque pointer to host data. + + The plugin MUST pass this to any call to functions in this struct. + Otherwise, it must not be interpreted in any way. + */ + LV2_Event_Callback_Data callback_data; + + /** + Take a reference to a non-POD event. + + If a plugin receives an event with type 0, it means the event is a + pointer to some object in memory and not a flat sequence of bytes + in the buffer. When receiving a non-POD event, the plugin already + has an implicit reference to the event. If the event is stored AND + passed to an output, lv2_event_ref MUST be called on that event. + If the event is only stored OR passed through, this is not necessary + (as the plugin already has 1 implicit reference). + + @param event An event received at an input that will not be copied to + an output or stored in any way. + + @param context The calling context. Like event types, this is a mapped + URI, see lv2_context.h. Simple plugin with just a run() method should + pass 0 here (the ID of the 'standard' LV2 run context). The host + guarantees that this function is realtime safe iff @a context is + realtime safe. + + PLUGINS THAT VIOLATE THESE RULES MAY CAUSE CRASHES AND MEMORY LEAKS. + */ + uint32_t (*lv2_event_ref)(LV2_Event_Callback_Data callback_data, + LV2_Event* event); + + /** + Drop a reference to a non-POD event. + + If a plugin receives an event with type 0, it means the event is a + pointer to some object in memory and not a flat sequence of bytes + in the buffer. If the plugin does not pass the event through to + an output or store it internally somehow, it MUST call this function + on the event (more information on using non-POD events below). + + @param event An event received at an input that will not be copied to an + output or stored in any way. + + @param context The calling context. Like event types, this is a mapped + URI, see lv2_context.h. Simple plugin with just a run() method should + pass 0 here (the ID of the 'standard' LV2 run context). The host + guarantees that this function is realtime safe iff @a context is + realtime safe. + + PLUGINS THAT VIOLATE THESE RULES MAY CAUSE CRASHES AND MEMORY LEAKS. + */ + uint32_t (*lv2_event_unref)(LV2_Event_Callback_Data callback_data, + LV2_Event* event); +} LV2_Event_Feature; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_EVENT_H */ diff --git a/dpf/distrho/src/lv2/instance-access.h b/dpf/distrho/src/lv2/instance-access.h new file mode 100644 index 0000000..06d8dde --- /dev/null +++ b/dpf/distrho/src/lv2/instance-access.h @@ -0,0 +1,37 @@ +/* + LV2 Instance Access Extension + Copyright 2008-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef LV2_INSTANCE_ACCESS_H +#define LV2_INSTANCE_ACCESS_H + +#define LV2_INSTANCE_ACCESS_URI "http://lv2plug.in/ns/ext/instance-access" + +/** + @file instance-access.h + C header for the LV2 Instance Access extension + . + + This extension defines a method for (e.g.) plugin UIs to get a direct + handle to an LV2 plugin instance (LV2_Handle), if possible. + + To support this feature the host must pass an LV2_Feature struct to the + UI instantiate method with URI "http://lv2plug.in/ns/ext/instance-access" + and data pointed directly to the LV2_Handle of the plugin instance. +*/ + +#endif /* LV2_INSTANCE_ACCESS_H */ + diff --git a/dpf/distrho/src/lv2/log.h b/dpf/distrho/src/lv2/log.h new file mode 100644 index 0000000..4b7b0f4 --- /dev/null +++ b/dpf/distrho/src/lv2/log.h @@ -0,0 +1,99 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file log.h C header for the LV2 Log extension + . +*/ + +#ifndef LV2_LOG_H +#define LV2_LOG_H + +#define LV2_LOG_URI "http://lv2plug.in/ns/ext/log" +#define LV2_LOG_PREFIX LV2_LOG_URI "#" + +#define LV2_LOG__Entry LV2_LOG_PREFIX "Entry" +#define LV2_LOG__Error LV2_LOG_PREFIX "Error" +#define LV2_LOG__Note LV2_LOG_PREFIX "Note" +#define LV2_LOG__Trace LV2_LOG_PREFIX "Trace" +#define LV2_LOG__Warning LV2_LOG_PREFIX "Warning" +#define LV2_LOG__log LV2_LOG_PREFIX "log" + +#include + +#include "urid.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __GNUC__ +/** Allow type checking of printf-like functions. */ +# define LV2_LOG_FUNC(fmt, arg1) __attribute__((format(printf, fmt, arg1))) +#else +# define LV2_LOG_FUNC(fmt, arg1) +#endif + +/** + Opaque data to host data for LV2_Log_Log. +*/ +typedef void* LV2_Log_Handle; + +/** + Log feature (LV2_LOG__log) +*/ +typedef struct _LV2_Log { + /** + Opaque pointer to host data. + + This MUST be passed to methods in this struct whenever they are called. + Otherwise, it must not be interpreted in any way. + */ + LV2_Log_Handle handle; + + /** + Log a message, passing format parameters directly. + + The API of this function matches that of the standard C printf function, + except for the addition of the first two parameters. This function may + be called from any non-realtime context, or from any context if @p type + is @ref LV2_LOG__Trace. + */ + LV2_LOG_FUNC(3, 4) + int (*printf)(LV2_Log_Handle handle, + LV2_URID type, + const char* fmt, ...); + + /** + Log a message, passing format parameters in a va_list. + + The API of this function matches that of the standard C vprintf + function, except for the addition of the first two parameters. This + function may be called from any non-realtime context, or from any + context if @p type is @ref LV2_LOG__Trace. + */ + LV2_LOG_FUNC(3, 0) + int (*vprintf)(LV2_Log_Handle handle, + LV2_URID type, + const char* fmt, + va_list ap); +} LV2_Log_Log; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_LOG_H */ diff --git a/dpf/distrho/src/lv2/logger.h b/dpf/distrho/src/lv2/logger.h new file mode 100644 index 0000000..9143544 --- /dev/null +++ b/dpf/distrho/src/lv2/logger.h @@ -0,0 +1,146 @@ +/* + Copyright 2012-2013 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file logger.h Convenience API for easy logging in plugin code. + + This file provides simple wrappers for the most common log operations for + use in plugin implementations. If host support for logging is not + available, then these functions will print to stderr instead. + + This header is non-normative, it is provided for convenience. +*/ + +#ifndef LV2_ATOM_LOGGER_H +#define LV2_ATOM_LOGGER_H + +#include +#include + +#include "log.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + Logger convenience API state. +*/ +typedef struct { + LV2_Log_Log* log; + + LV2_URID Error; + LV2_URID Note; + LV2_URID Trace; + LV2_URID Warning; +} LV2_Log_Logger; + +/** + Initialise @p logger. + + URIs will be mapped using @p map and stored, a reference to @p map itself is + not held. Both @p map and @p log may be NULL when unsupported by the host, + in which case the implementation will fall back to printing to stderr. +*/ +static inline void +lv2_log_logger_init(LV2_Log_Logger* logger, + LV2_URID_Map* map, + LV2_Log_Log* log) +{ + memset(logger, 0, sizeof(LV2_Log_Logger)); + logger->log = log; + if (map) { + logger->Error = map->map(map->handle, LV2_LOG__Error); + logger->Note = map->map(map->handle, LV2_LOG__Note); + logger->Trace = map->map(map->handle, LV2_LOG__Trace); + logger->Warning = map->map(map->handle, LV2_LOG__Warning); + } +} + +/** + Log a message to the host, or stderr if support is unavailable. +*/ +LV2_LOG_FUNC(3, 0) +static inline int +lv2_log_vprintf(LV2_Log_Logger* logger, + LV2_URID type, + const char* fmt, + va_list args) +{ + if (logger->log) { + return logger->log->vprintf(logger->log->handle, type, fmt, args); + } else { + return vfprintf(stderr, fmt, args); + } +} + +/** Log an error via lv2_log_vprintf(). */ +LV2_LOG_FUNC(2, 3) +static inline int +lv2_log_error(LV2_Log_Logger* logger, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + const int ret = lv2_log_vprintf(logger, logger->Error, fmt, args); + va_end(args); + return ret; +} + +/** Log a note via lv2_log_vprintf(). */ +LV2_LOG_FUNC(2, 3) +static inline int +lv2_log_note(LV2_Log_Logger* logger, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + const int ret = lv2_log_vprintf(logger, logger->Note, fmt, args); + va_end(args); + return ret; +} + +/** Log a trace via lv2_log_vprintf(). */ +LV2_LOG_FUNC(2, 3) +static inline int +lv2_log_trace(LV2_Log_Logger* logger, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + const int ret = lv2_log_vprintf(logger, logger->Trace, fmt, args); + va_end(args); + return ret; +} + +/** Log a warning via lv2_log_vprintf(). */ +LV2_LOG_FUNC(2, 3) +static inline int +lv2_log_warning(LV2_Log_Logger* logger, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + const int ret = lv2_log_vprintf(logger, logger->Warning, fmt, args); + va_end(args); + return ret; +} + +/** + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_LOG_LOGGER_H */ diff --git a/dpf/distrho/src/lv2/lv2-midifunctions.h b/dpf/distrho/src/lv2/lv2-midifunctions.h new file mode 100644 index 0000000..d068f49 --- /dev/null +++ b/dpf/distrho/src/lv2/lv2-midifunctions.h @@ -0,0 +1,98 @@ +/**************************************************************************** + + lv2-midifunctions.h - support file for using MIDI in LV2 plugins + + Copyright (C) 2006 Lars Luthman + + This program 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 of the License, 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 Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 01222-1307 USA + +****************************************************************************/ + +#ifndef LV2_MIDIFUNCTIONS +#define LV2_MIDIFUNCTIONS + +#include "lv2-miditype.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + LV2_MIDI* midi; + uint32_t frame_count; + uint32_t position; +} LV2_MIDIState; + + +inline double lv2midi_get_event(LV2_MIDIState* state, + double* timestamp, + uint32_t* size, + unsigned char** data) { + + if (state->position >= state->midi->size) { + state->position = state->midi->size; + *timestamp = state->frame_count; + *size = 0; + *data = NULL; + return *timestamp; + } + + *timestamp = *(double*)(state->midi->data + state->position); + *size = (uint32_t)*(size_t*)(state->midi->data + state->position + sizeof(double)); + *data = state->midi->data + state->position + + sizeof(double) + sizeof(size_t); + return *timestamp; +} + + +inline double lv2midi_step(LV2_MIDIState* state) { + + if (state->position >= state->midi->size) { + state->position = state->midi->size; + return state->frame_count; + } + + state->position += (uint32_t)sizeof(double); + size_t size = *(size_t*)(state->midi->data + state->position); + state->position += (uint32_t)sizeof(size_t); + state->position += (uint32_t)size; + return *(double*)(state->midi->data + state->position); +} + + +inline void lv2midi_put_event(LV2_MIDIState* state, + double timestamp, + uint32_t size, + const unsigned char* data) { + + if (state->midi->size + sizeof(double) + sizeof(size_t) + size < state->midi->capacity) + { + *((double*)(state->midi->data + state->midi->size)) = timestamp; + state->midi->size += (uint32_t)sizeof(double); + *((size_t*)(state->midi->data + state->midi->size)) = size; + state->midi->size += (uint32_t)sizeof(size_t); + memcpy(state->midi->data + state->midi->size, data, size); + + state->midi->size += size; + state->midi->event_count++; + } +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif + diff --git a/dpf/distrho/src/lv2/lv2-miditype.h b/dpf/distrho/src/lv2/lv2-miditype.h new file mode 100644 index 0000000..7afcae8 --- /dev/null +++ b/dpf/distrho/src/lv2/lv2-miditype.h @@ -0,0 +1,175 @@ +/**************************************************************************** + + lv2-miditype.h - header file for using MIDI in LV2 plugins + + Copyright (C) 2006 Lars Luthman + + This program 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 of the License, 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 01222-1307 USA + +****************************************************************************/ + +#ifndef LV2_MIDITYPE_H +#define LV2_MIDITYPE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** This data structure is used to contain the MIDI events for one run() + cycle. The port buffer for a LV2 port that has the datatype + should be a pointer + to an instance of this struct. + + To store two Note On events on MIDI channel 0 in a buffer, with timestamps + 12 and 35.5, you could use something like this code (assuming that + midi_data is a variable of type LV2_MIDI): + @code + + size_t buffer_offset = 0; + *(double*)(midi_data->data + buffer_offset) = 12; + buffer_offset += sizeof(double); + *(size_t*)(midi_data->data + buffer_offset) = 3; + buffer_offset += sizeof(size_t); + midi_data->data[buffer_offset++] = 0x90; + midi_data->data[buffer_offset++] = 0x48; + midi_data->data[buffer_offset++] = 0x64; + ++midi_data->event_count; + + *(double*)(midi_data->data + buffer_offset) = 35.5; + buffer_offset += sizeof(double); + *(size_t*)(midi_data->data + buffer_offset) = 3; + buffer_offset += sizeof(size_t); + midi_data->data[buffer_offset++] = 0x90; + midi_data->data[buffer_offset++] = 0x55; + midi_data->data[buffer_offset++] = 0x64; + ++midi_data->event_count; + + midi_data->size = buffer_offset; + + @endcode + + This would be done by the host in the case of an input port, and by the + plugin in the case of an output port. Whoever is writing events to the + buffer must also take care not to exceed the capacity of the data buffer. + + To read events from a buffer, you could do something like this: + @code + + size_t buffer_offset = 0; + uint32_t i; + for (i = 0; i < midi_data->event_count; ++i) { + double timestamp = *(double*)(midi_data->data + buffer_offset); + buffer_offset += sizeof(double); + size_t size = *(size_t*)(midi_data->data + buffer_offset); + buffer_offset += sizeof(size_t); + do_something_with_event(timestamp, size, + midi_data->data + buffer_offset); + buffer_offset += size; + } + + @endcode +*/ +typedef struct { + + /** The number of MIDI events in the data buffer. + INPUT PORTS: It's the host's responsibility to set this field to the + number of MIDI events contained in the data buffer before calling the + plugin's run() function. The plugin may not change this field. + OUTPUT PORTS: It's the plugin's responsibility to set this field to the + number of MIDI events it has stored in the data buffer before returning + from the run() function. Any initial value should be ignored by the + plugin. + */ + uint32_t event_count; + + /** The size of the data buffer in bytes. It is set by the host and may not + be changed by the plugin. The host is allowed to change this between + run() calls. + */ + uint32_t capacity; + + /** The size of the initial part of the data buffer that actually contains + data. + INPUT PORTS: It's the host's responsibility to set this field to the + number of bytes used by all MIDI events it has written to the buffer + (including timestamps and size fields) before calling the plugin's + run() function. The plugin may not change this field. + OUTPUT PORTS: It's the plugin's responsibility to set this field to + the number of bytes used by all MIDI events it has written to the + buffer (including timestamps and size fields) before returning from + the run() function. Any initial value should be ignored by the plugin. + */ + uint32_t size; + + /** The data buffer that is used to store MIDI events. The events are packed + after each other, and the format of each event is as follows: + + First there is a timestamp, which should have the type "double", + i.e. have the same bit size as a double and the same bit layout as a + double (whatever that is on the current platform). This timestamp gives + the offset from the beginning of the current cycle, in frames, that + the MIDI event occurs on. It must be strictly smaller than the 'nframes' + parameter to the current run() call. The MIDI events in the buffer must + be ordered by their timestamp, e.g. an event with a timestamp of 123.23 + must be stored after an event with a timestamp of 65.0. + + The second part of the event is a size field, which should have the type + "size_t" (as defined in the standard C header stddef.h). It should + contain the size of the MIDI data for this event, i.e. the number of + bytes used to store the actual MIDI event. The bytes used by the + timestamp and the size field should not be counted. + + The third part of the event is the actual MIDI data. There are some + requirements that must be followed: + + * Running status is not allowed. Every event must have its own status + byte. + * Note On events with velocity 0 are not allowed. These events are + equivalent to Note Off in standard MIDI streams, but in order to make + plugins and hosts easier to write, as well as more efficient, only + proper Note Off events are allowed as Note Off. + * "Realtime events" (status bytes 0xF8 to 0xFF) are allowed, but may not + occur inside other events like they are allowed to in hardware MIDI + streams. + * All events must be fully contained in a single data buffer, i.e. events + may not "wrap around" by storing the first few bytes in one buffer and + then wait for the next run() call to store the rest of the event. If + there isn't enough space in the current data buffer to store an event, + the event will either have to wait until next run() call, be ignored, + or compensated for in some more clever way. + * All events must be valid MIDI events. This means for example that + only the first byte in each event (the status byte) may have the eighth + bit set, that Note On and Note Off events are always 3 bytes long etc. + The MIDI writer (host or plugin) is responsible for writing valid MIDI + events to the buffer, and the MIDI reader (plugin or host) can assume + that all events are valid. + + On a platform where double is 8 bytes and size_t is 4 bytes, the data + buffer layout for a 3-byte event followed by a 4-byte event may look + something like this: + _______________________________________________________________ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ... + |TIMESTAMP 1 |SIZE 1 |DATA |TIMESTAMP 2 |SIZE 2 |DATA | ... + + */ + unsigned char* data; + +} LV2_MIDI; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/dpf/distrho/src/lv2/lv2.h b/dpf/distrho/src/lv2/lv2.h new file mode 100644 index 0000000..6e0edaa --- /dev/null +++ b/dpf/distrho/src/lv2/lv2.h @@ -0,0 +1,458 @@ +/* + LV2 - An audio plugin interface specification. + Copyright 2006-2012 Steve Harris, David Robillard. + + Based on LADSPA, Copyright 2000-2002 Richard W.E. Furse, + Paul Barton-Davis, Stefan Westerfeld. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file lv2.h + API for the LV2 specification . + Revision: 12.0 +*/ + +#ifndef LV2_H_INCLUDED +#define LV2_H_INCLUDED + +#include + +#define LV2_CORE_URI "http://lv2plug.in/ns/lv2core" +#define LV2_CORE_PREFIX LV2_CORE_URI "#" + +#define LV2_CORE__AllpassPlugin LV2_CORE_PREFIX "AllpassPlugin" +#define LV2_CORE__AmplifierPlugin LV2_CORE_PREFIX "AmplifierPlugin" +#define LV2_CORE__AnalyserPlugin LV2_CORE_PREFIX "AnalyserPlugin" +#define LV2_CORE__AudioPort LV2_CORE_PREFIX "AudioPort" +#define LV2_CORE__BandpassPlugin LV2_CORE_PREFIX "BandpassPlugin" +#define LV2_CORE__CVPort LV2_CORE_PREFIX "CVPort" +#define LV2_CORE__ChorusPlugin LV2_CORE_PREFIX "ChorusPlugin" +#define LV2_CORE__CombPlugin LV2_CORE_PREFIX "CombPlugin" +#define LV2_CORE__CompressorPlugin LV2_CORE_PREFIX "CompressorPlugin" +#define LV2_CORE__ConstantPlugin LV2_CORE_PREFIX "ConstantPlugin" +#define LV2_CORE__ControlPort LV2_CORE_PREFIX "ControlPort" +#define LV2_CORE__ConverterPlugin LV2_CORE_PREFIX "ConverterPlugin" +#define LV2_CORE__DelayPlugin LV2_CORE_PREFIX "DelayPlugin" +#define LV2_CORE__DistortionPlugin LV2_CORE_PREFIX "DistortionPlugin" +#define LV2_CORE__DynamicsPlugin LV2_CORE_PREFIX "DynamicsPlugin" +#define LV2_CORE__EQPlugin LV2_CORE_PREFIX "EQPlugin" +#define LV2_CORE__EnvelopePlugin LV2_CORE_PREFIX "EnvelopePlugin" +#define LV2_CORE__ExpanderPlugin LV2_CORE_PREFIX "ExpanderPlugin" +#define LV2_CORE__ExtensionData LV2_CORE_PREFIX "ExtensionData" +#define LV2_CORE__Feature LV2_CORE_PREFIX "Feature" +#define LV2_CORE__FilterPlugin LV2_CORE_PREFIX "FilterPlugin" +#define LV2_CORE__FlangerPlugin LV2_CORE_PREFIX "FlangerPlugin" +#define LV2_CORE__FunctionPlugin LV2_CORE_PREFIX "FunctionPlugin" +#define LV2_CORE__GatePlugin LV2_CORE_PREFIX "GatePlugin" +#define LV2_CORE__GeneratorPlugin LV2_CORE_PREFIX "GeneratorPlugin" +#define LV2_CORE__HighpassPlugin LV2_CORE_PREFIX "HighpassPlugin" +#define LV2_CORE__InputPort LV2_CORE_PREFIX "InputPort" +#define LV2_CORE__InstrumentPlugin LV2_CORE_PREFIX "InstrumentPlugin" +#define LV2_CORE__LimiterPlugin LV2_CORE_PREFIX "LimiterPlugin" +#define LV2_CORE__LowpassPlugin LV2_CORE_PREFIX "LowpassPlugin" +#define LV2_CORE__MixerPlugin LV2_CORE_PREFIX "MixerPlugin" +#define LV2_CORE__ModulatorPlugin LV2_CORE_PREFIX "ModulatorPlugin" +#define LV2_CORE__MultiEQPlugin LV2_CORE_PREFIX "MultiEQPlugin" +#define LV2_CORE__OscillatorPlugin LV2_CORE_PREFIX "OscillatorPlugin" +#define LV2_CORE__OutputPort LV2_CORE_PREFIX "OutputPort" +#define LV2_CORE__ParaEQPlugin LV2_CORE_PREFIX "ParaEQPlugin" +#define LV2_CORE__PhaserPlugin LV2_CORE_PREFIX "PhaserPlugin" +#define LV2_CORE__PitchPlugin LV2_CORE_PREFIX "PitchPlugin" +#define LV2_CORE__Plugin LV2_CORE_PREFIX "Plugin" +#define LV2_CORE__PluginBase LV2_CORE_PREFIX "PluginBase" +#define LV2_CORE__Point LV2_CORE_PREFIX "Point" +#define LV2_CORE__Port LV2_CORE_PREFIX "Port" +#define LV2_CORE__PortProperty LV2_CORE_PREFIX "PortProperty" +#define LV2_CORE__Resource LV2_CORE_PREFIX "Resource" +#define LV2_CORE__ReverbPlugin LV2_CORE_PREFIX "ReverbPlugin" +#define LV2_CORE__ScalePoint LV2_CORE_PREFIX "ScalePoint" +#define LV2_CORE__SimulatorPlugin LV2_CORE_PREFIX "SimulatorPlugin" +#define LV2_CORE__SpatialPlugin LV2_CORE_PREFIX "SpatialPlugin" +#define LV2_CORE__Specification LV2_CORE_PREFIX "Specification" +#define LV2_CORE__SpectralPlugin LV2_CORE_PREFIX "SpectralPlugin" +#define LV2_CORE__UtilityPlugin LV2_CORE_PREFIX "UtilityPlugin" +#define LV2_CORE__WaveshaperPlugin LV2_CORE_PREFIX "WaveshaperPlugin" +#define LV2_CORE__appliesTo LV2_CORE_PREFIX "appliesTo" +#define LV2_CORE__binary LV2_CORE_PREFIX "binary" +#define LV2_CORE__connectionOptional LV2_CORE_PREFIX "connectionOptional" +#define LV2_CORE__control LV2_CORE_PREFIX "control" +#define LV2_CORE__default LV2_CORE_PREFIX "default" +#define LV2_CORE__designation LV2_CORE_PREFIX "designation" +#define LV2_CORE__documentation LV2_CORE_PREFIX "documentation" +#define LV2_CORE__enumeration LV2_CORE_PREFIX "enumeration" +#define LV2_CORE__extensionData LV2_CORE_PREFIX "extensionData" +#define LV2_CORE__freeWheeling LV2_CORE_PREFIX "freeWheeling" +#define LV2_CORE__hardRTCapable LV2_CORE_PREFIX "hardRTCapable" +#define LV2_CORE__inPlaceBroken LV2_CORE_PREFIX "inPlaceBroken" +#define LV2_CORE__index LV2_CORE_PREFIX "index" +#define LV2_CORE__integer LV2_CORE_PREFIX "integer" +#define LV2_CORE__isLive LV2_CORE_PREFIX "isLive" +#define LV2_CORE__latency LV2_CORE_PREFIX "latency" +#define LV2_CORE__maximum LV2_CORE_PREFIX "maximum" +#define LV2_CORE__microVersion LV2_CORE_PREFIX "microVersion" +#define LV2_CORE__minimum LV2_CORE_PREFIX "minimum" +#define LV2_CORE__minorVersion LV2_CORE_PREFIX "minorVersion" +#define LV2_CORE__name LV2_CORE_PREFIX "name" +#define LV2_CORE__optionalFeature LV2_CORE_PREFIX "optionalFeature" +#define LV2_CORE__port LV2_CORE_PREFIX "port" +#define LV2_CORE__portProperty LV2_CORE_PREFIX "portProperty" +#define LV2_CORE__project LV2_CORE_PREFIX "project" +#define LV2_CORE__prototype LV2_CORE_PREFIX "prototype" +#define LV2_CORE__reportsLatency LV2_CORE_PREFIX "reportsLatency" +#define LV2_CORE__requiredFeature LV2_CORE_PREFIX "requiredFeature" +#define LV2_CORE__sampleRate LV2_CORE_PREFIX "sampleRate" +#define LV2_CORE__scalePoint LV2_CORE_PREFIX "scalePoint" +#define LV2_CORE__symbol LV2_CORE_PREFIX "symbol" +#define LV2_CORE__toggled LV2_CORE_PREFIX "toggled" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + Plugin Instance Handle. + + This is a handle for one particular instance of a plugin. It is valid to + compare to NULL (or 0 for C++) but otherwise the host MUST NOT attempt to + interpret it. +*/ +typedef void * LV2_Handle; + +/** + Feature. + + Features allow hosts to make additional functionality available to plugins + without requiring modification to the LV2 API. Extensions may define new + features and specify the @ref URI and @ref data to be used if necessary. + Some features, such as lv2:isLive, do not require the host to pass data. +*/ +typedef struct _LV2_Feature { + /** + A globally unique, case-sensitive identifier (URI) for this feature. + + This MUST be a valid URI string as defined by RFC 3986. + */ + const char * URI; + + /** + Pointer to arbitrary data. + + The format of this data is defined by the extension which describes the + feature with the given @ref URI. + */ + void * data; +} LV2_Feature; + +/** + Plugin Descriptor. + + This structure provides the core functions necessary to instantiate and use + a plugin. +*/ +typedef struct _LV2_Descriptor { + /** + A globally unique, case-sensitive identifier for this plugin. + + This MUST be a valid URI string as defined by RFC 3986. All plugins with + the same URI MUST be compatible to some degree, see + http://lv2plug.in/ns/lv2core for details. + */ + const char * URI; + + /** + Instantiate the plugin. + + Note that instance initialisation should generally occur in activate() + rather than here. If a host calls instantiate(), it MUST call cleanup() + at some point in the future. + + @param descriptor Descriptor of the plugin to instantiate. + + @param sample_rate Sample rate, in Hz, for the new plugin instance. + + @param bundle_path Path to the LV2 bundle which contains this plugin + binary. It MUST include the trailing directory separator (e.g. '/') so + that simply appending a filename will yield the path to that file in the + bundle. + + @param features A NULL terminated array of LV2_Feature structs which + represent the features the host supports. Plugins may refuse to + instantiate if required features are not found here. However, hosts MUST + NOT use this as a discovery mechanism: instead, use the RDF data to + determine which features are required and do not attempt to instantiate + unsupported plugins at all. This parameter MUST NOT be NULL, i.e. a host + that supports no features MUST pass a single element array containing + NULL. + + @return A handle for the new plugin instance, or NULL if instantiation + has failed. + */ + LV2_Handle (*instantiate)(const struct _LV2_Descriptor * descriptor, + double sample_rate, + const char * bundle_path, + const LV2_Feature *const * features); + + /** + Connect a port on a plugin instance to a memory location. + + Plugin writers should be aware that the host may elect to use the same + buffer for more than one port and even use the same buffer for both + input and output (see lv2:inPlaceBroken in lv2.ttl). + + If the plugin has the feature lv2:hardRTCapable then there are various + things that the plugin MUST NOT do within the connect_port() function; + see lv2core.ttl for details. + + connect_port() MUST be called at least once for each port before run() + is called, unless that port is lv2:connectionOptional. The plugin must + pay careful attention to the block size passed to run() since the block + allocated may only just be large enough to contain the data, and is not + guaranteed to remain constant between run() calls. + + connect_port() may be called more than once for a plugin instance to + allow the host to change the buffers that the plugin is reading or + writing. These calls may be made before or after activate() or + deactivate() calls. + + @param instance Plugin instance containing the port. + + @param port Index of the port to connect. The host MUST NOT try to + connect a port index that is not defined in the plugin's RDF data. If + it does, the plugin's behaviour is undefined (a crash is likely). + + @param data_location Pointer to data of the type defined by the port + type in the plugin's RDF data (e.g. an array of float for an + lv2:AudioPort). This pointer must be stored by the plugin instance and + used to read/write data when run() is called. Data present at the time + of the connect_port() call MUST NOT be considered meaningful. + */ + void (*connect_port)(LV2_Handle instance, + uint32_t port, + void * data_location); + + /** + Initialise a plugin instance and activate it for use. + + This is separated from instantiate() to aid real-time support and so + that hosts can reinitialise a plugin instance by calling deactivate() + and then activate(). In this case the plugin instance MUST reset all + state information dependent on the history of the plugin instance except + for any data locations provided by connect_port(). If there is nothing + for activate() to do then this field may be NULL. + + When present, hosts MUST call this function once before run() is called + for the first time. This call SHOULD be made as close to the run() call + as possible and indicates to real-time plugins that they are now live, + however plugins MUST NOT rely on a prompt call to run() after + activate(). + + The host MUST NOT call activate() again until deactivate() has been + called first. If a host calls activate(), it MUST call deactivate() at + some point in the future. Note that connect_port() may be called before + or after activate(). + */ + void (*activate)(LV2_Handle instance); + + /** + Run a plugin instance for a block. + + Note that if an activate() function exists then it must be called before + run(). If deactivate() is called for a plugin instance then run() may + not be called until activate() has been called again. + + If the plugin has the feature lv2:hardRTCapable then there are various + things that the plugin MUST NOT do within the run() function (see + lv2core.ttl for details). + + As a special case, when @p sample_count == 0, the plugin should update + any output ports that represent a single instant in time (e.g. control + ports, but not audio ports). This is particularly useful for latent + plugins, which should update their latency output port so hosts can + pre-roll plugins to compute latency. Plugins MUST NOT crash when + @p sample_count == 0. + + @param instance Instance to be run. + + @param sample_count The block size (in samples) for which the plugin + instance must run. + */ + void (*run)(LV2_Handle instance, + uint32_t sample_count); + + /** + Deactivate a plugin instance (counterpart to activate()). + + Hosts MUST deactivate all activated instances after they have been run() + for the last time. This call SHOULD be made as close to the last run() + call as possible and indicates to real-time plugins that they are no + longer live, however plugins MUST NOT rely on prompt deactivation. If + there is nothing for deactivate() to do then this field may be NULL + + Deactivation is not similar to pausing since the plugin instance will be + reinitialised by activate(). However, deactivate() itself MUST NOT fully + reset plugin state. For example, the host may deactivate a plugin, then + store its state (using some extension to do so). + + Hosts MUST NOT call deactivate() unless activate() was previously + called. Note that connect_port() may be called before or after + deactivate(). + */ + void (*deactivate)(LV2_Handle instance); + + /** + Clean up a plugin instance (counterpart to instantiate()). + + Once an instance of a plugin has been finished with it must be deleted + using this function. The instance handle passed ceases to be valid after + this call. + + If activate() was called for a plugin instance then a corresponding call + to deactivate() MUST be made before cleanup() is called. Hosts MUST NOT + call cleanup() unless instantiate() was previously called. + */ + void (*cleanup)(LV2_Handle instance); + + /** + Return additional plugin data defined by some extenion. + + A typical use of this facility is to return a struct containing function + pointers to extend the LV2_Descriptor API. + + The actual type and meaning of the returned object MUST be specified + precisely by the extension. This function MUST return NULL for any + unsupported URI. If a plugin does not support any extension data, this + field may be NULL. + + The host is never responsible for freeing the returned value. + */ + const void * (*extension_data)(const char * uri); +} LV2_Descriptor; + +/** + Put this (LV2_SYMBOL_EXPORT) before any functions that are to be loaded + by the host as a symbol from the dynamic library. +*/ +#ifdef _WIN32 +# define LV2_SYMBOL_EXPORT __declspec(dllexport) +#else +# define LV2_SYMBOL_EXPORT +#endif + +/** + Prototype for plugin accessor function. + + Plugins are discovered by hosts using RDF data (not by loading libraries). + See http://lv2plug.in for details on the discovery process, though most + hosts should use an existing library to implement this functionality. + + This is the simple plugin discovery API, suitable for most statically + defined plugins. Advanced plugins that need access to their bundle during + discovery can use lv2_lib_descriptor() instead. Plugin libraries MUST + include a function called "lv2_descriptor" or "lv2_lib_descriptor" with + C-style linkage, but SHOULD provide "lv2_descriptor" wherever possible. + + When it is time to load a plugin (designated by its URI), the host loads the + plugin's library, gets the lv2_descriptor() function from it, and uses this + function to find the LV2_Descriptor for the desired plugin. Plugins are + accessed by index using values from 0 upwards. This function MUST return + NULL for out of range indices, so the host can enumerate plugins by + increasing @p index until NULL is returned. + + Note that @p index has no meaning, hosts MUST NOT depend on it remaining + consistent between loads of the plugin library. +*/ +LV2_SYMBOL_EXPORT +const LV2_Descriptor * lv2_descriptor(uint32_t index); + +/** + Type of the lv2_descriptor() function in a library (old discovery API). +*/ +typedef const LV2_Descriptor * +(*LV2_Descriptor_Function)(uint32_t index); + +/** + Handle for a library descriptor. +*/ +typedef void* LV2_Lib_Handle; + +/** + Descriptor for a plugin library. + + To access a plugin library, the host creates an LV2_Lib_Descriptor via the + lv2_lib_descriptor() function in the shared object. +*/ +typedef struct { + /** + Opaque library data which must be passed as the first parameter to all + the methods of this struct. + */ + LV2_Lib_Handle handle; + + /** + The total size of this struct. This allows for this struct to be + expanded in the future if necessary. This MUST be set by the library to + sizeof(LV2_Lib_Descriptor). The host MUST NOT access any fields of this + struct beyond get_plugin() unless this field indicates they are present. + */ + uint32_t size; + + /** + Destroy this library descriptor and free all related resources. + */ + void (*cleanup)(LV2_Lib_Handle handle); + + /** + Plugin accessor. + + Plugins are accessed by index using values from 0 upwards. Out of range + indices MUST result in this function returning NULL, so the host can + enumerate plugins by increasing @a index until NULL is returned. + */ + const LV2_Descriptor * (*get_plugin)(LV2_Lib_Handle handle, + uint32_t index); +} LV2_Lib_Descriptor; + +/** + Prototype for library accessor function. + + This is the more advanced discovery API, which allows plugin libraries to + access their bundles during discovery, which makes it possible for plugins to + be dynamically defined by files in their bundle. This API also has an + explicit cleanup function, removing any need for non-portable shared library + destructors. Simple plugins that do not require these features may use + lv2_descriptor() instead. + + This is the entry point for a plugin library. Hosts load this symbol from + the library and call this function to obtain a library descriptor which can + be used to access all the contained plugins. The returned object must not + be destroyed (using LV2_Lib_Descriptor::cleanup()) until all plugins loaded + from that library have been destroyed. +*/ +const LV2_Lib_Descriptor * +lv2_lib_descriptor(const char * bundle_path, + const LV2_Feature *const * features); + +/** + Type of the lv2_lib_descriptor() function in an LV2 library. +*/ +typedef const LV2_Lib_Descriptor * +(*LV2_Lib_Descriptor_Function)(const char * bundle_path, + const LV2_Feature *const * features); + +#ifdef __cplusplus +} +#endif + +#endif /* LV2_H_INCLUDED */ diff --git a/dpf/distrho/src/lv2/lv2_external_ui.h b/dpf/distrho/src/lv2/lv2_external_ui.h new file mode 100755 index 0000000..789cd3f --- /dev/null +++ b/dpf/distrho/src/lv2/lv2_external_ui.h @@ -0,0 +1,109 @@ +/* + LV2 External UI extension + This work is in public domain. + + This file 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. + + If you have questions, contact Filipe Coelho (aka falkTX) + or ask in #lad channel, FreeNode IRC network. +*/ + +/** + @file lv2_external_ui.h + C header for the LV2 External UI extension . +*/ + +#ifndef LV2_EXTERNAL_UI_H +#define LV2_EXTERNAL_UI_H + +#include "ui.h" + +#define LV2_EXTERNAL_UI_URI "http://kxstudio.sf.net/ns/lv2ext/external-ui" +#define LV2_EXTERNAL_UI_PREFIX LV2_EXTERNAL_UI_URI "#" + +#define LV2_EXTERNAL_UI__Host LV2_EXTERNAL_UI_PREFIX "Host" +#define LV2_EXTERNAL_UI__Widget LV2_EXTERNAL_UI_PREFIX "Widget" + +/** This extension used to be defined by a lv2plug.in URI */ +#define LV2_EXTERNAL_UI_DEPRECATED_URI "http://lv2plug.in/ns/extensions/ui#external" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * When LV2_EXTERNAL_UI__Widget UI is instantiated, the returned + * LV2UI_Widget handle must be cast to pointer to LV2_External_UI_Widget. + * UI is created in invisible state. + */ +typedef struct _LV2_External_UI_Widget { + /** + * Host calls this function regulary. UI library implementing the + * callback may do IPC or redraw the UI. + * + * @param _this_ the UI context + */ + void (*run)(struct _LV2_External_UI_Widget * _this_); + + /** + * Host calls this function to make the plugin UI visible. + * + * @param _this_ the UI context + */ + void (*show)(struct _LV2_External_UI_Widget * _this_); + + /** + * Host calls this function to make the plugin UI invisible again. + * + * @param _this_ the UI context + */ + void (*hide)(struct _LV2_External_UI_Widget * _this_); + +} LV2_External_UI_Widget; + +#define LV2_EXTERNAL_UI_RUN(ptr) (ptr)->run(ptr) +#define LV2_EXTERNAL_UI_SHOW(ptr) (ptr)->show(ptr) +#define LV2_EXTERNAL_UI_HIDE(ptr) (ptr)->hide(ptr) + +/** + * On UI instantiation, host must supply LV2_EXTERNAL_UI__Host feature. + * LV2_Feature::data must be pointer to LV2_External_UI_Host. + */ +typedef struct _LV2_External_UI_Host { + /** + * Callback that plugin UI will call when UI (GUI window) is closed by user. + * This callback will be called during execution of LV2_External_UI_Widget::run() + * (i.e. not from background thread). + * + * After this callback is called, UI is defunct. Host must call LV2UI_Descriptor::cleanup(). + * If host wants to make the UI visible again, the UI must be reinstantiated. + * + * @note When using the depreated URI LV2_EXTERNAL_UI_DEPRECATED_URI, + * some hosts will not call LV2UI_Descriptor::cleanup() as they should, + * and may call show() again without re-initialization. + * + * @param controller Host context associated with plugin UI, as + * supplied to LV2UI_Descriptor::instantiate(). + */ + void (*ui_closed)(LV2UI_Controller controller); + + /** + * Optional (may be NULL) "user friendly" identifier which the UI + * may display to allow a user to easily associate this particular + * UI instance with the correct plugin instance as it is represented + * by the host (e.g. "track 1" or "channel 4"). + * + * If supplied by host, the string will be referenced only during + * LV2UI_Descriptor::instantiate() + */ + const char * plugin_human_id; + +} LV2_External_UI_Host; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_EXTERNAL_UI_H */ diff --git a/dpf/distrho/src/lv2/lv2_kxstudio_properties.h b/dpf/distrho/src/lv2/lv2_kxstudio_properties.h new file mode 100644 index 0000000..e8b42a6 --- /dev/null +++ b/dpf/distrho/src/lv2/lv2_kxstudio_properties.h @@ -0,0 +1,33 @@ +/* + LV2 KXStudio Properties Extension + Copyright 2014 Filipe Coelho + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file lv2_kxstudio_properties.h + C header for the LV2 KXStudio Properties extension . +*/ + +#ifndef LV2_KXSTUDIO_PROPERTIES_H +#define LV2_KXSTUDIO_PROPERTIES_H + +#define LV2_KXSTUDIO_PROPERTIES_URI "http://kxstudio.sf.net/ns/lv2ext/props" +#define LV2_KXSTUDIO_PROPERTIES_PREFIX LV2_KXSTUDIO_PROPERTIES_URI "#" + +#define LV2_KXSTUDIO_PROPERTIES__NonAutomable LV2_KXSTUDIO_PROPERTIES_PREFIX "NonAutomable" +#define LV2_KXSTUDIO_PROPERTIES__TimePositionTicksPerBeat LV2_KXSTUDIO_PROPERTIES_PREFIX "TimePositionTicksPerBeat" +#define LV2_KXSTUDIO_PROPERTIES__TransientWindowId LV2_KXSTUDIO_PROPERTIES_PREFIX "TransientWindowId" + +#endif /* LV2_KXSTUDIO_PROPERTIES_H */ diff --git a/dpf/distrho/src/lv2/lv2_programs.h b/dpf/distrho/src/lv2/lv2_programs.h new file mode 100644 index 0000000..01e2877 --- /dev/null +++ b/dpf/distrho/src/lv2/lv2_programs.h @@ -0,0 +1,174 @@ +/* + LV2 Programs Extension + Copyright 2012 Filipe Coelho + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file lv2_programs.h + C header for the LV2 programs extension . +*/ + +#ifndef LV2_PROGRAMS_H +#define LV2_PROGRAMS_H + +#include "lv2.h" +#include "ui.h" + +#define LV2_PROGRAMS_URI "http://kxstudio.sf.net/ns/lv2ext/programs" +#define LV2_PROGRAMS_PREFIX LV2_PROGRAMS_URI "#" + +#define LV2_PROGRAMS__Host LV2_PROGRAMS_PREFIX "Host" +#define LV2_PROGRAMS__Interface LV2_PROGRAMS_PREFIX "Interface" +#define LV2_PROGRAMS__UIInterface LV2_PROGRAMS_PREFIX "UIInterface" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void* LV2_Programs_Handle; + +typedef struct _LV2_Program_Descriptor { + + /** Bank number for this program. Note that this extension does not + support MIDI-style separation of bank LSB and MSB values. There is + no restriction on the set of available banks: the numbers do not + need to be contiguous, there does not need to be a bank 0, etc. */ + uint32_t bank; + + /** Program number (unique within its bank) for this program. There is + no restriction on the set of available programs: the numbers do not + need to be contiguous, there does not need to be a program 0, etc. */ + uint32_t program; + + /** Name of the program. */ + const char * name; + +} LV2_Program_Descriptor; + +/** + Programs extension, plugin data. + + When the plugin's extension_data is called with argument LV2_PROGRAMS__Interface, + the plugin MUST return an LV2_Programs_Instance structure, which remains valid + for the lifetime of the plugin. +*/ +typedef struct _LV2_Programs_Interface { + /** + * get_program() + * + * This member is a function pointer that provides a description + * of a program (named preset sound) available on this plugin. + * + * The index argument is an index into the plugin's list of + * programs, not a program number as represented by the Program + * field of the LV2_Program_Descriptor. (This distinction is + * needed to support plugins that use non-contiguous program or + * bank numbers.) + * + * This function returns a LV2_Program_Descriptor pointer that is + * guaranteed to be valid only until the next call to get_program + * or deactivate, on the same plugin instance. This function must + * return NULL if passed an index argument out of range, so that + * the host can use it to query the number of programs as well as + * their properties. + */ + const LV2_Program_Descriptor *(*get_program)(LV2_Handle handle, + uint32_t index); + + /** + * select_program() + * + * This member is a function pointer that selects a new program + * for this plugin. The program change should take effect + * immediately at the start of the next run() call. (This + * means that a host providing the capability of changing programs + * between any two notes on a track must vary the block size so as + * to place the program change at the right place. A host that + * wanted to avoid this would probably just instantiate a plugin + * for each program.) + * + * Plugins should ignore a select_program() call with an invalid + * bank or program. + * + * A plugin is not required to select any particular default + * program on activate(): it's the host's duty to set a program + * explicitly. + * + * A plugin is permitted to re-write the values of its input + * control ports when select_program is called. The host should + * re-read the input control port values and update its own + * records appropriately. (This is the only circumstance in which + * a LV2 plugin is allowed to modify its own control-input ports.) + */ + void (*select_program)(LV2_Handle handle, + uint32_t bank, + uint32_t program); + +} LV2_Programs_Interface; + +/** + Programs extension, UI data. + + When the UI's extension_data is called with argument LV2_PROGRAMS__UIInterface, + the UI MUST return an LV2_Programs_UI_Interface structure, which remains valid + for the lifetime of the UI. +*/ +typedef struct _LV2_Programs_UI_Interface { + /** + * select_program() + * + * This is exactly the same as select_program in LV2_Programs_Instance, + * but this struct relates to the UI instead of the plugin. + * + * When called, UIs should update their state to match the selected program. + */ + void (*select_program)(LV2UI_Handle handle, + uint32_t bank, + uint32_t program); + +} LV2_Programs_UI_Interface; + +/** + Feature data for LV2_PROGRAMS__Host. +*/ +typedef struct _LV2_Programs_Host { + /** + * Opaque host data. + */ + LV2_Programs_Handle handle; + + /** + * program_changed() + * + * Tell the host to reload a plugin's program. + * Parameter handle MUST be the 'handle' member of this struct. + * Parameter index is program index to change. + * When index is -1, host should reload all the programs. + * + * The plugin MUST NEVER call this function on a RT context or during run(). + * + * NOTE: This call is to inform the host about a program's bank, program or name change. + * It DOES NOT change the current selected program. + */ + void (*program_changed)(LV2_Programs_Handle handle, + int32_t index); + +} LV2_Programs_Host; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_PROGRAMS_H */ diff --git a/dpf/distrho/src/lv2/lv2_rtmempool.h b/dpf/distrho/src/lv2/lv2_rtmempool.h new file mode 100644 index 0000000..7988886 --- /dev/null +++ b/dpf/distrho/src/lv2/lv2_rtmempool.h @@ -0,0 +1,119 @@ +/* + LV2 realtime safe memory pool extension definition + This work is in public domain. + + This file 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. + + If you have questions, contact Filipe Coelho (aka falkTX) + or ask in #lad channel, FreeNode IRC network. +*/ + +/** + * @file lv2_rtmempool.h + * C header for the LV2 rtmempool extension . + * + */ + +#ifndef LV2_RTMEMPOOL_H +#define LV2_RTMEMPOOL_H + +#define LV2_RTSAFE_MEMORY_POOL_URI "http://kxstudio.sf.net/ns/lv2ext/rtmempool" +#define LV2_RTSAFE_MEMORY_POOL_PREFIX LV2_RTSAFE_MEMORY_POOL_URI "#" + +#define LV2_RTSAFE_MEMORY_POOL__Pool LV2_RTSAFE_MEMORY_POOL_URI "Pool" + +/** max size of memory pool name, in chars, including terminating zero char */ +#define LV2_RTSAFE_MEMORY_POOL_NAME_MAX 128 + +/** This extension used to be defined by a different URI */ +#define LV2_RTSAFE_MEMORY_POOL_DEPRECATED_URI "http://home.gna.org/lv2dynparam/rtmempool/v1" + +#ifdef __cplusplus +extern "C" { +#else +#include +#endif + +/** + * Opaque data to host data for LV2_RtMemPool_Pool. + */ +typedef void* LV2_RtMemPool_Handle; + +/** + * On instantiation, host must supply LV2_RTSAFE_MEMORY_POOL__Pool feature. + * LV2_Feature::data must be pointer to LV2_RtMemPool_Pool. + */ +typedef struct _LV2_RtMemPool_Pool { + /** + * This function is called when plugin wants to create memory pool + * + * may/will sleep + * + * @param pool_name pool name, for debug purposes, max RTSAFE_MEMORY_POOL_NAME_MAX chars, including terminating zero char. May be NULL. + * @param data_size memory chunk size + * @param min_preallocated min chunks preallocated + * @param max_preallocated max chunks preallocated + * + * @return Success status, true if successful + */ + bool (*create)(LV2_RtMemPool_Handle * handle_ptr, + const char * pool_name, + size_t data_size, + size_t min_preallocated, + size_t max_preallocated); + + /** + * This function is called when plugin wants to destroy previously created memory pool + * + * may/will sleep + */ + void (*destroy)(LV2_RtMemPool_Handle handle); + + /** + * This function is called when plugin wants to allocate memory in context where sleeping is not allowed + * + * will not sleep + * + * @return Pointer to allocated memory or NULL if memory no memory is available + */ + void * (*allocate_atomic)(LV2_RtMemPool_Handle handle); + + /** + * This function is called when plugin wants to allocate memory in context where sleeping is allowed + * + * may/will sleep + * + * @return Pointer to allocated memory or NULL if memory no memory is available (should not happen under normal conditions) + */ + void * (*allocate_sleepy)(LV2_RtMemPool_Handle handle); + + /** + * This function is called when plugin wants to deallocate previously allocated memory + * + * will not sleep + * + * @param memory_ptr pointer to previously allocated memory chunk + */ + void (*deallocate)(LV2_RtMemPool_Handle handle, + void * memory_ptr); + +} LV2_RtMemPool_Pool; + +/** + * Deprecated feature for backwards compatibility. + */ +typedef struct _LV2_RtMemPool_Pool_Deprecated { + unsigned char (*create)(const char*,size_t,size_t,size_t,LV2_RtMemPool_Handle*); + void (*destroy)(LV2_RtMemPool_Handle); + void* (*allocate_atomic)(LV2_RtMemPool_Handle); + void* (*allocate_sleepy)(LV2_RtMemPool_Handle); + void (*deallocate)(LV2_RtMemPool_Handle,void*); +} LV2_RtMemPool_Pool_Deprecated; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_RTMEMPOOL_H */ diff --git a/dpf/distrho/src/lv2/midi.h b/dpf/distrho/src/lv2/midi.h new file mode 100644 index 0000000..2c53c49 --- /dev/null +++ b/dpf/distrho/src/lv2/midi.h @@ -0,0 +1,226 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file midi.h + C definitions for the LV2 MIDI extension . +*/ + +#ifndef LV2_MIDI_H +#define LV2_MIDI_H + +#include + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +#define LV2_MIDI_URI "http://lv2plug.in/ns/ext/midi" +#define LV2_MIDI_PREFIX LV2_MIDI_URI "#" + +#define LV2_MIDI__ActiveSense LV2_MIDI_PREFIX "ActiveSense" +#define LV2_MIDI__Aftertouch LV2_MIDI_PREFIX "Aftertouch" +#define LV2_MIDI__Bender LV2_MIDI_PREFIX "Bender" +#define LV2_MIDI__ChannelPressure LV2_MIDI_PREFIX "ChannelPressure" +#define LV2_MIDI__Chunk LV2_MIDI_PREFIX "Chunk" +#define LV2_MIDI__Clock LV2_MIDI_PREFIX "Clock" +#define LV2_MIDI__Continue LV2_MIDI_PREFIX "Continue" +#define LV2_MIDI__Controller LV2_MIDI_PREFIX "Controller" +#define LV2_MIDI__MidiEvent LV2_MIDI_PREFIX "MidiEvent" +#define LV2_MIDI__NoteOff LV2_MIDI_PREFIX "NoteOff" +#define LV2_MIDI__NoteOn LV2_MIDI_PREFIX "NoteOn" +#define LV2_MIDI__ProgramChange LV2_MIDI_PREFIX "ProgramChange" +#define LV2_MIDI__QuarterFrame LV2_MIDI_PREFIX "QuarterFrame" +#define LV2_MIDI__Reset LV2_MIDI_PREFIX "Reset" +#define LV2_MIDI__SongPosition LV2_MIDI_PREFIX "SongPosition" +#define LV2_MIDI__SongSelect LV2_MIDI_PREFIX "SongSelect" +#define LV2_MIDI__Start LV2_MIDI_PREFIX "Start" +#define LV2_MIDI__Stop LV2_MIDI_PREFIX "Stop" +#define LV2_MIDI__SystemCommon LV2_MIDI_PREFIX "SystemCommon" +#define LV2_MIDI__SystemExclusive LV2_MIDI_PREFIX "SystemExclusive" +#define LV2_MIDI__SystemMessage LV2_MIDI_PREFIX "SystemMessage" +#define LV2_MIDI__SystemRealtime LV2_MIDI_PREFIX "SystemRealtime" +#define LV2_MIDI__Tick LV2_MIDI_PREFIX "Tick" +#define LV2_MIDI__TuneRequest LV2_MIDI_PREFIX "TuneRequest" +#define LV2_MIDI__VoiceMessage LV2_MIDI_PREFIX "VoiceMessage" +#define LV2_MIDI__benderValue LV2_MIDI_PREFIX "benderValue" +#define LV2_MIDI__binding LV2_MIDI_PREFIX "binding" +#define LV2_MIDI__byteNumber LV2_MIDI_PREFIX "byteNumber" +#define LV2_MIDI__channel LV2_MIDI_PREFIX "channel" +#define LV2_MIDI__chunk LV2_MIDI_PREFIX "chunk" +#define LV2_MIDI__controllerNumber LV2_MIDI_PREFIX "controllerNumber" +#define LV2_MIDI__controllerValue LV2_MIDI_PREFIX "controllerValue" +#define LV2_MIDI__noteNumber LV2_MIDI_PREFIX "noteNumber" +#define LV2_MIDI__pressure LV2_MIDI_PREFIX "pressure" +#define LV2_MIDI__programNumber LV2_MIDI_PREFIX "programNumber" +#define LV2_MIDI__property LV2_MIDI_PREFIX "property" +#define LV2_MIDI__songNumber LV2_MIDI_PREFIX "songNumber" +#define LV2_MIDI__songPosition LV2_MIDI_PREFIX "songPosition" +#define LV2_MIDI__status LV2_MIDI_PREFIX "status" +#define LV2_MIDI__statusMask LV2_MIDI_PREFIX "statusMask" +#define LV2_MIDI__velocity LV2_MIDI_PREFIX "velocity" + +/** + MIDI Message Type. + + This includes both voice messages (which have a channel) and system messages + (which do not), as well as a sentinel value for invalid messages. To get + the type of a message suitable for use in a switch statement, use + lv2_midi_get_type() on the status byte. +*/ +typedef enum { + LV2_MIDI_MSG_INVALID = 0, /**< Invalid Message */ + LV2_MIDI_MSG_NOTE_OFF = 0x80, /**< Note Off */ + LV2_MIDI_MSG_NOTE_ON = 0x90, /**< Note On */ + LV2_MIDI_MSG_NOTE_PRESSURE = 0xA0, /**< Note Pressure */ + LV2_MIDI_MSG_CONTROLLER = 0xB0, /**< Controller */ + LV2_MIDI_MSG_PGM_CHANGE = 0xC0, /**< Program Change */ + LV2_MIDI_MSG_CHANNEL_PRESSURE = 0xD0, /**< Channel Pressure */ + LV2_MIDI_MSG_BENDER = 0xE0, /**< Pitch Bender */ + LV2_MIDI_MSG_SYSTEM_EXCLUSIVE = 0xF0, /**< System Exclusive Begin */ + LV2_MIDI_MSG_MTC_QUARTER = 0xF1, /**< MTC Quarter Frame */ + LV2_MIDI_MSG_SONG_POS = 0xF2, /**< Song Position */ + LV2_MIDI_MSG_SONG_SELECT = 0xF3, /**< Song Select */ + LV2_MIDI_MSG_TUNE_REQUEST = 0xF6, /**< Tune Request */ + LV2_MIDI_MSG_CLOCK = 0xF8, /**< Clock */ + LV2_MIDI_MSG_START = 0xFA, /**< Start */ + LV2_MIDI_MSG_CONTINUE = 0xFB, /**< Continue */ + LV2_MIDI_MSG_STOP = 0xFC, /**< Stop */ + LV2_MIDI_MSG_ACTIVE_SENSE = 0xFE, /**< Active Sensing */ + LV2_MIDI_MSG_RESET = 0xFF /**< Reset */ +} LV2_Midi_Message_Type; + +/** + Standard MIDI Controller Numbers. +*/ +typedef enum { + LV2_MIDI_CTL_MSB_BANK = 0x00, /**< Bank Selection */ + LV2_MIDI_CTL_MSB_MODWHEEL = 0x01, /**< Modulation */ + LV2_MIDI_CTL_MSB_BREATH = 0x02, /**< Breath */ + LV2_MIDI_CTL_MSB_FOOT = 0x04, /**< Foot */ + LV2_MIDI_CTL_MSB_PORTAMENTO_TIME = 0x05, /**< Portamento Time */ + LV2_MIDI_CTL_MSB_DATA_ENTRY = 0x06, /**< Data Entry */ + LV2_MIDI_CTL_MSB_MAIN_VOLUME = 0x07, /**< Main Volume */ + LV2_MIDI_CTL_MSB_BALANCE = 0x08, /**< Balance */ + LV2_MIDI_CTL_MSB_PAN = 0x0A, /**< Panpot */ + LV2_MIDI_CTL_MSB_EXPRESSION = 0x0B, /**< Expression */ + LV2_MIDI_CTL_MSB_EFFECT1 = 0x0C, /**< Effect1 */ + LV2_MIDI_CTL_MSB_EFFECT2 = 0x0D, /**< Effect2 */ + LV2_MIDI_CTL_MSB_GENERAL_PURPOSE1 = 0x10, /**< General Purpose 1 */ + LV2_MIDI_CTL_MSB_GENERAL_PURPOSE2 = 0x11, /**< General Purpose 2 */ + LV2_MIDI_CTL_MSB_GENERAL_PURPOSE3 = 0x12, /**< General Purpose 3 */ + LV2_MIDI_CTL_MSB_GENERAL_PURPOSE4 = 0x13, /**< General Purpose 4 */ + LV2_MIDI_CTL_LSB_BANK = 0x20, /**< Bank Selection */ + LV2_MIDI_CTL_LSB_MODWHEEL = 0x21, /**< Modulation */ + LV2_MIDI_CTL_LSB_BREATH = 0x22, /**< Breath */ + LV2_MIDI_CTL_LSB_FOOT = 0x24, /**< Foot */ + LV2_MIDI_CTL_LSB_PORTAMENTO_TIME = 0x25, /**< Portamento Time */ + LV2_MIDI_CTL_LSB_DATA_ENTRY = 0x26, /**< Data Entry */ + LV2_MIDI_CTL_LSB_MAIN_VOLUME = 0x27, /**< Main Volume */ + LV2_MIDI_CTL_LSB_BALANCE = 0x28, /**< Balance */ + LV2_MIDI_CTL_LSB_PAN = 0x2A, /**< Panpot */ + LV2_MIDI_CTL_LSB_EXPRESSION = 0x2B, /**< Expression */ + LV2_MIDI_CTL_LSB_EFFECT1 = 0x2C, /**< Effect1 */ + LV2_MIDI_CTL_LSB_EFFECT2 = 0x2D, /**< Effect2 */ + LV2_MIDI_CTL_LSB_GENERAL_PURPOSE1 = 0x30, /**< General Purpose 1 */ + LV2_MIDI_CTL_LSB_GENERAL_PURPOSE2 = 0x31, /**< General Purpose 2 */ + LV2_MIDI_CTL_LSB_GENERAL_PURPOSE3 = 0x32, /**< General Purpose 3 */ + LV2_MIDI_CTL_LSB_GENERAL_PURPOSE4 = 0x33, /**< General Purpose 4 */ + LV2_MIDI_CTL_SUSTAIN = 0x40, /**< Sustain Pedal */ + LV2_MIDI_CTL_PORTAMENTO = 0x41, /**< Portamento */ + LV2_MIDI_CTL_SOSTENUTO = 0x42, /**< Sostenuto */ + LV2_MIDI_CTL_SOFT_PEDAL = 0x43, /**< Soft Pedal */ + LV2_MIDI_CTL_LEGATO_FOOTSWITCH = 0x44, /**< Legato Foot Switch */ + LV2_MIDI_CTL_HOLD2 = 0x45, /**< Hold2 */ + LV2_MIDI_CTL_SC1_SOUND_VARIATION = 0x46, /**< SC1 Sound Variation */ + LV2_MIDI_CTL_SC2_TIMBRE = 0x47, /**< SC2 Timbre */ + LV2_MIDI_CTL_SC3_RELEASE_TIME = 0x48, /**< SC3 Release Time */ + LV2_MIDI_CTL_SC4_ATTACK_TIME = 0x49, /**< SC4 Attack Time */ + LV2_MIDI_CTL_SC5_BRIGHTNESS = 0x4A, /**< SC5 Brightness */ + LV2_MIDI_CTL_SC6 = 0x4B, /**< SC6 */ + LV2_MIDI_CTL_SC7 = 0x4C, /**< SC7 */ + LV2_MIDI_CTL_SC8 = 0x4D, /**< SC8 */ + LV2_MIDI_CTL_SC9 = 0x4E, /**< SC9 */ + LV2_MIDI_CTL_SC10 = 0x4F, /**< SC10 */ + LV2_MIDI_CTL_GENERAL_PURPOSE5 = 0x50, /**< General Purpose 5 */ + LV2_MIDI_CTL_GENERAL_PURPOSE6 = 0x51, /**< General Purpose 6 */ + LV2_MIDI_CTL_GENERAL_PURPOSE7 = 0x52, /**< General Purpose 7 */ + LV2_MIDI_CTL_GENERAL_PURPOSE8 = 0x53, /**< General Purpose 8 */ + LV2_MIDI_CTL_PORTAMENTO_CONTROL = 0x54, /**< Portamento Control */ + LV2_MIDI_CTL_E1_REVERB_DEPTH = 0x5B, /**< E1 Reverb Depth */ + LV2_MIDI_CTL_E2_TREMOLO_DEPTH = 0x5C, /**< E2 Tremolo Depth */ + LV2_MIDI_CTL_E3_CHORUS_DEPTH = 0x5D, /**< E3 Chorus Depth */ + LV2_MIDI_CTL_E4_DETUNE_DEPTH = 0x5E, /**< E4 Detune Depth */ + LV2_MIDI_CTL_E5_PHASER_DEPTH = 0x5F, /**< E5 Phaser Depth */ + LV2_MIDI_CTL_DATA_INCREMENT = 0x60, /**< Data Increment */ + LV2_MIDI_CTL_DATA_DECREMENT = 0x61, /**< Data Decrement */ + LV2_MIDI_CTL_NRPN_LSB = 0x62, /**< Non-registered Parameter Number */ + LV2_MIDI_CTL_NRPN_MSB = 0x63, /**< Non-registered Parameter Number */ + LV2_MIDI_CTL_RPN_LSB = 0x64, /**< Registered Parameter Number */ + LV2_MIDI_CTL_RPN_MSB = 0x65, /**< Registered Parameter Number */ + LV2_MIDI_CTL_ALL_SOUNDS_OFF = 0x78, /**< All Sounds Off */ + LV2_MIDI_CTL_RESET_CONTROLLERS = 0x79, /**< Reset Controllers */ + LV2_MIDI_CTL_LOCAL_CONTROL_SWITCH = 0x7A, /**< Local Control Switch */ + LV2_MIDI_CTL_ALL_NOTES_OFF = 0x7B, /**< All Notes Off */ + LV2_MIDI_CTL_OMNI_OFF = 0x7C, /**< Omni Off */ + LV2_MIDI_CTL_OMNI_ON = 0x7D, /**< Omni On */ + LV2_MIDI_CTL_MONO1 = 0x7E, /**< Mono1 */ + LV2_MIDI_CTL_MONO2 = 0x7F /**< Mono2 */ +} LV2_Midi_Controller; + +/** + Return true iff @p msg is a MIDI voice message (which has a channel). +*/ +static inline bool +lv2_midi_is_voice_message(const uint8_t* msg) { + return msg[0] >= 0x80 && msg[0] < 0xF0; +} + +/** + Return true iff @p msg is a MIDI system message (which has no channel). +*/ +static inline bool +lv2_midi_is_system_message(const uint8_t* msg) { + switch (msg[0]) { + case 0xF4: case 0xF5: case 0xF7: case 0xF9: case 0xFD: + return false; + default: + return (msg[0] & 0xF0) == 0xF0; + } +} + +/** + Return the type of a MIDI message. + @param msg Pointer to the start (status byte) of a MIDI message. +*/ +static inline LV2_Midi_Message_Type +lv2_midi_message_type(const uint8_t* msg) { + if (lv2_midi_is_voice_message(msg)) { + return (LV2_Midi_Message_Type)(msg[0] & 0xF0); + } else if (lv2_midi_is_system_message(msg)) { + return (LV2_Midi_Message_Type)msg[0]; + } else { + return LV2_MIDI_MSG_INVALID; + } +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_MIDI_H */ diff --git a/dpf/distrho/src/lv2/morph.h b/dpf/distrho/src/lv2/morph.h new file mode 100644 index 0000000..df888df --- /dev/null +++ b/dpf/distrho/src/lv2/morph.h @@ -0,0 +1,34 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef LV2_MORPH_H +#define LV2_MORPH_H + +#include + +#include "lv2.h" +#include "urid.h" + +#define LV2_MORPH_URI "http://lv2plug.in/ns/ext/morph" +#define LV2_MORPH_PREFIX LV2_MORPH_URI "#" + +#define LV2_MORPH__AutoMorphPort LV2_MORPH_PREFIX "AutoMorphPort" +#define LV2_MORPH__MorphPort LV2_MORPH_PREFIX "MorphPort" +#define LV2_MORPH__interface LV2_MORPH_PREFIX "interface" +#define LV2_MORPH__supportsType LV2_MORPH_PREFIX "supportsType" +#define LV2_MORPH__currentType LV2_MORPH_PREFIX "currentType" + +#endif /* LV2_MORPH_H */ diff --git a/dpf/distrho/src/lv2/options.h b/dpf/distrho/src/lv2/options.h new file mode 100644 index 0000000..5437db5 --- /dev/null +++ b/dpf/distrho/src/lv2/options.h @@ -0,0 +1,132 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef LV2_OPTIONS_H +#define LV2_OPTIONS_H + +#include + +#include "urid.h" +#include "lv2.h" + +#define LV2_OPTIONS_URI "http://lv2plug.in/ns/ext/options" +#define LV2_OPTIONS_PREFIX LV2_OPTIONS_URI "#" + +#define LV2_OPTIONS__Option LV2_OPTIONS_PREFIX "Option" +#define LV2_OPTIONS__interface LV2_OPTIONS_PREFIX "interface" +#define LV2_OPTIONS__options LV2_OPTIONS_PREFIX "options" +#define LV2_OPTIONS__requiredOption LV2_OPTIONS_PREFIX "requiredOption" +#define LV2_OPTIONS__supportedOption LV2_OPTIONS_PREFIX "supportedOption" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + The context of an Option, which defines the subject it applies to. +*/ +typedef enum { + /** + This option applies to the instance itself. The subject must be + ignored. + */ + LV2_OPTIONS_INSTANCE, + + /** + This option applies to some named resource. The subject is a URI mapped + to an integer (a LV2_URID, like the key) + */ + LV2_OPTIONS_RESOURCE, + + /** + This option applies to some blank node. The subject is a blank node + identifier, which is valid only within the current local scope. + */ + LV2_OPTIONS_BLANK, + + /** + This option applies to a port on the instance. The subject is the + port's index. + */ + LV2_OPTIONS_PORT +} LV2_Options_Context; + +/** + An option. + + This is a property with a subject, also known as a triple or statement. + + This struct is useful anywhere a statement needs to be passed where no + memory ownership issues are present (since the value is a const pointer). + + Options can be passed to an instance via the feature LV2_OPTIONS__options + with data pointed to an array of options terminated by a zeroed option, or + accessed/manipulated using LV2_Options_Interface. +*/ +typedef struct _LV2_Options_Option { + LV2_Options_Context context; /**< Context (type of subject). */ + uint32_t subject; /**< Subject. */ + LV2_URID key; /**< Key (property). */ + uint32_t size; /**< Size of value in bytes. */ + LV2_URID type; /**< Type of value (datatype). */ + const void* value; /**< Pointer to value (object). */ +} LV2_Options_Option; + +/** A status code for option functions. */ +typedef enum { + LV2_OPTIONS_SUCCESS = 0, /**< Completed successfully. */ + LV2_OPTIONS_ERR_UNKNOWN = 1, /**< Unknown error. */ + LV2_OPTIONS_ERR_BAD_SUBJECT = 1 << 1, /**< Invalid/unsupported subject. */ + LV2_OPTIONS_ERR_BAD_KEY = 1 << 2, /**< Invalid/unsupported key. */ + LV2_OPTIONS_ERR_BAD_VALUE = 1 << 3 /**< Invalid/unsupported value. */ +} LV2_Options_Status; + +/** + Interface for dynamically setting options (LV2_OPTIONS__interface). +*/ +typedef struct _LV2_Options_Interface { + /** + Get the given options. + + Each element of the passed options array MUST have type, subject, and + key set. All other fields (size, type, value) MUST be initialised to + zero, and are set to the option value if such an option is found. + + This function is in the "instantiation" LV2 threading class, so no other + instance functions may be called concurrently. + + @return Bitwise OR of LV2_Options_Status values. + */ + uint32_t (*get)(LV2_Handle instance, + LV2_Options_Option* options); + + /** + Set the given options. + + This function is in the "instantiation" LV2 threading class, so no other + instance functions may be called concurrently. + + @return Bitwise OR of LV2_Options_Status values. + */ + uint32_t (*set)(LV2_Handle instance, + const LV2_Options_Option* options); +} LV2_Options_Interface; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_OPTIONS_H */ diff --git a/dpf/distrho/src/lv2/parameters.h b/dpf/distrho/src/lv2/parameters.h new file mode 100644 index 0000000..9c06bab --- /dev/null +++ b/dpf/distrho/src/lv2/parameters.h @@ -0,0 +1,49 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef LV2_PARAMETERS_H +#define LV2_PARAMETERS_H + +#define LV2_PARAMETERS_URI "http://lv2plug.in/ns/ext/parameters" +#define LV2_PARAMETERS_PREFIX LV2_PARAMETERS_URI "#" + +#define LV2_PARAMETERS__CompressorControls LV2_PARAMETERS_PREFIX "CompressorControls" +#define LV2_PARAMETERS__ControlGroup LV2_PARAMETERS_PREFIX "ControlGroup" +#define LV2_PARAMETERS__EnvelopeControls LV2_PARAMETERS_PREFIX "EnvelopeControls" +#define LV2_PARAMETERS__FilterControls LV2_PARAMETERS_PREFIX "FilterControls" +#define LV2_PARAMETERS__OscillatorControls LV2_PARAMETERS_PREFIX "OscillatorControls" +#define LV2_PARAMETERS__amplitude LV2_PARAMETERS_PREFIX "amplitude" +#define LV2_PARAMETERS__attack LV2_PARAMETERS_PREFIX "attack" +#define LV2_PARAMETERS__bypass LV2_PARAMETERS_PREFIX "bypass" +#define LV2_PARAMETERS__cutoffFrequency LV2_PARAMETERS_PREFIX "cutoffFrequency" +#define LV2_PARAMETERS__decay LV2_PARAMETERS_PREFIX "decay" +#define LV2_PARAMETERS__delay LV2_PARAMETERS_PREFIX "delay" +#define LV2_PARAMETERS__dryLevel LV2_PARAMETERS_PREFIX "dryLevel" +#define LV2_PARAMETERS__frequency LV2_PARAMETERS_PREFIX "frequency" +#define LV2_PARAMETERS__gain LV2_PARAMETERS_PREFIX "gain" +#define LV2_PARAMETERS__hold LV2_PARAMETERS_PREFIX "hold" +#define LV2_PARAMETERS__pulseWidth LV2_PARAMETERS_PREFIX "pulseWidth" +#define LV2_PARAMETERS__ratio LV2_PARAMETERS_PREFIX "ratio" +#define LV2_PARAMETERS__release LV2_PARAMETERS_PREFIX "release" +#define LV2_PARAMETERS__resonance LV2_PARAMETERS_PREFIX "resonance" +#define LV2_PARAMETERS__sampleRate LV2_PARAMETERS_PREFIX "sampleRate" +#define LV2_PARAMETERS__sustain LV2_PARAMETERS_PREFIX "sustain" +#define LV2_PARAMETERS__threshold LV2_PARAMETERS_PREFIX "threshold" +#define LV2_PARAMETERS__waveform LV2_PARAMETERS_PREFIX "waveform" +#define LV2_PARAMETERS__wetDryRatio LV2_PARAMETERS_PREFIX "wetDryRatio" +#define LV2_PARAMETERS__wetLevel LV2_PARAMETERS_PREFIX "wetLevel" + +#endif /* LV2_PARAMETERS_H */ diff --git a/dpf/distrho/src/lv2/patch.h b/dpf/distrho/src/lv2/patch.h new file mode 100644 index 0000000..3224264 --- /dev/null +++ b/dpf/distrho/src/lv2/patch.h @@ -0,0 +1,56 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file patch.h C header for the LV2 Patch extension + . + + The patch extension is purely data, this header merely defines URIs + for convenience. +*/ + +#ifndef LV2_PATCH_H +#define LV2_PATCH_H + +#define LV2_PATCH_URI "http://lv2plug.in/ns/ext/patch" +#define LV2_PATCH_PREFIX LV2_PATCH_URI "#" + +#define LV2_PATCH__Ack LV2_PATCH_PREFIX "Ack" +#define LV2_PATCH__Delete LV2_PATCH_PREFIX "Delete" +#define LV2_PATCH__Error LV2_PATCH_PREFIX "Error" +#define LV2_PATCH__Get LV2_PATCH_PREFIX "Get" +#define LV2_PATCH__Message LV2_PATCH_PREFIX "Message" +#define LV2_PATCH__Move LV2_PATCH_PREFIX "Move" +#define LV2_PATCH__Patch LV2_PATCH_PREFIX "Patch" +#define LV2_PATCH__Post LV2_PATCH_PREFIX "Post" +#define LV2_PATCH__Put LV2_PATCH_PREFIX "Put" +#define LV2_PATCH__Request LV2_PATCH_PREFIX "Request" +#define LV2_PATCH__Response LV2_PATCH_PREFIX "Response" +#define LV2_PATCH__Set LV2_PATCH_PREFIX "Set" +#define LV2_PATCH__add LV2_PATCH_PREFIX "add" +#define LV2_PATCH__body LV2_PATCH_PREFIX "body" +#define LV2_PATCH__destination LV2_PATCH_PREFIX "destination" +#define LV2_PATCH__property LV2_PATCH_PREFIX "property" +#define LV2_PATCH__readable LV2_PATCH_PREFIX "readable" +#define LV2_PATCH__remove LV2_PATCH_PREFIX "remove" +#define LV2_PATCH__request LV2_PATCH_PREFIX "request" +#define LV2_PATCH__subject LV2_PATCH_PREFIX "subject" +#define LV2_PATCH__sequenceNumber LV2_PATCH_PREFIX "sequenceNumber" +#define LV2_PATCH__value LV2_PATCH_PREFIX "value" +#define LV2_PATCH__wildcard LV2_PATCH_PREFIX "wildcard" +#define LV2_PATCH__writable LV2_PATCH_PREFIX "writable" + +#endif /* LV2_PATCH_H */ diff --git a/dpf/distrho/src/lv2/port-groups.h b/dpf/distrho/src/lv2/port-groups.h new file mode 100644 index 0000000..4dd8cf4 --- /dev/null +++ b/dpf/distrho/src/lv2/port-groups.h @@ -0,0 +1,64 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file port-groups.h + C definitions for the LV2 Port Groups extension + . +*/ + +#ifndef LV2_PORT_GROUPS_H +#define LV2_PORT_GROUPS_H + +#define LV2_PORT_GROUPS_URI "http://lv2plug.in/ns/ext/port-groups" +#define LV2_PORT_GROUPS_PREFIX LV2_PORT_GROUPS_URI "#" + +#define LV2_PORT_GROUPS__DiscreteGroup LV2_PORT_GROUPS_PREFIX "DiscreteGroup" +#define LV2_PORT_GROUPS__Element LV2_PORT_GROUPS_PREFIX "Element" +#define LV2_PORT_GROUPS__FivePointOneGroup LV2_PORT_GROUPS_PREFIX "FivePointOneGroup" +#define LV2_PORT_GROUPS__FivePointZeroGroup LV2_PORT_GROUPS_PREFIX "FivePointZeroGroup" +#define LV2_PORT_GROUPS__FourPointZeroGroup LV2_PORT_GROUPS_PREFIX "FourPointZeroGroup" +#define LV2_PORT_GROUPS__Group LV2_PORT_GROUPS_PREFIX "Group" +#define LV2_PORT_GROUPS__InputGroup LV2_PORT_GROUPS_PREFIX "InputGroup" +#define LV2_PORT_GROUPS__MidSideGroup LV2_PORT_GROUPS_PREFIX "MidSideGroup" +#define LV2_PORT_GROUPS__MonoGroup LV2_PORT_GROUPS_PREFIX "MonoGroup" +#define LV2_PORT_GROUPS__OutputGroup LV2_PORT_GROUPS_PREFIX "OutputGroup" +#define LV2_PORT_GROUPS__SevenPointOneGroup LV2_PORT_GROUPS_PREFIX "SevenPointOneGroup" +#define LV2_PORT_GROUPS__SevenPointOneWideGroup LV2_PORT_GROUPS_PREFIX "SevenPointOneWideGroup" +#define LV2_PORT_GROUPS__SixPointOneGroup LV2_PORT_GROUPS_PREFIX "SixPointOneGroup" +#define LV2_PORT_GROUPS__StereoGroup LV2_PORT_GROUPS_PREFIX "StereoGroup" +#define LV2_PORT_GROUPS__ThreePointZeroGroup LV2_PORT_GROUPS_PREFIX "ThreePointZeroGroup" +#define LV2_PORT_GROUPS__center LV2_PORT_GROUPS_PREFIX "center" +#define LV2_PORT_GROUPS__centerLeft LV2_PORT_GROUPS_PREFIX "centerLeft" +#define LV2_PORT_GROUPS__centerRight LV2_PORT_GROUPS_PREFIX "centerRight" +#define LV2_PORT_GROUPS__element LV2_PORT_GROUPS_PREFIX "element" +#define LV2_PORT_GROUPS__group LV2_PORT_GROUPS_PREFIX "group" +#define LV2_PORT_GROUPS__left LV2_PORT_GROUPS_PREFIX "left" +#define LV2_PORT_GROUPS__lowFrequencyEffects LV2_PORT_GROUPS_PREFIX "lowFrequencyEffects" +#define LV2_PORT_GROUPS__mainInput LV2_PORT_GROUPS_PREFIX "mainInput" +#define LV2_PORT_GROUPS__mainOutput LV2_PORT_GROUPS_PREFIX "mainOutput" +#define LV2_PORT_GROUPS__rearCenter LV2_PORT_GROUPS_PREFIX "rearCenter" +#define LV2_PORT_GROUPS__rearLeft LV2_PORT_GROUPS_PREFIX "rearLeft" +#define LV2_PORT_GROUPS__rearRight LV2_PORT_GROUPS_PREFIX "rearRight" +#define LV2_PORT_GROUPS__right LV2_PORT_GROUPS_PREFIX "right" +#define LV2_PORT_GROUPS__side LV2_PORT_GROUPS_PREFIX "side" +#define LV2_PORT_GROUPS__sideChainOf LV2_PORT_GROUPS_PREFIX "sideChainOf" +#define LV2_PORT_GROUPS__sideLeft LV2_PORT_GROUPS_PREFIX "sideLeft" +#define LV2_PORT_GROUPS__sideRight LV2_PORT_GROUPS_PREFIX "sideRight" +#define LV2_PORT_GROUPS__source LV2_PORT_GROUPS_PREFIX "source" +#define LV2_PORT_GROUPS__subGroupOf LV2_PORT_GROUPS_PREFIX "subGroupOf" + +#endif /* LV2_PORT_GROUPS_H */ diff --git a/dpf/distrho/src/lv2/port-props.h b/dpf/distrho/src/lv2/port-props.h new file mode 100644 index 0000000..11274cc --- /dev/null +++ b/dpf/distrho/src/lv2/port-props.h @@ -0,0 +1,42 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file port-props.h + C definitions for the LV2 Port Props extension + . +*/ + +#ifndef LV2_PORT_PROPS_H +#define LV2_PORT_PROPS_H + +#define LV2_PORT_PROPS_URI "http://lv2plug.in/ns/ext/port-props" +#define LV2_PORT_PROPS_PREFIX LV2_PORT_PROPS_URI "#" + +#define LV2_PORT_PROPS__causesArtifacts LV2_PORT_PROPS_PREFIX "causesArtifacts" +#define LV2_PORT_PROPS__continuousCV LV2_PORT_PROPS_PREFIX "continuousCV" +#define LV2_PORT_PROPS__discreteCV LV2_PORT_PROPS_PREFIX "discreteCV" +#define LV2_PORT_PROPS__displayPriority LV2_PORT_PROPS_PREFIX "displayPriority" +#define LV2_PORT_PROPS__expensive LV2_PORT_PROPS_PREFIX "expensive" +#define LV2_PORT_PROPS__hasStrictBounds LV2_PORT_PROPS_PREFIX "hasStrictBounds" +#define LV2_PORT_PROPS__logarithmic LV2_PORT_PROPS_PREFIX "logarithmic" +#define LV2_PORT_PROPS__notAutomatic LV2_PORT_PROPS_PREFIX "notAutomatic" +#define LV2_PORT_PROPS__notOnGUI LV2_PORT_PROPS_PREFIX "notOnGUI" +#define LV2_PORT_PROPS__rangeSteps LV2_PORT_PROPS_PREFIX "rangeSteps" +#define LV2_PORT_PROPS__supportsStrictBounds LV2_PORT_PROPS_PREFIX "supportsStrictBounds" +#define LV2_PORT_PROPS__trigger LV2_PORT_PROPS_PREFIX "trigger" + +#endif /* LV2_PORT_PROPS_H */ diff --git a/dpf/distrho/src/lv2/presets.h b/dpf/distrho/src/lv2/presets.h new file mode 100644 index 0000000..4851feb --- /dev/null +++ b/dpf/distrho/src/lv2/presets.h @@ -0,0 +1,34 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file presets.h + + C definitions for the LV2 Presets extension + . +*/ + +#ifndef LV2_PRESETS_H +#define LV2_PRESETS_H + +#define LV2_PRESETS_URI "http://lv2plug.in/ns/ext/presets" +#define LV2_PRESETS_PREFIX LV2_PRESETS_URI "#" + +#define LV2_PRESETS__Preset LV2_PRESETS_PREFIX "Preset" +#define LV2_PRESETS__preset LV2_PRESETS_PREFIX "preset" +#define LV2_PRESETS__value LV2_PRESETS_PREFIX "value" + +#endif /* LV2_PRESETS_H */ diff --git a/dpf/distrho/src/lv2/resize-port.h b/dpf/distrho/src/lv2/resize-port.h new file mode 100644 index 0000000..fa3abd7 --- /dev/null +++ b/dpf/distrho/src/lv2/resize-port.h @@ -0,0 +1,72 @@ +/* + Copyright 2007-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef LV2_RESIZE_PORT_H +#define LV2_RESIZE_PORT_H + +#include +#include + +#define LV2_RESIZE_PORT_URI "http://lv2plug.in/ns/ext/resize-port" +#define LV2_RESIZE_PORT_PREFIX LV2_RESIZE_PORT_URI "#" + +#define LV2_RESIZE_PORT__asLargeAs LV2_RESIZE_PORT_PREFIX "asLargeAs" +#define LV2_RESIZE_PORT__minimumSize LV2_RESIZE_PORT_PREFIX "minimumSize" +#define LV2_RESIZE_PORT__resize LV2_RESIZE_PORT_PREFIX "resize" + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +/** A status code for state functions. */ +typedef enum { + LV2_RESIZE_PORT_SUCCESS = 0, /**< Completed successfully. */ + LV2_RESIZE_PORT_ERR_UNKNOWN = 1, /**< Unknown error. */ + LV2_RESIZE_PORT_ERR_NO_SPACE = 2 /**< Insufficient space. */ +} LV2_Resize_Port_Status; + +typedef void* LV2_Resize_Port_Feature_Data; + +typedef struct { + LV2_Resize_Port_Feature_Data data; + + /** + Resize a port buffer to at least @a size bytes. + + This function MAY return an error, in which case the port buffer was not + resized and the port is still connected to the same location. Plugins + MUST gracefully handle this situation. + + This function is in the audio threading class. + + The host MUST preserve the contents of the port buffer when resizing. + + Plugins MAY resize a port many times in a single run callback. Hosts + SHOULD make this as inexpensive as possible. + */ + LV2_Resize_Port_Status (*resize)(LV2_Resize_Port_Feature_Data data, + uint32_t index, + size_t size); +} LV2_Resize_Port_Resize; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_RESIZE_PORT_H */ + diff --git a/dpf/distrho/src/lv2/state.h b/dpf/distrho/src/lv2/state.h new file mode 100644 index 0000000..09787d9 --- /dev/null +++ b/dpf/distrho/src/lv2/state.h @@ -0,0 +1,352 @@ +/* + Copyright 2010-2012 David Robillard + Copyright 2010 Leonard Ritter + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file state.h + C API for the LV2 State extension . +*/ + +#ifndef LV2_STATE_H +#define LV2_STATE_H + +#include +#include + +#include "lv2.h" + +#define LV2_STATE_URI "http://lv2plug.in/ns/ext/state" +#define LV2_STATE_PREFIX LV2_STATE_URI "#" + +#define LV2_STATE__State LV2_STATE_PREFIX "State" +#define LV2_STATE__interface LV2_STATE_PREFIX "interface" +#define LV2_STATE__loadDefaultState LV2_STATE_PREFIX "loadDefaultState" +#define LV2_STATE__makePath LV2_STATE_PREFIX "makePath" +#define LV2_STATE__mapPath LV2_STATE_PREFIX "mapPath" +#define LV2_STATE__state LV2_STATE_PREFIX "state" + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +typedef void* LV2_State_Handle; +typedef void* LV2_State_Map_Path_Handle; +typedef void* LV2_State_Make_Path_Handle; + +/** + Flags describing value characteristics. + + These flags are used along with the value's type URI to determine how to + (de-)serialise the value data, or whether it is even possible to do so. +*/ +typedef enum { + /** + Plain Old Data. + + Values with this flag contain no pointers or references to other areas + of memory. It is safe to copy POD values with a simple memcpy and store + them for the duration of the process. A POD value is not necessarily + safe to trasmit between processes or machines (e.g. filenames are POD), + see LV2_STATE_IS_PORTABLE for details. + + Implementations MUST NOT attempt to copy or serialise a non-POD value if + they do not understand its type (and thus know how to correctly do so). + */ + LV2_STATE_IS_POD = 1, + + /** + Portable (architecture independent) data. + + Values with this flag are in a format that is usable on any + architecture. A portable value saved on one machine can be restored on + another machine regardless of architecture. The format of portable + values MUST NOT depend on architecture-specific properties like + endianness or alignment. Portable values MUST NOT contain filenames. + */ + LV2_STATE_IS_PORTABLE = 1 << 1, + + /** + Native data. + + This flag is used by the host to indicate that the saved data is only + going to be used locally in the currently running process (e.g. for + instance duplication or snapshots), so the plugin should use the most + efficient representation possible and not worry about serialisation + and portability. + */ + LV2_STATE_IS_NATIVE = 1 << 2 +} LV2_State_Flags; + +/** A status code for state functions. */ +typedef enum { + LV2_STATE_SUCCESS = 0, /**< Completed successfully. */ + LV2_STATE_ERR_UNKNOWN = 1, /**< Unknown error. */ + LV2_STATE_ERR_BAD_TYPE = 2, /**< Failed due to unsupported type. */ + LV2_STATE_ERR_BAD_FLAGS = 3, /**< Failed due to unsupported flags. */ + LV2_STATE_ERR_NO_FEATURE = 4, /**< Failed due to missing features. */ + LV2_STATE_ERR_NO_PROPERTY = 5 /**< Failed due to missing property. */ +} LV2_State_Status; + +/** + A host-provided function to store a property. + @param handle Must be the handle passed to LV2_State_Interface.save(). + @param key The key to store @p value under (URID). + @param value Pointer to the value to be stored. + @param size The size of @p value in bytes. + @param type The type of @p value (URID). + @param flags LV2_State_Flags for @p value. + @return 0 on success, otherwise a non-zero error code. + + The host passes a callback of this type to LV2_State_Interface.save(). This + callback is called repeatedly by the plugin to store all the properties that + describe its current state. + + DO NOT INVENT NONSENSE URI SCHEMES FOR THE KEY. Best is to use keys from + existing vocabularies. If nothing appropriate is available, use http URIs + that point to somewhere you can host documents so documentation can be made + resolvable (e.g. a child of the plugin or project URI). If this is not + possible, invent a URN scheme, e.g. urn:myproj:whatever. The plugin MUST + NOT pass an invalid URI key. + + The host MAY fail to store a property for whatever reason, but SHOULD + store any property that is LV2_STATE_IS_POD and LV2_STATE_IS_PORTABLE. + Implementations SHOULD use the types from the LV2 Atom extension + (http://lv2plug.in/ns/ext/atom) wherever possible. The plugin SHOULD + attempt to fall-back and avoid the error if possible. + + Note that @p size MUST be > 0, and @p value MUST point to a valid region of + memory @p size bytes long (this is required to make restore unambiguous). + + The plugin MUST NOT attempt to use this function outside of the + LV2_State_Interface.restore() context. +*/ +typedef LV2_State_Status (*LV2_State_Store_Function)( + LV2_State_Handle handle, + uint32_t key, + const void* value, + size_t size, + uint32_t type, + uint32_t flags); + +/** + A host-provided function to retrieve a property. + @param handle Must be the handle passed to LV2_State_Interface.restore(). + @param key The key of the property to retrieve (URID). + @param size (Output) If non-NULL, set to the size of the restored value. + @param type (Output) If non-NULL, set to the type of the restored value. + @param flags (Output) If non-NULL, set to the flags for the restored value. + @return A pointer to the restored value (object), or NULL if no value + has been stored under @p key. + + A callback of this type is passed by the host to + LV2_State_Interface.restore(). This callback is called repeatedly by the + plugin to retrieve any properties it requires to restore its state. + + The returned value MUST remain valid until LV2_State_Interface.restore() + returns. The plugin MUST NOT attempt to use this function, or any value + returned from it, outside of the LV2_State_Interface.restore() context. +*/ +typedef const void* (*LV2_State_Retrieve_Function)( + LV2_State_Handle handle, + uint32_t key, + size_t* size, + uint32_t* type, + uint32_t* flags); + +/** + LV2 Plugin State Interface. + + When the plugin's extension_data is called with argument + LV2_STATE__interface, the plugin MUST return an LV2_State_Interface + structure, which remains valid for the lifetime of the plugin. + + The host can use the contained function pointers to save and restore the + state of a plugin instance at any time, provided the threading restrictions + of the functions are met. + + Stored data is only guaranteed to be compatible between instances of plugins + with the same URI (i.e. if a change to a plugin would cause a fatal error + when restoring state saved by a previous version of that plugin, the plugin + URI MUST change just as it must when ports change incompatibly). Plugin + authors should consider this possibility, and always store sensible data + with meaningful types to avoid such problems in the future. +*/ +typedef struct _LV2_State_Interface { + /** + Save plugin state using a host-provided @p store callback. + + @param instance The instance handle of the plugin. + @param store The host-provided store callback. + @param handle An opaque pointer to host data which MUST be passed as the + handle parameter to @p store if it is called. + @param flags Flags describing desired properties of this save. These + flags may be used to determine the most appropriate values to store. + @param features Extensible parameter for passing any additional + features to be used for this save. + + The plugin is expected to store everything necessary to completely + restore its state later. Plugins SHOULD store simple POD data whenever + possible, and consider the possibility of state being restored much + later on a different machine. + + The @p handle pointer and @p store function MUST NOT be used + beyond the scope of save(). + + This function has its own special threading class: it may not be called + concurrently with any "Instantiation" function, but it may be called + concurrently with functions in any other class, unless the definition of + that class prohibits it (e.g. it may not be called concurrently with a + "Discovery" function, but it may be called concurrently with an "Audio" + function. The plugin is responsible for any locking or lock-free + techniques necessary to make this possible. + + Note that in the simple case where state is only modified by restore(), + there are no synchronization issues since save() is never called + concurrently with restore() (though run() may read it during a save). + + Plugins that dynamically modify state while running, however, must take + care to do so in such a way that a concurrent call to save() will save a + consistent representation of plugin state for a single instant in time. + */ + LV2_State_Status (*save)(LV2_Handle instance, + LV2_State_Store_Function store, + LV2_State_Handle handle, + uint32_t flags, + const LV2_Feature *const * features); + + /** + Restore plugin state using a host-provided @p retrieve callback. + + @param instance The instance handle of the plugin. + @param retrieve The host-provided retrieve callback. + @param handle An opaque pointer to host data which MUST be passed as the + handle parameter to @p retrieve if it is called. + @param flags Currently unused. + @param features Extensible parameter for passing any additional + features to be used for this restore. + + The plugin MAY assume a restored value was set by a previous call to + LV2_State_Interface.save() by a plugin with the same URI. + + The plugin MUST gracefully fall back to a default value when a value can + not be retrieved. This allows the host to reset the plugin state with + an empty map. + + The @p handle pointer and @p store function MUST NOT be used + beyond the scope of restore(). + + This function is in the "Instantiation" threading class as defined by + LV2. This means it MUST NOT be called concurrently with any other + function on the same plugin instance. + */ + LV2_State_Status (*restore)(LV2_Handle instance, + LV2_State_Retrieve_Function retrieve, + LV2_State_Handle handle, + uint32_t flags, + const LV2_Feature *const * features); +} LV2_State_Interface; + +/** + Feature data for state:mapPath (LV2_STATE__mapPath). +*/ +typedef struct { + /** + Opaque host data. + */ + LV2_State_Map_Path_Handle handle; + + /** + Map an absolute path to an abstract path for use in plugin state. + @param handle MUST be the @p handle member of this struct. + @param absolute_path The absolute path of a file. + @return An abstract path suitable for use in plugin state. + + The plugin MUST use this function to map any paths that will be stored + in plugin state. The returned value is an abstract path which MAY not + be an actual file system path; @ref absolute_path() MUST be used to map + it to an actual path in order to use the file. + + Plugins MUST NOT make any assumptions about abstract paths except that + they can be mapped back to the absolute path of the "same" file (though + not necessarily the same original path) using @ref absolute_path(). + + This function may only be called within the context of + LV2_State_Interface methods. The caller is responsible for freeing the + returned value with free(). + */ + char* (*abstract_path)(LV2_State_Map_Path_Handle handle, + const char* absolute_path); + + /** + Map an abstract path from plugin state to an absolute path. + @param handle MUST be the @p handle member of this struct. + @param abstract_path An abstract path (e.g. a path from plugin state). + @return An absolute file system path. + + The plugin MUST use this function in order to actually open or otherwise + use any paths loaded from plugin state. + + This function may only be called within the context of + LV2_State_Interface methods. The caller is responsible for freeing the + returned value with free(). + */ + char* (*absolute_path)(LV2_State_Map_Path_Handle handle, + const char* abstract_path); +} LV2_State_Map_Path; + +/** + Feature data for state:makePath (@ref LV2_STATE__makePath). +*/ +typedef struct { + /** + Opaque host data. + */ + LV2_State_Make_Path_Handle handle; + + /** + Return a path the plugin may use to create a new file. + @param handle MUST be the @p handle member of this struct. + @param path The path of the new file within a namespace unique to this + plugin instance. + @return The absolute path to use for the new file. + + This function can be used by plugins to create files and directories, + either at state saving time (if this feature is passed to + LV2_State_Interface.save()) or any time (if this feature is passed to + LV2_Descriptor.instantiate()). + + The host MUST do whatever is necessary for the plugin to be able to + create a file at the returned path (e.g. using fopen), including + creating any leading directories. + + If this function is passed to LV2_Descriptor.instantiate(), it may be + called from any non-realtime context. If it is passed to + LV2_State_Interface.save(), it may only be called within the dynamic + scope of that function call. + + The caller is responsible for freeing the returned value with free(). + */ + char* (*path)(LV2_State_Make_Path_Handle handle, + const char* path); +} LV2_State_Make_Path; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_STATE_H */ diff --git a/dpf/distrho/src/lv2/time.h b/dpf/distrho/src/lv2/time.h new file mode 100644 index 0000000..3bb0614 --- /dev/null +++ b/dpf/distrho/src/lv2/time.h @@ -0,0 +1,49 @@ +/* + Copyright 2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file time.h C header for the LV2 Time extension + . +*/ + +#ifndef LV2_TIME_H +#define LV2_TIME_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define LV2_TIME_URI "http://lv2plug.in/ns/ext/time" + +#define LV2_TIME__Time LV2_TIME_URI "#Time" +#define LV2_TIME__Position LV2_TIME_URI "#Position" +#define LV2_TIME__Rate LV2_TIME_URI "#Rate" +#define LV2_TIME__position LV2_TIME_URI "#position" +#define LV2_TIME__barBeat LV2_TIME_URI "#barBeat" +#define LV2_TIME__bar LV2_TIME_URI "#bar" +#define LV2_TIME__beat LV2_TIME_URI "#beat" +#define LV2_TIME__beatUnit LV2_TIME_URI "#beatUnit" +#define LV2_TIME__beatsPerBar LV2_TIME_URI "#beatsPerBar" +#define LV2_TIME__beatsPerMinute LV2_TIME_URI "#beatsPerMinute" +#define LV2_TIME__frame LV2_TIME_URI "#frame" +#define LV2_TIME__framesPerSecond LV2_TIME_URI "#framesPerSecond" +#define LV2_TIME__speed LV2_TIME_URI "#speed" + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_TIME_H */ diff --git a/dpf/distrho/src/lv2/ui.h b/dpf/distrho/src/lv2/ui.h new file mode 100644 index 0000000..9ee4bd1 --- /dev/null +++ b/dpf/distrho/src/lv2/ui.h @@ -0,0 +1,430 @@ +/* + LV2 UI Extension + Copyright 2009-2014 David Robillard + Copyright 2006-2011 Lars Luthman + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file ui.h User Interface API. + + For high-level documentation, see . +*/ + +#ifndef LV2_UI_H +#define LV2_UI_H + +#include + +#include "lv2.h" + +#define LV2_UI_URI "http://lv2plug.in/ns/extensions/ui" +#define LV2_UI_PREFIX LV2_UI_URI "#" + +#define LV2_UI__CocoaUI LV2_UI_PREFIX "CocoaUI" +#define LV2_UI__Gtk3UI LV2_UI_PREFIX "Gtk3UI" +#define LV2_UI__GtkUI LV2_UI_PREFIX "GtkUI" +#define LV2_UI__PortNotification LV2_UI_PREFIX "PortNotification" +#define LV2_UI__Qt4UI LV2_UI_PREFIX "Qt4UI" +#define LV2_UI__UI LV2_UI_PREFIX "UI" +#define LV2_UI__WindowsUI LV2_UI_PREFIX "WindowsUI" +#define LV2_UI__X11UI LV2_UI_PREFIX "X11UI" +#define LV2_UI__binary LV2_UI_PREFIX "binary" +#define LV2_UI__fixedSize LV2_UI_PREFIX "fixedSize" +#define LV2_UI__idleInterface LV2_UI_PREFIX "idleInterface" +#define LV2_UI__noUserResize LV2_UI_PREFIX "noUserResize" +#define LV2_UI__notifyType LV2_UI_PREFIX "notifyType" +#define LV2_UI__parent LV2_UI_PREFIX "parent" +#define LV2_UI__plugin LV2_UI_PREFIX "plugin" +#define LV2_UI__portIndex LV2_UI_PREFIX "portIndex" +#define LV2_UI__portMap LV2_UI_PREFIX "portMap" +#define LV2_UI__portNotification LV2_UI_PREFIX "portNotification" +#define LV2_UI__portSubscribe LV2_UI_PREFIX "portSubscribe" +#define LV2_UI__resize LV2_UI_PREFIX "resize" +#define LV2_UI__showInterface LV2_UI_PREFIX "showInterface" +#define LV2_UI__touch LV2_UI_PREFIX "touch" +#define LV2_UI__ui LV2_UI_PREFIX "ui" +#define LV2_UI__updateRate LV2_UI_PREFIX "updateRate" +#define LV2_UI__windowTitle LV2_UI_PREFIX "windowTitle" + +/** + The index returned by LV2_UI_Port_Port::port_index() for unknown ports. +*/ +#define LV2UI_INVALID_PORT_INDEX ((uint32_t)-1) + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +/** + A pointer to some widget or other type of UI handle. + + The actual type is defined by the type of the UI. +*/ +typedef void* LV2UI_Widget; + +/** + A pointer to UI instance internals. + + The host may compare this to NULL, but otherwise MUST NOT interpret it. +*/ +typedef void* LV2UI_Handle; + +/** + A pointer to a controller provided by the host. + + The UI may compare this to NULL, but otherwise MUST NOT interpret it. +*/ +typedef void* LV2UI_Controller; + +/** + A pointer to opaque data for a feature. +*/ +typedef void* LV2UI_Feature_Handle; + +/** + A host-provided function that sends data to a plugin's input ports. + + The @p buffer parameter must point to a block of data, @p buffer_size bytes + large. The format of this data and how the host should use it is defined by + the @p port_protocol. This buffer is owned by the UI and is only valid for + the duration of this call. + + The @p port_protocol parameter should either be 0 or the URID for a + ui:PortProtocol. If it is 0, the protocol is implicitly ui:floatProtocol, + the port MUST be an lv2:ControlPort input, @p buffer MUST point to a single + float value, and @p buffer_size MUST be sizeof(float). + + The UI SHOULD NOT use a protocol not supported by the host, but the host + MUST gracefully ignore any protocol it does not understand. +*/ +typedef void (*LV2UI_Write_Function)(LV2UI_Controller controller, + uint32_t port_index, + uint32_t buffer_size, + uint32_t port_protocol, + const void* buffer); + +/** + A plugin UI. + + A pointer to an object of this type is returned by the lv2ui_descriptor() + function. +*/ +typedef struct _LV2UI_Descriptor { + /** + The URI for this UI (not for the plugin it controls). + */ + const char* URI; + + /** + Create a new UI and return a handle to it. This function works + similarly to LV2_Descriptor::instantiate(). + + @param descriptor The descriptor for the UI to instantiate. + + @param plugin_uri The URI of the plugin that this UI will control. + + @param bundle_path The path to the bundle containing this UI, including + the trailing directory separator. + + @param write_function A function that the UI can use to send data to the + plugin's input ports. + + @param controller A handle for the plugin instance to be passed as the + first parameter of UI methods. + + @param widget (output) widget pointer. The UI points this at its main + widget, which has the type defined by the UI type in the data file. + + @param features An array of LV2_Feature pointers. The host must pass + all feature URIs that it and the UI supports and any additional data, as + in LV2_Descriptor::instantiate(). Note that UI features and plugin + features are not necessarily the same. + + */ + LV2UI_Handle (*instantiate)(const struct _LV2UI_Descriptor* descriptor, + const char* plugin_uri, + const char* bundle_path, + LV2UI_Write_Function write_function, + LV2UI_Controller controller, + LV2UI_Widget* widget, + const LV2_Feature* const* features); + + + /** + Destroy the UI. The host must not try to access the widget after + calling this function. + */ + void (*cleanup)(LV2UI_Handle ui); + + /** + Tell the UI that something interesting has happened at a plugin port. + + What is "interesting" and how it is written to @p buffer is defined by + @p format, which has the same meaning as in LV2UI_Write_Function(). + Format 0 is a special case for lv2:ControlPort, where this function + should be called when the port value changes (but not necessarily for + every change), @p buffer_size must be sizeof(float), and @p buffer + points to a single IEEE-754 float. + + By default, the host should only call this function for lv2:ControlPort + inputs. However, the UI can request updates for other ports statically + with ui:portNotification or dynamicaly with ui:portSubscribe. + + The UI MUST NOT retain any reference to @p buffer after this function + returns, it is only valid for the duration of the call. + + This member may be NULL if the UI is not interested in any port events. + */ + void (*port_event)(LV2UI_Handle ui, + uint32_t port_index, + uint32_t buffer_size, + uint32_t format, + const void* buffer); + + /** + Return a data structure associated with an extension URI, typically an + interface struct with additional function pointers + + This member may be set to NULL if the UI is not interested in supporting + any extensions. This is similar to LV2_Descriptor::extension_data(). + + */ + const void* (*extension_data)(const char* uri); +} LV2UI_Descriptor; + +/** + Feature/interface for resizable UIs (LV2_UI__resize). + + This structure is used in two ways: as a feature passed by the host via + LV2UI_Descriptor::instantiate(), or as an interface provided by a UI via + LV2UI_Descriptor::extension_data()). +*/ +typedef struct _LV2UI_Resize { + /** + Pointer to opaque data which must be passed to ui_resize(). + */ + LV2UI_Feature_Handle handle; + + /** + Request/advertise a size change. + + When provided by the host, the UI may call this function to inform the + host about the size of the UI. + + When provided by the UI, the host may call this function to notify the + UI that it should change its size accordingly. + + @return 0 on success. + */ + int (*ui_resize)(LV2UI_Feature_Handle handle, int width, int height); +} LV2UI_Resize; + +/** + Feature to map port symbols to UIs. + + This can be used by the UI to get the index for a port with the given + symbol. This makes it possible to implement and distribute a UI separately + from the plugin (since symbol, unlike index, is a stable port identifier). +*/ +typedef struct _LV2UI_Port_Map { + /** + Pointer to opaque data which must be passed to port_index(). + */ + LV2UI_Feature_Handle handle; + + /** + Get the index for the port with the given @p symbol. + + @return The index of the port, or LV2UI_INVALID_PORT_INDEX if no such + port is found. + */ + uint32_t (*port_index)(LV2UI_Feature_Handle handle, const char* symbol); +} LV2UI_Port_Map; + +/** + Feature to subscribe to port updates (LV2_UI__portSubscribe). +*/ +typedef struct _LV2UI_Port_Subscribe { + /** + Pointer to opaque data which must be passed to subscribe() and + unsubscribe(). + */ + LV2UI_Feature_Handle handle; + + /** + Subscribe to updates for a port. + + This means that the host will call the UI's port_event() function when + the port value changes (as defined by protocol). + + Calling this function with the same @p port_index and @p port_protocol + as an already active subscription has no effect. + + @param handle The handle field of this struct. + @param port_index The index of the port. + @param port_protocol The URID of the ui:PortProtocol. + @param features Features for this subscription. + @return 0 on success. + */ + uint32_t (*subscribe)(LV2UI_Feature_Handle handle, + uint32_t port_index, + uint32_t port_protocol, + const LV2_Feature* const* features); + + /** + Unsubscribe from updates for a port. + + This means that the host will cease calling calling port_event() when + the port value changes. + + Calling this function with a @p port_index and @p port_protocol that + does not refer to an active port subscription has no effect. + + @param handle The handle field of this struct. + @param port_index The index of the port. + @param port_protocol The URID of the ui:PortProtocol. + @param features Features for this subscription. + @return 0 on success. + */ + uint32_t (*unsubscribe)(LV2UI_Feature_Handle handle, + uint32_t port_index, + uint32_t port_protocol, + const LV2_Feature* const* features); +} LV2UI_Port_Subscribe; + +/** + A feature to notify the host that the user has grabbed a UI control. +*/ +typedef struct _LV2UI_Touch { + /** + Pointer to opaque data which must be passed to ui_resize(). + */ + LV2UI_Feature_Handle handle; + + /** + Notify the host that a control has been grabbed or released. + + The host should cease automating the port or otherwise manipulating the + port value until the control has been ungrabbed. + + @param handle The handle field of this struct. + @param port_index The index of the port associated with the control. + @param grabbed If true, the control has been grabbed, otherwise the + control has been released. + */ + void (*touch)(LV2UI_Feature_Handle handle, + uint32_t port_index, + bool grabbed); +} LV2UI_Touch; + +/** + UI Idle Interface (LV2_UI__idleInterface) + + UIs can provide this interface to have an idle() callback called by the host + rapidly to update the UI. +*/ +typedef struct _LV2UI_Idle_Interface { + /** + Run a single iteration of the UI's idle loop. + + This will be called rapidly in the UI thread at a rate appropriate + for a toolkit main loop. There are no precise timing guarantees, but + the host should attempt to call idle() at a high enough rate for smooth + animation, at least 30Hz. + + @return non-zero if the UI has been closed, in which case the host + should stop calling idle(), and can either completely destroy the UI, or + re-show it and resume calling idle(). + */ + int (*idle)(LV2UI_Handle ui); +} LV2UI_Idle_Interface; + +/** + UI Show Interface (LV2_UI__showInterface) + + UIs can provide this interface to show and hide a window, which allows them + to function in hosts unable to embed their widget. This allows any UI to + provide a fallback for embedding that works in any host. + + If used: + - The host MUST use LV2UI_Idle_Interface to drive the UI. + - The UI MUST return non-zero from LV2UI_Idle_Interface::idle() when it has been closed. + - If idle() returns non-zero, the host MUST call hide() and stop calling + idle(). It MAY later call show() then resume calling idle(). +*/ +typedef struct _LV2UI_Show_Interface { + /** + Show a window for this UI. + + The window title MAY have been passed by the host to + LV2UI_Descriptor::instantiate() as an LV2_Options_Option with key + LV2_UI__windowTitle. + + @return 0 on success, or anything else to stop being called. + */ + int (*show)(LV2UI_Handle ui); + + /** + Hide the window for this UI. + + @return 0 on success, or anything else to stop being called. + */ + int (*hide)(LV2UI_Handle ui); +} LV2UI_Show_Interface; + +/** + Peak data for a slice of time, the update format for ui:peakProtocol. +*/ +typedef struct _LV2UI_Peak_Data { + /** + The start of the measurement period. This is just a running counter + that is only meaningful in comparison to previous values and must not be + interpreted as an absolute time. + */ + uint32_t period_start; + + /** + The size of the measurement period, in the same units as period_start. + */ + uint32_t period_size; + + /** + The peak value for the measurement period. This should be the maximal + value for abs(sample) over all the samples in the period. + */ + float peak; +} LV2UI_Peak_Data; + +/** + Prototype for UI accessor function. + + This is the entry point to a UI library, which works in the same way as + lv2_descriptor() but for UIs rather than plugins. +*/ +LV2_SYMBOL_EXPORT +const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index); + +/** + The type of the lv2ui_descriptor() function. +*/ +typedef const LV2UI_Descriptor* (*LV2UI_DescriptorFunction)(uint32_t index); + +#ifdef __cplusplus +} +#endif + +#endif /* LV2_UI_H */ diff --git a/dpf/distrho/src/lv2/units.h b/dpf/distrho/src/lv2/units.h new file mode 100644 index 0000000..a40f097 --- /dev/null +++ b/dpf/distrho/src/lv2/units.h @@ -0,0 +1,62 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file units.h + C definitions for the LV2 Units extension + . +*/ + +#ifndef LV2_UNITS_H +#define LV2_UNITS_H + +#define LV2_UNITS_URI "http://lv2plug.in/ns/extensions/units" +#define LV2_UNITS_PREFIX LV2_UNITS_URI "#" + +#define LV2_UNITS__Conversion LV2_UNITS_PREFIX "Conversion" +#define LV2_UNITS__Unit LV2_UNITS_PREFIX "Unit" +#define LV2_UNITS__bar LV2_UNITS_PREFIX "bar" +#define LV2_UNITS__beat LV2_UNITS_PREFIX "beat" +#define LV2_UNITS__bpm LV2_UNITS_PREFIX "bpm" +#define LV2_UNITS__cent LV2_UNITS_PREFIX "cent" +#define LV2_UNITS__cm LV2_UNITS_PREFIX "cm" +#define LV2_UNITS__coef LV2_UNITS_PREFIX "coef" +#define LV2_UNITS__conversion LV2_UNITS_PREFIX "conversion" +#define LV2_UNITS__db LV2_UNITS_PREFIX "db" +#define LV2_UNITS__degree LV2_UNITS_PREFIX "degree" +#define LV2_UNITS__frame LV2_UNITS_PREFIX "frame" +#define LV2_UNITS__hz LV2_UNITS_PREFIX "hz" +#define LV2_UNITS__inch LV2_UNITS_PREFIX "inch" +#define LV2_UNITS__khz LV2_UNITS_PREFIX "khz" +#define LV2_UNITS__km LV2_UNITS_PREFIX "km" +#define LV2_UNITS__m LV2_UNITS_PREFIX "m" +#define LV2_UNITS__mhz LV2_UNITS_PREFIX "mhz" +#define LV2_UNITS__midiNote LV2_UNITS_PREFIX "midiNote" +#define LV2_UNITS__mile LV2_UNITS_PREFIX "mile" +#define LV2_UNITS__min LV2_UNITS_PREFIX "min" +#define LV2_UNITS__mm LV2_UNITS_PREFIX "mm" +#define LV2_UNITS__ms LV2_UNITS_PREFIX "ms" +#define LV2_UNITS__name LV2_UNITS_PREFIX "name" +#define LV2_UNITS__oct LV2_UNITS_PREFIX "oct" +#define LV2_UNITS__pc LV2_UNITS_PREFIX "pc" +#define LV2_UNITS__prefixConversion LV2_UNITS_PREFIX "prefixConversion" +#define LV2_UNITS__render LV2_UNITS_PREFIX "render" +#define LV2_UNITS__s LV2_UNITS_PREFIX "s" +#define LV2_UNITS__semitone12TET LV2_UNITS_PREFIX "semitone12TET" +#define LV2_UNITS__symbol LV2_UNITS_PREFIX "symbol" +#define LV2_UNITS__unit LV2_UNITS_PREFIX "unit" + +#endif /* LV2_UNITS_H */ diff --git a/dpf/distrho/src/lv2/uri-map.h b/dpf/distrho/src/lv2/uri-map.h new file mode 100644 index 0000000..2062af3 --- /dev/null +++ b/dpf/distrho/src/lv2/uri-map.h @@ -0,0 +1,98 @@ +/* + Copyright 2008-2011 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file + C header for the LV2 URI Map extension . + + This extension defines a simple mechanism for plugins to map URIs to + integers, usually for performance reasons (e.g. processing events typed by + URIs in real time). The expected use case is for plugins to map URIs to + integers for things they 'understand' at instantiation time, and store those + values for use in the audio thread without doing any string comparison. + This allows the extensibility of RDF with the performance of integers (or + centrally defined enumerations). +*/ + +#ifndef LV2_URI_MAP_H +#define LV2_URI_MAP_H + +#define LV2_URI_MAP_URI "http://lv2plug.in/ns/ext/uri-map" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + Opaque pointer to host data. +*/ +typedef void* LV2_URI_Map_Callback_Data; + +/** + URI Map Feature. + + To support this feature the host must pass an LV2_Feature struct to the + plugin's instantiate method with URI "http://lv2plug.in/ns/ext/uri-map" + and data pointed to an instance of this struct. +*/ +typedef struct { + /** + Opaque pointer to host data. + + The plugin MUST pass this to any call to functions in this struct. + Otherwise, it must not be interpreted in any way. + */ + LV2_URI_Map_Callback_Data callback_data; + + /** + Get the numeric ID of a URI from the host. + + @param callback_data Must be the callback_data member of this struct. + @param map The 'context' of this URI. Certain extensions may define a + URI that must be passed here with certain restrictions on the return + value (e.g. limited range). This value may be NULL if the plugin needs + an ID for a URI in general. Extensions SHOULD NOT define a context + unless there is a specific need to do so, e.g. to restrict the range of + the returned value. + @param uri The URI to be mapped to an integer ID. + + This function is referentially transparent; any number of calls with the + same arguments is guaranteed to return the same value over the life of a + plugin instance (though the same URI may return different values with a + different map parameter). However, this function is not necessarily very + fast: plugins SHOULD cache any IDs they might need in performance + critical situations. + + The return value 0 is reserved and indicates that an ID for that URI + could not be created for whatever reason. Extensions MAY define more + precisely what this means in a certain context, but in general plugins + SHOULD handle this situation as gracefully as possible. However, hosts + SHOULD NOT return 0 from this function in non-exceptional circumstances + (e.g. the URI map SHOULD be dynamic). Hosts that statically support only + a fixed set of URIs should not expect plugins to function correctly. + */ + uint32_t (*uri_to_id)(LV2_URI_Map_Callback_Data callback_data, + const char* map, + const char* uri); +} LV2_URI_Map_Feature; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_URI_MAP_H */ diff --git a/dpf/distrho/src/lv2/urid.h b/dpf/distrho/src/lv2/urid.h new file mode 100644 index 0000000..c317f7f --- /dev/null +++ b/dpf/distrho/src/lv2/urid.h @@ -0,0 +1,129 @@ +/* + Copyright 2008-2012 David Robillard + Copyright 2011 Gabriel M. Beddingfield + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file urid.h + C header for the LV2 URID extension +*/ + +#ifndef LV2_URID_H +#define LV2_URID_H + +#define LV2_URID_URI "http://lv2plug.in/ns/ext/urid" +#define LV2_URID_PREFIX LV2_URID_URI "#" + +#define LV2_URID__map LV2_URID_PREFIX "map" +#define LV2_URID__unmap LV2_URID_PREFIX "unmap" + +/* Legacy defines */ +#define LV2_URID_MAP_URI LV2_URID__map +#define LV2_URID_UNMAP_URI LV2_URID__unmap + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + Opaque pointer to host data for LV2_URID_Map. +*/ +typedef void* LV2_URID_Map_Handle; + +/** + Opaque pointer to host data for LV2_URID_Unmap. +*/ +typedef void* LV2_URID_Unmap_Handle; + +/** + URI mapped to an integer. +*/ +typedef uint32_t LV2_URID; + +/** + URID Map Feature (LV2_URID__map) +*/ +typedef struct _LV2_URID_Map { + /** + Opaque pointer to host data. + + This MUST be passed to map_uri() whenever it is called. + Otherwise, it must not be interpreted in any way. + */ + LV2_URID_Map_Handle handle; + + /** + Get the numeric ID of a URI. + + If the ID does not already exist, it will be created. + + This function is referentially transparent; any number of calls with the + same arguments is guaranteed to return the same value over the life of a + plugin instance. Note, however, that several URIs MAY resolve to the + same ID if the host considers those URIs equivalent. + + This function is not necessarily very fast or RT-safe: plugins SHOULD + cache any IDs they might need in performance critical situations. + + The return value 0 is reserved and indicates that an ID for that URI + could not be created for whatever reason. However, hosts SHOULD NOT + return 0 from this function in non-exceptional circumstances (i.e. the + URI map SHOULD be dynamic). + + @param handle Must be the callback_data member of this struct. + @param uri The URI to be mapped to an integer ID. + */ + LV2_URID (*map)(LV2_URID_Map_Handle handle, + const char* uri); +} LV2_URID_Map; + +/** + URI Unmap Feature (LV2_URID__unmap) +*/ +typedef struct _LV2_URID_Unmap { + /** + Opaque pointer to host data. + + This MUST be passed to unmap() whenever it is called. + Otherwise, it must not be interpreted in any way. + */ + LV2_URID_Unmap_Handle handle; + + /** + Get the URI for a previously mapped numeric ID. + + Returns NULL if @p urid is not yet mapped. Otherwise, the corresponding + URI is returned in a canonical form. This MAY not be the exact same + string that was originally passed to LV2_URID_Map::map(), but it MUST be + an identical URI according to the URI syntax specification (RFC3986). A + non-NULL return for a given @p urid will always be the same for the life + of the plugin. Plugins that intend to perform string comparison on + unmapped URIs SHOULD first canonicalise URI strings with a call to + map_uri() followed by a call to unmap_uri(). + + @param handle Must be the callback_data member of this struct. + @param urid The ID to be mapped back to the URI string. + */ + const char* (*unmap)(LV2_URID_Unmap_Handle handle, + LV2_URID urid); +} LV2_URID_Unmap; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_URID_H */ diff --git a/dpf/distrho/src/lv2/worker.h b/dpf/distrho/src/lv2/worker.h new file mode 100644 index 0000000..fc09d55 --- /dev/null +++ b/dpf/distrho/src/lv2/worker.h @@ -0,0 +1,158 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file worker.h C header for the LV2 Worker extension + . +*/ + +#ifndef LV2_WORKER_H +#define LV2_WORKER_H + +#include + +#include "lv2.h" + +#define LV2_WORKER_URI "http://lv2plug.in/ns/ext/worker" +#define LV2_WORKER_PREFIX LV2_WORKER_URI "#" + +#define LV2_WORKER__interface LV2_WORKER_PREFIX "interface" +#define LV2_WORKER__schedule LV2_WORKER_PREFIX "schedule" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + A status code for worker functions. +*/ +typedef enum { + LV2_WORKER_SUCCESS = 0, /**< Completed successfully. */ + LV2_WORKER_ERR_UNKNOWN = 1, /**< Unknown error. */ + LV2_WORKER_ERR_NO_SPACE = 2 /**< Failed due to lack of space. */ +} LV2_Worker_Status; + +typedef void* LV2_Worker_Respond_Handle; + +/** + A function to respond to run() from the worker method. + + The @p data MUST be safe for the host to copy and later pass to + work_response(), and the host MUST guarantee that it will be eventually + passed to work_response() if this function returns LV2_WORKER_SUCCESS. +*/ +typedef LV2_Worker_Status (*LV2_Worker_Respond_Function)( + LV2_Worker_Respond_Handle handle, + uint32_t size, + const void* data); + +/** + LV2 Plugin Worker Interface. + + This is the interface provided by the plugin to implement a worker method. + The plugin's extension_data() method should return an LV2_Worker_Interface + when called with LV2_WORKER__interface as its argument. +*/ +typedef struct _LV2_Worker_Interface { + /** + The worker method. This is called by the host in a non-realtime context + as requested, possibly with an arbitrary message to handle. + + A response can be sent to run() using @p respond. The plugin MUST NOT + make any assumptions about which thread calls this method, other than + the fact that there are no real-time requirements. + + @param instance The LV2 instance this is a method on. + @param respond A function for sending a response to run(). + @param handle Must be passed to @p respond if it is called. + @param size The size of @p data. + @param data Data from run(), or NULL. + */ + LV2_Worker_Status (*work)(LV2_Handle instance, + LV2_Worker_Respond_Function respond, + LV2_Worker_Respond_Handle handle, + uint32_t size, + const void* data); + + /** + Handle a response from the worker. This is called by the host in the + run() context when a response from the worker is ready. + + @param instance The LV2 instance this is a method on. + @param size The size of @p body. + @param body Message body, or NULL. + */ + LV2_Worker_Status (*work_response)(LV2_Handle instance, + uint32_t size, + const void* body); + + /** + Called when all responses for this cycle have been delivered. + + Since work_response() may be called after run() finished, this provides + a hook for code that must run after the cycle is completed. + + This field may be NULL if the plugin has no use for it. Otherwise, the + host MUST call it after every run(), regardless of whether or not any + responses were sent that cycle. + */ + LV2_Worker_Status (*end_run)(LV2_Handle instance); +} LV2_Worker_Interface; + +typedef void* LV2_Worker_Schedule_Handle; + +typedef struct _LV2_Worker_Schedule { + /** + Opaque host data. + */ + LV2_Worker_Schedule_Handle handle; + + /** + Request from run() that the host call the worker. + + This function is in the audio threading class. It should be called from + run() to request that the host call the work() method in a non-realtime + context with the given arguments. + + This function is always safe to call from run(), but it is not + guaranteed that the worker is actually called from a different thread. + In particular, when free-wheeling (e.g. for offline rendering), the + worker may be executed immediately. This allows single-threaded + processing with sample accuracy and avoids timing problems when run() is + executing much faster or slower than real-time. + + Plugins SHOULD be written in such a way that if the worker runs + immediately, and responses from the worker are delivered immediately, + the effect of the work takes place immediately with sample accuracy. + + The @p data MUST be safe for the host to copy and later pass to work(), + and the host MUST guarantee that it will be eventually passed to work() + if this function returns LV2_WORKER_SUCCESS. + + @param handle The handle field of this struct. + @param size The size of @p data. + @param data Message to pass to work(), or NULL. + */ + LV2_Worker_Status (*schedule_work)(LV2_Worker_Schedule_Handle handle, + uint32_t size, + const void* data); +} LV2_Worker_Schedule; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_WORKER_H */ diff --git a/dpf/distrho/src/vestige/aeffectx.h b/dpf/distrho/src/vestige/aeffectx.h new file mode 100644 index 0000000..23f84f2 --- /dev/null +++ b/dpf/distrho/src/vestige/aeffectx.h @@ -0,0 +1,275 @@ +/* + * aeffectx.h - simple header to allow VeSTige compilation and eventually work + * + * Copyright (c) 2006 Javier Serrano Polo + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * 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 of the License, 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ +#include +#ifndef _AEFFECTX_H +#define _AEFFECTX_H + +#define CCONST(a, b, c, d)( ( ( (int) a ) << 24 ) | \ + ( ( (int) b ) << 16 ) | \ + ( ( (int) c ) << 8 ) | \ + ( ( (int) d ) << 0 ) ) + +#define audioMasterAutomate 0 +#define audioMasterVersion 1 +#define audioMasterCurrentId 2 +#define audioMasterIdle 3 +#define audioMasterPinConnected 4 +// unsupported? 5 +#define audioMasterWantMidi 6 +#define audioMasterGetTime 7 +#define audioMasterProcessEvents 8 +#define audioMasterSetTime 9 +#define audioMasterTempoAt 10 +#define audioMasterGetNumAutomatableParameters 11 +#define audioMasterGetParameterQuantization 12 +#define audioMasterIOChanged 13 +#define audioMasterNeedIdle 14 +#define audioMasterSizeWindow 15 +#define audioMasterGetSampleRate 16 +#define audioMasterGetBlockSize 17 +#define audioMasterGetInputLatency 18 +#define audioMasterGetOutputLatency 19 +#define audioMasterGetPreviousPlug 20 +#define audioMasterGetNextPlug 21 +#define audioMasterWillReplaceOrAccumulate 22 +#define audioMasterGetCurrentProcessLevel 23 +#define audioMasterGetAutomationState 24 +#define audioMasterOfflineStart 25 +#define audioMasterOfflineRead 26 +#define audioMasterOfflineWrite 27 +#define audioMasterOfflineGetCurrentPass 28 +#define audioMasterOfflineGetCurrentMetaPass 29 +#define audioMasterSetOutputSampleRate 30 +// unsupported? 31 +#define audioMasterGetSpeakerArrangement 31 // deprecated in 2.4? +#define audioMasterGetVendorString 32 +#define audioMasterGetProductString 33 +#define audioMasterGetVendorVersion 34 +#define audioMasterVendorSpecific 35 +#define audioMasterSetIcon 36 +#define audioMasterCanDo 37 +#define audioMasterGetLanguage 38 +#define audioMasterOpenWindow 39 +#define audioMasterCloseWindow 40 +#define audioMasterGetDirectory 41 +#define audioMasterUpdateDisplay 42 +#define audioMasterBeginEdit 43 +#define audioMasterEndEdit 44 +#define audioMasterOpenFileSelector 45 +#define audioMasterCloseFileSelector 46 // currently unused +#define audioMasterEditFile 47 // currently unused +#define audioMasterGetChunkFile 48 // currently unused +#define audioMasterGetInputSpeakerArrangement 49 // currently unused + +#define effFlagsHasEditor 1 +#define effFlagsCanReplacing (1 << 4) // very likely +#define effFlagsIsSynth (1 << 8) // currently unused + +#define effOpen 0 +#define effClose 1 // currently unused +#define effSetProgram 2 // currently unused +#define effGetProgram 3 // currently unused +#define effGetProgramName 5 // currently unused +#define effGetParamName 8 // currently unused +#define effSetSampleRate 10 +#define effSetBlockSize 11 +#define effMainsChanged 12 +#define effEditGetRect 13 +#define effEditOpen 14 +#define effEditClose 15 +#define effEditIdle 19 +#define effEditTop 20 +#define effProcessEvents 25 +#define effGetEffectName 45 +#define effGetVendorString 47 +#define effGetProductString 48 +#define effGetVendorVersion 49 +#define effCanDo 51 // currently unused +/* from http://asseca.com/vst-24-specs/efGetParameterProperties.html */ +#define effGetParameterProperties 56 +#define effGetVstVersion 58 // currently unused + +#define kEffectMagic (CCONST( 'V', 's', 't', 'P' )) +#define kVstLangEnglish 1 +#define kVstMidiType 1 + +struct RemoteVstPlugin; + +#define kVstTransportPlaying (1 << 1) + +#define kVstNanosValid (1 << 8) +#define kVstPpqPosValid (1 << 9) +#define kVstTempoValid (1 << 10) +#define kVstBarsValid (1 << 11) +#define kVstCyclePosValid (1 << 12) +#define kVstTimeSigValid (1 << 13) +#define kVstSmpteValid (1 << 14) +#define kVstClockValid (1 << 15) + +struct _VstMidiEvent +{ + // 00 + int type; + // 04 + int byteSize; + // 08 + int deltaFrames; + // 0c? + int flags; + // 10? + int noteLength; + // 14? + int noteOffset; + // 18 + char midiData[4]; + // 1c? + char detune; + // 1d? + char noteOffVelocity; + // 1e? + char reserved1; + // 1f? + char reserved2; +}; + +typedef struct _VstMidiEvent VstMidiEvent; + + +struct _VstEvent +{ + char dump[sizeof (VstMidiEvent)]; + +}; + +typedef struct _VstEvent VstEvent; + +struct _VstEvents +{ + // 00 + int numEvents; + // 04 + void *reserved; + // 08 + VstEvent * events[2]; +}; + +typedef struct _VstEvents VstEvents; + +/* this struct taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */ +struct _VstParameterProperties +{ + float stepFloat; + float smallStepFloat; + float largeStepFloat; + char label[64]; + int32_t flags; + int32_t minInteger; + int32_t maxInteger; + int32_t stepInteger; + int32_t largeStepInteger; + char shortLabel[8]; +}; + +typedef struct _VstParameterProperties VstParameterProperties; + +/* this enum taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */ +enum VstParameterFlags +{ + kVstParameterIsSwitch = 1 << 0, /* parameter is a switch (on/off) */ + kVstParameterUsesIntegerMinMax = 1 << 1, /* minInteger, maxInteger valid */ + kVstParameterUsesFloatStep = 1 << 2, /* stepFloat, smallStepFloat, largeStepFloat valid */ + kVstParameterUsesIntStep = 1 << 3, /* stepInteger, largeStepInteger valid */ + kVstParameterSupportsDisplayIndex = 1 << 4, /* displayIndex valid */ + kVstParameterSupportsDisplayCategory = 1 << 5, /* category, etc. valid */ + kVstParameterCanRamp = 1 << 6 /* set if parameter value can ramp up/down */ +}; + +struct _AEffect +{ + // Never use virtual functions!!! + // 00-03 + int magic; + // dispatcher 04-07 + intptr_t (* dispatcher) (struct _AEffect *, int, int, intptr_t, void *, float); + // process, quite sure 08-0b + void (* process) (struct _AEffect *, float **, float **, int); + // setParameter 0c-0f + void (* setParameter) (struct _AEffect *, int, float); + // getParameter 10-13 + float (* getParameter) (struct _AEffect *, int); + // programs 14-17 + int numPrograms; + // Params 18-1b + int numParams; + // Input 1c-1f + int numInputs; + // Output 20-23 + int numOutputs; + // flags 24-27 + int flags; + // Fill somewhere 28-2b + void *ptr1; + void *ptr2; + // Zeroes 2c-2f 30-33 34-37 38-3b + char empty3[4 + 4 + 4]; + // 1.0f 3c-3f + float unkown_float; + // An object? pointer 40-43 + void *ptr3; + // Zeroes 44-47 + void *user; + // Id 48-4b + int32_t uniqueID; + // Don't know 4c-4f + char unknown1[4]; + // processReplacing 50-53 + void (* processReplacing) (struct _AEffect *, float **, float **, int); +}; + +typedef struct _AEffect AEffect; + +typedef struct _VstTimeInfo +{ + /* info from online documentation of VST provided by Steinberg */ + + double samplePos; + double sampleRate; + double nanoSeconds; + double ppqPos; + double tempo; + double barStartPos; + double cycleStartPos; + double cycleEndPos; + int32_t timeSigNumerator; + int32_t timeSigDenominator; + int32_t smpteOffset; + int32_t smpteFrameRate; + int32_t samplesToNextClock; + int32_t flags; + +} VstTimeInfo; + +typedef intptr_t (* audioMasterCallback) (AEffect *, int32_t, int32_t, intptr_t, void *, float); + +#endif diff --git a/dpf/dpf.doxygen b/dpf/dpf.doxygen new file mode 100644 index 0000000..2dfa18d --- /dev/null +++ b/dpf/dpf.doxygen @@ -0,0 +1,302 @@ +# Doxyfile 1.7.6.1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "DISTRHO Plugin Framework" +PROJECT_NUMBER = +PROJECT_BRIEF = +PROJECT_LOGO = +OUTPUT_DIRECTORY = docs +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 4 +ALIASES = +TCL_SUBST = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +EXTENSION_MAPPING = +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO +TYPEDEF_HIDES_STRUCT = YES +SYMBOL_CACHE_SIZE = 0 +LOOKUP_CACHE_SIZE = 0 +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = YES +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +FORCE_LOCAL_INCLUDES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +SHOW_FILES = YES +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = +CITE_BIB_FILES = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = distrho distrho/extra dgl +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = NO +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_GAMMA = 80 +HTML_TIMESTAMP = YES +HTML_ALIGN_MEMBERS = YES +HTML_DYNAMIC_SECTIONS = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project +DISABLE_INDEX = NO +GENERATE_TREEVIEW = NO +ENUM_VALUES_PER_LINE = 4 +USE_INLINE_TREES = NO +TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +USE_MATHJAX = NO +MATHJAX_RELPATH = http://www.mathjax.org/mathjax +MATHJAX_EXTENSIONS = +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4 +EXTRA_PACKAGES = +LATEX_HEADER = +LATEX_FOOTER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +LATEX_SOURCE_CODE = NO +LATEX_BIB_STYLE = plain +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = YES +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = DOXYGEN \ + DISTRHO_PLUGIN_NAME="Plugin Name" \ + DISTRHO_PLUGIN_NUM_INPUTS=2 \ + DISTRHO_PLUGIN_NUM_OUTPUTS=2 \ + DISTRHO_PLUGIN_URI="urn:distrho:name" \ + DISTRHO_PLUGIN_HAS_UI=1 \ + DISTRHO_PLUGIN_IS_RT_SAFE=1 \ + DISTRHO_PLUGIN_IS_SYNTH=1 \ + DISTRHO_PLUGIN_WANT_DIRECT_ACCESS=1 \ + DISTRHO_PLUGIN_WANT_LATENCY=1 \ + DISTRHO_PLUGIN_WANT_MIDI_INPUT=1 \ + DISTRHO_PLUGIN_WANT_MIDI_OUTPUT=1 \ + DISTRHO_PLUGIN_WANT_PROGRAMS=1 \ + DISTRHO_PLUGIN_WANT_STATE=1 \ + DISTRHO_PLUGIN_WANT_TIMEPOS=1 \ + DISTRHO_UI_USE_NANOVG=1 +EXPAND_AS_DEFINED = YES +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +INTERACTIVE_SVG = NO +DOT_PATH = +DOTFILE_DIRS = +MSCFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = YES +GENERATE_LEGEND = YES +DOT_CLEANUP = YES diff --git a/dpf/dpf.kdev4 b/dpf/dpf.kdev4 new file mode 100644 index 0000000..86f9a94 --- /dev/null +++ b/dpf/dpf.kdev4 @@ -0,0 +1,9 @@ +[Project] +Manager=KDevGenericManager +Name=DPF + +[Filters] +Excludes=*/.*,*/*~,*/*.a + +[Project] +VersionControlSupport=kdevgit diff --git a/dpf/lac/2014-small-talk.odp b/dpf/lac/2014-small-talk.odp new file mode 100644 index 0000000000000000000000000000000000000000..536ccc5cddd5aaa6853c4ead1d6f93a5d4c6759d GIT binary patch literal 381315 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 z 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 z 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
O^oLeYZhKM*t@%HDVcrJluot`2B~M2p%IuYq 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�ipt`YmmS??T?O4 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%0D>)Sv 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 z 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%0DHg4fe%67Cf^xC8>7 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 literal 0 HcmV?d00001 diff --git a/dpf/utils/README-DPF-Windows.txt b/dpf/utils/README-DPF-Windows.txt new file mode 100644 index 0000000..96beb53 --- /dev/null +++ b/dpf/utils/README-DPF-Windows.txt @@ -0,0 +1,13 @@ +###################################### +## Generic README for DISTRHO Plugins + +This folder contains audio plugins downloaded from http://distrho.sourceforge.net/plugins + +The included *.lv2 folder is an LV2 bundle and the *.dll file is a VST. +Check your host documentation to know where to place these files. +Note that most hosts support VST but not LV2. + + +If your host is not listing these plugins, make sure the binaries you downloaded match your host architecture. +32bit plugins go into 32bit hosts, same for 64bit. +Some hosts are able to load plugins with different architecture, but that's the exception rather than the rule. diff --git a/dpf/utils/generate-ttl.sh b/dpf/utils/generate-ttl.sh new file mode 100755 index 0000000..dc7de63 --- /dev/null +++ b/dpf/utils/generate-ttl.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +set -e + +if [ -d bin ]; then + cd bin +else + echo "Please run this script from the source root folder" + exit +fi + +PWD=`dirname $0` + +if [ -f $PWD/lv2_ttl_generator.exe ]; then + GEN=$PWD/lv2_ttl_generator.exe + EXT=dll +else + GEN=$PWD/lv2_ttl_generator + if [ -d /Library/Audio ]; then + EXT=dylib + else + EXT=so + fi +fi + +FOLDERS=`find . -type d -name \*.lv2` + +for i in $FOLDERS; do + cd $i + FILE=`ls *.$EXT | sort | head -n 1` + $GEN ./$FILE + cd .. +done diff --git a/dpf/utils/generate-vst-bundles.sh b/dpf/utils/generate-vst-bundles.sh new file mode 100755 index 0000000..4ff14b6 --- /dev/null +++ b/dpf/utils/generate-vst-bundles.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +set -e + +if [ -d bin ]; then + cd bin +else + echo "Please run this script from the root folder" + exit +fi + +PWD=`pwd` + +if [ ! -d /System/Library ]; then + echo "This doesn't seem to be OSX, please stop!" + exit 0 +fi + +rm -rf *.vst/ + +PLUGINS=`ls | grep vst.dylib` + +for i in $PLUGINS; do + FILE=`echo $i | awk 'sub("-vst.dylib","")'` + cp -r ../dpf/utils/plugin.vst/ $FILE.vst + mv $i $FILE.vst/Contents/MacOS/$FILE + rm -f $FILE.vst/Contents/MacOS/deleteme + sed -i -e "s/X-PROJECTNAME-X/$FILE/" $FILE.vst/Contents/Info.plist + rm -f $FILE.vst/Contents/Info.plist-e + SetFile -a B $FILE.vst +done + +cd .. diff --git a/dpf/utils/lv2-ttl-generator/GNUmakefile b/dpf/utils/lv2-ttl-generator/GNUmakefile new file mode 100644 index 0000000..80209c2 --- /dev/null +++ b/dpf/utils/lv2-ttl-generator/GNUmakefile @@ -0,0 +1,19 @@ +#!/usr/bin/makefile -f + +all: build + +ifeq ($(WIN32),true) +build: ../lv2_ttl_generator.exe +else +build: ../lv2_ttl_generator +endif + +../lv2_ttl_generator: lv2_ttl_generator.c + $(CC) lv2_ttl_generator.c -o ../lv2_ttl_generator -ldl + +../lv2_ttl_generator.exe: lv2_ttl_generator.c + $(CC) lv2_ttl_generator.c -o ../lv2_ttl_generator.exe -static + touch ../lv2_ttl_generator + +clean: + rm -f ../lv2_ttl_generator ../lv2_ttl_generator.exe diff --git a/dpf/utils/lv2-ttl-generator/lv2_ttl_generator.c b/dpf/utils/lv2-ttl-generator/lv2_ttl_generator.c new file mode 100644 index 0000000..5ef2b14 --- /dev/null +++ b/dpf/utils/lv2-ttl-generator/lv2_ttl_generator.c @@ -0,0 +1,89 @@ +/* + * DPF LV2 *.ttl generator + */ + +#include +#include + +#ifdef _WIN32 + #include + #define TTL_GENERATOR_WINDOWS +#else + #include +#endif + +#ifndef nullptr + #define nullptr (0) +#endif + +typedef void (*TTL_Generator_Function)(const char* basename); + +int main(int argc, char* argv[]) +{ + if (argc != 2) + { + printf("usage: %s /path/to/plugin-DLL\n", argv[0]); + return 1; + } + +#ifdef TTL_GENERATOR_WINDOWS + const HMODULE handle = LoadLibraryA(argv[1]); +#else + void* const handle = dlopen(argv[1], RTLD_LAZY); +#endif + + if (! handle) + { +#ifdef TTL_GENERATOR_WINDOWS + printf("Failed to open plugin DLL\n"); +#else + printf("Failed to open plugin DLL, error was:\n%s\n", dlerror()); +#endif + return 2; + } + +#ifdef TTL_GENERATOR_WINDOWS + const TTL_Generator_Function ttlFn = (TTL_Generator_Function)GetProcAddress(handle, "lv2_generate_ttl"); +#else + const TTL_Generator_Function ttlFn = (TTL_Generator_Function)dlsym(handle, "lv2_generate_ttl"); +#endif + + if (ttlFn != NULL) + { + char basename[strlen(argv[1])+1]; + +#ifdef TTL_GENERATOR_WINDOWS + char* base2 = strrchr(argv[1], '\\'); +#else + char* base2 = strrchr(argv[1], '/'); +#endif + if (base2 != NULL) + { + strcpy(basename, base2+1); + basename[strrchr(base2, '.')-base2-1] = '\0'; + } + else if (argv[1][0] == '.' && argv[1][1] == '/') + { + strcpy(basename, argv[1]+2); + basename[strrchr(basename, '.')-basename] = '\0'; + } + else + { + strcpy(basename, argv[1]); + } + + printf("Generate ttl data for '%s', basename: '%s'\n", argv[1], basename); + + ttlFn(basename); + } + else + printf("Failed to find 'lv2_generate_ttl' function\n"); + +#ifdef TTL_GENERATOR_WINDOWS + FreeLibrary(handle); +#else + dlclose(handle); +#endif + + return 0; +} diff --git a/dpf/utils/pack-win-dlls.sh b/dpf/utils/pack-win-dlls.sh new file mode 100755 index 0000000..4660f30 --- /dev/null +++ b/dpf/utils/pack-win-dlls.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +set -e + +# -------------------------------------------------------------------------------------------------------------------------------- +# extract debs and pack them + +function compressFolderAsZip() { +rm -f "$1.zip" +zip -X -r "$1" "$1" +rm -r "$1" +} + +# -------------------------------------------------------------------------------------------------------------------------------- + +if [ "$1" == "" ]; then +echo Missing argument +exit +fi + +# -------------------------------------------------------------------------------------------------------------------------------- + +cd bin + +mkdir -p tmp +rm -rf tmp/* + +NAME="$1" + +_mingw32-build make -C .. clean +_mingw32-build make -C .. +for i in `ls *-vst.dll`; do mv $i `echo $i | awk 'sub("-vst","")'`; done +rm -rf *ladspa* *dssi* *vst* +mkdir -p "$NAME-win32bit" +mv *.dll *.lv2/ "$NAME-win32bit" +cp "../dpf/utils/README-DPF-Windows.txt" "$NAME-win32bit/README.txt" +compressFolderAsZip "$NAME-win32bit" +rm -rf tmp/* + +_mingw64-build make -C .. clean +_mingw64-build make -C .. +for i in `ls *-vst.dll`; do mv $i `echo $i | awk 'sub("-vst","")'`; done +rm -rf *ladspa* *dssi* *vst* +mkdir -p "$NAME-win64bit" +mv *.dll *.lv2/ "$NAME-win64bit" +cp "../dpf/utils/README-DPF-Windows.txt" "$NAME-win64bit/README.txt" +compressFolderAsZip "$NAME-win64bit" +rm -rf tmp/* + +_mingw64-build make -C .. clean + +cd .. + +# -------------------------------------------------------------------------------------------------------------------------------- diff --git a/dpf/utils/plugin.vst/Contents/Info.plist b/dpf/utils/plugin.vst/Contents/Info.plist new file mode 100644 index 0000000..df723b5 --- /dev/null +++ b/dpf/utils/plugin.vst/Contents/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + X-PROJECTNAME-X + CFBundleIconFile + + CFBundleIdentifier + net.sf.distrho.X-PROJECTNAME-X + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CSResourcesFileMapped + + + diff --git a/dpf/utils/plugin.vst/Contents/MacOS/deleteme b/dpf/utils/plugin.vst/Contents/MacOS/deleteme new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/dpf/utils/plugin.vst/Contents/MacOS/deleteme @@ -0,0 +1 @@ + diff --git a/dpf/utils/plugin.vst/Contents/PkgInfo b/dpf/utils/plugin.vst/Contents/PkgInfo new file mode 100644 index 0000000..43c9cb0 --- /dev/null +++ b/dpf/utils/plugin.vst/Contents/PkgInfo @@ -0,0 +1 @@ +BNDL???? diff --git a/dpf/utils/plugin.vst/Contents/Resources/empty.lproj b/dpf/utils/plugin.vst/Contents/Resources/empty.lproj new file mode 100644 index 0000000..e69de29 diff --git a/dpf/utils/png2rgba.py b/dpf/utils/png2rgba.py new file mode 100755 index 0000000..7d992b4 --- /dev/null +++ b/dpf/utils/png2rgba.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python + +import os, numpy, sys +import Image + +# ----------------------------------------------------- + +formats = { + 2: "GL_LUMINANCE", + 3: "GL_BGR", + 4: "GL_BGRA" +} + +def png2rgba(namespace, filenames): + + fdH = open("%s.hpp" % namespace, "w") + fdH.write("/* (Auto-generated binary data file). */\n") + fdH.write("\n") + fdH.write("#ifndef BINARY_%s_HPP\n" % namespace.upper()) + fdH.write("#define BINARY_%s_HPP\n" % namespace.upper()) + fdH.write("\n") + fdH.write("namespace %s\n" % namespace) + fdH.write("{\n") + + fdC = open("%s.cpp" % namespace, "w") + fdC.write("/* (Auto-generated binary data file). */\n") + fdC.write("\n") + fdC.write("#include \"%s.hpp\"\n" % namespace) + fdC.write("\n") + + tempIndex = 1 + + for filename in filenames: + shortFilename = filename.rsplit(os.sep, 1)[-1].split(".", 1)[0] + shortFilename = shortFilename.replace("-", "_") + + png = Image.open(filename) + pngNumpy = numpy.array(png) + pngData = pngNumpy.tolist() + #pngData.reverse() + + height = len(pngData) + for dataBlock in pngData: + width = len(dataBlock) + if isinstance(dataBlock[0], int): + channels = 2 + else: + channels = len(dataBlock[0]) + break + else: + print("Invalid image found, cannot continue!") + quit() + + if channels not in formats.keys(): + print("Invalid image channel count, cannot continue!") + quit() + + print("Generating data for \"%s\" using '%s' type" % (filename, formats[channels])) + #print(" Width: %i" % width) + #print(" Height: %i" % height) + #print(" DataSize: %i" % (width * height * channels)) + + fdH.write(" extern const char* %sData;\n" % shortFilename) + fdH.write(" const unsigned int %sDataSize = %i;\n" % (shortFilename, width * height * channels)) + fdH.write(" const unsigned int %sWidth = %i;\n" % (shortFilename, width)) + fdH.write(" const unsigned int %sHeight = %i;\n" % (shortFilename, height)) + + if tempIndex != len(filenames): + fdH.write("\n") + + fdC.write("static const unsigned char temp_%s_%i[] = {\n" % (shortFilename, tempIndex)) + + curColumn = 1 + fdC.write(" ") + + for dataBlock in pngData: + if curColumn == 0: + fdC.write(" ") + + for data in dataBlock: + if channels == 2: + fdC.write(" %3u," % data) + + elif channels == 3: + r, g, b = data + fdC.write(" %3u, %3u, %3u," % (b, g, r)) + + else: + r, g, b, a = data + + if filename in ("artwork/claw1.png", + "artwork/claw2.png", + "artwork/run1.png", + "artwork/run2.png", + "artwork/run3.png", + "artwork/run4.png", + "artwork/scratch1.png", + "artwork/scratch2.png", + "artwork/sit.png", + "artwork/tail.png"): + if r == 255: + a -= 38 + if a < 0: a = 0 + #a = 0 + #else: + #r = g = b = 255 + + fdC.write(" %3u, %3u, %3u, %3u," % (b, g, r, a)) + + if curColumn > 20: + fdC.write("\n ") + curColumn = 1 + else: + curColumn += 1 + + fdC.write("};\n") + fdC.write("const char* %s::%sData = (const char*)temp_%s_%i;\n" % (namespace, shortFilename, shortFilename, tempIndex)) + + if tempIndex != len(filenames): + fdC.write("\n") + + tempIndex += 1 + + fdH.write("}\n") + fdH.write("\n") + fdH.write("#endif // BINARY_%s_HPP\n" % namespace.upper()) + fdH.write("\n") + fdH.close() + + fdC.write("\n") + fdC.close() + +# ----------------------------------------------------- + +if __name__ == '__main__': + if len(sys.argv) != 3: + print("Usage: %s " % sys.argv[0]) + quit() + + namespace = sys.argv[1] + artFolder = sys.argv[2] + + if not os.path.exists(artFolder): + print("Folder '%s' does not exist" % artFolder) + quit() + + # find png files + pngFiles = [] + + for root, dirs, files in os.walk(artFolder): + for name in [name for name in files if name.lower().endswith(".png")]: + pngFiles.append(os.path.join(root, name)) + + pngFiles.sort() + + # create code now + png2rgba(namespace, pngFiles)

8V!MQ?Et=0>(n$*Jj{r1uU3v-o+mJTl2EI7WW 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 InqAoc0rcd1F#rGn literal 0 HcmV?d00001 diff --git a/dpf/dgl/src/pugl/common.h b/dpf/dgl/src/pugl/common.h new file mode 100644 index 0000000..afda61e --- /dev/null +++ b/dpf/dgl/src/pugl/common.h @@ -0,0 +1,121 @@ +/* + Copyright 2014 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef PUGL_COMMON_H_INCLUDED +#define PUGL_COMMON_H_INCLUDED + +#ifdef __cplusplus +extern "C" { +#endif + +/** + @addtogroup pugl + @{ +*/ + +/** + A Pugl view. +*/ +typedef struct PuglViewImpl PuglView; + +/** + A native window handle. + + On X11, this is a Window. + On OSX, this is an NSView*. + On Windows, this is a HWND. +*/ +typedef intptr_t PuglNativeWindow; + +/** + Handle for opaque user data. +*/ +typedef void* PuglHandle; + +/** + Return status code. +*/ +typedef enum { + PUGL_SUCCESS = 0 +} PuglStatus; + +/** + Drawing context type. +*/ +typedef enum { + PUGL_GL, + PUGL_CAIRO +} PuglContextType; + +/** + Convenience symbols for ASCII control characters. +*/ +typedef enum { + PUGL_CHAR_BACKSPACE = 0x08, + PUGL_CHAR_ESCAPE = 0x1B, + PUGL_CHAR_DELETE = 0x7F +} PuglChar; + +/** + Keyboard modifier flags. +*/ +typedef enum { + PUGL_MOD_SHIFT = 1 << 0, /**< Shift key */ + PUGL_MOD_CTRL = 1 << 1, /**< Control key */ + PUGL_MOD_ALT = 1 << 2, /**< Alt/Option key */ + PUGL_MOD_SUPER = 1 << 3 /**< Mod4/Command/Windows key */ +} PuglMod; + +/** + Special (non-Unicode) keyboard keys. +*/ +typedef enum { + PUGL_KEY_F1 = 1, + PUGL_KEY_F2, + PUGL_KEY_F3, + PUGL_KEY_F4, + PUGL_KEY_F5, + PUGL_KEY_F6, + PUGL_KEY_F7, + PUGL_KEY_F8, + PUGL_KEY_F9, + PUGL_KEY_F10, + PUGL_KEY_F11, + PUGL_KEY_F12, + PUGL_KEY_LEFT, + PUGL_KEY_UP, + PUGL_KEY_RIGHT, + PUGL_KEY_DOWN, + PUGL_KEY_PAGE_UP, + PUGL_KEY_PAGE_DOWN, + PUGL_KEY_HOME, + PUGL_KEY_END, + PUGL_KEY_INSERT, + PUGL_KEY_SHIFT, + PUGL_KEY_CTRL, + PUGL_KEY_ALT, + PUGL_KEY_SUPER +} PuglKey; + +/** + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* PUGL_COMMON_H_INCLUDED */ diff --git a/dpf/dgl/src/pugl/event.h b/dpf/dgl/src/pugl/event.h new file mode 100644 index 0000000..7314e48 --- /dev/null +++ b/dpf/dgl/src/pugl/event.h @@ -0,0 +1,41 @@ +/* + Copyright 2014 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef PUGL_EVENT_H_INCLUDED +#define PUGL_EVENT_H_INCLUDED + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +#include "pugl/common.h" + +/** + @addtogroup pugl + @{ +*/ + +/** + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* PUGL_EVENT_H_INCLUDED */ diff --git a/dpf/dgl/src/pugl/gl.h b/dpf/dgl/src/pugl/gl.h new file mode 100644 index 0000000..9a6aeef --- /dev/null +++ b/dpf/dgl/src/pugl/gl.h @@ -0,0 +1,32 @@ +/* + Copyright 2012-2014 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file gl.h Portable header wrapper for gl.h. + + Unfortunately, GL includes vary across platforms so this header allows for + pure portable programs. +*/ + +#ifdef __APPLE__ +# include "OpenGL/gl.h" +#else +# ifdef _WIN32 +# include /* Broken Windows GL headers require this */ +# endif +# include "GL/gl.h" +#endif + diff --git a/dpf/dgl/src/pugl/glu.h b/dpf/dgl/src/pugl/glu.h new file mode 100644 index 0000000..4be79c7 --- /dev/null +++ b/dpf/dgl/src/pugl/glu.h @@ -0,0 +1,32 @@ +/* + Copyright 2012-2014 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file glu.h Portable header wrapper for glu.h. + + Unfortunately, GL includes vary across platforms so this header allows for + pure portable programs. +*/ + +#ifdef __APPLE__ +# include "OpenGL/glu.h" +#else +# ifdef _WIN32 +# include /* Broken Windows GL headers require this */ +# endif +# include "GL/glu.h" +#endif + diff --git a/dpf/dgl/src/pugl/pugl.h b/dpf/dgl/src/pugl/pugl.h new file mode 100644 index 0000000..3ee1c43 --- /dev/null +++ b/dpf/dgl/src/pugl/pugl.h @@ -0,0 +1,383 @@ +/* + Copyright 2012-2014 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file pugl.h API for Pugl, a minimal portable API for OpenGL. +*/ + +#ifndef PUGL_H_INCLUDED +#define PUGL_H_INCLUDED + +#include + +#include "pugl/common.h" +#include "pugl/event.h" + +#ifdef PUGL_SHARED +# ifdef _WIN32 +# define PUGL_LIB_IMPORT __declspec(dllimport) +# define PUGL_LIB_EXPORT __declspec(dllexport) +# else +# define PUGL_LIB_IMPORT __attribute__((visibility("default"))) +# define PUGL_LIB_EXPORT __attribute__((visibility("default"))) +# endif +# ifdef PUGL_INTERNAL +# define PUGL_API PUGL_LIB_EXPORT +# else +# define PUGL_API PUGL_LIB_IMPORT +# endif +#else +# ifdef _WIN32 +# define PUGL_API +# else +# define PUGL_API __attribute__((visibility("hidden"))) +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +/** + @defgroup pugl Pugl + A minimal portable API for OpenGL. + @{ +*/ + +/** + A function called when the window is closed. +*/ +typedef void (*PuglCloseFunc)(PuglView* view); + +/** + A function called to draw the view contents with OpenGL. +*/ +typedef void (*PuglDisplayFunc)(PuglView* view); + +/** + A function called when a key is pressed or released. + @param view The view the event occured in. + @param press True if the key was pressed, false if released. + @param key Unicode point of the key pressed. +*/ +typedef void (*PuglKeyboardFunc)(PuglView* view, bool press, uint32_t key); + +/** + A function called when the pointer moves. + @param view The view the event occured in. + @param x The window-relative x coordinate of the pointer. + @param y The window-relative y coordinate of the pointer. +*/ +typedef void (*PuglMotionFunc)(PuglView* view, int x, int y); + +/** + A function called when a mouse button is pressed or released. + @param view The view the event occured in. + @param button The button number (1 = left, 2 = middle, 3 = right). + @param press True if the key was pressed, false if released. + @param x The window-relative x coordinate of the pointer. + @param y The window-relative y coordinate of the pointer. +*/ +typedef void (*PuglMouseFunc)( + PuglView* view, int button, bool press, int x, int y); + +/** + A function called when the view is resized. + @param view The view being resized. + @param width The new view width. + @param height The new view height. +*/ +typedef void (*PuglReshapeFunc)(PuglView* view, int width, int height); + +/** + A function called on scrolling (e.g. mouse wheel or track pad). + + The distances used here are in "lines", a single tick of a clicking mouse + wheel. For example, @p dy = 1.0 scrolls 1 line up. Some systems and + devices support finer resolution and/or higher values for fast scrolls, + so programs should handle any value gracefully. + + @param view The view being scrolled. + @param x The window-relative x coordinate of the pointer. + @param y The window-relative y coordinate of the pointer. + @param dx The scroll x distance. + @param dx The scroll y distance. +*/ +typedef void (*PuglScrollFunc)(PuglView* view, int x, int y, float dx, float dy); + +/** + A function called when a special key is pressed or released. + + This callback allows the use of keys that do not have unicode points. + Note that some are non-printable keys. + + @param view The view the event occured in. + @param press True if the key was pressed, false if released. + @param key The key pressed. +*/ +typedef void (*PuglSpecialFunc)(PuglView* view, bool press, PuglKey key); + +/** + A function called when a filename is selected via file-browser. + + @param view The view the event occured in. + @param filename The selected file name or NULL if the dialog was canceled. +*/ +typedef void (*PuglFileSelectedFunc)(PuglView* view, const char* filename); + +/** + @name Initialization + Configuration functions which must be called before creating a window. + @{ +*/ + +/** + Create a Pugl context. + + To create a window, call the various puglInit* functions as necessary, then + call puglCreateWindow(). +*/ +PUGL_API PuglView* +puglInit(void); + +/** + Set the parent window before creating a window (for embedding). +*/ +PUGL_API void +puglInitWindowParent(PuglView* view, PuglNativeWindow parent); + +/** + Set the window size before creating a window. +*/ +PUGL_API void +puglInitWindowSize(PuglView* view, int width, int height); + +/** + Set the minimum window size before creating a window. +*/ +PUGL_API void +puglInitWindowMinSize(PuglView* view, int width, int height); + +/** + Enable or disable resizing before creating a window. +*/ +PUGL_API void +puglInitUserResizable(PuglView* view, bool resizable); + +/** + Set transient parent before creating a window. + + On X11, parent_id must be a Window. + On OSX, parent_id must be an NSView*. +*/ +PUGL_API void +puglInitTransientFor(PuglView* view, uintptr_t parent); + +/** + Set the context type before creating a window. +*/ +PUGL_API void +puglInitContextType(PuglView* view, PuglContextType type); + +/** + @} +*/ + +/** + @name Windows + Window management functions. + @{ +*/ + +/** + Create a window with the settings given by the various puglInit functions. + + @return 1 (pugl does not currently support multiple windows). +*/ +PUGL_API int +puglCreateWindow(PuglView* view, const char* title); + +/** + Show the current window. +*/ +PUGL_API void +puglShowWindow(PuglView* view); + +/** + Hide the current window. +*/ +PUGL_API void +puglHideWindow(PuglView* view); + +/** + Return the native window handle. +*/ +PUGL_API PuglNativeWindow +puglGetNativeWindow(PuglView* view); + +/** + @} +*/ + +/** + Set the handle to be passed to all callbacks. + + This is generally a pointer to a struct which contains all necessary state. + Everything needed in callbacks should be here, not in static variables. + + Note the lack of this facility makes GLUT unsuitable for plugins or + non-trivial programs; this mistake is largely why Pugl exists. +*/ +PUGL_API void +puglSetHandle(PuglView* view, PuglHandle handle); + +/** + Get the handle to be passed to all callbacks. +*/ +PUGL_API PuglHandle +puglGetHandle(PuglView* view); + +/** + Get the drawing context. + + For PUGL_GL contexts, this is unused and returns NULL. + For PUGL_CAIRO contexts, this returns a pointer to a cairo_t. +*/ +PUGL_API void* +puglGetContext(PuglView* view); + +/** + Return the timestamp (if any) of the currently-processing event. +*/ +PUGL_API uint32_t +puglGetEventTimestamp(PuglView* view); + +/** + Get the currently active modifiers (PuglMod flags). + + This should only be called from an event handler. +*/ +PUGL_API int +puglGetModifiers(PuglView* view); + +/** + Ignore synthetic repeated key events. +*/ +PUGL_API void +puglIgnoreKeyRepeat(PuglView* view, bool ignore); + +/** + @name Event Callbacks + Functions to set event callbacks for handling user input. + @{ +*/ + +/** + Set the function to call when the window is closed. +*/ +PUGL_API void +puglSetCloseFunc(PuglView* view, PuglCloseFunc closeFunc); + +/** + Set the display function which should draw the UI using GL. +*/ +PUGL_API void +puglSetDisplayFunc(PuglView* view, PuglDisplayFunc displayFunc); + +/** + Set the function to call on keyboard events. +*/ +PUGL_API void +puglSetKeyboardFunc(PuglView* view, PuglKeyboardFunc keyboardFunc); + +/** + Set the function to call on mouse motion. +*/ +PUGL_API void +puglSetMotionFunc(PuglView* view, PuglMotionFunc motionFunc); + +/** + Set the function to call on mouse button events. +*/ +PUGL_API void +puglSetMouseFunc(PuglView* view, PuglMouseFunc mouseFunc); + +/** + Set the function to call on scroll events. +*/ +PUGL_API void +puglSetScrollFunc(PuglView* view, PuglScrollFunc scrollFunc); + +/** + Set the function to call on special events. +*/ +PUGL_API void +puglSetSpecialFunc(PuglView* view, PuglSpecialFunc specialFunc); + +/** + Set the function to call when the window size changes. +*/ +PUGL_API void +puglSetReshapeFunc(PuglView* view, PuglReshapeFunc reshapeFunc); + +/** + Set the function to call on file-browser selections. +*/ +PUGL_API void +puglSetFileSelectedFunc(PuglView* view, PuglFileSelectedFunc fileSelectedFunc); + +/** + @} +*/ + +/** + Grab the input focus. +*/ +PUGL_API void +puglGrabFocus(PuglView* view); + +/** + Process all pending window events. + + This handles input events as well as rendering, so it should be called + regularly and rapidly enough to keep the UI responsive. +*/ +PUGL_API PuglStatus +puglProcessEvents(PuglView* view); + +/** + Request a redisplay on the next call to puglProcessEvents(). +*/ +PUGL_API void +puglPostRedisplay(PuglView* view); + +/** + Destroy a GL window. +*/ +PUGL_API void +puglDestroy(PuglView* view); + +/** + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* PUGL_H_INCLUDED */ diff --git a/dpf/dgl/src/pugl/pugl_internal.h b/dpf/dgl/src/pugl/pugl_internal.h new file mode 100644 index 0000000..3ca59ca --- /dev/null +++ b/dpf/dgl/src/pugl/pugl_internal.h @@ -0,0 +1,352 @@ +/* + Copyright 2012-2014 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file pugl_internal.h Private platform-independent definitions. + + Note this file contains function definitions, so it must be compiled into + the final binary exactly once. Each platform specific implementation file + including it once should achieve this. + + If you are copying the pugl code into your source tree, the following + symbols can be defined to tweak pugl behaviour: + + PUGL_HAVE_CAIRO: Include Cairo support code. + PUGL_HAVE_GL: Include OpenGL support code. + PUGL_GRAB_FOCUS: Work around reparent keyboard issues by grabbing focus. + PUGL_VERBOSE: Print GL information to console. +*/ + +#include "pugl/pugl.h" +#include "pugl/event.h" + +#ifdef PUGL_VERBOSE +# include +# define PUGL_LOG(str) fprintf(stderr, "pugl: " str) +# define PUGL_LOGF(fmt, ...) fprintf(stderr, "pugl: " fmt, __VA_ARGS__) +#else +# define PUGL_LOG(str) +# define PUGL_LOGF(fmt, ...) +#endif + +typedef struct PuglInternalsImpl PuglInternals; + +struct PuglViewImpl { + PuglHandle handle; + PuglCloseFunc closeFunc; + PuglDisplayFunc displayFunc; + PuglKeyboardFunc keyboardFunc; + PuglMotionFunc motionFunc; + PuglMouseFunc mouseFunc; + PuglReshapeFunc reshapeFunc; + PuglScrollFunc scrollFunc; + PuglSpecialFunc specialFunc; + PuglFileSelectedFunc fileSelectedFunc; + + PuglInternals* impl; + + PuglNativeWindow parent; + PuglContextType ctx_type; + uintptr_t transient_parent; + + int width; + int height; + int min_width; + int min_height; + int mods; + bool mouse_in_view; + bool ignoreKeyRepeat; + bool redisplay; + bool resizable; + uint32_t event_timestamp_ms; +}; + +PuglInternals* puglInitInternals(void); + +PuglView* +puglInit(void) +{ + PuglView* view = (PuglView*)calloc(1, sizeof(PuglView)); + if (!view) { + return NULL; + } + + PuglInternals* impl = puglInitInternals(); + if (!impl) { + free(view); + return NULL; + } + + view->impl = impl; + view->width = 640; + view->height = 480; + + return view; +} + +void +puglInitWindowSize(PuglView* view, int width, int height) +{ + view->width = width; + view->height = height; +} + +void +puglInitWindowMinSize(PuglView* view, int width, int height) +{ + view->min_width = width; + view->min_height = height; +} + +void +puglInitWindowParent(PuglView* view, PuglNativeWindow parent) +{ + view->parent = parent; +} + +void +puglInitUserResizable(PuglView* view, bool resizable) +{ + view->resizable = resizable; +} + +void +puglInitTransientFor(PuglView* view, uintptr_t parent) +{ + view->transient_parent = parent; +} + +void +puglInitContextType(PuglView* view, PuglContextType type) +{ + view->ctx_type = type; +} + +void +puglSetHandle(PuglView* view, PuglHandle handle) +{ + view->handle = handle; +} + +PuglHandle +puglGetHandle(PuglView* view) +{ + return view->handle; +} + +uint32_t +puglGetEventTimestamp(PuglView* view) +{ + return view->event_timestamp_ms; +} + +int +puglGetModifiers(PuglView* view) +{ + return view->mods; +} + +void +puglIgnoreKeyRepeat(PuglView* view, bool ignore) +{ + view->ignoreKeyRepeat = ignore; +} + +void +puglSetCloseFunc(PuglView* view, PuglCloseFunc closeFunc) +{ + view->closeFunc = closeFunc; +} + +void +puglSetDisplayFunc(PuglView* view, PuglDisplayFunc displayFunc) +{ + view->displayFunc = displayFunc; +} + +void +puglSetKeyboardFunc(PuglView* view, PuglKeyboardFunc keyboardFunc) +{ + view->keyboardFunc = keyboardFunc; +} + +void +puglSetMotionFunc(PuglView* view, PuglMotionFunc motionFunc) +{ + view->motionFunc = motionFunc; +} + +void +puglSetMouseFunc(PuglView* view, PuglMouseFunc mouseFunc) +{ + view->mouseFunc = mouseFunc; +} + +void +puglSetReshapeFunc(PuglView* view, PuglReshapeFunc reshapeFunc) +{ + view->reshapeFunc = reshapeFunc; +} + +void +puglSetScrollFunc(PuglView* view, PuglScrollFunc scrollFunc) +{ + view->scrollFunc = scrollFunc; +} + +void +puglSetSpecialFunc(PuglView* view, PuglSpecialFunc specialFunc) +{ + view->specialFunc = specialFunc; +} + +void +puglSetFileSelectedFunc(PuglView* view, PuglFileSelectedFunc fileSelectedFunc) +{ + view->fileSelectedFunc = fileSelectedFunc; +} + +void +puglEnterContext(PuglView* view); + +void +puglLeaveContext(PuglView* view, bool flush); + +#if 0 +/** Return the code point for buf, or the replacement character on error. */ +static uint32_t +puglDecodeUTF8(const uint8_t* buf) +{ +#define FAIL_IF(cond) { if (cond) return 0xFFFD; } + + /* http://en.wikipedia.org/wiki/UTF-8 */ + + if (buf[0] < 0x80) { + return buf[0]; + } else if (buf[0] < 0xC2) { + return 0xFFFD; + } else if (buf[0] < 0xE0) { + FAIL_IF((buf[1] & 0xC0) != 0x80); + return (buf[0] << 6) + buf[1] - 0x3080; + } else if (buf[0] < 0xF0) { + FAIL_IF((buf[1] & 0xC0) != 0x80); + FAIL_IF(buf[0] == 0xE0 && buf[1] < 0xA0); + FAIL_IF((buf[2] & 0xC0) != 0x80); + return (buf[0] << 12) + (buf[1] << 6) + buf[2] - 0xE2080; + } else if (buf[0] < 0xF5) { + FAIL_IF((buf[1] & 0xC0) != 0x80); + FAIL_IF(buf[0] == 0xF0 && buf[1] < 0x90); + FAIL_IF(buf[0] == 0xF4 && buf[1] >= 0x90); + FAIL_IF((buf[2] & 0xC0) != 0x80); + FAIL_IF((buf[3] & 0xC0) != 0x80); + return ((buf[0] << 18) + + (buf[1] << 12) + + (buf[2] << 6) + + buf[3] - 0x3C82080); + } + return 0xFFFD; +} +#endif + +static void +puglDefaultReshape(PuglView* view, int width, int height) +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0, width, height, 0, 0, 1); + glViewport(0, 0, width, height); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + return; + + // unused + (void)view; +} + +#if 0 +static void +puglDispatchEvent(PuglView* view, const PuglEvent* event) +{ + if (view->eventFunc) { + view->eventFunc(view, event); + } + + switch (event->type) { + case PUGL_CONFIGURE: + puglEnterContext(view); + view->width = event->configure.width; + view->height = event->configure.height; + if (view->reshapeFunc) { + view->reshapeFunc(view, view->width, view->height); + } + puglLeaveContext(view, false); + break; + case PUGL_EXPOSE: + if (event->expose.count == 0) { + puglEnterContext(view); + if (view->displayFunc) { + view->displayFunc(view); + } + view->redisplay = false; + puglLeaveContext(view, true); + } + break; + case PUGL_MOTION_NOTIFY: + view->event_timestamp_ms = event->motion.time; + view->mods = event->motion.state; + if (view->motionFunc) { + view->motionFunc(view, event->motion.x, event->motion.y); + } + break; + case PUGL_SCROLL: + if (view->scrollFunc) { + view->scrollFunc(view, + event->scroll.x, event->scroll.y, + event->scroll.dx, event->scroll.dy); + } + break; + case PUGL_BUTTON_PRESS: + case PUGL_BUTTON_RELEASE: + view->event_timestamp_ms = event->button.time; + view->mods = event->button.state; + if (view->mouseFunc) { + view->mouseFunc(view, + event->button.button, + event->type == PUGL_BUTTON_PRESS, + event->button.x, + event->button.y); + } + break; + case PUGL_KEY_PRESS: + case PUGL_KEY_RELEASE: + view->event_timestamp_ms = event->key.time; + view->mods = event->key.state; + if (event->key.special && view->specialFunc) { + view->specialFunc(view, + event->type == PUGL_KEY_PRESS, + event->key.special); + } else if (event->key.character && view->keyboardFunc) { + view->keyboardFunc(view, + event->type == PUGL_KEY_PRESS, + event->key.character); + } + break; + default: + break; + } +} +#endif diff --git a/dpf/dgl/src/pugl/pugl_osx.m b/dpf/dgl/src/pugl/pugl_osx.m new file mode 100644 index 0000000..5909d67 --- /dev/null +++ b/dpf/dgl/src/pugl/pugl_osx.m @@ -0,0 +1,573 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file pugl_osx.m OSX/Cocoa Pugl Implementation. +*/ + +#include + +#import + +#include "pugl_internal.h" + +@interface PuglWindow : NSWindow +{ +@public + PuglView* puglview; +} + +- (id) initWithContentRect:(NSRect)contentRect + styleMask:(unsigned int)aStyle + backing:(NSBackingStoreType)bufferingType + defer:(BOOL)flag; +- (void) setPuglview:(PuglView*)view; +- (BOOL) canBecomeKeyWindow; +- (BOOL) windowShouldClose:(id)sender; +@end + +@implementation PuglWindow + +- (id)initWithContentRect:(NSRect)contentRect + styleMask:(unsigned int)aStyle + backing:(NSBackingStoreType)bufferingType + defer:(BOOL)flag +{ + NSWindow* result = [super initWithContentRect:contentRect + styleMask:(NSClosableWindowMask | + NSTitledWindowMask | + NSResizableWindowMask) + backing:NSBackingStoreBuffered defer:NO]; + + [result setAcceptsMouseMovedEvents:YES]; + [result setLevel: CGShieldingWindowLevel() + 1]; + + return (PuglWindow*)result; + + // unused + (void)aStyle; (void)bufferingType; (void)flag; +} + +- (void)setPuglview:(PuglView*)view +{ + puglview = view; + [self setContentSize:NSMakeSize(view->width, view->height)]; +} + +- (BOOL)canBecomeKeyWindow +{ + return YES; +} + +- (BOOL)windowShouldClose:(id)sender +{ + if (puglview->closeFunc) + puglview->closeFunc(puglview); + return YES; + + // unused + (void)sender; +} + +@end + +static void +puglDisplay(PuglView* view) +{ + view->redisplay = false; + if (view->displayFunc) { + view->displayFunc(view); + } +} + +@interface PuglOpenGLView : NSOpenGLView +{ +@public + PuglView* puglview; + NSTrackingArea* trackingArea; + bool doubleBuffered; +} + +- (BOOL) acceptsFirstMouse:(NSEvent*)e; +- (BOOL) acceptsFirstResponder; +- (BOOL) isFlipped; +- (BOOL) isOpaque; +- (BOOL) preservesContentInLiveResize; +- (id) initWithFrame:(NSRect)frame; +- (void) reshape; +- (void) drawRect:(NSRect)r; +- (void) cursorUpdate:(NSEvent*)e; +- (void) updateTrackingAreas; +- (void) viewWillMoveToWindow:(NSWindow*)newWindow; +- (void) mouseMoved:(NSEvent*)event; +- (void) mouseDragged:(NSEvent*)event; +- (void) rightMouseDragged:(NSEvent*)event; +- (void) otherMouseDragged:(NSEvent*)event; +- (void) mouseDown:(NSEvent*)event; +- (void) rightMouseDown:(NSEvent*)event; +- (void) otherMouseDown:(NSEvent*)event; +- (void) mouseUp:(NSEvent*)event; +- (void) rightMouseUp:(NSEvent*)event; +- (void) otherMouseUp:(NSEvent*)event; +- (void) scrollWheel:(NSEvent*)event; +- (void) keyDown:(NSEvent*)event; +- (void) keyUp:(NSEvent*)event; +- (void) flagsChanged:(NSEvent*)event; + +@end + +@implementation PuglOpenGLView + +- (BOOL) acceptsFirstMouse:(NSEvent*)e +{ + return YES; + + // unused + (void)e; +} + +- (BOOL) acceptsFirstResponder +{ + return YES; +} + +- (BOOL) isFlipped +{ + return YES; +} + +- (BOOL) isOpaque +{ + return YES; +} + +- (BOOL) preservesContentInLiveResize +{ + return NO; +} + +- (id) initWithFrame:(NSRect)frame +{ + puglview = nil; + trackingArea = nil; + doubleBuffered = true; + + NSOpenGLPixelFormatAttribute pixelAttribs[] = { + NSOpenGLPFAColorSize, 24, + NSOpenGLPFAAlphaSize, 8, + NSOpenGLPFADepthSize, 16, + NSOpenGLPFADoubleBuffer, + NSOpenGLPFAAccelerated, + 0 + }; + + NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] + initWithAttributes:pixelAttribs]; + + if (pixelFormat) { + self = [super initWithFrame:frame pixelFormat:pixelFormat]; + [pixelFormat release]; + printf("Is doubleBuffered? TRUE\n"); + } else { + self = [super initWithFrame:frame]; + doubleBuffered = false; + printf("Is doubleBuffered? FALSE\n"); + } + + if (self) { + GLint swapInterval = 1; + [[self openGLContext] setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval]; + + [self reshape]; + } + + return self; +} + +- (void) reshape +{ + [[self openGLContext] update]; + + if (!puglview) { + /* NOTE: Apparently reshape gets called when the GC gets around to + deleting the view (?), so we must have reset puglview to NULL when + this comes around. + */ + return; + } + + NSRect bounds = [self bounds]; + int width = bounds.size.width; + int height = bounds.size.height; + + puglEnterContext(puglview); + + if (puglview->reshapeFunc) { + puglview->reshapeFunc(puglview, width, height); + } else { + puglDefaultReshape(puglview, width, height); + } + + puglLeaveContext(puglview, false); + + puglview->width = width; + puglview->height = height; +} + +- (void) drawRect:(NSRect)r +{ + puglEnterContext(puglview); + puglDisplay(puglview); + puglLeaveContext(puglview, true); + + // unused + return; (void)r; +} + +- (void) cursorUpdate:(NSEvent*)e +{ + [[NSCursor arrowCursor] set]; + + // unused + return; (void)e; +} + +- (void) updateTrackingAreas +{ + static const int opts = NSTrackingMouseEnteredAndExited + | NSTrackingMouseMoved + | NSTrackingEnabledDuringMouseDrag + | NSTrackingInVisibleRect + | NSTrackingActiveAlways + | NSTrackingCursorUpdate; + + if (trackingArea != nil) { + [self removeTrackingArea:trackingArea]; + [trackingArea release]; + } + + trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] + options:opts + owner:self + userInfo:nil]; + [self addTrackingArea:trackingArea]; + [super updateTrackingAreas]; +} + +- (void) viewWillMoveToWindow:(NSWindow*)newWindow +{ + if (newWindow != nil) { + [newWindow setAcceptsMouseMovedEvents:YES]; + [newWindow makeFirstResponder:self]; + } + + [super viewWillMoveToWindow:newWindow]; +} + +static unsigned +getModifiers(PuglView* view, NSEvent* ev) +{ + const unsigned modifierFlags = [ev modifierFlags]; + + view->event_timestamp_ms = fmod([ev timestamp] * 1000.0, UINT32_MAX); + + unsigned mods = 0; + mods |= (modifierFlags & NSShiftKeyMask) ? PUGL_MOD_SHIFT : 0; + mods |= (modifierFlags & NSControlKeyMask) ? PUGL_MOD_CTRL : 0; + mods |= (modifierFlags & NSAlternateKeyMask) ? PUGL_MOD_ALT : 0; + mods |= (modifierFlags & NSCommandKeyMask) ? PUGL_MOD_SUPER : 0; + return mods; +} + +static int +getFixedAppKitButton(NSInteger button) +{ + switch (button) { + case 0: return 1; + case 1: return 3; + case 2: return 2; + default: return button; + } +} + +- (void) mouseMoved:(NSEvent*)event +{ + if (puglview->motionFunc) { + NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; + puglview->mods = getModifiers(puglview, event); + puglview->motionFunc(puglview, loc.x, loc.y); + } +} + +- (void) mouseDragged:(NSEvent*)event +{ + [self mouseMoved:event]; +} + +- (void) rightMouseDragged:(NSEvent*)event +{ + [self mouseDragged:event]; +} + +- (void) otherMouseDragged:(NSEvent*)event +{ + [self mouseDragged:event]; +} + +- (void) mouseDown:(NSEvent*)event +{ + if (puglview->mouseFunc) { + NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; + puglview->mods = getModifiers(puglview, event); + puglview->mouseFunc(puglview, getFixedAppKitButton([event buttonNumber]), true, loc.x, loc.y); + } +} + +- (void) rightMouseDown:(NSEvent*)event +{ + [self mouseDown:event]; +} + +- (void) otherMouseDown:(NSEvent*)event +{ + [self mouseDown:event]; +} + +- (void) mouseUp:(NSEvent*)event +{ + if (puglview->mouseFunc) { + NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; + puglview->mods = getModifiers(puglview, event); + puglview->mouseFunc(puglview, getFixedAppKitButton([event buttonNumber]), false, loc.x, loc.y); + } +} + +- (void) rightMouseUp:(NSEvent*)event +{ + [self mouseUp:event]; +} + +- (void) otherMouseUp:(NSEvent*)event +{ + [self mouseUp:event]; +} + +- (void) scrollWheel:(NSEvent*)event +{ + if (puglview->scrollFunc) { + NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil]; + puglview->mods = getModifiers(puglview, event); + puglview->scrollFunc(puglview, + loc.x, loc.y, + [event deltaX], [event deltaY]); + } +} + +- (void) keyDown:(NSEvent*)event +{ + if (puglview->keyboardFunc && !(puglview->ignoreKeyRepeat && [event isARepeat])) { + NSString* chars = [event characters]; + puglview->mods = getModifiers(puglview, event); + puglview->keyboardFunc(puglview, true, [chars characterAtIndex:0]); + } +} + +- (void) keyUp:(NSEvent*)event +{ + if (puglview->keyboardFunc) { + NSString* chars = [event characters]; + puglview->mods = getModifiers(puglview, event); + puglview->keyboardFunc(puglview, false, [chars characterAtIndex:0]); + } +} + +- (void) flagsChanged:(NSEvent*)event +{ + if (puglview->specialFunc) { + const unsigned mods = getModifiers(puglview, event); + if ((mods & PUGL_MOD_SHIFT) != (puglview->mods & PUGL_MOD_SHIFT)) { + puglview->specialFunc(puglview, mods & PUGL_MOD_SHIFT, PUGL_KEY_SHIFT); + } else if ((mods & PUGL_MOD_CTRL) != (puglview->mods & PUGL_MOD_CTRL)) { + puglview->specialFunc(puglview, mods & PUGL_MOD_CTRL, PUGL_KEY_CTRL); + } else if ((mods & PUGL_MOD_ALT) != (puglview->mods & PUGL_MOD_ALT)) { + puglview->specialFunc(puglview, mods & PUGL_MOD_ALT, PUGL_KEY_ALT); + } else if ((mods & PUGL_MOD_SUPER) != (puglview->mods & PUGL_MOD_SUPER)) { + puglview->specialFunc(puglview, mods & PUGL_MOD_SUPER, PUGL_KEY_SUPER); + } + puglview->mods = mods; + } +} + +@end + +struct PuglInternalsImpl { + PuglOpenGLView* glview; + id window; +}; + +PuglInternals* +puglInitInternals() +{ + return (PuglInternals*)calloc(1, sizeof(PuglInternals)); +} + +void +puglEnterContext(PuglView* view) +{ +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL) { + [[view->impl->glview openGLContext] makeCurrentContext]; + } +#endif +} + +void +puglLeaveContext(PuglView* view, bool flush) +{ +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL && flush) { + if (view->impl->glview->doubleBuffered) { + [[view->impl->glview openGLContext] flushBuffer]; + } else { + glFlush(); + } + //[NSOpenGLContext clearCurrentContext]; + } +#endif +} + +int +puglCreateWindow(PuglView* view, const char* title) +{ + PuglInternals* impl = view->impl; + + [NSAutoreleasePool new]; + [NSApplication sharedApplication]; + + impl->glview = [PuglOpenGLView new]; + + if (!impl->glview) { + return 1; + } + + impl->glview->puglview = view; + + if (view->resizable) { + [impl->glview setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; + } + + if (view->parent) { + [impl->glview retain]; + NSView* pview = (NSView*)view->parent; + [pview addSubview:impl->glview]; + return 0; + } + + id window = [[PuglWindow new]retain]; + + if (title) { + NSString* titleString = [[NSString alloc] + initWithBytes:title + length:strlen(title) + encoding:NSUTF8StringEncoding]; + + [window setTitle:titleString]; + } + + [window setPuglview:view]; + [window setContentView:impl->glview]; + [window makeFirstResponder:impl->glview]; + [window makeKeyAndOrderFront:window]; + + // wait for first puglShowWindow + [window setIsVisible:NO]; + + [NSApp activateIgnoringOtherApps:YES]; + [window center]; + + impl->window = window; + + return 0; +} + +void +puglShowWindow(PuglView* view) +{ + PuglInternals* impl = view->impl; + + if (impl->window) { + [impl->window setIsVisible:YES]; + } else { + [view->impl->glview setHidden:NO]; + } +} + +void +puglHideWindow(PuglView* view) +{ + PuglInternals* impl = view->impl; + + if (impl->window) { + [impl->window setIsVisible:NO]; + } else { + [impl->glview setHidden:YES]; + } +} + +void +puglDestroy(PuglView* view) +{ + view->impl->glview->puglview = NULL; + + if (view->impl->window) { + [view->impl->window close]; + [view->impl->glview release]; + [view->impl->window release]; + } else { + [view->impl->glview release]; + } + + free(view->impl); + free(view); +} + +PuglStatus +puglProcessEvents(PuglView* view) +{ + return PUGL_SUCCESS; + + // unused + (void)view; +} + +void +puglPostRedisplay(PuglView* view) +{ + view->redisplay = true; + [view->impl->glview setNeedsDisplay:YES]; +} + +PuglNativeWindow +puglGetNativeWindow(PuglView* view) +{ + return (PuglNativeWindow)view->impl->glview; +} + +void* +puglGetContext(PuglView* view) +{ + return NULL; +} diff --git a/dpf/dgl/src/pugl/pugl_win.cpp b/dpf/dgl/src/pugl/pugl_win.cpp new file mode 100644 index 0000000..1ac7c9e --- /dev/null +++ b/dpf/dgl/src/pugl/pugl_win.cpp @@ -0,0 +1,481 @@ +/* + Copyright 2012-2014 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file pugl_win.cpp Windows/WGL Pugl Implementation. +*/ + +#include +#include +#include + +#include +#include +#include + +#include "pugl/pugl_internal.h" + +#ifndef WM_MOUSEWHEEL +# define WM_MOUSEWHEEL 0x020A +#endif +#ifndef WM_MOUSEHWHEEL +# define WM_MOUSEHWHEEL 0x020E +#endif +#ifndef WHEEL_DELTA +# define WHEEL_DELTA 120 +#endif +#ifndef GWLP_USERDATA +# define GWLP_USERDATA (-21) +#endif + +#define PUGL_LOCAL_CLOSE_MSG (WM_USER + 50) + +HINSTANCE hInstance = NULL; + +struct PuglInternalsImpl { + HWND hwnd; + HDC hdc; + HGLRC hglrc; + WNDCLASS wc; +}; + +LRESULT CALLBACK +wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); + +#if 0 +extern "C" { +BOOL WINAPI +DllMain(HINSTANCE hInst, DWORD, LPVOID) +{ + hInstance = hInst; + return 1; +} +} // extern "C" +#endif + +PuglInternals* +puglInitInternals() +{ + return (PuglInternals*)calloc(1, sizeof(PuglInternals)); +} + +void +puglEnterContext(PuglView* view) +{ +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL) { + wglMakeCurrent(view->impl->hdc, view->impl->hglrc); + } +#endif +} + +void +puglLeaveContext(PuglView* view, bool flush) +{ +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL && flush) { + glFlush(); + SwapBuffers(view->impl->hdc); + } +#endif +} + +int +puglCreateWindow(PuglView* view, const char* title) +{ + PuglInternals* impl = view->impl; + + if (!title) { + title = "Window"; + } + + // FIXME: This is nasty, and pugl should not have static anything. + // Should class be a parameter? Does this make sense on other platforms? + static int wc_count = 0; + char classNameBuf[256]; + std::srand((std::time(NULL))); + _snprintf(classNameBuf, sizeof(classNameBuf), "%s_%d-%d", title, std::rand(), ++wc_count); + classNameBuf[sizeof(classNameBuf)-1] = '\0'; + + impl->wc.style = CS_OWNDC; + impl->wc.lpfnWndProc = wndProc; + impl->wc.cbClsExtra = 0; + impl->wc.cbWndExtra = 0; + impl->wc.hInstance = hInstance; + impl->wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION); + impl->wc.hCursor = LoadCursor(hInstance, IDC_ARROW); + impl->wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); + impl->wc.lpszMenuName = NULL; + impl->wc.lpszClassName = strdup(classNameBuf); + + if (!RegisterClass(&impl->wc)) { + free((void*)impl->wc.lpszClassName); + free(impl); + free(view); + return 1; + } + + int winFlags = WS_POPUPWINDOW | WS_CAPTION; + if (view->resizable) { + winFlags |= WS_SIZEBOX; + if (view->min_width > 0 && view->min_height > 0) { + // Adjust the minimum window size to accomodate requested view size + RECT mr = { 0, 0, view->min_width, view->min_height }; + AdjustWindowRectEx(&mr, view->parent ? WS_CHILD : winFlags, FALSE, WS_EX_TOPMOST); + view->min_width = mr.right - mr.left; + view->min_height = mr.bottom - mr.top; + } + } + + // Adjust the window size to accomodate requested view size + RECT wr = { 0, 0, view->width, view->height }; + AdjustWindowRectEx(&wr, view->parent ? WS_CHILD : winFlags, FALSE, WS_EX_TOPMOST); + + impl->hwnd = CreateWindowEx( + WS_EX_TOPMOST, + classNameBuf, title, + view->parent ? (WS_CHILD | WS_VISIBLE) : winFlags, + CW_USEDEFAULT, CW_USEDEFAULT, wr.right-wr.left, wr.bottom-wr.top, + (HWND)view->parent, NULL, hInstance, NULL); + + if (!impl->hwnd) { + UnregisterClass(impl->wc.lpszClassName, NULL); + free((void*)impl->wc.lpszClassName); + free(impl); + free(view); + return 1; + } + + SetWindowLongPtr(impl->hwnd, GWLP_USERDATA, (LONG_PTR)view); + + impl->hdc = GetDC(impl->hwnd); + + PIXELFORMATDESCRIPTOR pfd; + ZeroMemory(&pfd, sizeof(pfd)); + pfd.nSize = sizeof(pfd); + pfd.nVersion = 1; + pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cColorBits = 24; + pfd.cDepthBits = 16; + pfd.iLayerType = PFD_MAIN_PLANE; + + int format = ChoosePixelFormat(impl->hdc, &pfd); + SetPixelFormat(impl->hdc, format, &pfd); + + impl->hglrc = wglCreateContext(impl->hdc); + if (!impl->hglrc) { + ReleaseDC (impl->hwnd, impl->hdc); + DestroyWindow (impl->hwnd); + UnregisterClass (impl->wc.lpszClassName, NULL); + free((void*)impl->wc.lpszClassName); + free(impl); + free(view); + return 1; + } + + return PUGL_SUCCESS; +} + +void +puglShowWindow(PuglView* view) +{ + ShowWindow(view->impl->hwnd, SW_SHOWNORMAL); +} + +void +puglHideWindow(PuglView* view) +{ + ShowWindow(view->impl->hwnd, SW_HIDE); +} + +void +puglDestroy(PuglView* view) +{ + wglMakeCurrent(NULL, NULL); + wglDeleteContext(view->impl->hglrc); + ReleaseDC(view->impl->hwnd, view->impl->hdc); + DestroyWindow(view->impl->hwnd); + UnregisterClass(view->impl->wc.lpszClassName, NULL); + free((void*)view->impl->wc.lpszClassName); + free(view->impl); + free(view); +} + +static void +puglReshape(PuglView* view, int width, int height) +{ + puglEnterContext(view); + + if (view->reshapeFunc) { + view->reshapeFunc(view, width, height); + } else { + puglDefaultReshape(view, width, height); + } + + view->width = width; + view->height = height; +} + +static void +puglDisplay(PuglView* view) +{ + puglEnterContext(view); + + view->redisplay = false; + if (view->displayFunc) { + view->displayFunc(view); + } + + puglLeaveContext(view, true); +} + +static PuglKey +keySymToSpecial(int sym) +{ + switch (sym) { + case VK_F1: return PUGL_KEY_F1; + case VK_F2: return PUGL_KEY_F2; + case VK_F3: return PUGL_KEY_F3; + case VK_F4: return PUGL_KEY_F4; + case VK_F5: return PUGL_KEY_F5; + case VK_F6: return PUGL_KEY_F6; + case VK_F7: return PUGL_KEY_F7; + case VK_F8: return PUGL_KEY_F8; + case VK_F9: return PUGL_KEY_F9; + case VK_F10: return PUGL_KEY_F10; + case VK_F11: return PUGL_KEY_F11; + case VK_F12: return PUGL_KEY_F12; + case VK_LEFT: return PUGL_KEY_LEFT; + case VK_UP: return PUGL_KEY_UP; + case VK_RIGHT: return PUGL_KEY_RIGHT; + case VK_DOWN: return PUGL_KEY_DOWN; + case VK_PRIOR: return PUGL_KEY_PAGE_UP; + case VK_NEXT: return PUGL_KEY_PAGE_DOWN; + case VK_HOME: return PUGL_KEY_HOME; + case VK_END: return PUGL_KEY_END; + case VK_INSERT: return PUGL_KEY_INSERT; + case VK_SHIFT: return PUGL_KEY_SHIFT; + case VK_CONTROL: return PUGL_KEY_CTRL; + case VK_MENU: return PUGL_KEY_ALT; + case VK_LWIN: return PUGL_KEY_SUPER; + case VK_RWIN: return PUGL_KEY_SUPER; + } + return (PuglKey)0; +} + +static void +processMouseEvent(PuglView* view, int button, bool press, LPARAM lParam) +{ + view->event_timestamp_ms = GetMessageTime(); + if (press) { + SetCapture(view->impl->hwnd); + } else { + ReleaseCapture(); + } + + if (view->mouseFunc) { + view->mouseFunc(view, button, press, + GET_X_LPARAM(lParam), + GET_Y_LPARAM(lParam)); + } +} + +static void +setModifiers(PuglView* view) +{ + view->mods = 0; + view->mods |= (GetKeyState(VK_SHIFT) < 0) ? PUGL_MOD_SHIFT : 0; + view->mods |= (GetKeyState(VK_CONTROL) < 0) ? PUGL_MOD_CTRL : 0; + view->mods |= (GetKeyState(VK_MENU) < 0) ? PUGL_MOD_ALT : 0; + view->mods |= (GetKeyState(VK_LWIN) < 0) ? PUGL_MOD_SUPER : 0; + view->mods |= (GetKeyState(VK_RWIN) < 0) ? PUGL_MOD_SUPER : 0; +} + +static LRESULT +handleMessage(PuglView* view, UINT message, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + PuglKey key; + RECT rect; + MINMAXINFO* mmi; + + setModifiers(view); + switch (message) { + case WM_CREATE: + case WM_SHOWWINDOW: + case WM_SIZE: + GetClientRect(view->impl->hwnd, &rect); + puglReshape(view, rect.right, rect.bottom); + view->width = rect.right; + view->height = rect.bottom; + break; + case WM_GETMINMAXINFO: + mmi = (MINMAXINFO*)lParam; + mmi->ptMinTrackSize.x = view->min_width; + mmi->ptMinTrackSize.y = view->min_height; + break; + case WM_PAINT: + BeginPaint(view->impl->hwnd, &ps); + puglDisplay(view); + EndPaint(view->impl->hwnd, &ps); + break; + case WM_MOUSEMOVE: + if (view->motionFunc) { + view->event_timestamp_ms = GetMessageTime(); + view->motionFunc(view, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)); + } + break; + case WM_LBUTTONDOWN: + processMouseEvent(view, 1, true, lParam); + break; + case WM_MBUTTONDOWN: + processMouseEvent(view, 2, true, lParam); + break; + case WM_RBUTTONDOWN: + processMouseEvent(view, 3, true, lParam); + break; + case WM_LBUTTONUP: + processMouseEvent(view, 1, false, lParam); + break; + case WM_MBUTTONUP: + processMouseEvent(view, 2, false, lParam); + break; + case WM_RBUTTONUP: + processMouseEvent(view, 3, false, lParam); + break; + case WM_MOUSEWHEEL: + if (view->scrollFunc) { + view->event_timestamp_ms = GetMessageTime(); + POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; + ScreenToClient(view->impl->hwnd, &pt); + view->scrollFunc( + view, pt.x, pt.y, + 0.0f, GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA); + } + break; + case WM_MOUSEHWHEEL: + if (view->scrollFunc) { + view->event_timestamp_ms = GetMessageTime(); + POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; + ScreenToClient(view->impl->hwnd, &pt); + view->scrollFunc( + view, pt.x, pt.y, + GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA, 0.0f); + } + break; + case WM_KEYDOWN: + if (view->ignoreKeyRepeat && (lParam & (1 << 30))) { + break; + } // else nobreak + case WM_KEYUP: + view->event_timestamp_ms = GetMessageTime(); + if ((key = keySymToSpecial(wParam))) { + if (view->specialFunc) { + view->specialFunc(view, message == WM_KEYDOWN, key); + } + } else if (view->keyboardFunc) { + static BYTE kbs[256]; + if (GetKeyboardState(kbs) != FALSE) { + char lb[2]; + UINT scanCode = (lParam >> 8) & 0xFFFFFF00; + if ( 1 == ToAscii(wParam, scanCode, kbs, (LPWORD)lb, 0)) { + view->keyboardFunc(view, message == WM_KEYDOWN, (char)lb[0]); + } + } + } + break; + case WM_QUIT: + case PUGL_LOCAL_CLOSE_MSG: + if (view->closeFunc) { + view->closeFunc(view); + view->redisplay = false; + } + break; + default: + return DefWindowProc( + view->impl->hwnd, message, wParam, lParam); + } + + return 0; +} + +void +puglGrabFocus(PuglView* view) +{ + // TODO +} + +PuglStatus +puglProcessEvents(PuglView* view) +{ + MSG msg; + while (PeekMessage(&msg, view->impl->hwnd, 0, 0, PM_REMOVE)) { + handleMessage(view, msg.message, msg.wParam, msg.lParam); + } + + if (view->redisplay) { + InvalidateRect(view->impl->hwnd, NULL, FALSE); + } + + return PUGL_SUCCESS; +} + +LRESULT CALLBACK +wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + PuglView* view = (PuglView*)GetWindowLongPtr(hwnd, GWLP_USERDATA); + + switch (message) { + case WM_CREATE: + PostMessage(hwnd, WM_SHOWWINDOW, TRUE, 0); + return 0; + case WM_CLOSE: + PostMessage(hwnd, PUGL_LOCAL_CLOSE_MSG, wParam, lParam); + return 0; + case WM_DESTROY: + return 0; + default: + if (view && hwnd == view->impl->hwnd) { + return handleMessage(view, message, wParam, lParam); + } else { + return DefWindowProc(hwnd, message, wParam, lParam); + } + } +} + +void +puglPostRedisplay(PuglView* view) +{ + view->redisplay = true; +} + +PuglNativeWindow +puglGetNativeWindow(PuglView* view) +{ + return (PuglNativeWindow)view->impl->hwnd; +} + +void* +puglGetContext(PuglView* view) +{ +#ifdef PUGL_HAVE_CAIRO + if (view->ctx_type == PUGL_CAIRO) { + // TODO + } +#endif + return NULL; +} diff --git a/dpf/dgl/src/pugl/pugl_x11.c b/dpf/dgl/src/pugl/pugl_x11.c new file mode 100644 index 0000000..d0cd881 --- /dev/null +++ b/dpf/dgl/src/pugl/pugl_x11.c @@ -0,0 +1,609 @@ +/* + Copyright 2012-2014 David Robillard + Copyright 2013 Robin Gareus + Copyright 2011-2012 Ben Loftis, Harrison Consoles + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file pugl_x11.c X11 Pugl Implementation. +*/ + +#include +#include +#include + +#include +#include +#include +#include + +#ifdef PUGL_HAVE_GL +#include +#include +#endif + +#ifdef PUGL_HAVE_CAIRO +#include +#include +#endif + +#include "pugl/pugl_internal.h" + +#define SOFD_HAVE_X11 +#include "../sofd/libsofd.h" +#include "../sofd/libsofd.c" + +struct PuglInternalsImpl { + Display* display; + int screen; + Window win; + XIM xim; + XIC xic; +#ifdef PUGL_HAVE_CAIRO + cairo_t* cr; + cairo_surface_t* surface; +#endif +#ifdef PUGL_HAVE_GL + GLXContext ctx; + Bool doubleBuffered; +#endif +}; + +PuglInternals* +puglInitInternals(void) +{ + return (PuglInternals*)calloc(1, sizeof(PuglInternals)); +} + +static XVisualInfo* +getVisual(PuglView* view) +{ + PuglInternals* const impl = view->impl; + XVisualInfo* vi = NULL; + +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL) { + /** + Attributes for single-buffered RGBA with at least + 4 bits per color and a 16 bit depth buffer. + */ + int attrListSgl[] = { + GLX_RGBA, + GLX_RED_SIZE, 4, + GLX_GREEN_SIZE, 4, + GLX_BLUE_SIZE, 4, + GLX_DEPTH_SIZE, 16, + GLX_ARB_multisample, 1, + None + }; + + /** + Attributes for double-buffered RGBA with at least + 4 bits per color and a 16 bit depth buffer. + */ + int attrListDbl[] = { + GLX_RGBA, + GLX_DOUBLEBUFFER, + GLX_RED_SIZE, 4, + GLX_GREEN_SIZE, 4, + GLX_BLUE_SIZE, 4, + GLX_DEPTH_SIZE, 16, + GLX_ARB_multisample, 1, + None + }; + + /** + Attributes for double-buffered RGBA with multi-sampling + (antialiasing) + */ + int attrListDblMS[] = { + GLX_RGBA, + GLX_DOUBLEBUFFER, + GLX_RED_SIZE, 4, + GLX_GREEN_SIZE, 4, + GLX_BLUE_SIZE, 4, + GLX_ALPHA_SIZE, 4, + GLX_DEPTH_SIZE, 16, + GLX_SAMPLE_BUFFERS, 1, + GLX_SAMPLES, 4, + None + }; + + impl->doubleBuffered = True; + + vi = glXChooseVisual(impl->display, impl->screen, attrListDblMS); + + if (vi == NULL) { + vi = glXChooseVisual(impl->display, impl->screen, attrListDbl); + PUGL_LOG("multisampling (antialiasing) is not available\n"); + } + + if (vi == NULL) { + vi = glXChooseVisual(impl->display, impl->screen, attrListSgl); + impl->doubleBuffered = False; + PUGL_LOG("singlebuffered rendering will be used, no doublebuffering available\n"); + } + } +#endif +#ifdef PUGL_HAVE_CAIRO + if (view->ctx_type == PUGL_CAIRO) { + XVisualInfo pat; + int n; + pat.screen = impl->screen; + vi = XGetVisualInfo(impl->display, VisualScreenMask, &pat, &n); + } +#endif + + return vi; +} + +static bool +createContext(PuglView* view, XVisualInfo* vi) +{ + PuglInternals* const impl = view->impl; + +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL) { + impl->ctx = glXCreateContext(impl->display, vi, 0, GL_TRUE); + return (impl->ctx != NULL); + } +#endif +#ifdef PUGL_HAVE_CAIRO + if (view->ctx_type == PUGL_CAIRO) { + impl->surface = cairo_xlib_surface_create( + impl->display, impl->win, vi->visual, view->width, view->height); + if (impl->surface == NULL) { + PUGL_LOG("failed to create cairo surface\n"); + return false; + } + impl->cr = cairo_create(impl->surface); + if (impl->cr == NULL) { + cairo_surface_destroy(impl->surface); + impl->surface = NULL; + PUGL_LOG("failed to create cairo context\n"); + return false; + } + return true; + } +#endif + + return false; +} + +static void +destroyContext(PuglView* view) +{ + PuglInternals* const impl = view->impl; + +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL) { + glXDestroyContext(impl->display, impl->ctx); + impl->ctx = NULL; + } +#endif +#ifdef PUGL_HAVE_CAIRO + if (view->ctx_type == PUGL_CAIRO) { + cairo_destroy(impl->cr); + impl->cr = NULL; + + cairo_surface_destroy(impl->surface); + impl->surface = NULL; + } +#endif +} + +void +puglEnterContext(PuglView* view) +{ +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL) { + glXMakeCurrent(view->impl->display, view->impl->win, view->impl->ctx); + } +#endif +} + +void +puglLeaveContext(PuglView* view, bool flush) +{ +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL && flush) { + glFlush(); + if (view->impl->doubleBuffered) { + glXSwapBuffers(view->impl->display, view->impl->win); + } + } +#endif +} + +int +puglCreateWindow(PuglView* view, const char* title) +{ + PuglInternals* const impl = view->impl; + + impl->display = XOpenDisplay(NULL); + impl->screen = DefaultScreen(impl->display); + + XVisualInfo* const vi = getVisual(view); + if (!vi) { + XCloseDisplay(impl->display); + impl->display = NULL; + return 1; + } + +#ifdef PUGL_HAVE_GL + int glxMajor, glxMinor; + glXQueryVersion(impl->display, &glxMajor, &glxMinor); + PUGL_LOGF("GLX Version %d.%d\n", glxMajor, glxMinor); +#endif + + Window xParent = view->parent + ? (Window)view->parent + : RootWindow(impl->display, impl->screen); + + Colormap cmap = XCreateColormap( + impl->display, xParent, vi->visual, AllocNone); + + XSetWindowAttributes attr; + memset(&attr, 0, sizeof(XSetWindowAttributes)); + attr.background_pixel = BlackPixel(impl->display, impl->screen); + attr.border_pixel = BlackPixel(impl->display, impl->screen); + attr.colormap = cmap; + attr.event_mask = (ExposureMask | StructureNotifyMask | + EnterWindowMask | LeaveWindowMask | + KeyPressMask | KeyReleaseMask | + ButtonPressMask | ButtonReleaseMask | + PointerMotionMask | FocusChangeMask); + + impl->win = XCreateWindow( + impl->display, xParent, + 0, 0, view->width, view->height, 0, vi->depth, InputOutput, vi->visual, + CWBackPixel | CWBorderPixel | CWColormap | CWEventMask, &attr); + + if (!createContext(view, vi)) { + XDestroyWindow(impl->display, impl->win); + impl->win = 0; + + XCloseDisplay(impl->display); + impl->display = NULL; + + return 1; + } + + XSizeHints sizeHints; + memset(&sizeHints, 0, sizeof(sizeHints)); + if (!view->resizable) { + sizeHints.flags = PMinSize|PMaxSize; + sizeHints.min_width = view->width; + sizeHints.min_height = view->height; + sizeHints.max_width = view->width; + sizeHints.max_height = view->height; + XSetNormalHints(impl->display, impl->win, &sizeHints); + } else if (view->min_width > 0 && view->min_height > 0) { + sizeHints.flags = PMinSize; + sizeHints.min_width = view->min_width; + sizeHints.min_height = view->min_height; + XSetNormalHints(impl->display, impl->win, &sizeHints); + } + + if (title) { + XStoreName(impl->display, impl->win, title); + } + + if (!view->parent) { + Atom wmDelete = XInternAtom(impl->display, "WM_DELETE_WINDOW", True); + XSetWMProtocols(impl->display, impl->win, &wmDelete, 1); + } + + if (glXIsDirect(impl->display, impl->ctx)) { + PUGL_LOG("DRI enabled (to disable, set LIBGL_ALWAYS_INDIRECT=1\n"); + } else { + PUGL_LOG("No DRI available\n"); + } + + XFree(vi); + + return PUGL_SUCCESS; +} + +void +puglShowWindow(PuglView* view) +{ + XMapRaised(view->impl->display, view->impl->win); +} + +void +puglHideWindow(PuglView* view) +{ + XUnmapWindow(view->impl->display, view->impl->win); +} + +void +puglDestroy(PuglView* view) +{ + if (!view) { + return; + } + + x_fib_close(view->impl->display); + + destroyContext(view); + XDestroyWindow(view->impl->display, view->impl->win); + XCloseDisplay(view->impl->display); + free(view->impl); + free(view); +} + +static void +puglReshape(PuglView* view, int width, int height) +{ + puglEnterContext(view); + + if (view->reshapeFunc) { + view->reshapeFunc(view, width, height); + } else { + puglDefaultReshape(view, width, height); + } + + puglLeaveContext(view, false); + + view->width = width; + view->height = height; +} + +static void +puglDisplay(PuglView* view) +{ + puglEnterContext(view); + + view->redisplay = false; + + if (view->displayFunc) { + view->displayFunc(view); + } + + puglLeaveContext(view, true); +} + +static PuglKey +keySymToSpecial(KeySym sym) +{ + switch (sym) { + case XK_F1: return PUGL_KEY_F1; + case XK_F2: return PUGL_KEY_F2; + case XK_F3: return PUGL_KEY_F3; + case XK_F4: return PUGL_KEY_F4; + case XK_F5: return PUGL_KEY_F5; + case XK_F6: return PUGL_KEY_F6; + case XK_F7: return PUGL_KEY_F7; + case XK_F8: return PUGL_KEY_F8; + case XK_F9: return PUGL_KEY_F9; + case XK_F10: return PUGL_KEY_F10; + case XK_F11: return PUGL_KEY_F11; + case XK_F12: return PUGL_KEY_F12; + case XK_Left: return PUGL_KEY_LEFT; + case XK_Up: return PUGL_KEY_UP; + case XK_Right: return PUGL_KEY_RIGHT; + case XK_Down: return PUGL_KEY_DOWN; + case XK_Page_Up: return PUGL_KEY_PAGE_UP; + case XK_Page_Down: return PUGL_KEY_PAGE_DOWN; + case XK_Home: return PUGL_KEY_HOME; + case XK_End: return PUGL_KEY_END; + case XK_Insert: return PUGL_KEY_INSERT; + case XK_Shift_L: return PUGL_KEY_SHIFT; + case XK_Shift_R: return PUGL_KEY_SHIFT; + case XK_Control_L: return PUGL_KEY_CTRL; + case XK_Control_R: return PUGL_KEY_CTRL; + case XK_Alt_L: return PUGL_KEY_ALT; + case XK_Alt_R: return PUGL_KEY_ALT; + case XK_Super_L: return PUGL_KEY_SUPER; + case XK_Super_R: return PUGL_KEY_SUPER; + } + return (PuglKey)0; +} + +static void +setModifiers(PuglView* view, unsigned xstate, unsigned xtime) +{ + view->event_timestamp_ms = xtime; + + view->mods = 0; + view->mods |= (xstate & ShiftMask) ? PUGL_MOD_SHIFT : 0; + view->mods |= (xstate & ControlMask) ? PUGL_MOD_CTRL : 0; + view->mods |= (xstate & Mod1Mask) ? PUGL_MOD_ALT : 0; + view->mods |= (xstate & Mod4Mask) ? PUGL_MOD_SUPER : 0; +} + +static void +dispatchKey(PuglView* view, XEvent* event, bool press) +{ + KeySym sym; + char str[5]; + const int n = XLookupString(&event->xkey, str, 4, &sym, NULL); + + if (sym == XK_Escape && view->closeFunc && !press && !view->parent) { + view->closeFunc(view); + view->redisplay = false; + return; + } + if (n == 0) { + return; + } + if (n > 1) { + fprintf(stderr, "warning: Unsupported multi-byte key %X\n", (int)sym); + return; + } + + const PuglKey special = keySymToSpecial(sym); + if (special && view->specialFunc) { + view->specialFunc(view, press, special); + } else if (!special && view->keyboardFunc) { + view->keyboardFunc(view, press, str[0]); + } +} + +PuglStatus +puglProcessEvents(PuglView* view) +{ + XEvent event; + while (XPending(view->impl->display) > 0) { + XNextEvent(view->impl->display, &event); + + if (x_fib_handle_events(view->impl->display, &event)) { + const int status = x_fib_status(); + + if (status > 0) { + char* const filename = x_fib_filename(); + x_fib_close(view->impl->display); + if (view->fileSelectedFunc) { + view->fileSelectedFunc(view, filename); + } + free(filename); + } else if (status < 0) { + x_fib_close(view->impl->display); + if (view->fileSelectedFunc) { + view->fileSelectedFunc(view, NULL); + } + } + break; + } + + if (event.xany.window != view->impl->win) { + continue; + } + + switch (event.type) { + case MapNotify: + puglReshape(view, view->width, view->height); + break; + case ConfigureNotify: + if ((event.xconfigure.width != view->width) || + (event.xconfigure.height != view->height)) { + puglReshape(view, + event.xconfigure.width, + event.xconfigure.height); + } + break; + case Expose: + if (event.xexpose.count != 0) { + break; + } + puglDisplay(view); + break; + case MotionNotify: + setModifiers(view, event.xmotion.state, event.xmotion.time); + if (view->motionFunc) { + view->motionFunc(view, event.xmotion.x, event.xmotion.y); + } + break; + case ButtonPress: + setModifiers(view, event.xbutton.state, event.xbutton.time); + if (event.xbutton.button >= 4 && event.xbutton.button <= 7) { + if (view->scrollFunc) { + float dx = 0, dy = 0; + switch (event.xbutton.button) { + case 4: dy = 1.0f; break; + case 5: dy = -1.0f; break; + case 6: dx = -1.0f; break; + case 7: dx = 1.0f; break; + } + view->scrollFunc(view, event.xbutton.x, event.xbutton.y, dx, dy); + } + break; + } + // nobreak + case ButtonRelease: + setModifiers(view, event.xbutton.state, event.xbutton.time); + if (view->mouseFunc && + (event.xbutton.button < 4 || event.xbutton.button > 7)) { + view->mouseFunc(view, + event.xbutton.button, event.type == ButtonPress, + event.xbutton.x, event.xbutton.y); + } + break; + case KeyPress: + setModifiers(view, event.xkey.state, event.xkey.time); + dispatchKey(view, &event, true); + break; + case KeyRelease: { + setModifiers(view, event.xkey.state, event.xkey.time); + bool repeated = false; + if (view->ignoreKeyRepeat && + XEventsQueued(view->impl->display, QueuedAfterReading)) { + XEvent next; + XPeekEvent(view->impl->display, &next); + if (next.type == KeyPress && + next.xkey.time == event.xkey.time && + next.xkey.keycode == event.xkey.keycode) { + XNextEvent(view->impl->display, &event); + repeated = true; + } + } + if (!repeated) { + dispatchKey(view, &event, false); + } + } break; + case ClientMessage: { + char* type = XGetAtomName(view->impl->display, + event.xclient.message_type); + if (!strcmp(type, "WM_PROTOCOLS")) { + if (view->closeFunc) { + view->closeFunc(view); + view->redisplay = false; + } + } + XFree(type); + } break; +#ifdef PUGL_GRAB_FOCUS + case EnterNotify: + XSetInputFocus(view->impl->display, view->impl->win, RevertToPointerRoot, CurrentTime); + break; +#endif + default: + break; + } + } + + if (view->redisplay) { + puglDisplay(view); + } + + return PUGL_SUCCESS; +} + +void +puglPostRedisplay(PuglView* view) +{ + view->redisplay = true; +} + +PuglNativeWindow +puglGetNativeWindow(PuglView* view) +{ + return view->impl->win; +} + +void* +puglGetContext(PuglView* view) +{ +#ifdef PUGL_HAVE_CAIRO + if (view->ctx_type == PUGL_CAIRO) { + return view->impl->cr; + } +#endif + return NULL; + + // may be unused + (void)view; +} diff --git a/dpf/dgl/src/sofd/libsofd.c b/dpf/dgl/src/sofd/libsofd.c new file mode 100644 index 0000000..bcca9f7 --- /dev/null +++ b/dpf/dgl/src/sofd/libsofd.c @@ -0,0 +1,2431 @@ +/* libSOFD - Simple Open File Dialog [for X11 without toolkit] + * + * Copyright (C) 2014 Robin Gareus + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/* Test and example: + * gcc -Wall -D SOFD_TEST -g -o sofd libsofd.c -lX11 + * + * public API documentation and example code at the bottom of this file + * + * This small lib may one day include openGL rendering and + * wayland window support, but not today. Today we celebrate + * 30 years of X11. + */ + +#ifdef SOFD_TEST +#define SOFD_HAVE_X11 +#include "libsofd.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wnarrowing" +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wnarrowing" +#endif + +// shared 'recently used' implementation +// sadly, xbel does not qualify as simple. +// hence we use a simple format alike the +// gtk-bookmark list (one file per line) + +#define MAX_RECENT_ENTRIES 24 +#define MAX_RECENT_AGE (15552000) // 180 days (in sec) + +typedef struct { + char path[1024]; + time_t atime; +} FibRecentFile; + +static FibRecentFile *_recentlist = NULL; +static unsigned int _recentcnt = 0; +static uint8_t _recentlock = 0; + +static int fib_isxdigit (const char x) { + if ( + (x >= '0' && x <= '9') + || + (x >= 'a' && x <= 'f') + || + (x >= 'A' && x <= 'F') + ) return 1; + return 0; +} + +static void decode_3986 (char *str) { + int len = strlen (str); + int idx = 0; + while (idx + 2 < len) { + char *in = &str[idx]; + if (('%' == *in) && fib_isxdigit (in[1]) && fib_isxdigit (in[2])) { + char hexstr[3]; + hexstr[0] = in[1]; + hexstr[1] = in[2]; + hexstr[2] = 0; + long hex = strtol (hexstr, NULL, 16); + *in = hex; + memmove (&str[idx+1], &str[idx + 3], len - idx - 2); + len -= 2; + } + ++idx; + } +} + +static char *encode_3986 (const char *str) { + size_t alloc, newlen; + char *ns = NULL; + unsigned char in; + size_t i = 0; + size_t length; + + if (!str) return strdup (""); + + alloc = strlen (str) + 1; + newlen = alloc; + + ns = (char*) malloc (alloc); + + length = alloc; + while (--length) { + in = *str; + + switch (in) { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': + case '_': case '~': case '.': case '-': + case '/': case ',': // XXX not in RFC3986 + ns[i++] = in; + break; + default: + newlen += 2; /* this'll become a %XX */ + if (newlen > alloc) { + alloc *= 2; + ns = (char*) realloc (ns, alloc); + } + snprintf (&ns[i], 4, "%%%02X", in); + i += 3; + break; + } + ++str; + } + ns[i] = 0; + return ns; +} + +void x_fib_free_recent () { + free (_recentlist); + _recentlist = NULL; + _recentcnt = 0; +} + +static int cmp_recent (const void *p1, const void *p2) { + FibRecentFile *a = (FibRecentFile*) p1; + FibRecentFile *b = (FibRecentFile*) p2; + if (a->atime == b->atime) return 0; + return a->atime < b->atime; +} + +int x_fib_add_recent (const char *path, time_t atime) { + unsigned int i; + struct stat fs; + if (_recentlock) { return -1; } + if (access (path, R_OK)) { + return -1; + } + if (stat (path, &fs)) { + return -1; + } + if (!S_ISREG (fs.st_mode)) { + return -1; + } + if (atime == 0) atime = time (NULL); + if (MAX_RECENT_AGE > 0 && atime + MAX_RECENT_AGE < time (NULL)) { + return -1; + } + + for (i = 0; i < _recentcnt; ++i) { + if (!strcmp (_recentlist[i].path, path)) { + if (_recentlist[i].atime < atime) { + _recentlist[i].atime = atime; + } + qsort (_recentlist, _recentcnt, sizeof(FibRecentFile), cmp_recent); + return _recentcnt; + } + } + _recentlist = (FibRecentFile*)realloc (_recentlist, (_recentcnt + 1) * sizeof(FibRecentFile)); + _recentlist[_recentcnt].atime = atime; + strcpy (_recentlist[_recentcnt].path, path); + qsort (_recentlist, _recentcnt + 1, sizeof(FibRecentFile), cmp_recent); + + if (_recentcnt >= MAX_RECENT_ENTRIES) { + return (_recentcnt); + } + return (++_recentcnt); +} + +#ifdef PATHSEP +#undef PATHSEP +#endif + +#ifdef PLATFORM_WINDOWS +#define DIRSEP '\\' +#else +#define DIRSEP '/' +#endif + +static void mkpath(const char *dir) { + char tmp[1024]; + char *p; + size_t len; + + snprintf (tmp, sizeof(tmp), "%s", dir); + len = strlen(tmp); + if (tmp[len - 1] == '/') + tmp[len - 1] = 0; + for (p = tmp + 1; *p; ++p) + if(*p == DIRSEP) { + *p = 0; +#ifdef PLATFORM_WINDOWS + mkdir(tmp); +#else + mkdir(tmp, 0755); +#endif + *p = DIRSEP; + } +#ifdef PLATFORM_WINDOWS + mkdir(tmp); +#else + mkdir(tmp, 0755); +#endif +} + +int x_fib_save_recent (const char *fn) { + if (_recentlock) { return -1; } + if (!fn) { return -1; } + if (_recentcnt < 1 || !_recentlist) { return -1; } + unsigned int i; + char *dn = strdup (fn); + mkpath (dirname (dn)); + free (dn); + + FILE *rf = fopen (fn, "w"); + if (!rf) return -1; + + qsort (_recentlist, _recentcnt, sizeof(FibRecentFile), cmp_recent); + for (i = 0; i < _recentcnt; ++i) { + char *n = encode_3986 (_recentlist[i].path); + fprintf (rf, "%s %lu\n", n, _recentlist[i].atime); + free (n); + } + fclose (rf); + return 0; +} + +int x_fib_load_recent (const char *fn) { + char tmp[1024]; + if (_recentlock) { return -1; } + if (!fn) { return -1; } + x_fib_free_recent (); + if (access (fn, R_OK)) { + return -1; + } + FILE *rf = fopen (fn, "r"); + if (!rf) return -1; + while (fgets (tmp, sizeof(tmp), rf) + && strlen (tmp) > 1 + && strlen (tmp) < sizeof(tmp)) + { + char *s; + tmp[strlen (tmp) - 1] = '\0'; // strip newline + if (!(s = strchr (tmp, ' '))) { // find name <> atime sep + continue; + } + *s = '\0'; + time_t t = atol (++s); + decode_3986 (tmp); + x_fib_add_recent (tmp, t); + } + fclose (rf); + return 0; +} + +unsigned int x_fib_recent_count () { + return _recentcnt; +} + +const char *x_fib_recent_at (unsigned int i) { + if (i >= _recentcnt) + return NULL; + return _recentlist[i].path; +} + +#ifdef PLATFORM_WINDOWS +#define PATHSEP "\\" +#else +#define PATHSEP "/" +#endif + +const char *x_fib_recent_file(const char *appname) { + static char recent_file[1024]; + assert(!strchr(appname, '/')); + const char *xdg = getenv("XDG_DATA_HOME"); + if (xdg && (strlen(xdg) + strlen(appname) + 10) < sizeof(recent_file)) { + sprintf(recent_file, "%s" PATHSEP "%s" PATHSEP "recent", xdg, appname); + return recent_file; + } +#ifdef PLATFORM_WINDOWS + const char * homedrive = getenv("HOMEDRIVE"); + const char * homepath = getenv("HOMEPATH"); + if (homedrive && homepath && (strlen(homedrive) + strlen(homepath) + strlen(appname) + 29) < PATH_MAX) { + sprintf(recent_file, "%s%s" PATHSEP "Application Data" PATHSEP "%s" PATHSEP "recent.txt", homedrive, homepath, appname); + return recent_file; + } +#elif defined PLATFORM_OSX + const char *home = getenv("HOME"); + if (home && (strlen(home) + strlen(appname) + 29) < sizeof(recent_file)) { + sprintf(recent_file, "%s/Library/Preferences/%s/recent", home, appname); + return recent_file; + } +#else + const char *home = getenv("HOME"); + if (home && (strlen(home) + strlen(appname) + 22) < sizeof(recent_file)) { + sprintf(recent_file, "%s/.local/share/%s/recent", home, appname); + return recent_file; + } +#endif + return NULL; +} + +#ifdef SOFD_HAVE_X11 +#include +#include + +#include +#include +#include +#include +#include + +#ifndef MIN +#define MIN(A,B) ( (A) < (B) ? (A) : (B) ) +#endif + +#ifndef MAX +#define MAX(A,B) ( (A) < (B) ? (B) : (A) ) +#endif + +static Window _fib_win = 0; +static GC _fib_gc = 0; +static XColor _c_gray0, _c_gray1, _c_gray2, _c_gray3, _c_gray4, _c_gray5, _c_gray6; +static Font _fibfont = 0; +static Pixmap _pixbuffer = None; + +static int _fib_width = 100; +static int _fib_height = 100; +static int _btn_w = 0; +static int _btn_span = 0; + +static int _fib_font_height = 0; +static int _fib_dir_indent = 0; +static int _fib_spc_norm = 0; +static int _fib_font_ascent = 0; +static int _fib_font_vsep = 0; +static int _fib_font_size_width = 0; +static int _fib_font_time_width = 0; +static int _fib_place_width = 0; + +static int _scrl_f = 0; +static int _scrl_y0 = -1; +static int _scrl_y1 = -1; +static int _scrl_my = -1; +static int _scrl_mf = -1; +static int _view_p = -1; + +static int _fsel = -1; +static int _hov_b = -1; +static int _hov_f = -1; +static int _hov_p = -1; +static int _hov_h = -1; +static int _hov_l = -1; +static int _hov_s = -1; +static int _sort = 0; +static int _columns = 0; +static int _fib_filter_fn = 1; +static int _fib_hidden_fn = 0; +static int _fib_show_places = 0; + +static uint8_t _fib_mapped = 0; +static uint8_t _fib_resized = 0; +static unsigned long _dblclk = 0; + +static int _status = -2; +static char _rv_open[1024] = ""; + +static char _fib_cfg_custom_places[1024] = ""; +static char _fib_cfg_custom_font[256] = ""; +static char _fib_cfg_title[128] = "xjadeo - Open Video File"; + +typedef struct { + char name[256]; + int x0; + int xw; +} FibPathButton; + +typedef struct { + char name[256]; + char strtime[32]; + char strsize[32]; + int ssizew; + off_t size; + time_t mtime; + uint8_t flags; // 2: selected, 4: isdir 8: recent-entry + FibRecentFile *rfp; +} FibFileEntry; + +typedef struct { + char text[24]; + uint8_t flags; // 2: selected, 4: toggle, 8 disable + int x0; + int tw; + int xw; + void (*callback)(Display*); +} FibButton; + +typedef struct { + char name[256]; + char path[1024]; + uint8_t flags; // 1: hover, 2: selected, 4:add sep +} FibPlace; + +static char _cur_path[1024] = ""; +static FibFileEntry *_dirlist = NULL; +static FibPathButton *_pathbtn = NULL; +static FibPlace *_placelist = NULL; +static int _dircount = 0; +static int _pathparts = 0; +static int _placecnt = 0; + +static FibButton _btn_ok; +static FibButton _btn_cancel; +static FibButton _btn_filter; +static FibButton _btn_places; +static FibButton _btn_hidden; +static FibButton *_btns[] = {&_btn_places, &_btn_filter, &_btn_hidden, &_btn_cancel, &_btn_ok}; + +static int (*_fib_filter_function)(const char *filename); + +/* hardcoded layout */ +#define DSEP 6 // px; horiz space beween elements, also l+r margin for file-list +#define PSEP 4 // px; horiz space beween paths +#define FILECOLUMN (17 * _fib_dir_indent) //px; min width of file-column +#define LISTTOP 2.7 //em; top of the file-browser list +#define LISTBOT 4.75 //em; bottom of the file-browers list +#define BTNBTMMARGIN 0.75 //em; height/margin of the button row +#define BTNPADDING 2 // px - only used for open/cancel buttons +#define SCROLLBARW (3 + (_fib_spc_norm&~1)) //px; - should be SCROLLBARW = (N * 2 + 3) +#define SCROLLBOXH 10 //px; arrow box top+bottom +#define PLACESW _fib_place_width //px; +#define PLACESWMAX (15 *_fib_spc_norm) //px; +#define PATHBTNTOP _fib_font_vsep //px; offset by (_fib_font_ascent); +#define FAREAMRGB 3 //px; base L+R margin +#define FAREAMRGR (FAREAMRGB + 1) //px; right margin of file-area + 1 (line width) +#define FAREAMRGL (_fib_show_places ? PLACESW + FAREAMRGB : FAREAMRGB) //px; left margin of file-area +#define TEXTSEP 4 //px; +#define FAREATEXTL (FAREAMRGL + TEXTSEP) //px; filename text-left FAREAMRGL + TEXTSEP +#define SORTBTNOFF -10 //px; + +#define DBLCLKTME 400 //msec; double click time +#define DRAW_OUTLINE +#define DOUBLE_BUFFER + +static int query_font_geometry (Display *dpy, GC gc, const char *txt, int *w, int *h, int *a, int *d) { + XCharStruct text_structure; + int font_direction, font_ascent, font_descent; + XFontStruct *fontinfo = XQueryFont (dpy, XGContextFromGC (gc)); + + if (!fontinfo) { return -1; } + XTextExtents (fontinfo, txt, strlen (txt), &font_direction, &font_ascent, &font_descent, &text_structure); + if (w) *w = XTextWidth (fontinfo, txt, strlen (txt)); + if (h) *h = text_structure.ascent + text_structure.descent; + if (a) *a = text_structure.ascent; + if (d) *d = text_structure.descent; + XFreeFontInfo (NULL, fontinfo, 1); + return 0; +} + +static void VDrawRectangle (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int w, unsigned int h) { + const unsigned long blackColor = BlackPixel (dpy, DefaultScreen (dpy)); +#ifdef DRAW_OUTLINE + XSetForeground (dpy, gc, _c_gray5.pixel); + XDrawLine (dpy, d, gc, x + 1, y + h, x + w, y + h); + XDrawLine (dpy, d, gc, x + w, y + 1, x + w, y + h); + + XSetForeground (dpy, gc, blackColor); + XDrawLine (dpy, d, gc, x + 1, y, x + w, y); + XDrawLine (dpy, d, gc, x, y + 1, x, y + h); +#else + XSetForeground (dpy, _fib_gc, blackColor); + XDrawRectangle (dpy, d, gc, x, y, w, h); +#endif +} + +static void fib_expose (Display *dpy, Window realwin) { + int i; + XID win; + const unsigned long whiteColor = WhitePixel (dpy, DefaultScreen (dpy)); + const unsigned long blackColor = BlackPixel (dpy, DefaultScreen (dpy)); + if (!_fib_mapped) return; + + if (_fib_resized +#ifdef DOUBLE_BUFFER + || !_pixbuffer +#endif + ) + { +#ifdef DOUBLE_BUFFER + unsigned int w = 0, h = 0; + if (_pixbuffer != None) { + Window ignored_w; + int ignored_i; + unsigned int ignored_u; + XGetGeometry(dpy, _pixbuffer, &ignored_w, &ignored_i, &ignored_i, &w, &h, &ignored_u, &ignored_u); + if (_fib_width != (int)w || _fib_height != (int)h) { + XFreePixmap (dpy, _pixbuffer); + _pixbuffer = None; + } + } + if (_pixbuffer == None) { + XWindowAttributes wa; + XGetWindowAttributes (dpy, realwin, &wa); + _pixbuffer = XCreatePixmap (dpy, realwin, _fib_width, _fib_height, wa.depth); + } +#endif + if (_pixbuffer != None) { + XSetForeground (dpy, _fib_gc, _c_gray1.pixel); + XFillRectangle (dpy, _pixbuffer, _fib_gc, 0, 0, _fib_width, _fib_height); + } else { + XSetForeground (dpy, _fib_gc, _c_gray1.pixel); + XFillRectangle (dpy, realwin, _fib_gc, 0, 0, _fib_width, _fib_height); + } + _fib_resized = 0; + } + + if (_pixbuffer == None) { + win = realwin; + } else { + win = _pixbuffer; + } + + // Top Row: dirs and up navigation + + int ppw = 0; + int ppx = FAREAMRGB; + + for (i = _pathparts - 1; i >= 0; --i) { + ppw += _pathbtn[i].xw + PSEP; + if (ppw >= _fib_width - PSEP - _pathbtn[0].xw - FAREAMRGB) break; // XXX, first change is from "/" to "<", NOOP + } + ++i; + // border-less "<" parent/up, IFF space is limited + if (i > 0) { + if (0 == _hov_p || (_hov_p > 0 && _hov_p < _pathparts - 1)) { + XSetForeground (dpy, _fib_gc, _c_gray4.pixel); + } else { + XSetForeground (dpy, _fib_gc, blackColor); + } + XDrawString (dpy, win, _fib_gc, ppx, PATHBTNTOP, "<", 1); + ppx += _pathbtn[0].xw + PSEP; + if (i == _pathparts) --i; + } + + _view_p = i; + + while (i < _pathparts) { + if (i == _hov_p) { + XSetForeground (dpy, _fib_gc, _c_gray0.pixel); + } else { + XSetForeground (dpy, _fib_gc, _c_gray2.pixel); + } + XFillRectangle (dpy, win, _fib_gc, + ppx + 1, PATHBTNTOP - _fib_font_ascent, + _pathbtn[i].xw - 1, _fib_font_height); + VDrawRectangle (dpy, win, _fib_gc, + ppx, PATHBTNTOP - _fib_font_ascent, + _pathbtn[i].xw, _fib_font_height); + XDrawString (dpy, win, _fib_gc, ppx + 1 + BTNPADDING, PATHBTNTOP, + _pathbtn[i].name, strlen (_pathbtn[i].name)); + _pathbtn[i].x0 = ppx; // current position + ppx += _pathbtn[i].xw + PSEP; + ++i; + } + + // middle, scroll list of file names + const int ltop = LISTTOP * _fib_font_vsep; + const int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; + const int fsel_height = 4 + llen * _fib_font_vsep; + const int fsel_width = _fib_width - FAREAMRGL - FAREAMRGR - (llen < _dircount ? SCROLLBARW : 0); + const int t_x = FAREATEXTL; + int t_s = FAREATEXTL + fsel_width; + int t_t = FAREATEXTL + fsel_width; + + // check which colums can be visible + // depending on available width of window. + _columns = 0; + if (fsel_width > FILECOLUMN + _fib_font_size_width + _fib_font_time_width) { + _columns |= 2; + t_s = FAREAMRGL + fsel_width - _fib_font_time_width - TEXTSEP; + } + if (fsel_width > FILECOLUMN + _fib_font_size_width) { + _columns |= 1; + t_t = t_s - _fib_font_size_width - TEXTSEP; + } + + int fstop = _scrl_f; // first entry in scroll position + const int ttop = ltop - _fib_font_height + _fib_font_ascent; + + if (fstop > 0 && fstop + llen > _dircount) { + fstop = MAX (0, _dircount - llen); + _scrl_f = fstop; + } + + // list header + XSetForeground (dpy, _fib_gc, _c_gray3.pixel); + XFillRectangle (dpy, win, _fib_gc, FAREAMRGL, ltop - _fib_font_vsep, fsel_width, _fib_font_vsep); + + // draw background of file list + XSetForeground (dpy, _fib_gc, _c_gray2.pixel); + XFillRectangle (dpy, win, _fib_gc, FAREAMRGL, ltop, fsel_width, fsel_height); + +#ifdef DRAW_OUTLINE + VDrawRectangle (dpy, win, _fib_gc, FAREAMRGL, ltop - _fib_font_vsep -1, _fib_width - FAREAMRGL - FAREAMRGR, fsel_height + _fib_font_vsep + 1); +#endif + + switch (_hov_h) { + case 1: + XSetForeground (dpy, _fib_gc, _c_gray0.pixel); + XFillRectangle (dpy, win, _fib_gc, t_x + _fib_dir_indent - TEXTSEP + 1, ltop - _fib_font_vsep, t_t - t_x - _fib_dir_indent - 1, _fib_font_vsep); + break; + case 2: + XSetForeground (dpy, _fib_gc, _c_gray0.pixel); + XFillRectangle (dpy, win, _fib_gc, t_t - TEXTSEP + 1, ltop - _fib_font_vsep, _fib_font_size_width + TEXTSEP - 1, _fib_font_vsep); + break; + case 3: + XSetForeground (dpy, _fib_gc, _c_gray0.pixel); + XFillRectangle (dpy, win, _fib_gc, t_s - TEXTSEP + 1, ltop - _fib_font_vsep, TEXTSEP + TEXTSEP + _fib_font_time_width - 1, _fib_font_vsep); + break; + default: + break; + } + + // column headings and sort order + int arp = MAX (2, _fib_font_height / 5); // arrow scale + const int trioff = _fib_font_height - _fib_font_ascent - arp + 1; + XPoint ptri[4] = { {0, ttop - trioff }, {arp, -arp - arp - 1}, {-arp - arp, 0}, {arp, arp + arp + 1}}; + if (_sort & 1) { + ptri[0].y = ttop -arp - arp - 1; + ptri[1].y *= -1; + ptri[3].y *= -1; + } + switch (_sort) { + case 0: + case 1: + ptri[0].x = t_t + SORTBTNOFF + 2 - arp; + XSetForeground (dpy, _fib_gc, _c_gray6.pixel); + XFillPolygon (dpy, win, _fib_gc, ptri, 3, Convex, CoordModePrevious); + XDrawLines (dpy, win, _fib_gc, ptri, 4, CoordModePrevious); + break; + case 2: + case 3: + if (_columns & 1) { + ptri[0].x = t_s + SORTBTNOFF + 2 - arp; + XSetForeground (dpy, _fib_gc, _c_gray6.pixel); + XFillPolygon (dpy, win, _fib_gc, ptri, 3, Convex, CoordModePrevious); + XDrawLines (dpy, win, _fib_gc, ptri, 4, CoordModePrevious); + } + break; + case 4: + case 5: + if (_columns & 2) { + ptri[0].x = FAREATEXTL + fsel_width + SORTBTNOFF + 2 - arp; + XSetForeground (dpy, _fib_gc, _c_gray6.pixel); + XFillPolygon (dpy, win, _fib_gc, ptri, 3, Convex, CoordModePrevious); + XDrawLines (dpy, win, _fib_gc, ptri, 4, CoordModePrevious); + } + break; + } + +#if 0 // bottom header bottom border + XSetForeground (dpy, _fib_gc, _c_gray5.pixel); + XSetLineAttributes (dpy, _fib_gc, 1, LineOnOffDash, CapButt, JoinMiter); + XDrawLine (dpy, win, _fib_gc, + FAREAMRGL + 1, ltop, + FAREAMRGL + fsel_width, ltop); + XSetLineAttributes (dpy, _fib_gc, 1, LineSolid, CapButt, JoinMiter); +#endif + + XSetForeground (dpy, _fib_gc, _c_gray4.pixel); + XDrawLine (dpy, win, _fib_gc, + t_x + _fib_dir_indent - TEXTSEP, ltop - _fib_font_vsep + 3, + t_x + _fib_dir_indent - TEXTSEP, ltop - 3); + + XSetForeground (dpy, _fib_gc, blackColor); + XDrawString (dpy, win, _fib_gc, t_x + _fib_dir_indent, ttop, "Name", 4); + + if (_columns & 1) { + XSetForeground (dpy, _fib_gc, _c_gray4.pixel); + XDrawLine (dpy, win, _fib_gc, + t_t - TEXTSEP, ltop - _fib_font_vsep + 3, + t_t - TEXTSEP, ltop - 3); + XSetForeground (dpy, _fib_gc, blackColor); + XDrawString (dpy, win, _fib_gc, t_t, ttop, "Size", 4); + } + + if (_columns & 2) { + XSetForeground (dpy, _fib_gc, _c_gray4.pixel); + XDrawLine (dpy, win, _fib_gc, + t_s - TEXTSEP, ltop - _fib_font_vsep + 3, + t_s - TEXTSEP, ltop - 3); + XSetForeground (dpy, _fib_gc, blackColor); + if (_pathparts > 0) + XDrawString (dpy, win, _fib_gc, t_s, ttop, "Last Modified", 13); + else + XDrawString (dpy, win, _fib_gc, t_s, ttop, "Last Used", 9); + } + + // scrollbar sep + if (llen < _dircount) { + const int sx0 = _fib_width - SCROLLBARW - FAREAMRGR; + XSetForeground (dpy, _fib_gc, _c_gray4.pixel); + XDrawLine (dpy, win, _fib_gc, + sx0 - 1, ltop - _fib_font_vsep, +#ifdef DRAW_OUTLINE + sx0 - 1, ltop + fsel_height +#else + sx0 - 1, ltop - 1 +#endif + ); + } + + // clip area for file-name + XRectangle clp = {FAREAMRGL + 1, ltop, t_t - FAREAMRGL - TEXTSEP - TEXTSEP - 1, fsel_height}; + + // list files in view + for (i = 0; i < llen; ++i) { + const int j = i + fstop; + if (j >= _dircount) break; + + const int t_y = ltop + (i+1) * _fib_font_vsep - 4; + + XSetForeground (dpy, _fib_gc, blackColor); + if (_dirlist[j].flags & 2) { + XSetForeground (dpy, _fib_gc, blackColor); + XFillRectangle (dpy, win, _fib_gc, + FAREAMRGL, t_y - _fib_font_ascent, fsel_width, _fib_font_height); + XSetForeground (dpy, _fib_gc, whiteColor); + } + if (_hov_f == j && !(_dirlist[j].flags & 2)) { + XSetForeground (dpy, _fib_gc, _c_gray4.pixel); + } + if (_dirlist[j].flags & 4) { + XDrawString (dpy, win, _fib_gc, t_x, t_y, "D", 1); + } + XSetClipRectangles (dpy, _fib_gc, 0, 0, &clp, 1, Unsorted); + XDrawString (dpy, win, _fib_gc, + t_x + _fib_dir_indent, t_y, + _dirlist[j].name, strlen (_dirlist[j].name)); + XSetClipMask (dpy, _fib_gc, None); + + if (_columns & 1) // right-aligned 'size' + XDrawString (dpy, win, _fib_gc, + t_s - TEXTSEP - 2 - _dirlist[j].ssizew, t_y, + _dirlist[j].strsize, strlen (_dirlist[j].strsize)); + if (_columns & 2) + XDrawString (dpy, win, _fib_gc, + t_s, t_y, + _dirlist[j].strtime, strlen (_dirlist[j].strtime)); + } + + // scrollbar + if (llen < _dircount) { + float sl = (fsel_height + _fib_font_vsep - (SCROLLBOXH + SCROLLBOXH)) / (float) _dircount; + sl = MAX ((8. / llen), sl); // 8px min height of scroller + const int sy1 = llen * sl; + const float mx = (fsel_height + _fib_font_vsep - (SCROLLBOXH + SCROLLBOXH) - sy1) / (float)(_dircount - llen); + const int sy0 = fstop * mx; + const int sx0 = _fib_width - SCROLLBARW - FAREAMRGR; + const int stop = ltop - _fib_font_vsep; + + _scrl_y0 = stop + SCROLLBOXH + sy0; + _scrl_y1 = _scrl_y0 + sy1; + + assert (fstop + llen <= _dircount); + // scroll-bar background + XSetForeground (dpy, _fib_gc, _c_gray3.pixel); + XFillRectangle (dpy, win, _fib_gc, sx0, stop, SCROLLBARW, fsel_height + _fib_font_vsep); + + // scroller + if (_hov_s == 0) { + XSetForeground (dpy, _fib_gc, _c_gray0.pixel); + } else { + XSetForeground (dpy, _fib_gc, _c_gray1.pixel); + } + XFillRectangle (dpy, win, _fib_gc, sx0 + 1, stop + SCROLLBOXH + sy0, SCROLLBARW - 2, sy1); + + int scrw = (SCROLLBARW -3) / 2; + // arrows top and bottom + if (_hov_s == 1) { + XSetForeground (dpy, _fib_gc, _c_gray0.pixel); + } else { + XSetForeground (dpy, _fib_gc, _c_gray1.pixel); + } + XPoint ptst[4] = { {sx0 + 1, stop + 8}, {scrw, -7}, {scrw, 7}, {-2 * scrw, 0}}; + XFillPolygon (dpy, win, _fib_gc, ptst, 3, Convex, CoordModePrevious); + XDrawLines (dpy, win, _fib_gc, ptst, 4, CoordModePrevious); + + if (_hov_s == 2) { + XSetForeground (dpy, _fib_gc, _c_gray0.pixel); + } else { + XSetForeground (dpy, _fib_gc, _c_gray1.pixel); + } + XPoint ptsb[4] = { {sx0 + 1, ltop + fsel_height - 9}, {2*scrw, 0}, {-scrw, 7}, {-scrw, -7}}; + XFillPolygon (dpy, win, _fib_gc, ptsb, 3, Convex, CoordModePrevious); + XDrawLines (dpy, win, _fib_gc, ptsb, 4, CoordModePrevious); + } else { + _scrl_y0 = _scrl_y1 = -1; + } + + if (_fib_show_places) { + assert (_placecnt > 0); + + // heading + XSetForeground (dpy, _fib_gc, _c_gray3.pixel); + XFillRectangle (dpy, win, _fib_gc, FAREAMRGB, ltop - _fib_font_vsep, PLACESW - TEXTSEP, _fib_font_vsep); + + // body + XSetForeground (dpy, _fib_gc, _c_gray2.pixel); + XFillRectangle (dpy, win, _fib_gc, FAREAMRGB, ltop, PLACESW - TEXTSEP, fsel_height); + +#ifdef DRAW_OUTLINE + VDrawRectangle (dpy, win, _fib_gc, FAREAMRGB, ltop - _fib_font_vsep -1, PLACESW - TEXTSEP, fsel_height + _fib_font_vsep + 1); +#endif + + XSetForeground (dpy, _fib_gc, blackColor); + XDrawString (dpy, win, _fib_gc, FAREAMRGB + TEXTSEP, ttop, "Places", 6); + + XRectangle pclip = {FAREAMRGB + 1, ltop, PLACESW - TEXTSEP -1, fsel_height}; + XSetClipRectangles (dpy, _fib_gc, 0, 0, &pclip, 1, Unsorted); + const int plx = FAREAMRGB + TEXTSEP; + for (i = 0; i < llen && i < _placecnt; ++i) { + const int ply = ltop + (i+1) * _fib_font_vsep - 4; + if (i == _hov_l) { + XSetForeground (dpy, _fib_gc, _c_gray4.pixel); + } else { + XSetForeground (dpy, _fib_gc, blackColor); + } + XDrawString (dpy, win, _fib_gc, + plx, ply, + _placelist[i].name, strlen (_placelist[i].name)); + if (_placelist[i].flags & 4) { + XSetForeground (dpy, _fib_gc, _c_gray3.pixel); + const int plly = ply - _fib_font_ascent + _fib_font_height; + const int pllx0 = FAREAMRGB; + const int pllx1 = FAREAMRGB + (PLACESW - TEXTSEP); + XDrawLine (dpy, win, _fib_gc, pllx0, plly, pllx1, plly); + } + } + XSetClipMask (dpy, _fib_gc, None); + + if (_placecnt > llen) { + const int plly = ltop + fsel_height - _fib_font_height + _fib_font_ascent; + const int pllx0 = FAREAMRGB + (PLACESW - TEXTSEP) * .75; + const int pllx1 = FAREAMRGB + (PLACESW - TEXTSEP - TEXTSEP); + + XSetForeground (dpy, _fib_gc, blackColor); + XSetLineAttributes (dpy, _fib_gc, 1, LineOnOffDash, CapButt, JoinMiter); + XDrawLine (dpy, win, _fib_gc, pllx0, plly, pllx1, plly); + XSetLineAttributes (dpy, _fib_gc, 1, LineSolid, CapButt, JoinMiter); + } + } + + // Bottom Buttons + const int numb = sizeof(_btns) / sizeof(FibButton*); + int xtra = _fib_width - _btn_span; + const int cbox = _fib_font_ascent - 2; + const int bbase = _fib_height - BTNBTMMARGIN * _fib_font_vsep - BTNPADDING; + const int cblw = cbox > 20 ? 5 : ( cbox > 9 ? 3 : 1); + + int bx = FAREAMRGB; + for (i = 0; i < numb; ++i) { + if (_btns[i]->flags & 8) { continue; } + if (_btns[i]->flags & 4) { + // checkbutton + const int cby0 = bbase - cbox + 1 + BTNPADDING; + if (i == _hov_b) { + XSetForeground (dpy, _fib_gc, _c_gray4.pixel); + } else { + XSetForeground (dpy, _fib_gc, blackColor); + } + XDrawRectangle (dpy, win, _fib_gc, + bx, cby0 - 1, cbox + 1, cbox + 1); + + if (i == _hov_b) { + XSetForeground (dpy, _fib_gc, _c_gray5.pixel); + } else { + XSetForeground (dpy, _fib_gc, blackColor); + } + XDrawString (dpy, win, _fib_gc, BTNPADDING + bx + _fib_font_ascent, 1 + bbase + BTNPADDING, + _btns[i]->text, strlen (_btns[i]->text)); + + if (i == _hov_b) { + XSetForeground (dpy, _fib_gc, _c_gray0.pixel); + } else { + if (_btns[i]->flags & 2) { + XSetForeground (dpy, _fib_gc, _c_gray1.pixel); + } else { + XSetForeground (dpy, _fib_gc, _c_gray2.pixel); + } + } + XFillRectangle (dpy, win, _fib_gc, + bx+1, cby0, cbox, cbox); + + if (_btns[i]->flags & 2) { + XSetLineAttributes (dpy, _fib_gc, cblw, LineSolid, CapRound, JoinMiter); + XSetForeground (dpy, _fib_gc, _c_gray6.pixel); + XDrawLine (dpy, win, _fib_gc, + bx + 2, cby0 + 1, + bx + cbox - 1, cby0 + cbox - 2); + XDrawLine (dpy, win, _fib_gc, + bx + cbox - 1, cby0 + 1, + bx + 2, cby0 + cbox - 2); + XSetLineAttributes (dpy, _fib_gc, 1, LineSolid, CapButt, JoinMiter); + } + } else { + if (xtra > 0) { + bx += xtra; + xtra = 0; + } + // pushbutton + + uint8_t can_hover = 1; // special case + if (_btns[i] == &_btn_ok) { + if (_fsel < 0 || _fsel >= _dircount) { + can_hover = 0; + } + } + + if (can_hover && i == _hov_b) { + XSetForeground (dpy, _fib_gc, _c_gray0.pixel); + } else { + XSetForeground (dpy, _fib_gc, _c_gray2.pixel); + } + XFillRectangle (dpy, win, _fib_gc, + bx + 1, bbase - _fib_font_ascent, + _btn_w - 1, _fib_font_height + BTNPADDING + BTNPADDING); + VDrawRectangle (dpy, win, _fib_gc, + bx, bbase - _fib_font_ascent, + _btn_w, _fib_font_height + BTNPADDING + BTNPADDING); + XDrawString (dpy, win, _fib_gc, bx + (_btn_w - _btns[i]->tw) * .5, 1 + bbase + BTNPADDING, + _btns[i]->text, strlen (_btns[i]->text)); + } + _btns[i]->x0 = bx; + bx += _btns[i]->xw + DSEP; + } + + if (_pixbuffer != None) { + XCopyArea(dpy, _pixbuffer, realwin, _fib_gc, 0, 0, _fib_width, _fib_height, 0, 0); + } + XFlush (dpy); +} + +static void fib_reset () { + _hov_p = _hov_f = _hov_h = _hov_l = -1; + _scrl_f = 0; + _fib_resized = 1; +} + +static int cmp_n_up (const void *p1, const void *p2) { + FibFileEntry *a = (FibFileEntry*) p1; + FibFileEntry *b = (FibFileEntry*) p2; + if ((a->flags & 4) && !(b->flags & 4)) return -1; + if (!(a->flags & 4) && (b->flags & 4)) return 1; + return strcmp (a->name, b->name); +} + +static int cmp_n_down (const void *p1, const void *p2) { + FibFileEntry *a = (FibFileEntry*) p1; + FibFileEntry *b = (FibFileEntry*) p2; + if ((a->flags & 4) && !(b->flags & 4)) return -1; + if (!(a->flags & 4) && (b->flags & 4)) return 1; + return strcmp (b->name, a->name); +} + +static int cmp_t_up (const void *p1, const void *p2) { + FibFileEntry *a = (FibFileEntry*) p1; + FibFileEntry *b = (FibFileEntry*) p2; + if ((a->flags & 4) && !(b->flags & 4)) return -1; + if (!(a->flags & 4) && (b->flags & 4)) return 1; + if (a->mtime == b->mtime) return 0; + return a->mtime > b->mtime ? -1 : 1; +} + +static int cmp_t_down (const void *p1, const void *p2) { + FibFileEntry *a = (FibFileEntry*) p1; + FibFileEntry *b = (FibFileEntry*) p2; + if ((a->flags & 4) && !(b->flags & 4)) return -1; + if (!(a->flags & 4) && (b->flags & 4)) return 1; + if (a->mtime == b->mtime) return 0; + return a->mtime > b->mtime ? 1 : -1; +} + +static int cmp_s_up (const void *p1, const void *p2) { + FibFileEntry *a = (FibFileEntry*) p1; + FibFileEntry *b = (FibFileEntry*) p2; + if ((a->flags & 4) && (b->flags & 4)) return 0; // dir, no size, retain order + if ((a->flags & 4) && !(b->flags & 4)) return -1; + if (!(a->flags & 4) && (b->flags & 4)) return 1; + if (a->size == b->size) return 0; + return a->size > b->size ? -1 : 1; +} + +static int cmp_s_down (const void *p1, const void *p2) { + FibFileEntry *a = (FibFileEntry*) p1; + FibFileEntry *b = (FibFileEntry*) p2; + if ((a->flags & 4) && (b->flags & 4)) return 0; // dir, no size, retain order + if ((a->flags & 4) && !(b->flags & 4)) return -1; + if (!(a->flags & 4) && (b->flags & 4)) return 1; + if (a->size == b->size) return 0; + return a->size > b->size ? 1 : -1; +} + +static void fmt_size (Display *dpy, FibFileEntry *f) { + if (f->size > 10995116277760) { + sprintf (f->strsize, "%.0f TB", f->size / 1099511627776.f); + } + if (f->size > 1099511627776) { + sprintf (f->strsize, "%.1f TB", f->size / 1099511627776.f); + } + else if (f->size > 10737418240) { + sprintf (f->strsize, "%.0f GB", f->size / 1073741824.f); + } + else if (f->size > 1073741824) { + sprintf (f->strsize, "%.1f GB", f->size / 1073741824.f); + } + else if (f->size > 10485760) { + sprintf (f->strsize, "%.0f MB", f->size / 1048576.f); + } + else if (f->size > 1048576) { + sprintf (f->strsize, "%.1f MB", f->size / 1048576.f); + } + else if (f->size > 10240) { + sprintf (f->strsize, "%.0f KB", f->size / 1024.f); + } + else if (f->size >= 1000) { + sprintf (f->strsize, "%.1f KB", f->size / 1024.f); + } + else { + sprintf (f->strsize, "%.0f B", f->size / 1.f); + } + int sw = 0; + query_font_geometry (dpy, _fib_gc, f->strsize, &sw, NULL, NULL, NULL); + if (sw > _fib_font_size_width) { + _fib_font_size_width = sw; + } + f->ssizew = sw; +} + +static void fmt_time (Display *dpy, FibFileEntry *f) { + struct tm *tmp; + tmp = localtime (&f->mtime); + if (!tmp) { + return; + } + strftime (f->strtime, sizeof(f->strtime), "%F %H:%M", tmp); + + int tw = 0; + query_font_geometry (dpy, _fib_gc, f->strtime, &tw, NULL, NULL, NULL); + if (tw > _fib_font_time_width) { + _fib_font_time_width = tw; + } +} + +static void fib_resort (const char * sel) { + if (_dircount < 1) { return; } + int (*sortfn)(const void *p1, const void *p2); + switch (_sort) { + case 1: sortfn = &cmp_n_down; break; + case 2: sortfn = &cmp_s_down; break; + case 3: sortfn = &cmp_s_up; break; + case 4: sortfn = &cmp_t_down; break; + case 5: sortfn = &cmp_t_up; break; + default: + sortfn = &cmp_n_up; + break; + } + qsort (_dirlist, _dircount, sizeof(_dirlist[0]), sortfn); + int i; + for (i = 0; i < _dircount && sel; ++i) { + if (!strcmp (_dirlist[i].name, sel)) { + _fsel = i; + break; + } + } +} + +static void fib_select (Display *dpy, int item) { + if (_fsel >= 0) { + _dirlist[_fsel].flags &= ~2; + } + _fsel = item; + if (_fsel >= 0 && _fsel < _dircount) { + _dirlist[_fsel].flags |= 2; + const int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; + if (_fsel < _scrl_f) { + _scrl_f = _fsel; + } + else if (_fsel >= _scrl_f + llen) { + _scrl_f = 1 + _fsel - llen; + } + } else { + _fsel = -1; + } + + fib_expose (dpy, _fib_win); +} + +static inline int fib_filter (const char *name) { + if (_fib_filter_function) { + return _fib_filter_function (name); + } else { + return 1; + } +} + +static void fib_pre_opendir (Display *dpy) { + if (_dirlist) free (_dirlist); + if (_pathbtn) free (_pathbtn); + _dirlist = NULL; + _pathbtn = NULL; + _dircount = 0; + _pathparts = 0; + query_font_geometry (dpy, _fib_gc, "Size ", &_fib_font_size_width, NULL, NULL, NULL); + fib_reset (); + _fsel = -1; +} + +static void fib_post_opendir (Display *dpy, const char *sel) { + if (_dircount > 0) + _fsel = 0; // select first + else + _fsel = -1; + fib_resort (sel); + + if (_dircount > 0 && _fsel >= 0) { + fib_select (dpy, _fsel); + } else { + fib_expose (dpy, _fib_win); + } +} + +static int fib_dirlistadd (Display *dpy, const int i, const char* path, const char *name, time_t mtime) { + char tp[1024]; + struct stat fs; + if (!_fib_hidden_fn && name[0] == '.') return -1; + if (!strcmp (name, ".")) return -1; + if (!strcmp (name, "..")) return -1; + strcpy (tp, path); + strcat (tp, name); + if (access (tp, R_OK)) { + return -1; + } + if (stat (tp, &fs)) { + return -1; + } + assert (i < _dircount); // could happen if dir changes while we're reading. + if (i >= _dircount) return -1; + if (S_ISDIR (fs.st_mode)) { + _dirlist[i].flags |= 4; + } + else if (S_ISREG (fs.st_mode)) { + if (!fib_filter (name)) return -1; + } +#if 0 // only needed with lstat() + else if (S_ISLNK (fs.st_mode)) { + if (!fib_filter (name)) return -1; + } +#endif + else { + return -1; + } + strcpy (_dirlist[i].name, name); + _dirlist[i].mtime = mtime > 0 ? mtime : fs.st_mtime; + _dirlist[i].size = fs.st_size; + if (!(_dirlist[i].flags & 4)) + fmt_size (dpy, &_dirlist[i]); + fmt_time (dpy, &_dirlist[i]); + return 0; +} + +static int fib_openrecent (Display *dpy, const char *sel) { + int i; + unsigned int j; + assert (_recentcnt > 0); + fib_pre_opendir (dpy); + query_font_geometry (dpy, _fib_gc, "Last Used", &_fib_font_time_width, NULL, NULL, NULL); + _dirlist = (FibFileEntry*) calloc (_recentcnt, sizeof(FibFileEntry)); + _dircount = _recentcnt; + for (j = 0, i = 0; j < _recentcnt; ++j) { + char base[1024]; + char *s = strrchr (_recentlist[j].path, '/'); + if (!s || !*++s) continue; + size_t len = (s - _recentlist[j].path); + strncpy (base, _recentlist[j].path, len); + base[len] = '\0'; + if (!fib_dirlistadd (dpy, i, base, s, _recentlist[j].atime)) { + _dirlist[i].rfp = &_recentlist[j]; + _dirlist[i].flags |= 8; + ++i; + } + } + _dircount = i; + fib_post_opendir (dpy, sel); + return _dircount; +} + +static int fib_opendir (Display *dpy, const char* path, const char *sel) { + char *t0, *t1; + int i; + + assert (path); + + if (strlen (path) == 0 && _recentcnt > 0) { // XXX we should use a better indication for this + strcpy (_cur_path, ""); + return fib_openrecent (dpy, sel); + } + + assert (strlen (path) < sizeof(_cur_path) -1); + assert (strlen (path) > 0); + assert (strstr (path, "//") == NULL); + assert (path[0] == '/'); + + fib_pre_opendir (dpy); + + query_font_geometry (dpy, _fib_gc, "Last Modified", &_fib_font_time_width, NULL, NULL, NULL); + DIR *dir = opendir (path); + if (!dir) { + strcpy (_cur_path, "/"); + } else { + int i; + struct dirent *de; + strcpy (_cur_path, path); + + if (_cur_path[strlen (_cur_path) -1] != '/') + strcat (_cur_path, "/"); + + while ((de = readdir (dir))) { + if (!_fib_hidden_fn && de->d_name[0] == '.') continue; + ++_dircount; + } + + if (_dircount > 0) + _dirlist = (FibFileEntry*) calloc (_dircount, sizeof(FibFileEntry)); + + rewinddir (dir); + + i = 0; + while ((de = readdir (dir))) { + if (!fib_dirlistadd (dpy, i, _cur_path, de->d_name, 0)) + ++i; + } + _dircount = i; + closedir (dir); + } + + t0 = _cur_path; + while (*t0 && (t0 = strchr (t0, '/'))) { + ++_pathparts; + ++t0; + } + assert (_pathparts > 0); + _pathbtn = (FibPathButton*) calloc (_pathparts + 1, sizeof(FibPathButton)); + + t1 = _cur_path; + i = 0; + while (*t1 && (t0 = strchr (t1, '/'))) { + if (i == 0) { + strcpy (_pathbtn[i].name, "/"); + } else { + *t0 = 0; + strcpy (_pathbtn[i].name, t1); + } + query_font_geometry (dpy, _fib_gc, _pathbtn[i].name, &_pathbtn[i].xw, NULL, NULL, NULL); + _pathbtn[i].xw += BTNPADDING + BTNPADDING; + *t0 = '/'; + t1 = t0 + 1; + ++i; + } + fib_post_opendir (dpy, sel); + return _dircount; +} + +static int fib_open (Display *dpy, int item) { + char tp[1024]; + if (_dirlist[item].flags & 8) { + assert (_dirlist[item].rfp); + strcpy (_rv_open, _dirlist[item].rfp->path); + _status = 1; + return 0; + } + strcpy (tp, _cur_path); + strcat (tp, _dirlist[item].name); + if (_dirlist[item].flags & 4) { + fib_opendir (dpy, tp, NULL); + return 0; + } else { + _status = 1; + strcpy (_rv_open, tp); + } + return 0; +} + +static void cb_cancel (Display *dpy) { + _status = -1; + + // unused + return; (void)dpy; +} + +static void cb_open (Display *dpy) { + if (_fsel >= 0 && _fsel < _dircount) { + fib_open (dpy, _fsel); + } +} + +static void sync_button_states () { + if (_fib_show_places) + _btn_places.flags |= 2; + else + _btn_places.flags &= ~2; + if (_fib_filter_fn) // inverse -> show all + _btn_filter.flags &= ~2; + else + _btn_filter.flags |= 2; + if (_fib_hidden_fn) + _btn_hidden.flags |= 2; + else + _btn_hidden.flags &= ~2; +} + +static void cb_places (Display *dpy) { + _fib_show_places = ! _fib_show_places; + if (_placecnt < 1) + _fib_show_places = 0; + sync_button_states (); + _fib_resized = 1; + fib_expose (dpy, _fib_win); +} + +static void cb_filter (Display *dpy) { + _fib_filter_fn = ! _fib_filter_fn; + sync_button_states (); + char *sel = _fsel >= 0 ? strdup (_dirlist[_fsel].name) : NULL; + fib_opendir (dpy, _cur_path, sel); + free (sel); +} + +static void cb_hidden (Display *dpy) { + _fib_hidden_fn = ! _fib_hidden_fn; + sync_button_states (); + char *sel = _fsel >= 0 ? strdup (_dirlist[_fsel].name) : NULL; + fib_opendir (dpy, _cur_path, sel); + free (sel); +} + +static int fib_widget_at_pos (Display *dpy, int x, int y, int *it) { + const int btop = _fib_height - BTNBTMMARGIN * _fib_font_vsep - _fib_font_ascent - BTNPADDING; + const int bbot = btop + _fib_font_height + BTNPADDING + BTNPADDING; + const int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; + const int ltop = LISTTOP * _fib_font_vsep; + const int fbot = ltop + 4 + llen * _fib_font_vsep; + const int ptop = PATHBTNTOP - _fib_font_ascent; + assert (it); + + // paths at top + if (y > ptop && y < ptop + _fib_font_height && _view_p >= 0 && _pathparts > 0) { + int i = _view_p; + *it = -1; + if (i > 0) { // special case '<' + if (x > FAREAMRGB && x <= FAREAMRGB + _pathbtn[0].xw) { + *it = _view_p - 1; + i = _pathparts; + } + } + while (i < _pathparts) { + if (x >= _pathbtn[i].x0 && x <= _pathbtn[i].x0 + _pathbtn[i].xw) { + *it = i; + break; + } + ++i; + } + assert (*it < _pathparts); + if (*it >= 0) return 1; + else return 0; + } + + // buttons at bottom + if (y > btop && y < bbot) { + size_t i; + *it = -1; + for (i = 0; i < sizeof(_btns) / sizeof(FibButton*); ++i) { + const int bx = _btns[i]->x0; + if (_btns[i]->flags & 8) { continue; } + if (x > bx && x < bx + _btns[i]->xw) { + *it = i; + } + } + if (*it >= 0) return 3; + else return 0; + } + + // main file area + if (y >= ltop - _fib_font_vsep && y < fbot && x > FAREAMRGL && x < _fib_width - FAREAMRGR) { + // scrollbar + if (_scrl_y0 > 0 && x >= _fib_width - (FAREAMRGR + SCROLLBARW) && x <= _fib_width - FAREAMRGR) { + if (y >= _scrl_y0 && y < _scrl_y1) { + *it = 0; + } else if (y >= _scrl_y1) { + *it = 2; + } else { + *it = 1; + } + return 4; + } + // file-list + else if (y >= ltop) { + const int item = (y - ltop) / _fib_font_vsep + _scrl_f; + *it = -1; + if (item >= 0 && item < _dircount) { + *it = item; + } + if (*it >= 0) return 2; + else return 0; + } + else { + *it = -1; + const int fsel_width = _fib_width - FAREAMRGL - FAREAMRGR - (llen < _dircount ? SCROLLBARW : 0); + const int t_s = FAREAMRGL + fsel_width - _fib_font_time_width - TEXTSEP - TEXTSEP; + const int t_t = FAREAMRGL + fsel_width - TEXTSEP - _fib_font_size_width - ((_columns & 2) ? ( _fib_font_time_width + TEXTSEP + TEXTSEP) : 0); + if (x >= fsel_width + FAREAMRGL) ; + else if ((_columns & 2) && x >= t_s) *it = 3; + else if ((_columns & 1) && x >= t_t) *it = 2; + else if (x >= FAREATEXTL + _fib_dir_indent - TEXTSEP) *it = 1; + if (*it >= 0) return 5; + else return 0; + } + } + + // places list + if (_fib_show_places && y >= ltop && y < fbot && x > FAREAMRGB && x < FAREAMRGL - FAREAMRGB) { + const int item = (y - ltop) / _fib_font_vsep; + *it = -1; + if (item >= 0 && item < _placecnt) { + *it = item; + } + if (*it >= 0) return 6; + else return 0; + } + + return 0; + + // unused + (void)dpy; +} + +static void fib_update_hover (Display *dpy, int need_expose, const int type, const int item) { + int hov_p = -1; + int hov_b = -1; + int hov_h = -1; + int hov_s = -1; +#ifdef LIST_ENTRY_HOVER + int hov_f = -1; + int hov_l = -1; +#endif + + switch (type) { + case 1: hov_p = item; break; + case 3: hov_b = item; break; + case 4: hov_s = item; break; + case 5: hov_h = item; break; +#ifdef LIST_ENTRY_HOVER + case 6: hov_l = item; break; + case 2: hov_f = item; break; +#endif + default: break; + } +#ifdef LIST_ENTRY_HOVER + if (hov_f != _hov_f) { _hov_f = hov_f; need_expose = 1; } + if (hov_l != _hov_l) { _hov_l = hov_l; need_expose = 1; } +#endif + if (hov_b != _hov_b) { _hov_b = hov_b; need_expose = 1; } + if (hov_p != _hov_p) { _hov_p = hov_p; need_expose = 1; } + if (hov_h != _hov_h) { _hov_h = hov_h; need_expose = 1; } + if (hov_s != _hov_s) { _hov_s = hov_s; need_expose = 1; } + + if (need_expose) { + fib_expose (dpy, _fib_win); + } +} + +static void fib_motion (Display *dpy, int x, int y) { + int it = -1; + + if (_scrl_my >= 0) { + const int sdiff = y - _scrl_my; + const int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; + const int fsel_height = 4 + llen * _fib_font_vsep; + const float sl = (fsel_height + _fib_font_vsep - (SCROLLBOXH + SCROLLBOXH)) / (float) _dircount; + + int news = _scrl_mf + sdiff / sl; + if (news < 0) news = 0; + if (news >= (_dircount - llen)) news = _dircount - llen; + if (news != _scrl_f) { + _scrl_f = news; + fib_expose (dpy, _fib_win); + } + return; + } + + const int type = fib_widget_at_pos (dpy, x, y, &it); + fib_update_hover (dpy, 0, type, it); +} + +static void fib_mousedown (Display *dpy, int x, int y, int btn, unsigned long time) { + int it; + switch (fib_widget_at_pos (dpy, x, y, &it)) { + case 4: // scrollbar + if (btn == 1) { + _dblclk = 0; + if (it == 0) { + _scrl_my = y; + _scrl_mf = _scrl_f; + } else { + int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; + if (llen < 2) llen = 2; + int news = _scrl_f; + if (it == 1) { + news -= llen - 1; + } else { + news += llen - 1; + } + if (news < 0) news = 0; + if (news >= (_dircount - llen)) news = _dircount - llen; + if (news != _scrl_f && _scrl_y0 >= 0) { + assert (news >=0); + _scrl_f = news; + fib_update_hover (dpy, 1, 4, it); + } + } + } + break; + case 2: // file-list + if (btn == 4 || btn == 5) { + const int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; + int news = _scrl_f + ((btn == 4) ? - 1 : 1); + if (news < 0) news = 0; + if (news >= (_dircount - llen)) news = _dircount - llen; + if (news != _scrl_f && _scrl_y0 >= 0) { + assert (news >=0); + _scrl_f = news; + fib_update_hover (dpy, 1, 0, 0); + } + _dblclk = 0; + } + else if (btn == 1 && it >= 0 && it < _dircount) { + if (_fsel == it) { + if (time - _dblclk < DBLCLKTME) { + fib_open (dpy, it); + _dblclk = 0; + } + _dblclk = time; + } else { + fib_select (dpy, it); + _dblclk = time; + } + /*if (_fsel >= 0) { + if (!(_dirlist[_fsel].flags & 4)); + }*/ + } + break; + case 1: // paths + assert (_fsel < _dircount); + assert (it >= 0 && it < _pathparts); + { + int i = 0; + char path[1024] = "/"; + while (++i <= it) { + strcat (path, _pathbtn[i].name); + strcat (path, "/"); + } + char *sel = NULL; + if (i < _pathparts) + sel = strdup (_pathbtn[i].name); + else if (i == _pathparts && _fsel >= 0) + sel = strdup (_dirlist[_fsel].name); + fib_opendir (dpy, path, sel); + free (sel); + } + break; + case 3: // btn + if (btn == 1 && _btns[it]->callback) { + _btns[it]->callback (dpy); + } + break; + case 5: // sort + if (btn == 1) { + switch (it) { + case 1: if (_sort == 0) _sort = 1; else _sort = 0; break; + case 2: if (_sort == 2) _sort = 3; else _sort = 2; break; + case 3: if (_sort == 4) _sort = 5; else _sort = 4; break; + } + if (_fsel >= 0) { + assert (_dirlist && _dircount >= _fsel); + _dirlist[_fsel].flags &= ~2; + char *sel = strdup (_dirlist[_fsel].name); + fib_resort (sel); + free (sel); + } else { + fib_resort (NULL); + _fsel = -1; + } + fib_reset (); + _hov_h = it; + fib_select (dpy, _fsel); + } + break; + case 6: + if (btn == 1 && it >= 0 && it < _placecnt) { + fib_opendir (dpy, _placelist[it].path, NULL); + } + break; + default: + break; + } +} + +static void fib_mouseup (Display *dpy, int x, int y, int btn, unsigned long time) { + _scrl_my = -1; + + // unused + return; (void)dpy; (void)x; (void)y; (void)btn; (void)time; +} + +static void add_place_raw (Display *dpy, const char *name, const char *path) { + _placelist = (FibPlace*) realloc (_placelist, (_placecnt + 1) * sizeof(FibPlace)); + strcpy (_placelist[_placecnt].path, path); + strcpy (_placelist[_placecnt].name, name); + _placelist[_placecnt].flags = 0; + + int sw; + query_font_geometry (dpy, _fib_gc, name, &sw, NULL, NULL, NULL); + if (sw > _fib_place_width) { + _fib_place_width = sw; + } + ++_placecnt; +} + +static int add_place_places (Display *dpy, const char *name, const char *url) { + char const * path; + struct stat fs; + int i; + if (!url || strlen (url) < 1) return -1; + if (!name || strlen (name) < 1) return -1; + if (url[0] == '/') { + path = url; + } + else if (!strncmp (url, "file:///", 8)) { + path = &url[7]; + } + else { + return -1; + } + + if (access (path, R_OK)) { + return -1; + } + if (stat (path, &fs)) { + return -1; + } + if (!S_ISDIR (fs.st_mode)) { + return -1; + } + + for (i = 0; i < _placecnt; ++i) { + if (!strcmp (path, _placelist[i].path)) { + return -1; + } + } + add_place_raw (dpy, name, path); + return 0; +} + +static int parse_gtk_bookmarks (Display *dpy, const char *fn) { + char tmp[1024]; + if (access (fn, R_OK)) { + return -1; + } + FILE *bm = fopen (fn, "r"); + if (!bm) return -1; + int found = 0; + while (fgets (tmp, sizeof(tmp), bm) + && strlen (tmp) > 1 + && strlen (tmp) < sizeof(tmp)) + { + char *s, *n; + tmp[strlen (tmp) - 1] = '\0'; // strip newline + if ((s = strchr (tmp, ' '))) { + *s = '\0'; + n = strdup (++s); + decode_3986 (tmp); + if (!add_place_places (dpy, n, tmp)) { + ++found; + } + free (n); + } else if ((s = strrchr (tmp, '/'))) { + n = strdup (++s); + decode_3986 (tmp); + if (!add_place_places (dpy, n, tmp)) { + ++found; + } + free (n); + } + } + fclose (bm); + return found; +} + +static const char *ignore_mountpoints[] = { + "/bin", "/boot", "/dev", "/etc", + "/lib", "/live", "/mnt", "/opt", + "/root", "/sbin", "/srv", "/tmp", + "/usr", "/var", "/proc", "/sbin", + "/net", "/sys" +}; + +static const char *ignore_fs[] = { + "auto", "autofs", + "debugfs", "devfs", + "devpts", "ecryptfs", + "fusectl", "kernfs", + "linprocfs", "proc", + "ptyfs", "rootfs", + "selinuxfs", "sysfs", + "tmpfs", "usbfs", + "nfsd", "rpc_pipefs", +}; + +static const char *ignore_devices[] = { + "binfmt_", "devpts", + "gvfs", "none", + "nfsd", "sunrpc", + "/dev/loop", "/dev/vn" +}; + +static int check_mount (const char *mountpoint, const char *fs, const char *device) { + size_t i; + if (!mountpoint || !fs || !device) return -1; + //printf("%s %s %s\n", mountpoint, fs, device); + for (i = 0 ; i < sizeof(ignore_mountpoints) / sizeof(char*); ++i) { + if (!strncmp (mountpoint, ignore_mountpoints[i], strlen (ignore_mountpoints[i]))) { + return 1; + } + } + if (!strncmp (mountpoint, "/home", 5)) { + return 1; + } + for (i = 0 ; i < sizeof(ignore_fs) / sizeof(char*); ++i) { + if (!strncmp (fs, ignore_fs[i], strlen (ignore_fs[i]))) { + return 1; + } + } + for (i = 0 ; i < sizeof(ignore_devices) / sizeof(char*); ++i) { + if (!strncmp (device, ignore_devices[i], strlen (ignore_devices[i]))) { + return 1; + } + } + return 0; +} + +static int read_mtab (Display *dpy, const char *mtab) { + FILE *mt = fopen (mtab, "r"); + if (!mt) return -1; + int found = 0; + struct mntent *mntent; + while ((mntent = getmntent (mt)) != NULL) { + char *s; + if (check_mount (mntent->mnt_dir, mntent->mnt_type, mntent->mnt_fsname)) + continue; + + if ((s = strrchr (mntent->mnt_dir, '/'))) { + ++s; + } else { + s = mntent->mnt_dir; + } + if (!add_place_places (dpy, s, mntent->mnt_dir)) { + ++found; + } + } + fclose (mt); + return found; +} + +static void populate_places (Display *dpy) { + char tmp[1024]; + int spacer = -1; + if (_placecnt > 0) return; + _fib_place_width = 0; + + if (_recentcnt > 0) { + add_place_raw (dpy, "Recently Used", ""); + _placelist[0].flags |= 4; + } + + add_place_places (dpy, "Home", getenv ("HOME")); + + if (getenv ("HOME")) { + strcpy (tmp, getenv ("HOME")); + strcat (tmp, "/Desktop"); + add_place_places (dpy, "Desktop", tmp); + } + + add_place_places (dpy, "Filesystem", "/"); + + if (_placecnt > 0) spacer = _placecnt -1; + + if (strlen (_fib_cfg_custom_places) > 0) { + parse_gtk_bookmarks (dpy, _fib_cfg_custom_places); + } + + if (read_mtab (dpy, "/proc/mounts") < 1) { + read_mtab (dpy, "/etc/mtab"); + } + + int parsed_bookmarks = 0; + if (!parsed_bookmarks && getenv ("HOME")) { + strcpy (tmp, getenv ("HOME")); + strcat (tmp, "/.gtk-bookmarks"); + if (parse_gtk_bookmarks (dpy, tmp) > 0) { + parsed_bookmarks = 1; + } + } + if (!parsed_bookmarks && getenv ("XDG_CONFIG_HOME")) { + strcpy (tmp, getenv ("XDG_CONFIG_HOME")); + strcat (tmp, "/gtk-3.0/bookmarks"); + if (parse_gtk_bookmarks (dpy, tmp) > 0) { + parsed_bookmarks = 1; + } + } + if (!parsed_bookmarks && getenv ("HOME")) { + strcpy (tmp, getenv ("HOME")); + strcat (tmp, "/.config/gtk-3.0/bookmarks"); + if (parse_gtk_bookmarks (dpy, tmp) > 0) { + parsed_bookmarks = 1; + } + } + if (_fib_place_width > 0) { + _fib_place_width = MIN (_fib_place_width + TEXTSEP + _fib_dir_indent /*extra*/ , PLACESWMAX); + } + if (spacer > 0 && spacer < _placecnt -1) { + _placelist[ spacer ].flags |= 4; + } +} + +static uint8_t font_err = 0; +static int x_error_handler (Display *d, XErrorEvent *e) { + font_err = 1; + return 0; + + // unused + (void)d; (void)e; +} + +int x_fib_show (Display *dpy, Window parent, int x, int y) { + if (_fib_win) { + XSetInputFocus (dpy, _fib_win, RevertToParent, CurrentTime); + return -1; + } + + _status = 0; + _rv_open[0] = '\0'; + + Colormap colormap = DefaultColormap (dpy, DefaultScreen (dpy)); + _c_gray1.flags= DoRed | DoGreen | DoBlue; + _c_gray0.red = _c_gray0.green = _c_gray0.blue = 61710; // 95% hover prelight + _c_gray1.red = _c_gray1.green = _c_gray1.blue = 60416; // 93% window bg, scrollbar-fg + _c_gray2.red = _c_gray2.green = _c_gray2.blue = 54016; // 83% button & list bg + _c_gray3.red = _c_gray3.green = _c_gray3.blue = 48640; // 75% heading + scrollbar-bg + _c_gray4.red = _c_gray4.green = _c_gray4.blue = 26112; // 40% prelight text, sep lines + _c_gray5.red = _c_gray5.green = _c_gray5.blue = 12800; // 20% 3D border + _c_gray6.red = _c_gray6.green = _c_gray6.blue = 6400; // 10% checkbox cross, sort triangles + + if (!XAllocColor (dpy, colormap, &_c_gray0)) return -1; + if (!XAllocColor (dpy, colormap, &_c_gray1)) return -1; + if (!XAllocColor (dpy, colormap, &_c_gray2)) return -1; + if (!XAllocColor (dpy, colormap, &_c_gray3)) return -1; + if (!XAllocColor (dpy, colormap, &_c_gray4)) return -1; + if (!XAllocColor (dpy, colormap, &_c_gray5)) return -1; + if (!XAllocColor (dpy, colormap, &_c_gray6)) return -1; + + XSetWindowAttributes attr; + memset (&attr, 0, sizeof(XSetWindowAttributes)); + attr.border_pixel = _c_gray2.pixel; + + attr.event_mask = ExposureMask | KeyPressMask + | ButtonPressMask | ButtonReleaseMask + | ConfigureNotify | StructureNotifyMask + | PointerMotionMask | LeaveWindowMask; + + _fib_win = XCreateWindow ( + dpy, DefaultRootWindow (dpy), + x, y, _fib_width, _fib_height, + 1, CopyFromParent, InputOutput, CopyFromParent, + CWEventMask | CWBorderPixel, &attr); + + if (!_fib_win) { return 1; } + + if (parent) + XSetTransientForHint (dpy, _fib_win, parent); + + XStoreName (dpy, _fib_win, "Select File"); + + Atom wmDelete = XInternAtom (dpy, "WM_DELETE_WINDOW", True); + XSetWMProtocols (dpy, _fib_win, &wmDelete, 1); + + _fib_gc = XCreateGC (dpy, _fib_win, 0, NULL); + XSetLineAttributes (dpy, _fib_gc, 1, LineSolid, CapButt, JoinMiter); + const char dl[1] = {1}; + XSetDashes (dpy, _fib_gc, 0, dl, 1); + + int (*handler)(Display *, XErrorEvent *) = XSetErrorHandler (&x_error_handler); + +#define _XTESTFONT(FN) \ + { \ + font_err = 0; \ + _fibfont = XLoadFont (dpy, FN); \ + XSetFont (dpy, _fib_gc, _fibfont); \ + XSync (dpy, False); \ + } + + font_err = 1; + if (getenv ("XJFONT")) _XTESTFONT (getenv ("XJFONT")); + if (font_err && strlen (_fib_cfg_custom_font) > 0) _XTESTFONT (_fib_cfg_custom_font); + if (font_err) _XTESTFONT ("-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*"); + if (font_err) _XTESTFONT ("-*-verdana-medium-r-normal-*-12-*-*-*-*-*-*-*"); + if (font_err) _XTESTFONT ("-misc-fixed-medium-r-normal-*-13-*-*-*-*-*-*-*"); + if (font_err) _XTESTFONT ("-misc-fixed-medium-r-normal-*-12-*-*-*-*-*-*-*"); + if (font_err) _fibfont = None; + XSync (dpy, False); + XSetErrorHandler (handler); + + if (_fib_font_height == 0) { // 1st time only + query_font_geometry (dpy, _fib_gc, "D ", &_fib_dir_indent, NULL, NULL, NULL); + query_font_geometry (dpy, _fib_gc, "_", &_fib_spc_norm, NULL, NULL, NULL); + if (query_font_geometry (dpy, _fib_gc, "|0Yy", NULL, &_fib_font_height, &_fib_font_ascent, NULL)) { + XFreeGC (dpy, _fib_gc); + XDestroyWindow (dpy, _fib_win); + _fib_win = 0; + return -1; + } + _fib_font_height += 3; + _fib_font_ascent += 2; + _fib_font_vsep = _fib_font_height + 2; + } + + populate_places (dpy); + + strcpy (_btn_ok.text, "Open"); + strcpy (_btn_cancel.text, "Cancel"); + strcpy (_btn_filter.text, "List All Files"); + strcpy (_btn_places.text, "Show Places"); + strcpy (_btn_hidden.text, "Show Hidden"); + + _btn_ok.callback = &cb_open; + _btn_cancel.callback = &cb_cancel; + _btn_filter.callback = &cb_filter; + _btn_places.callback = &cb_places; + _btn_hidden.callback = &cb_hidden; + _btn_filter.flags |= 4; + _btn_places.flags |= 4; + _btn_hidden.flags |= 4; + + if (!_fib_filter_function) { + _btn_filter.flags |= 8; + } + + size_t i; + int btncnt = 0; + _btn_w = 0; + _btn_span = 0; + for (i = 0; i < sizeof(_btns) / sizeof(FibButton*); ++i) { + if (_btns[i]->flags & 8) { continue; } + query_font_geometry (dpy, _fib_gc, _btns[i]->text, &_btns[i]->tw, NULL, NULL, NULL); + if (_btns[i]->flags & 4) { + _btn_span += _btns[i]->tw + _fib_font_ascent + TEXTSEP; + } else { + ++btncnt; + if (_btns[i]->tw > _btn_w) + _btn_w = _btns[i]->tw; + } + } + + _btn_w += BTNPADDING + BTNPADDING + TEXTSEP + TEXTSEP + TEXTSEP; + _btn_span += _btn_w * btncnt + DSEP * (i - 1) + FAREAMRGR + FAREAMRGB; + + for (i = 0; i < sizeof(_btns) / sizeof(FibButton*); ++i) { + if (_btns[i]->flags & 8) { continue; } + if (_btns[i]->flags & 4) { + _btns[i]->xw = _btns[i]->tw + _fib_font_ascent + TEXTSEP; + } else { + _btns[i]->xw = _btn_w; + } + } + + sync_button_states () ; + + _fib_height = _fib_font_vsep * (15.8); + _fib_width = MAX (_btn_span, 440); + + XResizeWindow (dpy, _fib_win, _fib_width, _fib_height); + + XTextProperty x_wname, x_iname; + XSizeHints hints; + XWMHints wmhints; + + hints.flags = PSize | PMinSize; + hints.min_width = _btn_span; + hints.min_height = 8 * _fib_font_vsep; + + char *w_name = & _fib_cfg_title[0]; + + wmhints.input = True; + wmhints.flags = InputHint; + if (XStringListToTextProperty (&w_name, 1, &x_wname) && + XStringListToTextProperty (&w_name, 1, &x_iname)) + { + XSetWMProperties (dpy, _fib_win, &x_wname, &x_iname, NULL, 0, &hints, &wmhints, NULL); + XFree (x_wname.value); + XFree (x_iname.value); + } + + XSetWindowBackground (dpy, _fib_win, _c_gray1.pixel); + + _fib_mapped = 0; + XMapRaised (dpy, _fib_win); + + if (!strlen (_cur_path) || !fib_opendir (dpy, _cur_path, NULL)) { + fib_opendir (dpy, getenv ("HOME") ? getenv ("HOME") : "/", NULL); + } + +#if 0 + XGrabPointer (dpy, _fib_win, True, + ButtonReleaseMask | ButtonPressMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | StructureNotifyMask, + GrabModeAsync, GrabModeAsync, None, None, CurrentTime); + XGrabKeyboard (dpy, _fib_win, True, GrabModeAsync, GrabModeAsync, CurrentTime); + //XSetInputFocus (dpy, parent, RevertToNone, CurrentTime); +#endif + _recentlock = 1; + return 0; +} + +void x_fib_close (Display *dpy) { + if (!_fib_win) return; + XFreeGC (dpy, _fib_gc); + XDestroyWindow (dpy, _fib_win); + _fib_win = 0; + free (_dirlist); + _dirlist = NULL; + free (_pathbtn); + _pathbtn = NULL; + if (_fibfont != None) XUnloadFont (dpy, _fibfont); + _fibfont = None; + free (_placelist); + _placelist = NULL; + _dircount = 0; + _pathparts = 0; + _placecnt = 0; + if (_pixbuffer != None) XFreePixmap (dpy, _pixbuffer); + _pixbuffer = None; + Colormap colormap = DefaultColormap (dpy, DefaultScreen (dpy)); + XFreeColors (dpy, colormap, &_c_gray0.pixel, 1, 0); + XFreeColors (dpy, colormap, &_c_gray1.pixel, 1, 0); + XFreeColors (dpy, colormap, &_c_gray2.pixel, 1, 0); + XFreeColors (dpy, colormap, &_c_gray3.pixel, 1, 0); + XFreeColors (dpy, colormap, &_c_gray4.pixel, 1, 0); + XFreeColors (dpy, colormap, &_c_gray5.pixel, 1, 0); + XFreeColors (dpy, colormap, &_c_gray6.pixel, 1, 0); + _recentlock = 0; +} + +int x_fib_handle_events (Display *dpy, XEvent *event) { + if (!_fib_win) return 0; + if (_status) return 0; + if (event->xany.window != _fib_win) { + return 0; + } + + switch (event->type) { + case MapNotify: + _fib_mapped = 1; + break; + case UnmapNotify: + _fib_mapped = 0; + break; + case LeaveNotify: + fib_update_hover (dpy, 1, 0, 0); + break; + case ClientMessage: + if (!strcmp (XGetAtomName (dpy, event->xclient.message_type), "WM_PROTOCOLS")) { + _status = -1; + } + case ConfigureNotify: + if ( + (event->xconfigure.width > 1 && event->xconfigure.height > 1) + && + (event->xconfigure.width != _fib_width || event->xconfigure.height != _fib_height) + ) + { + _fib_width = event->xconfigure.width; + _fib_height = event->xconfigure.height; + _fib_resized = 1; + } + break; + case Expose: + if (event->xexpose.count == 0) { + fib_expose (dpy, event->xany.window); + } + break; + case MotionNotify: + fib_motion (dpy, event->xmotion.x, event->xmotion.y); + if (event->xmotion.is_hint == NotifyHint) { + XGetMotionEvents (dpy, event->xany.window, CurrentTime, CurrentTime, NULL); + } + break; + case ButtonPress: + fib_mousedown (dpy, event->xbutton.x, event->xbutton.y, event->xbutton.button, event->xbutton.time); + break; + case ButtonRelease: + fib_mouseup (dpy, event->xbutton.x, event->xbutton.y, event->xbutton.button, event->xbutton.time); + break; + case KeyRelease: + break; + case KeyPress: + { + KeySym key; + char buf[100]; + static XComposeStatus stat; + XLookupString (&event->xkey, buf, sizeof(buf), &key, &stat); + switch (key) { + case XK_Escape: + _status = -1; + break; + case XK_Up: + if (_fsel > 0) { + fib_select (dpy, _fsel - 1); + } + break; + case XK_Down: + if (_fsel < _dircount -1) { + fib_select ( dpy, _fsel + 1); + } + break; + case XK_Page_Up: + if (_fsel > 0) { + int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; + if (llen < 1) llen = 1; else --llen; + int fs = MAX (0, _fsel - llen); + fib_select ( dpy, fs); + } + break; + case XK_Page_Down: + if (_fsel < _dircount) { + int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; + if (llen < 1) llen = 1; else --llen; + int fs = MIN (_dircount - 1, _fsel + llen); + fib_select ( dpy, fs); + } + break; + case XK_Left: + if (_pathparts > 1) { + int i = 0; + char path[1024] = "/"; + while (++i < _pathparts - 1) { + strcat (path, _pathbtn[i].name); + strcat (path, "/"); + } + char *sel = strdup (_pathbtn[_pathparts-1].name); + fib_opendir (dpy, path, sel); + free (sel); + } + break; + case XK_Right: + if (_fsel >= 0 && _fsel < _dircount) { + if (_dirlist[_fsel].flags & 4) { + cb_open (dpy); + } + } + break; + case XK_Return: + cb_open (dpy); + break; + default: + if ((key >= XK_a && key <= XK_z) || (key >= XK_0 && key <= XK_9)) { + int i; + for (i = 0; i < _dircount; ++i) { + int j = (_fsel + i + 1) % _dircount; + char kcmp = _dirlist[j].name[0]; + if (kcmp > 0x40 && kcmp <= 0x5A) kcmp |= 0x20; + if (kcmp == (char)key) { + fib_select ( dpy, j); + break; + } + } + } + break; + } + } + break; + } + + if (_status) { + x_fib_close (dpy); + } + return _status; +} + +int x_fib_status () { + return _status; +} + +int x_fib_configure (int k, const char *v) { + if (_fib_win) { return -1; } + switch (k) { + case 0: + if (strlen (v) >= sizeof(_cur_path) -1) return -2; + if (strlen (v) < 1) return -2; + if (v[0] != '/') return -2; + if (strstr (v, "//")) return -2; + strncpy (_cur_path, v, sizeof(_cur_path)); + break; + case 1: + if (strlen (v) >= sizeof(_fib_cfg_title) -1) return -2; + strncpy (_fib_cfg_title, v, sizeof(_fib_cfg_title)); + break; + case 2: + if (strlen (v) >= sizeof(_fib_cfg_custom_font) -1) return -2; + strncpy (_fib_cfg_custom_font, v, sizeof(_fib_cfg_custom_font)); + break; + case 3: + if (strlen (v) >= sizeof(_fib_cfg_custom_places) -1) return -2; + strncpy (_fib_cfg_custom_places, v, sizeof(_fib_cfg_custom_places)); + break; + default: + return -2; + } + return 0; +} + +int x_fib_cfg_buttons (int k, int v) { + if (_fib_win) { return -1; } + switch (k) { + case 1: + if (v < 0) { + _btn_hidden.flags |= 8; + } else { + _btn_hidden.flags &= ~8; + } + if (v == 1) { + _btn_hidden.flags |= 2; + _fib_hidden_fn = 1; + } else if (v == 0) { + _btn_hidden.flags &= 2; + _fib_hidden_fn = 0; + } + break; + case 2: + if (v < 0) { + _btn_places.flags |= 8; + } else { + _btn_places.flags &= ~8; + } + if (v == 1) { + _btn_places.flags |= 2; + _fib_show_places = 1; + } else if (v == 0) { + _btn_places.flags &= ~2; + _fib_show_places = 0; + } + break; + case 3: + // NB. filter button is automatically hidden + // IFF the filter-function is NULL. + if (v < 0) { + _btn_filter.flags |= 8; + } else { + _btn_filter.flags &= ~8; + } + if (v == 1) { + _btn_filter.flags &= ~2; // inverse - 'show all' = !filter + _fib_filter_fn = 1; + } else if (v == 0) { + _btn_filter.flags |= 2; + _fib_filter_fn = 0; + } + default: + return -2; + } + return 0; +} + +int x_fib_cfg_filter_callback (int (*cb)(const char*)) { + if (_fib_win) { return -1; } + _fib_filter_function = cb; + return 0; +} + +char *x_fib_filename () { + if (_status > 0 && !_fib_win) + return strdup (_rv_open); + else + return NULL; +} +#endif // SOFD_HAVE_X11 + +#if defined(__clang__) +# pragma clang diagnostic pop +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic pop +#endif + +/* example usage */ +#ifdef SOFD_TEST + +static int fib_filter_movie_filename (const char *name) { + if (!_fib_filter_fn) return 1; + const int l3 = strlen (name) - 3; + const int l4 = l3 - 1; + const int l5 = l4 - 1; + const int l6 = l5 - 1; + const int l9 = l6 - 3; + if ( + (l4 > 0 && ( + !strcasecmp (&name[l4], ".avi") + || !strcasecmp (&name[l4], ".mov") + || !strcasecmp (&name[l4], ".ogg") + || !strcasecmp (&name[l4], ".ogv") + || !strcasecmp (&name[l4], ".mpg") + || !strcasecmp (&name[l4], ".mov") + || !strcasecmp (&name[l4], ".mp4") + || !strcasecmp (&name[l4], ".mkv") + || !strcasecmp (&name[l4], ".vob") + || !strcasecmp (&name[l4], ".asf") + || !strcasecmp (&name[l4], ".avs") + || !strcasecmp (&name[l4], ".dts") + || !strcasecmp (&name[l4], ".flv") + || !strcasecmp (&name[l4], ".m4v") + )) || + (l5 > 0 && ( + !strcasecmp (&name[l5], ".h264") + || !strcasecmp (&name[l5], ".webm") + )) || + (l6 > 0 && ( + !strcasecmp (&name[l6], ".dirac") + )) || + (l9 > 0 && ( + !strcasecmp (&name[l9], ".matroska") + )) || + (l3 > 0 && ( + !strcasecmp (&name[l3], ".dv") + || !strcasecmp (&name[l3], ".ts") + )) + ) + { + return 1; + } + return 0; +} + +int main (int argc, char **argv) { + Display* dpy = XOpenDisplay (0); + if (!dpy) return -1; + + x_fib_cfg_filter_callback (fib_filter_movie_filename); + x_fib_configure (1, "Open Movie File"); + x_fib_load_recent ("/tmp/sofd.recent"); + x_fib_show (dpy, 0, 300, 300); + + while (1) { + XEvent event; + while (XPending (dpy) > 0) { + XNextEvent (dpy, &event); + if (x_fib_handle_events (dpy, &event)) { + if (x_fib_status () > 0) { + char *fn = x_fib_filename (); + printf ("OPEN '%s'\n", fn); + x_fib_add_recent (fn, time (NULL)); + free (fn); + } + } + } + if (x_fib_status ()) { + break; + } + usleep (80000); + } + x_fib_close (dpy); + + x_fib_save_recent ("/tmp/sofd.recent"); + + x_fib_free_recent (); + XCloseDisplay (dpy); + return 0; +} +#endif diff --git a/dpf/dgl/src/sofd/libsofd.h b/dpf/dgl/src/sofd/libsofd.h new file mode 100644 index 0000000..ba8a254 --- /dev/null +++ b/dpf/dgl/src/sofd/libsofd.h @@ -0,0 +1,175 @@ +/* libSOFD - Simple Open File Dialog [for X11 without toolkit] + * + * Copyright (C) 2014 Robin Gareus + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef LIBSOFD_H +#define LIBSOFD_H + +#include + +/////////////////////////////////////////////////////////////////////////////// +/* public API */ + +/** open a file select dialog + * @param dpy X Display connection + * @param parent (optional) if not NULL, become transient for given window + * @param x if >0 set explict initial width of the window + * @param y if >0 set explict initial height of the window + * @return 0 on success + */ +int x_fib_show (Display *dpy, Window parent, int x, int y); + +/** force close the dialog. + * This is normally not needed, the dialog closes itself + * when a file is selected or the user cancels selection. + * @param dpy X Display connection + */ +void x_fib_close (Display *dpy); + +/** non-blocking X11 event handler. + * It is safe to run this function even if the dialog is + * closed or was not initialized. + * + * @param dpy X Display connection + * @param event the XEvent to process + * @return status + * 0: the event was not for this window, or file-dialog still + * active, or the dialog window is not displayed. + * >0: file was selected, dialog closed + * <0: file selection was cancelled. + */ +int x_fib_handle_events (Display *dpy, XEvent *event); + +/** last status of the dialog + * @return >0: file was selected, <0: canceled or inactive. 0: active + */ +int x_fib_status (); + +/** query the selected filename + * @return NULL if none set, or allocated string to be free()ed by the called + */ +char *x_fib_filename (); + +/** customize/configure the dialog before calling \ref x_fib_show + * changes only have any effect if the dialog is not visible. + * @param k key to change + * 0: set current dir to display (must end with slash) + * 1: set title of dialog window + * 2: specify a custom X11 font to use + * 3: specify a custom 'places' file to include + * (following gtk-bookmark convention) + * @param v value + * @return 0 on success. + */ +int x_fib_configure (int k, const char *v); + +/** customize/configure the dialog before calling \ref x_fib_show + * changes only have any effect if the dialog is not visible. + * + * @param k button to change: + * 1: show hidden files + * 2: show places + * 3: show filter/list all (automatically hidden if there is no + * filter function) + * @param v <0 to hide the button >=0 show button, + * 0: set button-state to not-checked + * 1: set button-state to checked + * >1: retain current state + * @return 0 on success. + */ +int x_fib_cfg_buttons (int k, int v); + +/** set custom callback to filter file-names. + * NULL will disable the filter and hide the 'show all' button. + * changes only have any effect if the dialog is not visible. + * + * @param cb callback function to check file + * the callback function is called with the file name (basename only) + * and is expected to return 1 if the file passes the filter + * and 0 if the file should not be listed by default. + * @return 0 on success. + */ +int x_fib_cfg_filter_callback (int (*cb)(const char*)); + +/* 'recently used' API. x-platform + * NOTE: all functions use a static cache and are not reentrant. + * It is expected that none of these functions are called in + * parallel from different threads. + */ + +/** release static resources of 'recently used files' + */ +void x_fib_free_recent (); + +/** add an entry to the recently used list + * + * The dialog does not add files automatically on open, + * if the application succeeds to open a selected file, + * this function should be called. + * + * @param path complete path to file + * @param atime time of last use, 0: NOW + * @return -1 on error, number of current entries otherwise + */ +int x_fib_add_recent (const char *path, time_t atime); + +/** get a platform specific path to a good location for + * saving the recently used file list. + * (follows XDG_DATA_HOME on Unix, and CSIDL_LOCAL_APPDATA spec) + * + * @param application-name to use to include in file + * @return pointer to static path or NULL + */ +const char *x_fib_recent_file(const char *appname); + +/** save the current list of recently used files to the given filename + * (the format is one file per line, filename URL encoded and space separated + * with last-used timestamp) + * + * This function tries to creates the containing directory if it does + * not exist. + * + * @param fn file to save the list to + * @return 0: on success + */ +int x_fib_save_recent (const char *fn); + +/** load a recently used file list. + * + * @param fn file to load the list from + * @return 0: on success + */ +int x_fib_load_recent (const char *fn); + +/** get number of entries in the current list + * @return number of entries in the recently used list + */ +unsigned int x_fib_recent_count (); + +/** get recently used entry at given position + * + * @param i entry to query + * @return pointer to static string + */ +const char *x_fib_recent_at (unsigned int i); + +#endif // LIBSOFD_H diff --git a/dpf/distrho/DistrhoInfo.hpp b/dpf/distrho/DistrhoInfo.hpp new file mode 100644 index 0000000..4105292 --- /dev/null +++ b/dpf/distrho/DistrhoInfo.hpp @@ -0,0 +1,571 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef DOXYGEN + +#include "src/DistrhoDefines.h" + +START_NAMESPACE_DISTRHO + +/* ------------------------------------------------------------------------------------------------------------ + * Intro */ + +/** + @mainpage DISTRHO %Plugin Framework + + DISTRHO %Plugin Framework (or @b DPF for short) + is a plugin framework designed to make development of new plugins an easy and enjoyable task.@n + It allows developers to create plugins with custom UIs using a simple C++ API.@n + The framework facilitates exporting various different plugin formats from the same code-base. + + DPF can build for LADSPA, DSSI, LV2 and VST2 formats.@n + A JACK/Standalone mode is also available, allowing you to quickly test plugins. + + @section Macros + You start by creating a "DistrhoPluginInfo.h" file describing the plugin via macros, see @ref PluginMacros.@n + This file is included in the main DPF code to select which features to activate for each plugin format. + + For example, a plugin (with %UI) that use states will require LV2 hosts to support Atom and Worker extensions for + message passing from the %UI to the plugin.@n + If your plugin does not make use of states, the Worker extension is not set as a required feature. + + @section Plugin + The next step is to create your plugin code by subclassing DPF's Plugin class.@n + You need to pass the number of parameters in the constructor and also the number of programs and states, if any. + + Here's an example of an audio plugin that simply mutes the host output: + @code + class MutePlugin : public Plugin + { + public: + /** + Plugin class constructor. + */ + MutePlugin() + : Plugin(0, 0, 0) // 0 parameters, 0 programs and 0 states + { + } + + protected: + /* ---------------------------------------------------------------------------------------- + * Information */ + + /** + Get the plugin label. + This label is a short restricted name consisting of only _, a-z, A-Z and 0-9 characters. + */ + const char* getLabel() const override + { + return "Mute"; + } + + /** + Get the plugin author/maker. + */ + const char* getMaker() const override + { + return "DPF"; + } + + /** + Get the plugin license name (a single line of text). + For commercial plugins this should return some short copyright information. + */ + const char* getLicense() const override + { + return "MIT"; + } + + /** + Get the plugin version, in hexadecimal. + TODO format to be defined + */ + uint32_t getVersion() const override + { + return 0x1000; + } + + /** + Get the plugin unique Id. + This value is used by LADSPA, DSSI and VST plugin formats. + */ + int64_t getUniqueId() const override + { + return cconst('M', 'u', 't', 'e'); + } + + /* ---------------------------------------------------------------------------------------- + * This example has no parameters, so skip parameter stuff */ + + void initParameter(uint32_t, Parameter&) override {} + float getParameterValue(uint32_t) const override { return 0.0f; } + void setParameterValue(uint32_t, float) override {} + + /* ---------------------------------------------------------------------------------------- + * Audio/MIDI Processing */ + + /** + Run/process function for plugins without MIDI input. + NOTE: Some parameters might be null if there are no audio inputs or outputs. + */ + void run(const float**, float** outputs, uint32_t frames) override + { + // get the left and right audio outputs + float* const outL = outputs[0]; + float* const outR = outputs[1]; + + // mute audio + std::memset(outL, 0, sizeof(float)*frames); + std::memset(outR, 0, sizeof(float)*frames); + } + + }; + @endcode + + See the Plugin class for more information and to understand what each function does. + + @section Parameters + A plugin is nothing without parameters.@n + In DPF parameters can be inputs or outputs.@n + They have hints to describe how they behave plus a name and a symbol identifying them.@n + Parameters also have 'ranges' – a minimum, maximum and default value. + + Input parameters are "read-only": the plugin can read them but not change them. + (the exception being when changing programs, more on that below)@n + It's the host responsibility to save, restore and set input parameters. + + Output parameters can be changed at anytime by the plugin.@n + The host will simply read their values and not change them. + + Here's an example of an audio plugin that has 1 input parameter: + @code + class GainPlugin : public Plugin + { + public: + /** + Plugin class constructor. + You must set all parameter values to their defaults, matching ParameterRanges::def. + */ + GainPlugin() + : Plugin(1, 0, 0), // 1 parameter, 0 programs and 0 states + fGain(1.0f) + { + } + + protected: + /* ---------------------------------------------------------------------------------------- + * Information */ + + const char* getLabel() const override + { + return "Gain"; + } + + const char* getMaker() const override + { + return "DPF"; + } + + const char* getLicense() const override + { + return "MIT"; + } + + uint32_t getVersion() const override + { + return 0x1000; + } + + int64_t getUniqueId() const override + { + return cconst('G', 'a', 'i', 'n'); + } + + /* ---------------------------------------------------------------------------------------- + * Init */ + + /** + Initialize a parameter. + This function will be called once, shortly after the plugin is created. + */ + void initParameter(uint32_t index, Parameter& parameter) override + { + // we only have one parameter so we can skip checking the index + + parameter.hints = kParameterIsAutomable; + parameter.name = "Gain"; + parameter.symbol = "gain"; + parameter.ranges.min = 0.0f; + parameter.ranges.max = 2.0f; + parameter.ranges.def = 1.0f; + } + + /* ---------------------------------------------------------------------------------------- + * Internal data */ + + /** + Get the current value of a parameter. + */ + float getParameterValue(uint32_t index) const override + { + // same as before, ignore index check + + return fGain; + } + + /** + Change a parameter value. + */ + void setParameterValue(uint32_t index, float value) override + { + // same as before, ignore index check + + fGain = value; + } + + /* ---------------------------------------------------------------------------------------- + * Audio/MIDI Processing */ + + void run(const float**, float** outputs, uint32_t frames) override + { + // get the mono input and output + const float* const in = inputs[0]; + /* */ float* const out = outputs[0]; + + // apply gain against all samples + for (uint32_t i=0; i < frames; ++i) + out[i] = in[i] * fGain; + } + + private: + float fGain; + }; + @endcode + + See the Parameter struct for more information about parameters. + + @section Programs + Programs in DPF refer to plugin-side presets (usually called "factory presets"), + an initial set of presets provided by plugin authors included in the actual plugin. + + To use programs you must first enable them by setting @ref DISTRHO_PLUGIN_WANT_PROGRAMS to 1 in your DistrhoPluginInfo.h file.@n + When enabled you'll need to override 2 new function in your plugin code, + Plugin::initProgramName(uint32_t, String&) and Plugin::loadProgram(uint32_t). + + Here's an example of a plugin with a "default" program: + @code + class PluginWithPresets : public Plugin + { + public: + PluginWithPresets() + : Plugin(2, 1, 0), // 2 parameters, 1 program and 0 states + fGainL(1.0f), + fGainR(1.0f), + { + } + + protected: + /* ---------------------------------------------------------------------------------------- + * Information */ + + const char* getLabel() const override + { + return "Prog"; + } + + const char* getMaker() const override + { + return "DPF"; + } + + const char* getLicense() const override + { + return "MIT"; + } + + uint32_t getVersion() const override + { + return 0x1000; + } + + int64_t getUniqueId() const override + { + return cconst('P', 'r', 'o', 'g'); + } + + /* ---------------------------------------------------------------------------------------- + * Init */ + + /** + Initialize a parameter. + This function will be called once, shortly after the plugin is created. + */ + void initParameter(uint32_t index, Parameter& parameter) override + { + parameter.hints = kParameterIsAutomable; + parameter.ranges.min = 0.0f; + parameter.ranges.max = 2.0f; + parameter.ranges.def = 1.0f; + + switch (index) + { + case 0; + parameter.name = "Gain Right"; + parameter.symbol = "gainR"; + break; + case 1; + parameter.name = "Gain Left"; + parameter.symbol = "gainL"; + break; + } + } + + /** + Set the name of the program @a index. + This function will be called once, shortly after the plugin is created. + */ + void initProgramName(uint32_t index, String& programName) + { + switch(index) + { + case 0: + programName = "Default"; + break; + } + } + + /* ---------------------------------------------------------------------------------------- + * Internal data */ + + /** + Get the current value of a parameter. + */ + float getParameterValue(uint32_t index) const override + { + switch (index) + { + case 0; + return fGainL; + case 1; + return fGainR; + } + } + + /** + Change a parameter value. + */ + void setParameterValue(uint32_t index, float value) override + { + switch (index) + { + case 0; + fGainL = value; + break; + case 1; + fGainR = value; + break; + } + } + + /** + Load a program. + */ + void loadProgram(uint32_t index) + { + switch(index) + { + case 0: + fGainL = 1.0f; + fGainR = 1.0f; + break; + } + } + + /* ---------------------------------------------------------------------------------------- + * Audio/MIDI Processing */ + + void run(const float**, float** outputs, uint32_t frames) override + { + // get the left and right audio buffers + const float* const inL = inputs[0]; + const float* const inR = inputs[0]; + /* */ float* const outL = outputs[0]; + /* */ float* const outR = outputs[0]; + + // apply gain against all samples + for (uint32_t i=0; i < frames; ++i) + { + outL[i] = inL[i] * fGainL; + outR[i] = inR[i] * fGainR; + } + } + + private: + float fGainL, fGainR; + }; + @endcode + + @section States + describe them + + @section MIDI + describe them + + @section Latency + describe it + + @section Time-Position + describe it + + @section UI + describe them +*/ + +/* ------------------------------------------------------------------------------------------------------------ + * Plugin Macros */ + +/** + @defgroup PluginMacros Plugin Macros + + C Macros that describe your plugin. (defined in the "DistrhoPluginInfo.h" file) + + With these macros you can tell the host what features your plugin requires.@n + Depending on which macros you enable, new functions will be available to call and/or override. + + All values are either integer or strings.@n + For boolean-like values 1 means 'on' and 0 means 'off'. + + The values defined in this group are for documentation purposes only.@n + All macros are disabled by default. + + Only 4 macros are required, they are: + - @ref DISTRHO_PLUGIN_NAME + - @ref DISTRHO_PLUGIN_NUM_INPUTS + - @ref DISTRHO_PLUGIN_NUM_OUTPUTS + - @ref DISTRHO_PLUGIN_URI + @{ + */ + +/** + The plugin name.@n + This is used to identify your plugin before a Plugin instance can be created. + @note This macro is required. + */ +#define DISTRHO_PLUGIN_NAME "Plugin Name" + +/** + Number of audio inputs the plugin has. + @note This macro is required. + */ +#define DISTRHO_PLUGIN_NUM_INPUTS 2 + +/** + Number of audio outputs the plugin has. + @note This macro is required. + */ +#define DISTRHO_PLUGIN_NUM_OUTPUTS 2 + +/** + The plugin URI when exporting in LV2 format. + @note This macro is required. + */ +#define DISTRHO_PLUGIN_URI "urn:distrho:name" + +/** + Wherever the plugin has a custom %UI. + @see DISTRHO_UI_USE_NANOVG + @see UI + */ +#define DISTRHO_PLUGIN_HAS_UI 1 + +/** + Wherever the plugin processing is realtime-safe.@n + TODO - list rtsafe requirements + */ +#define DISTRHO_PLUGIN_IS_RT_SAFE 1 + +/** + Wherever the plugin is a synth.@n + @ref DISTRHO_PLUGIN_WANT_MIDI_INPUT is automatically enabled when this is too. + @see DISTRHO_PLUGIN_WANT_MIDI_INPUT + */ +#define DISTRHO_PLUGIN_IS_SYNTH 1 + +/** + Enable direct access between the %UI and plugin code. + @see UI::getPluginInstancePointer() + @note DO NOT USE THIS UNLESS STRICTLY NECESSARY!! + Try to avoid it at all costs! + */ +#define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 0 + +/** + Wherever the plugin introduces latency during audio or midi processing. + @see Plugin::setLatency(uint32_t) + */ +#define DISTRHO_PLUGIN_WANT_LATENCY 1 + +/** + Wherever the plugin wants MIDI input.@n + This is automatically enabled if @ref DISTRHO_PLUGIN_IS_SYNTH is true. + */ +#define DISTRHO_PLUGIN_WANT_MIDI_INPUT 1 + +/** + Wherever the plugin wants MIDI output. + @see Plugin::writeMidiEvent(const MidiEvent&) + */ +#define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 1 + +/** + Wherever the plugin provides its own internal programs. + @see Plugin::initProgramName(uint32_t, String&) + @see Plugin::loadProgram(uint32_t) + */ +#define DISTRHO_PLUGIN_WANT_PROGRAMS 1 + +/** + Wherever the plugin uses internal non-parameter data. + @see Plugin::initState(uint32_t, String&, String&) + @see Plugin::setState(const char*, const char*) + */ +#define DISTRHO_PLUGIN_WANT_STATE 1 + +/** + Wherever the plugin wants time position information from the host. + @see Plugin::getTimePosition() + */ +#define DISTRHO_PLUGIN_WANT_TIMEPOS 1 + +/** + Wherever the %UI uses NanoVG for drawing instead of the default raw OpenGL calls.@n + When enabled your %UI instance will subclass @ref NanoWidget instead of @ref Widget. + */ +#define DISTRHO_UI_USE_NANOVG 1 + +/** + The %UI URI when exporting in LV2 format.@n + By default this is set to @ref DISTRHO_PLUGIN_URI with "#UI" as suffix. + */ +#define DISTRHO_UI_URI DISTRHO_PLUGIN_URI "#UI" + +/** @} */ + +// ----------------------------------------------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +#endif // DOXYGEN diff --git a/dpf/distrho/DistrhoPlugin.hpp b/dpf/distrho/DistrhoPlugin.hpp new file mode 100644 index 0000000..0ee9893 --- /dev/null +++ b/dpf/distrho/DistrhoPlugin.hpp @@ -0,0 +1,720 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_PLUGIN_HPP_INCLUDED +#define DISTRHO_PLUGIN_HPP_INCLUDED + +#include "extra/String.hpp" +#include "extra/LeakDetector.hpp" +#include "src/DistrhoPluginChecks.h" + +START_NAMESPACE_DISTRHO + +/* ------------------------------------------------------------------------------------------------------------ + * Audio Port Hints */ + +/** + @defgroup AudioPortHints Audio Port Hints + + Various audio port hints. + @see AudioPort::hints + @{ + */ + +/** + Audio port can be used as control voltage (LV2 only). + */ +static const uint32_t kAudioPortIsCV = 0x1; + +/** + Audio port should be used as sidechan (LV2 only). + */ +static const uint32_t kAudioPortIsSidechain = 0x2; + +/** @} */ + +/* ------------------------------------------------------------------------------------------------------------ + * Parameter Hints */ + +/** + @defgroup ParameterHints Parameter Hints + + Various parameter hints. + @see Parameter::hints + @{ + */ + +/** + Parameter is automable (real-time safe). + @see Plugin::setParameterValue(uint32_t, float) + */ +static const uint32_t kParameterIsAutomable = 0x01; + +/** + Parameter value is boolean.@n + It's always at either minimum or maximum value. + */ +static const uint32_t kParameterIsBoolean = 0x02; + +/** + Parameter value is integer. + */ +static const uint32_t kParameterIsInteger = 0x04; + +/** + Parameter value is logarithmic. + */ +static const uint32_t kParameterIsLogarithmic = 0x08; + +/** + Parameter is of output type.@n + When unset, parameter is assumed to be of input type. + + Parameter inputs are changed by the host and must not be changed by the plugin.@n + The only exception being when changing programs, see Plugin::loadProgram().@n + Outputs are changed by the plugin and never modified by the host. + */ +static const uint32_t kParameterIsOutput = 0x10; + +/** @} */ + +/* ------------------------------------------------------------------------------------------------------------ + * Base Plugin structs */ + +/** + @defgroup BasePluginStructs Base Plugin Structs + @{ + */ + +/** + Audio Port. + */ +struct AudioPort { + /** + Hints describing this audio port. + @see AudioPortHints + */ + uint32_t hints; + + /** + The name of this audio port.@n + An audio port name can contain any character, but hosts might have a hard time with non-ascii ones.@n + The name doesn't have to be unique within a plugin instance, but it's recommended. + */ + String name; + + /** + The symbol of this audio port.@n + An audio port symbol is a short restricted name used as a machine and human readable identifier.@n + The first character must be one of _, a-z or A-Z and subsequent characters can be from _, a-z, A-Z and 0-9. + @note Audio port and parameter symbols MUST be unique within a plugin instance. + */ + String symbol; + + /** + Default constructor for a regular audio port. + */ + AudioPort() noexcept + : hints(0x0), + name(), + symbol() {} +}; + +/** + Parameter ranges.@n + This is used to set the default, minimum and maximum values of a parameter. + + By default a parameter has 0.0 as minimum, 1.0 as maximum and 0.0 as default.@n + When changing this struct values you must ensure maximum > minimum and default is within range. + */ +struct ParameterRanges { + /** + Default value. + */ + float def; + + /** + Minimum value. + */ + float min; + + /** + Maximum value. + */ + float max; + + /** + Default constructor, using 0.0 as minimum, 1.0 as maximum and 0.0 as default. + */ + ParameterRanges() noexcept + : def(0.0f), + min(0.0f), + max(1.0f) {} + + /** + Constructor using custom values. + */ + ParameterRanges(float df, float mn, float mx) noexcept + : def(df), + min(mn), + max(mx) {} + + /** + Fix the default value within range. + */ + void fixDefault() noexcept + { + fixValue(def); + } + + /** + Fix a value within range. + */ + void fixValue(float& value) const noexcept + { + if (value < min) + value = min; + else if (value > max) + value = max; + } + + /** + Get a fixed value within range. + */ + const float& getFixedValue(const float& value) const noexcept + { + if (value <= min) + return min; + if (value >= max) + return max; + return value; + } + + /** + Get a value normalized to 0.0<->1.0. + */ + float getNormalizedValue(const float& value) const noexcept + { + const float normValue((value - min) / (max - min)); + + if (normValue <= 0.0f) + return 0.0f; + if (normValue >= 1.0f) + return 1.0f; + return normValue; + } + + /** + Get a value normalized to 0.0<->1.0, fixed within range. + */ + float getFixedAndNormalizedValue(const float& value) const noexcept + { + if (value <= min) + return 0.0f; + if (value >= max) + return 1.0f; + + const float normValue((value - min) / (max - min)); + + if (normValue <= 0.0f) + return 0.0f; + if (normValue >= 1.0f) + return 1.0f; + + return normValue; + } + + /** + Get a proper value previously normalized to 0.0<->1.0. + */ + float getUnnormalizedValue(const float& value) const noexcept + { + if (value <= 0.0f) + return min; + if (value >= 1.0f) + return max; + + return value * (max - min) + min; + } +}; + +/** + Parameter. + */ +struct Parameter { + /** + Hints describing this parameter. + @see ParameterHints + */ + uint32_t hints; + + /** + The name of this parameter.@n + A parameter name can contain any character, but hosts might have a hard time with non-ascii ones.@n + The name doesn't have to be unique within a plugin instance, but it's recommended. + */ + String name; + + /** + The symbol of this parameter.@n + A parameter symbol is a short restricted name used as a machine and human readable identifier.@n + The first character must be one of _, a-z or A-Z and subsequent characters can be from _, a-z, A-Z and 0-9. + @note Parameter symbols MUST be unique within a plugin instance. + */ + String symbol; + + /** + The unit of this parameter.@n + This means something like "dB", "kHz" and "ms".@n + Can be left blank if a unit does not apply to this parameter. + */ + String unit; + + /** + Ranges of this parameter.@n + The ranges describe the default, minimum and maximum values. + */ + ParameterRanges ranges; + + /** + Default constructor for a null parameter. + */ + Parameter() noexcept + : hints(0x0), + name(), + symbol(), + unit(), + ranges() {} + + /** + Constructor using custom values. + */ + Parameter(uint32_t h, const char* n, const char* s, const char* u, float def, float min, float max) noexcept + : hints(h), + name(n), + symbol(s), + unit(u), + ranges(def, min, max) {} +}; + +/** + MIDI event. + */ +struct MidiEvent { + /** + Size of internal data. + */ + static const uint32_t kDataSize = 4; + + /** + Time offset in frames. + */ + uint32_t frame; + + /** + Number of bytes used. + */ + uint32_t size; + + /** + MIDI data.@n + If size > kDataSize, dataExt is used (otherwise null). + */ + uint8_t data[kDataSize]; + const uint8_t* dataExt; +}; + +/** + Time position.@n + The @a playing and @a frame values are always valid.@n + BBT values are only valid when @a bbt.valid is true. + + This struct is inspired by the JACK Transport API. + */ +struct TimePosition { + /** + Wherever the host transport is playing/rolling. + */ + bool playing; + + /** + Current host transport position in frames. + */ + uint64_t frame; + + /** + Bar-Beat-Tick time position. + */ + struct BarBeatTick { + /** + Wherever the host transport is using BBT.@n + If false you must not read from this struct. + */ + bool valid; + + /** + Current bar.@n + Should always be > 0.@n + The first bar is bar '1'. + */ + int32_t bar; + + /** + Current beat within bar.@n + Should always be > 0 and <= @a beatsPerBar.@n + The first beat is beat '1'. + */ + int32_t beat; + + /** + Current tick within beat.@n + Should always be > 0 and <= @a ticksPerBeat.@n + The first tick is tick '0'. + */ + int32_t tick; + + /** + Number of ticks that have elapsed between frame 0 and the first beat of the current measure. + */ + double barStartTick; + + /** + Time signature "numerator". + */ + float beatsPerBar; + + /** + Time signature "denominator". + */ + float beatType; + + /** + Number of ticks within a bar.@n + Usually a moderately large integer with many denominators, such as 1920.0. + */ + double ticksPerBeat; + + /** + Number of beats per minute. + */ + double beatsPerMinute; + + /** + Default constructor for a null BBT time position. + */ + BarBeatTick() noexcept + : valid(false), + bar(0), + beat(0), + tick(0), + barStartTick(0.0), + beatsPerBar(0.0f), + beatType(0.0f), + ticksPerBeat(0.0), + beatsPerMinute(0.0) {} + } bbt; + + /** + Default constructor for a time position. + */ + TimePosition() noexcept + : playing(false), + frame(0), + bbt() {} +}; + +/** @} */ + +/* ------------------------------------------------------------------------------------------------------------ + * DPF Plugin */ + +/** + @defgroup MainClasses Main Classes + @{ + */ + +/** + DPF Plugin class from where plugin instances are created. + + The public methods (Host state) are called from the plugin to get or set host information.@n + They can be called from a plugin instance at anytime unless stated otherwise.@n + All other methods are to be implemented by the plugin and will be called by the host. + + Shortly after a plugin instance is created, the various init* functions will be called by the host.@n + Host will call activate() before run(), and deactivate() before the plugin instance is destroyed.@n + The host may call deactivate right after activate and vice-versa, but never activate/deactivate consecutively.@n + There is no limit on how many times run() is called, only that activate/deactivate will be called in between. + + The buffer size and sample rate values will remain constant between activate and deactivate.@n + Buffer size is only a hint though, the host might call run() with a higher or lower number of frames. + + Some of this class functions are only available according to some macros. + + DISTRHO_PLUGIN_WANT_PROGRAMS activates program related features.@n + When enabled you need to implement initProgramName() and loadProgram(). + + DISTRHO_PLUGIN_WANT_STATE activates internal state features.@n + When enabled you need to implement initStateKey() and setState(). + + The process function run() changes wherever DISTRHO_PLUGIN_WANT_MIDI_INPUT is enabled or not.@n + When enabled it provides midi input events. + */ +class Plugin +{ +public: + /** + Plugin class constructor.@n + You must set all parameter values to their defaults, matching ParameterRanges::def. + */ + Plugin(uint32_t parameterCount, uint32_t programCount, uint32_t stateCount); + + /** + Destructor. + */ + virtual ~Plugin(); + + /* -------------------------------------------------------------------------------------------------------- + * Host state */ + + /** + Get the current buffer size that will probably be used during processing, in frames.@n + This value will remain constant between activate and deactivate. + @note This value is only a hint!@n + Hosts might call run() with a higher or lower number of frames. + @see bufferSizeChanged(uint32_t) + */ + uint32_t getBufferSize() const noexcept; + + /** + Get the current sample rate that will be used during processing.@n + This value will remain constant between activate and deactivate. + @see sampleRateChanged(double) + */ + double getSampleRate() const noexcept; + +#if DISTRHO_PLUGIN_WANT_TIMEPOS + /** + Get the current host transport time position.@n + This function should only be called during run().@n + You can call this during other times, but the returned position is not guaranteed to be in sync. + @note TimePosition is not supported in LADSPA and DSSI plugin formats. + */ + const TimePosition& getTimePosition() const noexcept; +#endif + +#if DISTRHO_PLUGIN_WANT_LATENCY + /** + Change the plugin audio output latency to @a frames.@n + This function should only be called in the constructor, activate() and run(). + @note This function is only available if DISTRHO_PLUGIN_WANT_LATENCY is enabled. + */ + void setLatency(uint32_t frames) noexcept; +#endif + +#if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT + /** + Write a MIDI output event.@n + This function must only be called during run().@n + Returns false when the host buffer is full, in which case do not call this again until the next run(). + */ + bool writeMidiEvent(const MidiEvent& midiEvent) noexcept; +#endif + +protected: + /* -------------------------------------------------------------------------------------------------------- + * Information */ + + /** + Get the plugin name.@n + Returns DISTRHO_PLUGIN_NAME by default. + */ + virtual const char* getName() const { return DISTRHO_PLUGIN_NAME; } + + /** + Get the plugin label.@n + This label is a short restricted name consisting of only _, a-z, A-Z and 0-9 characters. + */ + virtual const char* getLabel() const = 0; + + /** + Get the plugin author/maker. + */ + virtual const char* getMaker() const = 0; + + /** + Get the plugin license name (a single line of text).@n + For commercial plugins this should return some short copyright information. + */ + virtual const char* getLicense() const = 0; + + /** + Get the plugin version, in hexadecimal.@n + TODO format to be defined + */ + virtual uint32_t getVersion() const = 0; + + /** + Get the plugin unique Id.@n + This value is used by LADSPA, DSSI and VST plugin formats. + */ + virtual int64_t getUniqueId() const = 0; + + /* -------------------------------------------------------------------------------------------------------- + * Init */ + + /** + Initialize the audio port @a index.@n + This function will be called once, shortly after the plugin is created. + */ + virtual void initAudioPort(bool input, uint32_t index, AudioPort& port); + + /** + Initialize the parameter @a index.@n + This function will be called once, shortly after the plugin is created. + */ + virtual void initParameter(uint32_t index, Parameter& parameter) = 0; + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + /** + Set the name of the program @a index.@n + This function will be called once, shortly after the plugin is created.@n + Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_PROGRAMS is enabled. + */ + virtual void initProgramName(uint32_t index, String& programName) = 0; +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + /** + Set the state key and default value of @a index.@n + This function will be called once, shortly after the plugin is created.@n + Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_STATE is enabled. + */ + virtual void initState(uint32_t index, String& stateKey, String& defaultStateValue) = 0; +#endif + + /* -------------------------------------------------------------------------------------------------------- + * Internal data */ + + /** + Get the current value of a parameter.@n + The host may call this function from any context, including realtime processing. + */ + virtual float getParameterValue(uint32_t index) const = 0; + + /** + Change a parameter value.@n + The host may call this function from any context, including realtime processing.@n + When a parameter is marked as automable, you must ensure no non-realtime operations are performed. + @note This function will only be called for parameter inputs. + */ + virtual void setParameterValue(uint32_t index, float value) = 0; + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + /** + Load a program.@n + The host may call this function from any context, including realtime processing.@n + Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_PROGRAMS is enabled. + */ + virtual void loadProgram(uint32_t index) = 0; +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + /** + Change an internal state @a key to @a value.@n + Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_STATE is enabled. + */ + virtual void setState(const char* key, const char* value) = 0; +#endif + + /* -------------------------------------------------------------------------------------------------------- + * Audio/MIDI Processing */ + + /** + Activate this plugin. + */ + virtual void activate() {} + + /** + Deactivate this plugin. + */ + virtual void deactivate() {} + +#if DISTRHO_PLUGIN_WANT_MIDI_INPUT + /** + Run/process function for plugins with MIDI input. + @note Some parameters might be null if there are no audio inputs/outputs or MIDI events. + */ + virtual void run(const float** inputs, float** outputs, uint32_t frames, + const MidiEvent* midiEvents, uint32_t midiEventCount) = 0; +#else + /** + Run/process function for plugins without MIDI input. + @note Some parameters might be null if there are no audio inputs or outputs. + */ + virtual void run(const float** inputs, float** outputs, uint32_t frames) = 0; +#endif + + /* -------------------------------------------------------------------------------------------------------- + * Callbacks (optional) */ + + /** + Optional callback to inform the plugin about a buffer size change.@n + This function will only be called when the plugin is deactivated. + @note This value is only a hint!@n + Hosts might call run() with a higher or lower number of frames. + @see getBufferSize() + */ + virtual void bufferSizeChanged(uint32_t newBufferSize); + + /** + Optional callback to inform the plugin about a sample rate change.@n + This function will only be called when the plugin is deactivated. + @see getSampleRate() + */ + virtual void sampleRateChanged(double newSampleRate); + + // ------------------------------------------------------------------------------------------------------- + +private: + struct PrivateData; + PrivateData* const pData; + friend class PluginExporter; + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Plugin) +}; + +/** @} */ + +/* ------------------------------------------------------------------------------------------------------------ + * Create plugin, entry point */ + +/** + @defgroup EntryPoints Entry Points + @{ + */ + +/** + TODO. + */ +extern Plugin* createPlugin(); + +/** @} */ + +// ----------------------------------------------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +#endif // DISTRHO_PLUGIN_HPP_INCLUDED diff --git a/dpf/distrho/DistrhoPluginMain.cpp b/dpf/distrho/DistrhoPluginMain.cpp new file mode 100644 index 0000000..76dea76 --- /dev/null +++ b/dpf/distrho/DistrhoPluginMain.cpp @@ -0,0 +1,30 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "src/DistrhoPlugin.cpp" + +#if defined(DISTRHO_PLUGIN_TARGET_CARLA) +# include "src/DistrhoPluginCarla.cpp" +#elif defined(DISTRHO_PLUGIN_TARGET_JACK) +# include "src/DistrhoPluginJack.cpp" +#elif (defined(DISTRHO_PLUGIN_TARGET_LADSPA) || defined(DISTRHO_PLUGIN_TARGET_DSSI)) +# include "src/DistrhoPluginLADSPA+DSSI.cpp" +#elif defined(DISTRHO_PLUGIN_TARGET_LV2) +# include "src/DistrhoPluginLV2.cpp" +# include "src/DistrhoPluginLV2export.cpp" +#elif defined(DISTRHO_PLUGIN_TARGET_VST) +# include "src/DistrhoPluginVST.cpp" +#endif diff --git a/dpf/distrho/DistrhoUI.hpp b/dpf/distrho/DistrhoUI.hpp new file mode 100644 index 0000000..18d0789 --- /dev/null +++ b/dpf/distrho/DistrhoUI.hpp @@ -0,0 +1,209 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_UI_HPP_INCLUDED +#define DISTRHO_UI_HPP_INCLUDED + +#include "extra/LeakDetector.hpp" +#include "src/DistrhoPluginChecks.h" + +#if DISTRHO_UI_USE_NANOVG +# include "../dgl/NanoVG.hpp" +typedef DGL::NanoWidget UIWidget; +#else +# include "../dgl/Widget.hpp" +typedef DGL::Widget UIWidget; +#endif + +START_NAMESPACE_DISTRHO + +/* ------------------------------------------------------------------------------------------------------------ + * DPF UI */ + +/** + @addtogroup MainClasses + @{ + */ + +/** + DPF UI class from where UI instances are created. + + TODO. + + must call setSize during construction, + */ +class UI : public UIWidget +{ +public: + /** + UI class constructor. + The UI should be initialized to a default state that matches the plugin side. + */ + UI(uint width = 0, uint height = 0); + + /** + Destructor. + */ + virtual ~UI(); + + /* -------------------------------------------------------------------------------------------------------- + * Host state */ + + /** + Get the current sample rate used in plugin processing. + @see sampleRateChanged(double) + */ + double getSampleRate() const noexcept; + + /** + TODO: Document this. + */ + void editParameter(uint32_t index, bool started); + + /** + TODO: Document this. + */ + void setParameterValue(uint32_t index, float value); + +#if DISTRHO_PLUGIN_WANT_STATE + /** + TODO: Document this. + */ + void setState(const char* key, const char* value); +#endif + +#if DISTRHO_PLUGIN_IS_SYNTH + /** + TODO: Document this. + */ + void sendNote(uint8_t channel, uint8_t note, uint8_t velocity); +#endif + +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + /* -------------------------------------------------------------------------------------------------------- + * Direct DSP access - DO NOT USE THIS UNLESS STRICTLY NECESSARY!! */ + + /** + TODO: Document this. + */ + void* getPluginInstancePointer() const noexcept; +#endif + +protected: + /* -------------------------------------------------------------------------------------------------------- + * DSP/Plugin Callbacks */ + + /** + A parameter has changed on the plugin side. + This is called by the host to inform the UI about parameter changes. + */ + virtual void parameterChanged(uint32_t index, float value) = 0; + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + /** + A program has been loaded on the plugin side. + This is called by the host to inform the UI about program changes. + */ + virtual void programLoaded(uint32_t index) = 0; +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + /** + A state has changed on the plugin side. + This is called by the host to inform the UI about state changes. + */ + virtual void stateChanged(const char* key, const char* value) = 0; +#endif + + /* -------------------------------------------------------------------------------------------------------- + * DSP/Plugin Callbacks (optional) */ + + /** + Optional callback to inform the UI about a sample rate change on the plugin side. + @see getSampleRate() + */ + virtual void sampleRateChanged(double newSampleRate); + + /* -------------------------------------------------------------------------------------------------------- + * UI Callbacks (optional) */ + + /** + TODO: Document this. + */ + virtual void uiIdle() {} + + /** + File browser selected function. + @see Window::fileBrowserSelected(const char*) + */ + virtual void uiFileBrowserSelected(const char* filename); + + /** + OpenGL window reshape function, called when parent window is resized. + You can reimplement this function for a custom OpenGL state. + @see Window::onReshape(uint,uint) + */ + virtual void uiReshape(uint width, uint height); + + /* -------------------------------------------------------------------------------------------------------- + * UI Resize Handling, internal */ + + /** + OpenGL widget resize function, called when the widget is resized. + This is overriden here so the host knows when the UI is resized by you. + @see Widget::onResize(const ResizeEvent&) + */ + void onResize(const ResizeEvent& ev) override; + + // ------------------------------------------------------------------------------------------------------- + +private: + struct PrivateData; + PrivateData* const pData; + friend class UIExporter; + friend class UIExporterWindow; + + // these should not be used + void setAbsoluteX(int) const noexcept {} + void setAbsoluteY(int) const noexcept {} + void setAbsolutePos(int, int) const noexcept {} + void setAbsolutePos(const DGL::Point&) const noexcept {} + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UI) +}; + +/** @} */ + +/* ------------------------------------------------------------------------------------------------------------ + * Create UI, entry point */ + +/** + @addtogroup EntryPoints + @{ + */ + +/** + TODO. + */ +extern UI* createUI(); + +/** @} */ + +// ----------------------------------------------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +#endif // DISTRHO_UI_HPP_INCLUDED diff --git a/dpf/distrho/DistrhoUIMain.cpp b/dpf/distrho/DistrhoUIMain.cpp new file mode 100644 index 0000000..ee4a6e5 --- /dev/null +++ b/dpf/distrho/DistrhoUIMain.cpp @@ -0,0 +1,29 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "src/DistrhoUI.cpp" + +#if defined(DISTRHO_PLUGIN_TARGET_CARLA) +// nothing +#elif defined(DISTRHO_PLUGIN_TARGET_JACK) +// nothing +#elif defined(DISTRHO_PLUGIN_TARGET_DSSI) +# include "src/DistrhoUIDSSI.cpp" +#elif defined(DISTRHO_PLUGIN_TARGET_LV2) +# include "src/DistrhoUILV2.cpp" +#elif defined(DISTRHO_PLUGIN_TARGET_VST) +// nothing +#endif diff --git a/dpf/distrho/DistrhoUtils.hpp b/dpf/distrho/DistrhoUtils.hpp new file mode 100644 index 0000000..874ec41 --- /dev/null +++ b/dpf/distrho/DistrhoUtils.hpp @@ -0,0 +1,233 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_UTILS_HPP_INCLUDED +#define DISTRHO_UTILS_HPP_INCLUDED + +#include "src/DistrhoDefines.h" + +#include +#include +#include +#include + +#include +#include + +#ifdef DISTRHO_PROPER_CPP11_SUPPORT +# include +#else +# include +#endif + +#if defined(DISTRHO_OS_MAC) && ! defined(CARLA_OS_MAC) +namespace std { +inline float fmin(float __x, float __y) + { return __builtin_fminf(__x, __y); } +inline float fmax(float __x, float __y) + { return __builtin_fmaxf(__x, __y); } +inline float rint(float __x) + { return __builtin_rintf(__x); } +inline float round(float __x) + { return __builtin_roundf(__x); } +} +#endif + +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif + +// ----------------------------------------------------------------------- +// misc functions + +/* + * Return a 64-bit number from 4 8-bit numbers. + */ +static inline +int64_t d_cconst(const uint8_t a, const uint8_t b, const uint8_t c, const uint8_t d) noexcept +{ + return (a << 24) | (b << 16) | (c << 8) | (d << 0); +} + +/* + * Dummy function. + */ +static inline +void d_pass() noexcept {} + +// ----------------------------------------------------------------------- +// string print functions + +/* + * Print a string to stdout with newline (gray color). + * Does nothing if DEBUG is not defined. + */ +#ifndef DEBUG +# define d_debug(...) +#else +static inline +void d_debug(const char* const fmt, ...) noexcept +{ + try { + ::va_list args; + ::va_start(args, fmt); + std::fprintf(stdout, "\x1b[30;1m"); + std::vfprintf(stdout, fmt, args); + std::fprintf(stdout, "\x1b[0m\n"); + ::va_end(args); + } catch (...) {} +} +#endif + +/* + * Print a string to stdout with newline. + */ +static inline +void d_stdout(const char* const fmt, ...) noexcept +{ + try { + ::va_list args; + ::va_start(args, fmt); + std::vfprintf(stdout, fmt, args); + std::fprintf(stdout, "\n"); + ::va_end(args); + } catch (...) {} +} + +/* + * Print a string to stderr with newline. + */ +static inline +void d_stderr(const char* const fmt, ...) noexcept +{ + try { + ::va_list args; + ::va_start(args, fmt); + std::vfprintf(stderr, fmt, args); + std::fprintf(stderr, "\n"); + ::va_end(args); + } catch (...) {} +} + +/* + * Print a string to stderr with newline (red color). + */ +static inline +void d_stderr2(const char* const fmt, ...) noexcept +{ + try { + ::va_list args; + ::va_start(args, fmt); + std::fprintf(stderr, "\x1b[31m"); + std::vfprintf(stderr, fmt, args); + std::fprintf(stderr, "\x1b[0m\n"); + ::va_end(args); + } catch (...) {} +} + +/* + * Print a safe assertion error message. + */ +static inline +void d_safe_assert(const char* const assertion, const char* const file, const int line) noexcept +{ + d_stderr2("assertion failure: \"%s\" in file %s, line %i", assertion, file, line); +} + +/* + * Print a safe exception error message. + */ +static inline +void d_safe_exception(const char* const exception, const char* const file, const int line) noexcept +{ + d_stderr2("exception caught: \"%s\" in file %s, line %i", exception, file, line); +} + +// ----------------------------------------------------------------------- +// math functions + +/* + * Safely compare two floating point numbers. + * Returns true if they match. + */ +template +static inline +bool d_isEqual(const T& v1, const T& v2) +{ + return std::abs(v1-v2) < std::numeric_limits::epsilon(); +} + +/* + * Safely compare two floating point numbers. + * Returns true if they don't match. + */ +template +static inline +bool d_isNotEqual(const T& v1, const T& v2) +{ + return std::abs(v1-v2) >= std::numeric_limits::epsilon(); +} + +/* + * Safely check if a floating point number is zero. + */ +template +static inline +bool d_isZero(const T& value) +{ + return std::abs(value) < std::numeric_limits::epsilon(); +} + +/* + * Safely check if a floating point number is not zero. + */ +template +static inline +bool d_isNotZero(const T& value) +{ + return std::abs(value) >= std::numeric_limits::epsilon(); +} + +/* + * Get next power of 2. + */ +static inline +uint32_t d_nextPowerOf2(uint32_t size) noexcept +{ + DISTRHO_SAFE_ASSERT_RETURN(size > 0, 0); + + // http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 + --size; + size |= size >> 1; + size |= size >> 2; + size |= size >> 4; + size |= size >> 8; + size |= size >> 16; + return ++size; +} + +// ----------------------------------------------------------------------- + +#ifndef DONT_SET_USING_DISTRHO_NAMESPACE + // If your code uses a lot of DISTRHO classes, then this will obviously save you + // a lot of typing, but can be disabled by setting DONT_SET_USING_DISTRHO_NAMESPACE. + namespace DISTRHO_NAMESPACE {} + using namespace DISTRHO_NAMESPACE; +#endif + +// ----------------------------------------------------------------------- + +#endif // DISTRHO_UTILS_HPP_INCLUDED diff --git a/dpf/distrho/extra/Base64.hpp b/dpf/distrho/extra/Base64.hpp new file mode 100644 index 0000000..b1cce48 --- /dev/null +++ b/dpf/distrho/extra/Base64.hpp @@ -0,0 +1,127 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_BASE64_HPP_INCLUDED +#define DISTRHO_BASE64_HPP_INCLUDED + +#include "../DistrhoUtils.hpp" + +#include +#include + +// ----------------------------------------------------------------------- +// base64 stuff, based on http://www.adp-gmbh.ch/cpp/common/base64.html +// Copyright (C) 2004-2008 René Nyffenegger + +// ----------------------------------------------------------------------- +// Helpers + +#ifndef DOXYGEN +namespace DistrhoBase64Helpers { + +static const char* const kBase64Chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + +static inline +uint8_t findBase64CharIndex(const char c) +{ + static const uint8_t kBase64CharsLen(static_cast(std::strlen(kBase64Chars))); + + for (uint8_t i=0; i d_getChunkFromBase64String(const char* const base64string) +{ + DISTRHO_SAFE_ASSERT_RETURN(base64string != nullptr, std::vector()); + + uint i=0, j=0; + uint charArray3[3], charArray4[4]; + + std::vector ret; + ret.reserve(std::strlen(base64string)*3/4 + 4); + + for (std::size_t l=0, len=std::strlen(base64string); l(c); + + if (i == 4) + { + for (i=0; i<4; ++i) + charArray4[i] = DistrhoBase64Helpers::findBase64CharIndex(static_cast(charArray4[i])); + + charArray3[0] = (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4); + charArray3[1] = ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2); + charArray3[2] = ((charArray4[2] & 0x3) << 6) + charArray4[3]; + + for (i=0; i<3; ++i) + ret.push_back(static_cast(charArray3[i])); + + i = 0; + } + } + + if (i != 0) + { + for (j=0; j(charArray4[j])); + + for (j=i; j<4; ++j) + charArray4[j] = 0; + + charArray3[0] = (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4); + charArray3[1] = ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2); + charArray3[2] = ((charArray4[2] & 0x3) << 6) + charArray4[3]; + + for (j=0; i>0 && j(charArray3[j])); + } + + return ret; +} + +// ----------------------------------------------------------------------- + +#endif // DISTRHO_BASE64_HPP_INCLUDED diff --git a/dpf/distrho/extra/LeakDetector.hpp b/dpf/distrho/extra/LeakDetector.hpp new file mode 100644 index 0000000..08974e6 --- /dev/null +++ b/dpf/distrho/extra/LeakDetector.hpp @@ -0,0 +1,141 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_LEAK_DETECTOR_HPP_INCLUDED +#define DISTRHO_LEAK_DETECTOR_HPP_INCLUDED + +#include "../DistrhoUtils.hpp" + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- +// The following code was based from juce-core LeakDetector class +// Copyright (C) 2013 Raw Material Software Ltd. + +/** A good old-fashioned C macro concatenation helper. + This combines two items (which may themselves be macros) into a single string, + avoiding the pitfalls of the ## macro operator. +*/ +#define DISTRHO_JOIN_MACRO_HELPER(a, b) a ## b +#define DISTRHO_JOIN_MACRO(item1, item2) DISTRHO_JOIN_MACRO_HELPER(item1, item2) + +/** This macro lets you embed a leak-detecting object inside a class.\n + To use it, simply declare a DISTRHO_LEAK_DETECTOR(YourClassName) inside a private section + of the class declaration. E.g. + \code + class MyClass + { + public: + MyClass(); + void blahBlah(); + + private: + DISTRHO_LEAK_DETECTOR(MyClass) + }; + \endcode +*/ +#define DISTRHO_LEAK_DETECTOR(ClassName) \ + friend class DISTRHO_NAMESPACE::LeakedObjectDetector; \ + static const char* getLeakedObjectClassName() noexcept { return #ClassName; } \ + DISTRHO_NAMESPACE::LeakedObjectDetector DISTRHO_JOIN_MACRO(leakDetector_, ClassName); + +#define DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ClassName) \ + DISTRHO_DECLARE_NON_COPY_CLASS(ClassName) \ + DISTRHO_LEAK_DETECTOR(ClassName) + +//============================================================================== +/** + Embedding an instance of this class inside another class can be used as a low-overhead + way of detecting leaked instances. + + This class keeps an internal static count of the number of instances that are + active, so that when the app is shutdown and the static destructors are called, + it can check whether there are any left-over instances that may have been leaked. + + To use it, use the DISTRHO_LEAK_DETECTOR macro as a simple way to put one in your + class declaration. +*/ +template +class LeakedObjectDetector +{ +public: + //============================================================================== + LeakedObjectDetector() noexcept { ++(getCounter().numObjects); } + LeakedObjectDetector(const LeakedObjectDetector&) noexcept { ++(getCounter().numObjects); } + + ~LeakedObjectDetector() noexcept + { + if (--(getCounter().numObjects) < 0) + { + /** If you hit this, then you've managed to delete more instances of this class than you've + created.. That indicates that you're deleting some dangling pointers. + + Note that although this assertion will have been triggered during a destructor, it might + not be this particular deletion that's at fault - the incorrect one may have happened + at an earlier point in the program, and simply not been detected until now. + + Most errors like this are caused by using old-fashioned, non-RAII techniques for + your object management. Tut, tut. Always, always use ScopedPointers, OwnedArrays, + ReferenceCountedObjects, etc, and avoid the 'delete' operator at all costs! + */ + d_stderr2("*** Dangling pointer deletion! Class: '%s', Count: %i", getLeakedObjectClassName(), getCounter().numObjects); + } + } + +private: + //============================================================================== + class LeakCounter + { + public: + LeakCounter() noexcept + : numObjects(0) {} + + ~LeakCounter() noexcept + { + if (numObjects > 0) + { + /** If you hit this, then you've leaked one or more objects of the type specified by + the 'OwnerClass' template parameter - the name should have been printed by the line above. + + If you're leaking, it's probably because you're using old-fashioned, non-RAII techniques for + your object management. Tut, tut. Always, always use ScopedPointers, OwnedArrays, + ReferenceCountedObjects, etc, and avoid the 'delete' operator at all costs! + */ + d_stderr2("*** Leaked objects detected: %i instance(s) of class '%s'", numObjects, getLeakedObjectClassName()); + } + } + + // this should be an atomic... + volatile int numObjects; + }; + + static const char* getLeakedObjectClassName() noexcept + { + return OwnerClass::getLeakedObjectClassName(); + } + + static LeakCounter& getCounter() noexcept + { + static LeakCounter counter; + return counter; + } +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +#endif // DISTRHO_LEAK_DETECTOR_HPP_INCLUDED diff --git a/dpf/distrho/extra/Mutex.hpp b/dpf/distrho/extra/Mutex.hpp new file mode 100644 index 0000000..8badcc3 --- /dev/null +++ b/dpf/distrho/extra/Mutex.hpp @@ -0,0 +1,274 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_MUTEX_HPP_INCLUDED +#define DISTRHO_MUTEX_HPP_INCLUDED + +#include "../DistrhoUtils.hpp" + +#ifdef DISTRHO_OS_WINDOWS +# include +# include +#endif + +#include + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- +// Mutex class + +class Mutex +{ +public: + /* + * Constructor. + */ + Mutex() noexcept + : fMutex() + { + pthread_mutex_init(&fMutex, nullptr); + } + + /* + * Destructor. + */ + ~Mutex() noexcept + { + pthread_mutex_destroy(&fMutex); + } + + /* + * Lock the mutex. + */ + void lock() const noexcept + { + pthread_mutex_lock(&fMutex); + } + + /* + * Try to lock the mutex. + * Returns true if successful. + */ + bool tryLock() const noexcept + { + return (pthread_mutex_trylock(&fMutex) == 0); + } + + /* + * Unlock the mutex. + */ + void unlock() const noexcept + { + pthread_mutex_unlock(&fMutex); + } + +private: + mutable pthread_mutex_t fMutex; + + DISTRHO_PREVENT_HEAP_ALLOCATION + DISTRHO_DECLARE_NON_COPY_CLASS(Mutex) +}; + +// ----------------------------------------------------------------------- +// RecursiveMutex class + +class RecursiveMutex +{ +public: + /* + * Constructor. + */ + RecursiveMutex() noexcept +#ifdef DISTRHO_OS_WINDOWS + : fSection() +#else + : fMutex() +#endif + { +#ifdef DISTRHO_OS_WINDOWS + InitializeCriticalSection(&fSection); +#else + pthread_mutexattr_t atts; + pthread_mutexattr_init(&atts); + pthread_mutexattr_settype(&atts, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&fMutex, &atts); + pthread_mutexattr_destroy(&atts); +#endif + } + + /* + * Destructor. + */ + ~RecursiveMutex() noexcept + { +#ifdef DISTRHO_OS_WINDOWS + DeleteCriticalSection(&fSection); +#else + pthread_mutex_destroy(&fMutex); +#endif + } + + /* + * Lock the mutex. + */ + void lock() const noexcept + { +#ifdef DISTRHO_OS_WINDOWS + EnterCriticalSection(&fSection); +#else + pthread_mutex_lock(&fMutex); +#endif + } + + /* + * Try to lock the mutex. + * Returns true if successful. + */ + bool tryLock() const noexcept + { +#ifdef DISTRHO_OS_WINDOWS + return (TryEnterCriticalSection(&fSection) != FALSE); +#else + return (pthread_mutex_trylock(&fMutex) == 0); +#endif + } + + /* + * Unlock the mutex. + */ + void unlock() const noexcept + { +#ifdef DISTRHO_OS_WINDOWS + LeaveCriticalSection(&fSection); +#else + pthread_mutex_unlock(&fMutex); +#endif + } + +private: +#ifdef DISTRHO_OS_WINDOWS + mutable CRITICAL_SECTION fSection; +#else + mutable pthread_mutex_t fMutex; +#endif + + DISTRHO_PREVENT_HEAP_ALLOCATION + DISTRHO_DECLARE_NON_COPY_CLASS(RecursiveMutex) +}; + +// ----------------------------------------------------------------------- +// Helper class to lock&unlock a mutex during a function scope. + +template +class ScopeLocker +{ +public: + ScopeLocker(const Mutex& mutex) noexcept + : fMutex(mutex) + { + fMutex.lock(); + } + + ~ScopeLocker() noexcept + { + fMutex.unlock(); + } + +private: + const Mutex& fMutex; + + DISTRHO_PREVENT_HEAP_ALLOCATION + DISTRHO_DECLARE_NON_COPY_CLASS(ScopeLocker) +}; + +// ----------------------------------------------------------------------- +// Helper class to try-lock&unlock a mutex during a function scope. + +template +class ScopeTryLocker +{ +public: + ScopeTryLocker(const Mutex& mutex) noexcept + : fMutex(mutex), + fLocked(mutex.tryLock()) {} + + ~ScopeTryLocker() noexcept + { + if (fLocked) + fMutex.unlock(); + } + + bool wasLocked() const noexcept + { + return fLocked; + } + + bool wasNotLocked() const noexcept + { + return !fLocked; + } + +private: + const Mutex& fMutex; + const bool fLocked; + + DISTRHO_PREVENT_HEAP_ALLOCATION + DISTRHO_DECLARE_NON_COPY_CLASS(ScopeTryLocker) +}; + +// ----------------------------------------------------------------------- +// Helper class to unlock&lock a mutex during a function scope. + +template +class ScopeUnlocker +{ +public: + ScopeUnlocker(const Mutex& mutex) noexcept + : fMutex(mutex) + { + fMutex.unlock(); + } + + ~ScopeUnlocker() noexcept + { + fMutex.lock(); + } + +private: + const Mutex& fMutex; + + DISTRHO_PREVENT_HEAP_ALLOCATION + DISTRHO_DECLARE_NON_COPY_CLASS(ScopeUnlocker) +}; + +// ----------------------------------------------------------------------- +// Define types + +typedef ScopeLocker MutexLocker; +typedef ScopeLocker RecursiveMutexLocker; + +typedef ScopeTryLocker MutexTryLocker; +typedef ScopeTryLocker RecursiveMutexTryLocker; + +typedef ScopeUnlocker MutexUnlocker; +typedef ScopeUnlocker RecursiveMutexUnlocker; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +#endif // DISTRHO_MUTEX_HPP_INCLUDED diff --git a/dpf/distrho/extra/ScopedPointer.hpp b/dpf/distrho/extra/ScopedPointer.hpp new file mode 100644 index 0000000..12e6ba0 --- /dev/null +++ b/dpf/distrho/extra/ScopedPointer.hpp @@ -0,0 +1,230 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_SCOPED_POINTER_HPP_INCLUDED +#define DISTRHO_SCOPED_POINTER_HPP_INCLUDED + +#include "../DistrhoUtils.hpp" + +#include + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- +// The following code was based from juce-core ScopedPointer class +// Copyright (C) 2013 Raw Material Software Ltd. + +//============================================================================== +/** + This class holds a pointer which is automatically deleted when this object goes + out of scope. + + Once a pointer has been passed to a ScopedPointer, it will make sure that the pointer + gets deleted when the ScopedPointer is deleted. Using the ScopedPointer on the stack or + as member variables is a good way to use RAII to avoid accidentally leaking dynamically + created objects. + + A ScopedPointer can be used in pretty much the same way that you'd use a normal pointer + to an object. If you use the assignment operator to assign a different object to a + ScopedPointer, the old one will be automatically deleted. + + A const ScopedPointer is guaranteed not to lose ownership of its object or change the + object to which it points during its lifetime. This means that making a copy of a const + ScopedPointer is impossible, as that would involve the new copy taking ownership from the + old one. + + If you need to get a pointer out of a ScopedPointer without it being deleted, you + can use the release() method. + + Something to note is the main difference between this class and the std::auto_ptr class, + which is that ScopedPointer provides a cast-to-object operator, wheras std::auto_ptr + requires that you always call get() to retrieve the pointer. The advantages of providing + the cast is that you don't need to call get(), so can use the ScopedPointer in pretty much + exactly the same way as a raw pointer. The disadvantage is that the compiler is free to + use the cast in unexpected and sometimes dangerous ways - in particular, it becomes difficult + to return a ScopedPointer as the result of a function. To avoid this causing errors, + ScopedPointer contains an overloaded constructor that should cause a syntax error in these + circumstances, but it does mean that instead of returning a ScopedPointer from a function, + you'd need to return a raw pointer (or use a std::auto_ptr instead). +*/ +template +class ScopedPointer +{ +public: + //============================================================================== + /** Creates a ScopedPointer containing a null pointer. */ + ScopedPointer() noexcept + : object(nullptr) {} + + /** Creates a ScopedPointer that owns the specified object. */ + ScopedPointer(ObjectType* const objectToTakePossessionOf) noexcept + : object(objectToTakePossessionOf) {} + + /** Creates a ScopedPointer that takes its pointer from another ScopedPointer. + + Because a pointer can only belong to one ScopedPointer, this transfers + the pointer from the other object to this one, and the other object is reset to + be a null pointer. + */ + ScopedPointer(ScopedPointer& objectToTransferFrom) noexcept + : object(objectToTransferFrom.object) + { + objectToTransferFrom.object = nullptr; + } + + /** Destructor. + This will delete the object that this ScopedPointer currently refers to. + */ + ~ScopedPointer() + { + delete object; + } + + /** Changes this ScopedPointer to point to a new object. + + Because a pointer can only belong to one ScopedPointer, this transfers + the pointer from the other object to this one, and the other object is reset to + be a null pointer. + + If this ScopedPointer already points to an object, that object + will first be deleted. + */ + ScopedPointer& operator=(ScopedPointer& objectToTransferFrom) + { + if (this != objectToTransferFrom.getAddress()) + { + // Two ScopedPointers should never be able to refer to the same object - if + // this happens, you must have done something dodgy! + DISTRHO_SAFE_ASSERT_RETURN(object == nullptr || object != objectToTransferFrom.object, *this); + + ObjectType* const oldObject = object; + object = objectToTransferFrom.object; + objectToTransferFrom.object = nullptr; + delete oldObject; + } + + return *this; + } + + /** Changes this ScopedPointer to point to a new object. + + If this ScopedPointer already points to an object, that object + will first be deleted. + + The pointer that you pass in may be a nullptr. + */ + ScopedPointer& operator=(ObjectType* const newObjectToTakePossessionOf) + { + if (object != newObjectToTakePossessionOf) + { + ObjectType* const oldObject = object; + object = newObjectToTakePossessionOf; + delete oldObject; + } + + return *this; + } + + //============================================================================== + /** Returns the object that this ScopedPointer refers to. */ + operator ObjectType*() const noexcept { return object; } + + /** Returns the object that this ScopedPointer refers to. */ + ObjectType* get() const noexcept { return object; } + + /** Returns the object that this ScopedPointer refers to. */ + ObjectType& operator*() const noexcept { return *object; } + + /** Lets you access methods and properties of the object that this ScopedPointer refers to. */ + ObjectType* operator->() const noexcept { return object; } + + //============================================================================== + /** Removes the current object from this ScopedPointer without deleting it. + This will return the current object, and set the ScopedPointer to a null pointer. + */ + ObjectType* release() noexcept { ObjectType* const o = object; object = nullptr; return o; } + + //============================================================================== + /** Swaps this object with that of another ScopedPointer. + The two objects simply exchange their pointers. + */ + void swapWith(ScopedPointer& other) noexcept + { + // Two ScopedPointers should never be able to refer to the same object - if + // this happens, you must have done something dodgy! + DISTRHO_SAFE_ASSERT_RETURN(object != other.object || this == other.getAddress() || object == nullptr,); + + std::swap(object, other.object); + } + +private: + //============================================================================== + ObjectType* object; + + // (Required as an alternative to the overloaded & operator). + const ScopedPointer* getAddress() const noexcept { return this; } + +#ifndef _MSC_VER // (MSVC can't deal with multiple copy constructors) + /* The copy constructors are private to stop people accidentally copying a const ScopedPointer + (the compiler would let you do so by implicitly casting the source to its raw object pointer). + + A side effect of this is that in a compiler that doesn't support C++11, you may hit an + error when you write something like this: + + ScopedPointer m = new MyClass(); // Compile error: copy constructor is private. + + Even though the compiler would normally ignore the assignment here, it can't do so when the + copy constructor is private. It's very easy to fix though - just write it like this: + + ScopedPointer m (new MyClass()); // Compiles OK + + It's probably best to use the latter form when writing your object declarations anyway, as + this is a better representation of the code that you actually want the compiler to produce. + */ +# ifdef DISTRHO_PROPER_CPP11_SUPPORT + ScopedPointer(const ScopedPointer&) = delete; + ScopedPointer& operator=(const ScopedPointer&) = delete; +# else + ScopedPointer(const ScopedPointer&); + ScopedPointer& operator=(const ScopedPointer&); +# endif +#endif +}; + +//============================================================================== +/** Compares a ScopedPointer with another pointer. + This can be handy for checking whether this is a null pointer. +*/ +template +bool operator==(const ScopedPointer& pointer1, ObjectType* const pointer2) noexcept +{ + return static_cast(pointer1) == pointer2; +} + +/** Compares a ScopedPointer with another pointer. + This can be handy for checking whether this is a null pointer. +*/ +template +bool operator!=(const ScopedPointer& pointer1, ObjectType* const pointer2) noexcept +{ + return static_cast(pointer1) != pointer2; +} + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +#endif // DISTRHO_SCOPED_POINTER_HPP_INCLUDED diff --git a/dpf/distrho/extra/Sleep.hpp b/dpf/distrho/extra/Sleep.hpp new file mode 100644 index 0000000..4953a12 --- /dev/null +++ b/dpf/distrho/extra/Sleep.hpp @@ -0,0 +1,68 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_SLEEP_HPP_INCLUDED +#define DISTRHO_SLEEP_HPP_INCLUDED + +#include "../DistrhoUtils.hpp" + +#ifdef DISTRHO_OS_WINDOWS +# include +# include +#else +# include +#endif + +// ----------------------------------------------------------------------- +// d_*sleep + +/* + * Sleep for 'secs' seconds. + */ +static inline +void d_sleep(const uint secs) noexcept +{ + DISTRHO_SAFE_ASSERT_RETURN(secs > 0,); + + try { +#ifdef DISTRHO_OS_WINDOWS + ::Sleep(secs * 1000); +#else + ::sleep(secs); +#endif + } DISTRHO_SAFE_EXCEPTION("d_sleep"); +} + +/* + * Sleep for 'msecs' milliseconds. + */ +static inline +void d_msleep(const uint msecs) noexcept +{ + DISTRHO_SAFE_ASSERT_RETURN(msecs > 0,); + + try { +#ifdef DISTRHO_OS_WINDOWS + ::Sleep(msecs); +#else + ::usleep(msecs * 1000); +#endif + } DISTRHO_SAFE_EXCEPTION("d_msleep"); +} + +// ----------------------------------------------------------------------- + +#endif // DISTRHO_SLEEP_HPP_INCLUDED diff --git a/dpf/distrho/extra/String.hpp b/dpf/distrho/extra/String.hpp new file mode 100644 index 0000000..6cf96d4 --- /dev/null +++ b/dpf/distrho/extra/String.hpp @@ -0,0 +1,840 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_STRING_HPP_INCLUDED +#define DISTRHO_STRING_HPP_INCLUDED + +#include "../DistrhoUtils.hpp" + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- +// String class + +class String +{ +public: + // ------------------------------------------------------------------- + // constructors (no explicit conversions allowed) + + /* + * Empty string. + */ + explicit String() noexcept + : fBuffer(_null()), + fBufferLen(0) {} + + /* + * Simple character. + */ + explicit String(const char c) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + char ch[2]; + ch[0] = c; + ch[1] = '\0'; + + _dup(ch); + } + + /* + * Simple char string. + */ + explicit String(char* const strBuf) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + _dup(strBuf); + } + + /* + * Simple const char string. + */ + explicit String(const char* const strBuf) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + _dup(strBuf); + } + + /* + * Integer. + */ + explicit String(const int value) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + char strBuf[0xff+1]; + std::snprintf(strBuf, 0xff, "%d", value); + strBuf[0xff] = '\0'; + + _dup(strBuf); + } + + /* + * Unsigned integer, possibly in hexadecimal. + */ + explicit String(const unsigned int value, const bool hexadecimal = false) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + char strBuf[0xff+1]; + std::snprintf(strBuf, 0xff, hexadecimal ? "0x%x" : "%u", value); + strBuf[0xff] = '\0'; + + _dup(strBuf); + } + + /* + * Long integer. + */ + explicit String(const long value) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + char strBuf[0xff+1]; + std::snprintf(strBuf, 0xff, "%ld", value); + strBuf[0xff] = '\0'; + + _dup(strBuf); + } + + /* + * Long unsigned integer, possibly hexadecimal. + */ + explicit String(const unsigned long value, const bool hexadecimal = false) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + char strBuf[0xff+1]; + std::snprintf(strBuf, 0xff, hexadecimal ? "0x%lx" : "%lu", value); + strBuf[0xff] = '\0'; + + _dup(strBuf); + } + + /* + * Long long integer. + */ + explicit String(const long long value) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + char strBuf[0xff+1]; + std::snprintf(strBuf, 0xff, "%lld", value); + strBuf[0xff] = '\0'; + + _dup(strBuf); + } + + /* + * Long long unsigned integer, possibly hexadecimal. + */ + explicit String(const unsigned long long value, const bool hexadecimal = false) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + char strBuf[0xff+1]; + std::snprintf(strBuf, 0xff, hexadecimal ? "0x%llx" : "%llu", value); + strBuf[0xff] = '\0'; + + _dup(strBuf); + } + + /* + * Single-precision floating point number. + */ + explicit String(const float value) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + char strBuf[0xff+1]; + std::snprintf(strBuf, 0xff, "%f", value); + strBuf[0xff] = '\0'; + + _dup(strBuf); + } + + /* + * Double-precision floating point number. + */ + explicit String(const double value) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + char strBuf[0xff+1]; + std::snprintf(strBuf, 0xff, "%g", value); + strBuf[0xff] = '\0'; + + _dup(strBuf); + } + + // ------------------------------------------------------------------- + // non-explicit constructor + + /* + * Create string from another string. + */ + String(const String& str) noexcept + : fBuffer(_null()), + fBufferLen(0) + { + _dup(str.fBuffer); + } + + // ------------------------------------------------------------------- + // destructor + + /* + * Destructor. + */ + ~String() noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fBuffer != nullptr,); + + if (fBuffer == _null()) + return; + + std::free(fBuffer); + + fBuffer = nullptr; + fBufferLen = 0; + } + + // ------------------------------------------------------------------- + // public methods + + /* + * Get length of the string. + */ + std::size_t length() const noexcept + { + return fBufferLen; + } + + /* + * Check if the string is empty. + */ + bool isEmpty() const noexcept + { + return (fBufferLen == 0); + } + + /* + * Check if the string is not empty. + */ + bool isNotEmpty() const noexcept + { + return (fBufferLen != 0); + } + + /* + * Check if the string contains another string, optionally ignoring case. + */ + bool contains(const char* const strBuf, const bool ignoreCase = false) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(strBuf != nullptr, false); + + if (ignoreCase) + { +#ifdef __USE_GNU + return (strcasestr(fBuffer, strBuf) != nullptr); +#else + String tmp1(fBuffer), tmp2(strBuf); + + // memory allocation failed or empty string(s) + if (tmp1.fBuffer == _null() || tmp2.fBuffer == _null()) + return false; + + tmp1.toLower(); + tmp2.toLower(); + return (std::strstr(tmp1, tmp2) != nullptr); +#endif + } + + return (std::strstr(fBuffer, strBuf) != nullptr); + } + + /* + * Check if character at 'pos' is a digit. + */ + bool isDigit(const std::size_t pos) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(pos < fBufferLen, false); + + return (fBuffer[pos] >= '0' && fBuffer[pos] <= '9'); + } + + /* + * Check if the string starts with the character 'c'. + */ + bool startsWith(const char c) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(c != '\0', false); + + return (fBufferLen > 0 && fBuffer[0] == c); + } + + /* + * Check if the string starts with the string 'prefix'. + */ + bool startsWith(const char* const prefix) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(prefix != nullptr, false); + + const std::size_t prefixLen(std::strlen(prefix)); + + if (fBufferLen < prefixLen) + return false; + + return (std::strncmp(fBuffer, prefix, prefixLen) == 0); + } + + /* + * Check if the string ends with the character 'c'. + */ + bool endsWith(const char c) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(c != '\0', false); + + return (fBufferLen > 0 && fBuffer[fBufferLen-1] == c); + } + + /* + * Check if the string ends with the string 'suffix'. + */ + bool endsWith(const char* const suffix) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(suffix != nullptr, false); + + const std::size_t suffixLen(std::strlen(suffix)); + + if (fBufferLen < suffixLen) + return false; + + return (std::strncmp(fBuffer + (fBufferLen-suffixLen), suffix, suffixLen) == 0); + } + + /* + * Find the first occurrence of character 'c' in the string. + * Returns "length()" if the character is not found. + */ + std::size_t find(const char c, bool* const found = nullptr) const noexcept + { + if (fBufferLen == 0 || c == '\0') + { + if (found != nullptr) + *found = false; + return fBufferLen; + } + + for (std::size_t i=0; i < fBufferLen; ++i) + { + if (fBuffer[i] == c) + { + if (found != nullptr) + *found = true; + return i; + } + } + + if (found != nullptr) + *found = false; + return fBufferLen; + } + + /* + * Find the first occurrence of string 'strBuf' in the string. + * Returns "length()" if the string is not found. + */ + std::size_t find(const char* const strBuf, bool* const found = nullptr) const noexcept + { + if (fBufferLen == 0 || strBuf == nullptr || strBuf[0] == '\0') + { + if (found != nullptr) + *found = false; + return fBufferLen; + } + + if (char* const subStrBuf = std::strstr(fBuffer, strBuf)) + { + const ssize_t ret(subStrBuf - fBuffer); + + if (ret < 0) + { + // should never happen! + d_safe_assert("ret >= 0", __FILE__, __LINE__); + + if (found != nullptr) + *found = false; + return fBufferLen; + } + + if (found != nullptr) + *found = true; + return static_cast(ret); + } + + if (found != nullptr) + *found = false; + return fBufferLen; + } + + /* + * Find the last occurrence of character 'c' in the string. + * Returns "length()" if the character is not found. + */ + std::size_t rfind(const char c, bool* const found = nullptr) const noexcept + { + if (fBufferLen == 0 || c == '\0') + { + if (found != nullptr) + *found = false; + return fBufferLen; + } + + for (std::size_t i=fBufferLen; i > 0; --i) + { + if (fBuffer[i-1] == c) + { + if (found != nullptr) + *found = true; + return i-1; + } + } + + if (found != nullptr) + *found = false; + return fBufferLen; + } + + /* + * Find the last occurrence of string 'strBuf' in the string. + * Returns "length()" if the string is not found. + */ + std::size_t rfind(const char* const strBuf, bool* const found = nullptr) const noexcept + { + if (found != nullptr) + *found = false; + + if (fBufferLen == 0 || strBuf == nullptr || strBuf[0] == '\0') + return fBufferLen; + + const std::size_t strBufLen(std::strlen(strBuf)); + + std::size_t ret = fBufferLen; + const char* tmpBuf = fBuffer; + + for (std::size_t i=0; i < fBufferLen; ++i) + { + if (std::strstr(tmpBuf+1, strBuf) == nullptr && std::strncmp(tmpBuf, strBuf, strBufLen) == 0) + { + if (found != nullptr) + *found = true; + break; + } + + --ret; + ++tmpBuf; + } + + return fBufferLen-ret; + } + + /* + * Clear the string. + */ + void clear() noexcept + { + truncate(0); + } + + /* + * Replace all occurrences of character 'before' with character 'after'. + */ + String& replace(const char before, const char after) noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(before != '\0' && after != '\0', *this); + + for (std::size_t i=0; i < fBufferLen; ++i) + { + if (fBuffer[i] == before) + fBuffer[i] = after; + } + + return *this; + } + + /* + * Truncate the string to size 'n'. + */ + String& truncate(const std::size_t n) noexcept + { + if (n >= fBufferLen) + return *this; + + for (std::size_t i=n; i < fBufferLen; ++i) + fBuffer[i] = '\0'; + + fBufferLen = n; + + return *this; + } + + /* + * Convert all non-basic characters to '_'. + */ + String& toBasic() noexcept + { + for (std::size_t i=0; i < fBufferLen; ++i) + { + if (fBuffer[i] >= '0' && fBuffer[i] <= '9') + continue; + if (fBuffer[i] >= 'A' && fBuffer[i] <= 'Z') + continue; + if (fBuffer[i] >= 'a' && fBuffer[i] <= 'z') + continue; + if (fBuffer[i] == '_') + continue; + + fBuffer[i] = '_'; + } + + return *this; + } + + /* + * Convert to all ascii characters to lowercase. + */ + String& toLower() noexcept + { + static const char kCharDiff('a' - 'A'); + + for (std::size_t i=0; i < fBufferLen; ++i) + { + if (fBuffer[i] >= 'A' && fBuffer[i] <= 'Z') + fBuffer[i] = static_cast(fBuffer[i] + kCharDiff); + } + + return *this; + } + + /* + * Convert to all ascii characters to uppercase. + */ + String& toUpper() noexcept + { + static const char kCharDiff('a' - 'A'); + + for (std::size_t i=0; i < fBufferLen; ++i) + { + if (fBuffer[i] >= 'a' && fBuffer[i] <= 'z') + fBuffer[i] = static_cast(fBuffer[i] - kCharDiff); + } + + return *this; + } + + /* + * Direct access to the string buffer (read-only). + */ + const char* buffer() const noexcept + { + return fBuffer; + } + + // ------------------------------------------------------------------- + // base64 stuff, based on http://www.adp-gmbh.ch/cpp/common/base64.html + // Copyright (C) 2004-2008 René Nyffenegger + + static String asBase64(const void* const data, const std::size_t dataSize) + { + static const char* const kBase64Chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + + const std::size_t kTmpBufSize = d_nextPowerOf2(dataSize/3); + + const uchar* bytesToEncode((const uchar*)data); + + uint i=0, j=0; + uint charArray3[3], charArray4[4]; + + char strBuf[kTmpBufSize+1]; + strBuf[kTmpBufSize] = '\0'; + std::size_t strBufIndex = 0; + + String ret; + + for (std::size_t s=0; s> 2; + charArray4[1] = ((charArray3[0] & 0x03) << 4) + ((charArray3[1] & 0xf0) >> 4); + charArray4[2] = ((charArray3[1] & 0x0f) << 2) + ((charArray3[2] & 0xc0) >> 6); + charArray4[3] = charArray3[2] & 0x3f; + + for (i=0; i<4; ++i) + strBuf[strBufIndex++] = kBase64Chars[charArray4[i]]; + + if (strBufIndex >= kTmpBufSize-7) + { + strBuf[strBufIndex] = '\0'; + strBufIndex = 0; + ret += strBuf; + } + + i = 0; + } + } + + if (i != 0) + { + for (j=i; j<3; ++j) + charArray3[j] = '\0'; + + charArray4[0] = (charArray3[0] & 0xfc) >> 2; + charArray4[1] = ((charArray3[0] & 0x03) << 4) + ((charArray3[1] & 0xf0) >> 4); + charArray4[2] = ((charArray3[1] & 0x0f) << 2) + ((charArray3[2] & 0xc0) >> 6); + charArray4[3] = charArray3[2] & 0x3f; + + for (j=0; j<4 && i<3 && j 0) ? size : std::strlen(strBuf); + fBuffer = (char*)std::malloc(fBufferLen+1); + + if (fBuffer == nullptr) + { + fBuffer = _null(); + fBufferLen = 0; + return; + } + + std::strcpy(fBuffer, strBuf); + + fBuffer[fBufferLen] = '\0'; + } + else + { + DISTRHO_SAFE_ASSERT(size == 0); + + // don't recreate null string + if (fBuffer == _null()) + return; + + DISTRHO_SAFE_ASSERT(fBuffer != nullptr); + std::free(fBuffer); + + fBuffer = _null(); + fBufferLen = 0; + } + } + + DISTRHO_PREVENT_HEAP_ALLOCATION +}; + +// ----------------------------------------------------------------------- + +static inline +String operator+(const String& strBefore, const char* const strBufAfter) noexcept +{ + const char* const strBufBefore = strBefore.buffer(); + const std::size_t newBufSize = strBefore.length() + ((strBufAfter != nullptr) ? std::strlen(strBufAfter) : 0) + 1; + char newBuf[newBufSize]; + + std::strcpy(newBuf, strBufBefore); + std::strcat(newBuf, strBufAfter); + + return String(newBuf); +} + +static inline +String operator+(const char* const strBufBefore, const String& strAfter) noexcept +{ + const char* const strBufAfter = strAfter.buffer(); + const std::size_t newBufSize = ((strBufBefore != nullptr) ? std::strlen(strBufBefore) : 0) + strAfter.length() + 1; + char newBuf[newBufSize]; + + std::strcpy(newBuf, strBufBefore); + std::strcat(newBuf, strBufAfter); + + return String(newBuf); +} + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +#endif // DISTRHO_STRING_HPP_INCLUDED diff --git a/dpf/distrho/extra/Thread.hpp b/dpf/distrho/extra/Thread.hpp new file mode 100644 index 0000000..efb2862 --- /dev/null +++ b/dpf/distrho/extra/Thread.hpp @@ -0,0 +1,290 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_THREAD_HPP_INCLUDED +#define DISTRHO_THREAD_HPP_INCLUDED + +#include "Mutex.hpp" +#include "Sleep.hpp" +#include "String.hpp" + +#ifdef DISTRHO_OS_LINUX +# include +#endif + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- +// Thread class + +class Thread +{ +protected: + /* + * Constructor. + */ + Thread(const char* const threadName = nullptr) noexcept + : fLock(), + fName(threadName), +#ifdef PTW32_DLLPORT + fHandle({nullptr, 0}), +#else + fHandle(0), +#endif + fShouldExit(false) {} + + /* + * Destructor. + */ + virtual ~Thread() /*noexcept*/ + { + DISTRHO_SAFE_ASSERT(! isThreadRunning()); + + stopThread(-1); + } + + /* + * Virtual function to be implemented by the subclass. + */ + virtual void run() = 0; + + // ------------------------------------------------------------------- + +public: + /* + * Check if the thread is running. + */ + bool isThreadRunning() const noexcept + { +#ifdef PTW32_DLLPORT + return (fHandle.p != nullptr); +#else + return (fHandle != 0); +#endif + } + + /* + * Check if the thread should exit. + */ + bool shouldThreadExit() const noexcept + { + return fShouldExit; + } + + /* + * Start the thread. + */ + bool startThread() noexcept + { + // check if already running + DISTRHO_SAFE_ASSERT_RETURN(! isThreadRunning(), true); + + const MutexLocker cml(fLock); + + fShouldExit = false; + + pthread_t handle; + + if (pthread_create(&handle, nullptr, _entryPoint, this) == 0) + { +#ifdef PTW32_DLLPORT + DISTRHO_SAFE_ASSERT_RETURN(handle.p != nullptr, false); +#else + DISTRHO_SAFE_ASSERT_RETURN(handle != 0, false); +#endif + pthread_detach(handle); + _copyFrom(handle); + + // wait for thread to start + fLock.lock(); + + return true; + } + + return false; + } + + /* + * Stop the thread. + * In the 'timeOutMilliseconds': + * = 0 -> no wait + * > 0 -> wait timeout value + * < 0 -> wait forever + */ + bool stopThread(const int timeOutMilliseconds) noexcept + { + const MutexLocker cml(fLock); + + if (isThreadRunning()) + { + signalThreadShouldExit(); + + if (timeOutMilliseconds != 0) + { + // Wait for the thread to stop + int timeOutCheck = (timeOutMilliseconds == 1 || timeOutMilliseconds == -1) ? timeOutMilliseconds : timeOutMilliseconds/2; + + for (; isThreadRunning();) + { + d_msleep(2); + + if (timeOutCheck < 0) + continue; + + if (timeOutCheck > 0) + timeOutCheck -= 1; + else + break; + } + } + + if (isThreadRunning()) + { + // should never happen! + d_stderr2("assertion failure: \"! isThreadRunning()\" in file %s, line %i", __FILE__, __LINE__); + + // copy thread id so we can clear our one + pthread_t threadId; + _copyTo(threadId); + _init(); + + try { + pthread_cancel(threadId); + } DISTRHO_SAFE_EXCEPTION("pthread_cancel"); + + return false; + } + } + + return true; + } + + /* + * Tell the thread to stop as soon as possible. + */ + void signalThreadShouldExit() noexcept + { + fShouldExit = true; + } + + // ------------------------------------------------------------------- + + /* + * Returns the name of the thread. + * This is the name that gets set in the constructor. + */ + const String& getThreadName() const noexcept + { + return fName; + } + + /* + * Changes the name of the caller thread. + */ + static void setCurrentThreadName(const char* const name) noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0',); + +#ifdef DISTRHO_OS_LINUX + prctl(PR_SET_NAME, name, 0, 0, 0); +#endif +#if defined(__GLIBC__) && (__GLIBC__ * 1000 + __GLIBC_MINOR__) >= 2012 + pthread_setname_np(pthread_self(), name); +#endif + } + + // ------------------------------------------------------------------- + +private: + Mutex fLock; // Thread lock + const String fName; // Thread name + volatile pthread_t fHandle; // Handle for this thread + volatile bool fShouldExit; // true if thread should exit + + /* + * Init pthread type. + */ + void _init() noexcept + { +#ifdef PTW32_DLLPORT + fHandle.p = nullptr; + fHandle.x = 0; +#else + fHandle = 0; +#endif + } + + /* + * Copy our pthread type from another var. + */ + void _copyFrom(const pthread_t& handle) noexcept + { +#ifdef PTW32_DLLPORT + fHandle.p = handle.p; + fHandle.x = handle.x; +#else + fHandle = handle; +#endif + } + + /* + * Copy our pthread type to another var. + */ + void _copyTo(volatile pthread_t& handle) const noexcept + { +#ifdef PTW32_DLLPORT + handle.p = fHandle.p; + handle.x = fHandle.x; +#else + handle = fHandle; +#endif + } + + /* + * Thread entry point. + */ + void _runEntryPoint() noexcept + { + // report ready + fLock.unlock(); + + setCurrentThreadName(fName); + + try { + run(); + } catch(...) {} + + // done + _init(); + } + + /* + * Thread entry point. + */ + static void* _entryPoint(void* userData) noexcept + { + static_cast(userData)->_runEntryPoint(); + return nullptr; + } + + DISTRHO_DECLARE_NON_COPY_CLASS(Thread) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +#endif // DISTRHO_THREAD_HPP_INCLUDED diff --git a/dpf/distrho/src/DistrhoDefines.h b/dpf/distrho/src/DistrhoDefines.h new file mode 100644 index 0000000..83d4256 --- /dev/null +++ b/dpf/distrho/src/DistrhoDefines.h @@ -0,0 +1,134 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_DEFINES_H_INCLUDED +#define DISTRHO_DEFINES_H_INCLUDED + +/* Compatibility with non-clang compilers */ +#ifndef __has_feature +# define __has_feature(x) 0 +#endif +#ifndef __has_extension +# define __has_extension __has_feature +#endif + +/* Check OS */ +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) +# define DISTRHO_PLUGIN_EXPORT extern "C" __declspec (dllexport) +# define DISTRHO_OS_WINDOWS 1 +# define DISTRHO_DLL_EXTENSION "dll" +#else +# define DISTRHO_PLUGIN_EXPORT extern "C" __attribute__ ((visibility("default"))) +# if defined(__APPLE__) +# define DISTRHO_OS_MAC 1 +# define DISTRHO_DLL_EXTENSION "dylib" +# elif defined(__HAIKU__) +# define DISTRHO_OS_HAIKU 1 +# elif defined(__linux__) +# define DISTRHO_OS_LINUX 1 +# endif +#endif + +#ifndef DISTRHO_DLL_EXTENSION +# define DISTRHO_DLL_EXTENSION "so" +#endif + +/* Check for C++11 support */ +#if defined(HAVE_CPP11_SUPPORT) +# define DISTRHO_PROPER_CPP11_SUPPORT +#elif __cplusplus >= 201103L || (defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 405) || __has_extension(cxx_noexcept) +# define DISTRHO_PROPER_CPP11_SUPPORT +# if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) < 407 && ! defined(__clang__)) || (defined(__clang__) && ! __has_extension(cxx_override_control)) +# define override // gcc4.7+ only +# define final // gcc4.7+ only +# endif +#endif + +#ifndef DISTRHO_PROPER_CPP11_SUPPORT +# define noexcept throw() +# define override +# define final +# define nullptr NULL +#endif + +/* Define DISTRHO_SAFE_ASSERT* */ +#define DISTRHO_SAFE_ASSERT(cond) if (! (cond)) d_safe_assert(#cond, __FILE__, __LINE__); +#define DISTRHO_SAFE_ASSERT_BREAK(cond) if (! (cond)) { d_safe_assert(#cond, __FILE__, __LINE__); break; } +#define DISTRHO_SAFE_ASSERT_CONTINUE(cond) if (! (cond)) { d_safe_assert(#cond, __FILE__, __LINE__); continue; } +#define DISTRHO_SAFE_ASSERT_RETURN(cond, ret) if (! (cond)) { d_safe_assert(#cond, __FILE__, __LINE__); return ret; } + +/* Define DISTRHO_SAFE_EXCEPTION */ +#define DISTRHO_SAFE_EXCEPTION(msg) catch(...) { d_safe_exception(msg, __FILE__, __LINE__); } +#define DISTRHO_SAFE_EXCEPTION_BREAK(msg) catch(...) { d_safe_exception(msg, __FILE__, __LINE__); break; } +#define DISTRHO_SAFE_EXCEPTION_CONTINUE(msg) catch(...) { d_safe_exception(msg, __FILE__, __LINE__); continue; } +#define DISTRHO_SAFE_EXCEPTION_RETURN(msg, ret) catch(...) { d_safe_exception(msg, __FILE__, __LINE__); return ret; } + +/* Define DISTRHO_DECLARE_NON_COPY_CLASS */ +#ifdef DISTRHO_PROPER_CPP11_SUPPORT +# define DISTRHO_DECLARE_NON_COPY_CLASS(ClassName) \ +private: \ + ClassName(ClassName&) = delete; \ + ClassName(const ClassName&) = delete; \ + ClassName& operator=(ClassName&) = delete ; \ + ClassName& operator=(const ClassName&) = delete; +#else +# define DISTRHO_DECLARE_NON_COPY_CLASS(ClassName) \ +private: \ + ClassName(ClassName&); \ + ClassName(const ClassName&); \ + ClassName& operator=(ClassName&); \ + ClassName& operator=(const ClassName&); +#endif + +/* Define DISTRHO_DECLARE_NON_COPY_STRUCT */ +#ifdef DISTRHO_PROPER_CPP11_SUPPORT +# define DISTRHO_DECLARE_NON_COPY_STRUCT(StructName) \ + StructName(StructName&) = delete; \ + StructName(const StructName&) = delete; \ + StructName& operator=(StructName&) = delete; \ + StructName& operator=(const StructName&) = delete; +#else +# define DISTRHO_DECLARE_NON_COPY_STRUCT(StructName) +#endif + +/* Define DISTRHO_PREVENT_HEAP_ALLOCATION */ +#ifdef DISTRHO_PROPER_CPP11_SUPPORT +# define DISTRHO_PREVENT_HEAP_ALLOCATION \ +private: \ + static void* operator new(size_t) = delete; \ + static void operator delete(void*) = delete; +#else +# define DISTRHO_PREVENT_HEAP_ALLOCATION \ +private: \ + static void* operator new(size_t); \ + static void operator delete(void*); +#endif + +/* Define namespace */ +#ifndef DISTRHO_NAMESPACE +# define DISTRHO_NAMESPACE DISTRHO +#endif +#define START_NAMESPACE_DISTRHO namespace DISTRHO_NAMESPACE { +#define END_NAMESPACE_DISTRHO } +#define USE_NAMESPACE_DISTRHO using namespace DISTRHO_NAMESPACE; + +/* Useful typedefs */ +typedef unsigned char uchar; +typedef unsigned short int ushort; +typedef unsigned int uint; +typedef unsigned long int ulong; + +#endif // DISTRHO_DEFINES_H_INCLUDED diff --git a/dpf/distrho/src/DistrhoPlugin.cpp b/dpf/distrho/src/DistrhoPlugin.cpp new file mode 100644 index 0000000..aed9784 --- /dev/null +++ b/dpf/distrho/src/DistrhoPlugin.cpp @@ -0,0 +1,141 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "DistrhoPluginInternal.hpp" + +START_NAMESPACE_DISTRHO + +/* ------------------------------------------------------------------------------------------------------------ + * Static data, see DistrhoPluginInternal.hpp */ + +uint32_t d_lastBufferSize = 0; +double d_lastSampleRate = 0.0; + +/* ------------------------------------------------------------------------------------------------------------ + * Static fallback data, see DistrhoPluginInternal.hpp */ + +const String PluginExporter::sFallbackString; +const AudioPort PluginExporter::sFallbackAudioPort; +const ParameterRanges PluginExporter::sFallbackRanges; + +/* ------------------------------------------------------------------------------------------------------------ + * Plugin */ + +Plugin::Plugin(uint32_t parameterCount, uint32_t programCount, uint32_t stateCount) + : pData(new PrivateData()) +{ +#if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + pData->audioPorts = new AudioPort[DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS]; +#endif + + if (parameterCount > 0) + { + pData->parameterCount = parameterCount; + pData->parameters = new Parameter[parameterCount]; + } + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + if (programCount > 0) + { + pData->programCount = programCount; + pData->programNames = new String[programCount]; + } +#else + DISTRHO_SAFE_ASSERT(programCount == 0); +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + if (stateCount > 0) + { + pData->stateCount = stateCount; + pData->stateKeys = new String[stateCount]; + pData->stateDefValues = new String[stateCount]; + } +#else + DISTRHO_SAFE_ASSERT(stateCount == 0); +#endif +} + +Plugin::~Plugin() +{ + delete pData; +} + +/* ------------------------------------------------------------------------------------------------------------ + * Host state */ + +uint32_t Plugin::getBufferSize() const noexcept +{ + return pData->bufferSize; +} + +double Plugin::getSampleRate() const noexcept +{ + return pData->sampleRate; +} + +#if DISTRHO_PLUGIN_WANT_TIMEPOS +const TimePosition& Plugin::getTimePosition() const noexcept +{ + return pData->timePosition; +} +#endif + +#if DISTRHO_PLUGIN_WANT_LATENCY +void Plugin::setLatency(uint32_t frames) noexcept +{ + pData->latency = frames; +} +#endif + +#if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT +bool Plugin::writeMidiEvent(const MidiEvent& /*midiEvent*/) noexcept +{ + // TODO + return false; +} +#endif + +/* ------------------------------------------------------------------------------------------------------------ + * Init */ + +void Plugin::initAudioPort(bool input, uint32_t index, AudioPort& port) +{ + if (port.hints & kAudioPortIsCV) + { + port.name = input ? "CV Input " : "CV Output "; + port.name += String(index+1); + port.symbol = input ? "cv_in_" : "cv_out_"; + port.symbol += String(index+1); + } + else + { + port.name = input ? "Audio Input " : "Audio Output "; + port.name += String(index+1); + port.symbol = input ? "audio_in_" : "audio_out_"; + port.symbol += String(index+1); + } +} + +/* ------------------------------------------------------------------------------------------------------------ + * Callbacks (optional) */ + +void Plugin::bufferSizeChanged(uint32_t) {} +void Plugin::sampleRateChanged(double) {} + +// ----------------------------------------------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO diff --git a/dpf/distrho/src/DistrhoPluginCarla.cpp b/dpf/distrho/src/DistrhoPluginCarla.cpp new file mode 100644 index 0000000..e16436b --- /dev/null +++ b/dpf/distrho/src/DistrhoPluginCarla.cpp @@ -0,0 +1,480 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * This program 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. + * + * 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 Lesser General Public License for more details. + * + * For a full copy of the license see the LGPL.txt file + */ + +#include "DistrhoPluginInternal.hpp" + +#if DISTRHO_PLUGIN_HAS_UI +# include "DistrhoUIInternal.hpp" +#endif + +#include "CarlaNative.hpp" + +// ----------------------------------------------------------------------- + +START_NAMESPACE_DISTRHO + +#if DISTRHO_PLUGIN_HAS_UI +// ----------------------------------------------------------------------- +// Carla UI + +#if ! DISTRHO_PLUGIN_WANT_STATE +static const setStateFunc setStateCallback = nullptr; +#endif +#if ! DISTRHO_PLUGIN_IS_SYNTH +static const sendNoteFunc sendNoteCallback = nullptr; +#endif + +class UICarla +{ +public: + UICarla(const NativeHostDescriptor* const host, PluginExporter* const plugin) + : fHost(host), + fPlugin(plugin), + fUI(this, 0, editParameterCallback, setParameterCallback, setStateCallback, sendNoteCallback, setSizeCallback, plugin->getInstancePointer()) + { + fUI.setWindowTitle(host->uiName); + + if (host->uiParentId != 0) + fUI.setWindowTransientWinId(host->uiParentId); + } + + ~UICarla() + { + fUI.quit(); + } + + // --------------------------------------------- + + void carla_show(const bool yesNo) + { + fUI.setWindowVisible(yesNo); + } + + bool carla_idle() + { + return fUI.idle(); + } + + void carla_setParameterValue(const uint32_t index, const float value) + { + fUI.parameterChanged(index, value); + } + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + void carla_setMidiProgram(const uint32_t realProgram) + { + fUI.programLoaded(realProgram); + } +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + void carla_setCustomData(const char* const key, const char* const value) + { + fUI.stateChanged(key, value); + } +#endif + + void carla_setUiTitle(const char* const uiTitle) + { + fUI.setWindowTitle(uiTitle); + } + + // --------------------------------------------- + +protected: + void handleEditParameter(const uint32_t, const bool) + { + // TODO + } + + void handleSetParameterValue(const uint32_t rindex, const float value) + { + fHost->ui_parameter_changed(fHost->handle, rindex, value); + } + + void handleSetState(const char* const key, const char* const value) + { + fHost->ui_custom_data_changed(fHost->handle, key, value); + } + + void handleSendNote(const uint8_t, const uint8_t, const uint8_t) + { + // TODO + } + + void handleSetSize(const uint width, const uint height) + { + fUI.setWindowSize(width, height); + } + + // --------------------------------------------- + +private: + // Plugin stuff + const NativeHostDescriptor* const fHost; + PluginExporter* const fPlugin; + + // UI + UIExporter fUI; + + // --------------------------------------------- + // Callbacks + + #define handlePtr ((UICarla*)ptr) + + static void editParameterCallback(void* ptr, uint32_t index, bool started) + { + handlePtr->handleEditParameter(index, started); + } + + static void setParameterCallback(void* ptr, uint32_t rindex, float value) + { + handlePtr->handleSetParameterValue(rindex, value); + } + +#if DISTRHO_PLUGIN_WANT_STATE + static void setStateCallback(void* ptr, const char* key, const char* value) + { + handlePtr->handleSetState(key, value); + } +#endif + +#if DISTRHO_PLUGIN_IS_SYNTH + static void sendNoteCallback(void* ptr, uint8_t channel, uint8_t note, uint8_t velocity) + { + handlePtr->handleSendNote(channel, note, velocity); + } +#endif + + static void setSizeCallback(void* ptr, uint width, uint height) + { + handlePtr->handleSetSize(width, height); + } + + #undef handlePtr + + CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UICarla) +}; +#endif // DISTRHO_PLUGIN_HAS_UI + +// ----------------------------------------------------------------------- +// Carla Plugin + +class PluginCarla : public NativePluginClass +{ +public: + PluginCarla(const NativeHostDescriptor* const host) + : NativePluginClass(host) + { +#if DISTRHO_PLUGIN_HAS_UI + fUiPtr = nullptr; +#endif + } + + ~PluginCarla() override + { +#if DISTRHO_PLUGIN_HAS_UI + if (fUiPtr != nullptr) + { + delete fUiPtr; + fUiPtr = nullptr; + } +#endif + } + +protected: + // ------------------------------------------------------------------- + // Plugin parameter calls + + uint32_t getParameterCount() const override + { + return fPlugin.getParameterCount(); + } + + const NativeParameter* getParameterInfo(const uint32_t index) const override + { + CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(), nullptr); + + static NativeParameter param; + + param.scalePointCount = 0; + param.scalePoints = nullptr; + + { + int nativeParamHints = ::NATIVE_PARAMETER_IS_ENABLED; + const uint32_t paramHints = fPlugin.getParameterHints(index); + + if (paramHints & kParameterIsAutomable) + nativeParamHints |= ::NATIVE_PARAMETER_IS_AUTOMABLE; + if (paramHints & kParameterIsBoolean) + nativeParamHints |= ::NATIVE_PARAMETER_IS_BOOLEAN; + if (paramHints & kParameterIsInteger) + nativeParamHints |= ::NATIVE_PARAMETER_IS_INTEGER; + if (paramHints & kParameterIsLogarithmic) + nativeParamHints |= ::NATIVE_PARAMETER_IS_LOGARITHMIC; + if (paramHints & kParameterIsOutput) + nativeParamHints |= ::NATIVE_PARAMETER_IS_OUTPUT; + + param.hints = static_cast(nativeParamHints); + } + + param.name = fPlugin.getParameterName(index); + param.unit = fPlugin.getParameterUnit(index); + + { + const ParameterRanges& ranges(fPlugin.getParameterRanges(index)); + + param.ranges.def = ranges.def; + param.ranges.min = ranges.min; + param.ranges.max = ranges.max; + } + + return ¶m; + } + + float getParameterValue(const uint32_t index) const override + { + CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(), 0.0f); + + return fPlugin.getParameterValue(index); + } + + // ------------------------------------------------------------------- + // Plugin midi-program calls + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + uint32_t getMidiProgramCount() const override + { + return fPlugin.getProgramCount(); + } + + const NativeMidiProgram* getMidiProgramInfo(const uint32_t index) const override + { + CARLA_SAFE_ASSERT_RETURN(index < getMidiProgramCount(), nullptr); + + static NativeMidiProgram midiProgram; + + midiProgram.bank = index / 128; + midiProgram.program = index % 128; + midiProgram.name = fPlugin.getProgramName(index); + + return &midiProgram; + } +#endif + + // ------------------------------------------------------------------- + // Plugin state calls + + void setParameterValue(const uint32_t index, const float value) override + { + CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(),); + + fPlugin.setParameterValue(index, value); + } + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + void setMidiProgram(const uint8_t, const uint32_t bank, const uint32_t program) override + { + const uint32_t realProgram(bank * 128 + program); + + CARLA_SAFE_ASSERT_RETURN(realProgram < getMidiProgramCount(),); + + fPlugin.loadProgram(realProgram); + } +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + void setCustomData(const char* const key, const char* const value) override + { + CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); + CARLA_SAFE_ASSERT_RETURN(value != nullptr,); + + fPlugin.setState(key, value); + } +#endif + + // ------------------------------------------------------------------- + // Plugin process calls + + void activate() override + { + fPlugin.activate(); + } + + void deactivate() override + { + fPlugin.deactivate(); + } + +#if DISTRHO_PLUGIN_IS_SYNTH + void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) override + { + MidiEvent realMidiEvents[midiEventCount]; + + for (uint32_t i=0; i < midiEventCount; ++i) + { + const NativeMidiEvent& midiEvent(midiEvents[i]); + MidiEvent& realMidiEvent(realMidiEvents[i]); + + realMidiEvent.frame = midiEvent.time; + realMidiEvent.size = midiEvent.size; + + uint8_t j=0; + for (; j(inBuffer), outBuffer, frames, realMidiEvents, midiEventCount); + } +#else + void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const, const uint32_t) override + { + fPlugin.run(const_cast(inBuffer), outBuffer, frames); + } +#endif + + // ------------------------------------------------------------------- + // Plugin UI calls + +#if DISTRHO_PLUGIN_HAS_UI + void uiShow(const bool show) override + { + if (show) + { + createUiIfNeeded(); + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); + + fUiPtr->carla_show(show); + } + else if (fUiPtr != nullptr) + { + delete fUiPtr; + fUiPtr = nullptr; + } + } + + void uiIdle() override + { + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); + + if (! fUiPtr->carla_idle()) + { + uiClosed(); + + delete fUiPtr; + fUiPtr = nullptr; + } + } + + void uiSetParameterValue(const uint32_t index, const float value) override + { + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); + CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(),); + + fUiPtr->carla_setParameterValue(index, value); + } + +# if DISTRHO_PLUGIN_WANT_PROGRAMS + void uiSetMidiProgram(const uint8_t, const uint32_t bank, const uint32_t program) override + { + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); + + const uint32_t realProgram(bank * 128 + program); + + CARLA_SAFE_ASSERT_RETURN(realProgram < getMidiProgramCount(),); + + fUiPtr->carla_setMidiProgram(realProgram); + } +# endif + +# if DISTRHO_PLUGIN_WANT_STATE + void uiSetCustomData(const char* const key, const char* const value) override + { + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); + CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); + CARLA_SAFE_ASSERT_RETURN(value != nullptr,); + + fUiPtr->carla_setCustomData(key, value); + } +# endif +#endif + + // ------------------------------------------------------------------- + // Plugin dispatcher calls + + void bufferSizeChanged(const uint32_t bufferSize) override + { + fPlugin.setBufferSize(bufferSize, true); + } + + void sampleRateChanged(const double sampleRate) override + { + fPlugin.setSampleRate(sampleRate, true); + } + +#if DISTRHO_PLUGIN_HAS_UI + void uiNameChanged(const char* const uiName) override + { + CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); + + fUiPtr->carla_setUiTitle(uiName); + } +#endif + + // ------------------------------------------------------------------- + +private: + PluginExporter fPlugin; + +#if DISTRHO_PLUGIN_HAS_UI + // UI + UICarla* fUiPtr; + + void createUiIfNeeded() + { + if (fUiPtr == nullptr) + { + d_lastUiSampleRate = getSampleRate(); + fUiPtr = new UICarla(getHostHandle(), &fPlugin); + } + } +#endif + + CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginCarla) + + // ------------------------------------------------------------------- + +public: + static NativePluginHandle _instantiate(const NativeHostDescriptor* host) + { + d_lastBufferSize = host->get_buffer_size(host->handle); + d_lastSampleRate = host->get_sample_rate(host->handle); + return new PluginCarla(host); + } + + static void _cleanup(NativePluginHandle handle) + { + delete (PluginCarla*)handle; + } +}; + +END_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- diff --git a/dpf/distrho/src/DistrhoPluginChecks.h b/dpf/distrho/src/DistrhoPluginChecks.h new file mode 100644 index 0000000..eb7cc63 --- /dev/null +++ b/dpf/distrho/src/DistrhoPluginChecks.h @@ -0,0 +1,109 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_PLUGIN_CHECKS_H_INCLUDED +#define DISTRHO_PLUGIN_CHECKS_H_INCLUDED + +#include "DistrhoPluginInfo.h" + +// ----------------------------------------------------------------------- +// Check if all required macros are defined + +#ifndef DISTRHO_PLUGIN_NAME +# error DISTRHO_PLUGIN_NAME undefined! +#endif + +#ifndef DISTRHO_PLUGIN_NUM_INPUTS +# error DISTRHO_PLUGIN_NUM_INPUTS undefined! +#endif + +#ifndef DISTRHO_PLUGIN_NUM_OUTPUTS +# error DISTRHO_PLUGIN_NUM_OUTPUTS undefined! +#endif + +#ifndef DISTRHO_PLUGIN_URI +# error DISTRHO_PLUGIN_URI undefined! +#endif + +// ----------------------------------------------------------------------- +// Define optional macros if not done yet + +#ifndef DISTRHO_PLUGIN_HAS_UI +# define DISTRHO_PLUGIN_HAS_UI 0 +#endif + +#ifndef DISTRHO_PLUGIN_IS_RT_SAFE +# define DISTRHO_PLUGIN_IS_RT_SAFE 0 +#endif + +#ifndef DISTRHO_PLUGIN_IS_SYNTH +# define DISTRHO_PLUGIN_IS_SYNTH 0 +#endif + +#ifndef DISTRHO_PLUGIN_WANT_DIRECT_ACCESS +# define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 0 +#endif + +#ifndef DISTRHO_PLUGIN_WANT_LATENCY +# define DISTRHO_PLUGIN_WANT_LATENCY 0 +#endif + +#ifndef DISTRHO_PLUGIN_WANT_MIDI_OUTPUT +# define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 0 +#endif + +#ifndef DISTRHO_PLUGIN_WANT_PROGRAMS +# define DISTRHO_PLUGIN_WANT_PROGRAMS 0 +#endif + +#ifndef DISTRHO_PLUGIN_WANT_STATE +# define DISTRHO_PLUGIN_WANT_STATE 0 +#endif + +#ifndef DISTRHO_PLUGIN_WANT_TIMEPOS +# define DISTRHO_PLUGIN_WANT_TIMEPOS 0 +#endif + +#ifndef DISTRHO_UI_USE_NANOVG +# define DISTRHO_UI_USE_NANOVG 0 +#endif + +// ----------------------------------------------------------------------- +// Define DISTRHO_UI_URI if needed + +#ifndef DISTRHO_UI_URI +# define DISTRHO_UI_URI DISTRHO_PLUGIN_URI "#UI" +#endif + +// ----------------------------------------------------------------------- +// Test if synth has audio outputs + +#if DISTRHO_PLUGIN_IS_SYNTH && DISTRHO_PLUGIN_NUM_OUTPUTS == 0 +# error Synths need audio output to work! +#endif + +// ----------------------------------------------------------------------- +// Enable MIDI input if synth, test if midi-input disabled when synth + +#ifndef DISTRHO_PLUGIN_WANT_MIDI_INPUT +# define DISTRHO_PLUGIN_WANT_MIDI_INPUT DISTRHO_PLUGIN_IS_SYNTH +#elif DISTRHO_PLUGIN_IS_SYNTH && ! DISTRHO_PLUGIN_WANT_MIDI_INPUT +# error Synths need MIDI input to work! +#endif + +// ----------------------------------------------------------------------- + +#endif // DISTRHO_PLUGIN_CHECKS_H_INCLUDED diff --git a/dpf/distrho/src/DistrhoPluginInternal.hpp b/dpf/distrho/src/DistrhoPluginInternal.hpp new file mode 100644 index 0000000..da8abd4 --- /dev/null +++ b/dpf/distrho/src/DistrhoPluginInternal.hpp @@ -0,0 +1,553 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_PLUGIN_INTERNAL_HPP_INCLUDED +#define DISTRHO_PLUGIN_INTERNAL_HPP_INCLUDED + +#include "../DistrhoPlugin.hpp" + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- +// Maxmimum values + +static const uint32_t kMaxMidiEvents = 512; + +// ----------------------------------------------------------------------- +// Static data, see DistrhoPlugin.cpp + +extern uint32_t d_lastBufferSize; +extern double d_lastSampleRate; + +// ----------------------------------------------------------------------- +// Plugin private data + +struct Plugin::PrivateData { + bool isProcessing; + +#if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + AudioPort* audioPorts; +#endif + + uint32_t parameterCount; + Parameter* parameters; + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + uint32_t programCount; + String* programNames; +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + uint32_t stateCount; + String* stateKeys; + String* stateDefValues; +#endif + +#if DISTRHO_PLUGIN_WANT_LATENCY + uint32_t latency; +#endif + +#if DISTRHO_PLUGIN_WANT_TIMEPOS + TimePosition timePosition; +#endif + + uint32_t bufferSize; + double sampleRate; + + PrivateData() noexcept + : isProcessing(false), +#if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + audioPorts(nullptr), +#endif + parameterCount(0), + parameters(nullptr), +#if DISTRHO_PLUGIN_WANT_PROGRAMS + programCount(0), + programNames(nullptr), +#endif +#if DISTRHO_PLUGIN_WANT_STATE + stateCount(0), + stateKeys(nullptr), + stateDefValues(nullptr), +#endif +#if DISTRHO_PLUGIN_WANT_LATENCY + latency(0), +#endif + bufferSize(d_lastBufferSize), + sampleRate(d_lastSampleRate) + { + DISTRHO_SAFE_ASSERT(bufferSize != 0); + DISTRHO_SAFE_ASSERT(d_isNotZero(sampleRate)); + } + + ~PrivateData() noexcept + { +#if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + if (audioPorts != nullptr) + { + delete[] audioPorts; + audioPorts = nullptr; + } +#endif + + if (parameters != nullptr) + { + delete[] parameters; + parameters = nullptr; + } + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + if (programNames != nullptr) + { + delete[] programNames; + programNames = nullptr; + } +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + if (stateKeys != nullptr) + { + delete[] stateKeys; + stateKeys = nullptr; + } + + if (stateDefValues != nullptr) + { + delete[] stateDefValues; + stateDefValues = nullptr; + } +#endif + } +}; + +// ----------------------------------------------------------------------- +// Plugin exporter class + +class PluginExporter +{ +public: + PluginExporter() + : fPlugin(createPlugin()), + fData((fPlugin != nullptr) ? fPlugin->pData : nullptr), + fIsActive(false) + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); + +#if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + { + uint32_t j=0; +# if DISTRHO_PLUGIN_NUM_INPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; ++i, ++j) + fPlugin->initAudioPort(true, i, fData->audioPorts[j]); +# endif +# if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i, ++j) + fPlugin->initAudioPort(false, i, fData->audioPorts[j]); +# endif + } +#endif + + for (uint32_t i=0, count=fData->parameterCount; i < count; ++i) + fPlugin->initParameter(i, fData->parameters[i]); + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + for (uint32_t i=0, count=fData->programCount; i < count; ++i) + fPlugin->initProgramName(i, fData->programNames[i]); +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + for (uint32_t i=0, count=fData->stateCount; i < count; ++i) + fPlugin->initState(i, fData->stateKeys[i], fData->stateDefValues[i]); +#endif + } + + ~PluginExporter() + { + delete fPlugin; + } + + // ------------------------------------------------------------------- + + const char* getName() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, ""); + + return fPlugin->getName(); + } + + const char* getLabel() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, ""); + + return fPlugin->getLabel(); + } + + const char* getMaker() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, ""); + + return fPlugin->getMaker(); + } + + const char* getLicense() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, ""); + + return fPlugin->getLicense(); + } + + uint32_t getVersion() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, 0); + + return fPlugin->getVersion(); + } + + long getUniqueId() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, 0); + + return fPlugin->getUniqueId(); + } + + void* getInstancePointer() const noexcept + { + return fPlugin; + } + + // ------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_WANT_LATENCY + uint32_t getLatency() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, 0); + + return fData->latency; + } +#endif + +#if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + const AudioPort& getAudioPort(const bool input, const uint32_t index) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, sFallbackAudioPort); + + if (input) + { +# if DISTRHO_PLUGIN_NUM_INPUTS > 0 + DISTRHO_SAFE_ASSERT_RETURN(index < DISTRHO_PLUGIN_NUM_INPUTS, sFallbackAudioPort); +# endif + } + else + { +# if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + DISTRHO_SAFE_ASSERT_RETURN(index < DISTRHO_PLUGIN_NUM_OUTPUTS, sFallbackAudioPort); +# endif + } + + return fData->audioPorts[index + (input ? 0 : DISTRHO_PLUGIN_NUM_INPUTS)]; + } +#endif + + uint32_t getParameterCount() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, 0); + + return fData->parameterCount; + } + + uint32_t getParameterHints(const uint32_t index) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, 0x0); + + return fData->parameters[index].hints; + } + + bool isParameterOutput(const uint32_t index) const noexcept + { + return (getParameterHints(index) & kParameterIsOutput); + } + + const String& getParameterName(const uint32_t index) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, sFallbackString); + + return fData->parameters[index].name; + } + + const String& getParameterSymbol(const uint32_t index) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, sFallbackString); + + return fData->parameters[index].symbol; + } + + const String& getParameterUnit(const uint32_t index) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, sFallbackString); + + return fData->parameters[index].unit; + } + + const ParameterRanges& getParameterRanges(const uint32_t index) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, sFallbackRanges); + + return fData->parameters[index].ranges; + } + + float getParameterValue(const uint32_t index) const + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, 0.0f); + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, 0.0f); + + return fPlugin->getParameterValue(index); + } + + void setParameterValue(const uint32_t index, const float value) + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount,); + + fPlugin->setParameterValue(index, value); + } + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + uint32_t getProgramCount() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, 0); + + return fData->programCount; + } + + const String& getProgramName(const uint32_t index) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->programCount, sFallbackString); + + return fData->programNames[index]; + } + + void loadProgram(const uint32_t index) + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->programCount,); + + fPlugin->loadProgram(index); + } +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + uint32_t getStateCount() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, 0); + + return fData->stateCount; + } + + const String& getStateKey(const uint32_t index) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->stateCount, sFallbackString); + + return fData->stateKeys[index]; + } + + const String& getStateDefaultValue(const uint32_t index) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->stateCount, sFallbackString); + + return fData->stateDefValues[index]; + } + + void setState(const char* const key, const char* const value) + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); + DISTRHO_SAFE_ASSERT_RETURN(value != nullptr,); + + fPlugin->setState(key, value); + } + + bool wantStateKey(const char* const key) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, false); + DISTRHO_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0', false); + + for (uint32_t i=0; i < fData->stateCount; ++i) + { + if (fData->stateKeys[i] == key) + return true; + } + + return false; + } +#endif + +#if DISTRHO_PLUGIN_WANT_TIMEPOS + void setTimePosition(const TimePosition& timePosition) noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); + + std::memcpy(&fData->timePosition, &timePosition, sizeof(TimePosition)); + } +#endif + + // ------------------------------------------------------------------- + + bool isActive() const noexcept + { + return fIsActive; + } + + void activate() + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(! fIsActive,); + + fIsActive = true; + fPlugin->activate(); + } + + void deactivate() + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fIsActive,); + + fIsActive = false; + fPlugin->deactivate(); + } + + void deactivateIfNeeded() + { + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); + + if (fIsActive) + { + fIsActive = false; + fPlugin->deactivate(); + } + } + +#if DISTRHO_PLUGIN_IS_SYNTH + void run(const float** const inputs, float** const outputs, const uint32_t frames, + const MidiEvent* const midiEvents, const uint32_t midiEventCount) + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); + + if (! fIsActive) + { + fIsActive = true; + fPlugin->activate(); + } + + fData->isProcessing = true; + fPlugin->run(inputs, outputs, frames, midiEvents, midiEventCount); + fData->isProcessing = false; + } +#else + void run(const float** const inputs, float** const outputs, const uint32_t frames) + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); + + if (! fIsActive) + { + fIsActive = true; + fPlugin->activate(); + } + + fData->isProcessing = true; + fPlugin->run(inputs, outputs, frames); + fData->isProcessing = false; + } +#endif + + // ------------------------------------------------------------------- + + uint32_t getBufferSize() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, 0); + return fData->bufferSize; + } + + double getSampleRate() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, 0.0); + return fData->sampleRate; + } + + void setBufferSize(const uint32_t bufferSize, const bool doCallback = false) + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); + DISTRHO_SAFE_ASSERT(bufferSize >= 2); + + if (fData->bufferSize == bufferSize) + return; + + fData->bufferSize = bufferSize; + + if (doCallback) + { + if (fIsActive) fPlugin->deactivate(); + fPlugin->bufferSizeChanged(bufferSize); + if (fIsActive) fPlugin->activate(); + } + } + + void setSampleRate(const double sampleRate, const bool doCallback = false) + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); + DISTRHO_SAFE_ASSERT(sampleRate > 0.0); + + if (d_isEqual(fData->sampleRate, sampleRate)) + return; + + fData->sampleRate = sampleRate; + + if (doCallback) + { + if (fIsActive) fPlugin->deactivate(); + fPlugin->sampleRateChanged(sampleRate); + if (fIsActive) fPlugin->activate(); + } + } + +private: + // ------------------------------------------------------------------- + // Plugin and DistrhoPlugin data + + Plugin* const fPlugin; + Plugin::PrivateData* const fData; + bool fIsActive; + + // ------------------------------------------------------------------- + // Static fallback data, see DistrhoPlugin.cpp + + static const String sFallbackString; + static const AudioPort sFallbackAudioPort; + static const ParameterRanges sFallbackRanges; + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginExporter) + DISTRHO_PREVENT_HEAP_ALLOCATION +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +#endif // DISTRHO_PLUGIN_INTERNAL_HPP_INCLUDED diff --git a/dpf/distrho/src/DistrhoPluginJack.cpp b/dpf/distrho/src/DistrhoPluginJack.cpp new file mode 100644 index 0000000..7aa97cb --- /dev/null +++ b/dpf/distrho/src/DistrhoPluginJack.cpp @@ -0,0 +1,523 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * This program 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. + * + * 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 Lesser General Public License for more details. + * + * For a full copy of the license see the LGPL.txt file + */ + +#include "DistrhoPluginInternal.hpp" + +#if DISTRHO_PLUGIN_HAS_UI && ! defined(HAVE_DGL) +# undef DISTRHO_PLUGIN_HAS_UI +# define DISTRHO_PLUGIN_HAS_UI 0 +#endif + +#if DISTRHO_PLUGIN_HAS_UI +# include "DistrhoUIInternal.hpp" +#else +# include "../extra/Sleep.hpp" +#endif + +#include "jack/jack.h" +#include "jack/midiport.h" +#include "jack/transport.h" + +#ifndef DISTRHO_OS_WINDOWS +# include +#endif + +// ----------------------------------------------------------------------- + +START_NAMESPACE_DISTRHO + +#if DISTRHO_PLUGIN_HAS_UI && ! DISTRHO_PLUGIN_WANT_STATE +static const setStateFunc setStateCallback = nullptr; +#endif + +// ----------------------------------------------------------------------- + +static volatile bool gCloseSignalReceived = false; + +#ifdef DISTRHO_OS_WINDOWS +static BOOL WINAPI winSignalHandler(DWORD dwCtrlType) noexcept +{ + if (dwCtrlType == CTRL_C_EVENT) + { + gCloseSignalReceived = true; + return TRUE; + } + return FALSE; +} + +static void initSignalHandler() +{ + SetConsoleCtrlHandler(winSignalHandler, TRUE); +} +#else +static void closeSignalHandler(int) noexcept +{ + gCloseSignalReceived = true; +} + +static void initSignalHandler() +{ + struct sigaction sint; + struct sigaction sterm; + + sint.sa_handler = closeSignalHandler; + sint.sa_flags = SA_RESTART; + sint.sa_restorer = nullptr; + sigemptyset(&sint.sa_mask); + sigaction(SIGINT, &sint, nullptr); + + sterm.sa_handler = closeSignalHandler; + sterm.sa_flags = SA_RESTART; + sterm.sa_restorer = nullptr; + sigemptyset(&sterm.sa_mask); + sigaction(SIGTERM, &sterm, nullptr); +} +#endif + +// ----------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_HAS_UI +class PluginJack : public IdleCallback +#else +class PluginJack +#endif +{ +public: + PluginJack(jack_client_t* const client) + : fPlugin(), +#if DISTRHO_PLUGIN_HAS_UI + fUI(this, 0, nullptr, setParameterValueCallback, setStateCallback, nullptr, setSizeCallback, fPlugin.getInstancePointer()), +#endif + fClient(client) + { + char strBuf[0xff+1]; + strBuf[0xff] = '\0'; + +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; ++i) + { + std::snprintf(strBuf, 0xff, "in%i", i+1); + fPortAudioIns[i] = jack_port_register(fClient, strBuf, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); + } +#endif + +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i) + { + std::snprintf(strBuf, 0xff, "out%i", i+1); + fPortAudioOuts[i] = jack_port_register(fClient, strBuf, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); + } +#endif + +#if DISTRHO_PLUGIN_IS_SYNTH + fPortMidiIn = jack_port_register(fClient, "midi-in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0); +#endif + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + if (fPlugin.getProgramCount() > 0) + { + fPlugin.loadProgram(0); +# if DISTRHO_PLUGIN_HAS_UI + fUI.programLoaded(0); +# endif + } +#endif + + if (const uint32_t count = fPlugin.getParameterCount()) + { + fLastOutputValues = new float[count]; + + for (uint32_t i=0; i < count; ++i) + { + if (fPlugin.isParameterOutput(i)) + { + fLastOutputValues[i] = fPlugin.getParameterValue(i); + } + else + { + fLastOutputValues[i] = 0.0f; +# if DISTRHO_PLUGIN_HAS_UI + fUI.parameterChanged(i, fPlugin.getParameterValue(i)); +# endif + } + } + } + else + { + fLastOutputValues = nullptr; + } + + jack_set_buffer_size_callback(fClient, jackBufferSizeCallback, this); + jack_set_sample_rate_callback(fClient, jackSampleRateCallback, this); + jack_set_process_callback(fClient, jackProcessCallback, this); + jack_on_shutdown(fClient, jackShutdownCallback, this); + + fPlugin.activate(); + + jack_activate(fClient); + +#if DISTRHO_PLUGIN_HAS_UI + if (const char* const name = jack_get_client_name(fClient)) + fUI.setWindowTitle(name); + else + fUI.setWindowTitle(fPlugin.getName()); + + fUI.exec(this); +#else + while (! gCloseSignalReceived) + d_sleep(1); +#endif + } + + ~PluginJack() + { + if (fClient == nullptr) + return; + + jack_deactivate(fClient); + + fPlugin.deactivate(); + +#if DISTRHO_PLUGIN_IS_SYNTH + jack_port_unregister(fClient, fPortMidiIn); + fPortMidiIn = nullptr; +#endif + +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; ++i) + { + jack_port_unregister(fClient, fPortAudioIns[i]); + fPortAudioIns[i] = nullptr; + } +#endif + +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i) + { + jack_port_unregister(fClient, fPortAudioOuts[i]); + fPortAudioOuts[i] = nullptr; + } +#endif + + jack_client_close(fClient); + } + + // ------------------------------------------------------------------- + +protected: +#if DISTRHO_PLUGIN_HAS_UI + void idleCallback() override + { + if (gCloseSignalReceived) + return fUI.quit(); + + float value; + + for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) + { + if (! fPlugin.isParameterOutput(i)) + continue; + + value = fPlugin.getParameterValue(i); + + if (fLastOutputValues[i] == value) + continue; + + fLastOutputValues[i] = value; + fUI.parameterChanged(i, value); + } + + fUI.exec_idle(); + } +#endif + + void jackBufferSize(const jack_nframes_t nframes) + { + fPlugin.setBufferSize(nframes, true); + } + + void jackSampleRate(const jack_nframes_t nframes) + { + fPlugin.setSampleRate(nframes, true); + } + + void jackProcess(const jack_nframes_t nframes) + { +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + const float* audioIns[DISTRHO_PLUGIN_NUM_INPUTS]; + + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; ++i) + audioIns[i] = (const float*)jack_port_get_buffer(fPortAudioIns[i], nframes); +#else + static const float** audioIns = nullptr; +#endif + +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + float* audioOuts[DISTRHO_PLUGIN_NUM_OUTPUTS]; + + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i) + audioOuts[i] = (float*)jack_port_get_buffer(fPortAudioOuts[i], nframes); +#else + static float** audioOuts = nullptr; +#endif + +#if DISTRHO_PLUGIN_WANT_TIMEPOS + jack_position_t pos; + fTimePosition.playing = (jack_transport_query(fClient, &pos) == JackTransportRolling); + + if (pos.unique_1 == pos.unique_2) + { + fTimePosition.frame = pos.frame; + + if (pos.valid & JackTransportBBT) + { + fTimePosition.bbt.valid = true; + + fTimePosition.bbt.bar = pos.bar; + fTimePosition.bbt.beat = pos.beat; + fTimePosition.bbt.tick = pos.tick; + fTimePosition.bbt.barStartTick = pos.bar_start_tick; + + fTimePosition.bbt.beatsPerBar = pos.beats_per_bar; + fTimePosition.bbt.beatType = pos.beat_type; + + fTimePosition.bbt.ticksPerBeat = pos.ticks_per_beat; + fTimePosition.bbt.beatsPerMinute = pos.beats_per_minute; + } + else + fTimePosition.bbt.valid = false; + } + else + { + fTimePosition.bbt.valid = false; + fTimePosition.frame = 0; + } + + fPlugin.setTimePosition(fTimePosition); +#endif + +#if DISTRHO_PLUGIN_IS_SYNTH + void* const midiBuf = jack_port_get_buffer(fPortMidiIn, nframes); + + if (const uint32_t eventCount = jack_midi_get_event_count(midiBuf)) + { + uint32_t midiEventCount = 0; + MidiEvent midiEvents[eventCount]; + + jack_midi_event_t jevent; + + for (uint32_t i=0; i < eventCount; ++i) + { + if (jack_midi_event_get(&jevent, midiBuf, i) != 0) + break; + + MidiEvent& midiEvent(midiEvents[midiEventCount++]); + + midiEvent.frame = jevent.time; + midiEvent.size = jevent.size; + + if (midiEvent.size > MidiEvent::kDataSize) + midiEvent.dataExt = jevent.buffer; + else + std::memcpy(midiEvent.data, jevent.buffer, midiEvent.size); + } + + fPlugin.run(audioIns, audioOuts, nframes, midiEvents, midiEventCount); + } + else + { + fPlugin.run(audioIns, audioOuts, nframes, nullptr, 0); + } +#else + fPlugin.run(audioIns, audioOuts, nframes); +#endif + } + + void jackShutdown() + { + d_stderr("jack has shutdown, quitting now..."); + fClient = nullptr; +#if DISTRHO_PLUGIN_HAS_UI + fUI.quit(); +#endif + } + + // ------------------------------------------------------------------- + + void setParameterValue(const uint32_t index, const float value) + { + fPlugin.setParameterValue(index, value); + } + +#if DISTRHO_PLUGIN_WANT_STATE + void setState(const char* const key, const char* const value) + { + fPlugin.setState(key, value); + } +#endif + +#if DISTRHO_PLUGIN_HAS_UI + void setSize(const uint width, const uint height) + { + fUI.setWindowSize(width, height); + } +#endif + + // ------------------------------------------------------------------- + +private: + PluginExporter fPlugin; +#if DISTRHO_PLUGIN_HAS_UI + UIExporter fUI; +#endif + + jack_client_t* fClient; + +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + jack_port_t* fPortAudioIns[DISTRHO_PLUGIN_NUM_INPUTS]; +#endif +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + jack_port_t* fPortAudioOuts[DISTRHO_PLUGIN_NUM_OUTPUTS]; +#endif +#if DISTRHO_PLUGIN_IS_SYNTH + jack_port_t* fPortMidiIn; +#endif +#if DISTRHO_PLUGIN_WANT_TIMEPOS + TimePosition fTimePosition; +#endif + + // Temporary data + float* fLastOutputValues; + + // ------------------------------------------------------------------- + // Callbacks + + #define uiPtr ((PluginJack*)ptr) + + static int jackBufferSizeCallback(jack_nframes_t nframes, void* ptr) + { + uiPtr->jackBufferSize(nframes); + return 0; + } + + static int jackSampleRateCallback(jack_nframes_t nframes, void* ptr) + { + uiPtr->jackSampleRate(nframes); + return 0; + } + + static int jackProcessCallback(jack_nframes_t nframes, void* ptr) + { + uiPtr->jackProcess(nframes); + return 0; + } + + static void jackShutdownCallback(void* ptr) + { + uiPtr->jackShutdown(); + } + + static void setParameterValueCallback(void* ptr, uint32_t index, float value) + { + uiPtr->setParameterValue(index, value); + } + +#if DISTRHO_PLUGIN_WANT_STATE + static void setStateCallback(void* ptr, const char* key, const char* value) + { + uiPtr->setState(key, value); + } +#endif + +#if DISTRHO_PLUGIN_HAS_UI + static void setSizeCallback(void* ptr, uint width, uint height) + { + uiPtr->setSize(width, height); + } +#endif + + #undef uiPtr +}; + +END_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- + +int main() +{ + USE_NAMESPACE_DISTRHO; + + jack_status_t status = jack_status_t(0x0); + jack_client_t* client = jack_client_open(DISTRHO_PLUGIN_NAME, JackNoStartServer, &status); + + if (client == nullptr) + { + String errorString; + + if (status & JackFailure) + errorString += "Overall operation failed;\n"; + if (status & JackInvalidOption) + errorString += "The operation contained an invalid or unsupported option;\n"; + if (status & JackNameNotUnique) + errorString += "The desired client name was not unique;\n"; + if (status & JackServerStarted) + errorString += "The JACK server was started as a result of this operation;\n"; + if (status & JackServerFailed) + errorString += "Unable to connect to the JACK server;\n"; + if (status & JackServerError) + errorString += "Communication error with the JACK server;\n"; + if (status & JackNoSuchClient) + errorString += "Requested client does not exist;\n"; + if (status & JackLoadFailure) + errorString += "Unable to load internal client;\n"; + if (status & JackInitFailure) + errorString += "Unable to initialize client;\n"; + if (status & JackShmFailure) + errorString += "Unable to access shared memory;\n"; + if (status & JackVersionError) + errorString += "Client's protocol version does not match;\n"; + if (status & JackBackendError) + errorString += "Backend Error;\n"; + if (status & JackClientZombie) + errorString += "Client is being shutdown against its will;\n"; + + if (errorString.isNotEmpty()) + { + errorString[errorString.length()-2] = '.'; + d_stderr("Failed to create jack client, reason was:\n%s", errorString.buffer()); + } + else + d_stderr("Failed to create jack client, cannot continue!"); + + return 1; + } + + USE_NAMESPACE_DISTRHO; + + initSignalHandler(); + + d_lastBufferSize = jack_get_buffer_size(client); + d_lastSampleRate = jack_get_sample_rate(client); +#if DISTRHO_PLUGIN_HAS_UI + d_lastUiSampleRate = d_lastSampleRate; +#endif + + const PluginJack p(client); + + return 0; +} + +// ----------------------------------------------------------------------- diff --git a/dpf/distrho/src/DistrhoPluginLADSPA+DSSI.cpp b/dpf/distrho/src/DistrhoPluginLADSPA+DSSI.cpp new file mode 100644 index 0000000..82399fc --- /dev/null +++ b/dpf/distrho/src/DistrhoPluginLADSPA+DSSI.cpp @@ -0,0 +1,711 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "DistrhoPluginInternal.hpp" + +#if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT +# error Cannot use MIDI Output with LADSPA or DSSI +#endif + +#ifdef DISTRHO_PLUGIN_TARGET_DSSI +# include "dssi/dssi.h" +#else +# include "ladspa/ladspa.h" +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT +# error Cannot use MIDI with LADSPA +# endif +# if DISTRHO_PLUGIN_WANT_STATE +# warning LADSPA cannot handle states +# endif +#endif + +#if DISTRHO_PLUGIN_WANT_TIMEPOS +# warning LADSPA/DSSI does not support TimePos +#endif + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- + +class PluginLadspaDssi +{ +public: + PluginLadspaDssi() + : fPortControls(nullptr), + fLastControlValues(nullptr) + { +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; ++i) + fPortAudioIns[i] = nullptr; +#else + fPortAudioIns = nullptr; +#endif + +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i) + fPortAudioOuts[i] = nullptr; +#else + fPortAudioOuts = nullptr; +#endif + + if (const uint32_t count = fPlugin.getParameterCount()) + { + fPortControls = new LADSPA_Data*[count]; + fLastControlValues = new LADSPA_Data[count]; + + for (uint32_t i=0; i < count; ++i) + { + fPortControls[i] = nullptr; + fLastControlValues[i] = fPlugin.getParameterValue(i); + } + } + else + { + fPortControls = nullptr; + fLastControlValues = nullptr; + } + +#if DISTRHO_PLUGIN_WANT_LATENCY + fPortLatency = nullptr; +#endif + } + + ~PluginLadspaDssi() noexcept + { + if (fPortControls != nullptr) + { + delete[] fPortControls; + fPortControls = nullptr; + } + + if (fLastControlValues != nullptr) + { + delete[] fLastControlValues; + fLastControlValues = nullptr; + } + } + + // ------------------------------------------------------------------- + + void ladspa_activate() + { + fPlugin.activate(); + } + + void ladspa_deactivate() + { + fPlugin.deactivate(); + } + + // ------------------------------------------------------------------- + + void ladspa_connect_port(const ulong port, LADSPA_Data* const dataLocation) noexcept + { + ulong index = 0; + +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + for (ulong i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; ++i) + { + if (port == index++) + { + fPortAudioIns[i] = dataLocation; + return; + } + } +#endif + +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + for (ulong i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i) + { + if (port == index++) + { + fPortAudioOuts[i] = dataLocation; + return; + } + } +#endif + +#if DISTRHO_PLUGIN_WANT_LATENCY + if (port == index++) + { + fPortLatency = dataLocation; + return; + } +#endif + + for (ulong i=0, count=fPlugin.getParameterCount(); i < count; ++i) + { + if (port == index++) + { + fPortControls[i] = dataLocation; + return; + } + } + } + + // ------------------------------------------------------------------- + +#ifdef DISTRHO_PLUGIN_TARGET_DSSI + void ladspa_run(const ulong sampleCount) + { + dssi_run_synth(sampleCount, nullptr, 0); + } + + void dssi_run_synth(const ulong sampleCount, snd_seq_event_t* const events, const ulong eventCount) +#else + void ladspa_run(const ulong sampleCount) +#endif + { + // pre-roll + if (sampleCount == 0) + return updateParameterOutputs(); + + // Check for updated parameters + float curValue; + + for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) + { + if (fPortControls[i] == nullptr) + continue; + + curValue = *fPortControls[i]; + + if (fLastControlValues[i] != curValue && ! fPlugin.isParameterOutput(i)) + { + fLastControlValues[i] = curValue; + fPlugin.setParameterValue(i, curValue); + } + } + +#if DISTRHO_PLUGIN_WANT_MIDI_INPUT + // Get MIDI Events + uint32_t midiEventCount = 0; + MidiEvent midiEvents[eventCount]; + + for (uint32_t i=0, j; i < eventCount; ++i) + { + const snd_seq_event_t& seqEvent(events[i]); + + // FIXME + if (seqEvent.data.note.channel > 0xF || seqEvent.data.control.channel > 0xF) + continue; + + switch (seqEvent.type) + { + case SND_SEQ_EVENT_NOTEOFF: + j = midiEventCount++; + midiEvents[j].frame = seqEvent.time.tick; + midiEvents[j].size = 3; + midiEvents[j].data[0] = 0x80 + seqEvent.data.note.channel; + midiEvents[j].data[1] = seqEvent.data.note.note; + midiEvents[j].data[2] = 0; + midiEvents[j].data[3] = 0; + break; + case SND_SEQ_EVENT_NOTEON: + j = midiEventCount++; + midiEvents[j].frame = seqEvent.time.tick; + midiEvents[j].size = 3; + midiEvents[j].data[0] = 0x90 + seqEvent.data.note.channel; + midiEvents[j].data[1] = seqEvent.data.note.note; + midiEvents[j].data[2] = seqEvent.data.note.velocity; + midiEvents[j].data[3] = 0; + break; + case SND_SEQ_EVENT_KEYPRESS: + j = midiEventCount++; + midiEvents[j].frame = seqEvent.time.tick; + midiEvents[j].size = 3; + midiEvents[j].data[0] = 0xA0 + seqEvent.data.note.channel; + midiEvents[j].data[1] = seqEvent.data.note.note; + midiEvents[j].data[2] = seqEvent.data.note.velocity; + midiEvents[j].data[3] = 0; + break; + case SND_SEQ_EVENT_CONTROLLER: + j = midiEventCount++; + midiEvents[j].frame = seqEvent.time.tick; + midiEvents[j].size = 3; + midiEvents[j].data[0] = 0xB0 + seqEvent.data.control.channel; + midiEvents[j].data[1] = seqEvent.data.control.param; + midiEvents[j].data[2] = seqEvent.data.control.value; + midiEvents[j].data[3] = 0; + break; + case SND_SEQ_EVENT_CHANPRESS: + j = midiEventCount++; + midiEvents[j].frame = seqEvent.time.tick; + midiEvents[j].size = 2; + midiEvents[j].data[0] = 0xD0 + seqEvent.data.control.channel; + midiEvents[j].data[1] = seqEvent.data.control.value; + midiEvents[j].data[2] = 0; + midiEvents[j].data[3] = 0; + break; +#if 0 // TODO + case SND_SEQ_EVENT_PITCHBEND: + j = midiEventCount++; + midiEvents[j].frame = seqEvent.time.tick; + midiEvents[j].size = 3; + midiEvents[j].data[0] = 0xE0 + seqEvent.data.control.channel; + midiEvents[j].data[1] = 0; + midiEvents[j].data[2] = 0; + midiEvents[j].data[3] = 0; + break; +#endif + } + } + + fPlugin.run(fPortAudioIns, fPortAudioOuts, sampleCount, midiEvents, midiEventCount); +#else + fPlugin.run(fPortAudioIns, fPortAudioOuts, sampleCount); +#endif + + updateParameterOutputs(); + +#if defined(DISTRHO_PLUGIN_TARGET_DSSI) && ! DISTRHO_PLUGIN_WANT_MIDI_INPUT + return; // unused + (void)events; (void)eventCount; +#endif + } + + // ------------------------------------------------------------------- + +#ifdef DISTRHO_PLUGIN_TARGET_DSSI +# if DISTRHO_PLUGIN_WANT_STATE + char* dssi_configure(const char* const key, const char* const value) + { + if (std::strncmp(key, DSSI_RESERVED_CONFIGURE_PREFIX, std::strlen(DSSI_RESERVED_CONFIGURE_PREFIX) == 0)) + return nullptr; + if (std::strncmp(key, DSSI_GLOBAL_CONFIGURE_PREFIX, std::strlen(DSSI_GLOBAL_CONFIGURE_PREFIX) == 0)) + return nullptr; + + fPlugin.setState(key, value); + return nullptr; + } +# endif + +# if DISTRHO_PLUGIN_WANT_PROGRAMS + const DSSI_Program_Descriptor* dssi_get_program(const ulong index) + { + if (index >= fPlugin.getProgramCount()) + return nullptr; + + static DSSI_Program_Descriptor desc; + + desc.Bank = index / 128; + desc.Program = index % 128; + desc.Name = fPlugin.getProgramName(index); + + return &desc; + } + + void dssi_select_program(const ulong bank, const ulong program) + { + const ulong realProgram(bank * 128 + program); + + DISTRHO_SAFE_ASSERT_RETURN(realProgram < fPlugin.getProgramCount(),); + + fPlugin.loadProgram(realProgram); + + // Update control inputs + for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) + { + if (fPlugin.isParameterOutput(i)) + continue; + + fLastControlValues[i] = fPlugin.getParameterValue(i); + + if (fPortControls[i] != nullptr) + *fPortControls[i] = fLastControlValues[i]; + } + } +# endif +#endif + + // ------------------------------------------------------------------- + +private: + PluginExporter fPlugin; + + // LADSPA ports +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + const LADSPA_Data* fPortAudioIns[DISTRHO_PLUGIN_NUM_INPUTS]; +#else + const LADSPA_Data** fPortAudioIns; +#endif +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + LADSPA_Data* fPortAudioOuts[DISTRHO_PLUGIN_NUM_OUTPUTS]; +#else + LADSPA_Data** fPortAudioOuts; +#endif + LADSPA_Data** fPortControls; +#if DISTRHO_PLUGIN_WANT_LATENCY + LADSPA_Data* fPortLatency; +#endif + + // Temporary data + LADSPA_Data* fLastControlValues; + + // ------------------------------------------------------------------- + + void updateParameterOutputs() + { + for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) + { + if (! fPlugin.isParameterOutput(i)) + continue; + + fLastControlValues[i] = fPlugin.getParameterValue(i); + + if (fPortControls[i] != nullptr) + *fPortControls[i] = fLastControlValues[i]; + } + +#if DISTRHO_PLUGIN_WANT_LATENCY + if (fPortLatency != nullptr) + *fPortLatency = fPlugin.getLatency(); +#endif + } +}; + +// ----------------------------------------------------------------------- + +static LADSPA_Handle ladspa_instantiate(const LADSPA_Descriptor*, ulong sampleRate) +{ + if (d_lastBufferSize == 0) + d_lastBufferSize = 2048; + d_lastSampleRate = sampleRate; + + return new PluginLadspaDssi(); +} + +#define instancePtr ((PluginLadspaDssi*)instance) + +static void ladspa_connect_port(LADSPA_Handle instance, ulong port, LADSPA_Data* dataLocation) +{ + instancePtr->ladspa_connect_port(port, dataLocation); +} + +static void ladspa_activate(LADSPA_Handle instance) +{ + instancePtr->ladspa_activate(); +} + +static void ladspa_run(LADSPA_Handle instance, ulong sampleCount) +{ + instancePtr->ladspa_run(sampleCount); +} + +static void ladspa_deactivate(LADSPA_Handle instance) +{ + instancePtr->ladspa_deactivate(); +} + +static void ladspa_cleanup(LADSPA_Handle instance) +{ + delete instancePtr; +} + +#ifdef DISTRHO_PLUGIN_TARGET_DSSI +# if DISTRHO_PLUGIN_WANT_STATE +static char* dssi_configure(LADSPA_Handle instance, const char* key, const char* value) +{ + return instancePtr->dssi_configure(key, value); +} +# endif + +# if DISTRHO_PLUGIN_WANT_PROGRAMS +static const DSSI_Program_Descriptor* dssi_get_program(LADSPA_Handle instance, ulong index) +{ + return instancePtr->dssi_get_program(index); +} + +static void dssi_select_program(LADSPA_Handle instance, ulong bank, ulong program) +{ + instancePtr->dssi_select_program(bank, program); +} +# endif + +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT +static void dssi_run_synth(LADSPA_Handle instance, ulong sampleCount, snd_seq_event_t* events, ulong eventCount) +{ + instancePtr->dssi_run_synth(sampleCount, events, eventCount); +} +# endif +#endif + +#undef instancePtr + +// ----------------------------------------------------------------------- + +static LADSPA_Descriptor sLadspaDescriptor = { + /* UniqueID */ 0, + /* Label */ nullptr, +#if DISTRHO_PLUGIN_IS_RT_SAFE + /* Properties */ LADSPA_PROPERTY_HARD_RT_CAPABLE, +#else + /* Properties */ 0x0, +#endif + /* Name */ nullptr, + /* Maker */ nullptr, + /* Copyright */ nullptr, + /* PortCount */ 0, + /* PortDescriptors */ nullptr, + /* PortNames */ nullptr, + /* PortRangeHints */ nullptr, + /* ImplementationData */ nullptr, + ladspa_instantiate, + ladspa_connect_port, + ladspa_activate, + ladspa_run, + /* run_adding */ nullptr, + /* set_run_adding_gain */ nullptr, + ladspa_deactivate, + ladspa_cleanup +}; + +#ifdef DISTRHO_PLUGIN_TARGET_DSSI +static DSSI_Descriptor sDssiDescriptor = { + 1, + &sLadspaDescriptor, +# if DISTRHO_PLUGIN_WANT_STATE + dssi_configure, +# else + /* configure */ nullptr, +# endif +# if DISTRHO_PLUGIN_WANT_PROGRAMS + dssi_get_program, + dssi_select_program, +# else + /* get_program */ nullptr, + /* select_program */ nullptr, +# endif + /* get_midi_controller_for_port */ nullptr, +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT + dssi_run_synth, +# else + /* run_synth */ nullptr, +# endif + /* run_synth_adding */ nullptr, + /* run_multiple_synths */ nullptr, + /* run_multiple_synths_adding */ nullptr, + nullptr, nullptr +}; +#endif + +// ----------------------------------------------------------------------- + +class DescriptorInitializer +{ +public: + DescriptorInitializer() + { + // Create dummy plugin to get data from + d_lastBufferSize = 512; + d_lastSampleRate = 44100.0; + PluginExporter plugin; + d_lastBufferSize = 0; + d_lastSampleRate = 0.0; + + // Get port count, init + ulong port = 0; + ulong portCount = DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS + plugin.getParameterCount(); +#if DISTRHO_PLUGIN_WANT_LATENCY + portCount += 1; +#endif + const char** const portNames = new const char*[portCount]; + LADSPA_PortDescriptor* portDescriptors = new LADSPA_PortDescriptor[portCount]; + LADSPA_PortRangeHint* portRangeHints = new LADSPA_PortRangeHint [portCount]; + + // Set ports +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + for (ulong i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; ++i, ++port) + { + const AudioPort& aport(plugin.getAudioPort(true, i)); + + portNames[port] = strdup(aport.name); + portDescriptors[port] = LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT; + + portRangeHints[port].HintDescriptor = 0x0; + portRangeHints[port].LowerBound = 0.0f; + portRangeHints[port].UpperBound = 1.0f; + } +#endif + +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + for (ulong i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i, ++port) + { + const AudioPort& aport(plugin.getAudioPort(false, i)); + + portNames[port] = strdup(aport.name); + portDescriptors[port] = LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT; + + portRangeHints[port].HintDescriptor = 0x0; + portRangeHints[port].LowerBound = 0.0f; + portRangeHints[port].UpperBound = 1.0f; + } +#endif + +#if DISTRHO_PLUGIN_WANT_LATENCY + // Set latency port + portNames[port] = strdup("_latency"); + portDescriptors[port] = LADSPA_PORT_CONTROL | LADSPA_PORT_OUTPUT; + portRangeHints[port].HintDescriptor = LADSPA_HINT_SAMPLE_RATE|LADSPA_HINT_INTEGER; + portRangeHints[port].LowerBound = 0.0f; + portRangeHints[port].UpperBound = 1.0f; + ++port; +#endif + + for (ulong i=0, count=plugin.getParameterCount(); i < count; ++i, ++port) + { + portNames[port] = strdup((const char*)plugin.getParameterName(i)); + portDescriptors[port] = LADSPA_PORT_CONTROL; + + if (plugin.isParameterOutput(i)) + portDescriptors[port] |= LADSPA_PORT_OUTPUT; + else + portDescriptors[port] |= LADSPA_PORT_INPUT; + + { + const ParameterRanges& ranges(plugin.getParameterRanges(i)); + const float defValue(ranges.def); + + portRangeHints[port].HintDescriptor = LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + portRangeHints[port].LowerBound = ranges.min; + portRangeHints[port].UpperBound = ranges.max; + + if (defValue == 0.0f) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_0; + else if (defValue == 1.0f) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_1; + else if (defValue == 100.0f) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_100; + else if (defValue == 440.0f) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_440; + else if (ranges.min == defValue) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_MINIMUM; + else if (ranges.max == defValue) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_MAXIMUM; + else + { + const float middleValue = ranges.min/2.0f + ranges.max/2.0f; + const float middleLow = (ranges.min/2.0f + middleValue/2.0f)/2.0f + middleValue/2.0f; + const float middleHigh = (ranges.max/2.0f + middleValue/2.0f)/2.0f + middleValue/2.0f; + + if (defValue < middleLow) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_LOW; + else if (defValue > middleHigh) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_HIGH; + else + portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_MIDDLE; + } + } + + { + const uint32_t hints(plugin.getParameterHints(i)); + + if (hints & kParameterIsBoolean) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_TOGGLED; + if (hints & kParameterIsInteger) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_INTEGER; + if (hints & kParameterIsLogarithmic) + portRangeHints[port].HintDescriptor |= LADSPA_HINT_LOGARITHMIC; + } + } + + // Set data + sLadspaDescriptor.UniqueID = plugin.getUniqueId(); + sLadspaDescriptor.Label = strdup(plugin.getLabel()); + sLadspaDescriptor.Name = strdup(plugin.getName()); + sLadspaDescriptor.Maker = strdup(plugin.getMaker()); + sLadspaDescriptor.Copyright = strdup(plugin.getLicense()); + sLadspaDescriptor.PortCount = portCount; + sLadspaDescriptor.PortNames = portNames; + sLadspaDescriptor.PortDescriptors = portDescriptors; + sLadspaDescriptor.PortRangeHints = portRangeHints; + } + + ~DescriptorInitializer() + { + if (sLadspaDescriptor.Label != nullptr) + { + std::free((void*)sLadspaDescriptor.Label); + sLadspaDescriptor.Label = nullptr; + } + + if (sLadspaDescriptor.Name != nullptr) + { + std::free((void*)sLadspaDescriptor.Name); + sLadspaDescriptor.Name = nullptr; + } + + if (sLadspaDescriptor.Maker != nullptr) + { + std::free((void*)sLadspaDescriptor.Maker); + sLadspaDescriptor.Maker = nullptr; + } + + if (sLadspaDescriptor.Copyright != nullptr) + { + std::free((void*)sLadspaDescriptor.Copyright); + sLadspaDescriptor.Copyright = nullptr; + } + + if (sLadspaDescriptor.PortDescriptors != nullptr) + { + delete[] sLadspaDescriptor.PortDescriptors; + sLadspaDescriptor.PortDescriptors = nullptr; + } + + if (sLadspaDescriptor.PortRangeHints != nullptr) + { + delete[] sLadspaDescriptor.PortRangeHints; + sLadspaDescriptor.PortRangeHints = nullptr; + } + + if (sLadspaDescriptor.PortNames != nullptr) + { + for (ulong i=0; i < sLadspaDescriptor.PortCount; ++i) + { + if (sLadspaDescriptor.PortNames[i] != nullptr) + std::free((void*)sLadspaDescriptor.PortNames[i]); + } + + delete[] sLadspaDescriptor.PortNames; + sLadspaDescriptor.PortNames = nullptr; + } + } +}; + +static DescriptorInitializer sDescInit; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +DISTRHO_PLUGIN_EXPORT +const LADSPA_Descriptor* ladspa_descriptor(ulong index) +{ + USE_NAMESPACE_DISTRHO + return (index == 0) ? &sLadspaDescriptor : nullptr; +} + +#ifdef DISTRHO_PLUGIN_TARGET_DSSI +DISTRHO_PLUGIN_EXPORT +const DSSI_Descriptor* dssi_descriptor(ulong index) +{ + USE_NAMESPACE_DISTRHO + return (index == 0) ? &sDssiDescriptor : nullptr; +} +#endif + +// ----------------------------------------------------------------------- diff --git a/dpf/distrho/src/DistrhoPluginLV2.cpp b/dpf/distrho/src/DistrhoPluginLV2.cpp new file mode 100644 index 0000000..bd2a522 --- /dev/null +++ b/dpf/distrho/src/DistrhoPluginLV2.cpp @@ -0,0 +1,1107 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "DistrhoPluginInternal.hpp" + +#include "lv2/atom.h" +#include "lv2/atom-util.h" +#include "lv2/buf-size.h" +#include "lv2/data-access.h" +#include "lv2/instance-access.h" +#include "lv2/midi.h" +#include "lv2/options.h" +#include "lv2/state.h" +#include "lv2/time.h" +#include "lv2/urid.h" +#include "lv2/worker.h" +#include "lv2/lv2_kxstudio_properties.h" +#include "lv2/lv2_programs.h" + +#ifdef noexcept +# undef noexcept +#endif + +#include + +#ifndef DISTRHO_PLUGIN_URI +# error DISTRHO_PLUGIN_URI undefined! +#endif + +#if DISTRHO_PLUGIN_WANT_TIMEPOS +# warning LV2 TimePos still TODO +#endif + +#define DISTRHO_LV2_USE_EVENTS_IN (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_TIMEPOS || (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI)) +#define DISTRHO_LV2_USE_EVENTS_OUT (DISTRHO_PLUGIN_WANT_MIDI_OUTPUT || (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI)) + +START_NAMESPACE_DISTRHO + +typedef std::map StringMap; + +// ----------------------------------------------------------------------- + +class PluginLv2 +{ +public: + PluginLv2(const double sampleRate, const LV2_URID_Map* const uridMap, const LV2_Worker_Schedule* const worker) + : fPortControls(nullptr), + fLastControlValues(nullptr), + fSampleRate(sampleRate), +#if DISTRHO_LV2_USE_EVENTS_IN || DISTRHO_LV2_USE_EVENTS_OUT +# if DISTRHO_PLUGIN_WANT_TIMEPOS + fLastTimeSpeed(0.0), +# endif + fURIDs(uridMap), +#endif + fUridMap(uridMap), + fWorker(worker) + { +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; ++i) + fPortAudioIns[i] = nullptr; +#else + fPortAudioIns = nullptr; +#endif + +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i) + fPortAudioOuts[i] = nullptr; +#else + fPortAudioOuts = nullptr; +#endif + + if (const uint32_t count = fPlugin.getParameterCount()) + { + fPortControls = new float*[count]; + fLastControlValues = new float[count]; + + for (uint32_t i=0; i < count; ++i) + { + fPortControls[i] = nullptr; + fLastControlValues[i] = fPlugin.getParameterValue(i); + } + } + else + { + fPortControls = nullptr; + fLastControlValues = nullptr; + } + +#if DISTRHO_LV2_USE_EVENTS_IN + fPortEventsIn = nullptr; +#endif +#if DISTRHO_LV2_USE_EVENTS_OUT + fPortEventsOut = nullptr; +#endif +#if DISTRHO_PLUGIN_WANT_LATENCY + fPortLatency = nullptr; +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + if (const uint32_t count = fPlugin.getStateCount()) + { + fNeededUiSends = new bool[count]; + + for (uint32_t i=0; i < count; ++i) + { + fNeededUiSends[i] = false; + + const String& dkey(fPlugin.getStateKey(i)); + fStateMap[dkey] = fPlugin.getStateDefaultValue(i); + } + } + else + { + fNeededUiSends = nullptr; + } +#else + // unused + (void)fWorker; +#endif + +#if DISTRHO_PLUGIN_WANT_TIMEPOS + // hosts may not send all values, resulting on some invalid ones + fTimePosition.bbt.valid = false; + fTimePosition.bbt.bar = 1; + fTimePosition.bbt.beat = 1; + fTimePosition.bbt.tick = 0; + fTimePosition.bbt.barStartTick = 0; + fTimePosition.bbt.beatsPerBar = 4; + fTimePosition.bbt.beatType = 4; + fTimePosition.bbt.ticksPerBeat = 960.0; + fTimePosition.bbt.beatsPerMinute = 120.0; +#endif + } + + ~PluginLv2() + { + if (fPortControls != nullptr) + { + delete[] fPortControls; + fPortControls = nullptr; + } + + if (fLastControlValues) + { + delete[] fLastControlValues; + fLastControlValues = nullptr; + } + +#if DISTRHO_PLUGIN_WANT_STATE + if (fNeededUiSends != nullptr) + { + delete[] fNeededUiSends; + fNeededUiSends = nullptr; + } + + fStateMap.clear(); +#endif + } + + // ------------------------------------------------------------------- + + void lv2_activate() + { + fPlugin.activate(); + } + + void lv2_deactivate() + { + fPlugin.deactivate(); + } + + // ------------------------------------------------------------------- + + void lv2_connect_port(const uint32_t port, void* const dataLocation) + { + uint32_t index = 0; + +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; ++i) + { + if (port == index++) + { + fPortAudioIns[i] = (const float*)dataLocation; + return; + } + } +#endif + +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i) + { + if (port == index++) + { + fPortAudioOuts[i] = (float*)dataLocation; + return; + } + } +#endif + +#if DISTRHO_LV2_USE_EVENTS_IN + if (port == index++) + { + fPortEventsIn = (LV2_Atom_Sequence*)dataLocation; + return; + } +#endif + +#if DISTRHO_LV2_USE_EVENTS_OUT + if (port == index++) + { + fPortEventsOut = (LV2_Atom_Sequence*)dataLocation; + return; + } +#endif + +#if DISTRHO_PLUGIN_WANT_LATENCY + if (port == index++) + { + fPortLatency = (float*)dataLocation; + return; + } +#endif + + for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) + { + if (port == index++) + { + fPortControls[i] = (float*)dataLocation; + return; + } + } + } + + // ------------------------------------------------------------------- + + void lv2_run(const uint32_t sampleCount) + { + // pre-roll + if (sampleCount == 0) + return updateParameterOutputs(); + + // Check for updated parameters + float curValue; + + for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) + { + if (fPortControls[i] == nullptr) + continue; + + curValue = *fPortControls[i]; + + if (fLastControlValues[i] != curValue && ! fPlugin.isParameterOutput(i)) + { + fLastControlValues[i] = curValue; + fPlugin.setParameterValue(i, curValue); + } + } + +#if DISTRHO_LV2_USE_EVENTS_IN +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT + uint32_t midiEventCount = 0; +# endif + LV2_ATOM_SEQUENCE_FOREACH(fPortEventsIn, event) + { + if (event == nullptr) + break; + +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT + if (event->body.type == fURIDs.midiEvent) + { + if (midiEventCount >= kMaxMidiEvents) + continue; + + const uint8_t* const data((const uint8_t*)(event + 1)); + + MidiEvent& midiEvent(fMidiEvents[midiEventCount]); + + midiEvent.frame = event->time.frames; + midiEvent.size = event->body.size; + + if (midiEvent.size > MidiEvent::kDataSize) + midiEvent.dataExt = data; + else + std::memcpy(midiEvent.data, data, midiEvent.size); + + ++midiEventCount; + continue; + } +# endif +# if DISTRHO_PLUGIN_WANT_TIMEPOS + if (event->body.type == fURIDs.atomBlank || event->body.type == fURIDs.atomObject) + { + const LV2_Atom_Object* const obj((const LV2_Atom_Object*)&event->body); + + if (obj->body.otype != fURIDs.timePosition) + continue; + + LV2_Atom* bar = nullptr; + LV2_Atom* barBeat = nullptr; + LV2_Atom* beat = nullptr; + LV2_Atom* beatUnit = nullptr; + LV2_Atom* beatsPerBar = nullptr; + LV2_Atom* beatsPerMinute = nullptr; + LV2_Atom* ticksPerBeat = nullptr; + LV2_Atom* frame = nullptr; + LV2_Atom* speed = nullptr; + + lv2_atom_object_get(obj, + fURIDs.timeBar, &bar, + fURIDs.timeBarBeat, &barBeat, + fURIDs.timeBeat, &beat, + fURIDs.timeBeatUnit, &beatUnit, + fURIDs.timeBeatsPerBar, &beatsPerBar, + fURIDs.timeBeatsPerMinute, &beatsPerMinute, + fURIDs.timeTicksPerBeat, &ticksPerBeat, + fURIDs.timeFrame, &frame, + fURIDs.timeSpeed, &speed, + nullptr); + + if (bar != nullptr) + { + /**/ if (bar->type == fURIDs.atomDouble) + fTimePosition.bbt.bar = ((LV2_Atom_Double*)bar)->body + 1.0; + else if (bar->type == fURIDs.atomFloat) + fTimePosition.bbt.bar = ((LV2_Atom_Float*)bar)->body + 1.0f; + else if (bar->type == fURIDs.atomInt) + fTimePosition.bbt.bar = ((LV2_Atom_Int*)bar)->body + 1; + else if (bar->type == fURIDs.atomLong) + fTimePosition.bbt.bar = ((LV2_Atom_Long*)bar)->body + 1; + else + d_stderr("Unknown lv2 bar value type"); + } + + if (ticksPerBeat != nullptr) + { + /**/ if (ticksPerBeat->type == fURIDs.atomDouble) + fTimePosition.bbt.ticksPerBeat = ((LV2_Atom_Double*)ticksPerBeat)->body; + else if (ticksPerBeat->type == fURIDs.atomFloat) + fTimePosition.bbt.ticksPerBeat = ((LV2_Atom_Float*)ticksPerBeat)->body; + else if (ticksPerBeat->type == fURIDs.atomInt) + fTimePosition.bbt.ticksPerBeat = ((LV2_Atom_Int*)ticksPerBeat)->body; + else if (ticksPerBeat->type == fURIDs.atomLong) + fTimePosition.bbt.ticksPerBeat = ((LV2_Atom_Long*)ticksPerBeat)->body; + else + d_stderr("Unknown lv2 ticksPerBeat value type"); + } + + if (barBeat != nullptr) + { + double barBeatValue = 0.0; + + /**/ if (barBeat->type == fURIDs.atomDouble) + barBeatValue = ((LV2_Atom_Double*)barBeat)->body; + else if (barBeat->type == fURIDs.atomFloat) + barBeatValue = ((LV2_Atom_Float*)barBeat)->body; + else if (barBeat->type == fURIDs.atomInt) + barBeatValue = ((LV2_Atom_Int*)barBeat)->body; + else if (barBeat->type == fURIDs.atomLong) + barBeatValue = ((LV2_Atom_Long*)barBeat)->body; + else + d_stderr("Unknown lv2 barBeat value type"); + + const double rest = std::fmod(barBeatValue, 1.0); + fTimePosition.bbt.beat = barBeatValue-rest+1.0; + fTimePosition.bbt.tick = rest*fTimePosition.bbt.ticksPerBeat+0.5; + } + // barBeat includes beat + else if (beat != nullptr) + { + /**/ if (beat->type == fURIDs.atomDouble) + fTimePosition.bbt.beat = ((LV2_Atom_Double*)beat)->body + 1.0; + else if (beat->type == fURIDs.atomFloat) + fTimePosition.bbt.beat = ((LV2_Atom_Float*)beat)->body + 1.0f; + else if (beat->type == fURIDs.atomInt) + fTimePosition.bbt.beat = ((LV2_Atom_Int*)beat)->body + 1; + else if (beat->type == fURIDs.atomLong) + fTimePosition.bbt.beat = ((LV2_Atom_Long*)beat)->body + 1; + else + d_stderr("Unknown lv2 beat value type"); + } + + if (beatUnit != nullptr) + { + /**/ if (beatUnit->type == fURIDs.atomDouble) + fTimePosition.bbt.beatType = ((LV2_Atom_Double*)beatUnit)->body; + else if (beatUnit->type == fURIDs.atomFloat) + fTimePosition.bbt.beatType = ((LV2_Atom_Float*)beatUnit)->body; + else if (beatUnit->type == fURIDs.atomInt) + fTimePosition.bbt.beatType = ((LV2_Atom_Int*)beatUnit)->body; + else if (beatUnit->type == fURIDs.atomLong) + fTimePosition.bbt.beatType = ((LV2_Atom_Long*)beatUnit)->body; + else + d_stderr("Unknown lv2 beatUnit value type"); + } + + if (beatsPerBar != nullptr) + { + /**/ if (beatsPerBar->type == fURIDs.atomDouble) + fTimePosition.bbt.beatsPerBar = ((LV2_Atom_Double*)beatsPerBar)->body; + else if (beatsPerBar->type == fURIDs.atomFloat) + fTimePosition.bbt.beatsPerBar = ((LV2_Atom_Float*)beatsPerBar)->body; + else if (beatsPerBar->type == fURIDs.atomInt) + fTimePosition.bbt.beatsPerBar = ((LV2_Atom_Int*)beatsPerBar)->body; + else if (beatsPerBar->type == fURIDs.atomLong) + fTimePosition.bbt.beatsPerBar = ((LV2_Atom_Long*)beatsPerBar)->body; + else + d_stderr("Unknown lv2 beatsPerBar value type"); + } + + if (beatsPerMinute != nullptr) + { + /**/ if (beatsPerMinute->type == fURIDs.atomDouble) + fTimePosition.bbt.beatsPerMinute = ((LV2_Atom_Double*)beatsPerMinute)->body; + else if (beatsPerMinute->type == fURIDs.atomFloat) + fTimePosition.bbt.beatsPerMinute = ((LV2_Atom_Float*)beatsPerMinute)->body; + else if (beatsPerMinute->type == fURIDs.atomInt) + fTimePosition.bbt.beatsPerMinute = ((LV2_Atom_Int*)beatsPerMinute)->body; + else if (beatsPerMinute->type == fURIDs.atomLong) + fTimePosition.bbt.beatsPerMinute = ((LV2_Atom_Long*)beatsPerMinute)->body; + else + d_stderr("Unknown lv2 beatsPerMinute value type"); + } + + fTimePosition.bbt.barStartTick = fTimePosition.bbt.ticksPerBeat*fTimePosition.bbt.beatsPerBar*(fTimePosition.bbt.bar-1); + + if (frame != nullptr && frame->type == fURIDs.atomLong) + fTimePosition.frame = ((LV2_Atom_Long*)frame)->body; + + if (speed != nullptr && speed->type == fURIDs.atomFloat) + { + fLastTimeSpeed = ((LV2_Atom_Float*)speed)->body; + fTimePosition.playing = (fLastTimeSpeed == 1.0); + } + + fTimePosition.bbt.valid = (beatsPerMinute != nullptr && beatsPerBar != nullptr && beatUnit != nullptr); + continue; + } +# endif +# if (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI) + if (event->body.type == fURIDs.distrhoState && fWorker != nullptr) + { + const void* const data((const void*)(event + 1)); + + // check if this is our special message + if (std::strcmp((const char*)data, "__dpf_ui_data__") == 0) + { + for (uint32_t i=0, count=fPlugin.getStateCount(); i < count; ++i) + fNeededUiSends[i] = true; + } + else + // no, send to DSP as usual + { + fWorker->schedule_work(fWorker->handle, event->body.size, data); + } + + continue; + } +# endif + } +#endif + +# if DISTRHO_PLUGIN_WANT_TIMEPOS + fPlugin.setTimePosition(fTimePosition); +# endif + +#if DISTRHO_PLUGIN_WANT_MIDI_INPUT + fPlugin.run(fPortAudioIns, fPortAudioOuts, sampleCount, fMidiEvents, midiEventCount); +#else + fPlugin.run(fPortAudioIns, fPortAudioOuts, sampleCount); +#endif + +# if DISTRHO_PLUGIN_WANT_TIMEPOS + // update timePos for next callback + if (fLastTimeSpeed != 0.0) + { + const double newFrames = fLastTimeSpeed*sampleCount; + + fTimePosition.frame += newFrames; + + if (fTimePosition.bbt.valid) + { + const double samplesPerBeat = 60.0 / fTimePosition.bbt.beatsPerMinute * fSampleRate; + const double ticksPerSample = fTimePosition.bbt.ticksPerBeat / samplesPerBeat; + + double newTickPos = double(fTimePosition.bbt.tick) + ticksPerSample*newFrames; + double newBeatPos = double(fTimePosition.bbt.beat)-1.0; + double newBarPos = double(fTimePosition.bbt.bar)-1.0; + + for (; newTickPos >= fTimePosition.bbt.ticksPerBeat;) + { + ++newBeatPos; + newTickPos -= fTimePosition.bbt.ticksPerBeat; + } + + for (; newBeatPos >= fTimePosition.bbt.beatsPerBar;) + { + ++newBarPos; + newBeatPos -= fTimePosition.bbt.beatsPerBar; + } + + fTimePosition.bbt.bar = newBarPos+1.0; + fTimePosition.bbt.beat = newBeatPos+1.0; + fTimePosition.bbt.tick = newTickPos; + fTimePosition.bbt.barStartTick = fTimePosition.bbt.ticksPerBeat*fTimePosition.bbt.beatsPerBar*(fTimePosition.bbt.bar-1); + } + } +# endif + + updateParameterOutputs(); + +#if DISTRHO_LV2_USE_EVENTS_OUT + const uint32_t capacity = fPortEventsOut->atom.size; + + bool needsInit = true; + uint32_t size, offset = 0; + LV2_Atom_Event* aev; + +# if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT + // TODO +# endif +# if (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI) + for (uint32_t i=0, count=fPlugin.getStateCount(); i < count; ++i) + { + if (! fNeededUiSends[i]) + continue; + + const String& key = fPlugin.getStateKey(i); + + for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) + { + const String& curKey = cit->first; + + if (curKey != key) + continue; + + const String& value = cit->second; + + // set msg size (key + value + separator + 2x null terminator) + const size_t msgSize(key.length()+value.length()+3); + + if (sizeof(LV2_Atom_Event) + msgSize > capacity - offset) + break; + + if (needsInit) + { + fPortEventsOut->atom.size = 0; + fPortEventsOut->atom.type = fURIDs.atomSequence; + fPortEventsOut->body.unit = 0; + fPortEventsOut->body.pad = 0; + needsInit = false; + } + + // reserve msg space + char msgBuf[msgSize]; + std::memset(msgBuf, 0, msgSize); + + // write key and value in atom bufer + std::memcpy(msgBuf, key.buffer(), key.length()); + std::memcpy(msgBuf+(key.length()+1), value.buffer(), value.length()); + + // put data + aev = (LV2_Atom_Event*)(LV2_ATOM_CONTENTS(LV2_Atom_Sequence, fPortEventsOut) + offset); + aev->time.frames = 0; + aev->body.type = fURIDs.distrhoState; + aev->body.size = msgSize; + std::memcpy(LV2_ATOM_BODY(&aev->body), msgBuf, msgSize-1); + + size = lv2_atom_pad_size(sizeof(LV2_Atom_Event) + msgSize); + offset += size; + fPortEventsOut->atom.size += size; + + fNeededUiSends[i] = false; + break; + } + } +# endif +#endif + } + + // ------------------------------------------------------------------- + + uint32_t lv2_get_options(LV2_Options_Option* const /*options*/) + { + // currently unused + return LV2_OPTIONS_ERR_UNKNOWN; + } + + uint32_t lv2_set_options(const LV2_Options_Option* const options) + { + for (int i=0; options[i].key != 0; ++i) + { + if (options[i].key == fUridMap->map(fUridMap->handle, LV2_BUF_SIZE__maxBlockLength)) + { + if (options[i].type == fUridMap->map(fUridMap->handle, LV2_ATOM__Int)) + { + const int bufferSize(*(const int*)options[i].value); + fPlugin.setBufferSize(bufferSize); + continue; + } + else + { + d_stderr("Host changed maxBlockLength but with wrong value type"); + continue; + } + } + else if (options[i].key == fUridMap->map(fUridMap->handle, LV2_CORE__sampleRate)) + { + if (options[i].type == fUridMap->map(fUridMap->handle, LV2_ATOM__Double)) + { + const double sampleRate(*(const double*)options[i].value); + fSampleRate = sampleRate; + fPlugin.setSampleRate(sampleRate); + continue; + } + else + { + d_stderr("Host changed sampleRate but with wrong value type"); + continue; + } + } + } + + return LV2_OPTIONS_SUCCESS; + } + + // ------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + const LV2_Program_Descriptor* lv2_get_program(const uint32_t index) + { + if (index >= fPlugin.getProgramCount()) + return nullptr; + + static LV2_Program_Descriptor desc; + + desc.bank = index / 128; + desc.program = index % 128; + desc.name = fPlugin.getProgramName(index); + + return &desc; + } + + void lv2_select_program(const uint32_t bank, const uint32_t program) + { + const uint32_t realProgram(bank * 128 + program); + + if (realProgram >= fPlugin.getProgramCount()) + return; + + fPlugin.loadProgram(realProgram); + + // Update control inputs + for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) + { + if (fPlugin.isParameterOutput(i)) + continue; + + fLastControlValues[i] = fPlugin.getParameterValue(i); + + if (fPortControls[i] != nullptr) + *fPortControls[i] = fLastControlValues[i]; + } + } +#endif + + // ------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_WANT_STATE + LV2_State_Status lv2_save(const LV2_State_Store_Function store, const LV2_State_Handle handle) + { + for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) + { + const String& key = cit->first; + const String& value = cit->second; + + const String urnKey("urn:distrho:" + key); + + // some hosts need +1 for the null terminator, even though the type is string + store(handle, fUridMap->map(fUridMap->handle, urnKey.buffer()), value.buffer(), value.length()+1, fURIDs.atomString, LV2_STATE_IS_POD|LV2_STATE_IS_PORTABLE); + } + + return LV2_STATE_SUCCESS; + } + + LV2_State_Status lv2_restore(const LV2_State_Retrieve_Function retrieve, const LV2_State_Handle handle) + { + size_t size; + uint32_t type, flags; + + for (uint32_t i=0, count=fPlugin.getStateCount(); i < count; ++i) + { + const String& key(fPlugin.getStateKey(i)); + const String urnKey("urn:distrho:" + key); + + size = 0; + type = 0; + flags = LV2_STATE_IS_POD|LV2_STATE_IS_PORTABLE; + const void* data = retrieve(handle, fUridMap->map(fUridMap->handle, urnKey.buffer()), &size, &type, &flags); + + if (data == nullptr || size == 0) + continue; + + DISTRHO_SAFE_ASSERT_CONTINUE(type == fURIDs.atomString); + + const char* const value((const char*)data); + const std::size_t length(std::strlen(value)); + DISTRHO_SAFE_ASSERT_CONTINUE(length == size || length+1 == size); + + setState(key, value); + +#if DISTRHO_LV2_USE_EVENTS_OUT + // signal msg needed for UI + fNeededUiSends[i] = true; +#endif + } + + return LV2_STATE_SUCCESS; + } + + // ------------------------------------------------------------------- + + LV2_Worker_Status lv2_work(const void* const data) + { + const char* const key((const char*)data); + const char* const value(key+std::strlen(key)+1); + + setState(key, value); + + return LV2_WORKER_SUCCESS; + } +#endif + + // ------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + void* lv2_get_instance_pointer() + { + return fPlugin.getInstancePointer(); + } +#endif + + // ------------------------------------------------------------------- + +private: + PluginExporter fPlugin; + + // LV2 ports +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + const float* fPortAudioIns[DISTRHO_PLUGIN_NUM_INPUTS]; +#else + const float** fPortAudioIns; +#endif +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + float* fPortAudioOuts[DISTRHO_PLUGIN_NUM_OUTPUTS]; +#else + float** fPortAudioOuts; +#endif + float** fPortControls; +#if DISTRHO_LV2_USE_EVENTS_IN + LV2_Atom_Sequence* fPortEventsIn; +#endif +#if DISTRHO_LV2_USE_EVENTS_OUT + LV2_Atom_Sequence* fPortEventsOut; +#endif +#if DISTRHO_PLUGIN_WANT_LATENCY + float* fPortLatency; +#endif + + // Temporary data + float* fLastControlValues; + double fSampleRate; +#if DISTRHO_PLUGIN_WANT_MIDI_INPUT + MidiEvent fMidiEvents[kMaxMidiEvents]; +#endif +#if DISTRHO_PLUGIN_WANT_TIMEPOS + TimePosition fTimePosition; + double fLastTimeSpeed; +#endif + + // LV2 URIDs +#if DISTRHO_LV2_USE_EVENTS_IN || DISTRHO_LV2_USE_EVENTS_OUT + struct URIDs { + LV2_URID atomBlank; + LV2_URID atomObject; + LV2_URID atomDouble; + LV2_URID atomFloat; + LV2_URID atomInt; + LV2_URID atomLong; + LV2_URID atomSequence; + LV2_URID atomString; + LV2_URID distrhoState; + LV2_URID midiEvent; + LV2_URID timePosition; + LV2_URID timeBar; + LV2_URID timeBarBeat; + LV2_URID timeBeat; + LV2_URID timeBeatUnit; + LV2_URID timeBeatsPerBar; + LV2_URID timeBeatsPerMinute; + LV2_URID timeTicksPerBeat; + LV2_URID timeFrame; + LV2_URID timeSpeed; + + URIDs(const LV2_URID_Map* const uridMap) + : atomBlank(uridMap->map(uridMap->handle, LV2_ATOM__Blank)), + atomObject(uridMap->map(uridMap->handle, LV2_ATOM__Object)), + atomDouble(uridMap->map(uridMap->handle, LV2_ATOM__Double)), + atomFloat(uridMap->map(uridMap->handle, LV2_ATOM__Float)), + atomInt(uridMap->map(uridMap->handle, LV2_ATOM__Int)), + atomLong(uridMap->map(uridMap->handle, LV2_ATOM__Long)), + atomSequence(uridMap->map(uridMap->handle, LV2_ATOM__Sequence)), + atomString(uridMap->map(uridMap->handle, LV2_ATOM__String)), + distrhoState(uridMap->map(uridMap->handle, "urn:distrho:keyValueState")), + midiEvent(uridMap->map(uridMap->handle, LV2_MIDI__MidiEvent)), + timePosition(uridMap->map(uridMap->handle, LV2_TIME__Position)), + timeBar(uridMap->map(uridMap->handle, LV2_TIME__bar)), + timeBarBeat(uridMap->map(uridMap->handle, LV2_TIME__barBeat)), + timeBeat(uridMap->map(uridMap->handle, LV2_TIME__beat)), + timeBeatUnit(uridMap->map(uridMap->handle, LV2_TIME__beatUnit)), + timeBeatsPerBar(uridMap->map(uridMap->handle, LV2_TIME__beatsPerBar)), + timeBeatsPerMinute(uridMap->map(uridMap->handle, LV2_TIME__beatsPerMinute)), + timeTicksPerBeat(uridMap->map(uridMap->handle, LV2_KXSTUDIO_PROPERTIES__TimePositionTicksPerBeat)), + timeFrame(uridMap->map(uridMap->handle, LV2_TIME__frame)), + timeSpeed(uridMap->map(uridMap->handle, LV2_TIME__speed)) {} + } fURIDs; +#endif + + // LV2 features + const LV2_URID_Map* const fUridMap; + const LV2_Worker_Schedule* const fWorker; + +#if DISTRHO_PLUGIN_WANT_STATE + StringMap fStateMap; + bool* fNeededUiSends; + + void setState(const char* const key, const char* const newValue) + { + fPlugin.setState(key, newValue); + + // check if we want to save this key + if (! fPlugin.wantStateKey(key)) + return; + + // check if key already exists + for (StringMap::iterator it=fStateMap.begin(), ite=fStateMap.end(); it != ite; ++it) + { + const String& dkey(it->first); + + if (dkey == key) + { + it->second = newValue; + return; + } + } + + d_stderr("Failed to find plugin state with key \"%s\"", key); + } +#endif + + void updateParameterOutputs() + { + for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) + { + if (! fPlugin.isParameterOutput(i)) + continue; + + fLastControlValues[i] = fPlugin.getParameterValue(i); + + if (fPortControls[i] != nullptr) + *fPortControls[i] = fLastControlValues[i]; + } + +#if DISTRHO_PLUGIN_WANT_LATENCY + if (fPortLatency != nullptr) + *fPortLatency = fPlugin.getLatency(); +#endif + } +}; + +// ----------------------------------------------------------------------- + +static LV2_Handle lv2_instantiate(const LV2_Descriptor*, double sampleRate, const char*, const LV2_Feature* const* features) +{ + const LV2_Options_Option* options = nullptr; + const LV2_URID_Map* uridMap = nullptr; + const LV2_Worker_Schedule* worker = nullptr; + + for (int i=0; features[i] != nullptr; ++i) + { + if (std::strcmp(features[i]->URI, LV2_OPTIONS__options) == 0) + options = (const LV2_Options_Option*)features[i]->data; + else if (std::strcmp(features[i]->URI, LV2_URID__map) == 0) + uridMap = (const LV2_URID_Map*)features[i]->data; + else if (std::strcmp(features[i]->URI, LV2_WORKER__schedule) == 0) + worker = (const LV2_Worker_Schedule*)features[i]->data; + } + + if (options == nullptr) + { + d_stderr("Options feature missing, cannot continue!"); + return nullptr; + } + + if (uridMap == nullptr) + { + d_stderr("URID Map feature missing, cannot continue!"); + return nullptr; + } + +#if DISTRHO_PLUGIN_WANT_STATE + if (worker == nullptr) + { + d_stderr("Worker feature missing, cannot continue!"); + return nullptr; + } +#endif + + d_lastBufferSize = 0; + + for (int i=0; options[i].key != 0; ++i) + { + if (options[i].key == uridMap->map(uridMap->handle, LV2_BUF_SIZE__maxBlockLength)) + { + if (options[i].type == uridMap->map(uridMap->handle, LV2_ATOM__Int)) + d_lastBufferSize = *(const int*)options[i].value; + else + d_stderr("Host provides maxBlockLength but has wrong value type"); + + break; + } + } + + if (d_lastBufferSize == 0) + { + d_stderr("Host does not provide maxBlockLength option"); + d_lastBufferSize = 2048; + } + + d_lastSampleRate = sampleRate; + + return new PluginLv2(sampleRate, uridMap, worker); +} + +#define instancePtr ((PluginLv2*)instance) + +static void lv2_connect_port(LV2_Handle instance, uint32_t port, void* dataLocation) +{ + instancePtr->lv2_connect_port(port, dataLocation); +} + +static void lv2_activate(LV2_Handle instance) +{ + instancePtr->lv2_activate(); +} + +static void lv2_run(LV2_Handle instance, uint32_t sampleCount) +{ + instancePtr->lv2_run(sampleCount); +} + +static void lv2_deactivate(LV2_Handle instance) +{ + instancePtr->lv2_deactivate(); +} + +static void lv2_cleanup(LV2_Handle instance) +{ + delete instancePtr; +} + +// ----------------------------------------------------------------------- + +static uint32_t lv2_get_options(LV2_Handle instance, LV2_Options_Option* options) +{ + return instancePtr->lv2_get_options(options); +} + +static uint32_t lv2_set_options(LV2_Handle instance, const LV2_Options_Option* options) +{ + return instancePtr->lv2_set_options(options); +} + +// ----------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_WANT_PROGRAMS +static const LV2_Program_Descriptor* lv2_get_program(LV2_Handle instance, uint32_t index) +{ + return instancePtr->lv2_get_program(index); +} + +static void lv2_select_program(LV2_Handle instance, uint32_t bank, uint32_t program) +{ + instancePtr->lv2_select_program(bank, program); +} +#endif + +// ----------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_WANT_STATE +static LV2_State_Status lv2_save(LV2_Handle instance, LV2_State_Store_Function store, LV2_State_Handle handle, uint32_t, const LV2_Feature* const*) +{ + return instancePtr->lv2_save(store, handle); +} + +static LV2_State_Status lv2_restore(LV2_Handle instance, LV2_State_Retrieve_Function retrieve, LV2_State_Handle handle, uint32_t, const LV2_Feature* const*) +{ + return instancePtr->lv2_restore(retrieve, handle); +} + +LV2_Worker_Status lv2_work(LV2_Handle instance, LV2_Worker_Respond_Function, LV2_Worker_Respond_Handle, uint32_t, const void* data) +{ + return instancePtr->lv2_work(data); +} +#endif + +// ----------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS +static void* lv2_get_instance_pointer(LV2_Handle instance) +{ + return instancePtr->lv2_get_instance_pointer(); +} +#endif + +// ----------------------------------------------------------------------- + +static const void* lv2_extension_data(const char* uri) +{ + static const LV2_Options_Interface options = { lv2_get_options, lv2_set_options }; + + if (std::strcmp(uri, LV2_OPTIONS__interface) == 0) + return &options; + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + static const LV2_Programs_Interface programs = { lv2_get_program, lv2_select_program }; + + if (std::strcmp(uri, LV2_PROGRAMS__Interface) == 0) + return &programs; +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + static const LV2_State_Interface state = { lv2_save, lv2_restore }; + static const LV2_Worker_Interface worker = { lv2_work, nullptr, nullptr }; + + if (std::strcmp(uri, LV2_STATE__interface) == 0) + return &state; + if (std::strcmp(uri, LV2_WORKER__interface) == 0) + return &worker; +#endif + +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS +# define DISTRHO_DIRECT_ACCESS_URI "urn:distrho:direct-access" + + struct LV2_DirectAccess_Interface { + void* (*get_instance_pointer)(LV2_Handle handle); + }; + + static const LV2_DirectAccess_Interface directaccess = { lv2_get_instance_pointer }; + + if (std::strcmp(uri, DISTRHO_DIRECT_ACCESS_URI) == 0) + return &directaccess; +#endif + + return nullptr; +} + +#undef instancePtr + +// ----------------------------------------------------------------------- + +static const LV2_Descriptor sLv2Descriptor = { + DISTRHO_PLUGIN_URI, + lv2_instantiate, + lv2_connect_port, + lv2_activate, + lv2_run, + lv2_deactivate, + lv2_cleanup, + lv2_extension_data +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +DISTRHO_PLUGIN_EXPORT +const LV2_Descriptor* lv2_descriptor(uint32_t index) +{ + USE_NAMESPACE_DISTRHO + return (index == 0) ? &sLv2Descriptor : nullptr; +} + +// ----------------------------------------------------------------------- diff --git a/dpf/distrho/src/DistrhoPluginLV2export.cpp b/dpf/distrho/src/DistrhoPluginLV2export.cpp new file mode 100644 index 0000000..9508b43 --- /dev/null +++ b/dpf/distrho/src/DistrhoPluginLV2export.cpp @@ -0,0 +1,431 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "DistrhoPluginInternal.hpp" + +#include "lv2/atom.h" +#include "lv2/buf-size.h" +#include "lv2/data-access.h" +#include "lv2/instance-access.h" +#include "lv2/midi.h" +#include "lv2/options.h" +#include "lv2/port-props.h" +#include "lv2/resize-port.h" +#include "lv2/state.h" +#include "lv2/time.h" +#include "lv2/ui.h" +#include "lv2/units.h" +#include "lv2/urid.h" +#include "lv2/worker.h" +#include "lv2/lv2_kxstudio_properties.h" +#include "lv2/lv2_programs.h" + +#include +#include + +#ifndef DISTRHO_PLUGIN_URI +# error DISTRHO_PLUGIN_URI undefined! +#endif + +#ifndef DISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE +# define DISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE 2048 +#endif + +#if DISTRHO_PLUGIN_HAS_UI && ! defined(HAVE_DGL) +# undef DISTRHO_PLUGIN_HAS_UI +# define DISTRHO_PLUGIN_HAS_UI 0 +#endif + +#define DISTRHO_LV2_USE_EVENTS_IN (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_TIMEPOS || (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI)) +#define DISTRHO_LV2_USE_EVENTS_OUT (DISTRHO_PLUGIN_WANT_MIDI_OUTPUT || (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI)) + +// ----------------------------------------------------------------------- + +DISTRHO_PLUGIN_EXPORT +void lv2_generate_ttl(const char* const basename) +{ + USE_NAMESPACE_DISTRHO + + // Dummy plugin to get data from + d_lastBufferSize = 512; + d_lastSampleRate = 44100.0; + PluginExporter plugin; + d_lastBufferSize = 0; + d_lastSampleRate = 0.0; + + String pluginDLL(basename); + String pluginTTL(pluginDLL + ".ttl"); + + // --------------------------------------------- + + { + std::cout << "Writing manifest.ttl..."; std::cout.flush(); + std::fstream manifestFile("manifest.ttl", std::ios::out); + + String manifestString; + manifestString += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n"; + manifestString += "@prefix rdfs: .\n"; +#if DISTRHO_PLUGIN_HAS_UI + manifestString += "@prefix ui: <" LV2_UI_PREFIX "> .\n"; +#endif + manifestString += "\n"; + + manifestString += "<" DISTRHO_PLUGIN_URI ">\n"; + manifestString += " a lv2:Plugin ;\n"; + manifestString += " lv2:binary <" + pluginDLL + "." DISTRHO_DLL_EXTENSION "> ;\n"; + manifestString += " rdfs:seeAlso <" + pluginTTL + "> .\n"; + manifestString += "\n"; + +#if DISTRHO_PLUGIN_HAS_UI + manifestString += "<" DISTRHO_UI_URI ">\n"; +# if DISTRHO_OS_HAIKU + manifestString += " a ui:BeUI ;\n"; +# elif DISTRHO_OS_MAC + manifestString += " a ui:CocoaUI ;\n"; +# elif DISTRHO_OS_WINDOWS + manifestString += " a ui:WindowsUI ;\n"; +# else + manifestString += " a ui:X11UI ;\n"; +# endif +# if ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + String pluginUI(pluginDLL); + pluginUI.truncate(pluginDLL.rfind("_dsp")); + pluginUI += "_ui"; + + manifestString += " ui:binary <" + pluginUI + "." DISTRHO_DLL_EXTENSION "> ;\n"; +# else + manifestString += " ui:binary <" + pluginDLL + "." DISTRHO_DLL_EXTENSION "> ;\n"; +#endif + manifestString += "\n"; + manifestString += " lv2:extensionData ui:idleInterface ,\n"; +# if DISTRHO_PLUGIN_WANT_PROGRAMS + manifestString += " ui:showInterface ,\n"; + manifestString += " <" LV2_PROGRAMS__Interface "> ;\n"; +# else + manifestString += " ui:showInterface ;\n"; +# endif + manifestString += "\n"; + manifestString += " lv2:optionalFeature ui:noUserResize ,\n"; + manifestString += " ui:resize ,\n"; + manifestString += " ui:touch ;\n"; + manifestString += "\n"; +# if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + manifestString += " lv2:requiredFeature <" LV2_DATA_ACCESS_URI "> ,\n"; + manifestString += " <" LV2_INSTANCE_ACCESS_URI "> ,\n"; + manifestString += " <" LV2_OPTIONS__options "> ,\n"; +# else + manifestString += " lv2:requiredFeature <" LV2_OPTIONS__options "> ,\n"; +# endif + manifestString += " <" LV2_URID__map "> .\n"; +#endif + + manifestFile << manifestString << std::endl; + manifestFile.close(); + std::cout << " done!" << std::endl; + } + + // --------------------------------------------- + + { + std::cout << "Writing " << pluginTTL << "..."; std::cout.flush(); + std::fstream pluginFile(pluginTTL, std::ios::out); + + String pluginString; + + // header +#if DISTRHO_LV2_USE_EVENTS_IN + pluginString += "@prefix atom: <" LV2_ATOM_PREFIX "> .\n"; +#endif + pluginString += "@prefix doap: .\n"; + pluginString += "@prefix foaf: .\n"; + pluginString += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n"; + pluginString += "@prefix rsz: <" LV2_RESIZE_PORT_PREFIX "> .\n"; +#if DISTRHO_PLUGIN_HAS_UI + pluginString += "@prefix ui: <" LV2_UI_PREFIX "> .\n"; +#endif + pluginString += "@prefix unit: <" LV2_UNITS_PREFIX "> .\n"; + pluginString += "\n"; + + // plugin + pluginString += "<" DISTRHO_PLUGIN_URI ">\n"; +#if DISTRHO_PLUGIN_IS_SYNTH + pluginString += " a lv2:InstrumentPlugin, lv2:Plugin ;\n"; +#else + pluginString += " a lv2:Plugin ;\n"; +#endif + pluginString += "\n"; + + // extensionData + pluginString += " lv2:extensionData <" LV2_STATE__interface "> "; +#if DISTRHO_PLUGIN_WANT_STATE + pluginString += ",\n <" LV2_OPTIONS__interface "> "; + pluginString += ",\n <" LV2_WORKER__interface "> "; +#endif +#if DISTRHO_PLUGIN_WANT_PROGRAMS + pluginString += ",\n <" LV2_PROGRAMS__Interface "> "; +#endif + pluginString += ";\n\n"; + + // optionalFeatures +#if DISTRHO_PLUGIN_IS_RT_SAFE + pluginString += " lv2:optionalFeature <" LV2_CORE__hardRTCapable "> ,\n"; + pluginString += " <" LV2_BUF_SIZE__boundedBlockLength "> ;\n"; +#else + pluginString += " lv2:optionalFeature <" LV2_BUF_SIZE__boundedBlockLength "> ;\n"; +#endif + pluginString += "\n"; + + // requiredFeatures + pluginString += " lv2:requiredFeature <" LV2_OPTIONS__options "> "; + pluginString += ",\n <" LV2_URID__map "> "; +#if DISTRHO_PLUGIN_WANT_STATE + pluginString += ",\n <" LV2_WORKER__schedule "> "; +#endif + pluginString += ";\n\n"; + + // UI +#if DISTRHO_PLUGIN_HAS_UI + pluginString += " ui:ui <" DISTRHO_UI_URI "> ;\n"; + pluginString += "\n"; +#endif + + { + uint32_t portIndex = 0; + +#if DISTRHO_PLUGIN_NUM_INPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_INPUTS; ++i, ++portIndex) + { + const AudioPort& port(plugin.getAudioPort(true, i)); + + if (i == 0) + pluginString += " lv2:port [\n"; + else + pluginString += " [\n"; + + if (port.hints & kAudioPortIsCV) + pluginString += " a lv2:InputPort, lv2:CVPort ;\n"; + else + pluginString += " a lv2:InputPort, lv2:AudioPort ;\n"; + + pluginString += " lv2:index " + String(portIndex) + " ;\n"; + pluginString += " lv2:symbol \"" + port.symbol + "\" ;\n"; + pluginString += " lv2:name \"" + port.name + "\" ;\n"; + + if (port.hints & kAudioPortIsSidechain) + pluginString += " lv2:portProperty lv2:isSideChain;\n"; + + if (i+1 == DISTRHO_PLUGIN_NUM_INPUTS) + pluginString += " ] ;\n"; + else + pluginString += " ] ,\n"; + } + pluginString += "\n"; +#endif + +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 + for (uint32_t i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i, ++portIndex) + { + const AudioPort& port(plugin.getAudioPort(false, i)); + + if (i == 0) + pluginString += " lv2:port [\n"; + else + pluginString += " [\n"; + + if (port.hints & kAudioPortIsCV) + pluginString += " a lv2:OutputPort, lv2:CVPort ;\n"; + else + pluginString += " a lv2:OutputPort, lv2:AudioPort ;\n"; + + pluginString += " lv2:index " + String(portIndex) + " ;\n"; + pluginString += " lv2:symbol \"" + port.symbol + "\" ;\n"; + pluginString += " lv2:name \"" + port.name + "\" ;\n"; + + if (port.hints & kAudioPortIsSidechain) + pluginString += " lv2:portProperty lv2:isSideChain;\n"; + + if (i+1 == DISTRHO_PLUGIN_NUM_OUTPUTS) + pluginString += " ] ;\n"; + else + pluginString += " ] ,\n"; + } + pluginString += "\n"; +#endif + +#if DISTRHO_LV2_USE_EVENTS_IN + pluginString += " lv2:port [\n"; + pluginString += " a lv2:InputPort, atom:AtomPort ;\n"; + pluginString += " lv2:index " + String(portIndex) + " ;\n"; + pluginString += " lv2:name \"Events Input\" ;\n"; + pluginString += " lv2:symbol \"lv2_events_in\" ;\n"; + pluginString += " rsz:minimumSize " + String(DISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE) + " ;\n"; + pluginString += " atom:bufferType atom:Sequence ;\n"; +# if (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI) + pluginString += " atom:supports <" LV2_ATOM__String "> ;\n"; +# endif +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT + pluginString += " atom:supports <" LV2_MIDI__MidiEvent "> ;\n"; +# endif +# if DISTRHO_PLUGIN_WANT_TIMEPOS + pluginString += " atom:supports <" LV2_TIME__Position "> ;\n"; +# endif + pluginString += " ] ;\n\n"; + ++portIndex; +#endif + +#if DISTRHO_LV2_USE_EVENTS_OUT + pluginString += " lv2:port [\n"; + pluginString += " a lv2:OutputPort, atom:AtomPort ;\n"; + pluginString += " lv2:index " + String(portIndex) + " ;\n"; + pluginString += " lv2:name \"Events Output\" ;\n"; + pluginString += " lv2:symbol \"lv2_events_out\" ;\n"; + pluginString += " rsz:minimumSize " + String(DISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE) + " ;\n"; + pluginString += " atom:bufferType atom:Sequence ;\n"; +# if (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI) + pluginString += " atom:supports <" LV2_ATOM__String "> ;\n"; +# endif +# if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT + pluginString += " atom:supports <" LV2_MIDI__MidiEvent "> ;\n"; +# endif + pluginString += " ] ;\n\n"; + ++portIndex; +#endif + +#if DISTRHO_PLUGIN_WANT_LATENCY + pluginString += " lv2:port [\n"; + pluginString += " a lv2:OutputPort, lv2:ControlPort ;\n"; + pluginString += " lv2:index " + String(portIndex) + " ;\n"; + pluginString += " lv2:name \"Latency\" ;\n"; + pluginString += " lv2:symbol \"lv2_latency\" ;\n"; + pluginString += " lv2:designation lv2:latency ;\n"; + pluginString += " lv2:portProperty lv2:reportsLatency, lv2:integer ;\n"; + pluginString += " ] ;\n\n"; + ++portIndex; +#endif + + for (uint32_t i=0, count=plugin.getParameterCount(); i < count; ++i, ++portIndex) + { + if (i == 0) + pluginString += " lv2:port [\n"; + else + pluginString += " [\n"; + + if (plugin.isParameterOutput(i)) + pluginString += " a lv2:OutputPort, lv2:ControlPort ;\n"; + else + pluginString += " a lv2:InputPort, lv2:ControlPort ;\n"; + + pluginString += " lv2:index " + String(portIndex) + " ;\n"; + pluginString += " lv2:name \"" + plugin.getParameterName(i) + "\" ;\n"; + + // symbol + { + String symbol(plugin.getParameterSymbol(i)); + + if (symbol.isEmpty()) + symbol = "lv2_port_" + String(portIndex-1); + + pluginString += " lv2:symbol \"" + symbol + "\" ;\n"; + } + + // ranges + { + const ParameterRanges& ranges(plugin.getParameterRanges(i)); + + if (plugin.getParameterHints(i) & kParameterIsInteger) + { + pluginString += " lv2:default " + String(int(plugin.getParameterValue(i))) + " ;\n"; + pluginString += " lv2:minimum " + String(int(ranges.min)) + " ;\n"; + pluginString += " lv2:maximum " + String(int(ranges.max)) + " ;\n"; + } + else + { + pluginString += " lv2:default " + String(plugin.getParameterValue(i)) + " ;\n"; + pluginString += " lv2:minimum " + String(ranges.min) + " ;\n"; + pluginString += " lv2:maximum " + String(ranges.max) + " ;\n"; + } + } + + // unit + { + const String& unit(plugin.getParameterUnit(i)); + + if (! unit.isEmpty()) + { + if (unit == "db" || unit == "dB") + { + pluginString += " unit:unit unit:db ;\n"; + } + else if (unit == "hz" || unit == "Hz") + { + pluginString += " unit:unit unit:hz ;\n"; + } + else if (unit == "khz" || unit == "kHz") + { + pluginString += " unit:unit unit:khz ;\n"; + } + else if (unit == "mhz" || unit == "mHz") + { + pluginString += " unit:unit unit:mhz ;\n"; + } + else if (unit == "%") + { + pluginString += " unit:unit unit:pc ;\n"; + } + else + { + pluginString += " unit:unit [\n"; + pluginString += " a unit:Unit ;\n"; + pluginString += " unit:name \"" + unit + "\" ;\n"; + pluginString += " unit:symbol \"" + unit + "\" ;\n"; + pluginString += " unit:render \"%f " + unit + "\" ;\n"; + pluginString += " ] ;\n"; + } + } + } + + // hints + { + const uint32_t hints(plugin.getParameterHints(i)); + + if (hints & kParameterIsBoolean) + pluginString += " lv2:portProperty lv2:toggled ;\n"; + if (hints & kParameterIsInteger) + pluginString += " lv2:portProperty lv2:integer ;\n"; + if (hints & kParameterIsLogarithmic) + pluginString += " lv2:portProperty <" LV2_PORT_PROPS__logarithmic "> ;\n"; + if ((hints & kParameterIsAutomable) == 0 && ! plugin.isParameterOutput(i)) + { + pluginString += " lv2:portProperty <" LV2_PORT_PROPS__expensive "> ,\n"; + pluginString += " <" LV2_KXSTUDIO_PROPERTIES__NonAutomable "> ;\n"; + } + } + + if (i+1 == count) + pluginString += " ] ;\n\n"; + else + pluginString += " ] ,\n"; + } + } + + pluginString += " doap:name \"" + String(plugin.getName()) + "\" ;\n"; + pluginString += " doap:maintainer [ foaf:name \"" + String(plugin.getMaker()) + "\" ] .\n"; + + pluginFile << pluginString << std::endl; + pluginFile.close(); + std::cout << " done!" << std::endl; + } +} diff --git a/dpf/distrho/src/DistrhoPluginVST.cpp b/dpf/distrho/src/DistrhoPluginVST.cpp new file mode 100644 index 0000000..4e56567 --- /dev/null +++ b/dpf/distrho/src/DistrhoPluginVST.cpp @@ -0,0 +1,1125 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "DistrhoPluginInternal.hpp" + +#if DISTRHO_PLUGIN_HAS_UI && ! defined(HAVE_DGL) +# undef DISTRHO_PLUGIN_HAS_UI +# define DISTRHO_PLUGIN_HAS_UI 0 +#endif + +#if DISTRHO_PLUGIN_HAS_UI +# include "DistrhoUIInternal.hpp" +#endif + +#ifndef __cdecl +# define __cdecl +#endif + +// has some conflicts +#ifdef noexcept +# undef noexcept +#endif + +#define VESTIGE_HEADER +#define VST_FORCE_DEPRECATED 0 + +#include +#include + +#ifdef VESTIGE_HEADER +# include "vestige/aeffectx.h" +#define effFlagsProgramChunks (1 << 5) +#define effSetProgramName 4 +#define effGetParamLabel 6 +#define effGetParamDisplay 7 +#define effGetChunk 23 +#define effSetChunk 24 +#define effCanBeAutomated 26 +#define effGetProgramNameIndexed 29 +#define effGetPlugCategory 35 +#define effIdle 53 +#define kPlugCategEffect 1 +#define kPlugCategSynth 2 +#define kVstVersion 2400 +struct ERect { + int16_t top, left, bottom, right; +}; +#else +# include "vst/aeffectx.h" +#endif + +START_NAMESPACE_DISTRHO + +typedef std::map StringMap; + +// ----------------------------------------------------------------------- + +void strncpy(char* const dst, const char* const src, const size_t size) +{ + std::strncpy(dst, src, size-1); + dst[size-1] = '\0'; +} + +void snprintf_param(char* const dst, const float value, const size_t size) +{ + std::snprintf(dst, size-1, "%f", value); + dst[size-1] = '\0'; +} + +#if DISTRHO_PLUGIN_HAS_UI +// ----------------------------------------------------------------------- + +class UiHelper +{ +public: + UiHelper() + : parameterChecks(nullptr), + parameterValues(nullptr) {} + + virtual ~UiHelper() + { + if (parameterChecks != nullptr) + { + delete[] parameterChecks; + parameterChecks = nullptr; + } + if (parameterValues != nullptr) + { + delete[] parameterValues; + parameterValues = nullptr; + } + } + + bool* parameterChecks; + float* parameterValues; + +# if DISTRHO_PLUGIN_WANT_STATE + virtual void setStateFromUI(const char* const newKey, const char* const newValue) = 0; +# endif +}; + +// ----------------------------------------------------------------------- + +class UIVst +{ +public: + UIVst(const audioMasterCallback audioMaster, AEffect* const effect, UiHelper* const uiHelper, PluginExporter* const plugin, const intptr_t winId) + : fAudioMaster(audioMaster), + fEffect(effect), + fUiHelper(uiHelper), + fPlugin(plugin), + fUI(this, winId, editParameterCallback, setParameterCallback, setStateCallback, sendNoteCallback, setSizeCallback, plugin->getInstancePointer()) + { + } + + // ------------------------------------------------------------------- + + void idle() + { + for (uint32_t i=0, count = fPlugin->getParameterCount(); i < count; ++i) + { + if (fUiHelper->parameterChecks[i]) + { + fUiHelper->parameterChecks[i] = false; + fUI.parameterChanged(i, fUiHelper->parameterValues[i]); + } + } + + fUI.idle(); + } + + int16_t getWidth() const + { + return fUI.getWidth(); + } + + int16_t getHeight() const + { + return fUI.getHeight(); + } + + void setSampleRate(const double newSampleRate) + { + fUI.setSampleRate(newSampleRate, true); + } + + // ------------------------------------------------------------------- + // functions called from the plugin side, may block + +# if DISTRHO_PLUGIN_WANT_STATE + void setStateFromPlugin(const char* const key, const char* const value) + { + fUI.stateChanged(key, value); + } +# endif + + // ------------------------------------------------------------------- + +protected: + intptr_t hostCallback(const int32_t opcode, + const int32_t index = 0, + const intptr_t value = 0, + void* const ptr = nullptr, + const float opt = 0.0f) + { + return fAudioMaster(fEffect, opcode, index, value, ptr, opt); + } + + void editParameter(const uint32_t index, const bool started) + { + hostCallback(started ? audioMasterBeginEdit : audioMasterEndEdit, index); + } + + void setParameterValue(const uint32_t index, const float realValue) + { + const ParameterRanges& ranges(fPlugin->getParameterRanges(index)); + const float perValue(ranges.getNormalizedValue(realValue)); + + fPlugin->setParameterValue(index, realValue); + hostCallback(audioMasterAutomate, index, 0, nullptr, perValue); + } + + void setState(const char* const key, const char* const value) + { +# if DISTRHO_PLUGIN_WANT_STATE + fUiHelper->setStateFromUI(key, value); +# else + return; // unused + (void)key; + (void)value; +# endif + } + + void sendNote(const uint8_t channel, const uint8_t note, const uint8_t velocity) + { +# if 0 //DISTRHO_PLUGIN_WANT_MIDI_INPUT + // TODO +# else + return; // unused + (void)channel; + (void)note; + (void)velocity; +# endif + } + + void setSize(const uint width, const uint height) + { + fUI.setWindowSize(width, height); + hostCallback(audioMasterSizeWindow, width, height); + } + +private: + // Vst stuff + const audioMasterCallback fAudioMaster; + AEffect* const fEffect; + UiHelper* const fUiHelper; + PluginExporter* const fPlugin; + + // Plugin UI + UIExporter fUI; + + // ------------------------------------------------------------------- + // Callbacks + + #define handlePtr ((UIVst*)ptr) + + static void editParameterCallback(void* ptr, uint32_t index, bool started) + { + handlePtr->editParameter(index, started); + } + + static void setParameterCallback(void* ptr, uint32_t rindex, float value) + { + handlePtr->setParameterValue(rindex, value); + } + + static void setStateCallback(void* ptr, const char* key, const char* value) + { + handlePtr->setState(key, value); + } + + static void sendNoteCallback(void* ptr, uint8_t channel, uint8_t note, uint8_t velocity) + { + handlePtr->sendNote(channel, note, velocity); + } + + static void setSizeCallback(void* ptr, uint width, uint height) + { + handlePtr->setSize(width, height); + } + + #undef handlePtr +}; +#endif + +// ----------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_HAS_UI +class PluginVst : public UiHelper +#else +class PluginVst +#endif +{ +public: + PluginVst(const audioMasterCallback audioMaster, AEffect* const effect) + : fAudioMaster(audioMaster), + fEffect(effect) + { + std::memset(fProgramName, 0, sizeof(char)*(32+1)); + std::strcpy(fProgramName, "Default"); + +#if DISTRHO_PLUGIN_WANT_MIDI_INPUT + fMidiEventCount = 0; +#endif + +#if DISTRHO_PLUGIN_HAS_UI + fVstUI = nullptr; + fVstRect.top = 0; + fVstRect.left = 0; + fVstRect.bottom = 0; + fVstRect.right = 0; + + if (const uint32_t paramCount = fPlugin.getParameterCount()) + { + parameterChecks = new bool[paramCount]; + parameterValues = new float[paramCount]; + + for (uint32_t i=0; i < paramCount; ++i) + { + parameterChecks[i] = false; + parameterValues[i] = 0.0f; + } + } +# if DISTRHO_OS_MAC +# ifdef __LP64__ + fUsingNsView = true; +# else +# warning 32bit VST UIs on OSX only work if the host supports "hasCockosViewAsConfig" + fUsingNsView = false; +# endif +# endif // DISTRHO_OS_MAC +#endif // DISTRHO_PLUGIN_HAS_UI + +#if DISTRHO_PLUGIN_WANT_STATE + fStateChunk = nullptr; + + for (uint32_t i=0, count=fPlugin.getStateCount(); i(fPlugin.getParameterCount())) + { + DISTRHO::snprintf_param((char*)ptr, fPlugin.getParameterValue(index), 24); + return 1; + } + break; + + case effSetSampleRate: + fPlugin.setSampleRate(opt, true); + +#if DISTRHO_PLUGIN_HAS_UI + if (fVstUI != nullptr) + fVstUI->setSampleRate(opt); +#endif + break; + + case effSetBlockSize: + fPlugin.setBufferSize(value, true); + break; + + case effMainsChanged: + if (value != 0) + { +#if DISTRHO_PLUGIN_WANT_MIDI_INPUT + fMidiEventCount = 0; + + // tell host we want MIDI events + hostCallback(audioMasterWantMidi); +#endif + + // deactivate for possible changes + fPlugin.deactivateIfNeeded(); + + // check if something changed + const uint32_t bufferSize = static_cast(hostCallback(audioMasterGetBlockSize)); + const double sampleRate = static_cast(hostCallback(audioMasterGetSampleRate)); + + if (bufferSize != 0) + fPlugin.setBufferSize(bufferSize, true); + + if (sampleRate != 0.0) + fPlugin.setSampleRate(sampleRate, true); + + fPlugin.activate(); + } + else + { + fPlugin.deactivate(); + } + break; + +#if DISTRHO_PLUGIN_HAS_UI + case effEditGetRect: + if (fVstUI != nullptr) + { + fVstRect.right = fVstUI->getWidth(); + fVstRect.bottom = fVstUI->getHeight(); + } + else + { + d_lastUiSampleRate = fPlugin.getSampleRate(); + + UIExporter tmpUI(nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr, fPlugin.getInstancePointer()); + fVstRect.right = tmpUI.getWidth(); + fVstRect.bottom = tmpUI.getHeight(); + tmpUI.quit(); + } + *(ERect**)ptr = &fVstRect; + return 1; + + case effEditOpen: + if (fVstUI == nullptr) + { +# if DISTRHO_OS_MAC + if (! fUsingNsView) + { + d_stderr("Host doesn't support hasCockosViewAsConfig, cannot use UI"); + return 0; + } +# endif + d_lastUiSampleRate = fPlugin.getSampleRate(); + + fVstUI = new UIVst(fAudioMaster, fEffect, this, &fPlugin, (intptr_t)ptr); + +# if DISTRHO_PLUGIN_WANT_STATE + for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) + { + const String& key = cit->first; + const String& value = cit->second; + + fVstUI->setStateFromPlugin(key, value); + } +# endif + for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) + setParameterValueFromPlugin(i, fPlugin.getParameterValue(i)); + + fVstUI->idle(); + return 1; + } + break; + + case effEditClose: + if (fVstUI != nullptr) + { + delete fVstUI; + fVstUI = nullptr; + return 1; + } + break; + + //case effIdle: + case effEditIdle: + if (fVstUI != nullptr) + fVstUI->idle(); + break; +#endif // DISTRHO_PLUGIN_HAS_UI + +#if DISTRHO_PLUGIN_WANT_STATE + case effGetChunk: + if (ptr == nullptr) + return 0; + + if (fStateChunk != nullptr) + { + delete[] fStateChunk; + fStateChunk = nullptr; + } + + if (fPlugin.getStateCount() == 0) + { + fStateChunk = new char[1]; + fStateChunk[0] = '\0'; + return 1; + } + else + { + String chunkStr; + + for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) + { + const String& key = cit->first; + const String& value = cit->second; + + // join key and value + String tmpStr; + tmpStr = key; + tmpStr += "\xff"; + tmpStr += value; + tmpStr += "\xff"; + + chunkStr += tmpStr; + } + + const std::size_t chunkSize(chunkStr.length()+1); + + fStateChunk = new char[chunkSize]; + std::memcpy(fStateChunk, chunkStr.buffer(), chunkStr.length()); + fStateChunk[chunkSize] = '\0'; + + for (std::size_t i=0; isetStateFromPlugin(key, value); +# endif + + // get next key + key = value+(std::strlen(value)+1); + } + + return 1; + } +#endif // DISTRHO_PLUGIN_WANT_STATE + +#if DISTRHO_PLUGIN_WANT_MIDI_INPUT + case effProcessEvents: + if (! fPlugin.isActive()) + { + // host has not activated the plugin yet, nasty! + vst_dispatcher(effMainsChanged, 0, 1, nullptr, 0.0f); + } + + if (const VstEvents* const events = (const VstEvents*)ptr) + { + if (events->numEvents == 0) + break; + + for (int i=0, count=events->numEvents; i < count; ++i) + { + const VstMidiEvent* const vstMidiEvent((const VstMidiEvent*)events->events[i]); + + if (vstMidiEvent == nullptr) + break; + if (vstMidiEvent->type != kVstMidiType) + continue; + if (fMidiEventCount >= kMaxMidiEvents) + break; + + MidiEvent& midiEvent(fMidiEvents[fMidiEventCount++]); + midiEvent.frame = vstMidiEvent->deltaFrames; + midiEvent.size = 3; + std::memcpy(midiEvent.data, vstMidiEvent->midiData, sizeof(uint8_t)*3); + } + } + break; +#endif + + case effCanBeAutomated: + if (index < static_cast(fPlugin.getParameterCount())) + { + const uint32_t hints(fPlugin.getParameterHints(index)); + + // must be automable, and not output + if ((hints & kParameterIsAutomable) != 0 && (hints & kParameterIsOutput) == 0) + return 1; + } + break; + +#if DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_MIDI_OUTPUT || DISTRHO_PLUGIN_WANT_TIMEPOS || DISTRHO_OS_MAC + case effCanDo: + if (const char* const canDo = (const char*)ptr) + { +# if DISTRHO_OS_MAC && DISTRHO_PLUGIN_HAS_UI + if (std::strcmp(canDo, "hasCockosViewAsConfig") == 0) + { + fUsingNsView = true; + return 0xbeef0000; + } +# endif +# if DISTRHO_PLUGIN_WANT_MIDI_INPUT + if (std::strcmp(canDo, "receiveVstEvents") == 0) + return 1; + if (std::strcmp(canDo, "receiveVstMidiEvent") == 0) + return 1; +# endif +# if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT + if (std::strcmp(canDo, "sendVstEvents") == 0) + return 1; + if (std::strcmp(canDo, "sendVstMidiEvent") == 0) + return 1; +# endif +# if DISTRHO_PLUGIN_WANT_TIMEPOS + if (std::strcmp(canDo, "receiveVstTimeInfo") == 0) + return 1; +# endif + } + break; +#endif + + //case effStartProcess: + //case effStopProcess: + // unused + // break; + } + + return 0; + } + + float vst_getParameter(const int32_t index) + { + const ParameterRanges& ranges(fPlugin.getParameterRanges(index)); + return ranges.getNormalizedValue(fPlugin.getParameterValue(index)); + } + + void vst_setParameter(const int32_t index, const float value) + { + const ParameterRanges& ranges(fPlugin.getParameterRanges(index)); + const float realValue(ranges.getUnnormalizedValue(value)); + fPlugin.setParameterValue(index, realValue); + +#if DISTRHO_PLUGIN_HAS_UI + if (fVstUI != nullptr) + setParameterValueFromPlugin(index, realValue); +#endif + } + + void vst_processReplacing(const float** const inputs, float** const outputs, const int32_t sampleFrames) + { + if (sampleFrames <= 0) + return; + + if (! fPlugin.isActive()) + { + // host has not activated the plugin yet, nasty! + vst_dispatcher(effMainsChanged, 0, 1, nullptr, 0.0f); + } + +#if DISTRHO_PLUGIN_WANT_TIMEPOS + static const int kWantVstTimeFlags(kVstTransportPlaying|kVstPpqPosValid|kVstTempoValid|kVstTimeSigValid); + + if (const VstTimeInfo* const vstTimeInfo = (const VstTimeInfo*)hostCallback(audioMasterGetTime, 0, kWantVstTimeFlags)) + { + fTimePosition.frame = vstTimeInfo->samplePos; + fTimePosition.playing = (vstTimeInfo->flags & kVstTransportPlaying); + fTimePosition.bbt.valid = ((vstTimeInfo->flags & kVstTempoValid) != 0 || (vstTimeInfo->flags & kVstTimeSigValid) != 0); + + // ticksPerBeat is not possible with VST + fTimePosition.bbt.ticksPerBeat = 960.0; + + if (vstTimeInfo->flags & kVstTempoValid) + fTimePosition.bbt.beatsPerMinute = vstTimeInfo->tempo; + else + fTimePosition.bbt.beatsPerMinute = 120.0; + + if (vstTimeInfo->flags & (kVstPpqPosValid|kVstTimeSigValid)) + { + const int ppqPerBar = vstTimeInfo->timeSigNumerator * 4 / vstTimeInfo->timeSigDenominator; + const double barBeats = (std::fmod(vstTimeInfo->ppqPos, ppqPerBar) / ppqPerBar) * vstTimeInfo->timeSigDenominator; + const double rest = std::fmod(barBeats, 1.0); + + fTimePosition.bbt.bar = int(vstTimeInfo->ppqPos)/ppqPerBar + 1; + fTimePosition.bbt.beat = barBeats-rest+1; + fTimePosition.bbt.tick = rest*fTimePosition.bbt.ticksPerBeat+0.5; + fTimePosition.bbt.beatsPerBar = vstTimeInfo->timeSigNumerator; + fTimePosition.bbt.beatType = vstTimeInfo->timeSigDenominator; + } + else + { + fTimePosition.bbt.bar = 1; + fTimePosition.bbt.beat = 1; + fTimePosition.bbt.tick = 0; + fTimePosition.bbt.beatsPerBar = 4.0f; + fTimePosition.bbt.beatType = 4.0f; + } + + fTimePosition.bbt.barStartTick = fTimePosition.bbt.ticksPerBeat*fTimePosition.bbt.beatsPerBar*(fTimePosition.bbt.bar-1); + + fPlugin.setTimePosition(fTimePosition); + } +#endif + +#if DISTRHO_PLUGIN_WANT_MIDI_INPUT + fPlugin.run(inputs, outputs, sampleFrames, fMidiEvents, fMidiEventCount); + fMidiEventCount = 0; +#else + fPlugin.run(inputs, outputs, sampleFrames); +#endif + +#if DISTRHO_PLUGIN_HAS_UI + if (fVstUI == nullptr) + return; + + for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) + { + if (fPlugin.isParameterOutput(i)) + setParameterValueFromPlugin(i, fPlugin.getParameterValue(i)); + } +#endif + } + + // ------------------------------------------------------------------- + + friend class UIVst; + +private: + // VST stuff + const audioMasterCallback fAudioMaster; + AEffect* const fEffect; + + // Plugin + PluginExporter fPlugin; + + // Temporary data + char fProgramName[32+1]; + +#if DISTRHO_PLUGIN_WANT_MIDI_INPUT + uint32_t fMidiEventCount; + MidiEvent fMidiEvents[kMaxMidiEvents]; +#endif + +#if DISTRHO_PLUGIN_WANT_TIMEPOS + TimePosition fTimePosition; +#endif + + // UI stuff +#if DISTRHO_PLUGIN_HAS_UI + UIVst* fVstUI; + ERect fVstRect; +# if DISTRHO_OS_MAC + bool fUsingNsView; +# endif +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + char* fStateChunk; + StringMap fStateMap; +#endif + + // ------------------------------------------------------------------- + // host callback + + intptr_t hostCallback(const int32_t opcode, + const int32_t index = 0, + const intptr_t value = 0, + void* const ptr = nullptr, + const float opt = 0.0f) + { + return fAudioMaster(fEffect, opcode, index, value, ptr, opt); + } + + // ------------------------------------------------------------------- + // functions called from the plugin side, RT no block + +#if DISTRHO_PLUGIN_HAS_UI + void setParameterValueFromPlugin(const uint32_t index, const float realValue) + { + parameterValues[index] = realValue; + parameterChecks[index] = true; + } +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + // ------------------------------------------------------------------- + // functions called from the UI side, may block + +# if DISTRHO_PLUGIN_HAS_UI + void setStateFromUI(const char* const key, const char* const newValue) override +# else + void setStateFromUI(const char* const key, const char* const newValue) +# endif + { + fPlugin.setState(key, newValue); + + // check if we want to save this key + if (! fPlugin.wantStateKey(key)) + return; + + // check if key already exists + for (StringMap::iterator it=fStateMap.begin(), ite=fStateMap.end(); it != ite; ++it) + { + const String& dkey(it->first); + + if (dkey == key) + { + it->second = newValue; + return; + } + } + + d_stderr("Failed to find plugin state with key \"%s\"", key); + } +#endif +}; + +// ----------------------------------------------------------------------- + +struct VstObject { + audioMasterCallback audioMaster; + PluginVst* plugin; +}; + +#ifdef VESTIGE_HEADER +# define validObject effect != nullptr && effect->ptr3 != nullptr +# define validPlugin effect != nullptr && effect->ptr3 != nullptr && ((VstObject*)effect->ptr3)->plugin != nullptr +# define vstObjectPtr (VstObject*)effect->ptr3 +#else +# define validObject effect != nullptr && effect->object != nullptr +# define validPlugin effect != nullptr && effect->object != nullptr && ((VstObject*)effect->object)->plugin != nullptr +# define vstObjectPtr (VstObject*)effect->object +#endif + +#define pluginPtr (vstObjectPtr)->plugin + +static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t index, intptr_t value, void* ptr, float opt) +{ + // first internal init + const bool doInternalInit = (opcode == -1729 && index == 0xdead && value == 0xf00d); + + if (doInternalInit) + { + // set valid but dummy values + d_lastBufferSize = 512; + d_lastSampleRate = 44100.0; + } + + // Create dummy plugin to get data from + static PluginExporter plugin; + + if (doInternalInit) + { + // unset + d_lastBufferSize = 0; + d_lastSampleRate = 0.0; + + *(PluginExporter**)ptr = &plugin; + return 0; + } + + // handle base opcodes + switch (opcode) + { + case effOpen: + if (VstObject* const obj = vstObjectPtr) + { + // this must always be valid + DISTRHO_SAFE_ASSERT_RETURN(obj->audioMaster != nullptr, 0); + + // some hosts call effOpen twice + DISTRHO_SAFE_ASSERT_RETURN(obj->plugin == nullptr, 1); + + audioMasterCallback audioMaster = (audioMasterCallback)obj->audioMaster; + + d_lastBufferSize = audioMaster(effect, audioMasterGetBlockSize, 0, 0, nullptr, 0.0f); + d_lastSampleRate = audioMaster(effect, audioMasterGetSampleRate, 0, 0, nullptr, 0.0f); + + // some hosts are not ready at this point or return 0 buffersize/samplerate + if (d_lastBufferSize == 0) + d_lastBufferSize = 2048; + if (d_lastSampleRate <= 0.0) + d_lastSampleRate = 44100.0; + + obj->plugin = new PluginVst(audioMaster, effect); + return 1; + } + return 0; + + case effClose: + if (VstObject* const obj = vstObjectPtr) + { + if (obj->plugin != nullptr) + { + delete obj->plugin; + obj->plugin = nullptr; + } + +#if 0 + /* This code invalidates the object created in VSTPluginMain + * Probably not safe against all hosts */ + obj->audioMaster = nullptr; +# ifdef VESTIGE_HEADER + effect->ptr3 = nullptr; +# else + vstObjectPtr = nullptr; +# endif + delete obj; +#endif + + return 1; + } + //delete effect; + return 0; + + case effGetParamLabel: + if (ptr != nullptr && index < static_cast(plugin.getParameterCount())) + { + DISTRHO::strncpy((char*)ptr, plugin.getParameterUnit(index), 8); + return 1; + } + return 0; + + case effGetParamName: + if (ptr != nullptr && index < static_cast(plugin.getParameterCount())) + { + DISTRHO::strncpy((char*)ptr, plugin.getParameterName(index), 16); + return 1; + } + return 0; + + case effGetPlugCategory: +#if DISTRHO_PLUGIN_IS_SYNTH + return kPlugCategSynth; +#else + return kPlugCategEffect; +#endif + + case effGetEffectName: + if (char* const cptr = (char*)ptr) + { + DISTRHO::strncpy(cptr, plugin.getName(), 32); + return 1; + } + return 0; + + case effGetVendorString: + if (char* const cptr = (char*)ptr) + { + DISTRHO::strncpy(cptr, plugin.getMaker(), 32); + return 1; + } + return 0; + + case effGetProductString: + if (char* const cptr = (char*)ptr) + { + DISTRHO::strncpy(cptr, plugin.getLabel(), 32); + return 1; + } + return 0; + + case effGetVendorVersion: + return plugin.getVersion(); + + case effGetVstVersion: + return kVstVersion; + }; + + // handle advanced opcodes + if (validPlugin) + return pluginPtr->vst_dispatcher(opcode, index, value, ptr, opt); + + return 0; +} + +static float vst_getParameterCallback(AEffect* effect, int32_t index) +{ + if (validPlugin) + return pluginPtr->vst_getParameter(index); + return 0.0f; +} + +static void vst_setParameterCallback(AEffect* effect, int32_t index, float value) +{ + if (validPlugin) + pluginPtr->vst_setParameter(index, value); +} + +static void vst_processCallback(AEffect* effect, float** inputs, float** outputs, int32_t sampleFrames) +{ + if (validPlugin) + pluginPtr->vst_processReplacing(const_cast(inputs), outputs, sampleFrames); +} + +static void vst_processReplacingCallback(AEffect* effect, float** inputs, float** outputs, int32_t sampleFrames) +{ + if (validPlugin) + pluginPtr->vst_processReplacing(const_cast(inputs), outputs, sampleFrames); +} + +#undef pluginPtr +#undef validObject +#undef validPlugin +#undef vstObjectPtr + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +DISTRHO_PLUGIN_EXPORT +#if DISTRHO_OS_WINDOWS || DISTRHO_OS_MAC +const AEffect* VSTPluginMain(audioMasterCallback audioMaster); +#else +const AEffect* VSTPluginMain(audioMasterCallback audioMaster) asm ("main"); +#endif + +DISTRHO_PLUGIN_EXPORT +const AEffect* VSTPluginMain(audioMasterCallback audioMaster) +{ + USE_NAMESPACE_DISTRHO + + // old version + if (audioMaster(nullptr, audioMasterVersion, 0, 0, nullptr, 0.0f) == 0) + return nullptr; + + // first internal init + PluginExporter* plugin = nullptr; + vst_dispatcherCallback(nullptr, -1729, 0xdead, 0xf00d, &plugin, 0.0f); + DISTRHO_SAFE_ASSERT_RETURN(plugin != nullptr, nullptr); + + AEffect* const effect(new AEffect); + std::memset(effect, 0, sizeof(AEffect)); + + // vst fields + effect->magic = kEffectMagic; + effect->uniqueID = plugin->getUniqueId(); +#ifdef VESTIGE_HEADER + int32_t* const version = (int32_t*)&effect->unknown1; + *version = plugin->getVersion(); +#else + effect->version = plugin->getVersion(); +#endif + + // VST doesn't support parameter outputs, hide them + int numParams = 0; + bool outputsReached = false; + + for (uint32_t i=0, count=plugin->getParameterCount(); i < count; ++i) + { + if (! plugin->isParameterOutput(i)) + { + // parameter outputs must be all at the end + DISTRHO_SAFE_ASSERT_BREAK(! outputsReached); + ++numParams; + continue; + } + outputsReached = true; + } + + // plugin fields + effect->numParams = numParams; + effect->numPrograms = 1; + effect->numInputs = DISTRHO_PLUGIN_NUM_INPUTS; + effect->numOutputs = DISTRHO_PLUGIN_NUM_OUTPUTS; + + // plugin flags + effect->flags |= effFlagsCanReplacing; +#if DISTRHO_PLUGIN_IS_SYNTH + effect->flags |= effFlagsIsSynth; +#endif +#if DISTRHO_PLUGIN_HAS_UI + effect->flags |= effFlagsHasEditor; +#endif +#if DISTRHO_PLUGIN_WANT_STATE + effect->flags |= effFlagsProgramChunks; +#endif + + // static calls + effect->dispatcher = vst_dispatcherCallback; + effect->process = vst_processCallback; + effect->getParameter = vst_getParameterCallback; + effect->setParameter = vst_setParameterCallback; + effect->processReplacing = vst_processReplacingCallback; + + // pointers + VstObject* const obj(new VstObject()); + obj->audioMaster = audioMaster; + obj->plugin = nullptr; +#ifdef VESTIGE_HEADER + effect->ptr3 = obj; +#else + effect->object = obj; +#endif + + return effect; +} + +// ----------------------------------------------------------------------- diff --git a/dpf/distrho/src/DistrhoUI.cpp b/dpf/distrho/src/DistrhoUI.cpp new file mode 100644 index 0000000..a52a927 --- /dev/null +++ b/dpf/distrho/src/DistrhoUI.cpp @@ -0,0 +1,123 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "DistrhoUIInternal.hpp" +#include "src/WidgetPrivateData.hpp" + +START_NAMESPACE_DISTRHO + +/* ------------------------------------------------------------------------------------------------------------ + * Static data, see DistrhoUIInternal.hpp */ + +double d_lastUiSampleRate = 0.0; +void* d_lastUiDspPtr = nullptr; +Window* d_lastUiWindow = nullptr; + +/* ------------------------------------------------------------------------------------------------------------ + * UI */ + +UI::UI(uint width, uint height) + : UIWidget(*d_lastUiWindow), + pData(new PrivateData()) +{ + ((UIWidget*)this)->pData->needsFullViewport = false; + + if (width > 0 && height > 0) + setSize(width, height); +} + +UI::~UI() +{ + delete pData; +} + +/* ------------------------------------------------------------------------------------------------------------ + * Host state */ + +double UI::getSampleRate() const noexcept +{ + return pData->sampleRate; +} + +void UI::editParameter(uint32_t index, bool started) +{ + pData->editParamCallback(index + pData->parameterOffset, started); +} + +void UI::setParameterValue(uint32_t index, float value) +{ + pData->setParamCallback(index + pData->parameterOffset, value); +} + +#if DISTRHO_PLUGIN_WANT_STATE +void UI::setState(const char* key, const char* value) +{ + pData->setStateCallback(key, value); +} +#endif + +#if DISTRHO_PLUGIN_IS_SYNTH +void UI::sendNote(uint8_t channel, uint8_t note, uint8_t velocity) +{ + pData->sendNoteCallback(channel, note, velocity); +} +#endif + +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS +/* ------------------------------------------------------------------------------------------------------------ + * Direct DSP access */ + +void* UI::getPluginInstancePointer() const noexcept +{ + return pData->dspPtr; +} +#endif + +/* ------------------------------------------------------------------------------------------------------------ + * DSP/Plugin Callbacks (optional) */ + +void UI::sampleRateChanged(double) {} + +/* ------------------------------------------------------------------------------------------------------------ + * UI Callbacks (optional) */ + +void UI::uiFileBrowserSelected(const char*) +{ +} + +void UI::uiReshape(uint width, uint height) +{ + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0.0, static_cast(width), static_cast(height), 0.0, 0.0, 1.0); + glViewport(0, 0, static_cast(width), static_cast(height)); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + +/* ------------------------------------------------------------------------------------------------------------ + * UI Resize Handling, internal */ + +void UI::onResize(const ResizeEvent& ev) +{ + pData->setSizeCallback(ev.size.getWidth(), ev.size.getHeight()); +} + +// ----------------------------------------------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO diff --git a/dpf/distrho/src/DistrhoUIDSSI.cpp b/dpf/distrho/src/DistrhoUIDSSI.cpp new file mode 100644 index 0000000..d2868fd --- /dev/null +++ b/dpf/distrho/src/DistrhoUIDSSI.cpp @@ -0,0 +1,511 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "DistrhoUIInternal.hpp" + +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS +# error DSSI UIs do not support direct access! +#endif + +#include "../extra/Sleep.hpp" + +#include + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- + +struct OscData { + lo_address addr; + const char* path; + lo_server server; + + OscData() + : addr(nullptr), + path(nullptr), + server(nullptr) {} + + void idle() const + { + if (server == nullptr) + return; + + while (lo_server_recv_noblock(server, 0) != 0) {} + } + + void send_configure(const char* const key, const char* const value) const + { + char targetPath[std::strlen(path)+11]; + std::strcpy(targetPath, path); + std::strcat(targetPath, "/configure"); + lo_send(addr, targetPath, "ss", key, value); + } + + void send_control(const int32_t index, const float value) const + { + char targetPath[std::strlen(path)+9]; + std::strcpy(targetPath, path); + std::strcat(targetPath, "/control"); + lo_send(addr, targetPath, "if", index, value); + } + + void send_midi(uchar data[4]) const + { + char targetPath[std::strlen(path)+6]; + std::strcpy(targetPath, path); + std::strcat(targetPath, "/midi"); + lo_send(addr, targetPath, "m", data); + } + + void send_update(const char* const url) const + { + char targetPath[std::strlen(path)+8]; + std::strcpy(targetPath, path); + std::strcat(targetPath, "/update"); + lo_send(addr, targetPath, "s", url); + } + + void send_exiting() const + { + char targetPath[std::strlen(path)+9]; + std::strcpy(targetPath, path); + std::strcat(targetPath, "/exiting"); + lo_send(addr, targetPath, ""); + } +}; + +// ----------------------------------------------------------------------- + +class UIDssi +{ +public: + UIDssi(const OscData& oscData, const char* const uiTitle) + : fUI(this, 0, nullptr, setParameterCallback, setStateCallback, sendNoteCallback, setSizeCallback), + fHostClosed(false), + fOscData(oscData) + { + fUI.setWindowTitle(uiTitle); + } + + ~UIDssi() + { + if (fOscData.server != nullptr && ! fHostClosed) + fOscData.send_exiting(); + } + + void exec() + { + for (;;) + { + fOscData.idle(); + + if (fHostClosed || ! fUI.idle()) + break; + + d_msleep(30); + } + } + + // ------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_WANT_STATE + void dssiui_configure(const char* key, const char* value) + { + fUI.stateChanged(key, value); + } +#endif + + void dssiui_control(ulong index, float value) + { + fUI.parameterChanged(index, value); + } + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + void dssiui_program(ulong bank, ulong program) + { + fUI.programLoaded(bank * 128 + program); + } +#endif + + void dssiui_samplerate(const double sampleRate) + { + fUI.setSampleRate(sampleRate, true); + } + + void dssiui_show() + { + fUI.setWindowVisible(true); + } + + void dssiui_hide() + { + fUI.setWindowVisible(false); + } + + void dssiui_quit() + { + fHostClosed = true; + fUI.quit(); + } + + // ------------------------------------------------------------------- + +protected: + void setParameterValue(const uint32_t rindex, const float value) + { + if (fOscData.server == nullptr) + return; + + fOscData.send_control(rindex, value); + } + + void setState(const char* const key, const char* const value) + { + if (fOscData.server == nullptr) + return; + + fOscData.send_configure(key, value); + } + + void sendNote(const uint8_t channel, const uint8_t note, const uint8_t velocity) + { + if (fOscData.server == nullptr) + return; + if (channel > 0xF) + return; + + uint8_t mdata[4] = { 0, channel, note, velocity }; + mdata[1] += (velocity != 0) ? 0x90 : 0x80; + + fOscData.send_midi(mdata); + } + + void setSize(const uint width, const uint height) + { + fUI.setWindowSize(width, height); + } + +private: + UIExporter fUI; + bool fHostClosed; + + const OscData& fOscData; + + // ------------------------------------------------------------------- + // Callbacks + + #define uiPtr ((UIDssi*)ptr) + + static void setParameterCallback(void* ptr, uint32_t rindex, float value) + { + uiPtr->setParameterValue(rindex, value); + } + + static void setStateCallback(void* ptr, const char* key, const char* value) + { + uiPtr->setState(key, value); + } + + static void sendNoteCallback(void* ptr, uint8_t channel, uint8_t note, uint8_t velocity) + { + uiPtr->sendNote(channel, note, velocity); + } + + static void setSizeCallback(void* ptr, uint width, uint height) + { + uiPtr->setSize(width, height); + } + + #undef uiPtr +}; + +// ----------------------------------------------------------------------- + +static OscData gOscData; +static const char* gUiTitle = nullptr; +static UIDssi* globalUI = nullptr; + +static void initUiIfNeeded() +{ + if (globalUI != nullptr) + return; + + if (d_lastUiSampleRate == 0.0) + d_lastUiSampleRate = 44100.0; + + globalUI = new UIDssi(gOscData, gUiTitle); +} + +// ----------------------------------------------------------------------- + +int osc_debug_handler(const char* path, const char*, lo_arg**, int, lo_message, void*) +{ + d_debug("osc_debug_handler(\"%s\")", path); + return 0; + +#ifndef DEBUG + // unused + (void)path; +#endif +} + +void osc_error_handler(int num, const char* msg, const char* path) +{ + d_stderr("osc_error_handler(%i, \"%s\", \"%s\")", num, msg, path); +} + +#if DISTRHO_PLUGIN_WANT_STATE +int osc_configure_handler(const char*, const char*, lo_arg** argv, int, lo_message, void*) +{ + const char* const key = &argv[0]->s; + const char* const value = &argv[1]->s; + d_debug("osc_configure_handler(\"%s\", \"%s\")", key, value); + + initUiIfNeeded(); + + globalUI->dssiui_configure(key, value); + + return 0; +} +#endif + +int osc_control_handler(const char*, const char*, lo_arg** argv, int, lo_message, void*) +{ + const int32_t rindex = argv[0]->i; + const float value = argv[1]->f; + d_debug("osc_control_handler(%i, %f)", rindex, value); + + int32_t index = rindex - DISTRHO_PLUGIN_NUM_INPUTS - DISTRHO_PLUGIN_NUM_OUTPUTS; + + // latency +#if DISTRHO_PLUGIN_WANT_LATENCY + index -= 1; +#endif + + if (index < 0) + return 0; + + initUiIfNeeded(); + + globalUI->dssiui_control(index, value); + + return 0; +} + +#if DISTRHO_PLUGIN_WANT_PROGRAMS +int osc_program_handler(const char*, const char*, lo_arg** argv, int, lo_message, void*) +{ + const int32_t bank = argv[0]->i; + const int32_t program = argv[1]->f; + d_debug("osc_program_handler(%i, %i)", bank, program); + + initUiIfNeeded(); + + globalUI->dssiui_program(bank, program); + + return 0; +} +#endif + +int osc_sample_rate_handler(const char*, const char*, lo_arg** argv, int, lo_message, void*) +{ + const int32_t sampleRate = argv[0]->i; + d_debug("osc_sample_rate_handler(%i)", sampleRate); + + d_lastUiSampleRate = sampleRate; + + if (globalUI != nullptr) + globalUI->dssiui_samplerate(sampleRate); + + return 0; +} + +int osc_show_handler(const char*, const char*, lo_arg**, int, lo_message, void*) +{ + d_debug("osc_show_handler()"); + + initUiIfNeeded(); + + globalUI->dssiui_show(); + + return 0; +} + +int osc_hide_handler(const char*, const char*, lo_arg**, int, lo_message, void*) +{ + d_debug("osc_hide_handler()"); + + if (globalUI != nullptr) + globalUI->dssiui_hide(); + + return 0; +} + +int osc_quit_handler(const char*, const char*, lo_arg**, int, lo_message, void*) +{ + d_debug("osc_quit_handler()"); + + if (globalUI != nullptr) + globalUI->dssiui_quit(); + + return 0; +} + +END_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- + +int main(int argc, char* argv[]) +{ + USE_NAMESPACE_DISTRHO + + // dummy test mode + if (argc == 1) + { + gUiTitle = "DSSI UI Test"; + + initUiIfNeeded(); + globalUI->dssiui_show(); + globalUI->exec(); + + delete globalUI; + globalUI = nullptr; + + return 0; + } + + if (argc != 5) + { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + + const char* oscUrl = argv[1]; + const char* uiTitle = argv[4]; + + char* const oscHost = lo_url_get_hostname(oscUrl); + char* const oscPort = lo_url_get_port(oscUrl); + char* const oscPath = lo_url_get_path(oscUrl); + size_t oscPathSize = strlen(oscPath); + lo_address oscAddr = lo_address_new(oscHost, oscPort); + lo_server oscServer = lo_server_new_with_proto(nullptr, LO_UDP, osc_error_handler); + + char* const oscServerPath = lo_server_get_url(oscServer); + + char pluginPath[strlen(oscServerPath)+oscPathSize]; + strcpy(pluginPath, oscServerPath); + strcat(pluginPath, oscPath+1); + +#if DISTRHO_PLUGIN_WANT_STATE + char oscPathConfigure[oscPathSize+11]; + strcpy(oscPathConfigure, oscPath); + strcat(oscPathConfigure, "/configure"); + lo_server_add_method(oscServer, oscPathConfigure, "ss", osc_configure_handler, nullptr); +#endif + + char oscPathControl[oscPathSize+9]; + strcpy(oscPathControl, oscPath); + strcat(oscPathControl, "/control"); + lo_server_add_method(oscServer, oscPathControl, "if", osc_control_handler, nullptr); + + d_stdout("oscServerPath: \"%s\"", oscServerPath); + d_stdout("pluginPath: \"%s\"", pluginPath); + d_stdout("oscPathControl: \"%s\"", oscPathControl); + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + char oscPathProgram[oscPathSize+9]; + strcpy(oscPathProgram, oscPath); + strcat(oscPathProgram, "/program"); + lo_server_add_method(oscServer, oscPathProgram, "ii", osc_program_handler, nullptr); +#endif + + char oscPathSampleRate[oscPathSize+13]; + strcpy(oscPathSampleRate, oscPath); + strcat(oscPathSampleRate, "/sample-rate"); + lo_server_add_method(oscServer, oscPathSampleRate, "i", osc_sample_rate_handler, nullptr); + + char oscPathShow[oscPathSize+6]; + strcpy(oscPathShow, oscPath); + strcat(oscPathShow, "/show"); + lo_server_add_method(oscServer, oscPathShow, "", osc_show_handler, nullptr); + + char oscPathHide[oscPathSize+6]; + strcpy(oscPathHide, oscPath); + strcat(oscPathHide, "/hide"); + lo_server_add_method(oscServer, oscPathHide, "", osc_hide_handler, nullptr); + + char oscPathQuit[oscPathSize+6]; + strcpy(oscPathQuit, oscPath); + strcat(oscPathQuit, "/quit"); + lo_server_add_method(oscServer, oscPathQuit, "", osc_quit_handler, nullptr); + + lo_server_add_method(oscServer, nullptr, nullptr, osc_debug_handler, nullptr); + + gUiTitle = uiTitle; + + gOscData.addr = oscAddr; + gOscData.path = oscPath; + gOscData.server = oscServer; + gOscData.send_update(pluginPath); + + // wait for init + for (int i=0; i < 100; ++i) + { + lo_server_recv(oscServer); + + if (d_lastUiSampleRate != 0.0 || globalUI != nullptr) + break; + + d_msleep(50); + } + + int ret = 1; + + if (d_lastUiSampleRate != 0.0 || globalUI != nullptr) + { + initUiIfNeeded(); + + globalUI->exec(); + + delete globalUI; + globalUI = nullptr; + + ret = 0; + } + +#if DISTRHO_PLUGIN_WANT_STATE + lo_server_del_method(oscServer, oscPathConfigure, "ss"); +#endif + lo_server_del_method(oscServer, oscPathControl, "if"); +#if DISTRHO_PLUGIN_WANT_PROGRAMS + lo_server_del_method(oscServer, oscPathProgram, "ii"); +#endif + lo_server_del_method(oscServer, oscPathSampleRate, "i"); + lo_server_del_method(oscServer, oscPathShow, ""); + lo_server_del_method(oscServer, oscPathHide, ""); + lo_server_del_method(oscServer, oscPathQuit, ""); + lo_server_del_method(oscServer, nullptr, nullptr); + + std::free(oscServerPath); + std::free(oscHost); + std::free(oscPort); + std::free(oscPath); + + lo_address_free(oscAddr); + lo_server_free(oscServer); + + return ret; +} diff --git a/dpf/distrho/src/DistrhoUIInternal.hpp b/dpf/distrho/src/DistrhoUIInternal.hpp new file mode 100644 index 0000000..3872760 --- /dev/null +++ b/dpf/distrho/src/DistrhoUIInternal.hpp @@ -0,0 +1,393 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DISTRHO_UI_INTERNAL_HPP_INCLUDED +#define DISTRHO_UI_INTERNAL_HPP_INCLUDED + +#include "../DistrhoUI.hpp" +#include "../../dgl/Application.hpp" +#include "../../dgl/Window.hpp" + +using DGL::Application; +using DGL::IdleCallback; +using DGL::Window; + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- +// Static data, see DistrhoUI.cpp + +extern double d_lastUiSampleRate; +extern void* d_lastUiDspPtr; +extern Window* d_lastUiWindow; + +// ----------------------------------------------------------------------- +// UI callbacks + +typedef void (*editParamFunc) (void* ptr, uint32_t rindex, bool started); +typedef void (*setParamFunc) (void* ptr, uint32_t rindex, float value); +typedef void (*setStateFunc) (void* ptr, const char* key, const char* value); +typedef void (*sendNoteFunc) (void* ptr, uint8_t channel, uint8_t note, uint8_t velo); +typedef void (*setSizeFunc) (void* ptr, uint width, uint height); + +// ----------------------------------------------------------------------- +// UI private data + +struct UI::PrivateData { + // DSP + double sampleRate; + uint32_t parameterOffset; +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + void* dspPtr; +#endif + + // Callbacks + editParamFunc editParamCallbackFunc; + setParamFunc setParamCallbackFunc; + setStateFunc setStateCallbackFunc; + sendNoteFunc sendNoteCallbackFunc; + setSizeFunc setSizeCallbackFunc; + void* ptr; + + PrivateData() noexcept + : sampleRate(d_lastUiSampleRate), + parameterOffset(0), +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + dspPtr(d_lastUiDspPtr), +#endif + editParamCallbackFunc(nullptr), + setParamCallbackFunc(nullptr), + setStateCallbackFunc(nullptr), + sendNoteCallbackFunc(nullptr), + setSizeCallbackFunc(nullptr), + ptr(nullptr) + { + DISTRHO_SAFE_ASSERT(d_isNotZero(sampleRate)); + +#if defined(DISTRHO_PLUGIN_TARGET_DSSI) || defined(DISTRHO_PLUGIN_TARGET_LV2) + parameterOffset += DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS; +# if DISTRHO_PLUGIN_WANT_LATENCY + parameterOffset += 1; +# endif +#endif + +#ifdef DISTRHO_PLUGIN_TARGET_LV2 +# if (DISTRHO_PLUGIN_IS_SYNTH || DISTRHO_PLUGIN_WANT_TIMEPOS || DISTRHO_PLUGIN_WANT_STATE) + parameterOffset += 1; +# if DISTRHO_PLUGIN_WANT_STATE + parameterOffset += 1; +# endif +# endif +#endif + } + + void editParamCallback(const uint32_t rindex, const bool started) + { + if (editParamCallbackFunc != nullptr) + editParamCallbackFunc(ptr, rindex, started); + } + + void setParamCallback(const uint32_t rindex, const float value) + { + if (setParamCallbackFunc != nullptr) + setParamCallbackFunc(ptr, rindex, value); + } + + void setStateCallback(const char* const key, const char* const value) + { + if (setStateCallbackFunc != nullptr) + setStateCallbackFunc(ptr, key, value); + } + + void sendNoteCallback(const uint8_t channel, const uint8_t note, const uint8_t velocity) + { + if (sendNoteCallbackFunc != nullptr) + sendNoteCallbackFunc(ptr, channel, note, velocity); + } + + void setSizeCallback(const uint width, const uint height) + { + if (setSizeCallbackFunc != nullptr) + setSizeCallbackFunc(ptr, width, height); + } +}; + +// ----------------------------------------------------------------------- +// Plugin Window, needed to take care of resize properly + +static inline +UI* createUiWrapper(void* const dspPtr, Window* const window) +{ + d_lastUiDspPtr = dspPtr; + d_lastUiWindow = window; + UI* const ret = createUI(); + d_lastUiDspPtr = nullptr; + d_lastUiWindow = nullptr; + return ret; +} + +class UIExporterWindow : public Window +{ +public: + UIExporterWindow(Application& app, const intptr_t winId, void* const dspPtr) + : Window(app, winId), + fUI(createUiWrapper(dspPtr, this)), + fIsReady(false) + { + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); + + // set window size + setResizable(false); + setSize(fUI->getWidth(), fUI->getHeight()); + } + + ~UIExporterWindow() + { + delete fUI; + } + + UI* getUI() const noexcept + { + return fUI; + } + + bool isReady() const noexcept + { + return fIsReady; + } + +protected: + // custom window reshape + void onReshape(uint width, uint height) override + { + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); + + fUI->uiReshape(width, height); + fIsReady = true; + } + + // custom file-browser selected + void fileBrowserSelected(const char* filename) override + { + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); + + fUI->uiFileBrowserSelected(filename); + } + +private: + UI* const fUI; + bool fIsReady; +}; + +// ----------------------------------------------------------------------- +// UI exporter class + +class UIExporter +{ +public: + UIExporter(void* const ptr, const intptr_t winId, + const editParamFunc editParamCall, const setParamFunc setParamCall, const setStateFunc setStateCall, const sendNoteFunc sendNoteCall, const setSizeFunc setSizeCall, + void* const dspPtr = nullptr) + : glApp(), + glWindow(glApp, winId, dspPtr), + fChangingSize(false), + fUI(glWindow.getUI()), + fData((fUI != nullptr) ? fUI->pData : nullptr) + { + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); + + fData->ptr = ptr; + fData->editParamCallbackFunc = editParamCall; + fData->setParamCallbackFunc = setParamCall; + fData->setStateCallbackFunc = setStateCall; + fData->sendNoteCallbackFunc = sendNoteCall; + fData->setSizeCallbackFunc = setSizeCall; + } + + // ------------------------------------------------------------------- + + uint getWidth() const noexcept + { + return glWindow.getWidth(); + } + + uint getHeight() const noexcept + { + return glWindow.getHeight(); + } + + bool isVisible() const noexcept + { + return glWindow.isVisible(); + } + + // ------------------------------------------------------------------- + + intptr_t getWindowId() const noexcept + { + return glWindow.getWindowId(); + } + + // ------------------------------------------------------------------- + + uint32_t getParameterOffset() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, 0); + + return fData->parameterOffset; + } + + // ------------------------------------------------------------------- + + void parameterChanged(const uint32_t index, const float value) + { + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); + + fUI->parameterChanged(index, value); + } + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + void programLoaded(const uint32_t index) + { + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); + + fUI->programLoaded(index); + } +#endif + +#if DISTRHO_PLUGIN_WANT_STATE + void stateChanged(const char* const key, const char* const value) + { + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); + DISTRHO_SAFE_ASSERT_RETURN(value != nullptr,); + + fUI->stateChanged(key, value); + } +#endif + + // ------------------------------------------------------------------- + + void exec(IdleCallback* const cb) + { + DISTRHO_SAFE_ASSERT_RETURN(cb != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); + + glWindow.addIdleCallback(cb); + glWindow.setVisible(true); + glApp.exec(); + } + + void exec_idle() + { + if (glWindow.isReady()) + fUI->uiIdle(); + } + + bool idle() + { + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr, false); + + glApp.idle(); + + if (glWindow.isReady()) + fUI->uiIdle(); + + return ! glApp.isQuiting(); + } + + void quit() + { + glWindow.close(); + glApp.quit(); + } + + // ------------------------------------------------------------------- + + void setWindowSize(const uint width, const uint height, const bool updateUI = false) + { + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(! fChangingSize,); + + fChangingSize = true; + + if (updateUI) + fUI->setSize(width, height); + + glWindow.setSize(width, height); + + fChangingSize = false; + } + + void setWindowTitle(const char* const uiTitle) + { + glWindow.setTitle(uiTitle); + } + + void setWindowTransientWinId(const uintptr_t winId) + { + glWindow.setTransientWinId(winId); + } + + bool setWindowVisible(const bool yesNo) + { + glWindow.setVisible(yesNo); + + return ! glApp.isQuiting(); + } + + // ------------------------------------------------------------------- + + void setSampleRate(const double sampleRate, const bool doCallback = false) + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); + DISTRHO_SAFE_ASSERT(sampleRate > 0.0); + + if (d_isEqual(fData->sampleRate, sampleRate)) + return; + + fData->sampleRate = sampleRate; + + if (doCallback) + fUI->sampleRateChanged(sampleRate); + } + +private: + // ------------------------------------------------------------------- + // DGL Application and Window for this widget + + Application glApp; + UIExporterWindow glWindow; + + // prevent recursion + bool fChangingSize; + + // ------------------------------------------------------------------- + // Widget and DistrhoUI data + + UI* const fUI; + UI::PrivateData* const fData; + + DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UIExporter) +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +#endif // DISTRHO_UI_INTERNAL_HPP_INCLUDED diff --git a/dpf/distrho/src/DistrhoUILV2.cpp b/dpf/distrho/src/DistrhoUILV2.cpp new file mode 100644 index 0000000..7376a7b --- /dev/null +++ b/dpf/distrho/src/DistrhoUILV2.cpp @@ -0,0 +1,536 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2015 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "DistrhoUIInternal.hpp" + +#include "../extra/String.hpp" + +#include "lv2/atom.h" +#include "lv2/atom-util.h" +#include "lv2/data-access.h" +#include "lv2/instance-access.h" +#include "lv2/options.h" +#include "lv2/ui.h" +#include "lv2/urid.h" +#include "lv2/lv2_kxstudio_properties.h" +#include "lv2/lv2_programs.h" + +START_NAMESPACE_DISTRHO + +// ----------------------------------------------------------------------- + +class UiLv2 +{ +public: + UiLv2(const intptr_t winId, + const LV2_Options_Option* options, const LV2_URID_Map* const uridMap, const LV2UI_Resize* const uiResz, const LV2UI_Touch* uiTouch, + const LV2UI_Controller controller, const LV2UI_Write_Function writeFunc, + LV2UI_Widget* const widget, void* const dspPtr) + : fUI(this, winId, editParameterCallback, setParameterCallback, setStateCallback, sendNoteCallback, setSizeCallback, dspPtr), + fUridMap(uridMap), + fUiResize(uiResz), + fUiTouch(uiTouch), + fController(controller), + fWriteFunction(writeFunc), + fEventTransferURID(uridMap->map(uridMap->handle, LV2_ATOM__eventTransfer)), + fKeyValueURID(uridMap->map(uridMap->handle, "urn:distrho:keyValueState")), + fWinIdWasNull(winId == 0) + { + if (fUiResize != nullptr && winId != 0) + fUiResize->ui_resize(fUiResize->handle, fUI.getWidth(), fUI.getHeight()); + + if (widget != nullptr) + *widget = (LV2UI_Widget*)fUI.getWindowId(); + +#if DISTRHO_PLUGIN_WANT_STATE + // tell the DSP we're ready to receive msgs + setState("__dpf_ui_data__", ""); +#endif + + if (winId != 0) + return; + + // if winId == 0 then options must not be null + DISTRHO_SAFE_ASSERT_RETURN(options != nullptr,); + + const LV2_URID uridWindowTitle(uridMap->map(uridMap->handle, LV2_UI__windowTitle)); + const LV2_URID uridTransientWinId(uridMap->map(uridMap->handle, LV2_KXSTUDIO_PROPERTIES__TransientWindowId)); + + bool hasTitle = false; + + for (int i=0; options[i].key != 0; ++i) + { + if (options[i].key == uridTransientWinId) + { + if (options[i].type == uridMap->map(uridMap->handle, LV2_ATOM__Long)) + { + if (const int64_t transientWinId = *(const int64_t*)options[i].value) + fUI.setWindowTransientWinId(static_cast(transientWinId)); + } + else + d_stderr("Host provides transientWinId but has wrong value type"); + } + else if (options[i].key == uridWindowTitle) + { + if (options[i].type == uridMap->map(uridMap->handle, LV2_ATOM__String)) + { + if (const char* const windowTitle = (const char*)options[i].value) + { + hasTitle = true; + fUI.setWindowTitle(windowTitle); + } + } + else + d_stderr("Host provides windowTitle but has wrong value type"); + } + } + + if (! hasTitle) + fUI.setWindowTitle(DISTRHO_PLUGIN_NAME); + } + + // ------------------------------------------------------------------- + + void lv2ui_port_event(const uint32_t rindex, const uint32_t bufferSize, const uint32_t format, const void* const buffer) + { + if (format == 0) + { + const uint32_t parameterOffset(fUI.getParameterOffset()); + + DISTRHO_SAFE_ASSERT_RETURN(rindex >= parameterOffset,) + DISTRHO_SAFE_ASSERT_RETURN(bufferSize == sizeof(float),) + + const float value(*(const float*)buffer); + fUI.parameterChanged(rindex-parameterOffset, value); + } +#if DISTRHO_PLUGIN_WANT_STATE + else if (format == fEventTransferURID) + { + const LV2_Atom* const atom((const LV2_Atom*)buffer); + + DISTRHO_SAFE_ASSERT_RETURN(atom->type == fKeyValueURID,); + + const char* const key = (const char*)LV2_ATOM_BODY_CONST(atom); + const char* const value = key+(std::strlen(key)+1); + + fUI.stateChanged(key, value); + } +#endif + } + + // ------------------------------------------------------------------- + + int lv2ui_idle() + { + if (fWinIdWasNull) + return (fUI.idle() && fUI.isVisible()) ? 0 : 1; + + return fUI.idle() ? 0 : 1; + } + + int lv2ui_show() + { + return fUI.setWindowVisible(true) ? 0 : 1; + } + + int lv2ui_hide() + { + return fUI.setWindowVisible(false) ? 0 : 1; + } + + int lv2ui_resize(uint width, uint height) + { + fUI.setWindowSize(width, height, true); + return 0; + } + + // ------------------------------------------------------------------- + + uint32_t lv2_get_options(LV2_Options_Option* const /*options*/) + { + // currently unused + return LV2_OPTIONS_ERR_UNKNOWN; + } + + uint32_t lv2_set_options(const LV2_Options_Option* const options) + { + for (int i=0; options[i].key != 0; ++i) + { + if (options[i].key == fUridMap->map(fUridMap->handle, LV2_CORE__sampleRate)) + { + if (options[i].type == fUridMap->map(fUridMap->handle, LV2_ATOM__Double)) + { + const double sampleRate(*(const double*)options[i].value); + fUI.setSampleRate(sampleRate); + continue; + } + else + { + d_stderr("Host changed sampleRate but with wrong value type"); + continue; + } + } + } + + return LV2_OPTIONS_SUCCESS; + } + + // ------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + void lv2ui_select_program(const uint32_t bank, const uint32_t program) + { + const uint32_t realProgram(bank * 128 + program); + + fUI.programLoaded(realProgram); + } +#endif + + // ------------------------------------------------------------------- + +protected: + void editParameterValue(const uint32_t rindex, const bool started) + { + if (fUiTouch != nullptr && fUiTouch->touch != nullptr) + fUiTouch->touch(fUiTouch->handle, rindex, started); + } + + void setParameterValue(const uint32_t rindex, const float value) + { + DISTRHO_SAFE_ASSERT_RETURN(fWriteFunction != nullptr,); + + fWriteFunction(fController, rindex, sizeof(float), 0, &value); + } + + void setState(const char* const key, const char* const value) + { + DISTRHO_SAFE_ASSERT_RETURN(fWriteFunction != nullptr,); + + const uint32_t eventInPortIndex(DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS); + + // join key and value + String tmpStr; + tmpStr += key; + tmpStr += "\xff"; + tmpStr += value; + + tmpStr[std::strlen(key)] = '\0'; + + // set msg size (key + separator + value + null terminator) + const size_t msgSize(tmpStr.length()+1); + + // reserve atom space + const size_t atomSize(lv2_atom_pad_size(sizeof(LV2_Atom) + msgSize)); + char atomBuf[atomSize]; + std::memset(atomBuf, 0, atomSize); + + // set atom info + LV2_Atom* const atom((LV2_Atom*)atomBuf); + atom->size = msgSize; + atom->type = fKeyValueURID; + + // set atom data + std::memcpy(atomBuf + sizeof(LV2_Atom), tmpStr.buffer(), msgSize); + + // send to DSP side + fWriteFunction(fController, eventInPortIndex, atomSize, fEventTransferURID, atom); + } + + void sendNote(const uint8_t /*channel*/, const uint8_t /*note*/, const uint8_t /*velocity*/) + { + } + + void setSize(const uint width, const uint height) + { + fUI.setWindowSize(width, height); + + if (fUiResize != nullptr && ! fWinIdWasNull) + fUiResize->ui_resize(fUiResize->handle, width, height); + } + +private: + UIExporter fUI; + + // LV2 features + const LV2_URID_Map* const fUridMap; + const LV2UI_Resize* const fUiResize; + const LV2UI_Touch* const fUiTouch; + + // LV2 UI stuff + const LV2UI_Controller fController; + const LV2UI_Write_Function fWriteFunction; + + // Need to save this + const LV2_URID fEventTransferURID; + const LV2_URID fKeyValueURID; + + // using ui:showInterface if true + bool fWinIdWasNull; + + // ------------------------------------------------------------------- + // Callbacks + + #define uiPtr ((UiLv2*)ptr) + + static void editParameterCallback(void* ptr, uint32_t rindex, bool started) + { + uiPtr->editParameterValue(rindex, started); + } + + static void setParameterCallback(void* ptr, uint32_t rindex, float value) + { + uiPtr->setParameterValue(rindex, value); + } + + static void setStateCallback(void* ptr, const char* key, const char* value) + { + uiPtr->setState(key, value); + } + + static void sendNoteCallback(void* ptr, uint8_t channel, uint8_t note, uint8_t velocity) + { + uiPtr->sendNote(channel, note, velocity); + } + + static void setSizeCallback(void* ptr, uint width, uint height) + { + uiPtr->setSize(width, height); + } + + #undef uiPtr +}; + +// ----------------------------------------------------------------------- + +static LV2UI_Handle lv2ui_instantiate(const LV2UI_Descriptor*, const char* uri, const char*, LV2UI_Write_Function writeFunction, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features) +{ + if (uri == nullptr || std::strcmp(uri, DISTRHO_PLUGIN_URI) != 0) + { + d_stderr("Invalid plugin URI"); + return nullptr; + } + + const LV2_Options_Option* options = nullptr; + const LV2_URID_Map* uridMap = nullptr; + const LV2UI_Resize* uiResize = nullptr; + const LV2UI_Touch* uiTouch = nullptr; + void* parentId = nullptr; + void* instance = nullptr; + +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS +# define DISTRHO_DIRECT_ACCESS_URI "urn:distrho:direct-access" + + struct LV2_DirectAccess_Interface { + void* (*get_instance_pointer)(LV2_Handle handle); + }; + const LV2_Extension_Data_Feature* extData = nullptr; +#endif + + for (int i=0; features[i] != nullptr; ++i) + { + if (std::strcmp(features[i]->URI, LV2_OPTIONS__options) == 0) + options = (const LV2_Options_Option*)features[i]->data; + else if (std::strcmp(features[i]->URI, LV2_URID__map) == 0) + uridMap = (const LV2_URID_Map*)features[i]->data; + else if (std::strcmp(features[i]->URI, LV2_UI__resize) == 0) + uiResize = (const LV2UI_Resize*)features[i]->data; + else if (std::strcmp(features[i]->URI, LV2_UI__parent) == 0) + parentId = features[i]->data; +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + else if (std::strcmp(features[i]->URI, LV2_DATA_ACCESS_URI) == 0) + extData = (const LV2_Extension_Data_Feature*)features[i]->data; + else if (std::strcmp(features[i]->URI, LV2_INSTANCE_ACCESS_URI) == 0) + instance = features[i]->data; +#endif + } + + if (options == nullptr && parentId == nullptr) + { + d_stderr("Options feature missing (needed for show-interface), cannot continue!"); + return nullptr; + } + + if (uridMap == nullptr) + { + d_stderr("URID Map feature missing, cannot continue!"); + return nullptr; + } + + if (parentId == nullptr) + { + d_stdout("Parent Window Id missing, host should be using ui:showInterface..."); + } + +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + if (extData == nullptr || instance == nullptr) + { + d_stderr("Data or instance access missing, cannot continue!"); + return nullptr; + } + + if (const LV2_DirectAccess_Interface* const directAccess = (const LV2_DirectAccess_Interface*)extData->data_access(DISTRHO_DIRECT_ACCESS_URI)) + instance = directAccess->get_instance_pointer(instance); + else + instance = nullptr; + + if (instance == nullptr) + { + d_stderr("Failed to get direct access, cannot continue!"); + return nullptr; + } +#endif + + const intptr_t winId((intptr_t)parentId); + + if (options != nullptr) + { + const LV2_URID uridSampleRate(uridMap->map(uridMap->handle, LV2_CORE__sampleRate)); + + for (int i=0; options[i].key != 0; ++i) + { + if (options[i].key == uridSampleRate) + { + if (options[i].type == uridMap->map(uridMap->handle, LV2_ATOM__Double)) + d_lastUiSampleRate = *(const double*)options[i].value; + else + d_stderr("Host provides sampleRate but has wrong value type"); + + break; + } + } + } + + if (d_lastUiSampleRate == 0.0) + { + d_stdout("WARNING: this host does not send sample-rate information for LV2 UIs, using 44100 as fallback (this could be wrong)"); + d_lastUiSampleRate = 44100.0; + } + + return new UiLv2(winId, options, uridMap, uiResize, uiTouch, controller, writeFunction, widget, instance); +} + +#define uiPtr ((UiLv2*)ui) + +static void lv2ui_cleanup(LV2UI_Handle ui) +{ + delete uiPtr; +} + +static void lv2ui_port_event(LV2UI_Handle ui, uint32_t portIndex, uint32_t bufferSize, uint32_t format, const void* buffer) +{ + uiPtr->lv2ui_port_event(portIndex, bufferSize, format, buffer); +} + +// ----------------------------------------------------------------------- + +static int lv2ui_idle(LV2UI_Handle ui) +{ + return uiPtr->lv2ui_idle(); +} + +static int lv2ui_show(LV2UI_Handle ui) +{ + return uiPtr->lv2ui_show(); +} + +static int lv2ui_hide(LV2UI_Handle ui) +{ + return uiPtr->lv2ui_hide(); +} + +static int lv2ui_resize(LV2UI_Handle ui, int width, int height) +{ + DISTRHO_SAFE_ASSERT_RETURN(ui != nullptr, 1); + DISTRHO_SAFE_ASSERT_RETURN(width > 0, 1); + DISTRHO_SAFE_ASSERT_RETURN(height > 0, 1); + + return 1; // This needs more testing + //return uiPtr->lv2ui_resize(width, height); +} + +// ----------------------------------------------------------------------- + +static uint32_t lv2_get_options(LV2UI_Handle ui, LV2_Options_Option* options) +{ + return uiPtr->lv2_get_options(options); +} + +static uint32_t lv2_set_options(LV2UI_Handle ui, const LV2_Options_Option* options) +{ + return uiPtr->lv2_set_options(options); +} + +// ----------------------------------------------------------------------- + +#if DISTRHO_PLUGIN_WANT_PROGRAMS +static void lv2ui_select_program(LV2UI_Handle ui, uint32_t bank, uint32_t program) +{ + uiPtr->lv2ui_select_program(bank, program); +} +#endif + +// ----------------------------------------------------------------------- + +static const void* lv2ui_extension_data(const char* uri) +{ + static const LV2_Options_Interface options = { lv2_get_options, lv2_set_options }; + static const LV2UI_Idle_Interface uiIdle = { lv2ui_idle }; + static const LV2UI_Show_Interface uiShow = { lv2ui_show, lv2ui_hide }; + static const LV2UI_Resize uiResz = { nullptr, lv2ui_resize }; + + if (std::strcmp(uri, LV2_OPTIONS__interface) == 0) + return &options; + if (std::strcmp(uri, LV2_UI__idleInterface) == 0) + return &uiIdle; + if (std::strcmp(uri, LV2_UI__showInterface) == 0) + return &uiShow; + if (std::strcmp(uri, LV2_UI__resize) == 0) + return &uiResz; + +#if DISTRHO_PLUGIN_WANT_PROGRAMS + static const LV2_Programs_UI_Interface uiPrograms = { lv2ui_select_program }; + + if (std::strcmp(uri, LV2_PROGRAMS__UIInterface) == 0) + return &uiPrograms; +#endif + + return nullptr; +} + +#undef instancePtr + +// ----------------------------------------------------------------------- + +static const LV2UI_Descriptor sLv2UiDescriptor = { + DISTRHO_UI_URI, + lv2ui_instantiate, + lv2ui_cleanup, + lv2ui_port_event, + lv2ui_extension_data +}; + +// ----------------------------------------------------------------------- + +END_NAMESPACE_DISTRHO + +DISTRHO_PLUGIN_EXPORT +const LV2UI_Descriptor* lv2ui_descriptor(uint32_t index) +{ + USE_NAMESPACE_DISTRHO + return (index == 0) ? &sLv2UiDescriptor : nullptr; +} + +// ----------------------------------------------------------------------- diff --git a/dpf/distrho/src/dssi/dssi.h b/dpf/distrho/src/dssi/dssi.h new file mode 100644 index 0000000..ce36e18 --- /dev/null +++ b/dpf/distrho/src/dssi/dssi.h @@ -0,0 +1,441 @@ +/* -*- c-basic-offset: 4 -*- */ + +/* dssi.h + + DSSI version 1.0 + Copyright (c) 2004, 2009 Chris Cannam, Steve Harris and Sean Bolton + + 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 +*/ + +#ifndef DSSI_INCLUDED +#define DSSI_INCLUDED + +#include "../ladspa/ladspa.h" +#include "seq_event-compat.h" + +#define DSSI_VERSION "1.0" +#define DSSI_VERSION_MAJOR 1 +#define DSSI_VERSION_MINOR 0 + +#ifdef __cplusplus +extern "C" { +#endif + +/* + There is a need for an API that supports hosted MIDI soft synths + with GUIs in Linux audio applications. In time the GMPI initiative + should comprehensively address this need, but the requirement for + Linux applications to be able to support simple hosted synths is + here now, and GMPI is not. This proposal (the "DSSI Soft Synth + Interface" or DSSI, pronounced "dizzy") aims to provide a simple + solution in a way that we hope will prove complete and compelling + enough to support now, yet not so compelling as to supplant GMPI or + any other comprehensive future proposal. + + For simplicity and familiarity, this API is based as far as + possible on existing work -- the LADSPA plugin API for control + values and audio processing, and the ALSA sequencer event types for + MIDI event communication. The GUI part of the proposal is quite + new, but may also be applicable retroactively to LADSPA plugins + that do not otherwise support this synth interface. +*/ + +typedef struct _DSSI_Program_Descriptor { + + /** Bank number for this program. Note that DSSI does not support + MIDI-style separation of bank LSB and MSB values. There is no + restriction on the set of available banks: the numbers do not + need to be contiguous, there does not need to be a bank 0, etc. */ + unsigned long Bank; + + /** Program number (unique within its bank) for this program. + There is no restriction on the set of available programs: the + numbers do not need to be contiguous, there does not need to + be a program 0, etc. */ + unsigned long Program; + + /** Name of the program. */ + const char * Name; + +} DSSI_Program_Descriptor; + + +typedef struct _DSSI_Descriptor { + + /** + * DSSI_API_Version + * + * This member indicates the DSSI API level used by this plugin. + * If we're lucky, this will never be needed. For now all plugins + * must set it to 1. + */ + int DSSI_API_Version; + + /** + * LADSPA_Plugin + * + * A DSSI synth plugin consists of a LADSPA plugin plus an + * additional framework for controlling program settings and + * transmitting MIDI events. A plugin must fully implement the + * LADSPA descriptor fields as well as the required LADSPA + * functions including instantiate() and (de)activate(). It + * should also implement run(), with the same behaviour as if + * run_synth() (below) were called with no synth events. + * + * In order to instantiate a synth the host calls the LADSPA + * instantiate function, passing in this LADSPA_Descriptor + * pointer. The returned LADSPA_Handle is used as the argument + * for the DSSI functions below as well as for the LADSPA ones. + */ + const LADSPA_Descriptor *LADSPA_Plugin; + + /** + * configure() + * + * This member is a function pointer that sends a piece of + * configuration data to the plugin. The key argument specifies + * some aspect of the synth's configuration that is to be changed, + * and the value argument specifies a new value for it. A plugin + * that does not require this facility at all may set this member + * to NULL. + * + * This call is intended to set some session-scoped aspect of a + * plugin's behaviour, for example to tell the plugin to load + * sample data from a particular file. The plugin should act + * immediately on the request. The call should return NULL on + * success, or an error string that may be shown to the user. The + * host will free the returned value after use if it is non-NULL. + * + * Calls to configure() are not automated as timed events. + * Instead, a host should remember the last value associated with + * each key passed to configure() during a given session for a + * given plugin instance, and should call configure() with the + * correct value for each key the next time it instantiates the + * "same" plugin instance, for example on reloading a project in + * which the plugin was used before. Plugins should note that a + * host may typically instantiate a plugin multiple times with the + * same configuration values, and should share data between + * instances where practical. + * + * Calling configure() completely invalidates the program and bank + * information last obtained from the plugin. + * + * Reserved and special key prefixes + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * The DSSI: prefix + * ---------------- + * Configure keys starting with DSSI: are reserved for particular + * purposes documented in the DSSI specification. At the moment, + * there is one such key: DSSI:PROJECT_DIRECTORY. A host may call + * configure() passing this key and a directory path value. This + * indicates to the plugin and its UI that a directory at that + * path exists and may be used for project-local data. Plugins + * may wish to use the project directory as a fallback location + * when looking for other file data, or as a base for relative + * paths in other configuration values. + * + * The GLOBAL: prefix + * ------------------ + * Configure keys starting with GLOBAL: may be used by the plugin + * and its UI for any purpose, but are treated specially by the + * host. When one of these keys is used in a configure OSC call + * from the plugin UI, the host makes the corresponding configure + * call (preserving the GLOBAL: prefix) not only to the target + * plugin but also to all other plugins in the same instance + * group, as well as their UIs. Note that if any instance + * returns non-NULL from configure to indicate error, the host + * may stop there (and the set of plugins on which configure has + * been called will thus depend on the host implementation). + * See also the configure OSC call documentation in RFC.txt. + */ + char *(*configure)(LADSPA_Handle Instance, + const char *Key, + const char *Value); + + #define DSSI_RESERVED_CONFIGURE_PREFIX "DSSI:" + #define DSSI_GLOBAL_CONFIGURE_PREFIX "GLOBAL:" + #define DSSI_PROJECT_DIRECTORY_KEY \ + DSSI_RESERVED_CONFIGURE_PREFIX "PROJECT_DIRECTORY" + + /** + * get_program() + * + * This member is a function pointer that provides a description + * of a program (named preset sound) available on this synth. A + * plugin that does not support programs at all should set this + * member to NULL. + * + * The Index argument is an index into the plugin's list of + * programs, not a program number as represented by the Program + * field of the DSSI_Program_Descriptor. (This distinction is + * needed to support synths that use non-contiguous program or + * bank numbers.) + * + * This function returns a DSSI_Program_Descriptor pointer that is + * guaranteed to be valid only until the next call to get_program, + * deactivate, or configure, on the same plugin instance. This + * function must return NULL if passed an Index argument out of + * range, so that the host can use it to query the number of + * programs as well as their properties. + */ + const DSSI_Program_Descriptor *(*get_program)(LADSPA_Handle Instance, + unsigned long Index); + + /** + * select_program() + * + * This member is a function pointer that selects a new program + * for this synth. The program change should take effect + * immediately at the start of the next run_synth() call. (This + * means that a host providing the capability of changing programs + * between any two notes on a track must vary the block size so as + * to place the program change at the right place. A host that + * wanted to avoid this would probably just instantiate a plugin + * for each program.) + * + * A plugin that does not support programs at all should set this + * member NULL. Plugins should ignore a select_program() call + * with an invalid bank or program. + * + * A plugin is not required to select any particular default + * program on activate(): it's the host's duty to set a program + * explicitly. The current program is invalidated by any call to + * configure(). + * + * A plugin is permitted to re-write the values of its input + * control ports when select_program is called. The host should + * re-read the input control port values and update its own + * records appropriately. (This is the only circumstance in + * which a DSSI plugin is allowed to modify its own input ports.) + */ + void (*select_program)(LADSPA_Handle Instance, + unsigned long Bank, + unsigned long Program); + + /** + * get_midi_controller_for_port() + * + * This member is a function pointer that returns the MIDI + * controller number or NRPN that should be mapped to the given + * input control port. If the given port should not have any MIDI + * controller mapped to it, the function should return DSSI_NONE. + * The behaviour of this function is undefined if the given port + * number does not correspond to an input control port. A plugin + * that does not want MIDI controllers mapped to ports at all may + * set this member NULL. + * + * Correct values can be got using the macros DSSI_CC(num) and + * DSSI_NRPN(num) as appropriate, and values can be combined using + * bitwise OR: e.g. DSSI_CC(23) | DSSI_NRPN(1069) means the port + * should respond to CC #23 and NRPN #1069. + * + * The host is responsible for doing proper scaling from MIDI + * controller and NRPN value ranges to port ranges according to + * the plugin's LADSPA port hints. Hosts should not deliver + * through run_synth any MIDI controller events that have already + * been mapped to control port values. + * + * A plugin should not attempt to request mappings from + * controllers 0 or 32 (MIDI Bank Select MSB and LSB). + */ + int (*get_midi_controller_for_port)(LADSPA_Handle Instance, + unsigned long Port); + + /** + * run_synth() + * + * This member is a function pointer that runs a synth for a + * block. This is identical in function to the LADSPA run() + * function, except that it also supplies events to the synth. + * + * A plugin may provide this function, run_multiple_synths() (see + * below), both, or neither (if it is not in fact a synth). A + * plugin that does not provide this function must set this member + * to NULL. Authors of synth plugins are encouraged to provide + * this function if at all possible. + * + * The Events pointer points to a block of EventCount ALSA + * sequencer events, which is used to communicate MIDI and related + * events to the synth. Each event is timestamped relative to the + * start of the block, (mis)using the ALSA "tick time" field as a + * frame count. The host is responsible for ensuring that events + * with differing timestamps are already ordered by time. + * + * See also the notes on activation, port connection etc in + * ladpsa.h, in the context of the LADSPA run() function. + * + * Note Events + * ~~~~~~~~~~~ + * There are two minor requirements aimed at making the plugin + * writer's life as simple as possible: + * + * 1. A host must never send events of type SND_SEQ_EVENT_NOTE. + * Notes should always be sent as separate SND_SEQ_EVENT_NOTE_ON + * and NOTE_OFF events. A plugin should discard any one-point + * NOTE events it sees. + * + * 2. A host must not attempt to switch notes off by sending + * zero-velocity NOTE_ON events. It should always send true + * NOTE_OFFs. It is the host's responsibility to remap events in + * cases where an external MIDI source has sent it zero-velocity + * NOTE_ONs. + * + * Bank and Program Events + * ~~~~~~~~~~~~~~~~~~~~~~~ + * Hosts must map MIDI Bank Select MSB and LSB (0 and 32) + * controllers and MIDI Program Change events onto the banks and + * programs specified by the plugin, using the DSSI select_program + * call. No host should ever deliver a program change or bank + * select controller to a plugin via run_synth. + */ + void (*run_synth)(LADSPA_Handle Instance, + unsigned long SampleCount, + snd_seq_event_t *Events, + unsigned long EventCount); + + /** + * run_synth_adding() + * + * This member is a function pointer that runs an instance of a + * synth for a block, adding its outputs to the values already + * present at the output ports. This is provided for symmetry + * with LADSPA run_adding(), and is equally optional. A plugin + * that does not provide it must set this member to NULL. + */ + void (*run_synth_adding)(LADSPA_Handle Instance, + unsigned long SampleCount, + snd_seq_event_t *Events, + unsigned long EventCount); + + /** + * run_multiple_synths() + * + * This member is a function pointer that runs multiple synth + * instances for a block. This is very similar to run_synth(), + * except that Instances, Events, and EventCounts each point to + * arrays that hold the LADSPA handles, event buffers, and + * event counts for each of InstanceCount instances. That is, + * Instances points to an array of InstanceCount pointers to + * DSSI plugin instantiations, Events points to an array of + * pointers to each instantiation's respective event list, and + * EventCounts points to an array containing each instantiation's + * respective event count. + * + * A host using this function must guarantee that ALL active + * instances of the plugin are represented in each call to the + * function -- that is, a host may not call run_multiple_synths() + * for some instances of a given plugin and then call run_synth() + * as well for others. 'All .. instances of the plugin' means + * every instance sharing the same LADSPA label and shared object + * (*.so) file (rather than every instance sharing the same *.so). + * 'Active' means any instance for which activate() has been called + * but deactivate() has not. + * + * A plugin may provide this function, run_synths() (see above), + * both, or neither (if it not in fact a synth). A plugin that + * does not provide this function must set this member to NULL. + * Plugin authors implementing run_multiple_synths are strongly + * encouraged to implement run_synth as well if at all possible, + * to aid simplistic hosts, even where it would be less efficient + * to use it. + */ + void (*run_multiple_synths)(unsigned long InstanceCount, + LADSPA_Handle *Instances, + unsigned long SampleCount, + snd_seq_event_t **Events, + unsigned long *EventCounts); + + /** + * run_multiple_synths_adding() + * + * This member is a function pointer that runs multiple synth + * instances for a block, adding each synth's outputs to the + * values already present at the output ports. This is provided + * for symmetry with both the DSSI run_multiple_synths() and LADSPA + * run_adding() functions, and is equally optional. A plugin + * that does not provide it must set this member to NULL. + */ + void (*run_multiple_synths_adding)(unsigned long InstanceCount, + LADSPA_Handle *Instances, + unsigned long SampleCount, + snd_seq_event_t **Events, + unsigned long *EventCounts); + + /** + * set_custom_data() + */ + int (*set_custom_data)(LADSPA_Handle Instance, + void *Data, + unsigned long DataLength); + + /** + * get_custom_data() + */ + int (*get_custom_data)(LADSPA_Handle Instance, + void **Data, + unsigned long *DataLength); + +} DSSI_Descriptor; + +/** + * DSSI supports a plugin discovery method similar to that of LADSPA: + * + * - DSSI hosts may wish to locate DSSI plugin shared object files by + * searching the paths contained in the DSSI_PATH and LADSPA_PATH + * environment variables, if they are present. Both are expected + * to be colon-separated lists of directories to be searched (in + * order), and DSSI_PATH should be searched first if both variables + * are set. + * + * - Each shared object file containing DSSI plugins must include a + * function dssi_descriptor(), with the following function prototype + * and C-style linkage. Hosts may enumerate the plugin types + * available in the shared object file by repeatedly calling + * this function with successive Index values (beginning from 0), + * until a return value of NULL indicates no more plugin types are + * available. Each non-NULL return is the DSSI_Descriptor + * of a distinct plugin type. + */ + +const DSSI_Descriptor *dssi_descriptor(unsigned long Index); + +typedef const DSSI_Descriptor *(*DSSI_Descriptor_Function)(unsigned long Index); + +/* + * Macros to specify particular MIDI controllers in return values from + * get_midi_controller_for_port() + */ + +#define DSSI_CC_BITS 0x20000000 +#define DSSI_NRPN_BITS 0x40000000 + +#define DSSI_NONE -1 +#define DSSI_CONTROLLER_IS_SET(n) (DSSI_NONE != (n)) + +#define DSSI_CC(n) (DSSI_CC_BITS | (n)) +#define DSSI_IS_CC(n) (DSSI_CC_BITS & (n)) +#define DSSI_CC_NUMBER(n) ((n) & 0x7f) + +#define DSSI_NRPN(n) (DSSI_NRPN_BITS | ((n) << 7)) +#define DSSI_IS_NRPN(n) (DSSI_NRPN_BITS & (n)) +#define DSSI_NRPN_NUMBER(n) (((n) >> 7) & 0x3fff) + +#ifdef __cplusplus +} +#endif + +#endif /* DSSI_INCLUDED */ diff --git a/dpf/distrho/src/dssi/seq_event-compat.h b/dpf/distrho/src/dssi/seq_event-compat.h new file mode 100644 index 0000000..6619c23 --- /dev/null +++ b/dpf/distrho/src/dssi/seq_event-compat.h @@ -0,0 +1,272 @@ +/* + * 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 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 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 + * + */ + +#ifndef __ALSA_SEQ_EVENT_COMPAT_H +#define __ALSA_SEQ_EVENT_COMPAT_H + +/** + * Sequencer event data type + */ +typedef unsigned char snd_seq_event_type_t; + +/** Sequencer event type */ +enum snd_seq_event_type { + /** system status; event data type = #snd_seq_result_t */ + SND_SEQ_EVENT_SYSTEM = 0, + /** returned result status; event data type = #snd_seq_result_t */ + SND_SEQ_EVENT_RESULT, + + /** note on and off with duration; event data type = #snd_seq_ev_note_t */ + SND_SEQ_EVENT_NOTE = 5, + /** note on; event data type = #snd_seq_ev_note_t */ + SND_SEQ_EVENT_NOTEON, + /** note off; event data type = #snd_seq_ev_note_t */ + SND_SEQ_EVENT_NOTEOFF, + /** key pressure change (aftertouch); event data type = #snd_seq_ev_note_t */ + SND_SEQ_EVENT_KEYPRESS, + + /** controller; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_CONTROLLER = 10, + /** program change; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_PGMCHANGE, + /** channel pressure; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_CHANPRESS, + /** pitchwheel; event data type = #snd_seq_ev_ctrl_t; data is from -8192 to 8191) */ + SND_SEQ_EVENT_PITCHBEND, + /** 14 bit controller value; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_CONTROL14, + /** 14 bit NRPN; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_NONREGPARAM, + /** 14 bit RPN; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_REGPARAM, + + /** SPP with LSB and MSB values; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_SONGPOS = 20, + /** Song Select with song ID number; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_SONGSEL, + /** midi time code quarter frame; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_QFRAME, + /** SMF Time Signature event; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_TIMESIGN, + /** SMF Key Signature event; event data type = #snd_seq_ev_ctrl_t */ + SND_SEQ_EVENT_KEYSIGN, + + /** MIDI Real Time Start message; event data type = #snd_seq_ev_queue_control_t */ + SND_SEQ_EVENT_START = 30, + /** MIDI Real Time Continue message; event data type = #snd_seq_ev_queue_control_t */ + SND_SEQ_EVENT_CONTINUE, + /** MIDI Real Time Stop message; event data type = #snd_seq_ev_queue_control_t */ + SND_SEQ_EVENT_STOP, + /** Set tick queue position; event data type = #snd_seq_ev_queue_control_t */ + SND_SEQ_EVENT_SETPOS_TICK, + /** Set real-time queue position; event data type = #snd_seq_ev_queue_control_t */ + SND_SEQ_EVENT_SETPOS_TIME, + /** (SMF) Tempo event; event data type = #snd_seq_ev_queue_control_t */ + SND_SEQ_EVENT_TEMPO, + /** MIDI Real Time Clock message; event data type = #snd_seq_ev_queue_control_t */ + SND_SEQ_EVENT_CLOCK, + /** MIDI Real Time Tick message; event data type = #snd_seq_ev_queue_control_t */ + SND_SEQ_EVENT_TICK, + /** Queue timer skew; event data type = #snd_seq_ev_queue_control_t */ + SND_SEQ_EVENT_QUEUE_SKEW, + /** Sync position changed; event data type = #snd_seq_ev_queue_control_t */ + SND_SEQ_EVENT_SYNC_POS, + + /** Tune request; event data type = none */ + SND_SEQ_EVENT_TUNE_REQUEST = 40, + /** Reset to power-on state; event data type = none */ + SND_SEQ_EVENT_RESET, + /** Active sensing event; event data type = none */ + SND_SEQ_EVENT_SENSING, + + /** Echo-back event; event data type = any type */ + SND_SEQ_EVENT_ECHO = 50, + /** OSS emulation raw event; event data type = any type */ + SND_SEQ_EVENT_OSS, + + /** New client has connected; event data type = #snd_seq_addr_t */ + SND_SEQ_EVENT_CLIENT_START = 60, + /** Client has left the system; event data type = #snd_seq_addr_t */ + SND_SEQ_EVENT_CLIENT_EXIT, + /** Client status/info has changed; event data type = #snd_seq_addr_t */ + SND_SEQ_EVENT_CLIENT_CHANGE, + /** New port was created; event data type = #snd_seq_addr_t */ + SND_SEQ_EVENT_PORT_START, + /** Port was deleted from system; event data type = #snd_seq_addr_t */ + SND_SEQ_EVENT_PORT_EXIT, + /** Port status/info has changed; event data type = #snd_seq_addr_t */ + SND_SEQ_EVENT_PORT_CHANGE, + + /** Ports connected; event data type = #snd_seq_connect_t */ + SND_SEQ_EVENT_PORT_SUBSCRIBED, + /** Ports disconnected; event data type = #snd_seq_connect_t */ + SND_SEQ_EVENT_PORT_UNSUBSCRIBED, + + /** user-defined event; event data type = any (fixed size) */ + SND_SEQ_EVENT_USR0 = 90, + /** user-defined event; event data type = any (fixed size) */ + SND_SEQ_EVENT_USR1, + /** user-defined event; event data type = any (fixed size) */ + SND_SEQ_EVENT_USR2, + /** user-defined event; event data type = any (fixed size) */ + SND_SEQ_EVENT_USR3, + /** user-defined event; event data type = any (fixed size) */ + SND_SEQ_EVENT_USR4, + /** user-defined event; event data type = any (fixed size) */ + SND_SEQ_EVENT_USR5, + /** user-defined event; event data type = any (fixed size) */ + SND_SEQ_EVENT_USR6, + /** user-defined event; event data type = any (fixed size) */ + SND_SEQ_EVENT_USR7, + /** user-defined event; event data type = any (fixed size) */ + SND_SEQ_EVENT_USR8, + /** user-defined event; event data type = any (fixed size) */ + SND_SEQ_EVENT_USR9, + + /** system exclusive data (variable length); event data type = #snd_seq_ev_ext_t */ + SND_SEQ_EVENT_SYSEX = 130, + /** error event; event data type = #snd_seq_ev_ext_t */ + SND_SEQ_EVENT_BOUNCE, + /** reserved for user apps; event data type = #snd_seq_ev_ext_t */ + SND_SEQ_EVENT_USR_VAR0 = 135, + /** reserved for user apps; event data type = #snd_seq_ev_ext_t */ + SND_SEQ_EVENT_USR_VAR1, + /** reserved for user apps; event data type = #snd_seq_ev_ext_t */ + SND_SEQ_EVENT_USR_VAR2, + /** reserved for user apps; event data type = #snd_seq_ev_ext_t */ + SND_SEQ_EVENT_USR_VAR3, + /** reserved for user apps; event data type = #snd_seq_ev_ext_t */ + SND_SEQ_EVENT_USR_VAR4, + + /** NOP; ignored in any case */ + SND_SEQ_EVENT_NONE = 255 +}; + +/** Sequencer event address */ +typedef struct snd_seq_addr { + unsigned char client; /**< Client id */ + unsigned char port; /**< Port id */ +} snd_seq_addr_t; + +/** Connection (subscription) between ports */ +typedef struct snd_seq_connect { + snd_seq_addr_t sender; /**< sender address */ + snd_seq_addr_t dest; /**< destination address */ +} snd_seq_connect_t; + +/** Real-time data record */ +typedef struct snd_seq_real_time { + unsigned int tv_sec; /**< seconds */ + unsigned int tv_nsec; /**< nanoseconds */ +} snd_seq_real_time_t; + +/** (MIDI) Tick-time data record */ +typedef unsigned int snd_seq_tick_time_t; + +/** unioned time stamp */ +typedef union snd_seq_timestamp { + snd_seq_tick_time_t tick; /**< tick-time */ + struct snd_seq_real_time time; /**< real-time */ +} snd_seq_timestamp_t; + +/** Note event */ +typedef struct snd_seq_ev_note { + unsigned char channel; /**< channel number */ + unsigned char note; /**< note */ + unsigned char velocity; /**< velocity */ + unsigned char off_velocity; /**< note-off velocity; only for #SND_SEQ_EVENT_NOTE */ + unsigned int duration; /**< duration until note-off; only for #SND_SEQ_EVENT_NOTE */ +} snd_seq_ev_note_t; + +/** Controller event */ +typedef struct snd_seq_ev_ctrl { + unsigned char channel; /**< channel number */ + unsigned char unused[3]; /**< reserved */ + unsigned int param; /**< control parameter */ + signed int value; /**< control value */ +} snd_seq_ev_ctrl_t; + +/** generic set of bytes (12x8 bit) */ +typedef struct snd_seq_ev_raw8 { + unsigned char d[12]; /**< 8 bit value */ +} snd_seq_ev_raw8_t; + +/** generic set of integers (3x32 bit) */ +typedef struct snd_seq_ev_raw32 { + unsigned int d[3]; /**< 32 bit value */ +} snd_seq_ev_raw32_t; + +/** external stored data */ +typedef struct snd_seq_ev_ext { + unsigned int len; /**< length of data */ + void *ptr; /**< pointer to data (note: can be 64-bit) */ +} __attribute__((packed)) snd_seq_ev_ext_t; + +/** Result events */ +typedef struct snd_seq_result { + int event; /**< processed event type */ + int result; /**< status */ +} snd_seq_result_t; + +/** Queue skew values */ +typedef struct snd_seq_queue_skew { + unsigned int value; /**< skew value */ + unsigned int base; /**< skew base */ +} snd_seq_queue_skew_t; + +/** queue timer control */ +typedef struct snd_seq_ev_queue_control { + unsigned char queue; /**< affected queue */ + unsigned char unused[3]; /**< reserved */ + union { + signed int value; /**< affected value (e.g. tempo) */ + snd_seq_timestamp_t time; /**< time */ + unsigned int position; /**< sync position */ + snd_seq_queue_skew_t skew; /**< queue skew */ + unsigned int d32[2]; /**< any data */ + unsigned char d8[8]; /**< any data */ + } param; /**< data value union */ +} snd_seq_ev_queue_control_t; + +/** Sequencer event */ +typedef struct snd_seq_event { + snd_seq_event_type_t type; /**< event type */ + unsigned char flags; /**< event flags */ + unsigned char tag; /**< tag */ + + unsigned char queue; /**< schedule queue */ + snd_seq_timestamp_t time; /**< schedule time */ + + snd_seq_addr_t source; /**< source address */ + snd_seq_addr_t dest; /**< destination address */ + + union { + snd_seq_ev_note_t note; /**< note information */ + snd_seq_ev_ctrl_t control; /**< MIDI control information */ + snd_seq_ev_raw8_t raw8; /**< raw8 data */ + snd_seq_ev_raw32_t raw32; /**< raw32 data */ + snd_seq_ev_ext_t ext; /**< external data */ + snd_seq_ev_queue_control_t queue; /**< queue control */ + snd_seq_timestamp_t time; /**< timestamp */ + snd_seq_addr_t addr; /**< address */ + snd_seq_connect_t connect; /**< connect information */ + snd_seq_result_t result; /**< operation result code */ + } data; /**< event data... */ +} snd_seq_event_t; + +#endif /* __ALSA_SEQ_EVENT_COMPAT_H */ + diff --git a/dpf/distrho/src/ladspa/ladspa.h b/dpf/distrho/src/ladspa/ladspa.h new file mode 100644 index 0000000..5c30a8a --- /dev/null +++ b/dpf/distrho/src/ladspa/ladspa.h @@ -0,0 +1,603 @@ +/* ladspa.h + + Linux Audio Developer's Simple Plugin API Version 1.1[LGPL]. + Copyright (C) 2000-2002 Richard W.E. Furse, Paul Barton-Davis, + Stefan Westerfeld. + + 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. */ + +#ifndef LADSPA_INCLUDED +#define LADSPA_INCLUDED + +#define LADSPA_VERSION "1.1" +#define LADSPA_VERSION_MAJOR 1 +#define LADSPA_VERSION_MINOR 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/*****************************************************************************/ + +/* Overview: + + There is a large number of synthesis packages in use or development + on the Linux platform at this time. This API (`The Linux Audio + Developer's Simple Plugin API') attempts to give programmers the + ability to write simple `plugin' audio processors in C/C++ and link + them dynamically (`plug') into a range of these packages (`hosts'). + It should be possible for any host and any plugin to communicate + completely through this interface. + + This API is deliberately short and simple. To achieve compatibility + with a range of promising Linux sound synthesis packages it + attempts to find the `greatest common divisor' in their logical + behaviour. Having said this, certain limiting decisions are + implicit, notably the use of a fixed type (LADSPA_Data) for all + data transfer and absence of a parameterised `initialisation' + phase. See below for the LADSPA_Data typedef. + + Plugins are expected to distinguish between control and audio + data. Plugins have `ports' that are inputs or outputs for audio or + control data and each plugin is `run' for a `block' corresponding + to a short time interval measured in samples. Audio data is + communicated using arrays of LADSPA_Data, allowing a block of audio + to be processed by the plugin in a single pass. Control data is + communicated using single LADSPA_Data values. Control data has a + single value at the start of a call to the `run()' or `run_adding()' + function, and may be considered to remain this value for its + duration. The plugin may assume that all its input and output ports + have been connected to the relevant data location (see the + `connect_port()' function below) before it is asked to run. + + Plugins will reside in shared object files suitable for dynamic + linking by dlopen() and family. The file will provide a number of + `plugin types' that can be used to instantiate actual plugins + (sometimes known as `plugin instances') that can be connected + together to perform tasks. + + This API contains very limited error-handling. */ + +/*****************************************************************************/ + +/* Fundamental data type passed in and out of plugin. This data type + is used to communicate audio samples and control values. It is + assumed that the plugin will work sensibly given any numeric input + value although it may have a preferred range (see hints below). + + For audio it is generally assumed that 1.0f is the `0dB' reference + amplitude and is a `normal' signal level. */ + +typedef float LADSPA_Data; + +/*****************************************************************************/ + +/* Special Plugin Properties: + + Optional features of the plugin type are encapsulated in the + LADSPA_Properties type. This is assembled by ORing individual + properties together. */ + +typedef int LADSPA_Properties; + +/* Property LADSPA_PROPERTY_REALTIME indicates that the plugin has a + real-time dependency (e.g. listens to a MIDI device) and so its + output must not be cached or subject to significant latency. */ +#define LADSPA_PROPERTY_REALTIME 0x1 + +/* Property LADSPA_PROPERTY_INPLACE_BROKEN indicates that the plugin + may cease to work correctly if the host elects to use the same data + location for both input and output (see connect_port()). This + should be avoided as enabling this flag makes it impossible for + hosts to use the plugin to process audio `in-place.' */ +#define LADSPA_PROPERTY_INPLACE_BROKEN 0x2 + +/* Property LADSPA_PROPERTY_HARD_RT_CAPABLE indicates that the plugin + is capable of running not only in a conventional host but also in a + `hard real-time' environment. To qualify for this the plugin must + satisfy all of the following: + + (1) The plugin must not use malloc(), free() or other heap memory + management within its run() or run_adding() functions. All new + memory used in run() must be managed via the stack. These + restrictions only apply to the run() function. + + (2) The plugin will not attempt to make use of any library + functions with the exceptions of functions in the ANSI standard C + and C maths libraries, which the host is expected to provide. + + (3) The plugin will not access files, devices, pipes, sockets, IPC + or any other mechanism that might result in process or thread + blocking. + + (4) The plugin will take an amount of time to execute a run() or + run_adding() call approximately of form (A+B*SampleCount) where A + and B depend on the machine and host in use. This amount of time + may not depend on input signals or plugin state. The host is left + the responsibility to perform timings to estimate upper bounds for + A and B. */ +#define LADSPA_PROPERTY_HARD_RT_CAPABLE 0x4 + +#define LADSPA_IS_REALTIME(x) ((x) & LADSPA_PROPERTY_REALTIME) +#define LADSPA_IS_INPLACE_BROKEN(x) ((x) & LADSPA_PROPERTY_INPLACE_BROKEN) +#define LADSPA_IS_HARD_RT_CAPABLE(x) ((x) & LADSPA_PROPERTY_HARD_RT_CAPABLE) + +/*****************************************************************************/ + +/* Plugin Ports: + + Plugins have `ports' that are inputs or outputs for audio or + data. Ports can communicate arrays of LADSPA_Data (for audio + inputs/outputs) or single LADSPA_Data values (for control + input/outputs). This information is encapsulated in the + LADSPA_PortDescriptor type which is assembled by ORing individual + properties together. + + Note that a port must be an input or an output port but not both + and that a port must be a control or audio port but not both. */ + +typedef int LADSPA_PortDescriptor; + +/* Property LADSPA_PORT_INPUT indicates that the port is an input. */ +#define LADSPA_PORT_INPUT 0x1 + +/* Property LADSPA_PORT_OUTPUT indicates that the port is an output. */ +#define LADSPA_PORT_OUTPUT 0x2 + +/* Property LADSPA_PORT_CONTROL indicates that the port is a control + port. */ +#define LADSPA_PORT_CONTROL 0x4 + +/* Property LADSPA_PORT_AUDIO indicates that the port is a audio + port. */ +#define LADSPA_PORT_AUDIO 0x8 + +#define LADSPA_IS_PORT_INPUT(x) ((x) & LADSPA_PORT_INPUT) +#define LADSPA_IS_PORT_OUTPUT(x) ((x) & LADSPA_PORT_OUTPUT) +#define LADSPA_IS_PORT_CONTROL(x) ((x) & LADSPA_PORT_CONTROL) +#define LADSPA_IS_PORT_AUDIO(x) ((x) & LADSPA_PORT_AUDIO) + +/*****************************************************************************/ + +/* Plugin Port Range Hints: + + The host may wish to provide a representation of data entering or + leaving a plugin (e.g. to generate a GUI automatically). To make + this more meaningful, the plugin should provide `hints' to the host + describing the usual values taken by the data. + + Note that these are only hints. The host may ignore them and the + plugin must not assume that data supplied to it is meaningful. If + the plugin receives invalid input data it is expected to continue + to run without failure and, where possible, produce a sensible + output (e.g. a high-pass filter given a negative cutoff frequency + might switch to an all-pass mode). + + Hints are meaningful for all input and output ports but hints for + input control ports are expected to be particularly useful. + + More hint information is encapsulated in the + LADSPA_PortRangeHintDescriptor type which is assembled by ORing + individual hint types together. Hints may require further + LowerBound and UpperBound information. + + All the hint information for a particular port is aggregated in the + LADSPA_PortRangeHint structure. */ + +typedef int LADSPA_PortRangeHintDescriptor; + +/* Hint LADSPA_HINT_BOUNDED_BELOW indicates that the LowerBound field + of the LADSPA_PortRangeHint should be considered meaningful. The + value in this field should be considered the (inclusive) lower + bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also + specified then the value of LowerBound should be multiplied by the + sample rate. */ +#define LADSPA_HINT_BOUNDED_BELOW 0x1 + +/* Hint LADSPA_HINT_BOUNDED_ABOVE indicates that the UpperBound field + of the LADSPA_PortRangeHint should be considered meaningful. The + value in this field should be considered the (inclusive) upper + bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also + specified then the value of UpperBound should be multiplied by the + sample rate. */ +#define LADSPA_HINT_BOUNDED_ABOVE 0x2 + +/* Hint LADSPA_HINT_TOGGLED indicates that the data item should be + considered a Boolean toggle. Data less than or equal to zero should + be considered `off' or `false,' and data above zero should be + considered `on' or `true.' LADSPA_HINT_TOGGLED may not be used in + conjunction with any other hint except LADSPA_HINT_DEFAULT_0 or + LADSPA_HINT_DEFAULT_1. */ +#define LADSPA_HINT_TOGGLED 0x4 + +/* Hint LADSPA_HINT_SAMPLE_RATE indicates that any bounds specified + should be interpreted as multiples of the sample rate. For + instance, a frequency range from 0Hz to the Nyquist frequency (half + the sample rate) could be requested by this hint in conjunction + with LowerBound = 0 and UpperBound = 0.5. Hosts that support bounds + at all must support this hint to retain meaning. */ +#define LADSPA_HINT_SAMPLE_RATE 0x8 + +/* Hint LADSPA_HINT_LOGARITHMIC indicates that it is likely that the + user will find it more intuitive to view values using a logarithmic + scale. This is particularly useful for frequencies and gains. */ +#define LADSPA_HINT_LOGARITHMIC 0x10 + +/* Hint LADSPA_HINT_INTEGER indicates that a user interface would + probably wish to provide a stepped control taking only integer + values. Any bounds set should be slightly wider than the actual + integer range required to avoid floating point rounding errors. For + instance, the integer set {0,1,2,3} might be described as [-0.1, + 3.1]. */ +#define LADSPA_HINT_INTEGER 0x20 + +/* The various LADSPA_HINT_HAS_DEFAULT_* hints indicate a `normal' + value for the port that is sensible as a default. For instance, + this value is suitable for use as an initial value in a user + interface or as a value the host might assign to a control port + when the user has not provided one. Defaults are encoded using a + mask so only one default may be specified for a port. Some of the + hints make use of lower and upper bounds, in which case the + relevant bound or bounds must be available and + LADSPA_HINT_SAMPLE_RATE must be applied as usual. The resulting + default must be rounded if LADSPA_HINT_INTEGER is present. Default + values were introduced in LADSPA v1.1. */ +#define LADSPA_HINT_DEFAULT_MASK 0x3C0 + +/* This default values indicates that no default is provided. */ +#define LADSPA_HINT_DEFAULT_NONE 0x0 + +/* This default hint indicates that the suggested lower bound for the + port should be used. */ +#define LADSPA_HINT_DEFAULT_MINIMUM 0x40 + +/* This default hint indicates that a low value between the suggested + lower and upper bounds should be chosen. For ports with + LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.75 + + log(upper) * 0.25). Otherwise, this should be (lower * 0.75 + upper + * 0.25). */ +#define LADSPA_HINT_DEFAULT_LOW 0x80 + +/* This default hint indicates that a middle value between the + suggested lower and upper bounds should be chosen. For ports with + LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.5 + + log(upper) * 0.5). Otherwise, this should be (lower * 0.5 + upper * + 0.5). */ +#define LADSPA_HINT_DEFAULT_MIDDLE 0xC0 + +/* This default hint indicates that a high value between the suggested + lower and upper bounds should be chosen. For ports with + LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.25 + + log(upper) * 0.75). Otherwise, this should be (lower * 0.25 + upper + * 0.75). */ +#define LADSPA_HINT_DEFAULT_HIGH 0x100 + +/* This default hint indicates that the suggested upper bound for the + port should be used. */ +#define LADSPA_HINT_DEFAULT_MAXIMUM 0x140 + +/* This default hint indicates that the number 0 should be used. Note + that this default may be used in conjunction with + LADSPA_HINT_TOGGLED. */ +#define LADSPA_HINT_DEFAULT_0 0x200 + +/* This default hint indicates that the number 1 should be used. Note + that this default may be used in conjunction with + LADSPA_HINT_TOGGLED. */ +#define LADSPA_HINT_DEFAULT_1 0x240 + +/* This default hint indicates that the number 100 should be used. */ +#define LADSPA_HINT_DEFAULT_100 0x280 + +/* This default hint indicates that the Hz frequency of `concert A' + should be used. This will be 440 unless the host uses an unusual + tuning convention, in which case it may be within a few Hz. */ +#define LADSPA_HINT_DEFAULT_440 0x2C0 + +#define LADSPA_IS_HINT_BOUNDED_BELOW(x) ((x) & LADSPA_HINT_BOUNDED_BELOW) +#define LADSPA_IS_HINT_BOUNDED_ABOVE(x) ((x) & LADSPA_HINT_BOUNDED_ABOVE) +#define LADSPA_IS_HINT_TOGGLED(x) ((x) & LADSPA_HINT_TOGGLED) +#define LADSPA_IS_HINT_SAMPLE_RATE(x) ((x) & LADSPA_HINT_SAMPLE_RATE) +#define LADSPA_IS_HINT_LOGARITHMIC(x) ((x) & LADSPA_HINT_LOGARITHMIC) +#define LADSPA_IS_HINT_INTEGER(x) ((x) & LADSPA_HINT_INTEGER) + +#define LADSPA_IS_HINT_HAS_DEFAULT(x) ((x) & LADSPA_HINT_DEFAULT_MASK) +#define LADSPA_IS_HINT_DEFAULT_MINIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_MINIMUM) +#define LADSPA_IS_HINT_DEFAULT_LOW(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_LOW) +#define LADSPA_IS_HINT_DEFAULT_MIDDLE(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_MIDDLE) +#define LADSPA_IS_HINT_DEFAULT_HIGH(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_HIGH) +#define LADSPA_IS_HINT_DEFAULT_MAXIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_MAXIMUM) +#define LADSPA_IS_HINT_DEFAULT_0(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_0) +#define LADSPA_IS_HINT_DEFAULT_1(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_1) +#define LADSPA_IS_HINT_DEFAULT_100(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_100) +#define LADSPA_IS_HINT_DEFAULT_440(x) (((x) & LADSPA_HINT_DEFAULT_MASK) \ + == LADSPA_HINT_DEFAULT_440) + +typedef struct _LADSPA_PortRangeHint { + + /* Hints about the port. */ + LADSPA_PortRangeHintDescriptor HintDescriptor; + + /* Meaningful when hint LADSPA_HINT_BOUNDED_BELOW is active. When + LADSPA_HINT_SAMPLE_RATE is also active then this value should be + multiplied by the relevant sample rate. */ + LADSPA_Data LowerBound; + + /* Meaningful when hint LADSPA_HINT_BOUNDED_ABOVE is active. When + LADSPA_HINT_SAMPLE_RATE is also active then this value should be + multiplied by the relevant sample rate. */ + LADSPA_Data UpperBound; + +} LADSPA_PortRangeHint; + +/*****************************************************************************/ + +/* Plugin Handles: + + This plugin handle indicates a particular instance of the plugin + concerned. It is valid to compare this to NULL (0 for C++) but + otherwise the host should not attempt to interpret it. The plugin + may use it to reference internal instance data. */ + +typedef void * LADSPA_Handle; + +/*****************************************************************************/ + +/* Descriptor for a Type of Plugin: + + This structure is used to describe a plugin type. It provides a + number of functions to examine the type, instantiate it, link it to + buffers and workspaces and to run it. */ + +typedef struct _LADSPA_Descriptor { + + /* This numeric identifier indicates the plugin type + uniquely. Plugin programmers may reserve ranges of IDs from a + central body to avoid clashes. Hosts may assume that IDs are + below 0x1000000. */ + unsigned long UniqueID; + + /* This identifier can be used as a unique, case-sensitive + identifier for the plugin type within the plugin file. Plugin + types should be identified by file and label rather than by index + or plugin name, which may be changed in new plugin + versions. Labels must not contain white-space characters. */ + const char * Label; + + /* This indicates a number of properties of the plugin. */ + LADSPA_Properties Properties; + + /* This member points to the null-terminated name of the plugin + (e.g. "Sine Oscillator"). */ + const char * Name; + + /* This member points to the null-terminated string indicating the + maker of the plugin. This can be an empty string but not NULL. */ + const char * Maker; + + /* This member points to the null-terminated string indicating any + copyright applying to the plugin. If no Copyright applies the + string "None" should be used. */ + const char * Copyright; + + /* This indicates the number of ports (input AND output) present on + the plugin. */ + unsigned long PortCount; + + /* This member indicates an array of port descriptors. Valid indices + vary from 0 to PortCount-1. */ + const LADSPA_PortDescriptor * PortDescriptors; + + /* This member indicates an array of null-terminated strings + describing ports (e.g. "Frequency (Hz)"). Valid indices vary from + 0 to PortCount-1. */ + const char * const * PortNames; + + /* This member indicates an array of range hints for each port (see + above). Valid indices vary from 0 to PortCount-1. */ + const LADSPA_PortRangeHint * PortRangeHints; + + /* This may be used by the plugin developer to pass any custom + implementation data into an instantiate call. It must not be used + or interpreted by the host. It is expected that most plugin + writers will not use this facility as LADSPA_Handle should be + used to hold instance data. */ + void * ImplementationData; + + /* This member is a function pointer that instantiates a plugin. A + handle is returned indicating the new plugin instance. The + instantiation function accepts a sample rate as a parameter. The + plugin descriptor from which this instantiate function was found + must also be passed. This function must return NULL if + instantiation fails. + + Note that instance initialisation should generally occur in + activate() rather than here. */ + LADSPA_Handle (*instantiate)(const struct _LADSPA_Descriptor * Descriptor, + unsigned long SampleRate); + + /* This member is a function pointer that connects a port on an + instantiated plugin to a memory location at which a block of data + for the port will be read/written. The data location is expected + to be an array of LADSPA_Data for audio ports or a single + LADSPA_Data value for control ports. Memory issues will be + managed by the host. The plugin must read/write the data at these + locations every time run() or run_adding() is called and the data + present at the time of this connection call should not be + considered meaningful. + + connect_port() may be called more than once for a plugin instance + to allow the host to change the buffers that the plugin is + reading or writing. These calls may be made before or after + activate() or deactivate() calls. + + connect_port() must be called at least once for each port before + run() or run_adding() is called. When working with blocks of + LADSPA_Data the plugin should pay careful attention to the block + size passed to the run function as the block allocated may only + just be large enough to contain the block of samples. + + Plugin writers should be aware that the host may elect to use the + same buffer for more than one port and even use the same buffer + for both input and output (see LADSPA_PROPERTY_INPLACE_BROKEN). + However, overlapped buffers or use of a single buffer for both + audio and control data may result in unexpected behaviour. */ + void (*connect_port)(LADSPA_Handle Instance, + unsigned long Port, + LADSPA_Data * DataLocation); + + /* This member is a function pointer that initialises a plugin + instance and activates it for use. This is separated from + instantiate() to aid real-time support and so that hosts can + reinitialise a plugin instance by calling deactivate() and then + activate(). In this case the plugin instance must reset all state + information dependent on the history of the plugin instance + except for any data locations provided by connect_port() and any + gain set by set_run_adding_gain(). If there is nothing for + activate() to do then the plugin writer may provide a NULL rather + than an empty function. + + When present, hosts must call this function once before run() (or + run_adding()) is called for the first time. This call should be + made as close to the run() call as possible and indicates to + real-time plugins that they are now live. Plugins should not rely + on a prompt call to run() after activate(). activate() may not be + called again unless deactivate() is called first. Note that + connect_port() may be called before or after a call to + activate(). */ + void (*activate)(LADSPA_Handle Instance); + + /* This method is a function pointer that runs an instance of a + plugin for a block. Two parameters are required: the first is a + handle to the particular instance to be run and the second + indicates the block size (in samples) for which the plugin + instance may run. + + Note that if an activate() function exists then it must be called + before run() or run_adding(). If deactivate() is called for a + plugin instance then the plugin instance may not be reused until + activate() has been called again. + + If the plugin has the property LADSPA_PROPERTY_HARD_RT_CAPABLE + then there are various things that the plugin should not do + within the run() or run_adding() functions (see above). */ + void (*run)(LADSPA_Handle Instance, + unsigned long SampleCount); + + /* This method is a function pointer that runs an instance of a + plugin for a block. This has identical behaviour to run() except + in the way data is output from the plugin. When run() is used, + values are written directly to the memory areas associated with + the output ports. However when run_adding() is called, values + must be added to the values already present in the memory + areas. Furthermore, output values written must be scaled by the + current gain set by set_run_adding_gain() (see below) before + addition. + + run_adding() is optional. When it is not provided by a plugin, + this function pointer must be set to NULL. When it is provided, + the function set_run_adding_gain() must be provided also. */ + void (*run_adding)(LADSPA_Handle Instance, + unsigned long SampleCount); + + /* This method is a function pointer that sets the output gain for + use when run_adding() is called (see above). If this function is + never called the gain is assumed to default to 1. Gain + information should be retained when activate() or deactivate() + are called. + + This function should be provided by the plugin if and only if the + run_adding() function is provided. When it is absent this + function pointer must be set to NULL. */ + void (*set_run_adding_gain)(LADSPA_Handle Instance, + LADSPA_Data Gain); + + /* This is the counterpart to activate() (see above). If there is + nothing for deactivate() to do then the plugin writer may provide + a NULL rather than an empty function. + + Hosts must deactivate all activated units after they have been + run() (or run_adding()) for the last time. This call should be + made as close to the last run() call as possible and indicates to + real-time plugins that they are no longer live. Plugins should + not rely on prompt deactivation. Note that connect_port() may be + called before or after a call to deactivate(). + + Deactivation is not similar to pausing as the plugin instance + will be reinitialised when activate() is called to reuse it. */ + void (*deactivate)(LADSPA_Handle Instance); + + /* Once an instance of a plugin has been finished with it can be + deleted using the following function. The instance handle passed + ceases to be valid after this call. + + If activate() was called for a plugin instance then a + corresponding call to deactivate() must be made before cleanup() + is called. */ + void (*cleanup)(LADSPA_Handle Instance); + +} LADSPA_Descriptor; + +/**********************************************************************/ + +/* Accessing a Plugin: */ + +/* The exact mechanism by which plugins are loaded is host-dependent, + however all most hosts will need to know is the name of shared + object file containing the plugin types. To allow multiple hosts to + share plugin types, hosts may wish to check for environment + variable LADSPA_PATH. If present, this should contain a + colon-separated path indicating directories that should be searched + (in order) when loading plugin types. + + A plugin programmer must include a function called + "ladspa_descriptor" with the following function prototype within + the shared object file. This function will have C-style linkage (if + you are using C++ this is taken care of by the `extern "C"' clause + at the top of the file). + + A host will find the plugin shared object file by one means or + another, find the ladspa_descriptor() function, call it, and + proceed from there. + + Plugin types are accessed by index (not ID) using values from 0 + upwards. Out of range indexes must result in this function + returning NULL, so the plugin count can be determined by checking + for the least index that results in NULL being returned. */ + +const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index); + +/* Datatype corresponding to the ladspa_descriptor() function. */ +typedef const LADSPA_Descriptor * +(*LADSPA_Descriptor_Function)(unsigned long Index); + +/**********************************************************************/ + +#ifdef __cplusplus +} +#endif + +#endif /* LADSPA_INCLUDED */ + +/* EOF */ diff --git a/dpf/distrho/src/lv2/atom-forge.h b/dpf/distrho/src/lv2/atom-forge.h new file mode 100644 index 0000000..d803d23 --- /dev/null +++ b/dpf/distrho/src/lv2/atom-forge.h @@ -0,0 +1,747 @@ +/* + Copyright 2008-2013 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file forge.h An API for constructing LV2 atoms. + + This file provides an API for constructing Atoms which makes it relatively + simple to build nested atoms of arbitrary complexity without requiring + dynamic memory allocation. + + The API is based on successively appending the appropriate pieces to build a + complete Atom. The size of containers is automatically updated. Functions + that begin a container return (via their frame argument) a stack frame which + must be popped when the container is finished. + + All output is written to a user-provided buffer or sink function. This + makes it popssible to create create atoms on the stack, on the heap, in LV2 + port buffers, in a ringbuffer, or elsewhere, all using the same API. + + This entire API is realtime safe if used with a buffer or a realtime safe + sink, except lv2_atom_forge_init() which is only realtime safe if the URI + map function is. + + Note these functions are all static inline, do not take their address. + + This header is non-normative, it is provided for convenience. +*/ + +#ifndef LV2_ATOM_FORGE_H +#define LV2_ATOM_FORGE_H + +#include + +#include "atom.h" +#include "atom-util.h" +#include "urid.h" + +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define LV2_ATOM_FORGE_DEPRECATED __attribute__((__deprecated__)) +#else +# define LV2_ATOM_FORGE_DEPRECATED +#endif + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +/** Handle for LV2_Atom_Forge_Sink. */ +typedef void* LV2_Atom_Forge_Sink_Handle; + +/** A reference to a chunk of written output. */ +typedef intptr_t LV2_Atom_Forge_Ref; + +/** Sink function for writing output. See lv2_atom_forge_set_sink(). */ +typedef LV2_Atom_Forge_Ref +(*LV2_Atom_Forge_Sink)(LV2_Atom_Forge_Sink_Handle handle, + const void* buf, + uint32_t size); + +/** Function for resolving a reference. See lv2_atom_forge_set_sink(). */ +typedef LV2_Atom* +(*LV2_Atom_Forge_Deref_Func)(LV2_Atom_Forge_Sink_Handle handle, + LV2_Atom_Forge_Ref ref); + +/** A stack frame used for keeping track of nested Atom containers. */ +typedef struct _LV2_Atom_Forge_Frame { + struct _LV2_Atom_Forge_Frame* parent; + LV2_Atom_Forge_Ref ref; +} LV2_Atom_Forge_Frame; + +/** A "forge" for creating atoms by appending to a buffer. */ +typedef struct { + uint8_t* buf; + uint32_t offset; + uint32_t size; + + LV2_Atom_Forge_Sink sink; + LV2_Atom_Forge_Deref_Func deref; + LV2_Atom_Forge_Sink_Handle handle; + + LV2_Atom_Forge_Frame* stack; + + LV2_URID Blank LV2_ATOM_FORGE_DEPRECATED; + LV2_URID Bool; + LV2_URID Chunk; + LV2_URID Double; + LV2_URID Float; + LV2_URID Int; + LV2_URID Long; + LV2_URID Literal; + LV2_URID Object; + LV2_URID Path; + LV2_URID Property; + LV2_URID Resource LV2_ATOM_FORGE_DEPRECATED; + LV2_URID Sequence; + LV2_URID String; + LV2_URID Tuple; + LV2_URID URI; + LV2_URID URID; + LV2_URID Vector; +} LV2_Atom_Forge; + +static inline void +lv2_atom_forge_set_buffer(LV2_Atom_Forge* forge, uint8_t* buf, size_t size); + +/** + Initialise @p forge. + + URIs will be mapped using @p map and stored, a reference to @p map itself is + not held. +*/ +static inline void +lv2_atom_forge_init(LV2_Atom_Forge* forge, LV2_URID_Map* map) +{ +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + lv2_atom_forge_set_buffer(forge, NULL, 0); + forge->Blank = map->map(map->handle, LV2_ATOM__Blank); + forge->Bool = map->map(map->handle, LV2_ATOM__Bool); + forge->Chunk = map->map(map->handle, LV2_ATOM__Chunk); + forge->Double = map->map(map->handle, LV2_ATOM__Double); + forge->Float = map->map(map->handle, LV2_ATOM__Float); + forge->Int = map->map(map->handle, LV2_ATOM__Int); + forge->Long = map->map(map->handle, LV2_ATOM__Long); + forge->Literal = map->map(map->handle, LV2_ATOM__Literal); + forge->Object = map->map(map->handle, LV2_ATOM__Object); + forge->Path = map->map(map->handle, LV2_ATOM__Path); + forge->Property = map->map(map->handle, LV2_ATOM__Property); + forge->Resource = map->map(map->handle, LV2_ATOM__Resource); + forge->Sequence = map->map(map->handle, LV2_ATOM__Sequence); + forge->String = map->map(map->handle, LV2_ATOM__String); + forge->Tuple = map->map(map->handle, LV2_ATOM__Tuple); + forge->URI = map->map(map->handle, LV2_ATOM__URI); + forge->URID = map->map(map->handle, LV2_ATOM__URID); + forge->Vector = map->map(map->handle, LV2_ATOM__Vector); +#if defined(__clang__) +# pragma clang diagnostic pop +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic pop +#endif +} + +static inline LV2_Atom* +lv2_atom_forge_deref(LV2_Atom_Forge* forge, LV2_Atom_Forge_Ref ref) +{ + if (forge->buf) { + return (LV2_Atom*)ref; + } else { + return forge->deref(forge->handle, ref); + } +} + +/** + @name Object Stack + @{ +*/ + +/** + Push a stack frame. + This is done automatically by container functions (which take a stack frame + pointer), but may be called by the user to push the top level container when + writing to an existing Atom. +*/ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_push(LV2_Atom_Forge* forge, + LV2_Atom_Forge_Frame* frame, + LV2_Atom_Forge_Ref ref) +{ + frame->parent = forge->stack; + frame->ref = ref; + forge->stack = frame; + return ref; +} + +/** Pop a stack frame. This must be called when a container is finished. */ +static inline void +lv2_atom_forge_pop(LV2_Atom_Forge* forge, LV2_Atom_Forge_Frame* frame) +{ + assert(frame == forge->stack); + forge->stack = frame->parent; +} + +/** Return true iff the top of the stack has the given type. */ +static inline bool +lv2_atom_forge_top_is(LV2_Atom_Forge* forge, uint32_t type) +{ + return forge->stack && forge->stack->ref && + (lv2_atom_forge_deref(forge, forge->stack->ref)->type == type); +} + +/** Return true iff @p type is an atom:Object. */ +static inline bool +lv2_atom_forge_is_object_type(const LV2_Atom_Forge* forge, uint32_t type) +{ +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + return (type == forge->Object || + type == forge->Blank || + type == forge->Resource); +#if defined(__clang__) +# pragma clang diagnostic pop +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic pop +#endif +} + +/** Return true iff @p type is an atom:Object with a blank ID. */ +static inline bool +lv2_atom_forge_is_blank(const LV2_Atom_Forge* forge, + uint32_t type, + const LV2_Atom_Object_Body* body) +{ +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + return (type == forge->Blank || + (type == forge->Object && body->id == 0)); +#if defined(__clang__) +# pragma clang diagnostic pop +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic pop +#endif +} + +/** + @} + @name Output Configuration + @{ +*/ + +/** Set the output buffer where @p forge will write atoms. */ +static inline void +lv2_atom_forge_set_buffer(LV2_Atom_Forge* forge, uint8_t* buf, size_t size) +{ + forge->buf = buf; + forge->size = (uint32_t)size; + forge->offset = 0; + forge->deref = NULL; + forge->sink = NULL; + forge->handle = NULL; + forge->stack = NULL; +} + +/** + Set the sink function where @p forge will write output. + + The return value of forge functions is an LV2_Atom_Forge_Ref which is an + integer type safe to use as a pointer but is otherwise opaque. The sink + function must return a ref that can be dereferenced to access as least + sizeof(LV2_Atom) bytes of the written data, so sizes can be updated. For + ringbuffers, this should be possible as long as the size of the buffer is a + multiple of sizeof(LV2_Atom), since atoms are always aligned. + + Note that 0 is an invalid reference, so if you are using a buffer offset be + sure to offset it such that 0 is never a valid reference. You will get + confusing errors otherwise. +*/ +static inline void +lv2_atom_forge_set_sink(LV2_Atom_Forge* forge, + LV2_Atom_Forge_Sink sink, + LV2_Atom_Forge_Deref_Func deref, + LV2_Atom_Forge_Sink_Handle handle) +{ + forge->buf = NULL; + forge->size = forge->offset = 0; + forge->deref = deref; + forge->sink = sink; + forge->handle = handle; + forge->stack = NULL; +} + +/** + @} + @name Low Level Output + @{ +*/ + +/** + Write raw output. This is used internally, but is also useful for writing + atom types not explicitly supported by the forge API. Note the caller is + responsible for ensuring the output is approriately padded. +*/ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_raw(LV2_Atom_Forge* forge, const void* data, uint32_t size) +{ + LV2_Atom_Forge_Ref out = 0; + if (forge->sink) { + out = forge->sink(forge->handle, data, size); + } else { + out = (LV2_Atom_Forge_Ref)forge->buf + (LV2_Atom_Forge_Ref)forge->offset; + uint8_t* mem = forge->buf + forge->offset; + if (forge->offset + size > forge->size) { + return 0; + } + forge->offset += size; + memcpy(mem, data, size); + } + for (LV2_Atom_Forge_Frame* f = forge->stack; f; f = f->parent) { + lv2_atom_forge_deref(forge, f->ref)->size += size; + } + return out; +} + +/** Pad output accordingly so next write is 64-bit aligned. */ +static inline void +lv2_atom_forge_pad(LV2_Atom_Forge* forge, uint32_t written) +{ + const uint64_t pad = 0; + const uint32_t pad_size = lv2_atom_pad_size(written) - written; + lv2_atom_forge_raw(forge, &pad, pad_size); +} + +/** Write raw output, padding to 64-bits as necessary. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_write(LV2_Atom_Forge* forge, const void* data, uint32_t size) +{ + LV2_Atom_Forge_Ref out = lv2_atom_forge_raw(forge, data, size); + if (out) { + lv2_atom_forge_pad(forge, size); + } + return out; +} + +/** Write a null-terminated string body. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_string_body(LV2_Atom_Forge* forge, + const char* str, + uint32_t len) +{ + LV2_Atom_Forge_Ref out = lv2_atom_forge_raw(forge, str, len); + if (out && (out = lv2_atom_forge_raw(forge, "", 1))) { + lv2_atom_forge_pad(forge, len + 1); + } + return out; +} + +/** + @} + @name Atom Output + @{ +*/ + +/** Write an atom:Atom header. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_atom(LV2_Atom_Forge* forge, uint32_t size, uint32_t type) +{ + const LV2_Atom a = { size, type }; + return lv2_atom_forge_raw(forge, &a, sizeof(a)); +} + +/** Write a primitive (fixed-size) atom. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_primitive(LV2_Atom_Forge* forge, const LV2_Atom* a) +{ + if (lv2_atom_forge_top_is(forge, forge->Vector)) { + return lv2_atom_forge_raw(forge, LV2_ATOM_BODY_CONST(a), a->size); + } else { + return lv2_atom_forge_write( + forge, a, (uint32_t)sizeof(LV2_Atom) + a->size); + } +} + +/** Write an atom:Int. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_int(LV2_Atom_Forge* forge, int32_t val) +{ + const LV2_Atom_Int a = { { sizeof(val), forge->Int }, val }; + return lv2_atom_forge_primitive(forge, &a.atom); +} + +/** Write an atom:Long. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_long(LV2_Atom_Forge* forge, int64_t val) +{ + const LV2_Atom_Long a = { { sizeof(val), forge->Long }, val }; + return lv2_atom_forge_primitive(forge, &a.atom); +} + +/** Write an atom:Float. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_float(LV2_Atom_Forge* forge, float val) +{ + const LV2_Atom_Float a = { { sizeof(val), forge->Float }, val }; + return lv2_atom_forge_primitive(forge, &a.atom); +} + +/** Write an atom:Double. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_double(LV2_Atom_Forge* forge, double val) +{ + const LV2_Atom_Double a = { { sizeof(val), forge->Double }, val }; + return lv2_atom_forge_primitive(forge, &a.atom); +} + +/** Write an atom:Bool. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_bool(LV2_Atom_Forge* forge, bool val) +{ + const LV2_Atom_Bool a = { { sizeof(int32_t), forge->Bool }, val ? 1 : 0 }; + return lv2_atom_forge_primitive(forge, &a.atom); +} + +/** Write an atom:URID. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_urid(LV2_Atom_Forge* forge, LV2_URID id) +{ + const LV2_Atom_URID a = { { sizeof(id), forge->URID }, id }; + return lv2_atom_forge_primitive(forge, &a.atom); +} + +/** Write an atom compatible with atom:String. Used internally. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_typed_string(LV2_Atom_Forge* forge, + uint32_t type, + const char* str, + uint32_t len) +{ + const LV2_Atom_String a = { { len + 1, type } }; + LV2_Atom_Forge_Ref out = lv2_atom_forge_raw(forge, &a, sizeof(a)); + if (out) { + if (!lv2_atom_forge_string_body(forge, str, len)) { + LV2_Atom* atom = lv2_atom_forge_deref(forge, out); + atom->size = atom->type = 0; + out = 0; + } + } + return out; +} + +/** Write an atom:String. Note that @p str need not be NULL terminated. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_string(LV2_Atom_Forge* forge, const char* str, uint32_t len) +{ + return lv2_atom_forge_typed_string(forge, forge->String, str, len); +} + +/** + Write an atom:URI. Note that @p uri need not be NULL terminated. + This does not map the URI, but writes the complete URI string. To write + a mapped URI, use lv2_atom_forge_urid(). +*/ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_uri(LV2_Atom_Forge* forge, const char* uri, uint32_t len) +{ + return lv2_atom_forge_typed_string(forge, forge->URI, uri, len); +} + +/** Write an atom:Path. Note that @p path need not be NULL terminated. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_path(LV2_Atom_Forge* forge, const char* path, uint32_t len) +{ + return lv2_atom_forge_typed_string(forge, forge->Path, path, len); +} + +/** Write an atom:Literal. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_literal(LV2_Atom_Forge* forge, + const char* str, + uint32_t len, + uint32_t datatype, + uint32_t lang) +{ + const LV2_Atom_Literal a = { + { (uint32_t)(sizeof(LV2_Atom_Literal) - sizeof(LV2_Atom) + len + 1), + forge->Literal }, + { datatype, + lang } + }; + LV2_Atom_Forge_Ref out = lv2_atom_forge_raw(forge, &a, sizeof(a)); + if (out) { + if (!lv2_atom_forge_string_body(forge, str, len)) { + LV2_Atom* atom = lv2_atom_forge_deref(forge, out); + atom->size = atom->type = 0; + out = 0; + } + } + return out; +} + +/** Start an atom:Vector. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_vector_head(LV2_Atom_Forge* forge, + LV2_Atom_Forge_Frame* frame, + uint32_t child_size, + uint32_t child_type) +{ + const LV2_Atom_Vector a = { + { sizeof(LV2_Atom_Vector_Body), forge->Vector }, + { child_size, child_type } + }; + return lv2_atom_forge_push( + forge, frame, lv2_atom_forge_write(forge, &a, sizeof(a))); +} + +/** Write a complete atom:Vector. */ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_vector(LV2_Atom_Forge* forge, + uint32_t child_size, + uint32_t child_type, + uint32_t n_elems, + const void* elems) +{ + const LV2_Atom_Vector a = { + { (uint32_t)(sizeof(LV2_Atom_Vector_Body) + n_elems * child_size), + forge->Vector }, + { child_size, child_type } + }; + LV2_Atom_Forge_Ref out = lv2_atom_forge_write(forge, &a, sizeof(a)); + if (out) { + lv2_atom_forge_write(forge, elems, child_size * n_elems); + } + return out; +} + +/** + Write the header of an atom:Tuple. + + The passed frame will be initialised to represent this tuple. To complete + the tuple, write a sequence of atoms, then pop the frame with + lv2_atom_forge_pop(). + + For example: + @code + // Write tuple (1, 2.0) + LV2_Atom_Forge_Frame frame; + LV2_Atom* tup = (LV2_Atom*)lv2_atom_forge_tuple(forge, &frame); + lv2_atom_forge_int32(forge, 1); + lv2_atom_forge_float(forge, 2.0); + lv2_atom_forge_pop(forge, &frame); + @endcode +*/ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_tuple(LV2_Atom_Forge* forge, LV2_Atom_Forge_Frame* frame) +{ + const LV2_Atom_Tuple a = { { 0, forge->Tuple } }; + return lv2_atom_forge_push( + forge, frame, lv2_atom_forge_write(forge, &a, sizeof(a))); +} + +/** + Write the header of an atom:Object. + + The passed frame will be initialised to represent this object. To complete + the object, write a sequence of properties, then pop the frame with + lv2_atom_forge_pop(). + + For example: + @code + LV2_URID eg_Cat = map("http://example.org/Cat"); + LV2_URID eg_name = map("http://example.org/name"); + + // Start object with type eg_Cat and blank ID + LV2_Atom_Forge_Frame frame; + lv2_atom_forge_object(forge, &frame, 0, eg_Cat); + + // Append property eg:name = "Hobbes" + lv2_atom_forge_key(forge, eg_name); + lv2_atom_forge_string(forge, "Hobbes", strlen("Hobbes")); + + // Finish object + lv2_atom_forge_pop(forge, &frame); + @endcode +*/ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_object(LV2_Atom_Forge* forge, + LV2_Atom_Forge_Frame* frame, + LV2_URID id, + LV2_URID otype) +{ + const LV2_Atom_Object a = { + { (uint32_t)sizeof(LV2_Atom_Object_Body), forge->Object }, + { id, otype } + }; + return lv2_atom_forge_push( + forge, frame, lv2_atom_forge_write(forge, &a, sizeof(a))); +} + +/** + The same as lv2_atom_forge_object(), but for object:Resource. + + This function is deprecated and should not be used in new code. + Use lv2_atom_forge_object() directly instead. +*/ +LV2_ATOM_FORGE_DEPRECATED +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_resource(LV2_Atom_Forge* forge, + LV2_Atom_Forge_Frame* frame, + LV2_URID id, + LV2_URID otype) +{ +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + const LV2_Atom_Object a = { + { (uint32_t)sizeof(LV2_Atom_Object_Body), forge->Resource }, + { id, otype } + }; + return lv2_atom_forge_push( + forge, frame, lv2_atom_forge_write(forge, &a, sizeof(a))); +#if defined(__clang__) +# pragma clang diagnostic pop +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic pop +#endif +} + +/** + The same as lv2_atom_forge_object(), but for object:Blank. + + This function is deprecated and should not be used in new code. + Use lv2_atom_forge_object() directly instead. +*/ +LV2_ATOM_FORGE_DEPRECATED +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_blank(LV2_Atom_Forge* forge, + LV2_Atom_Forge_Frame* frame, + uint32_t id, + LV2_URID otype) +{ +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + const LV2_Atom_Object a = { + { (uint32_t)sizeof(LV2_Atom_Object_Body), forge->Blank }, + { id, otype } + }; + return lv2_atom_forge_push( + forge, frame, lv2_atom_forge_write(forge, &a, sizeof(a))); +#if defined(__clang__) +# pragma clang diagnostic pop +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +# pragma GCC diagnostic pop +#endif +} + +/** + Write a property key in an Object, to be followed by the value. + + See lv2_atom_forge_object() documentation for an example. +*/ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_key(LV2_Atom_Forge* forge, + LV2_URID key) +{ + const LV2_Atom_Property_Body a = { key, 0, { 0, 0 } }; + return lv2_atom_forge_write(forge, &a, 2 * (uint32_t)sizeof(uint32_t)); +} + +/** + Write the header for a property body in an object, with context. + + If you do not need the context, which is almost certainly the case, + use the simpler lv2_atom_forge_key() instead. +*/ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_property_head(LV2_Atom_Forge* forge, + LV2_URID key, + LV2_URID context) +{ + const LV2_Atom_Property_Body a = { key, context, { 0, 0 } }; + return lv2_atom_forge_write(forge, &a, 2 * (uint32_t)sizeof(uint32_t)); +} + +/** + Write the header for a Sequence. +*/ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_sequence_head(LV2_Atom_Forge* forge, + LV2_Atom_Forge_Frame* frame, + uint32_t unit) +{ + const LV2_Atom_Sequence a = { + { (uint32_t)sizeof(LV2_Atom_Sequence_Body), forge->Sequence }, + { unit, 0 } + }; + return lv2_atom_forge_push( + forge, frame, lv2_atom_forge_write(forge, &a, sizeof(a))); +} + +/** + Write the time stamp header of an Event (in a Sequence) in audio frames. + After this, call the appropriate forge method(s) to write the body. Note + the returned reference is to an LV2_Event which is NOT an Atom. +*/ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_frame_time(LV2_Atom_Forge* forge, int64_t frames) +{ + return lv2_atom_forge_write(forge, &frames, sizeof(frames)); +} + +/** + Write the time stamp header of an Event (in a Sequence) in beats. After + this, call the appropriate forge method(s) to write the body. Note the + returned reference is to an LV2_Event which is NOT an Atom. +*/ +static inline LV2_Atom_Forge_Ref +lv2_atom_forge_beat_time(LV2_Atom_Forge* forge, double beats) +{ + return lv2_atom_forge_write(forge, &beats, sizeof(beats)); +} + +/** + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_ATOM_FORGE_H */ diff --git a/dpf/distrho/src/lv2/atom-helpers.h b/dpf/distrho/src/lv2/atom-helpers.h new file mode 100644 index 0000000..97cef2c --- /dev/null +++ b/dpf/distrho/src/lv2/atom-helpers.h @@ -0,0 +1,249 @@ +// lv2_atom_helpers.h +// +/**************************************************************************** + Copyright (C) 2005-2013, rncbc aka Rui Nuno Capela. All rights reserved. + + 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 + of the License, 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. + +*****************************************************************************/ + +/* Helper functions for LV2 atom:Sequence event buffer. + * + * tentatively adapted from: + * + * - lv2_evbuf.h,c - An abstract/opaque LV2 event buffer implementation. + * + * - event-helpers.h - Helper functions for the LV2 Event extension. + * + * + * Copyright 2008-2012 David Robillard + */ + +#ifndef LV2_ATOM_HELPERS_H +#define LV2_ATOM_HELPERS_H + +#include +#include +#include +#include +#include + +#include "atom-util.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// An abstract/opaque LV2 atom:Sequence buffer. +// +typedef +struct _LV2_Atom_Buffer +{ + uint32_t capacity; + uint32_t chunk_type; + uint32_t sequence_type; + LV2_Atom_Sequence atoms; + +} LV2_Atom_Buffer; + + +// Clear and initialize an existing LV2 atom:Sequenece buffer. +// +static inline +void lv2_atom_buffer_reset ( LV2_Atom_Buffer *buf, bool input ) +{ + if (input) { + buf->atoms.atom.size = sizeof(LV2_Atom_Sequence_Body); + buf->atoms.atom.type = buf->sequence_type; + } else { + buf->atoms.atom.size = buf->capacity; + buf->atoms.atom.type = buf->chunk_type; + } +} + + +// Allocate a new, empty LV2 atom:Sequence buffer. +// +static inline +LV2_Atom_Buffer *lv2_atom_buffer_new ( + uint32_t capacity, uint32_t chunk_type, uint32_t sequence_type, bool input ) +{ + LV2_Atom_Buffer *buf = (LV2_Atom_Buffer *) + malloc(sizeof(LV2_Atom_Buffer) + sizeof(LV2_Atom_Sequence) + capacity); + + buf->capacity = capacity; + buf->chunk_type = chunk_type; + buf->sequence_type = sequence_type; + + lv2_atom_buffer_reset(buf, input); + + return buf; +} + + +// Free an LV2 atom:Sequenece buffer allocated with lv2_atome_buffer_new. +// +static inline +void lv2_atom_buffer_free ( LV2_Atom_Buffer *buf ) +{ + free(buf); +} + + +// Return the total padded size of events stored in a LV2 atom:Sequence buffer. +// +static inline +uint32_t lv2_atom_buffer_get_size ( LV2_Atom_Buffer *buf ) +{ + if (buf->atoms.atom.type == buf->sequence_type) + return buf->atoms.atom.size - uint32_t(sizeof(LV2_Atom_Sequence_Body)); + else + return 0; +} + + +// Return the actual LV2 atom:Sequence implementation. +// +static inline +LV2_Atom_Sequence *lv2_atom_buffer_get_sequence ( LV2_Atom_Buffer *buf ) +{ + return &buf->atoms; +} + + +// An iterator over an atom:Sequence buffer. +// +typedef +struct _LV2_Atom_Buffer_Iterator +{ + LV2_Atom_Buffer *buf; + uint32_t offset; + +} LV2_Atom_Buffer_Iterator; + + +// Reset an iterator to point to the start of an LV2 atom:Sequence buffer. +// +static inline +bool lv2_atom_buffer_begin ( + LV2_Atom_Buffer_Iterator *iter, LV2_Atom_Buffer *buf ) +{ + iter->buf = buf; + iter->offset = 0; + + return (buf->atoms.atom.size > 0); +} + + +// Reset an iterator to point to the end of an LV2 atom:Sequence buffer. +// +static inline +bool lv2_atom_buffer_end ( + LV2_Atom_Buffer_Iterator *iter, LV2_Atom_Buffer *buf ) +{ + iter->buf = buf; + iter->offset = lv2_atom_pad_size(lv2_atom_buffer_get_size(buf)); + + return (iter->offset < buf->capacity - sizeof(LV2_Atom_Event)); +} + + +// Check if a LV2 atom:Sequenece buffer iterator is valid. +// +static inline +bool lv2_atom_buffer_is_valid ( LV2_Atom_Buffer_Iterator *iter ) +{ + return iter->offset < lv2_atom_buffer_get_size(iter->buf); +} + + +// Advance a LV2 atom:Sequenece buffer iterator forward one event. +// +static inline +bool lv2_atom_buffer_increment ( LV2_Atom_Buffer_Iterator *iter ) +{ + if (!lv2_atom_buffer_is_valid(iter)) + return false; + + LV2_Atom_Buffer *buf = iter->buf; + LV2_Atom_Sequence *atoms = &buf->atoms; + uint32_t size = ((LV2_Atom_Event *) ((char *) + LV2_ATOM_CONTENTS(LV2_Atom_Sequence, atoms) + iter->offset))->body.size; + iter->offset += lv2_atom_pad_size(uint32_t(sizeof(LV2_Atom_Event)) + size); + + return true; +} + + +// Get the event currently pointed at a LV2 atom:Sequence buffer iterator. +// +static inline +LV2_Atom_Event *lv2_atom_buffer_get ( + LV2_Atom_Buffer_Iterator *iter, uint8_t **data ) +{ + if (!lv2_atom_buffer_is_valid(iter)) + return NULL; + + LV2_Atom_Buffer *buf = iter->buf; + LV2_Atom_Sequence *atoms = &buf->atoms; + LV2_Atom_Event *ev = (LV2_Atom_Event *) ((char *) + LV2_ATOM_CONTENTS(LV2_Atom_Sequence, atoms) + iter->offset); + + *data = (uint8_t *) LV2_ATOM_BODY(&ev->body); + + return ev; +} + + +// Write an event at a LV2 atom:Sequence buffer iterator. + +static inline +bool lv2_atom_buffer_write ( + LV2_Atom_Buffer_Iterator *iter, + uint32_t frames, + uint32_t /*subframes*/, + uint32_t type, + uint32_t size, + const uint8_t *data ) +{ + LV2_Atom_Buffer *buf = iter->buf; + LV2_Atom_Sequence *atoms = &buf->atoms; + if (buf->capacity - sizeof(LV2_Atom) - atoms->atom.size + < sizeof(LV2_Atom_Event) + size) + return false; + + LV2_Atom_Event *ev = (LV2_Atom_Event*) ((char *) + LV2_ATOM_CONTENTS(LV2_Atom_Sequence, atoms) + iter->offset); + + ev->time.frames = frames; + ev->body.type = type; + ev->body.size = size; + + memcpy(LV2_ATOM_BODY(&ev->body), data, size); + + size = lv2_atom_pad_size(uint32_t(sizeof(LV2_Atom_Event)) + size); + atoms->atom.size += size; + iter->offset += size; + + return true; +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif // LV2_ATOM_HELPERS_H + +// end of lv2_atom_helpers.h diff --git a/dpf/distrho/src/lv2/atom-util.h b/dpf/distrho/src/lv2/atom-util.h new file mode 100644 index 0000000..c47c0f6 --- /dev/null +++ b/dpf/distrho/src/lv2/atom-util.h @@ -0,0 +1,446 @@ +/* + Copyright 2008-2013 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file util.h Helper functions for the LV2 Atom extension. + + Note these functions are all static inline, do not take their address. + + This header is non-normative, it is provided for convenience. +*/ + +#ifndef LV2_ATOM_UTIL_H +#define LV2_ATOM_UTIL_H + +#include +#include +#include + +#include "atom.h" + +#ifdef __cplusplus +extern "C" { +#else +# include +#endif + +/** Pad a size to 64 bits. */ +static inline uint32_t +lv2_atom_pad_size(uint32_t size) +{ + return (size + 7U) & (~7U); +} + +/** Return the total size of @p atom, including the header. */ +static inline uint32_t +lv2_atom_total_size(const LV2_Atom* atom) +{ + return (uint32_t)sizeof(LV2_Atom) + atom->size; +} + +/** Return true iff @p atom is null. */ +static inline bool +lv2_atom_is_null(const LV2_Atom* atom) +{ + return !atom || (atom->type == 0 && atom->size == 0); +} + +/** Return true iff @p a is equal to @p b. */ +static inline bool +lv2_atom_equals(const LV2_Atom* a, const LV2_Atom* b) +{ + return (a == b) || ((a->type == b->type) && + (a->size == b->size) && + !memcmp(a + 1, b + 1, a->size)); +} + +/** + @name Sequence Iterator + @{ +*/ + +/** Get an iterator pointing to the first event in a Sequence body. */ +static inline const LV2_Atom_Event* +lv2_atom_sequence_begin(const LV2_Atom_Sequence_Body* body) +{ + return (const LV2_Atom_Event*)(body + 1); +} + +/** Get an iterator pointing to the end of a Sequence body. */ +static inline LV2_Atom_Event* +lv2_atom_sequence_end(LV2_Atom_Sequence_Body* body, uint32_t size) +{ + return (LV2_Atom_Event*)((uint8_t*)body + lv2_atom_pad_size(size)); +} + +/** Return true iff @p i has reached the end of @p body. */ +static inline bool +lv2_atom_sequence_is_end(const LV2_Atom_Sequence_Body* body, + uint32_t size, + const LV2_Atom_Event* i) +{ + return (const uint8_t*)i >= ((const uint8_t*)body + size); +} + +/** Return an iterator to the element following @p i. */ +static inline const LV2_Atom_Event* +lv2_atom_sequence_next(const LV2_Atom_Event* i) +{ + return (const LV2_Atom_Event*)((const uint8_t*)i + + sizeof(LV2_Atom_Event) + + lv2_atom_pad_size(i->body.size)); +} + +/** + A macro for iterating over all events in a Sequence. + @param seq The sequence to iterate over + @param iter The name of the iterator + + This macro is used similarly to a for loop (which it expands to), e.g.: + @code + LV2_ATOM_SEQUENCE_FOREACH(sequence, ev) { + // Do something with ev (an LV2_Atom_Event*) here... + } + @endcode +*/ +#define LV2_ATOM_SEQUENCE_FOREACH(seq, iter) \ + for (const LV2_Atom_Event* (iter) = lv2_atom_sequence_begin(&(seq)->body); \ + !lv2_atom_sequence_is_end(&(seq)->body, (seq)->atom.size, (iter)); \ + (iter) = lv2_atom_sequence_next(iter)) + +/** Like LV2_ATOM_SEQUENCE_FOREACH but for a headerless sequence body. */ +#define LV2_ATOM_SEQUENCE_BODY_FOREACH(body, size, iter) \ + for (const LV2_Atom_Event* (iter) = lv2_atom_sequence_begin(body); \ + !lv2_atom_sequence_is_end(body, size, (iter)); \ + (iter) = lv2_atom_sequence_next(iter)) + +/** + @} + @name Sequence Utilities + @{ +*/ + +/** + Clear all events from @p sequence. + + This simply resets the size field, the other fields are left untouched. +*/ +static inline void +lv2_atom_sequence_clear(LV2_Atom_Sequence* seq) +{ + seq->atom.size = sizeof(LV2_Atom_Sequence_Body); +} + +/** + Append an event at the end of @p sequence. + + @param seq Sequence to append to. + @param capacity Total capacity of the sequence atom + (e.g. as set by the host for sequence output ports). + @param event Event to write. + + @return A pointer to the newly written event in @p seq, + or NULL on failure (insufficient space). +*/ +static inline LV2_Atom_Event* +lv2_atom_sequence_append_event(LV2_Atom_Sequence* seq, + uint32_t capacity, + const LV2_Atom_Event* event) +{ + const uint32_t total_size = (uint32_t)sizeof(*event) + event->body.size; + if (capacity - seq->atom.size < total_size) { + return NULL; + } + + LV2_Atom_Event* e = lv2_atom_sequence_end(&seq->body, seq->atom.size); + memcpy(e, event, total_size); + + seq->atom.size += lv2_atom_pad_size(total_size); + + return e; +} + +/** + @} + @name Tuple Iterator + @{ +*/ + +/** Get an iterator pointing to the first element in @p tup. */ +static inline const LV2_Atom* +lv2_atom_tuple_begin(const LV2_Atom_Tuple* tup) +{ + return (const LV2_Atom*)(LV2_ATOM_BODY_CONST(tup)); +} + +/** Return true iff @p i has reached the end of @p body. */ +static inline bool +lv2_atom_tuple_is_end(const void* body, uint32_t size, const LV2_Atom* i) +{ + return (const uint8_t*)i >= ((const uint8_t*)body + size); +} + +/** Return an iterator to the element following @p i. */ +static inline const LV2_Atom* +lv2_atom_tuple_next(const LV2_Atom* i) +{ + return (const LV2_Atom*)( + (const uint8_t*)i + sizeof(LV2_Atom) + lv2_atom_pad_size(i->size)); +} + +/** + A macro for iterating over all properties of a Tuple. + @param tuple The tuple to iterate over + @param iter The name of the iterator + + This macro is used similarly to a for loop (which it expands to), e.g.: + @code + LV2_ATOMO_TUPLE_FOREACH(tuple, elem) { + // Do something with elem (an LV2_Atom*) here... + } + @endcode +*/ +#define LV2_ATOM_TUPLE_FOREACH(tuple, iter) \ + for (const LV2_Atom* (iter) = lv2_atom_tuple_begin(tuple); \ + !lv2_atom_tuple_is_end(LV2_ATOM_BODY_CONST(tuple), (tuple)->size, (iter)); \ + (iter) = lv2_atom_tuple_next(iter)) + +/** Like LV2_ATOM_TUPLE_FOREACH but for a headerless tuple body. */ +#define LV2_ATOM_TUPLE_BODY_FOREACH(body, size, iter) \ + for (const LV2_Atom* (iter) = (const LV2_Atom*)body; \ + !lv2_atom_tuple_is_end(body, size, (iter)); \ + (iter) = lv2_atom_tuple_next(iter)) + +/** + @} + @name Object Iterator + @{ +*/ + +/** Return a pointer to the first property in @p body. */ +static inline const LV2_Atom_Property_Body* +lv2_atom_object_begin(const LV2_Atom_Object_Body* body) +{ + return (const LV2_Atom_Property_Body*)(body + 1); +} + +/** Return true iff @p i has reached the end of @p obj. */ +static inline bool +lv2_atom_object_is_end(const LV2_Atom_Object_Body* body, + uint32_t size, + const LV2_Atom_Property_Body* i) +{ + return (const uint8_t*)i >= ((const uint8_t*)body + size); +} + +/** Return an iterator to the property following @p i. */ +static inline const LV2_Atom_Property_Body* +lv2_atom_object_next(const LV2_Atom_Property_Body* i) +{ + const LV2_Atom* const value = (const LV2_Atom*)( + (const uint8_t*)i + 2 * sizeof(uint32_t)); + return (const LV2_Atom_Property_Body*)( + (const uint8_t*)i + lv2_atom_pad_size( + (uint32_t)sizeof(LV2_Atom_Property_Body) + value->size)); +} + +/** + A macro for iterating over all properties of an Object. + @param obj The object to iterate over + @param iter The name of the iterator + + This macro is used similarly to a for loop (which it expands to), e.g.: + @code + LV2_ATOM_OBJECT_FOREACH(object, i) { + // Do something with prop (an LV2_Atom_Property_Body*) here... + } + @endcode +*/ +#define LV2_ATOM_OBJECT_FOREACH(obj, iter) \ + for (const LV2_Atom_Property_Body* (iter) = lv2_atom_object_begin(&(obj)->body); \ + !lv2_atom_object_is_end(&(obj)->body, (obj)->atom.size, (iter)); \ + (iter) = lv2_atom_object_next(iter)) + +/** Like LV2_ATOM_OBJECT_FOREACH but for a headerless object body. */ +#define LV2_ATOM_OBJECT_BODY_FOREACH(body, size, iter) \ + for (const LV2_Atom_Property_Body* (iter) = lv2_atom_object_begin(body); \ + !lv2_atom_object_is_end(body, size, (iter)); \ + (iter) = lv2_atom_object_next(iter)) + +/** + @} + @name Object Query + @{ +*/ + +/** A single entry in an Object query. */ +typedef struct { + uint32_t key; /**< Key to query (input set by user) */ + const LV2_Atom** value; /**< Found value (output set by query function) */ +} LV2_Atom_Object_Query; + +static const LV2_Atom_Object_Query LV2_ATOM_OBJECT_QUERY_END = { 0, NULL }; + +/** + Get an object's values for various keys. + + The value pointer of each item in @p query will be set to the location of + the corresponding value in @p object. Every value pointer in @p query MUST + be initialised to NULL. This function reads @p object in a single linear + sweep. By allocating @p query on the stack, objects can be "queried" + quickly without allocating any memory. This function is realtime safe. + + This function can only do "flat" queries, it is not smart enough to match + variables in nested objects. + + For example: + @code + const LV2_Atom* name = NULL; + const LV2_Atom* age = NULL; + LV2_Atom_Object_Query q[] = { + { urids.eg_name, &name }, + { urids.eg_age, &age }, + LV2_ATOM_OBJECT_QUERY_END + }; + lv2_atom_object_query(obj, q); + // name and age are now set to the appropriate values in obj, or NULL. + @endcode +*/ +static inline int +lv2_atom_object_query(const LV2_Atom_Object* object, + LV2_Atom_Object_Query* query) +{ + int matches = 0; + int n_queries = 0; + + /* Count number of query keys so we can short-circuit when done */ + for (LV2_Atom_Object_Query* q = query; q->key; ++q) { + ++n_queries; + } + + LV2_ATOM_OBJECT_FOREACH(object, prop) { + for (LV2_Atom_Object_Query* q = query; q->key; ++q) { + if (q->key == prop->key && !*q->value) { + *q->value = &prop->value; + if (++matches == n_queries) { + return matches; + } + break; + } + } + } + return matches; +} + +/** + Body only version of lv2_atom_object_get(). +*/ +static inline int +lv2_atom_object_body_get(uint32_t size, const LV2_Atom_Object_Body* body, ...) +{ + int matches = 0; + int n_queries = 0; + + /* Count number of keys so we can short-circuit when done */ + va_list args; + va_start(args, body); + for (n_queries = 0; va_arg(args, uint32_t); ++n_queries) { + if (!va_arg(args, const LV2_Atom**)) { + return -1; + } + } + va_end(args); + + LV2_ATOM_OBJECT_BODY_FOREACH(body, size, prop) { + va_start(args, body); + for (int i = 0; i < n_queries; ++i) { + uint32_t qkey = va_arg(args, uint32_t); + const LV2_Atom** qval = va_arg(args, const LV2_Atom**); + if (qkey == prop->key && !*qval) { + *qval = &prop->value; + if (++matches == n_queries) { + return matches; + } + break; + } + } + va_end(args); + } + return matches; +} + +/** + Variable argument version of lv2_atom_object_query(). + + This is nicer-looking in code, but a bit more error-prone since it is not + type safe and the argument list must be terminated. + + The arguments should be a series of uint32_t key and const LV2_Atom** value + pairs, terminated by a zero key. The value pointers MUST be initialized to + NULL. For example: + + @code + const LV2_Atom* name = NULL; + const LV2_Atom* age = NULL; + lv2_atom_object_get(obj, + uris.name_key, &name, + uris.age_key, &age, + 0); + @endcode +*/ +static inline int +lv2_atom_object_get(const LV2_Atom_Object* object, ...) +{ + int matches = 0; + int n_queries = 0; + + /* Count number of keys so we can short-circuit when done */ + va_list args; + va_start(args, object); + for (n_queries = 0; va_arg(args, uint32_t); ++n_queries) { + if (!va_arg(args, const LV2_Atom**)) { + return -1; + } + } + va_end(args); + + LV2_ATOM_OBJECT_FOREACH(object, prop) { + va_start(args, object); + for (int i = 0; i < n_queries; ++i) { + uint32_t qkey = va_arg(args, uint32_t); + const LV2_Atom** qval = va_arg(args, const LV2_Atom**); + if (qkey == prop->key && !*qval) { + *qval = &prop->value; + if (++matches == n_queries) { + return matches; + } + break; + } + } + va_end(args); + } + return matches; +} + +/** + @} +*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_ATOM_UTIL_H */ diff --git a/dpf/distrho/src/lv2/atom.h b/dpf/distrho/src/lv2/atom.h new file mode 100644 index 0000000..91c4fa3 --- /dev/null +++ b/dpf/distrho/src/lv2/atom.h @@ -0,0 +1,246 @@ +/* + Copyright 2008-2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file atom.h C header for the LV2 Atom extension + . +*/ + +#ifndef LV2_ATOM_H +#define LV2_ATOM_H + +#include +#include + +#define LV2_ATOM_URI "http://lv2plug.in/ns/ext/atom" +#define LV2_ATOM_PREFIX LV2_ATOM_URI "#" + +#define LV2_ATOM__Atom LV2_ATOM_PREFIX "Atom" +#define LV2_ATOM__AtomPort LV2_ATOM_PREFIX "AtomPort" +#define LV2_ATOM__Blank LV2_ATOM_PREFIX "Blank" +#define LV2_ATOM__Bool LV2_ATOM_PREFIX "Bool" +#define LV2_ATOM__Chunk LV2_ATOM_PREFIX "Chunk" +#define LV2_ATOM__Double LV2_ATOM_PREFIX "Double" +#define LV2_ATOM__Event LV2_ATOM_PREFIX "Event" +#define LV2_ATOM__Float LV2_ATOM_PREFIX "Float" +#define LV2_ATOM__Int LV2_ATOM_PREFIX "Int" +#define LV2_ATOM__Literal LV2_ATOM_PREFIX "Literal" +#define LV2_ATOM__Long LV2_ATOM_PREFIX "Long" +#define LV2_ATOM__Number LV2_ATOM_PREFIX "Number" +#define LV2_ATOM__Object LV2_ATOM_PREFIX "Object" +#define LV2_ATOM__Path LV2_ATOM_PREFIX "Path" +#define LV2_ATOM__Property LV2_ATOM_PREFIX "Property" +#define LV2_ATOM__Resource LV2_ATOM_PREFIX "Resource" +#define LV2_ATOM__Sequence LV2_ATOM_PREFIX "Sequence" +#define LV2_ATOM__Sound LV2_ATOM_PREFIX "Sound" +#define LV2_ATOM__String LV2_ATOM_PREFIX "String" +#define LV2_ATOM__Tuple LV2_ATOM_PREFIX "Tuple" +#define LV2_ATOM__URI LV2_ATOM_PREFIX "URI" +#define LV2_ATOM__URID LV2_ATOM_PREFIX "URID" +#define LV2_ATOM__Vector LV2_ATOM_PREFIX "Vector" +#define LV2_ATOM__atomTransfer LV2_ATOM_PREFIX "atomTransfer" +#define LV2_ATOM__beatTime LV2_ATOM_PREFIX "beatTime" +#define LV2_ATOM__bufferType LV2_ATOM_PREFIX "bufferType" +#define LV2_ATOM__childType LV2_ATOM_PREFIX "childType" +#define LV2_ATOM__eventTransfer LV2_ATOM_PREFIX "eventTransfer" +#define LV2_ATOM__frameTime LV2_ATOM_PREFIX "frameTime" +#define LV2_ATOM__supports LV2_ATOM_PREFIX "supports" +#define LV2_ATOM__timeUnit LV2_ATOM_PREFIX "timeUnit" + +#define LV2_ATOM_REFERENCE_TYPE 0 + +#ifdef __cplusplus +extern "C" { +#endif + +/** This expression will fail to compile if double does not fit in 64 bits. */ +typedef char lv2_atom_assert_double_fits_in_64_bits[ + ((sizeof(double) <= sizeof(uint64_t)) * 2) - 1]; + +/** + Return a pointer to the contents of an Atom. The "contents" of an atom + is the data past the complete type-specific header. + @param type The type of the atom, e.g. LV2_Atom_String. + @param atom A variable-sized atom. +*/ +#define LV2_ATOM_CONTENTS(type, atom) \ + ((uint8_t*)(atom) + sizeof(type)) + +/** + Const version of LV2_ATOM_CONTENTS. +*/ +#define LV2_ATOM_CONTENTS_CONST(type, atom) \ + ((const uint8_t*)(atom) + sizeof(type)) + +/** + Return a pointer to the body of an Atom. The "body" of an atom is the + data just past the LV2_Atom head (i.e. the same offset for all types). +*/ +#define LV2_ATOM_BODY(atom) LV2_ATOM_CONTENTS(LV2_Atom, atom) + +/** + Const version of LV2_ATOM_BODY. +*/ +#define LV2_ATOM_BODY_CONST(atom) LV2_ATOM_CONTENTS_CONST(LV2_Atom, atom) + +/** The header of an atom:Atom. */ +typedef struct { + uint32_t size; /**< Size in bytes, not including type and size. */ + uint32_t type; /**< Type of this atom (mapped URI). */ +} LV2_Atom; + +/** An atom:Int or atom:Bool. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + int32_t body; /**< Integer value. */ +} LV2_Atom_Int; + +/** An atom:Long. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + int64_t body; /**< Integer value. */ +} LV2_Atom_Long; + +/** An atom:Float. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + float body; /**< Floating point value. */ +} LV2_Atom_Float; + +/** An atom:Double. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + double body; /**< Floating point value. */ +} LV2_Atom_Double; + +/** An atom:Bool. May be cast to LV2_Atom. */ +typedef LV2_Atom_Int LV2_Atom_Bool; + +/** An atom:URID. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + uint32_t body; /**< URID. */ +} LV2_Atom_URID; + +/** An atom:String. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + /* Contents (a null-terminated UTF-8 string) follow here. */ +} LV2_Atom_String; + +/** The body of an atom:Literal. */ +typedef struct { + uint32_t datatype; /**< Datatype URID. */ + uint32_t lang; /**< Language URID. */ + /* Contents (a null-terminated UTF-8 string) follow here. */ +} LV2_Atom_Literal_Body; + +/** An atom:Literal. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + LV2_Atom_Literal_Body body; /**< Body. */ +} LV2_Atom_Literal; + +/** An atom:Tuple. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + /* Contents (a series of complete atoms) follow here. */ +} LV2_Atom_Tuple; + +/** The body of an atom:Vector. */ +typedef struct { + uint32_t child_size; /**< The size of each element in the vector. */ + uint32_t child_type; /**< The type of each element in the vector. */ + /* Contents (a series of packed atom bodies) follow here. */ +} LV2_Atom_Vector_Body; + +/** An atom:Vector. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + LV2_Atom_Vector_Body body; /**< Body. */ +} LV2_Atom_Vector; + +/** The body of an atom:Property (e.g. in an atom:Object). */ +typedef struct { + uint32_t key; /**< Key (predicate) (mapped URI). */ + uint32_t context; /**< Context URID (may be, and generally is, 0). */ + LV2_Atom value; /**< Value atom header. */ + /* Value atom body follows here. */ +} LV2_Atom_Property_Body; + +/** An atom:Property. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + LV2_Atom_Property_Body body; /**< Body. */ +} LV2_Atom_Property; + +/** The body of an atom:Object. May be cast to LV2_Atom. */ +typedef struct { + uint32_t id; /**< URID, or 0 for blank. */ + uint32_t otype; /**< Type URID (same as rdf:type, for fast dispatch). */ + /* Contents (a series of property bodies) follow here. */ +} LV2_Atom_Object_Body; + +/** An atom:Object. May be cast to LV2_Atom. */ +typedef struct { + LV2_Atom atom; /**< Atom header. */ + LV2_Atom_Object_Body body; /**< Body. */ +} LV2_Atom_Object; + +/** The header of an atom:Event. Note this type is NOT an LV2_Atom. */ +typedef struct { + /** Time stamp. Which type is valid is determined by context. */ + union { + int64_t frames; /**< Time in audio frames. */ + double beats; /**< Time in beats. */ + } time; + LV2_Atom body; /**< Event body atom header. */ + /* Body atom contents follow here. */ +} LV2_Atom_Event; + +/** + The body of an atom:Sequence (a sequence of events). + + The unit field is either a URID that described an appropriate time stamp + type, or may be 0 where a default stamp type is known. For + LV2_Descriptor::run(), the default stamp type is audio frames. + + The contents of a sequence is a series of LV2_Atom_Event, each aligned + to 64-bits, e.g.: +